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
This commit is contained in:
Stephane Nicoll 2022-10-04 15:54:09 +02:00
parent 1224be84ba
commit 9820e3341d
1 changed files with 2 additions and 4 deletions

View File

@ -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);
}