From c9fc22aad510d8c575b7e9db2ef65d1d36422522 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Wed, 17 Dec 2025 13:51:36 +0100 Subject: [PATCH 1/2] Prepare issue branch. --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0857d34cfa..74c344af96 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-commons - 4.0.2-SNAPSHOT + 4.0.x-GH-3431-SNAPSHOT Spring Data Core Core Spring concepts underpinning every Spring Data module. @@ -34,6 +34,7 @@ 1.4.26 spring.data.commons 1.8 + 7.0.3-SNAPSHOT From 80007ac922aa62976effb310d568acb874af68e8 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Wed, 17 Dec 2025 14:01:57 +0100 Subject: [PATCH 2/2] Use shared instance of DefaultParameterNameDiscoverer. --- .../mapping/model/InstanceCreatorMetadataDiscoverer.java | 4 +--- .../data/mapping/model/PreferredConstructorDiscoverer.java | 4 +--- .../AotRepositoryBeanDefinitionPropertiesDecorator.java | 2 +- .../data/repository/aot/generate/MethodMetadata.java | 3 +-- .../springframework/data/repository/query/Parameters.java | 6 ------ .../data/repository/support/MethodParameters.java | 3 +-- .../data/util/NullnessMethodInvocationValidator.java | 3 +-- 7 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscoverer.java b/src/main/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscoverer.java index 5c7c682b9d..0611d91920 100644 --- a/src/main/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscoverer.java +++ b/src/main/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscoverer.java @@ -51,8 +51,6 @@ */ class InstanceCreatorMetadataDiscoverer { - private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer(); - /** * Discover an entity creator * @@ -146,7 +144,7 @@ private static > FactoryMethod get Annotation[][] parameterAnnotations = method.getParameterAnnotations(); List> types = entity.getTypeInformation().getParameterTypes(method); - String[] parameterNames = PARAMETER_NAME_DISCOVERER.getParameterNames(method); + String[] parameterNames = DefaultParameterNameDiscoverer.getSharedInstance().getParameterNames(method); for (int i = 0; i < parameters.length; i++) { diff --git a/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java b/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java index 1b3fbe1cbc..f05aa4b41e 100644 --- a/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java +++ b/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java @@ -213,8 +213,6 @@ > PreferredConstructor discover(TypeInf } }; - private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer(); - /** * Find the appropriate discoverer for {@code type}. * @@ -249,7 +247,7 @@ private static > PreferredConstructor b } List> parameterTypes = typeInformation.getParameterTypes(constructor); - String[] parameterNames = PARAMETER_NAME_DISCOVERER.getParameterNames(constructor); + String[] parameterNames = DefaultParameterNameDiscoverer.getSharedInstance().getParameterNames(constructor); Parameter[] parameters = new Parameter[parameterTypes.size()]; Annotation[][] parameterAnnotations = constructor.getParameterAnnotations(); diff --git a/src/main/java/org/springframework/data/repository/aot/generate/AotRepositoryBeanDefinitionPropertiesDecorator.java b/src/main/java/org/springframework/data/repository/aot/generate/AotRepositoryBeanDefinitionPropertiesDecorator.java index f8abd36650..67d463819c 100644 --- a/src/main/java/org/springframework/data/repository/aot/generate/AotRepositoryBeanDefinitionPropertiesDecorator.java +++ b/src/main/java/org/springframework/data/repository/aot/generate/AotRepositoryBeanDefinitionPropertiesDecorator.java @@ -102,7 +102,7 @@ public CodeBlock decorate() { for (int i = 0; i < it.getParameterCount(); i++) { MethodParameter parameter = new MethodParameter(it, i); - parameter.initParameterNameDiscovery(new DefaultParameterNameDiscoverer()); + parameter.initParameterNameDiscovery(DefaultParameterNameDiscoverer.getSharedInstance()); callbackMethod.addParameter(parameter.getParameterType(), parameter.getParameterName()); } diff --git a/src/main/java/org/springframework/data/repository/aot/generate/MethodMetadata.java b/src/main/java/org/springframework/data/repository/aot/generate/MethodMetadata.java index 1dc86e003a..9ff16fd329 100644 --- a/src/main/java/org/springframework/data/repository/aot/generate/MethodMetadata.java +++ b/src/main/java/org/springframework/data/repository/aot/generate/MethodMetadata.java @@ -63,9 +63,8 @@ class MethodMetadata { Map methodParameters = new LinkedHashMap<>(); ResolvableType repositoryInterface = ResolvableType.forClass(repositoryInformation.getRepositoryInterface()); - ParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); - initializeMethodArguments(method, nameDiscoverer, repositoryInterface, methodArguments, methodParameters); + initializeMethodArguments(method, DefaultParameterNameDiscoverer.getSharedInstance(), repositoryInterface, methodArguments, methodParameters); this.methodArguments = Collections.unmodifiableMap(methodArguments); this.methodParameters = Collections.unmodifiableMap(methodParameters); diff --git a/src/main/java/org/springframework/data/repository/query/Parameters.java b/src/main/java/org/springframework/data/repository/query/Parameters.java index 99a0755f8c..6e639b4d74 100644 --- a/src/main/java/org/springframework/data/repository/query/Parameters.java +++ b/src/main/java/org/springframework/data/repository/query/Parameters.java @@ -23,9 +23,7 @@ import java.util.List; import java.util.function.Function; -import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.MethodParameter; -import org.springframework.core.ParameterNameDiscoverer; import org.springframework.core.ResolvableType; import org.springframework.data.domain.Limit; import org.springframework.data.domain.Pageable; @@ -56,8 +54,6 @@ public abstract class Parameters, T extends Parameter "Either use @%s on all parameters except %s and %s typed once, or none at all", Param.class.getSimpleName(), Pageable.class.getSimpleName(), Sort.class.getSimpleName()); - private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer(); - private final int vectorIndex; private final int scoreIndex; private final int scoreRangeIndex; @@ -102,8 +98,6 @@ protected Parameters(ParametersSource parametersSource, Function parameters; /** @@ -66,7 +65,7 @@ public MethodParameters(Method method, Optional namingAnnot for (int i = 0; i < method.getParameterCount(); i++) { MethodParameter parameter = new AnnotationNamingMethodParameter(method, i, namingAnnotation); - parameter.initParameterNameDiscovery(discoverer); + parameter.initParameterNameDiscovery(DefaultParameterNameDiscoverer.getSharedInstance()); parameters.add(parameter); } } diff --git a/src/main/java/org/springframework/data/util/NullnessMethodInvocationValidator.java b/src/main/java/org/springframework/data/util/NullnessMethodInvocationValidator.java index 1a86d3c413..bb1b1860ac 100644 --- a/src/main/java/org/springframework/data/util/NullnessMethodInvocationValidator.java +++ b/src/main/java/org/springframework/data/util/NullnessMethodInvocationValidator.java @@ -52,7 +52,6 @@ */ public class NullnessMethodInvocationValidator implements MethodInterceptor { - private final ParameterNameDiscoverer discoverer = new DefaultParameterNameDiscoverer(); private final Map nullabilityCache = new ConcurrentHashMap<>(16); /** @@ -79,7 +78,7 @@ public static boolean supports(Class type) { if (nullness == null) { - nullness = MethodNullness.of(method, discoverer); + nullness = MethodNullness.of(method, DefaultParameterNameDiscoverer.getSharedInstance()); nullabilityCache.put(method, nullness); }