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
This commit is contained in:
@@ -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 -> {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user