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);
+  }
 }