|
40 | 40 | import org.androidannotations.annotations.Extra; |
41 | 41 | import org.androidannotations.helper.APTCodeModelHelper; |
42 | 42 | import org.androidannotations.helper.CaseHelper; |
| 43 | +import org.androidannotations.processing.EBeanHolder.GeneratedClassType; |
43 | 44 | import org.androidannotations.processing.EBeansHolder.Classes; |
44 | 45 |
|
45 | 46 | import com.sun.codemodel.JBlock; |
@@ -93,6 +94,10 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) { |
93 | 94 |
|
94 | 95 | if (holder.extras == null) { |
95 | 96 | injectExtras(holder, codeModel); |
| 97 | + injectExtrasSimple(holder, codeModel); |
| 98 | + injectOrOverrideSetIntent(holder, codeModel); |
| 99 | + injectExtrasOnInit(holder); |
| 100 | + injectExtrasOnStartCommand(holder); |
96 | 101 | } |
97 | 102 |
|
98 | 103 | String staticFieldName; |
@@ -178,43 +183,73 @@ private void generateCastMethod(JCodeModel codeModel, EBeanHolder holder) { |
178 | 183 | } |
179 | 184 |
|
180 | 185 | /** |
181 | | - * Adds call to injectExtras_() in onCreate and setIntent() methods. |
| 186 | + * Adds call to injectExtras_(Bundle) in onStartCommand and setIntent() |
| 187 | + * methods methods. |
182 | 188 | */ |
183 | 189 | private void injectExtras(EBeanHolder holder, JCodeModel codeModel) { |
184 | | - |
185 | 190 | Classes classes = holder.classes(); |
186 | 191 |
|
187 | | - JMethod injectExtrasMethod = holder.generatedClass.method(PRIVATE, codeModel.VOID, "injectExtras_"); |
| 192 | + holder.injectExtrasMethod = holder.generatedClass.method(PRIVATE, codeModel.VOID, "injectExtras_"); |
| 193 | + holder.extras = holder.injectExtrasMethod.param(classes.BUNDLE, "extras_"); |
| 194 | + |
| 195 | + JBlock injectExtrasBody = holder.injectExtrasMethod.body(); |
| 196 | + |
| 197 | + holder.extrasNotNullBlock = injectExtrasBody._if(holder.extras.ne(_null()))._then(); |
| 198 | + } |
| 199 | + |
| 200 | + /** |
| 201 | + * Adds call to injectExtras_() in onCreate method. |
| 202 | + */ |
| 203 | + private void injectExtrasSimple(EBeanHolder holder, JCodeModel codeModel) { |
| 204 | + if (holder.classType == GeneratedClassType.SERVICE) { |
| 205 | + return; |
| 206 | + } |
188 | 207 |
|
189 | | - overrideSetIntent(holder, codeModel, injectExtrasMethod); |
| 208 | + Classes classes = holder.classes(); |
190 | 209 |
|
191 | | - injectExtrasOnInit(holder, classes.INTENT, injectExtrasMethod); |
| 210 | + holder.injectExtrasSimpleMethod = holder.generatedClass.method(PRIVATE, codeModel.VOID, "injectExtras_"); |
192 | 211 |
|
193 | | - JBlock injectExtrasBody = injectExtrasMethod.body(); |
| 212 | + JBlock injectExtrasBody = holder.injectExtrasSimpleMethod.body(); |
194 | 213 |
|
195 | 214 | JVar intent = injectExtrasBody.decl(classes.INTENT, "intent_", invoke("getIntent")); |
196 | 215 |
|
197 | | - holder.extras = injectExtrasBody.decl(classes.BUNDLE, "extras_"); |
198 | | - holder.extras.init(intent.invoke("getExtras")); |
| 216 | + JVar extras = injectExtrasBody.decl(classes.BUNDLE, "extras_"); |
| 217 | + extras.init(intent.invoke("getExtras")); |
199 | 218 |
|
200 | | - holder.extrasNotNullBlock = injectExtrasBody._if(holder.extras.ne(_null()))._then(); |
| 219 | + injectExtrasBody.invoke(holder.injectExtrasMethod).arg(extras); |
201 | 220 | } |
202 | 221 |
|
203 | | - private void overrideSetIntent(EBeanHolder holder, JCodeModel codeModel, JMethod initIntentMethod) { |
| 222 | + private void injectOrOverrideSetIntent(EBeanHolder holder, JCodeModel codeModel) { |
204 | 223 | if (holder.intentBuilderClass != null) { |
205 | | - |
206 | 224 | JMethod setIntentMethod = holder.generatedClass.method(PUBLIC, codeModel.VOID, "setIntent"); |
207 | | - setIntentMethod.annotate(Override.class); |
208 | 225 | JVar methodParam = setIntentMethod.param(holder.classes().INTENT, "newIntent"); |
209 | 226 |
|
210 | 227 | JBlock setIntentBody = setIntentMethod.body(); |
211 | 228 |
|
212 | | - setIntentBody.invoke(_super(), setIntentMethod).arg(methodParam); |
213 | | - setIntentBody.invoke(initIntentMethod); |
| 229 | + // Override only if it's an activity |
| 230 | + if (holder.classType == GeneratedClassType.ACTIVITY) { |
| 231 | + setIntentMethod.annotate(Override.class); |
| 232 | + setIntentBody.invoke(_super(), setIntentMethod).arg(methodParam); |
| 233 | + } |
| 234 | + |
| 235 | + JInvocation extras = methodParam.invoke("getExtras"); |
| 236 | + setIntentBody.invoke(holder.injectExtrasMethod).arg(extras); |
214 | 237 | } |
215 | 238 | } |
216 | 239 |
|
217 | | - private void injectExtrasOnInit(EBeanHolder holder, JClass intentClass, JMethod injectExtrasMethod) { |
218 | | - holder.init.body().invoke(injectExtrasMethod); |
| 240 | + private void injectExtrasOnInit(EBeanHolder holder) { |
| 241 | + if (holder.classType == GeneratedClassType.ACTIVITY) { |
| 242 | + holder.init.body().invoke(holder.injectExtrasMethod); |
| 243 | + } |
| 244 | + } |
| 245 | + |
| 246 | + private void injectExtrasOnStartCommand(EBeanHolder holder) { |
| 247 | + if (holder.classType == GeneratedClassType.SERVICE && holder.onStartCommandMethod != null) { |
| 248 | + JVar intent = holder.onStartCommandMethodIntent; |
| 249 | + JBlock body = holder.initStartCommand.body(); |
| 250 | + |
| 251 | + body._if(intent.ne(JExpr._null())) // |
| 252 | + ._then().invoke(holder.injectExtrasMethod).arg(intent.invoke("getExtras")); |
| 253 | + } |
219 | 254 | } |
220 | 255 | } |
0 commit comments