Skip to content

Commit 755bd9f

Browse files
committed
produce error for a Sort parameter on a repo method which returns a projection
this would have saved my ass on Quarkus Insights
1 parent 2e45aa8 commit 755bd9f

File tree

1 file changed

+31
-15
lines changed

1 file changed

+31
-15
lines changed

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

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}
@@ -1881,7 +1901,7 @@ else if (parameterType.startsWith(JD_SORT)) {
18811901
}
18821902

18831903
private List<OrderBy> orderByList(ExecutableElement method, TypeElement returnType) {
1884-
final TypeElement entityType = implicitEntityType( returnType );
1904+
final TypeElement entityType = explicitEntityType( returnType );
18851905
if ( entityType != null ) {
18861906
final AnnotationMirror orderByList = getAnnotationMirror( method, JD_ORDER_BY_LIST );
18871907
if ( orderByList != null ) {
@@ -2611,7 +2631,7 @@ else if ( primaryEntity != null ) {
26112631
}
26122632
}
26132633

2614-
private @Nullable TypeElement implicitEntityType(@Nullable TypeElement resultType) {
2634+
private @Nullable TypeElement explicitEntityType(@Nullable TypeElement resultType) {
26152635
if ( resultType != null && hasAnnotation(resultType, ENTITY) ) {
26162636
return resultType;
26172637
}
@@ -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

Comments
 (0)