Skip to content

Commit aa86fe6

Browse files
author
Sergey Grigorchuk
committed
+ Validation for return type of annotated methods (Iterable<> and Page<> are supported)
+ Support for Pageable/Sort params
1 parent 65d5aa0 commit aa86fe6

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

src/main/java/org/kolobok/annotation/FindWithOptionalParamsAnnotationProcessor.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,20 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
8383
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, String.format("Method '%s' in '%' cannot be annotated with @%s because it has default implementation.", method, method.getEnclosingElement(), ANNOTATION_TYPE));
8484
hasErrors = true;
8585
}
86+
JCTree methodTree = utils.getTree(method);
87+
JCTree.JCMethodDecl methodDecl = (JCTree.JCMethodDecl) methodTree;
88+
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, " return Type = " + methodDecl.getReturnType());
89+
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, " return Type.type = " + methodDecl.getReturnType().type);
90+
// processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, " return Type.type = " + methodDecl.getReturnType().type.stringValue());
91+
92+
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, " return Type class = " + methodDecl.getReturnType().getClass());
93+
String returnTypeName = String.valueOf(methodDecl.getReturnType().type);
94+
95+
if(!returnTypeName.startsWith("java.lang.Iterable") && !returnTypeName.startsWith("org.springframework.data.domain.Page")) {
96+
// ERROR Annotated method should return java.lang.Iterable
97+
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, String.format("Method '%s' in '%s' should return either 'org.springframework.data.domain.Page' or java.lang.Iterable<?> but it returns '%s'.", method, method.getEnclosingElement(), returnTypeName));
98+
hasErrors = true;
99+
}
86100
methodsToProcess.add(method);
87101
}
88102
}
@@ -176,16 +190,20 @@ private JCTree.JCIf generateIf(String[] parts,
176190
ArrayList<JCTree.JCVariableDecl> newParamsToCall = new ArrayList<>(paramsToCall);
177191
newParamsToCall.add(params.get(idx));
178192

179-
if(idx >= params.length() - 1) {
193+
if(idx >= parts.length - 1) {
180194
// Last param in the list - return;
181-
// nullSt = maker.Return(maker.Ident(getName(methodPrefix)));
182-
// nonNullSt = maker.Return(maker.Ident(getName(methodPrefix + "_And_" + params.get(idx).name)));
183195
JCTree.JCIdent funcNullName = maker.Ident(getName(methodPrefix.isEmpty() ? "findAll" : methodPrefix));
184-
String newMethodName = methodPrefix.isEmpty() ? methodPrefix + parts[idx] : methodPrefix + AND + parts[idx];
185-
newMethodName = firstLetterToLowerCase(newMethodName);
196+
String newMethodName = methodPrefix.isEmpty() ? firstLetterToLowerCase(parts[idx]) : methodPrefix + AND + parts[idx];
186197
JCTree.JCIdent funcNonNullName = maker.Ident(getName(newMethodName));
187198

188-
nullSt = maker.Return(maker.Apply(com.sun.tools.javac.util.List.<JCTree.JCExpression>nil(), funcNullName, com.sun.tools.javac.util.List.<JCTree.JCExpression>from(paramsToCall.stream().map(decl -> maker.Ident(getName("" + decl.getName()))).toArray(n -> new JCTree.JCExpression[n]))));
199+
// Add aditional (pageable/sort params)
200+
List<JCTree.JCVariableDecl> nullParamsToCall = new ArrayList<>(paramsToCall);
201+
for(int j = parts.length; j < params.size(); j++) {
202+
nullParamsToCall.add(params.get(j));
203+
newParamsToCall.add(params.get(j));
204+
}
205+
206+
nullSt = maker.Return(maker.Apply(com.sun.tools.javac.util.List.<JCTree.JCExpression>nil(), funcNullName, com.sun.tools.javac.util.List.<JCTree.JCExpression>from(nullParamsToCall.stream().map(decl -> maker.Ident(getName("" + decl.getName()))).toArray(n -> new JCTree.JCExpression[n]))));
189207
List<JCTree.JCIdent> lst = newParamsToCall.stream()
190208
.map(decl -> {
191209
return maker.Ident(getName("" + decl.getName()));

0 commit comments

Comments
 (0)