Browse Source

Use TypeReference consistently in hints writer

Closes gh-28606
pull/28613/head
Stephane Nicoll 3 years ago
parent
commit
100ce9642a
  1. 4
      spring-core/src/main/java/org/springframework/aot/nativex/ProxyHintsWriter.java
  2. 24
      spring-core/src/main/java/org/springframework/aot/nativex/ReflectionHintsWriter.java
  3. 14
      spring-core/src/test/java/org/springframework/aot/nativex/ProxyHintsWriterTests.java
  4. 26
      spring-core/src/test/java/org/springframework/aot/nativex/ReflectionHintsWriterTests.java

4
spring-core/src/main/java/org/springframework/aot/nativex/ProxyHintsWriter.java

@ -21,7 +21,6 @@ import java.util.Map; @@ -21,7 +21,6 @@ import java.util.Map;
import org.springframework.aot.hint.JdkProxyHint;
import org.springframework.aot.hint.ProxyHints;
import org.springframework.aot.hint.TypeReference;
/**
* Write {@link JdkProxyHint}s contained in a {@link ProxyHints} to the JSON
@ -46,8 +45,7 @@ class ProxyHintsWriter { @@ -46,8 +45,7 @@ class ProxyHintsWriter {
private Map<String, Object> toAttributes(JdkProxyHint hint) {
Map<String, Object> attributes = new LinkedHashMap<>();
handleCondition(attributes, hint);
attributes.put("interfaces", hint.getProxiedInterfaces().stream()
.map(TypeReference::getCanonicalName).toList());
attributes.put("interfaces", hint.getProxiedInterfaces());
return attributes;
}

24
spring-core/src/main/java/org/springframework/aot/nativex/ReflectionHintsWriter.java

@ -29,7 +29,6 @@ import org.springframework.aot.hint.FieldHint; @@ -29,7 +29,6 @@ import org.springframework.aot.hint.FieldHint;
import org.springframework.aot.hint.MemberCategory;
import org.springframework.aot.hint.ReflectionHints;
import org.springframework.aot.hint.TypeHint;
import org.springframework.aot.hint.TypeReference;
import org.springframework.lang.Nullable;
/**
@ -96,7 +95,7 @@ class ReflectionHintsWriter { @@ -96,7 +95,7 @@ class ReflectionHintsWriter {
private Map<String, Object> toAttributes(ExecutableHint hint) {
Map<String, Object> attributes = new LinkedHashMap<>();
attributes.put("name", hint.getName());
attributes.put("parameterTypes", hint.getParameterTypes().stream().map(TypeReference::getCanonicalName).toList());
attributes.put("parameterTypes", hint.getParameterTypes());
return attributes;
}
@ -105,14 +104,21 @@ class ReflectionHintsWriter { @@ -105,14 +104,21 @@ class ReflectionHintsWriter {
switch (category) {
case PUBLIC_FIELDS -> attributes.put("allPublicFields", true);
case DECLARED_FIELDS -> attributes.put("allDeclaredFields", true);
case INTROSPECT_PUBLIC_CONSTRUCTORS -> attributes.put("queryAllPublicConstructors", true);
case INTROSPECT_DECLARED_CONSTRUCTORS -> attributes.put("queryAllDeclaredConstructors", true);
case INVOKE_PUBLIC_CONSTRUCTORS -> 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 INTROSPECT_PUBLIC_CONSTRUCTORS ->
attributes.put("queryAllPublicConstructors", true);
case INTROSPECT_DECLARED_CONSTRUCTORS ->
attributes.put("queryAllDeclaredConstructors", true);
case INVOKE_PUBLIC_CONSTRUCTORS ->
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_DECLARED_METHODS -> attributes.put("allDeclaredMethods", true);
case INVOKE_DECLARED_METHODS ->
attributes.put("allDeclaredMethods", true);
case PUBLIC_CLASSES -> attributes.put("allPublicClasses", true);
case DECLARED_CLASSES -> attributes.put("allDeclaredClasses", true);
}

14
spring-core/src/test/java/org/springframework/aot/nativex/ProxyHintsWriterTests.java

@ -63,6 +63,16 @@ public class ProxyHintsWriterTests { @@ -63,6 +63,16 @@ public class ProxyHintsWriterTests {
]""", hints);
}
@Test
void shouldWriteInnerClass() throws JSONException {
ProxyHints hints = new ProxyHints();
hints.registerJdkProxy(Inner.class);
assertEquals("""
[
{ "interfaces": [ "org.springframework.aot.nativex.ProxyHintsWriterTests$Inner" ] }
]""", hints);
}
@Test
void shouldWriteCondition() throws JSONException {
ProxyHints hints = new ProxyHints();
@ -81,4 +91,8 @@ public class ProxyHintsWriterTests { @@ -81,4 +91,8 @@ public class ProxyHintsWriterTests {
JSONAssert.assertEquals(expectedString, out.toString(), JSONCompareMode.NON_EXTENSIBLE);
}
interface Inner {
}
}

26
spring-core/src/test/java/org/springframework/aot/nativex/ReflectionHintsWriterTests.java

@ -158,6 +158,27 @@ public class ReflectionHintsWriterTests { @@ -158,6 +158,27 @@ public class ReflectionHintsWriterTests {
""", 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
void methodAndQueriedMethods() throws JSONException {
ReflectionHints hints = new ReflectionHints();
@ -194,4 +215,9 @@ public class ReflectionHintsWriterTests { @@ -194,4 +215,9 @@ public class ReflectionHintsWriterTests {
JSONAssert.assertEquals(expectedString, out.toString(), JSONCompareMode.NON_EXTENSIBLE);
}
static class Inner {
}
}

Loading…
Cancel
Save