Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /