|
15 | 15 | */ |
16 | 16 | package org.androidannotations.processing; |
17 | 17 |
|
18 | | -import static com.sun.codemodel.JExpr.TRUE; |
19 | | -import static com.sun.codemodel.JExpr._super; |
20 | 18 | import static com.sun.codemodel.JExpr.invoke; |
21 | 19 | import static com.sun.codemodel.JMod.PUBLIC; |
22 | 20 |
|
|
33 | 31 | import org.androidannotations.processing.EBeansHolder.Classes; |
34 | 32 | import org.androidannotations.rclass.IRClass; |
35 | 33 | import org.androidannotations.rclass.IRClass.Res; |
| 34 | + |
36 | 35 | import com.sun.codemodel.JBlock; |
37 | 36 | import com.sun.codemodel.JClass; |
38 | 37 | import com.sun.codemodel.JCodeModel; |
| 38 | +import com.sun.codemodel.JExpr; |
39 | 39 | import com.sun.codemodel.JFieldRef; |
40 | 40 | import com.sun.codemodel.JInvocation; |
41 | 41 | import com.sun.codemodel.JMethod; |
@@ -86,33 +86,48 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) { |
86 | 86 | returnType = codeModel.BOOLEAN; |
87 | 87 | } |
88 | 88 |
|
89 | | - JMethod method = holder.generatedClass.method(PUBLIC, returnType, "onCreateOptionsMenu"); |
90 | | - method.annotate(Override.class); |
91 | | - JVar menuParam = method.param(menuClass, "menu"); |
| 89 | + JBlock body = holder.onCreateOptionMenuMethodBody; |
| 90 | + JVar menuInflater = holder.onCreateOptionMenuMenuInflaterVariable; |
| 91 | + JVar menuParam = holder.onCreateOptionMenuMenuParam; |
92 | 92 |
|
93 | | - JBlock body = method.body(); |
| 93 | + if (body == null) { |
| 94 | + JMethod method = holder.generatedClass.method(PUBLIC, returnType, "onCreateOptionsMenu"); |
| 95 | + method.annotate(Override.class); |
94 | 96 |
|
95 | | - JVar menuInflater; |
96 | | - if (isFragment) { |
97 | | - menuInflater = method.param(menuInflaterClass, "inflater"); |
98 | | - } else { |
99 | | - menuInflater = body.decl(menuInflaterClass, "menuInflater", invoke(getMenuInflaterMethodName)); |
| 97 | + menuParam = method.param(menuClass, "menu"); |
| 98 | + |
| 99 | + JBlock methodBody = method.body(); |
| 100 | + |
| 101 | + if (isFragment) { |
| 102 | + menuInflater = method.param(menuInflaterClass, "inflater"); |
| 103 | + } else { |
| 104 | + menuInflater = methodBody.decl(menuInflaterClass, "menuInflater", invoke(getMenuInflaterMethodName)); |
| 105 | + } |
| 106 | + |
| 107 | + body = methodBody.block(); |
| 108 | + |
| 109 | + JInvocation superCall = invoke(JExpr._super(), method); |
| 110 | + superCall.arg(menuParam); |
| 111 | + |
| 112 | + if (isFragment) { |
| 113 | + superCall.arg(menuInflater); |
| 114 | + methodBody.add(superCall); |
| 115 | + } else { |
| 116 | + methodBody._return(superCall); |
| 117 | + } |
| 118 | + |
| 119 | + if (isFragment) { |
| 120 | + holder.init.body().invoke("setHasOptionsMenu").arg(JExpr.TRUE); |
| 121 | + } |
| 122 | + |
| 123 | + holder.onCreateOptionMenuMethodBody = body; |
| 124 | + holder.onCreateOptionMenuMenuInflaterVariable = menuInflater; |
| 125 | + holder.onCreateOptionMenuMenuParam = menuParam; |
100 | 126 | } |
101 | 127 |
|
102 | 128 | for (JFieldRef optionsMenuRefId : fieldRefs) { |
103 | 129 | body.invoke(menuInflater, "inflate").arg(optionsMenuRefId).arg(menuParam); |
104 | 130 | } |
105 | 131 |
|
106 | | - JInvocation superCall = invoke(_super(), method).arg(menuParam); |
107 | | - if (isFragment) { |
108 | | - superCall.arg(menuInflater); |
109 | | - body.add(superCall); |
110 | | - } else { |
111 | | - body._return(superCall); |
112 | | - } |
113 | | - |
114 | | - if (isFragment) { |
115 | | - holder.init.body().invoke("setHasOptionsMenu").arg(TRUE); |
116 | | - } |
117 | 132 | } |
118 | 133 | } |
0 commit comments