Skip to content

Commit f5c4342

Browse files
committed
add a compiler warning when a repo method accepts PageRequest but has no order
1 parent 124534f commit f5c4342

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1645,6 +1645,7 @@ private void createCriteriaFinder(
16451645
checkFinderParameter(entity, parameter);
16461646
}
16471647
}
1648+
warnAboutMissingOrder( method );
16481649
putMember( methodKey,
16491650
new CriteriaFinderMethod(
16501651
this, method,
@@ -1911,6 +1912,7 @@ private void createMultipleParameterFinder(
19111912
multivalued.add( false );
19121913
}
19131914
}
1915+
warnAboutMissingOrder( method );
19141916
if ( !usingStatelessSession( sessionType[0] ) // no byNaturalId() lookup API for SS
19151917
&& matchesNaturalKey( entity, fieldTypes ) ) {
19161918
putMember( methodKey,
@@ -1959,6 +1961,25 @@ && matchesNaturalKey( entity, fieldTypes ) ) {
19591961
}
19601962
}
19611963

1964+
private void warnAboutMissingOrder(ExecutableElement method) {
1965+
if ( !hasAnnotation( method, JD_ORDER_BY, JD_ORDER_BY_LIST ) ) {
1966+
boolean hasPageRequest = false;
1967+
boolean hasSortOrOrder = false;
1968+
for ( VariableElement parameter : method.getParameters() ) {
1969+
final String parameterType = parameter.asType().toString();
1970+
if ( isOrderParam( parameterType ) ) {
1971+
hasSortOrOrder = true;
1972+
}
1973+
if ( isPageParam( parameterType ) ) {
1974+
hasPageRequest = true;
1975+
}
1976+
}
1977+
if ( hasPageRequest && !hasSortOrOrder ) {
1978+
context.message( method, "'PageRequest' with no 'Sort' or 'Order' and no '@OrderBy'", Diagnostic.Kind.MANDATORY_WARNING );
1979+
}
1980+
}
1981+
}
1982+
19621983
private void createSingleParameterFinder(
19631984
ExecutableElement method, TypeMirror returnType, TypeElement entity, @Nullable String containerType) {
19641985
final String methodName = method.getSimpleName().toString();

0 commit comments

Comments
 (0)