Skip to content

Commit 6c2765d

Browse files
committed
allow to inject menu into @InjectMenu annotated method
1 parent dfec37e commit 6c2765d

2 files changed

Lines changed: 27 additions & 11 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/InjectMenu.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,6 @@
4646
* </blockquote>
4747
*/
4848
@Retention(RetentionPolicy.CLASS)
49-
@Target(ElementType.FIELD)
49+
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
5050
public @interface InjectMenu {
5151
}

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

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,35 +21,51 @@
2121
import org.androidannotations.ElementValidation;
2222
import org.androidannotations.annotations.InjectMenu;
2323
import org.androidannotations.handler.BaseAnnotationHandler;
24+
import org.androidannotations.handler.MethodInjectionHandler;
25+
import org.androidannotations.helper.InjectHelper;
2426
import org.androidannotations.holder.HasOptionsMenu;
2527

28+
import com.helger.jcodemodel.IJAssignmentTarget;
2629
import com.helger.jcodemodel.JBlock;
27-
import com.helger.jcodemodel.JExpr;
28-
import com.helger.jcodemodel.JVar;
2930

30-
public class InjectMenuHandler extends BaseAnnotationHandler<HasOptionsMenu> {
31+
public class InjectMenuHandler extends BaseAnnotationHandler<HasOptionsMenu>implements MethodInjectionHandler<HasOptionsMenu> {
32+
33+
private final InjectHelper<HasOptionsMenu> injectHelper;
3134

3235
public InjectMenuHandler(AndroidAnnotationsEnvironment environment) {
3336
super(InjectMenu.class, environment);
37+
injectHelper = new InjectHelper<>(validatorHelper, this);
3438
}
3539

3640
@Override
3741
public void validate(Element element, ElementValidation valid) {
38-
validatorHelper.enclosingElementHasEActivityOrEFragment(element, valid);
42+
injectHelper.validate(InjectMenu.class, element, valid);
3943

40-
validatorHelper.isDeclaredType(element, valid);
44+
Element param = injectHelper.getParam(element);
45+
validatorHelper.isDeclaredType(param, valid);
4146

42-
validatorHelper.extendsMenu(element, valid);
47+
validatorHelper.extendsMenu(param, valid);
4348

4449
validatorHelper.isNotPrivate(element, valid);
4550
}
4651

4752
@Override
4853
public void process(Element element, HasOptionsMenu holder) {
49-
String fieldName = element.getSimpleName().toString();
50-
JBlock body = holder.getOnCreateOptionsMenuMethodBody();
51-
JVar menuParam = holder.getOnCreateOptionsMenuMenuParam();
54+
injectHelper.process(element, holder);
55+
}
56+
57+
@Override
58+
public JBlock getInvocationBlock(HasOptionsMenu holder) {
59+
return holder.getOnCreateOptionsMenuMethodBody();
60+
}
5261

53-
body.assign(JExpr._this().ref(fieldName), menuParam);
62+
@Override
63+
public void assignValue(JBlock targetBlock, IJAssignmentTarget fieldRef, HasOptionsMenu holder, Element element, Element param) {
64+
targetBlock.add(fieldRef.assign(holder.getOnCreateOptionsMenuMenuParam()));
65+
}
66+
67+
@Override
68+
public void validateEnclosingElement(Element element, ElementValidation valid) {
69+
validatorHelper.enclosingElementHasEActivityOrEFragment(element, valid);
5470
}
5571
}

0 commit comments

Comments
 (0)