diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java
index b41c8ef9d3..895012d286 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeanHolder.java
@@ -114,6 +114,10 @@ public class EBeanHolder {
public JMethod findNativeFragmentByTag;
public JMethod findSupportFragmentByTag;
+ public JBlock onCreateOptionMenuMethodBody;
+ public JVar onCreateOptionMenuMenuInflaterVariable;
+ public JVar onCreateOptionMenuMenuParam;
+
private final EBeansHolder eBeansHolder;
public final Class extends Annotation> eBeanAnnotation;
diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OptionsMenuProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OptionsMenuProcessor.java
index 45c3935479..8b1972da14 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OptionsMenuProcessor.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OptionsMenuProcessor.java
@@ -15,8 +15,6 @@
*/
package org.androidannotations.processing;
-import static com.sun.codemodel.JExpr.TRUE;
-import static com.sun.codemodel.JExpr._super;
import static com.sun.codemodel.JExpr.invoke;
import static com.sun.codemodel.JMod.PUBLIC;
@@ -33,9 +31,11 @@
import org.androidannotations.processing.EBeansHolder.Classes;
import org.androidannotations.rclass.IRClass;
import org.androidannotations.rclass.IRClass.Res;
+
import com.sun.codemodel.JBlock;
import com.sun.codemodel.JClass;
import com.sun.codemodel.JCodeModel;
+import com.sun.codemodel.JExpr;
import com.sun.codemodel.JFieldRef;
import com.sun.codemodel.JInvocation;
import com.sun.codemodel.JMethod;
@@ -86,33 +86,48 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
returnType = codeModel.BOOLEAN;
}
- JMethod method = holder.generatedClass.method(PUBLIC, returnType, "onCreateOptionsMenu");
- method.annotate(Override.class);
- JVar menuParam = method.param(menuClass, "menu");
+ JBlock body = holder.onCreateOptionMenuMethodBody;
+ JVar menuInflater = holder.onCreateOptionMenuMenuInflaterVariable;
+ JVar menuParam = holder.onCreateOptionMenuMenuParam;
- JBlock body = method.body();
+ if (body == null) {
+ JMethod method = holder.generatedClass.method(PUBLIC, returnType, "onCreateOptionsMenu");
+ method.annotate(Override.class);
- JVar menuInflater;
- if (isFragment) {
- menuInflater = method.param(menuInflaterClass, "inflater");
- } else {
- menuInflater = body.decl(menuInflaterClass, "menuInflater", invoke(getMenuInflaterMethodName));
+ menuParam = method.param(menuClass, "menu");
+
+ JBlock methodBody = method.body();
+
+ if (isFragment) {
+ menuInflater = method.param(menuInflaterClass, "inflater");
+ } else {
+ menuInflater = methodBody.decl(menuInflaterClass, "menuInflater", invoke(getMenuInflaterMethodName));
+ }
+
+ body = methodBody.block();
+
+ JInvocation superCall = invoke(JExpr._super(), method);
+ superCall.arg(menuParam);
+
+ if (isFragment) {
+ superCall.arg(menuInflater);
+ methodBody.add(superCall);
+ } else {
+ methodBody._return(superCall);
+ }
+
+ if (isFragment) {
+ holder.init.body().invoke("setHasOptionsMenu").arg(JExpr.TRUE);
+ }
+
+ holder.onCreateOptionMenuMethodBody = body;
+ holder.onCreateOptionMenuMenuInflaterVariable = menuInflater;
+ holder.onCreateOptionMenuMenuParam = menuParam;
}
for (JFieldRef optionsMenuRefId : fieldRefs) {
body.invoke(menuInflater, "inflate").arg(optionsMenuRefId).arg(menuParam);
}
- JInvocation superCall = invoke(_super(), method).arg(menuParam);
- if (isFragment) {
- superCall.arg(menuInflater);
- body.add(superCall);
- } else {
- body._return(superCall);
- }
-
- if (isFragment) {
- holder.init.body().invoke("setHasOptionsMenu").arg(TRUE);
- }
}
}
diff --git a/AndroidAnnotations/functional-test-1-5/AndroidManifest.xml b/AndroidAnnotations/functional-test-1-5/AndroidManifest.xml
index c1f95e9191..9a17c03c25 100644
--- a/AndroidAnnotations/functional-test-1-5/AndroidManifest.xml
+++ b/AndroidAnnotations/functional-test-1-5/AndroidManifest.xml
@@ -58,6 +58,7 @@