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