4949
5050public class RoboGuiceHandler extends BaseAnnotationHandler <EActivityHolder > {
5151
52- private APTCodeModelHelper codeModelHelper = new APTCodeModelHelper ();
52+ private APTCodeModelHelper codeModelHelper = new APTCodeModelHelper ();
5353
5454 public RoboGuiceHandler (ProcessingEnvironment processingEnvironment ) {
5555 super (RoboGuice .class , processingEnvironment );
@@ -66,25 +66,25 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa
6666 public void process (Element element , EActivityHolder holder ) {
6767 RoboGuiceHolder roboGuiceHolder = holder .getRoboGuiceHolder ();
6868
69- holder .getGeneratedClass ()._implements (classes ().INJECTOR_PROVIDER );
69+ holder .getGeneratedClass ()._implements (classes ().ROBO_CONTEXT );
7070
71- JFieldVar scope = roboGuiceHolder .getScopeField ();
71+ JFieldVar scopedObjects = roboGuiceHolder .getScopedObjectsField ();
7272 JFieldVar eventManager = roboGuiceHolder .getEventManagerField ();
73- JMethod getInjector = roboGuiceHolder .getGetInjector ();
73+ roboGuiceHolder .getContentViewListenerField ();
7474 listenerFields (element , holder );
7575
76- beforeCreateMethod (holder , scope , eventManager , getInjector );
77- afterSetContentView (holder , scope , eventManager );
78- onRestartMethod (roboGuiceHolder , scope , eventManager );
79- onStartMethod (roboGuiceHolder , scope , eventManager );
80- onResumeMethod (roboGuiceHolder , scope , eventManager );
76+ beforeCreateMethod (holder , eventManager );
77+ onRestartMethod (roboGuiceHolder , eventManager );
78+ onStartMethod (roboGuiceHolder , eventManager );
79+ onResumeMethod (roboGuiceHolder , eventManager );
8180 onPauseMethod (roboGuiceHolder , eventManager );
82- onNewIntentMethod (roboGuiceHolder , scope , eventManager );
83- onStopMethod (roboGuiceHolder , scope , eventManager );
84- onDestroyMethod (roboGuiceHolder , scope , eventManager );
81+ onNewIntentMethod (roboGuiceHolder , eventManager );
82+ onStopMethod (roboGuiceHolder , eventManager );
83+ onDestroyMethod (roboGuiceHolder , eventManager );
8584 onConfigurationChangedMethod (roboGuiceHolder , eventManager );
8685 onContentChangedMethod (roboGuiceHolder , eventManager );
87- onActivityResultMethod (roboGuiceHolder , scope , eventManager );
86+ onActivityResultMethod (roboGuiceHolder , eventManager );
87+ getScopedObjectMap (holder , scopedObjects );
8888 }
8989
9090 private void listenerFields (Element element , EActivityHolder holder ) {
@@ -130,39 +130,25 @@ private List<String> extractListenerClasses(Element activityElement) {
130130 return new ArrayList <String >(0 );
131131 }
132132
133- private void beforeCreateMethod (EActivityHolder holder , JFieldVar scope , JFieldVar eventManager , JMethod getInjector ) {
133+ private void beforeCreateMethod (EActivityHolder holder , JFieldVar eventManager ) {
134134 JBlock body = holder .getInitBody ();
135- JVar injector = body .decl (classes ().INJECTOR , "injector_" , invoke (getInjector ));
136- body .assign (scope , invoke (injector , "getInstance" ).arg (classes ().CONTEXT_SCOPE .dotclass ()));
137- body .invoke (scope , "enter" ).arg (_this ());
138- body .invoke (injector , "injectMembers" ).arg (_this ());
135+ JVar injector = body .decl (classes ().INJECTOR , "injector_" , classes ().ROBO_GUICE .staticInvoke ("getInjector" ).arg (_this ()));
139136 body .assign (eventManager , invoke (injector , "getInstance" ).arg (classes ().EVENT_MANAGER .dotclass ()));
137+ injector .invoke ("injectMembersWithoutViews" ).arg (_this ());
140138 fireEvent (eventManager , body , classes ().ON_CREATE_EVENT , holder .getInitSavedInstanceParam ());
141139 }
142140
143- private void afterSetContentView (EActivityHolder holder , JFieldVar scope , JFieldVar eventManager ) {
144- JBlock onViewChanged = holder .getOnViewChangedBody ();
145- onViewChanged .invoke (scope , "injectViews" );
146- fireEvent (eventManager , onViewChanged , classes ().ON_CONTENT_VIEW_AVAILABLE_EVENT );
147- }
148-
149- private void onRestartMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
150- JBlock onRestartBeforeSuperBlock = holder .getOnRestartBeforeSuperBlock ();
151- onRestartBeforeSuperBlock .invoke (scope , "enter" ).arg (_this ());
141+ private void onRestartMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
152142 JBlock onRestartAfterSuperBlock = holder .getOnRestartAfterSuperBlock ();
153143 fireEvent (eventManager , onRestartAfterSuperBlock , classes ().ON_RESTART_EVENT );
154144 }
155145
156- private void onStartMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
157- JBlock onStartBeforeSuperBlock = holder .getOnStartBeforeSuperBlock ();
158- onStartBeforeSuperBlock .invoke (scope , "enter" ).arg (_this ());
146+ private void onStartMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
159147 JBlock onStartAfterSuperBlock = holder .getOnStartAfterSuperBlock ();
160148 fireEvent (eventManager , onStartAfterSuperBlock , classes ().ON_START_EVENT );
161149 }
162150
163- private void onResumeMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
164- JBlock onResumeBeforeSuperBlock = holder .getOnResumeBeforeSuperBlock ();
165- onResumeBeforeSuperBlock .invoke (scope , "enter" ).arg (_this ());
151+ private void onResumeMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
166152 JBlock onResumeAfterSuperBlock = holder .getOnResumeAfterSuperBlock ();
167153 fireEvent (eventManager , onResumeAfterSuperBlock , classes ().ON_RESUME_EVENT );
168154 }
@@ -172,42 +158,37 @@ private void onPauseMethod(RoboGuiceHolder holder, JFieldVar eventManager) {
172158 fireEvent (eventManager , onPauseAfterSuperBlock , classes ().ON_PAUSE_EVENT );
173159 }
174160
175- private void onNewIntentMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
161+ private void onNewIntentMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
176162 JBlock onNewIntentAfterSuperBlock = holder .getOnNewIntentAfterSuperBlock ();
177- onNewIntentAfterSuperBlock .invoke (scope , "enter" ).arg (_this ());
178163 fireEvent (eventManager , onNewIntentAfterSuperBlock , classes ().ON_NEW_INTENT_EVENT );
179164 }
180165
181- private void onStopMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
166+ private void onStopMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
182167 JBlock onStopBlock = new JBlock (false , false );
183- onStopBlock .invoke (scope , "enter" ).arg (_this ());
184168
185169 JTryBlock tryBlock = onStopBlock ._try ();
186170 fireEvent (eventManager , tryBlock .body (), classes ().ON_STOP_EVENT );
187171 JBlock finallyBody = tryBlock ._finally ();
188172
189- finallyBody .invoke (scope , "exit" ).arg (_this ());
190173 finallyBody .invoke (_super (), "onStop" );
191174
192- JMethod onStop = holder .getOnStop ();
193- codeModelHelper .replaceSuperCall (onStop , onStopBlock );
175+ JMethod onStop = holder .getOnStop ();
176+ codeModelHelper .replaceSuperCall (onStop , onStopBlock );
194177 }
195178
196- private void onDestroyMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
197- JBlock onDestroyBlock = new JBlock (false , false );
198- onDestroyBlock .invoke (scope , "enter" ).arg (_this ());
179+ private void onDestroyMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
180+ JBlock onDestroyBlock = new JBlock (false , false );
199181
200182 JTryBlock tryBlock = onDestroyBlock ._try ();
201183 fireEvent (eventManager , tryBlock .body (), classes ().ON_DESTROY_EVENT );
202184 JBlock finallyBody = tryBlock ._finally ();
203185
204- finallyBody .invoke (eventManager , "clear" ).arg (_this ());
205- finallyBody .invoke (scope , "exit" ).arg (_this ());
206- finallyBody .invoke (scope , "dispose" ).arg (_this ());
207- finallyBody .invoke (_super (), "onDestroy" );
186+ JTryBlock tryInFinally = finallyBody ._try ();
187+ tryInFinally .body ().add (classes ().ROBO_GUICE .staticInvoke ("destroyInjector" ).arg (_this ()));
188+ tryInFinally ._finally ().invoke (_super (), "onDestroy" );
208189
209- JMethod onDestroy = holder .getOnDestroy ();
210- codeModelHelper .replaceSuperCall (onDestroy , onDestroyBlock );
190+ JMethod onDestroy = holder .getOnDestroy ();
191+ codeModelHelper .replaceSuperCall (onDestroy , onDestroyBlock );
211192 }
212193
213194 private void onConfigurationChangedMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
@@ -219,22 +200,17 @@ private void onConfigurationChangedMethod(RoboGuiceHolder holder, JFieldVar even
219200
220201 private void onContentChangedMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
221202 JBlock onContentChangedAfterSuperBlock = holder .getOnContentChangedAfterSuperBlock ();
203+ onContentChangedAfterSuperBlock .add (classes ().ROBO_GUICE .staticInvoke ("getInjector" ).arg (_this ()).invoke ("injectViewMembers" ).arg (_this ()));
222204 fireEvent (eventManager , onContentChangedAfterSuperBlock , classes ().ON_CONTENT_CHANGED_EVENT );
223205 }
224206
225- private void onActivityResultMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
207+ private void onActivityResultMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
226208 JBlock onActivityResultAfterSuperBlock = holder .getOnActivityResultAfterSuperBlock ();
227209 JVar requestCode = holder .getRequestCode ();
228210 JVar resultCode = holder .getResultCode ();
229211 JVar data = holder .getData ();
230212
231- onActivityResultAfterSuperBlock .invoke (scope , "enter" ).arg (_this ());
232-
233- JTryBlock tryBlock = onActivityResultAfterSuperBlock ._try ();
234- fireEvent (eventManager , tryBlock .body (), classes ().ON_ACTIVITY_RESULT_EVENT , requestCode , resultCode , data );
235-
236- JBlock finallyBody = tryBlock ._finally ();
237- finallyBody .invoke (scope , "exit" ).arg (_this ());
213+ fireEvent (eventManager , onActivityResultAfterSuperBlock , classes ().ON_ACTIVITY_RESULT_EVENT , requestCode , resultCode , data );
238214 }
239215
240216 private void fireEvent (JFieldVar eventManager , JBlock body , JClass eventClass , JExpression ... eventArguments ) {
@@ -244,4 +220,10 @@ private void fireEvent(JFieldVar eventManager, JBlock body, JClass eventClass, J
244220 }
245221 body .invoke (eventManager , "fire" ).arg (newEvent );
246222 }
223+
224+ private void getScopedObjectMap (EActivityHolder holder , JFieldVar scopedObjectMap ) {
225+ JMethod getScopedObjectMapMethod = holder .getGeneratedClass ().method (JMod .PUBLIC , scopedObjectMap .type (), "getScopedObjectMap" );
226+ getScopedObjectMapMethod .annotate (Override .class );
227+ getScopedObjectMapMethod .body ()._return (scopedObjectMap );
228+ }
247229}
0 commit comments