diff --git a/spring-core/src/main/java/org/springframework/aot/nativex/ReflectionHintsSerializer.java b/spring-core/src/main/java/org/springframework/aot/nativex/ReflectionHintsSerializer.java index 47fc5951ceb..6b7661efd82 100644 --- a/spring-core/src/main/java/org/springframework/aot/nativex/ReflectionHintsSerializer.java +++ b/spring-core/src/main/java/org/springframework/aot/nativex/ReflectionHintsSerializer.java @@ -98,11 +98,9 @@ class ReflectionHintsSerializer { if (methodIterator.hasNext()) { builder.append(",\n"); serializeMethods("methods", methodIterator, builder); - if (queriedMethodIterator.hasNext()) { - builder.append(",\n"); - } } if (queriedMethodIterator.hasNext()) { + builder.append(",\n"); serializeMethods("queriedMethods", queriedMethodIterator, builder); } } diff --git a/spring-core/src/test/java/org/springframework/aot/nativex/ReflectionHintsSerializerTests.java b/spring-core/src/test/java/org/springframework/aot/nativex/ReflectionHintsSerializerTests.java index 00f887add2b..c2243d4c68b 100644 --- a/spring-core/src/test/java/org/springframework/aot/nativex/ReflectionHintsSerializerTests.java +++ b/spring-core/src/test/java/org/springframework/aot/nativex/ReflectionHintsSerializerTests.java @@ -117,6 +117,76 @@ public class ReflectionHintsSerializerTests { ]""", hints); } + @Test + void queriedMethods() throws JSONException { + ReflectionHints hints = new ReflectionHints(); + hints.registerType(Integer.class, builder -> builder.withMethod("parseInt", List.of(TypeReference.of(String.class)), + (b) -> b.withMode(ExecutableMode.INTROSPECT))); + + assertEquals(""" + [ + { + "name": "java.lang.Integer", + "queriedMethods": [ + { + "name": "parseInt", + "parameterTypes": ["java.lang.String"] + } + ] + } + ] + """, hints); + } + + @Test + void methods() throws JSONException { + ReflectionHints hints = new ReflectionHints(); + hints.registerType(Integer.class, builder -> builder.withMethod("parseInt", List.of(TypeReference.of(String.class)), + (b) -> b.withMode(ExecutableMode.INVOKE))); + + assertEquals(""" + [ + { + "name": "java.lang.Integer", + "methods": [ + { + "name": "parseInt", + "parameterTypes": ["java.lang.String"] + } + ] + } + ] + """, hints); + } + @Test + void methodAndQueriedMethods() throws JSONException { + ReflectionHints hints = new ReflectionHints(); + hints.registerType(Integer.class, builder -> builder.withMethod("parseInt", List.of(TypeReference.of(String.class)), + (b) -> b.withMode(ExecutableMode.INVOKE))); + hints.registerType(Integer.class, builder -> builder.withMethod("parseInt", List.of(TypeReference.of(String.class)), + (b) -> b.withMode(ExecutableMode.INTROSPECT))); + + assertEquals(""" + [ + { + "name": "java.lang.Integer", + "queriedMethods": [ + { + "name": "parseInt", + "parameterTypes": ["java.lang.String"] + } + ], + "methods": [ + { + "name": "parseInt", + "parameterTypes": ["java.lang.String"] + } + ] + } + ] + """, hints); + } + private void assertEquals(String expectedString, ReflectionHints hints) throws JSONException { JSONAssert.assertEquals(expectedString, serializer.serialize(hints), JSONCompareMode.LENIENT); }