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