diff --git a/pom.xml b/pom.xml index e9f1f88..208c69b 100644 --- a/pom.xml +++ b/pom.xml @@ -34,6 +34,12 @@ 5.1.0 compile + + com.google.inject.extensions + guice-throwingproviders + 5.1.0 + test + org.springframework spring-test diff --git a/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java b/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java index d1d003f..d38d5d8 100644 --- a/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java +++ b/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java @@ -155,6 +155,10 @@ class ModuleRegistryConfiguration implements BeanDefinitionRegistryPostProcessor && entry.getKey().getAnnotationType().getName().startsWith("com.google.inject.multibindings")) { continue; } + if (entry.getKey().getAnnotationType() != null && entry.getKey().getAnnotationType().getName() + .startsWith("com.google.inject.internal.UniqueAnnotations")) { + continue; + } Binding binding = entry.getValue(); Key key = entry.getKey(); diff --git a/src/test/java/org/springframework/guice/BindingAnnotationTests.java b/src/test/java/org/springframework/guice/BindingAnnotationTests.java index 4751416..1daf045 100644 --- a/src/test/java/org/springframework/guice/BindingAnnotationTests.java +++ b/src/test/java/org/springframework/guice/BindingAnnotationTests.java @@ -28,7 +28,11 @@ import com.google.inject.AbstractModule; import com.google.inject.BindingAnnotation; import com.google.inject.Injector; import com.google.inject.Key; +import com.google.inject.TypeLiteral; import com.google.inject.name.Names; +import com.google.inject.throwingproviders.CheckedProvider; +import com.google.inject.throwingproviders.CheckedProvides; +import com.google.inject.throwingproviders.ThrowingProviderBinder; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -90,6 +94,14 @@ public class BindingAnnotationTests { .isNotNull(); assertThat(injector.getInstance(Key.get(SomeNamedDepWithType2.class, Names.named("sameNameDifferentType")))) .isNotNull(); + + assertThat(injector + .getInstance(Key.get(new TypeLiteral>() { + }))).isNotNull(); + assertThat(injector.getInstance( + Key.get(new TypeLiteral>() { + }))).isNotNull(); + context.close(); } @@ -158,6 +170,18 @@ public class BindingAnnotationTests { } + public interface TestCheckedProvider extends CheckedProvider { + + } + + public static class SomeDependencyFromTestCheckedProvider { + + } + + public static class SomeOtherDependencyFromTestCheckedProvider { + + } + @EnableGuiceModules @Configuration static class BindingAnnotationTestsConfig { @@ -226,9 +250,21 @@ public class BindingAnnotationTests { return new AbstractModule() { @Override protected void configure() { + install(ThrowingProviderBinder.forModule(this)); bind(String.class).annotatedWith(SomeBindingAnnotation.class).toInstance("annotated"); bind(String.class).annotatedWith(SomeOtherBindingAnnotation.class).toInstance("other"); } + + @CheckedProvides(TestCheckedProvider.class) + SomeDependencyFromTestCheckedProvider some() throws Exception { + return new SomeDependencyFromTestCheckedProvider(); + } + + @CheckedProvides(TestCheckedProvider.class) + SomeOtherDependencyFromTestCheckedProvider other() throws Exception { + return new SomeOtherDependencyFromTestCheckedProvider(); + } + }; }