|
15 | 15 | */ |
16 | 16 | package org.androidannotations.internal.core.handler; |
17 | 17 |
|
18 | | -import static com.helger.jcodemodel.JExpr.ref; |
19 | 18 | import static org.androidannotations.helper.ModelConstants.classSuffix; |
20 | 19 |
|
21 | 20 | import javax.lang.model.element.Element; |
|
25 | 24 | import org.androidannotations.annotations.App; |
26 | 25 | import org.androidannotations.annotations.EApplication; |
27 | 26 | import org.androidannotations.handler.BaseAnnotationHandler; |
| 27 | +import org.androidannotations.handler.MethodInjectionHandler; |
| 28 | +import org.androidannotations.helper.InjectHelper; |
28 | 29 | import org.androidannotations.holder.EApplicationHolder; |
29 | 30 | import org.androidannotations.holder.EComponentHolder; |
30 | 31 |
|
31 | 32 | import com.helger.jcodemodel.AbstractJClass; |
| 33 | +import com.helger.jcodemodel.IJAssignmentTarget; |
| 34 | +import com.helger.jcodemodel.JBlock; |
32 | 35 |
|
33 | | -public class AppHandler extends BaseAnnotationHandler<EComponentHolder> { |
| 36 | +public class AppHandler extends BaseAnnotationHandler<EComponentHolder>implements MethodInjectionHandler<EComponentHolder> { |
| 37 | + |
| 38 | + private final InjectHelper<EComponentHolder> injectHelper; |
34 | 39 |
|
35 | 40 | public AppHandler(AndroidAnnotationsEnvironment environment) { |
36 | 41 | super(App.class, environment); |
| 42 | + injectHelper = new InjectHelper<>(validatorHelper, this); |
37 | 43 | } |
38 | 44 |
|
39 | 45 | @Override |
40 | 46 | public void validate(Element element, ElementValidation validation) { |
41 | | - validatorHelper.enclosingElementHasEnhancedComponentAnnotation(element, validation); |
42 | | - |
43 | | - validatorHelper.typeHasAnnotation(EApplication.class, element, validation); |
| 47 | + injectHelper.validate(App.class, element, validation); |
44 | 48 |
|
45 | 49 | validatorHelper.isNotPrivate(element, validation); |
| 50 | + |
| 51 | + Element param = injectHelper.getParam(element); |
| 52 | + validatorHelper.typeHasAnnotation(EApplication.class, param, validation); |
46 | 53 | } |
47 | 54 |
|
48 | 55 | @Override |
49 | 56 | public void process(Element element, EComponentHolder holder) { |
50 | | - String fieldName = element.getSimpleName().toString(); |
51 | | - String applicationQualifiedName = element.asType().toString(); |
| 57 | + injectHelper.process(element, holder); |
| 58 | + } |
| 59 | + |
| 60 | + @Override |
| 61 | + public JBlock getInvocationBlock(EComponentHolder holder) { |
| 62 | + return holder.getInitBodyInjectionBlock(); |
| 63 | + } |
| 64 | + |
| 65 | + @Override |
| 66 | + public void assignValue(JBlock targetBlock, IJAssignmentTarget fieldRef, EComponentHolder holder, Element element, Element param) { |
| 67 | + String applicationQualifiedName = param.asType().toString(); |
52 | 68 | AbstractJClass applicationClass = getJClass(applicationQualifiedName + classSuffix()); |
53 | 69 |
|
54 | | - holder.getInitBodyInjectionBlock().assign(ref(fieldName), applicationClass.staticInvoke(EApplicationHolder.GET_APPLICATION_INSTANCE)); |
| 70 | + targetBlock.add(fieldRef.assign(applicationClass.staticInvoke(EApplicationHolder.GET_APPLICATION_INSTANCE))); |
| 71 | + } |
| 72 | + |
| 73 | + @Override |
| 74 | + public void validateEnclosingElement(Element element, ElementValidation valid) { |
| 75 | + validatorHelper.enclosingElementHasEnhancedComponentAnnotation(element, valid); |
55 | 76 | } |
56 | 77 | } |
0 commit comments