Skip to content

Commit 2137099

Browse files
committed
allow to inject application class into @app annotated method
1 parent d91e71d commit 2137099

2 files changed

Lines changed: 30 additions & 9 deletions

File tree

  • AndroidAnnotations/androidannotations-core
    • androidannotations-api/src/main/java/org/androidannotations/annotations
    • androidannotations/src/main/java/org/androidannotations/internal/core/handler

‎AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/App.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,6 @@
5050
* @see EApplication
5151
*/
5252
@Retention(RetentionPolicy.CLASS)
53-
@Target(ElementType.FIELD)
53+
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
5454
public @interface App {
5555
}

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AppHandler.java‎

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.androidannotations.internal.core.handler;
1717

18-
import static com.helger.jcodemodel.JExpr.ref;
1918
import static org.androidannotations.helper.ModelConstants.classSuffix;
2019

2120
import javax.lang.model.element.Element;
@@ -25,32 +24,54 @@
2524
import org.androidannotations.annotations.App;
2625
import org.androidannotations.annotations.EApplication;
2726
import org.androidannotations.handler.BaseAnnotationHandler;
27+
import org.androidannotations.handler.MethodInjectionHandler;
28+
import org.androidannotations.helper.InjectHelper;
2829
import org.androidannotations.holder.EApplicationHolder;
2930
import org.androidannotations.holder.EComponentHolder;
3031

3132
import com.helger.jcodemodel.AbstractJClass;
33+
import com.helger.jcodemodel.IJAssignmentTarget;
34+
import com.helger.jcodemodel.JBlock;
3235

33-
public class AppHandler extends BaseAnnotationHandler<EComponentHolder> {
36+
public class AppHandler extends BaseAnnotationHandler<EComponentHolder>implements MethodInjectionHandler<EComponentHolder> {
37+
38+
private final InjectHelper<EComponentHolder> injectHelper;
3439

3540
public AppHandler(AndroidAnnotationsEnvironment environment) {
3641
super(App.class, environment);
42+
injectHelper = new InjectHelper<>(validatorHelper, this);
3743
}
3844

3945
@Override
4046
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);
4448

4549
validatorHelper.isNotPrivate(element, validation);
50+
51+
Element param = injectHelper.getParam(element);
52+
validatorHelper.typeHasAnnotation(EApplication.class, param, validation);
4653
}
4754

4855
@Override
4956
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();
5268
AbstractJClass applicationClass = getJClass(applicationQualifiedName + classSuffix());
5369

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);
5576
}
5677
}

0 commit comments

Comments
 (0)