@@ -1791,17 +1791,37 @@ private void createCriteriaFinder(
17911791 );
17921792 }
17931793
1794- private void checkFinderParameter (TypeElement entity , VariableElement parameter ) {
1794+ private void checkFinderParameter (@ Nullable TypeElement entity , VariableElement parameter ) {
17951795 final Types types = context .getTypeUtils ();
17961796 final TypeMirror parameterType = parameterType (parameter );
17971797 final String typeName = parameterType .toString ();
1798- if ( isOrderParam ( typeName ) || isRestrictionParam ( typeName ) ) {
1798+ if ( isRestrictionParam ( typeName ) ) {
17991799 final TypeMirror typeArgument = getTypeArgument ( parameterType );
1800- if ( typeArgument == null ) {
1801- missingTypeArgError ( entity .getSimpleName ().toString (), parameter , typeName );
1800+ final TypeElement implicitEntityType = entity == null ? primaryEntity : entity ;
1801+ if ( implicitEntityType != null ) {
1802+ if ( typeArgument == null ) {
1803+ missingTypeArgError ( implicitEntityType .getSimpleName ().toString (), parameter , typeName );
1804+ }
1805+ else if ( !types .isSameType ( typeArgument , implicitEntityType .asType () ) ) {
1806+ wrongTypeArgError ( implicitEntityType .getSimpleName ().toString (), parameter , typeName );
1807+ }
18021808 }
1803- else if ( !types .isSameType ( typeArgument , entity .asType () ) ) {
1804- wrongTypeArgError ( entity .getSimpleName ().toString (), parameter , typeName );
1809+ // else {
1810+ // message( parameter, "repository method does have well-defined entity type", Diagnostic.Kind.ERROR );
1811+ // }
1812+ }
1813+ else if ( isOrderParam ( typeName ) ) {
1814+ final TypeMirror typeArgument = getTypeArgument ( parameterType );
1815+ if ( entity != null ) {
1816+ if ( typeArgument == null ) {
1817+ missingTypeArgError ( entity .getSimpleName ().toString (), parameter , typeName );
1818+ }
1819+ else if ( !types .isSameType ( typeArgument , entity .asType () ) ) {
1820+ wrongTypeArgError ( entity .getSimpleName ().toString (), parameter , typeName );
1821+ }
1822+ }
1823+ else {
1824+ message ( parameter , "repository method does not return entity type" , Diagnostic .Kind .ERROR );
18051825 }
18061826 }
18071827 }
@@ -3224,24 +3244,20 @@ private void checkParameters(
32243244 }
32253245 if ( returnType != null ) {
32263246 for ( VariableElement parameter : method .getParameters () ) {
3227- final TypeElement entity = implicitEntityType (returnType );
3228- if ( entity != null ) {
3229- checkFinderParameter (entity , parameter );
3230- }
3231- // else? what?
3247+ checkFinderParameter ( explicitEntityType (returnType ), parameter );
32323248 }
32333249 }
32343250 }
32353251
3236- private @ Nullable TypeElement implicitEntityType (@ Nullable TypeMirror resultType ) {
3252+ private @ Nullable TypeElement explicitEntityType (@ Nullable TypeMirror resultType ) {
32373253 if ( resultType != null && resultType .getKind () == TypeKind .DECLARED ) {
32383254 final DeclaredType declaredType = (DeclaredType ) resultType ;
32393255 final Element typeElement = declaredType .asElement ();
32403256 if ( hasAnnotation (typeElement , ENTITY ) ) {
32413257 return (TypeElement ) typeElement ;
32423258 }
32433259 }
3244- return primaryEntity ;
3260+ return null ;
32453261 }
32463262
32473263 private static boolean typeNameEquals (TypeMirror parameterType , String typeName ) {
0 commit comments