@@ -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