Skip to content

Commit 48e28fe

Browse files
committed
Progress
1 parent 2486d4e commit 48e28fe

File tree

1 file changed

+36
-26
lines changed

1 file changed

+36
-26
lines changed

data-processor/src/main/java/io/micronaut/data/processor/visitors/RepositoryTypeElementVisitor.java

+36-26
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
import java.util.HashMap;
9191
import java.util.HashSet;
9292
import java.util.Iterator;
93+
import java.util.LinkedHashMap;
9394
import java.util.List;
9495
import java.util.ListIterator;
9596
import java.util.Map;
@@ -111,11 +112,11 @@ public class RepositoryTypeElementVisitor implements TypeElementVisitor<Reposito
111112
public static final String SPRING_REPO = "org.springframework.data.repository.Repository";
112113
public static final String JAKARTA_DATA_REPO = "jakarta.data.repository.DataRepository";
113114
private static final boolean IS_DOCUMENT_ANNOTATION_PROCESSOR = ClassUtils.isPresent("io.micronaut.data.document.processor.mapper.MappedEntityMapper", RepositoryTypeElementVisitor.class.getClassLoader());
115+
private static final Map<String, String> COMMON_TYPE_ROLES;
114116

115117
private ClassElement currentClass;
116118
private ClassElement currentRepository;
117119
private QueryBuilder queryEncoder;
118-
private final Map<String, String> typeRoles = new HashMap<>();
119120
private final List<MethodMatcher> methodsMatchers;
120121
private boolean failing = false;
121122
private final Set<String> visitedRepositories = new HashSet<>();
@@ -131,28 +132,36 @@ public class RepositoryTypeElementVisitor implements TypeElementVisitor<Reposito
131132
methodsMatchers = matcherList;
132133
}
133134

135+
static {
136+
Map<String, String> roles = new LinkedHashMap<>();
137+
roles.put(Pageable.class.getName(), TypeRole.PAGEABLE);
138+
roles.put(Sort.class.getName(), TypeRole.SORT);
139+
roles.put(CursoredPage.class.getName(), TypeRole.CURSORED_PAGE);
140+
roles.put(Page.class.getName(), TypeRole.PAGE);
141+
roles.put(Slice.class.getName(), TypeRole.SLICE);
142+
roles.put(Limit.class.getName(), TypeRole.LIMIT);
143+
// Spring Data
144+
roles.put("org.springframework.data.domain.Pageable", TypeRole.PAGEABLE);
145+
roles.put("org.springframework.data.domain.Page", TypeRole.PAGE);
146+
roles.put("org.springframework.data.domain.Slice", TypeRole.SLICE);
147+
roles.put("org.springframework.data.domain.Sort", TypeRole.SORT);
148+
// Jakarta Data
149+
roles.put("jakarta.data.page.Page", TypeRole.PAGE);
150+
roles.put("jakarta.data.page.CursoredPage", TypeRole.CURSORED_PAGE);
151+
roles.put("jakarta.data.page.PageRequest", TypeRole.PAGEABLE);
152+
roles.put("jakarta.data.Order", TypeRole.SORT);
153+
roles.put("jakarta.data.Sort", TypeRole.SORT);
154+
roles.put("jakarta.data.Limit", TypeRole.LIMIT);
155+
COMMON_TYPE_ROLES = Collections.unmodifiableMap(roles);
156+
}
157+
158+
private Map<String, String> currentClassTypeRoles;
159+
134160
/**
135161
* Default constructor.
136162
*/
137163
public RepositoryTypeElementVisitor() {
138-
typeRoles.put(Pageable.class.getName(), TypeRole.PAGEABLE);
139-
typeRoles.put(Sort.class.getName(), TypeRole.SORT);
140-
typeRoles.put(CursoredPage.class.getName(), TypeRole.CURSORED_PAGE);
141-
typeRoles.put(Page.class.getName(), TypeRole.PAGE);
142-
typeRoles.put(Slice.class.getName(), TypeRole.SLICE);
143-
typeRoles.put(Limit.class.getName(), TypeRole.LIMIT);
144-
// Spring Data
145-
typeRoles.put("org.springframework.data.domain.Pageable", TypeRole.PAGEABLE);
146-
typeRoles.put("org.springframework.data.domain.Page", TypeRole.PAGE);
147-
typeRoles.put("org.springframework.data.domain.Slice", TypeRole.SLICE);
148-
typeRoles.put("org.springframework.data.domain.Sort", TypeRole.SORT);
149-
// Jakarta Data
150-
typeRoles.put("jakarta.data.page.Page", TypeRole.PAGE);
151-
typeRoles.put("jakarta.data.page.CursoredPage", TypeRole.CURSORED_PAGE);
152-
typeRoles.put("jakarta.data.page.PageRequest", TypeRole.PAGEABLE);
153-
typeRoles.put("jakarta.data.Order", TypeRole.SORT);
154-
typeRoles.put("jakarta.data.Sort", TypeRole.SORT);
155-
typeRoles.put("jakarta.data.Limit", TypeRole.LIMIT);
164+
156165
}
157166

158167
@NonNull
@@ -181,6 +190,7 @@ private Map<ClassElement, FindInterceptorDef> createFindInterceptors(ClassElemen
181190

182191
@Override
183192
public void visitClass(ClassElement element, VisitorContext context) {
193+
currentClassTypeRoles = new LinkedHashMap<>(COMMON_TYPE_ROLES);
184194
String interfaceName = element.getName();
185195
if (failing) {
186196
return;
@@ -245,7 +255,7 @@ public SourcePersistentEntity apply(String entitySimpleName) {
245255
AnnotationClassValue cv = parameterRole.get("type", AnnotationClassValue.class).orElse(null);
246256
if (StringUtils.isNotEmpty(role) && cv != null) {
247257
context.getClassElement(cv.getName()).ifPresent(ce ->
248-
typeRoles.put(ce.getName(), role)
258+
currentClassTypeRoles.put(ce.getName(), role)
249259
);
250260
}
251261
}
@@ -283,7 +293,7 @@ public void visitMethod(MethodElement element, VisitorContext context) {
283293
currentRepository,
284294
context,
285295
element,
286-
typeRoles,
296+
currentClassTypeRoles,
287297
genericReturnType,
288298
parameters,
289299
findInterceptors);
@@ -301,7 +311,7 @@ public void visitMethod(MethodElement element, VisitorContext context) {
301311
genericReturnType,
302312
element,
303313
parametersInRole,
304-
typeRoles,
314+
currentClassTypeRoles,
305315
parameters,
306316
entityResolver,
307317
findInterceptors,
@@ -340,10 +350,10 @@ public void visitMethod(MethodElement element, VisitorContext context) {
340350
}
341351

342352
private Map<Element, String> getParametersInRole(ParameterElement[] parameters) {
343-
Map<Element, String> parametersInRole = new HashMap<>(2);
353+
Map<Element, String> parametersInRole = new LinkedHashMap<>(2);
344354
for (ParameterElement parameter : parameters) {
345355
ClassElement type = parameter.getType();
346-
this.typeRoles.entrySet().stream().filter(entry -> {
356+
currentClassTypeRoles.entrySet().stream().filter(entry -> {
347357
String roleType = entry.getKey();
348358
return type.isAssignable(roleType);
349359
}
@@ -358,7 +368,7 @@ private List<ParameterElement> getParametersNotInRole(ParameterElement[] paramet
358368
List<ParameterElement> parametersNotInRole = new ArrayList<>();
359369
for (ParameterElement parameter : parameters) {
360370
ClassElement type = parameter.getType();
361-
if (this.typeRoles.keySet().stream().noneMatch(type::isAssignable)) {
371+
if (currentClassTypeRoles.keySet().stream().noneMatch(type::isAssignable)) {
362372
parametersNotInRole.add(parameter);
363373
}
364374
}
@@ -488,7 +498,7 @@ private void processMethodInfo(MethodMatchContext methodMatchContext, MethodMatc
488498
}
489499

490500
ClassElement returnType = method.getReturnType().getType();
491-
for (Map.Entry<String, String> stringStringEntry : typeRoles.entrySet()) {
501+
for (Map.Entry<String, String> stringStringEntry : currentClassTypeRoles.entrySet()) {
492502
if (returnType.isAssignable(stringStringEntry.getKey())) {
493503
annotationBuilder.member(DataMethodQuery.META_MEMBER_RETURN_TYPE_ROLE, stringStringEntry.getValue());
494504
break;

0 commit comments

Comments
 (0)