From 9820e3341d8691eddcadc0adc33e2a90bde1b37e Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 4 Oct 2022 15:54:09 +0200 Subject: [PATCH] Fix handling of protected visibility Previously, InstanceSupplierCodeGenerator used reflection if the target visibility is either protected or private, and use direct access if the target visibility is public or package private. The previous arrangement already assumed that the code is generateed in the same package as the target type. This means that protected can be used as well so this commit only use reflection if the target visibility is private. Closes gh-29253 --- .../beans/factory/aot/InstanceSupplierCodeGenerator.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/aot/InstanceSupplierCodeGenerator.java b/spring-beans/src/main/java/org/springframework/beans/factory/aot/InstanceSupplierCodeGenerator.java index 7bc9e7f361..0e8e39de3d 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/aot/InstanceSupplierCodeGenerator.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/aot/InstanceSupplierCodeGenerator.java @@ -113,8 +113,7 @@ class InstanceSupplierCodeGenerator { .getUserClass(constructor.getDeclaringClass()); boolean dependsOnBean = ClassUtils.isInnerClass(declaringClass); Visibility accessVisibility = getAccessVisibility(registeredBean, constructor); - if (accessVisibility == Visibility.PUBLIC - || accessVisibility == Visibility.PACKAGE_PRIVATE) { + if (accessVisibility != Visibility.PRIVATE) { return generateCodeForAccessibleConstructor(beanName, beanClass, constructor, dependsOnBean, declaringClass); } @@ -208,8 +207,7 @@ class InstanceSupplierCodeGenerator { .getUserClass(factoryMethod.getDeclaringClass()); boolean dependsOnBean = !Modifier.isStatic(factoryMethod.getModifiers()); Visibility accessVisibility = getAccessVisibility(registeredBean, factoryMethod); - if (accessVisibility == Visibility.PUBLIC - || accessVisibility == Visibility.PACKAGE_PRIVATE) { + if (accessVisibility != Visibility.PRIVATE) { return generateCodeForAccessibleFactoryMethod(beanName, beanClass, factoryMethod, declaringClass, dependsOnBean); }