Use TypeReference consistently in hints writer
Closes gh-28606
This commit is contained in:
parent
405e5921a6
commit
100ce9642a
|
@ -21,7 +21,6 @@ import java.util.Map;
|
||||||
|
|
||||||
import org.springframework.aot.hint.JdkProxyHint;
|
import org.springframework.aot.hint.JdkProxyHint;
|
||||||
import org.springframework.aot.hint.ProxyHints;
|
import org.springframework.aot.hint.ProxyHints;
|
||||||
import org.springframework.aot.hint.TypeReference;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write {@link JdkProxyHint}s contained in a {@link ProxyHints} to the JSON
|
* Write {@link JdkProxyHint}s contained in a {@link ProxyHints} to the JSON
|
||||||
|
@ -46,8 +45,7 @@ class ProxyHintsWriter {
|
||||||
private Map<String, Object> toAttributes(JdkProxyHint hint) {
|
private Map<String, Object> toAttributes(JdkProxyHint hint) {
|
||||||
Map<String, Object> attributes = new LinkedHashMap<>();
|
Map<String, Object> attributes = new LinkedHashMap<>();
|
||||||
handleCondition(attributes, hint);
|
handleCondition(attributes, hint);
|
||||||
attributes.put("interfaces", hint.getProxiedInterfaces().stream()
|
attributes.put("interfaces", hint.getProxiedInterfaces());
|
||||||
.map(TypeReference::getCanonicalName).toList());
|
|
||||||
return attributes;
|
return attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.springframework.aot.hint.FieldHint;
|
||||||
import org.springframework.aot.hint.MemberCategory;
|
import org.springframework.aot.hint.MemberCategory;
|
||||||
import org.springframework.aot.hint.ReflectionHints;
|
import org.springframework.aot.hint.ReflectionHints;
|
||||||
import org.springframework.aot.hint.TypeHint;
|
import org.springframework.aot.hint.TypeHint;
|
||||||
import org.springframework.aot.hint.TypeReference;
|
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -96,7 +95,7 @@ class ReflectionHintsWriter {
|
||||||
private Map<String, Object> toAttributes(ExecutableHint hint) {
|
private Map<String, Object> toAttributes(ExecutableHint hint) {
|
||||||
Map<String, Object> attributes = new LinkedHashMap<>();
|
Map<String, Object> attributes = new LinkedHashMap<>();
|
||||||
attributes.put("name", hint.getName());
|
attributes.put("name", hint.getName());
|
||||||
attributes.put("parameterTypes", hint.getParameterTypes().stream().map(TypeReference::getCanonicalName).toList());
|
attributes.put("parameterTypes", hint.getParameterTypes());
|
||||||
return attributes;
|
return attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,14 +104,21 @@ class ReflectionHintsWriter {
|
||||||
switch (category) {
|
switch (category) {
|
||||||
case PUBLIC_FIELDS -> attributes.put("allPublicFields", true);
|
case PUBLIC_FIELDS -> attributes.put("allPublicFields", true);
|
||||||
case DECLARED_FIELDS -> attributes.put("allDeclaredFields", true);
|
case DECLARED_FIELDS -> attributes.put("allDeclaredFields", true);
|
||||||
case INTROSPECT_PUBLIC_CONSTRUCTORS -> attributes.put("queryAllPublicConstructors", true);
|
case INTROSPECT_PUBLIC_CONSTRUCTORS ->
|
||||||
case INTROSPECT_DECLARED_CONSTRUCTORS -> attributes.put("queryAllDeclaredConstructors", true);
|
attributes.put("queryAllPublicConstructors", true);
|
||||||
case INVOKE_PUBLIC_CONSTRUCTORS -> attributes.put("allPublicConstructors", true);
|
case INTROSPECT_DECLARED_CONSTRUCTORS ->
|
||||||
case INVOKE_DECLARED_CONSTRUCTORS -> attributes.put("allDeclaredConstructors", true);
|
attributes.put("queryAllDeclaredConstructors", true);
|
||||||
case INTROSPECT_PUBLIC_METHODS -> attributes.put("queryAllPublicMethods", true);
|
case INVOKE_PUBLIC_CONSTRUCTORS ->
|
||||||
case INTROSPECT_DECLARED_METHODS -> attributes.put("queryAllDeclaredMethods", true);
|
attributes.put("allPublicConstructors", true);
|
||||||
|
case INVOKE_DECLARED_CONSTRUCTORS ->
|
||||||
|
attributes.put("allDeclaredConstructors", true);
|
||||||
|
case INTROSPECT_PUBLIC_METHODS ->
|
||||||
|
attributes.put("queryAllPublicMethods", true);
|
||||||
|
case INTROSPECT_DECLARED_METHODS ->
|
||||||
|
attributes.put("queryAllDeclaredMethods", true);
|
||||||
case INVOKE_PUBLIC_METHODS -> attributes.put("allPublicMethods", true);
|
case INVOKE_PUBLIC_METHODS -> attributes.put("allPublicMethods", true);
|
||||||
case INVOKE_DECLARED_METHODS -> attributes.put("allDeclaredMethods", true);
|
case INVOKE_DECLARED_METHODS ->
|
||||||
|
attributes.put("allDeclaredMethods", true);
|
||||||
case PUBLIC_CLASSES -> attributes.put("allPublicClasses", true);
|
case PUBLIC_CLASSES -> attributes.put("allPublicClasses", true);
|
||||||
case DECLARED_CLASSES -> attributes.put("allDeclaredClasses", true);
|
case DECLARED_CLASSES -> attributes.put("allDeclaredClasses", true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,16 @@ public class ProxyHintsWriterTests {
|
||||||
]""", hints);
|
]""", hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldWriteInnerClass() throws JSONException {
|
||||||
|
ProxyHints hints = new ProxyHints();
|
||||||
|
hints.registerJdkProxy(Inner.class);
|
||||||
|
assertEquals("""
|
||||||
|
[
|
||||||
|
{ "interfaces": [ "org.springframework.aot.nativex.ProxyHintsWriterTests$Inner" ] }
|
||||||
|
]""", hints);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldWriteCondition() throws JSONException {
|
void shouldWriteCondition() throws JSONException {
|
||||||
ProxyHints hints = new ProxyHints();
|
ProxyHints hints = new ProxyHints();
|
||||||
|
@ -81,4 +91,8 @@ public class ProxyHintsWriterTests {
|
||||||
JSONAssert.assertEquals(expectedString, out.toString(), JSONCompareMode.NON_EXTENSIBLE);
|
JSONAssert.assertEquals(expectedString, out.toString(), JSONCompareMode.NON_EXTENSIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface Inner {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -158,6 +158,27 @@ public class ReflectionHintsWriterTests {
|
||||||
""", hints);
|
""", hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void methodWithInnerClassParameter() throws JSONException {
|
||||||
|
ReflectionHints hints = new ReflectionHints();
|
||||||
|
hints.registerType(Integer.class, builder -> builder.withMethod("test", List.of(TypeReference.of(Inner.class)),
|
||||||
|
b -> b.withMode(ExecutableMode.INVOKE)));
|
||||||
|
|
||||||
|
assertEquals("""
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "java.lang.Integer",
|
||||||
|
"methods": [
|
||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"parameterTypes": ["org.springframework.aot.nativex.ReflectionHintsWriterTests$Inner"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
""", hints);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void methodAndQueriedMethods() throws JSONException {
|
void methodAndQueriedMethods() throws JSONException {
|
||||||
ReflectionHints hints = new ReflectionHints();
|
ReflectionHints hints = new ReflectionHints();
|
||||||
|
@ -194,4 +215,9 @@ public class ReflectionHintsWriterTests {
|
||||||
JSONAssert.assertEquals(expectedString, out.toString(), JSONCompareMode.NON_EXTENSIBLE);
|
JSONAssert.assertEquals(expectedString, out.toString(), JSONCompareMode.NON_EXTENSIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static class Inner {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue