3939
4040import com .sun .codemodel .JBlock ;
4141import com .sun .codemodel .JClass ;
42+ import com .sun .codemodel .JExpr ;
4243import com .sun .codemodel .JExpression ;
4344import com .sun .codemodel .JFieldVar ;
4445import com .sun .codemodel .JInvocation ;
4950
5051public class RoboGuiceHandler extends BaseAnnotationHandler <EActivityHolder > {
5152
52- private APTCodeModelHelper codeModelHelper = new APTCodeModelHelper ();
53+ private APTCodeModelHelper codeModelHelper = new APTCodeModelHelper ();
5354
5455 public RoboGuiceHandler (ProcessingEnvironment processingEnvironment ) {
5556 super (RoboGuice .class , processingEnvironment );
@@ -66,25 +67,25 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa
6667 public void process (Element element , EActivityHolder holder ) {
6768 RoboGuiceHolder roboGuiceHolder = holder .getRoboGuiceHolder ();
6869
69- holder .getGeneratedClass ()._implements (classes ().INJECTOR_PROVIDER );
70+ holder .getGeneratedClass ()._implements (classes ().ROBO_CONTEXT );
7071
71- JFieldVar scope = roboGuiceHolder .getScopeField ();
72+ JFieldVar scopedObjects = roboGuiceHolder .getScopedObjectsField ();
7273 JFieldVar eventManager = roboGuiceHolder .getEventManagerField ();
73- JMethod getInjector = roboGuiceHolder .getGetInjector ();
74+ roboGuiceHolder .getContentViewListenerField ();
7475 listenerFields (element , holder );
7576
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 );
77+ beforeCreateMethod (holder , scopedObjects , eventManager );
78+ onRestartMethod (roboGuiceHolder , eventManager );
79+ onStartMethod (roboGuiceHolder , eventManager );
80+ onResumeMethod (roboGuiceHolder , eventManager );
8181 onPauseMethod (roboGuiceHolder , eventManager );
82- onNewIntentMethod (roboGuiceHolder , scope , eventManager );
83- onStopMethod (roboGuiceHolder , scope , eventManager );
84- onDestroyMethod (roboGuiceHolder , scope , eventManager );
82+ onNewIntentMethod (roboGuiceHolder , eventManager );
83+ onStopMethod (roboGuiceHolder , eventManager );
84+ onDestroyMethod (roboGuiceHolder , eventManager );
8585 onConfigurationChangedMethod (roboGuiceHolder , eventManager );
8686 onContentChangedMethod (roboGuiceHolder , eventManager );
87- onActivityResultMethod (roboGuiceHolder , scope , eventManager );
87+ onActivityResultMethod (roboGuiceHolder , eventManager );
88+ getScopedObjectMap (holder , scopedObjects );
8889 }
8990
9091 private void listenerFields (Element element , EActivityHolder holder ) {
@@ -130,39 +131,29 @@ private List<String> extractListenerClasses(Element activityElement) {
130131 return new ArrayList <String >(0 );
131132 }
132133
133- private void beforeCreateMethod (EActivityHolder holder , JFieldVar scope , JFieldVar eventManager , JMethod getInjector ) {
134+ private void beforeCreateMethod (EActivityHolder holder , JFieldVar scopedObjects , JFieldVar eventManager ) {
134135 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 ());
136+ JClass keyWildCard = classes ().KEY .narrow (codeModel ().wildcard ());
137+ JClass scopedHashMap = classes ().HASH_MAP .narrow (keyWildCard , classes ().OBJECT );
138+ body .assign (scopedObjects , JExpr ._new (scopedHashMap ));
139+
140+ JVar injector = body .decl (classes ().ROBO_INJECTOR , "injector_" , classes ().ROBO_GUICE .staticInvoke ("getInjector" ).arg (_this ()));
139141 body .assign (eventManager , invoke (injector , "getInstance" ).arg (classes ().EVENT_MANAGER .dotclass ()));
142+ body .add (injector .invoke ("injectMembersWithoutViews" ).arg (_this ()));
140143 fireEvent (eventManager , body , classes ().ON_CREATE_EVENT , holder .getInitSavedInstanceParam ());
141144 }
142145
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 ());
146+ private void onRestartMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
152147 JBlock onRestartAfterSuperBlock = holder .getOnRestartAfterSuperBlock ();
153148 fireEvent (eventManager , onRestartAfterSuperBlock , classes ().ON_RESTART_EVENT );
154149 }
155150
156- private void onStartMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
157- JBlock onStartBeforeSuperBlock = holder .getOnStartBeforeSuperBlock ();
158- onStartBeforeSuperBlock .invoke (scope , "enter" ).arg (_this ());
151+ private void onStartMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
159152 JBlock onStartAfterSuperBlock = holder .getOnStartAfterSuperBlock ();
160153 fireEvent (eventManager , onStartAfterSuperBlock , classes ().ON_START_EVENT );
161154 }
162155
163- private void onResumeMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
164- JBlock onResumeBeforeSuperBlock = holder .getOnResumeBeforeSuperBlock ();
165- onResumeBeforeSuperBlock .invoke (scope , "enter" ).arg (_this ());
156+ private void onResumeMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
166157 JBlock onResumeAfterSuperBlock = holder .getOnResumeAfterSuperBlock ();
167158 fireEvent (eventManager , onResumeAfterSuperBlock , classes ().ON_RESUME_EVENT );
168159 }
@@ -172,42 +163,37 @@ private void onPauseMethod(RoboGuiceHolder holder, JFieldVar eventManager) {
172163 fireEvent (eventManager , onPauseAfterSuperBlock , classes ().ON_PAUSE_EVENT );
173164 }
174165
175- private void onNewIntentMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
166+ private void onNewIntentMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
176167 JBlock onNewIntentAfterSuperBlock = holder .getOnNewIntentAfterSuperBlock ();
177- onNewIntentAfterSuperBlock .invoke (scope , "enter" ).arg (_this ());
178168 fireEvent (eventManager , onNewIntentAfterSuperBlock , classes ().ON_NEW_INTENT_EVENT );
179169 }
180170
181- private void onStopMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
171+ private void onStopMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
182172 JBlock onStopBlock = new JBlock (false , false );
183- onStopBlock .invoke (scope , "enter" ).arg (_this ());
184173
185174 JTryBlock tryBlock = onStopBlock ._try ();
186175 fireEvent (eventManager , tryBlock .body (), classes ().ON_STOP_EVENT );
187176 JBlock finallyBody = tryBlock ._finally ();
188177
189- finallyBody .invoke (scope , "exit" ).arg (_this ());
190178 finallyBody .invoke (_super (), "onStop" );
191179
192- JMethod onStop = holder .getOnStop ();
193- codeModelHelper .replaceSuperCall (onStop , onStopBlock );
180+ JMethod onStop = holder .getOnStop ();
181+ codeModelHelper .replaceSuperCall (onStop , onStopBlock );
194182 }
195183
196- private void onDestroyMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
197- JBlock onDestroyBlock = new JBlock (false , false );
198- onDestroyBlock .invoke (scope , "enter" ).arg (_this ());
184+ private void onDestroyMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
185+ JBlock onDestroyBlock = new JBlock (false , false );
199186
200187 JTryBlock tryBlock = onDestroyBlock ._try ();
201188 fireEvent (eventManager , tryBlock .body (), classes ().ON_DESTROY_EVENT );
202189 JBlock finallyBody = tryBlock ._finally ();
203190
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" );
191+ JTryBlock tryInFinally = finallyBody ._try ();
192+ tryInFinally .body ().add (classes ().ROBO_GUICE .staticInvoke ("destroyInjector" ).arg (_this ()));
193+ tryInFinally ._finally ().invoke (_super (), "onDestroy" );
208194
209- JMethod onDestroy = holder .getOnDestroy ();
210- codeModelHelper .replaceSuperCall (onDestroy , onDestroyBlock );
195+ JMethod onDestroy = holder .getOnDestroy ();
196+ codeModelHelper .replaceSuperCall (onDestroy , onDestroyBlock );
211197 }
212198
213199 private void onConfigurationChangedMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
@@ -219,22 +205,17 @@ private void onConfigurationChangedMethod(RoboGuiceHolder holder, JFieldVar even
219205
220206 private void onContentChangedMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
221207 JBlock onContentChangedAfterSuperBlock = holder .getOnContentChangedAfterSuperBlock ();
208+ onContentChangedAfterSuperBlock .add (classes ().ROBO_GUICE .staticInvoke ("getInjector" ).arg (_this ()).invoke ("injectViewMembers" ).arg (_this ()));
222209 fireEvent (eventManager , onContentChangedAfterSuperBlock , classes ().ON_CONTENT_CHANGED_EVENT );
223210 }
224211
225- private void onActivityResultMethod (RoboGuiceHolder holder , JFieldVar scope , JFieldVar eventManager ) {
212+ private void onActivityResultMethod (RoboGuiceHolder holder , JFieldVar eventManager ) {
226213 JBlock onActivityResultAfterSuperBlock = holder .getOnActivityResultAfterSuperBlock ();
227214 JVar requestCode = holder .getRequestCode ();
228215 JVar resultCode = holder .getResultCode ();
229216 JVar data = holder .getData ();
230217
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 ());
218+ fireEvent (eventManager , onActivityResultAfterSuperBlock , classes ().ON_ACTIVITY_RESULT_EVENT , requestCode , resultCode , data );
238219 }
239220
240221 private void fireEvent (JFieldVar eventManager , JBlock body , JClass eventClass , JExpression ... eventArguments ) {
@@ -244,4 +225,10 @@ private void fireEvent(JFieldVar eventManager, JBlock body, JClass eventClass, J
244225 }
245226 body .invoke (eventManager , "fire" ).arg (newEvent );
246227 }
228+
229+ private void getScopedObjectMap (EActivityHolder holder , JFieldVar scopedObjectMap ) {
230+ JMethod getScopedObjectMapMethod = holder .getGeneratedClass ().method (JMod .PUBLIC , scopedObjectMap .type (), "getScopedObjectMap" );
231+ getScopedObjectMapMethod .annotate (Override .class );
232+ getScopedObjectMapMethod .body ()._return (scopedObjectMap );
233+ }
247234}
0 commit comments