Some small changes I ran into while upgrading the internal snapshot:
 - PrivateBinder.binder() should return a PrivateBinder. This is necessary to use expose() with skipSources() etc.
 - Modules.combine()'s module doesn't show up in sources.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@835 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/src/com/google/inject/PrivateModule.java b/src/com/google/inject/PrivateModule.java
index 8799e40..98282e5 100644
--- a/src/com/google/inject/PrivateModule.java
+++ b/src/com/google/inject/PrivateModule.java
@@ -131,7 +131,7 @@
 
   // everything below is copied from AbstractModule
 
-  protected final Binder binder() {
+  protected final PrivateBinder binder() {
     return binder;
   }
 
diff --git a/src/com/google/inject/util/Modules.java b/src/com/google/inject/util/Modules.java
index cf583ac..d04e462 100644
--- a/src/com/google/inject/util/Modules.java
+++ b/src/com/google/inject/util/Modules.java
@@ -96,11 +96,11 @@
    */
   public static Module combine(Iterable<? extends Module> modules) {
     final Set<Module> modulesSet = ImmutableSet.copyOf(modules);
-    return new AbstractModule() {
-      @Override
-      public void configure() {
+    return new Module() {
+      public void configure(Binder binder) {
+        binder = binder.skipSources(getClass());
         for (Module module : modulesSet) {
-          install(module);
+          binder.install(module);
         }
       }
     };
diff --git a/test/com/google/inject/ModulesTest.java b/test/com/google/inject/ModulesTest.java
index 398a166..fcf8f9c 100644
--- a/test/com/google/inject/ModulesTest.java
+++ b/test/com/google/inject/ModulesTest.java
@@ -41,12 +41,26 @@
     assertEquals(3, injector.getInstance(Short.class).shortValue());
   }
 
+  /**
+   * The module returned by Modules.combine shouldn't show up in binder sources.
+   */
+  public void testCombineSources() {
+    Module skipSourcesModule = new AbstractModule() {
+      @Override protected void configure() {
+        install(Modules.combine(newModule(1), newModule(2L)));
+      }
+    };
+    Injector injector = Guice.createInjector(Modules.combine(skipSourcesModule));
+    StackTraceElement source = (StackTraceElement) injector.getBinding(Integer.class).getSource();
+    assertEquals(skipSourcesModule.getClass().getName(), source.getClassName());
+  }
+
   private <T> Module newModule(final T toBind) {
     return new AbstractModule() {
       protected void configure() {
         @SuppressWarnings("unchecked") // getClass always needs a cast
         Class<T> tClass = (Class<T>) toBind.getClass();
-        bind(tClass).toInstance(toBind);
+        binder().skipSources(getClass()).bind(tClass).toInstance(toBind);
       }
     };
   }