From a1bbe04692b2b4bf7ac6052cad33ff5bd4fe8551 Mon Sep 17 00:00:00 2001 From: Martin Kouba Date: Thu, 14 Nov 2019 11:23:09 +0100 Subject: [PATCH] ArC - fix resolution if the required type is wildcard - resolves #3311 --- .../quarkus/arc/processor/BeanResolver.java | 2 ++ .../test/unused/RemoveUnusedBeansTest.java | 27 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BeanResolver.java b/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BeanResolver.java index f2e494f0000f9..ee0aac6d692db 100644 --- a/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BeanResolver.java +++ b/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BeanResolver.java @@ -125,6 +125,8 @@ boolean matchesNoBoxing(Type requiredType, Type beanType) { } return true; } + } else if (WILDCARD_TYPE.equals(requiredType.kind())) { + return parametersMatch(requiredType, beanType); } return false; } diff --git a/independent-projects/arc/tests/src/test/java/io/quarkus/arc/test/unused/RemoveUnusedBeansTest.java b/independent-projects/arc/tests/src/test/java/io/quarkus/arc/test/unused/RemoveUnusedBeansTest.java index fc3f720bebe10..974fde05bdb14 100644 --- a/independent-projects/arc/tests/src/test/java/io/quarkus/arc/test/unused/RemoveUnusedBeansTest.java +++ b/independent-projects/arc/tests/src/test/java/io/quarkus/arc/test/unused/RemoveUnusedBeansTest.java @@ -28,7 +28,9 @@ public class RemoveUnusedBeansTest { @RegisterExtension public ArcTestContainer container = ArcTestContainer.builder() .beanClasses(HasObserver.class, Foo.class, FooAlternative.class, HasName.class, UnusedProducers.class, - InjectedViaInstance.class, InjectedViaProvider.class, Excluded.class, UsedProducers.class, + InjectedViaInstance.class, InjectedViaInstanceWithWildcard.class, InjectedViaInstanceWithWildcard2.class, + InjectedViaProvider.class, Excluded.class, + UsedProducers.class, UnusedProducerButInjected.class, UsedViaInstanceWithUnusedProducer.class, UsesBeanViaInstance.class) .removeUnusedBeans(true) .addRemovalExclusion(b -> b.getBeanClass().toString().equals(Excluded.class.getName())) @@ -40,6 +42,8 @@ public void testRemoval() { assertTrue(container.instance(HasObserver.class).isAvailable()); assertTrue(container.instance(HasName.class).isAvailable()); assertTrue(container.instance(InjectedViaInstance.class).isAvailable()); + assertTrue(container.instance(InjectedViaInstanceWithWildcard.class).isAvailable()); + assertTrue(container.instance(InjectedViaInstanceWithWildcard2.class).isAvailable()); assertTrue(container.instance(InjectedViaProvider.class).isAvailable()); assertTrue(container.instance(String.class).isAvailable()); assertTrue(container.instance(UsedProducers.class).isAvailable()); @@ -96,6 +100,12 @@ static class FooAlternative extends Foo { @Inject Instance instance; + @Inject + Instance instanceWildcard; + + @Inject + Instance> instanceWildcard2; + @Inject String foo; @@ -106,6 +116,21 @@ static class InjectedViaInstance { } + @Singleton + static class InjectedViaInstanceWithWildcard { + + } + + @Singleton + static class InjectedViaInstanceWithWildcard2 implements Comparable { + + @Override + public int compareTo(FooAlternative o) { + return 0; + } + + } + @Singleton static class InjectedViaProvider {