From 8e00185d7205301d7d52a717b3d1fcf524dc575d Mon Sep 17 00:00:00 2001 From: Kevin Viet Date: Mon, 2 Dec 2019 15:55:44 +0100 Subject: [PATCH] Ensure that type of annotation is on a Class when resolving the stereotype annotations usage --- .../spring/di/deployment/SpringDIProcessor.java | 3 ++- .../io/quarkus/it/spring/AppConfiguration.java | 10 ++++++++++ .../io/quarkus/it/spring/CustomPrototype.java | 16 ++++++++++++++++ .../it/spring/InjectedSpringBeansResource.java | 4 ++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 integration-tests/spring-di/src/main/java/io/quarkus/it/spring/CustomPrototype.java diff --git a/extensions/spring-di/deployment/src/main/java/io/quarkus/spring/di/deployment/SpringDIProcessor.java b/extensions/spring-di/deployment/src/main/java/io/quarkus/spring/di/deployment/SpringDIProcessor.java index 666a3f65704c3..3ffe605bdc2e1 100644 --- a/extensions/spring-di/deployment/src/main/java/io/quarkus/spring/di/deployment/SpringDIProcessor.java +++ b/extensions/spring-di/deployment/src/main/java/io/quarkus/spring/di/deployment/SpringDIProcessor.java @@ -129,7 +129,8 @@ AnnotationsTransformerBuildItem beanTransformer( for (final DotName name : stereotypeScopes.keySet()) { instances.put(name, index.getAnnotations(name) .stream() - .filter(it -> isAnnotation(it.target().asClass().flags())) + .filter(it -> it.target().kind() == AnnotationTarget.Kind.CLASS + && isAnnotation(it.target().asClass().flags())) .collect(Collectors.toSet())); } additionalStereotypeBuildItemBuildProducer.produce(new AdditionalStereotypeBuildItem(instances)); diff --git a/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/AppConfiguration.java b/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/AppConfiguration.java index 7e423e530d824..5fef2202c950f 100644 --- a/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/AppConfiguration.java +++ b/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/AppConfiguration.java @@ -33,6 +33,12 @@ public AnotherRequestBean requestBean() { return new AnotherRequestBean(); } + @Bean + @CustomPrototype + public CustomPrototypeBean beanWithCustomPrototype() { + return new CustomPrototypeBean(); + } + private static class SingletonBean { } @@ -40,4 +46,8 @@ private static class SingletonBean { private static class AnotherRequestBean { } + + public static class CustomPrototypeBean { + + } } diff --git a/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/CustomPrototype.java b/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/CustomPrototype.java new file mode 100644 index 0000000000000..5bf7c8177780e --- /dev/null +++ b/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/CustomPrototype.java @@ -0,0 +1,16 @@ +package io.quarkus.it.spring; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +@Component +@Target({ ElementType.TYPE, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Scope("prototype") +public @interface CustomPrototype { +} \ No newline at end of file diff --git a/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/InjectedSpringBeansResource.java b/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/InjectedSpringBeansResource.java index 6cf80fd105862..f0ceb74896841 100644 --- a/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/InjectedSpringBeansResource.java +++ b/integration-tests/spring-di/src/main/java/io/quarkus/it/spring/InjectedSpringBeansResource.java @@ -1,5 +1,7 @@ package io.quarkus.it.spring; +import static io.quarkus.it.spring.AppConfiguration.CustomPrototypeBean; + import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; @@ -18,6 +20,8 @@ public class InjectedSpringBeansResource { RequestBean requestBean; @Inject SessionBean sessionBean; + @Inject + CustomPrototypeBean anotherRequestBean; @GET @Produces(MediaType.TEXT_PLAIN)