diff --git a/src/main/java/org/springframework/data/repository/aot/generate/AotQueryMethodGenerationContext.java b/src/main/java/org/springframework/data/repository/aot/generate/AotQueryMethodGenerationContext.java index 7c26d4262..34fc7f8ff 100644 --- a/src/main/java/org/springframework/data/repository/aot/generate/AotQueryMethodGenerationContext.java +++ b/src/main/java/org/springframework/data/repository/aot/generate/AotQueryMethodGenerationContext.java @@ -128,6 +128,13 @@ public class AotQueryMethodGenerationContext { return annotations.get(annotationType); } + /** + * @return the repository domain type. + */ + public Class getDomainType() { + return getRepositoryInformation().getDomainType(); + } + /** * @return the returned type without considering dynamic projections. */ @@ -158,6 +165,13 @@ public class AotQueryMethodGenerationContext { return TypeName.get(getReturnType().getType()); } + /** + * @return the {@link TypeName} representing the actual (component) method return type. + */ + public TypeName getActualReturnTypeName() { + return TypeName.get(getActualReturnType().getType()); + } + /** * Returns the required parameter name for the {@link Parameter#isBindable() bindable parameter} at the given * {@code parameterIndex} or throws {@link IllegalArgumentException} if the parameter cannot be determined by its 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 516756d4d..febbc6d1a 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 @@ -32,8 +32,10 @@ import org.springframework.core.MethodParameter; import org.springframework.core.ParameterNameDiscoverer; import org.springframework.core.ResolvableType; import org.springframework.data.repository.core.RepositoryInformation; +import org.springframework.data.util.TypeInformation; import org.springframework.javapoet.ParameterSpec; import org.springframework.javapoet.TypeName; +import org.springframework.util.ClassUtils; /** * Metadata about an AOT Repository method. @@ -53,7 +55,7 @@ class MethodMetadata { MethodMetadata(RepositoryInformation repositoryInformation, Method method) { this.returnType = repositoryInformation.getReturnType(method).toResolvableType(); - this.actualReturnType = repositoryInformation.getReturnedDomainTypeInformation(method).toResolvableType(); + this.actualReturnType = resolvePrimaryIfNecessary(repositoryInformation.getReturnedDomainTypeInformation(method)); Map methodArguments = new LinkedHashMap<>(); Map methodParameters = new LinkedHashMap<>(); @@ -67,6 +69,11 @@ class MethodMetadata { this.methodParameters = Collections.unmodifiableMap(methodParameters); } + static ResolvableType resolvePrimaryIfNecessary(TypeInformation type) { + return type.getType().isPrimitive() ? ResolvableType.forType(ClassUtils.resolvePrimitiveIfNecessary(type.getType())) + : type.toResolvableType(); + } + private static void initializeMethodArguments(Method method, ParameterNameDiscoverer nameDiscoverer, ResolvableType repositoryInterface, Map methodArguments, Map methodParameters) {