Skip to content

Commit 66f5ee0

Browse files
committed
Polishing.
Add convenience methods for domain type and actual type resolution. See #3344 Original pull request: #3351
1 parent aa282f5 commit 66f5ee0

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/main/java/org/springframework/data/repository/aot/generate/AotQueryMethodGenerationContext.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@ public <A extends Annotation> MergedAnnotation<A> getAnnotation(Class<A> annotat
128128
return annotations.get(annotationType);
129129
}
130130

131+
/**
132+
* @return the repository domain type.
133+
*/
134+
public Class<?> getDomainType() {
135+
return getRepositoryInformation().getDomainType();
136+
}
137+
131138
/**
132139
* @return the returned type without considering dynamic projections.
133140
*/
@@ -158,6 +165,13 @@ public TypeName getReturnTypeName() {
158165
return TypeName.get(getReturnType().getType());
159166
}
160167

168+
/**
169+
* @return the {@link TypeName} representing the actual (component) method return type.
170+
*/
171+
public TypeName getActualReturnTypeName() {
172+
return TypeName.get(getActualReturnType().getType());
173+
}
174+
161175
/**
162176
* Returns the required parameter name for the {@link Parameter#isBindable() bindable parameter} at the given
163177
* {@code parameterIndex} or throws {@link IllegalArgumentException} if the parameter cannot be determined by its

src/main/java/org/springframework/data/repository/aot/generate/MethodMetadata.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@
3232
import org.springframework.core.ParameterNameDiscoverer;
3333
import org.springframework.core.ResolvableType;
3434
import org.springframework.data.repository.core.RepositoryInformation;
35+
import org.springframework.data.util.TypeInformation;
3536
import org.springframework.javapoet.ParameterSpec;
3637
import org.springframework.javapoet.TypeName;
38+
import org.springframework.util.ClassUtils;
3739

3840
/**
3941
* Metadata about an AOT Repository method.
@@ -53,7 +55,7 @@ class MethodMetadata {
5355
MethodMetadata(RepositoryInformation repositoryInformation, Method method) {
5456

5557
this.returnType = repositoryInformation.getReturnType(method).toResolvableType();
56-
this.actualReturnType = repositoryInformation.getReturnedDomainTypeInformation(method).toResolvableType();
58+
this.actualReturnType = resolvePrimaryIfNecessary(repositoryInformation.getReturnedDomainTypeInformation(method));
5759

5860
Map<String, ParameterSpec> methodArguments = new LinkedHashMap<>();
5961
Map<String, MethodParameter> methodParameters = new LinkedHashMap<>();
@@ -67,6 +69,11 @@ class MethodMetadata {
6769
this.methodParameters = Collections.unmodifiableMap(methodParameters);
6870
}
6971

72+
static ResolvableType resolvePrimaryIfNecessary(TypeInformation<?> type) {
73+
return type.getType().isPrimitive() ? ResolvableType.forType(ClassUtils.resolvePrimitiveIfNecessary(type.getType()))
74+
: type.toResolvableType();
75+
}
76+
7077
private static void initializeMethodArguments(Method method, ParameterNameDiscoverer nameDiscoverer,
7178
ResolvableType repositoryInterface, Map<String, ParameterSpec> methodArguments,
7279
Map<String, MethodParameter> methodParameters) {

0 commit comments

Comments
 (0)