package com.google.gwt.inject.client.privatedependsonexposed; import com.google.gwt.core.client.GWT; import com.google.gwt.inject.client.GinModules; import com.google.gwt.inject.client.Ginjector; import com.google.gwt.inject.client.PrivateGinModule; import com.google.gwt.junit.client.GWTTestCase; import com.google.inject.Inject; import com.google.inject.Singleton; import com.google.inject.name.Named; import com.google.inject.name.Names; public class PrivateDependsOnExposedTest extends GWTTestCase { public void testSameBar() throws Exception { MyGinjector ginjector = GWT.create(MyGinjector.class); Bar bar0 = ginjector.getBar0(); Bar bar1 = ginjector.getBar1(); assertEquals(bar0, bar1); } @GinModules({Bar0Module.class, Bar1Module.class}) interface MyGinjector extends Ginjector { @Named("0") Bar getBar0(); @Named("1") Bar getBar1(); } static class Foo {} @Singleton static class Bar { @Inject Foo foo; } static class Bar0Module extends PrivateGinModule { @Override protected void configure() { bind(Foo.class); expose(Foo.class); bind(Bar.class).annotatedWith(Names.named("0")).to(Bar.class); expose(Bar.class).annotatedWith(Names.named("0")); } } static class Bar1Module extends PrivateGinModule { @Override protected void configure() { bind(Bar.class).annotatedWith(Names.named("1")).to(Bar.class); expose(Bar.class).annotatedWith(Names.named("1")); } } public String getModuleName() { return "com.google.gwt.inject.InjectTest"; } }