Pass the correct stage to Modules.override, so currentStage() works.
Fixes issue 784 -- patch thanks to Tavian Barnes.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=57755697
diff --git a/core/src/com/google/inject/util/Modules.java b/core/src/com/google/inject/util/Modules.java
index adb4ee4..c166b8e 100644
--- a/core/src/com/google/inject/util/Modules.java
+++ b/core/src/com/google/inject/util/Modules.java
@@ -171,7 +171,7 @@
@Override
public void configure() {
Binder baseBinder = binder();
- List<Element> baseElements = Elements.getElements(baseModules);
+ List<Element> baseElements = Elements.getElements(currentStage(), baseModules);
// If the sole element was a PrivateElements, we want to override
// the private elements within that -- so refocus our elements
@@ -191,7 +191,7 @@
final Binder binder = baseBinder.skipSources(this.getClass());
final LinkedHashSet<Element> elements = new LinkedHashSet<Element>(baseElements);
- final List<Element> overrideElements = Elements.getElements(overrides);
+ final List<Element> overrideElements = Elements.getElements(currentStage(), overrides);
final Set<Key<?>> overriddenKeys = Sets.newHashSet();
final Map<Class<? extends Annotation>, ScopeBinding> overridesScopeAnnotations =
diff --git a/core/test/com/google/inject/util/OverrideModuleTest.java b/core/test/com/google/inject/util/OverrideModuleTest.java
index 8de76aa..3b8e05b 100644
--- a/core/test/com/google/inject/util/OverrideModuleTest.java
+++ b/core/test/com/google/inject/util/OverrideModuleTest.java
@@ -37,6 +37,7 @@
import com.google.inject.Provides;
import com.google.inject.Scope;
import com.google.inject.ScopeAnnotation;
+import com.google.inject.Stage;
import com.google.inject.name.Named;
import com.google.inject.util.Modules;
@@ -657,5 +658,24 @@
return new Object();
}
}
-
+
+ public void testCorrectStage() {
+ final Stage stage = Stage.PRODUCTION;
+ Module module = Modules.override(new AbstractModule() {
+ @Override
+ protected void configure() {
+ if (currentStage() != Stage.PRODUCTION) {
+ addError("Wronge stage in overridden module:" + currentStage());
+ }
+ }
+ }).with(new AbstractModule() {
+ @Override
+ protected void configure() {
+ if (currentStage() != Stage.PRODUCTION) {
+ addError("Wronge stage in overriding module:" + currentStage());
+ }
+ }
+ });
+ Guice.createInjector(stage, module);
+ }
}