From d30b917b346b5816cc405399c5b3ad93c563655f Mon Sep 17 00:00:00 2001 From: Tim Yates Date: Tue, 13 Feb 2024 11:40:27 +0000 Subject: [PATCH] fix: prevent ImportAnnotationVisitor walking non-visible classes (#540) Closes #521 --- .../beans/ImportAnnotationVisitor.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/spring-annotation/src/main/java/io/micronaut/spring/annotation/beans/ImportAnnotationVisitor.java b/spring-annotation/src/main/java/io/micronaut/spring/annotation/beans/ImportAnnotationVisitor.java index de4b9c8f9..4ce40355c 100644 --- a/spring-annotation/src/main/java/io/micronaut/spring/annotation/beans/ImportAnnotationVisitor.java +++ b/spring-annotation/src/main/java/io/micronaut/spring/annotation/beans/ImportAnnotationVisitor.java @@ -58,8 +58,7 @@ import io.micronaut.spring.core.type.ClassElementSpringMetadata; /** - * Handles the import importDeclaration allowing importing of additional Spring beans into a Micronaut - application. + * Handles the import importDeclaration allowing importing of additional Spring beans into a Micronaut application. * * @author graemerocher * @since 4.3.0 @@ -75,15 +74,21 @@ public void visitClass(ClassElement element, VisitorContext context) { if (annType != null && element.hasStereotype(annType)) { List> values = element.getAnnotationValuesByType(annType); if (!values.isEmpty()) { - for (AnnotationValue av : values) { - AnnotationClassValue[] acv = av.annotationClassValues(AnnotationMetadata.VALUE_MEMBER); - for (AnnotationClassValue a : acv) { - String className = a.getName(); - context.getClassElement(className).ifPresent(typeToImport -> { - handleImport(element, context, typeToImport); - }); + visitValues(element, context, values); + } + } + } + + private void visitValues(ClassElement element, VisitorContext context, List> values) { + for (AnnotationValue av : values) { + AnnotationClassValue[] acv = av.annotationClassValues(AnnotationMetadata.VALUE_MEMBER); + for (AnnotationClassValue a : acv) { + String className = a.getName(); + context.getClassElement(className).ifPresent(typeToImport -> { + if (typeToImport.isPublic()) { + handleImport(element, context, typeToImport); } - } + }); } } }