Skip to content

Commit 23725a8

Browse files
committed
Merge branch '172_RoboGuice2' of https://github.com/WonderCsabo/androidannotations into WonderCsabo-172_RoboGuice2
2 parents f65c1e3 + 137353b commit 23725a8

9 files changed

Lines changed: 303 additions & 270 deletions

File tree

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,46 @@
1-
/**
2-
* Copyright (C) 2010-2014 eBusiness Information, Excilys Group
3-
*
4-
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5-
* use this file except in compliance with the License. You may obtain a copy of
6-
* the License at
7-
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
9-
*
10-
* Unless required by applicable law or agreed To in writing, software
11-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13-
* License for the specific language governing permissions and limitations under
14-
* the License.
15-
*/
16-
package org.androidannotations.annotations;
17-
18-
import java.lang.annotation.ElementType;
19-
import java.lang.annotation.Retention;
20-
import java.lang.annotation.RetentionPolicy;
21-
import java.lang.annotation.Target;
22-
23-
/**
24-
* Use it on {@link EActivity} annotated classes to set a custom title layout.
25-
* <p/>
26-
* The annotation value is mandatory and should be one of R.layout.* fields.
27-
* <p/>
28-
* <blockquote>
29-
*
30-
* Example :
31-
*
32-
* <pre>
33-
* &#064;CustomTitle(R.layout.activityTitleLayout)
34-
* &#064;EActivity(R.layout.main)
35-
* public class MyActivity extends Activity {
36-
*
37-
* }
38-
* </pre>
39-
*
40-
* </blockquote>
41-
*/
42-
@Retention(RetentionPolicy.CLASS)
43-
@Target(ElementType.TYPE)
44-
public @interface CustomTitle {
45-
int value();
46-
}
1+
/**
2+
* Copyright (C) 2010-2014 eBusiness Information, Excilys Group
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5+
* use this file except in compliance with the License. You may obtain a copy of
6+
* the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed To in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations under
14+
* the License.
15+
*/
16+
package org.androidannotations.annotations;
17+
18+
import java.lang.annotation.ElementType;
19+
import java.lang.annotation.Retention;
20+
import java.lang.annotation.RetentionPolicy;
21+
import java.lang.annotation.Target;
22+
23+
/**
24+
* Use it on {@link EActivity} annotated classes to set a custom title layout.
25+
* <p/>
26+
* The annotation value is mandatory and should be one of R.layout.* fields.
27+
* <p/>
28+
* <blockquote>
29+
*
30+
* Example :
31+
*
32+
* <pre>
33+
* &#064;CustomTitle(R.layout.activityTitleLayout)
34+
* &#064;EActivity(R.layout.main)
35+
* public class MyActivity extends Activity {
36+
*
37+
* }
38+
* </pre>
39+
*
40+
* </blockquote>
41+
*/
42+
@Retention(RetentionPolicy.CLASS)
43+
@Target(ElementType.TYPE)
44+
public @interface CustomTitle {
45+
int value();
46+
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/RoboGuiceHandler.java‎

Lines changed: 44 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
import com.sun.codemodel.JBlock;
4141
import com.sun.codemodel.JClass;
42+
import com.sun.codemodel.JExpr;
4243
import com.sun.codemodel.JExpression;
4344
import com.sun.codemodel.JFieldVar;
4445
import com.sun.codemodel.JInvocation;
@@ -49,7 +50,7 @@
4950

5051
public 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
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,18 @@ public final class CanonicalNameConstants {
142142
/*
143143
* RoboGuice
144144
*/
145-
public static final String INJECTOR_PROVIDER = "roboguice.inject.InjectorProvider";
146-
public static final String INJECTOR = "com.google.inject.Injector";
145+
public static final String ROBO_CONTEXT = "roboguice.util.RoboContext";
146+
public static final String ROBO_INJECTOR = "roboguice.inject.RoboInjector";
147+
public static final String KEY = "com.google.inject.Key";
148+
public static final String CONTENT_VIEW_LISTENER = "roboguice.inject.ContentViewListener";
147149
public static final String ON_RESTART_EVENT = "roboguice.activity.event.OnRestartEvent";
148150
public static final String ON_START_EVENT = "roboguice.activity.event.OnStartEvent";
149151
public static final String ON_RESUME_EVENT = "roboguice.activity.event.OnResumeEvent";
150152
public static final String ON_PAUSE_EVENT = "roboguice.activity.event.OnPauseEvent";
151153
public static final String ON_NEW_INTENT_EVENT = "roboguice.activity.event.OnNewIntentEvent";
152154
public static final String EVENT_MANAGER = "roboguice.event.EventManager";
153155
public static final String CONTEXT_SCOPE = "roboguice.inject.ContextScope";
156+
public static final String ROBO_GUICE = "roboguice.RoboGuice";
154157
public static final String INJECT = "com.google.inject.Inject";
155158
public static final String ON_STOP_EVENT = "roboguice.activity.event.OnStopEvent";
156159
public static final String ON_DESTROY_EVENT = "roboguice.activity.event.OnDestroyEvent";

0 commit comments

Comments
 (0)