diff --git a/spring-core/src/main/java/org/springframework/aot/hint/BindingReflectionHintsRegistrar.java b/spring-core/src/main/java/org/springframework/aot/hint/BindingReflectionHintsRegistrar.java index f5620a68327..173e75f45e1 100644 --- a/spring-core/src/main/java/org/springframework/aot/hint/BindingReflectionHintsRegistrar.java +++ b/spring-core/src/main/java/org/springframework/aot/hint/BindingReflectionHintsRegistrar.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 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. @@ -148,7 +148,8 @@ public class BindingReflectionHintsRegistrar { String companionClassName = clazz.getCanonicalName() + KOTLIN_COMPANION_SUFFIX; if (ClassUtils.isPresent(companionClassName, null)) { Class companionClass = ClassUtils.resolveClassName(companionClassName, null); - Method serializerMethod = ClassUtils.getMethodIfAvailable(companionClass, "serializer"); + Method serializerMethod = ClassUtils.getMethodIfAvailable(companionClass, "serializer", + (Class[]) null); if (serializerMethod != null) { hints.registerMethod(serializerMethod, ExecutableMode.INVOKE); } diff --git a/spring-core/src/test/kotlin/org/springframework/aot/hint/BindingReflectionHintsRegistrarKotlinTests.kt b/spring-core/src/test/kotlin/org/springframework/aot/hint/BindingReflectionHintsRegistrarKotlinTests.kt index 40d9b336104..3cc2eaa022d 100644 --- a/spring-core/src/test/kotlin/org/springframework/aot/hint/BindingReflectionHintsRegistrarKotlinTests.kt +++ b/spring-core/src/test/kotlin/org/springframework/aot/hint/BindingReflectionHintsRegistrarKotlinTests.kt @@ -80,6 +80,12 @@ class BindingReflectionHintsRegistrarKotlinTests { bindingRegistrar.registerReflectionHints(hints.reflection(), SampleClass::class.java) assertThat(RuntimeHintsPredicates.reflection().onType(SampleClass::class.java)).accepts(hints) } + + @Test + fun `Register reflection hints on serializer function with parameter`() { + bindingRegistrar.registerReflectionHints(hints.reflection(), SampleResult::class.java) + assertThat(RuntimeHintsPredicates.reflection().onMethodInvocation(SampleResult.Companion::class.java, "serializer")).accepts(hints) + } } @kotlinx.serialization.Serializable @@ -88,3 +94,17 @@ class SampleSerializableClass(val name: String) data class SampleDataClass(val name: String, val isNonNullable: Boolean, val isNullable: Boolean?) class SampleClass(val name: String) + +@kotlinx.serialization.Serializable +data class SampleResult ( + val code: Int, + val message: String, + val data: T, +) { + companion object { + private const val SUCCESS: Int = 200 + private const val FAILURE: Int = 500 + fun success(message: String, data: T) = SampleResult(code = SUCCESS, message = message, data = data) + fun failure(message: String, data: T) = SampleResult(code = FAILURE, message = message, data = data) + } +}