Browse Source

Add Kotlin hints for enclosing class

This is needed by Kotlin reflection in order to be able to list
class members on native.

Closes gh-32472
pull/32864/head
Sébastien Deleuze 2 years ago
parent
commit
ca2b3c170c
  1. 6
      spring-context/src/main/java/org/springframework/context/aot/KotlinReflectionBeanRegistrationAotProcessor.java
  2. 17
      spring-context/src/test/kotlin/org/springframework/context/aot/KotlinReflectionBeanRegistrationAotProcessorTests.kt

6
spring-context/src/main/java/org/springframework/context/aot/KotlinReflectionBeanRegistrationAotProcessor.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -66,6 +66,10 @@ class KotlinReflectionBeanRegistrationAotProcessor implements BeanRegistrationAo @@ -66,6 +66,10 @@ class KotlinReflectionBeanRegistrationAotProcessor implements BeanRegistrationAo
if (superClass != null) {
registerHints(superClass, runtimeHints);
}
Class<?> enclosingClass = type.getEnclosingClass();
if (enclosingClass != null) {
runtimeHints.reflection().registerType(enclosingClass);
}
}
}

17
spring-context/src/test/kotlin/org/springframework/context/aot/KotlinReflectionBeanRegistrationAotProcessorTests.kt

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -66,6 +66,17 @@ class KotlinReflectionBeanRegistrationAotProcessorTests { @@ -66,6 +66,17 @@ class KotlinReflectionBeanRegistrationAotProcessorTests {
assertThat(generationContext.runtimeHints.reflection().typeHints()).isEmpty()
}
@Test
fun shouldGenerateOuterClassHints() {
process(OuterBean.NestedBean::class.java)
assertThat(
RuntimeHintsPredicates.reflection()
.onType(OuterBean.NestedBean::class.java)
.withMemberCategory(MemberCategory.INTROSPECT_DECLARED_METHODS)
.and(RuntimeHintsPredicates.reflection().onType(OuterBean::class.java))
).accepts(generationContext.runtimeHints)
}
private fun process(beanClass: Class<*>) {
createContribution(beanClass)?.applyTo(generationContext, Mockito.mock(BeanRegistrationCode::class.java))
}
@ -87,4 +98,8 @@ class KotlinReflectionBeanRegistrationAotProcessorTests { @@ -87,4 +98,8 @@ class KotlinReflectionBeanRegistrationAotProcessorTests {
}
}
class OuterBean {
class NestedBean
}
}

Loading…
Cancel
Save