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