@ -15,6 +15,7 @@
@@ -15,6 +15,7 @@
* /
package org.springframework.data.repository.aot.generate ;
import java.lang.annotation.Annotation ;
import java.lang.reflect.Method ;
import java.lang.reflect.Parameter ;
import java.util.ArrayList ;
@ -29,9 +30,12 @@ import org.jspecify.annotations.Nullable;
@@ -29,9 +30,12 @@ import org.jspecify.annotations.Nullable;
import org.springframework.core.MethodParameter ;
import org.springframework.core.ResolvableType ;
import org.springframework.core.annotation.MergedAnnotation ;
import org.springframework.core.annotation.MergedAnnotations ;
import org.springframework.data.core.TypeInformation ;
import org.springframework.data.javapoet.TypeNames ;
import org.springframework.data.repository.core.RepositoryInformation ;
import org.springframework.javapoet.AnnotationSpec ;
import org.springframework.javapoet.ParameterSpec ;
import org.springframework.javapoet.TypeName ;
import org.springframework.util.Assert ;
@ -87,7 +91,7 @@ class MethodMetadata {
@@ -87,7 +91,7 @@ class MethodMetadata {
TypeName parameterType = parameterTypeName ( methodParameter , repositoryInterfaceType ) ;
Assert . notNull ( methodParameter . getParameterName ( ) , "MethodParameter.getParameterName() must not be null" ) ;
ParameterSpec parameterSpec = ParameterSpec . build er ( parameterType , methodParameter . getParameterName ( ) ) . build ( ) ;
ParameterSpec parameterSpec = build Parameter( parameterType , methodParameter ) ;
if ( methodArguments . containsKey ( parameterSpec . name ( ) ) ) {
throw new IllegalStateException ( "Parameter with name '" + parameterSpec . name ( ) + "' already exists." ) ;
@ -98,7 +102,19 @@ class MethodMetadata {
@@ -98,7 +102,19 @@ class MethodMetadata {
}
}
@SuppressWarnings ( "NullAway" )
private static ParameterSpec buildParameter ( TypeName parameterType , MethodParameter methodParameter ) {
ParameterSpec . Builder builder = ParameterSpec . builder ( parameterType , methodParameter . getParameterName ( ) ) ;
MergedAnnotations annotations = MergedAnnotations . from ( methodParameter . getParameterAnnotations ( ) ) ;
for ( MergedAnnotation < Annotation > annotation : annotations ) {
builder . addAnnotation ( AnnotationSpec . get ( annotation . synthesize ( ) ) ) ;
}
return builder . build ( ) ;
}
@SuppressWarnings ( "NullAway" )
static TypeName parameterTypeName ( MethodParameter methodParameter , Class < ? > repositoryInterface ) {
ResolvableType resolvableParameterType = ResolvableType . forMethodParameter ( methodParameter ) ;