From 1e5e8db0e0936b83b27077d99fc2c70e8f0b6d3c Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Fri, 22 Sep 2023 10:36:38 +0200 Subject: [PATCH] Add missing reflection hint in BeanRegistrationsAotContribution Prior to this commit, the `BeanRegistrationsAotContribution` would only contribute introspection hints for declared methods. This does not cover inherited public methods. This commit adds the missing hint on public methods. Fixes gh-31293 --- .../beans/factory/aot/BeanRegistrationsAotContribution.java | 4 ++-- .../factory/aot/BeanRegistrationsAotContributionTests.java | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContribution.java b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContribution.java index d93e9507d6..0cc914fc59 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContribution.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContribution.java @@ -117,10 +117,10 @@ class BeanRegistrationsAotContribution registrations.keySet().forEach(beanRegistrationKey -> { ReflectionHints hints = runtimeHints.reflection(); Class beanClass = beanRegistrationKey.beanClass(); - hints.registerType(beanClass, MemberCategory.INTROSPECT_DECLARED_METHODS); + hints.registerType(beanClass, MemberCategory.INTROSPECT_PUBLIC_METHODS, MemberCategory.INTROSPECT_DECLARED_METHODS); // Workaround for https://github.com/oracle/graal/issues/6510 if (beanClass.isRecord()) { - hints.registerType(beanClass, MemberCategory.INVOKE_DECLARED_METHODS); + hints.registerType(beanClass, MemberCategory.INVOKE_PUBLIC_METHODS, MemberCategory.INVOKE_DECLARED_METHODS); } // Workaround for https://github.com/oracle/graal/issues/6529 ReflectionUtils.doWithMethods(beanClass, method -> { diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContributionTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContributionTests.java index 833611e825..f586900021 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContributionTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContributionTests.java @@ -147,7 +147,7 @@ class BeanRegistrationsAotContributionTests { BeanRegistrationsAotContribution contribution = createContribution(TestBean.class, generator); contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode); assertThat(reflection().onType(TestBean.class) - .withMemberCategory(MemberCategory.INTROSPECT_DECLARED_METHODS)) + .withMemberCategories(MemberCategory.INTROSPECT_PUBLIC_METHODS, MemberCategory.INTROSPECT_DECLARED_METHODS)) .accepts(this.generationContext.getRuntimeHints()); } @@ -159,7 +159,8 @@ class BeanRegistrationsAotContributionTests { BeanRegistrationsAotContribution contribution = createContribution(RecordBean.class, generator); contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode); assertThat(reflection().onType(RecordBean.class) - .withMemberCategories(MemberCategory.INTROSPECT_DECLARED_METHODS, MemberCategory.INVOKE_DECLARED_METHODS)) + .withMemberCategories(MemberCategory.INTROSPECT_PUBLIC_METHODS, MemberCategory.INTROSPECT_DECLARED_METHODS, + MemberCategory.INVOKE_PUBLIC_METHODS, MemberCategory.INVOKE_DECLARED_METHODS)) .accepts(this.generationContext.getRuntimeHints()); }