Skip to content

Commit dc2b131

Browse files
committed
@roboguice is now fully implemented with CodeModel
1 parent 9684816 commit dc2b131

1 file changed

Lines changed: 78 additions & 14 deletions

File tree

AndroidAnnotations/src/main/java/com/googlecode/androidannotations/processing/RoboGuiceProcessor.java

Lines changed: 78 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,13 @@
4040
import com.sun.codemodel.JBlock;
4141
import com.sun.codemodel.JClass;
4242
import com.sun.codemodel.JCodeModel;
43+
import com.sun.codemodel.JExpr;
4344
import com.sun.codemodel.JExpression;
4445
import com.sun.codemodel.JFieldVar;
4546
import com.sun.codemodel.JInvocation;
4647
import com.sun.codemodel.JMethod;
4748
import com.sun.codemodel.JMod;
49+
import com.sun.codemodel.JTryBlock;
4850
import com.sun.codemodel.JType;
4951
import com.sun.codemodel.JVar;
5052

@@ -94,20 +96,11 @@ public void process(Element element, JCodeModel codeModel, ActivitiesHolder acti
9496
onResumeMethod(codeModel, holder, scope, eventManager);
9597
onPauseMethod(codeModel, holder, scope, eventManager);
9698
onNewIntentMethod(codeModel, holder, scope, eventManager);
97-
98-
/*
99-
* TODO Missing methods:
100-
*
101-
* onStop
102-
*
103-
* onDestroy
104-
*
105-
* onConfigurationChanged
106-
*
107-
* onContentChanged
108-
*
109-
* onActivityResult
110-
*/
99+
onStopMethod(codeModel, holder, scope, eventManager);
100+
onDestroyMethod(codeModel, holder, scope, eventManager);
101+
onConfigurationChangedMethod(codeModel, holder, scope, eventManager);
102+
onContentChangedMethod(codeModel, holder, scope, eventManager);
103+
onActivityResultMethod(codeModel, holder, scope, eventManager);
111104

112105
JMethod getInjectorMethod = getInjectorMethod(holder);
113106

@@ -178,6 +171,77 @@ private void fireEvent(ActivityHolder holder, JFieldVar eventManager, JBlock bod
178171
}
179172
body.invoke(eventManager, "fire").arg(newEvent);
180173
}
174+
175+
private void onStopMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) {
176+
JMethod method = holder.activity.method(JMod.PROTECTED, codeModel.VOID, "onStop");
177+
method.annotate(Override.class);
178+
JBlock body = method.body();
179+
body.invoke(scope, "enter").arg(_this());
180+
181+
JTryBlock tryBlock = body._try();
182+
fireEvent(holder, eventManager, tryBlock.body(), "roboguice.activity.event.OnStopEvent");
183+
JBlock finallyBody = tryBlock._finally();
184+
185+
finallyBody.invoke(scope, "exit").arg(_this());
186+
finallyBody.invoke(_super(), method);
187+
}
188+
189+
private void onDestroyMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) {
190+
JMethod method = holder.activity.method(JMod.PROTECTED, codeModel.VOID, "onDestroy");
191+
method.annotate(Override.class);
192+
JBlock body = method.body();
193+
body.invoke(scope, "enter").arg(_this());
194+
195+
JTryBlock tryBlock = body._try();
196+
fireEvent(holder, eventManager, tryBlock.body(), "roboguice.activity.event.OnDestroyEvent");
197+
JBlock finallyBody = tryBlock._finally();
198+
199+
finallyBody.invoke(eventManager, "clear").arg(_this());
200+
finallyBody.invoke(scope, "exit").arg(_this());
201+
finallyBody.invoke(scope, "dispose").arg(_this());
202+
finallyBody.invoke(_super(), method);
203+
}
204+
205+
private void onConfigurationChangedMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) {
206+
JMethod method = holder.activity.method(JMod.PUBLIC, codeModel.VOID, "onConfigurationChanged");
207+
method.annotate(Override.class);
208+
JClass configurationClass = holder.refClass("android.content.res.Configuration");
209+
JVar newConfig = method.param(configurationClass, "newConfig");
210+
211+
JBlock body = method.body();
212+
JVar currentConfig = body.decl(configurationClass, "currentConfig", JExpr.invoke("getResources").invoke("getConfiguration"));
213+
214+
body.invoke(_super(), method).arg(newConfig);
215+
fireEvent(holder, eventManager, body, "roboguice.activity.event.OnConfigurationChangedEvent", currentConfig, newConfig);
216+
}
217+
218+
private void onContentChangedMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) {
219+
JMethod method = holder.activity.method(JMod.PUBLIC, codeModel.VOID, "onContentChanged");
220+
method.annotate(Override.class);
221+
JBlock body = method.body();
222+
body.invoke(_super(), method);
223+
fireEvent(holder, eventManager, body, "roboguice.activity.event.OnContentChangedEvent");
224+
}
225+
226+
private void onActivityResultMethod(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) {
227+
JMethod method = holder.activity.method(JMod.PROTECTED, codeModel.VOID, "onActivityResult");
228+
method.annotate(Override.class);
229+
JVar requestCode = method.param(codeModel.INT, "requestCode");
230+
JVar resultCode = method.param(codeModel.INT, "resultCode");
231+
JVar data = method.param(holder.refClass("android.content.Intent"), "data");
232+
233+
JBlock body = method.body();
234+
235+
body.invoke(_super(), method).arg(requestCode).arg(resultCode).arg(data);
236+
237+
body.invoke(scope, "enter").arg(_this());
238+
239+
JTryBlock tryBlock = body._try();
240+
fireEvent(holder, eventManager, tryBlock.body(), "roboguice.activity.event.OnActivityResultEvent", requestCode, resultCode, data);
241+
242+
JBlock finallyBody = tryBlock._finally();
243+
finallyBody.invoke(scope, "exit").arg(_this());
244+
}
181245

182246
private void setContentViewMethods(JCodeModel codeModel, ActivityHolder holder, JFieldVar scope, JFieldVar eventManager) {
183247

0 commit comments

Comments
 (0)