|
22 | 22 | import javax.annotation.processing.ProcessingEnvironment; |
23 | 23 | import javax.lang.model.element.Element; |
24 | 24 | import javax.lang.model.element.ExecutableElement; |
| 25 | +import javax.lang.model.element.TypeElement; |
25 | 26 | import javax.lang.model.element.VariableElement; |
26 | 27 | import javax.lang.model.type.TypeMirror; |
27 | 28 |
|
| 29 | +import org.androidannotations.helper.APTCodeModelHelper; |
28 | 30 | import org.androidannotations.helper.AndroidManifest; |
29 | 31 | import org.androidannotations.helper.IdAnnotationHelper; |
30 | 32 | import org.androidannotations.helper.IdValidatorHelper; |
|
37 | 39 | import com.sun.codemodel.JBlock; |
38 | 40 | import com.sun.codemodel.JClass; |
39 | 41 | import com.sun.codemodel.JDefinedClass; |
| 42 | +import com.sun.codemodel.JExpr; |
40 | 43 | import com.sun.codemodel.JExpression; |
41 | 44 | import com.sun.codemodel.JFieldRef; |
42 | 45 | import com.sun.codemodel.JInvocation; |
43 | 46 | import com.sun.codemodel.JMethod; |
| 47 | +import com.sun.codemodel.JVar; |
44 | 48 |
|
45 | 49 | public abstract class AbstractListenerHandler<T extends GeneratedClassHolder> extends BaseAnnotationHandler<T> { |
46 | 50 |
|
| 51 | + private final APTCodeModelHelper codeModelHelper = new APTCodeModelHelper(); |
47 | 52 | private IdAnnotationHelper helper; |
48 | 53 | private T holder; |
49 | 54 | private String methodName; |
@@ -100,6 +105,22 @@ public void process(Element element, T holder) { |
100 | 105 | assignListeners(holder, idsRefs, listenerAnonymousClass); |
101 | 106 | } |
102 | 107 |
|
| 108 | + protected final JExpression castArgumentIfNecessary(T holder, String baseType, JVar param, Element element) { |
| 109 | + JExpression argument = param; |
| 110 | + TypeMirror typeMirror = element.asType(); |
| 111 | + if (!baseType.equals(typeMirror.toString())) { |
| 112 | + JClass typeMirrorToJClass = codeModelHelper.typeMirrorToJClass(typeMirror, holder); |
| 113 | + argument = JExpr.cast(typeMirrorToJClass, param); |
| 114 | + } |
| 115 | + return argument; |
| 116 | + } |
| 117 | + |
| 118 | + protected final boolean isTypeOrSubclass(String baseType, Element element) { |
| 119 | + TypeMirror typeMirror = element.asType(); |
| 120 | + TypeElement typeElement = helper.typeElementFromQualifiedName(baseType); |
| 121 | + return helper.isSubtype(typeMirror, typeElement.asType()); |
| 122 | + } |
| 123 | + |
103 | 124 | protected abstract void assignListeners(T holder, List<JFieldRef> idsRefs, JDefinedClass listenerAnonymousClass); |
104 | 125 |
|
105 | 126 | protected abstract void makeCall(JBlock listenerMethodBody, JInvocation call, TypeMirror returnType); |
|
0 commit comments