From 9dcdf29373585b5592d0da24ed01dfa39412f5b6 Mon Sep 17 00:00:00 2001 From: WonderCsabo Date: Fri, 2 May 2014 15:14:36 +0200 Subject: [PATCH 1/2] Upgrade to RoboGuice 2 This commit adds RoboGuice 2 support, RoboGuice 1 support is dropped. --- .../handler/RoboGuiceHandler.java | 96 ++++++++----------- .../helper/CanonicalNameConstants.java | 5 +- .../helper/ValidatorHelper.java | 84 +++++++++++----- .../holder/EActivityHolder.java | 34 ++++--- .../holder/RoboGuiceHolder.java | 20 ++-- .../process/ProcessHolder.java | 7 +- 6 files changed, 140 insertions(+), 106 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/RoboGuiceHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/RoboGuiceHandler.java index 9f03183978..c1ab12068d 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/RoboGuiceHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/RoboGuiceHandler.java @@ -49,7 +49,7 @@ public class RoboGuiceHandler extends BaseAnnotationHandler { - private APTCodeModelHelper codeModelHelper = new APTCodeModelHelper(); + private APTCodeModelHelper codeModelHelper = new APTCodeModelHelper(); public RoboGuiceHandler(ProcessingEnvironment processingEnvironment) { super(RoboGuice.class, processingEnvironment); @@ -66,25 +66,25 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa public void process(Element element, EActivityHolder holder) { RoboGuiceHolder roboGuiceHolder = holder.getRoboGuiceHolder(); - holder.getGeneratedClass()._implements(classes().INJECTOR_PROVIDER); + holder.getGeneratedClass()._implements(classes().ROBO_CONTEXT); - JFieldVar scope = roboGuiceHolder.getScopeField(); + JFieldVar scopedObjects = roboGuiceHolder.getScopedObjectsField(); JFieldVar eventManager = roboGuiceHolder.getEventManagerField(); - JMethod getInjector = roboGuiceHolder.getGetInjector(); + roboGuiceHolder.getContentViewListenerField(); listenerFields(element, holder); - beforeCreateMethod(holder, scope, eventManager, getInjector); - afterSetContentView(holder, scope, eventManager); - onRestartMethod(roboGuiceHolder, scope, eventManager); - onStartMethod(roboGuiceHolder, scope, eventManager); - onResumeMethod(roboGuiceHolder, scope, eventManager); + beforeCreateMethod(holder, eventManager); + onRestartMethod(roboGuiceHolder, eventManager); + onStartMethod(roboGuiceHolder, eventManager); + onResumeMethod(roboGuiceHolder, eventManager); onPauseMethod(roboGuiceHolder, eventManager); - onNewIntentMethod(roboGuiceHolder, scope, eventManager); - onStopMethod(roboGuiceHolder, scope, eventManager); - onDestroyMethod(roboGuiceHolder, scope, eventManager); + onNewIntentMethod(roboGuiceHolder, eventManager); + onStopMethod(roboGuiceHolder, eventManager); + onDestroyMethod(roboGuiceHolder, eventManager); onConfigurationChangedMethod(roboGuiceHolder, eventManager); onContentChangedMethod(roboGuiceHolder, eventManager); - onActivityResultMethod(roboGuiceHolder, scope, eventManager); + onActivityResultMethod(roboGuiceHolder, eventManager); + getScopedObjectMap(holder, scopedObjects); } private void listenerFields(Element element, EActivityHolder holder) { @@ -130,39 +130,25 @@ private List extractListenerClasses(Element activityElement) { return new ArrayList(0); } - private void beforeCreateMethod(EActivityHolder holder, JFieldVar scope, JFieldVar eventManager, JMethod getInjector) { + private void beforeCreateMethod(EActivityHolder holder, JFieldVar eventManager) { JBlock body = holder.getInitBody(); - JVar injector = body.decl(classes().INJECTOR, "injector_", invoke(getInjector)); - body.assign(scope, invoke(injector, "getInstance").arg(classes().CONTEXT_SCOPE.dotclass())); - body.invoke(scope, "enter").arg(_this()); - body.invoke(injector, "injectMembers").arg(_this()); + JVar injector = body.decl(classes().INJECTOR, "injector_", classes().ROBO_GUICE.staticInvoke("getInjector").arg(_this())); body.assign(eventManager, invoke(injector, "getInstance").arg(classes().EVENT_MANAGER.dotclass())); + injector.invoke("injectMembersWithoutViews").arg(_this()); fireEvent(eventManager, body, classes().ON_CREATE_EVENT, holder.getInitSavedInstanceParam()); } - private void afterSetContentView(EActivityHolder holder, JFieldVar scope, JFieldVar eventManager) { - JBlock onViewChanged = holder.getOnViewChangedBody(); - onViewChanged.invoke(scope, "injectViews"); - fireEvent(eventManager, onViewChanged, classes().ON_CONTENT_VIEW_AVAILABLE_EVENT); - } - - private void onRestartMethod(RoboGuiceHolder holder, JFieldVar scope, JFieldVar eventManager) { - JBlock onRestartBeforeSuperBlock = holder.getOnRestartBeforeSuperBlock(); - onRestartBeforeSuperBlock.invoke(scope, "enter").arg(_this()); + private void onRestartMethod(RoboGuiceHolder holder, JFieldVar eventManager) { JBlock onRestartAfterSuperBlock = holder.getOnRestartAfterSuperBlock(); fireEvent(eventManager, onRestartAfterSuperBlock, classes().ON_RESTART_EVENT); } - private void onStartMethod(RoboGuiceHolder holder, JFieldVar scope, JFieldVar eventManager) { - JBlock onStartBeforeSuperBlock = holder.getOnStartBeforeSuperBlock(); - onStartBeforeSuperBlock.invoke(scope, "enter").arg(_this()); + private void onStartMethod(RoboGuiceHolder holder, JFieldVar eventManager) { JBlock onStartAfterSuperBlock = holder.getOnStartAfterSuperBlock(); fireEvent(eventManager, onStartAfterSuperBlock, classes().ON_START_EVENT); } - private void onResumeMethod(RoboGuiceHolder holder, JFieldVar scope, JFieldVar eventManager) { - JBlock onResumeBeforeSuperBlock = holder.getOnResumeBeforeSuperBlock(); - onResumeBeforeSuperBlock.invoke(scope, "enter").arg(_this()); + private void onResumeMethod(RoboGuiceHolder holder, JFieldVar eventManager) { JBlock onResumeAfterSuperBlock = holder.getOnResumeAfterSuperBlock(); fireEvent(eventManager, onResumeAfterSuperBlock, classes().ON_RESUME_EVENT); } @@ -172,42 +158,37 @@ private void onPauseMethod(RoboGuiceHolder holder, JFieldVar eventManager) { fireEvent(eventManager, onPauseAfterSuperBlock, classes().ON_PAUSE_EVENT); } - private void onNewIntentMethod(RoboGuiceHolder holder, JFieldVar scope, JFieldVar eventManager) { + private void onNewIntentMethod(RoboGuiceHolder holder, JFieldVar eventManager) { JBlock onNewIntentAfterSuperBlock = holder.getOnNewIntentAfterSuperBlock(); - onNewIntentAfterSuperBlock.invoke(scope, "enter").arg(_this()); fireEvent(eventManager, onNewIntentAfterSuperBlock, classes().ON_NEW_INTENT_EVENT); } - private void onStopMethod(RoboGuiceHolder holder, JFieldVar scope, JFieldVar eventManager) { + private void onStopMethod(RoboGuiceHolder holder, JFieldVar eventManager) { JBlock onStopBlock = new JBlock(false, false); - onStopBlock.invoke(scope, "enter").arg(_this()); JTryBlock tryBlock = onStopBlock._try(); fireEvent(eventManager, tryBlock.body(), classes().ON_STOP_EVENT); JBlock finallyBody = tryBlock._finally(); - finallyBody.invoke(scope, "exit").arg(_this()); finallyBody.invoke(_super(), "onStop"); - JMethod onStop = holder.getOnStop(); - codeModelHelper.replaceSuperCall(onStop, onStopBlock); + JMethod onStop = holder.getOnStop(); + codeModelHelper.replaceSuperCall(onStop, onStopBlock); } - private void onDestroyMethod(RoboGuiceHolder holder, JFieldVar scope, JFieldVar eventManager) { - JBlock onDestroyBlock = new JBlock(false, false); - onDestroyBlock.invoke(scope, "enter").arg(_this()); + private void onDestroyMethod(RoboGuiceHolder holder, JFieldVar eventManager) { + JBlock onDestroyBlock = new JBlock(false, false); JTryBlock tryBlock = onDestroyBlock._try(); fireEvent(eventManager, tryBlock.body(), classes().ON_DESTROY_EVENT); JBlock finallyBody = tryBlock._finally(); - finallyBody.invoke(eventManager, "clear").arg(_this()); - finallyBody.invoke(scope, "exit").arg(_this()); - finallyBody.invoke(scope, "dispose").arg(_this()); - finallyBody.invoke(_super(), "onDestroy"); + JTryBlock tryInFinally = finallyBody._try(); + tryInFinally.body().add(classes().ROBO_GUICE.staticInvoke("destroyInjector").arg(_this())); + tryInFinally._finally().invoke(_super(), "onDestroy"); - JMethod onDestroy = holder.getOnDestroy(); - codeModelHelper.replaceSuperCall(onDestroy, onDestroyBlock); + JMethod onDestroy = holder.getOnDestroy(); + codeModelHelper.replaceSuperCall(onDestroy, onDestroyBlock); } private void onConfigurationChangedMethod(RoboGuiceHolder holder, JFieldVar eventManager) { @@ -219,22 +200,17 @@ private void onConfigurationChangedMethod(RoboGuiceHolder holder, JFieldVar even private void onContentChangedMethod(RoboGuiceHolder holder, JFieldVar eventManager) { JBlock onContentChangedAfterSuperBlock = holder.getOnContentChangedAfterSuperBlock(); + onContentChangedAfterSuperBlock.add(classes().ROBO_GUICE.staticInvoke("getInjector").arg(_this()).invoke("injectViewMembers").arg(_this())); fireEvent(eventManager, onContentChangedAfterSuperBlock, classes().ON_CONTENT_CHANGED_EVENT); } - private void onActivityResultMethod(RoboGuiceHolder holder, JFieldVar scope, JFieldVar eventManager) { + private void onActivityResultMethod(RoboGuiceHolder holder, JFieldVar eventManager) { JBlock onActivityResultAfterSuperBlock = holder.getOnActivityResultAfterSuperBlock(); JVar requestCode = holder.getRequestCode(); JVar resultCode = holder.getResultCode(); JVar data = holder.getData(); - onActivityResultAfterSuperBlock.invoke(scope, "enter").arg(_this()); - - JTryBlock tryBlock = onActivityResultAfterSuperBlock._try(); - fireEvent(eventManager, tryBlock.body(), classes().ON_ACTIVITY_RESULT_EVENT, requestCode, resultCode, data); - - JBlock finallyBody = tryBlock._finally(); - finallyBody.invoke(scope, "exit").arg(_this()); + fireEvent(eventManager, onActivityResultAfterSuperBlock, classes().ON_ACTIVITY_RESULT_EVENT, requestCode, resultCode, data); } 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 } body.invoke(eventManager, "fire").arg(newEvent); } + + private void getScopedObjectMap(EActivityHolder holder, JFieldVar scopedObjectMap) { + JMethod getScopedObjectMapMethod = holder.getGeneratedClass().method(JMod.PUBLIC, scopedObjectMap.type(), "getScopedObjectMap"); + getScopedObjectMapMethod.annotate(Override.class); + getScopedObjectMapMethod.body()._return(scopedObjectMap); + } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java index 86c17f6181..a81fabc5e4 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java @@ -140,8 +140,10 @@ public final class CanonicalNameConstants { /* * RoboGuice */ - public static final String INJECTOR_PROVIDER = "roboguice.inject.InjectorProvider"; + public static final String ROBO_CONTEXT = "roboguice.util.RoboContext"; public static final String INJECTOR = "com.google.inject.Injector"; + public static final String KEY = "com.google.inject.Key"; + public static final String CONTENT_VIEW_LISTENER = "roboguice.inject.ContentViewListener"; public static final String ON_RESTART_EVENT = "roboguice.activity.event.OnRestartEvent"; public static final String ON_START_EVENT = "roboguice.activity.event.OnStartEvent"; public static final String ON_RESUME_EVENT = "roboguice.activity.event.OnResumeEvent"; @@ -149,6 +151,7 @@ public final class CanonicalNameConstants { public static final String ON_NEW_INTENT_EVENT = "roboguice.activity.event.OnNewIntentEvent"; public static final String EVENT_MANAGER = "roboguice.event.EventManager"; public static final String CONTEXT_SCOPE = "roboguice.inject.ContextScope"; + public static final String ROBO_GUICE = "roboguice.RoboGuice"; public static final String INJECT = "com.google.inject.Inject"; public static final String ON_STOP_EVENT = "roboguice.activity.event.OnStopEvent"; public static final String ON_DESTROY_EVENT = "roboguice.activity.event.OnDestroyEvent"; diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java index b4977c6552..de4cb32b6f 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java @@ -15,9 +15,66 @@ */ package org.androidannotations.helper; -import org.androidannotations.annotations.*; -import org.androidannotations.annotations.rest.*; -import org.androidannotations.annotations.sharedpreferences.*; +import static java.util.Arrays.asList; +import static org.androidannotations.helper.AndroidConstants.LOG_DEBUG; +import static org.androidannotations.helper.AndroidConstants.LOG_ERROR; +import static org.androidannotations.helper.AndroidConstants.LOG_INFO; +import static org.androidannotations.helper.AndroidConstants.LOG_VERBOSE; +import static org.androidannotations.helper.AndroidConstants.LOG_WARN; +import static org.androidannotations.helper.CanonicalNameConstants.CLIENT_HTTP_REQUEST_FACTORY; +import static org.androidannotations.helper.CanonicalNameConstants.CLIENT_HTTP_REQUEST_INTERCEPTOR; +import static org.androidannotations.helper.CanonicalNameConstants.HTTP_MESSAGE_CONVERTER; +import static org.androidannotations.helper.CanonicalNameConstants.INTERNET_PERMISSION; +import static org.androidannotations.helper.ModelConstants.GENERATION_SUFFIX; +import static org.androidannotations.helper.ModelConstants.VALID_ENHANCED_COMPONENT_ANNOTATIONS; +import static org.androidannotations.helper.ModelConstants.VALID_ENHANCED_VIEW_SUPPORT_ANNOTATIONS; + +import java.lang.annotation.Annotation; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import javax.lang.model.element.AnnotationMirror; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.type.ArrayType; +import javax.lang.model.type.DeclaredType; +import javax.lang.model.type.ErrorType; +import javax.lang.model.type.TypeKind; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.ElementFilter; +import javax.lang.model.util.Elements; + +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.EBean; +import org.androidannotations.annotations.EFragment; +import org.androidannotations.annotations.EIntentService; +import org.androidannotations.annotations.EService; +import org.androidannotations.annotations.Receiver; +import org.androidannotations.annotations.Trace; +import org.androidannotations.annotations.ViewById; +import org.androidannotations.annotations.rest.Delete; +import org.androidannotations.annotations.rest.Get; +import org.androidannotations.annotations.rest.Head; +import org.androidannotations.annotations.rest.Options; +import org.androidannotations.annotations.rest.Post; +import org.androidannotations.annotations.rest.Put; +import org.androidannotations.annotations.rest.Rest; +import org.androidannotations.annotations.sharedpreferences.DefaultBoolean; +import org.androidannotations.annotations.sharedpreferences.DefaultFloat; +import org.androidannotations.annotations.sharedpreferences.DefaultInt; +import org.androidannotations.annotations.sharedpreferences.DefaultLong; +import org.androidannotations.annotations.sharedpreferences.DefaultString; +import org.androidannotations.annotations.sharedpreferences.SharedPref; import org.androidannotations.api.rest.RestClientErrorHandling; import org.androidannotations.api.rest.RestClientHeaders; import org.androidannotations.api.rest.RestClientRootUrl; @@ -27,18 +84,6 @@ import org.androidannotations.model.AnnotationElements; import org.androidannotations.process.IsValid; -import javax.lang.model.element.*; -import javax.lang.model.type.*; -import javax.lang.model.util.ElementFilter; -import javax.lang.model.util.Elements; -import java.lang.annotation.Annotation; -import java.util.*; - -import static java.util.Arrays.asList; -import static org.androidannotations.helper.AndroidConstants.*; -import static org.androidannotations.helper.CanonicalNameConstants.*; -import static org.androidannotations.helper.ModelConstants.*; - public class ValidatorHelper { private static final List VALID_REST_INTERFACES = asList(RestClientHeaders.class.getName(), RestClientErrorHandling.class.getName(), RestClientRootUrl.class.getName(), RestClientSupport.class.getName()); @@ -599,14 +644,9 @@ public void allowedType(Element element, IsValid valid, TypeMirror fieldTypeMirr public void hasRoboGuiceJars(Element element, IsValid valid) { Elements elementUtils = annotationHelper.getElementUtils(); - if (elementUtils.getTypeElement(CanonicalNameConstants.INJECTOR_PROVIDER) == null) { - valid.invalidate(); - annotationHelper.printAnnotationError(element, "Could not find the RoboGuice framework in the classpath, the following class is missing: " + CanonicalNameConstants.INJECTOR_PROVIDER); - } - - if (elementUtils.getTypeElement(RoboGuiceConstants.ROBOGUICE_APPLICATION_CLASS) == null) { + if (elementUtils.getTypeElement(CanonicalNameConstants.ROBO_CONTEXT) == null) { valid.invalidate(); - annotationHelper.printAnnotationError(element, "Could not find the RoboApplication class in the classpath, are you using RoboGuice 1.1.1 ?"); + annotationHelper.printAnnotationError(element, "Could not find the RoboGuice framework in the classpath, the following class is missing: " + CanonicalNameConstants.ROBO_CONTEXT); } try { diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java index 835c3f93b4..f7dd3de829 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java @@ -23,11 +23,12 @@ import static com.sun.codemodel.JExpr._this; import static com.sun.codemodel.JExpr.cast; import static com.sun.codemodel.JExpr.invoke; -import static com.sun.codemodel.JMod.FINAL; import static com.sun.codemodel.JMod.PRIVATE; import static com.sun.codemodel.JMod.PUBLIC; +import static org.androidannotations.helper.ModelConstants.GENERATION_SUFFIX; -import java.util.*; +import java.util.ArrayList; +import java.util.List; import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; @@ -37,7 +38,13 @@ import javax.lang.model.util.ElementFilter; import org.androidannotations.api.SdkVersionHelper; -import org.androidannotations.helper.*; +import org.androidannotations.helper.ActionBarSherlockHelper; +import org.androidannotations.helper.ActivityIntentBuilder; +import org.androidannotations.helper.AndroidManifest; +import org.androidannotations.helper.AnnotationHelper; +import org.androidannotations.helper.CanonicalNameConstants; +import org.androidannotations.helper.GreenDroidHelper; +import org.androidannotations.helper.IntentBuilder; import org.androidannotations.process.ProcessHolder; import com.sun.codemodel.JBlock; @@ -451,20 +458,21 @@ public RoboGuiceHolder getRoboGuiceHolder() { return roboGuiceHolder; } - protected void setScopeField() { - getRoboGuiceHolder().scope = getGeneratedClass().field(JMod.PRIVATE, classes().CONTEXT_SCOPE, "scope_"); + protected void setScopedObjectsField() { + JClass keyWildCard = classes().KEY.narrow(codeModel().wildcard()); + JClass scopedHashMap = classes().HASH_MAP.narrow(keyWildCard, classes().OBJECT); + + getRoboGuiceHolder().scopedObjects = getGeneratedClass().field(JMod.PROTECTED, scopedHashMap, "scopedObjects" + GENERATION_SUFFIX); + getRoboGuiceHolder().scopedObjects.assign(JExpr._new(scopedHashMap)); } protected void setEventManagerField() { - getRoboGuiceHolder().eventManager = generatedClass.field(JMod.PRIVATE, classes().EVENT_MANAGER, "eventManager_"); + getRoboGuiceHolder().eventManager = generatedClass.field(JMod.PROTECTED, classes().EVENT_MANAGER, "eventManager" + GENERATION_SUFFIX); } - public void setGetInjector() { - JMethod method = generatedClass.method(JMod.PUBLIC, classes().INJECTOR, "getInjector"); - method.annotate(Override.class); - JExpression castApplication = cast(classes().INJECTOR_PROVIDER, invoke("getApplication")); - method.body()._return(castApplication.invoke("getInjector")); - getRoboGuiceHolder().getInjector = method; + protected void setContentViewListenerField() { + getRoboGuiceHolder().contentViewListenerField = generatedClass.field(JMod.NONE, classes().CONTENT_VIEW_LISTENER, "ignored" + GENERATION_SUFFIX); + getRoboGuiceHolder().contentViewListenerField.annotate(classes().INJECT); } @Override @@ -696,6 +704,7 @@ public JBlock getOnDestroyAfterSuperBlock() { return onDestroyAfterSuperBlock; } + @Override public JBlock getOnResumeAfterSuperBlock() { if (onResumeAfterSuperBlock == null) { setOnResume(); @@ -755,5 +764,4 @@ public JFieldVar getIntentFilterField(String[] actions) { return receiverRegistrationHolder.getIntentFilterField(actions); } - } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/RoboGuiceHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/RoboGuiceHolder.java index b036979bb7..f6912e111b 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/RoboGuiceHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/RoboGuiceHolder.java @@ -23,9 +23,9 @@ public class RoboGuiceHolder { private EActivityHolder holder; - protected JFieldVar scope; + protected JFieldVar scopedObjects; protected JFieldVar eventManager; - protected JMethod getInjector; + public JFieldVar contentViewListenerField; protected JBlock onRestartBeforeSuperBlock; protected JBlock onRestartAfterSuperBlock; protected JBlock onStartBeforeSuperBlock; @@ -50,18 +50,18 @@ public JFieldVar getEventManagerField() { return eventManager; } - public JFieldVar getScopeField() { - if (scope == null) { - holder.setScopeField(); + public JFieldVar getScopedObjectsField() { + if (scopedObjects == null) { + holder.setScopedObjectsField(); } - return scope; + return scopedObjects; } - public JMethod getGetInjector() { - if (getInjector == null) { - holder.setGetInjector(); + public JFieldVar getContentViewListenerField() { + if (contentViewListenerField == null) { + holder.setContentViewListenerField(); } - return getInjector; + return contentViewListenerField; } public JBlock getOnRestartBeforeSuperBlock() { diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/process/ProcessHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/process/ProcessHolder.java index cb280dcc41..1f734ade4c 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/process/ProcessHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/process/ProcessHolder.java @@ -128,22 +128,23 @@ public class Classes { /* * RoboGuice */ - public final JClass INJECTOR_PROVIDER = refClass(CanonicalNameConstants.INJECTOR_PROVIDER); + public final JClass ROBO_CONTEXT = refClass(CanonicalNameConstants.ROBO_CONTEXT); public final JClass INJECTOR = refClass(CanonicalNameConstants.INJECTOR); + public final JClass CONTENT_VIEW_LISTENER = refClass(CanonicalNameConstants.CONTENT_VIEW_LISTENER); + public final JClass KEY = refClass(CanonicalNameConstants.KEY); public final JClass ON_RESTART_EVENT = refClass(CanonicalNameConstants.ON_RESTART_EVENT); public final JClass ON_START_EVENT = refClass(CanonicalNameConstants.ON_START_EVENT); public final JClass ON_RESUME_EVENT = refClass(CanonicalNameConstants.ON_RESUME_EVENT); public final JClass ON_PAUSE_EVENT = refClass(CanonicalNameConstants.ON_PAUSE_EVENT); public final JClass ON_NEW_INTENT_EVENT = refClass(CanonicalNameConstants.ON_NEW_INTENT_EVENT); public final JClass EVENT_MANAGER = refClass(CanonicalNameConstants.EVENT_MANAGER); - public final JClass CONTEXT_SCOPE = refClass(CanonicalNameConstants.CONTEXT_SCOPE); + public final JClass ROBO_GUICE = refClass(CanonicalNameConstants.ROBO_GUICE); public final JClass INJECT = refClass(CanonicalNameConstants.INJECT); public final JClass ON_STOP_EVENT = refClass(CanonicalNameConstants.ON_STOP_EVENT); public final JClass ON_DESTROY_EVENT = refClass(CanonicalNameConstants.ON_DESTROY_EVENT); public final JClass ON_CONFIGURATION_CHANGED_EVENT = refClass(CanonicalNameConstants.ON_CONFIGURATION_CHANGED_EVENT); public final JClass ON_CONTENT_CHANGED_EVENT = refClass(CanonicalNameConstants.ON_CONTENT_CHANGED_EVENT); public final JClass ON_ACTIVITY_RESULT_EVENT = refClass(CanonicalNameConstants.ON_ACTIVITY_RESULT_EVENT); - public final JClass ON_CONTENT_VIEW_AVAILABLE_EVENT = refClass(CanonicalNameConstants.ON_CONTENT_VIEW_AVAILABLE_EVENT); public final JClass ON_CREATE_EVENT = refClass(CanonicalNameConstants.ON_CREATE_EVENT); /* From 137353b74f6fc81124b8214bbdbad764d2b64def Mon Sep 17 00:00:00 2001 From: WonderCsabo Date: Wed, 14 May 2014 17:06:23 +0200 Subject: [PATCH 2/2] Fix @RoboGuice init method --- .../handler/RoboGuiceHandler.java | 13 +++++++++---- .../helper/CanonicalNameConstants.java | 2 +- .../androidannotations/helper/ValidatorHelper.java | 6 +++--- .../androidannotations/process/ProcessHolder.java | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/RoboGuiceHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/RoboGuiceHandler.java index c1ab12068d..9b0678e45d 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/RoboGuiceHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/RoboGuiceHandler.java @@ -39,6 +39,7 @@ import com.sun.codemodel.JBlock; import com.sun.codemodel.JClass; +import com.sun.codemodel.JExpr; import com.sun.codemodel.JExpression; import com.sun.codemodel.JFieldVar; import com.sun.codemodel.JInvocation; @@ -73,7 +74,7 @@ public void process(Element element, EActivityHolder holder) { roboGuiceHolder.getContentViewListenerField(); listenerFields(element, holder); - beforeCreateMethod(holder, eventManager); + beforeCreateMethod(holder, scopedObjects, eventManager); onRestartMethod(roboGuiceHolder, eventManager); onStartMethod(roboGuiceHolder, eventManager); onResumeMethod(roboGuiceHolder, eventManager); @@ -130,11 +131,15 @@ private List extractListenerClasses(Element activityElement) { return new ArrayList(0); } - private void beforeCreateMethod(EActivityHolder holder, JFieldVar eventManager) { + private void beforeCreateMethod(EActivityHolder holder, JFieldVar scopedObjects, JFieldVar eventManager) { JBlock body = holder.getInitBody(); - JVar injector = body.decl(classes().INJECTOR, "injector_", classes().ROBO_GUICE.staticInvoke("getInjector").arg(_this())); + JClass keyWildCard = classes().KEY.narrow(codeModel().wildcard()); + JClass scopedHashMap = classes().HASH_MAP.narrow(keyWildCard, classes().OBJECT); + body.assign(scopedObjects, JExpr._new(scopedHashMap)); + + JVar injector = body.decl(classes().ROBO_INJECTOR, "injector_", classes().ROBO_GUICE.staticInvoke("getInjector").arg(_this())); body.assign(eventManager, invoke(injector, "getInstance").arg(classes().EVENT_MANAGER.dotclass())); - injector.invoke("injectMembersWithoutViews").arg(_this()); + body.add(injector.invoke("injectMembersWithoutViews").arg(_this())); fireEvent(eventManager, body, classes().ON_CREATE_EVENT, holder.getInitSavedInstanceParam()); } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java index c55192f986..f162cd18ff 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java @@ -142,7 +142,7 @@ public final class CanonicalNameConstants { * RoboGuice */ public static final String ROBO_CONTEXT = "roboguice.util.RoboContext"; - public static final String INJECTOR = "com.google.inject.Injector"; + public static final String ROBO_INJECTOR = "roboguice.inject.RoboInjector"; public static final String KEY = "com.google.inject.Key"; public static final String CONTENT_VIEW_LISTENER = "roboguice.inject.ContentViewListener"; public static final String ON_RESTART_EVENT = "roboguice.activity.event.OnRestartEvent"; diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java index 83ce338bb4..33918d71e9 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java @@ -664,13 +664,13 @@ public void hasRoboGuiceJars(Element element, IsValid valid) { } try { - if (elementUtils.getTypeElement(CanonicalNameConstants.INJECTOR) == null) { + if (elementUtils.getTypeElement(CanonicalNameConstants.ROBO_INJECTOR) == null) { valid.invalidate(); - annotationHelper.printAnnotationError(element, "Could not find the Guice framework in the classpath, the following class is missing: " + CanonicalNameConstants.INJECTOR); + annotationHelper.printAnnotationError(element, "Could not find the Guice framework in the classpath, the following class is missing: " + CanonicalNameConstants.ROBO_INJECTOR); } } catch (RuntimeException e) { valid.invalidate(); - annotationHelper.printAnnotationError(element, "Could not find the Guice framework in the classpath, the following class is missing: " + CanonicalNameConstants.INJECTOR); + annotationHelper.printAnnotationError(element, "Could not find the Guice framework in the classpath, the following class is missing: " + CanonicalNameConstants.ROBO_INJECTOR); } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/process/ProcessHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/process/ProcessHolder.java index e1a3b5cbc5..f27e3f0268 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/process/ProcessHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/process/ProcessHolder.java @@ -130,7 +130,7 @@ public class Classes { * RoboGuice */ public final JClass ROBO_CONTEXT = refClass(CanonicalNameConstants.ROBO_CONTEXT); - public final JClass INJECTOR = refClass(CanonicalNameConstants.INJECTOR); + public final JClass ROBO_INJECTOR = refClass(CanonicalNameConstants.ROBO_INJECTOR); public final JClass CONTENT_VIEW_LISTENER = refClass(CanonicalNameConstants.CONTENT_VIEW_LISTENER); public final JClass KEY = refClass(CanonicalNameConstants.KEY); public final JClass ON_RESTART_EVENT = refClass(CanonicalNameConstants.ON_RESTART_EVENT);