Skip to content

Commit a2e683f

Browse files
committed
improve message for validation of Restriction parameter of repo method
and remove a hack that I believe is now obsolete
1 parent f230086 commit a2e683f

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

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

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1674,12 +1674,12 @@ private void checkFinderParameter(TypeElement entity, VariableElement parameter)
16741674
final TypeMirror parameterType = parameterType(parameter);
16751675
final String typeName = parameterType.toString();
16761676
if ( isOrderParam( typeName ) || isRestrictionParam( typeName ) ) {
1677-
final TypeMirror typeArgument = getTypeArgument( parameterType, entity );
1677+
final TypeMirror typeArgument = getTypeArgument( parameterType );
16781678
if ( typeArgument == null ) {
1679-
missingTypeArgError( entity.getSimpleName().toString(), parameter );
1679+
missingTypeArgError( entity.getSimpleName().toString(), parameter, typeName );
16801680
}
16811681
else if ( !types.isSameType( typeArgument, entity.asType() ) ) {
1682-
wrongTypeArgError( entity.getSimpleName().toString(), parameter );
1682+
wrongTypeArgError( entity.getSimpleName().toString(), parameter, typeName );
16831683
}
16841684
}
16851685
}
@@ -1727,16 +1727,37 @@ private void createCriteriaDelete(ExecutableElement method) {
17271727
}
17281728
}
17291729

1730-
private void wrongTypeArgError(String entity, VariableElement parameter) {
1731-
message(parameter, "mismatched type of order (should be 'Order<? super " + entity + ">')",
1730+
private void wrongTypeArgError(String entity, VariableElement parameter, String parameterType) {
1731+
message(parameter, "mismatched type of " + message(parameterType, entity),
17321732
Diagnostic.Kind.ERROR );
17331733
}
17341734

1735-
private void missingTypeArgError(String entity, VariableElement parameter) {
1736-
message(parameter, "missing type of order (should be 'Order<? super " + entity + ">')",
1735+
private void missingTypeArgError(String entity, VariableElement parameter, String parameterType) {
1736+
message(parameter, "missing type of " + message(parameterType, entity),
17371737
Diagnostic.Kind.ERROR );
17381738
}
17391739

1740+
private String message(String parameterType, String entity) {
1741+
if (parameterType.startsWith(HIB_ORDER) || parameterType.startsWith(JD_ORDER)) {
1742+
return "order (should be 'Order<? super " + entity + ">')";
1743+
}
1744+
else if (parameterType.startsWith(LIST + "<" + HIB_ORDER)) {
1745+
return "order (should be 'List<Order<? super " + entity + ">>')";
1746+
}
1747+
else if (parameterType.startsWith(HIB_RESTRICTION)) {
1748+
return "restriction (should be 'Restriction<? super " + entity + ">')";
1749+
}
1750+
else if (parameterType.startsWith(LIST + "<" + HIB_RESTRICTION)) {
1751+
return "restriction (should be 'List<Restriction<? super " + entity + ">>')";
1752+
}
1753+
else if (parameterType.startsWith(JD_SORT)) {
1754+
return "sort (should be 'Sort<? super " + entity + ">')";
1755+
}
1756+
else {
1757+
return "parameter";
1758+
}
1759+
}
1760+
17401761
private List<OrderBy> orderByList(ExecutableElement method, TypeElement returnType) {
17411762
final TypeElement entityType = implicitEntityType( returnType );
17421763
if ( entityType != null ) {
@@ -1780,17 +1801,17 @@ private OrderBy orderByExpression(AnnotationMirror orderBy, TypeElement entityTy
17801801
return new OrderBy( path, descending, ignoreCase );
17811802
}
17821803

1783-
private static @Nullable TypeMirror getTypeArgument(TypeMirror parameterType, TypeElement entity) {
1804+
private static @Nullable TypeMirror getTypeArgument(TypeMirror parameterType) {
17841805
switch ( parameterType.getKind() ) {
17851806
case ARRAY:
17861807
final ArrayType arrayType = (ArrayType) parameterType;
1787-
return getTypeArgument( arrayType.getComponentType(), entity);
1808+
return getTypeArgument( arrayType.getComponentType() );
17881809
case DECLARED:
17891810
final DeclaredType type = (DeclaredType) parameterType;
17901811
switch ( typeName(parameterType) ) {
17911812
case LIST:
17921813
for (TypeMirror arg : type.getTypeArguments()) {
1793-
return getTypeArgument( arg, entity);
1814+
return getTypeArgument( arg );
17941815
}
17951816
return null;
17961817
case HIB_ORDER:
@@ -1800,9 +1821,7 @@ private OrderBy orderByExpression(AnnotationMirror orderBy, TypeElement entityTy
18001821
for ( TypeMirror arg : type.getTypeArguments() ) {
18011822
switch ( arg.getKind() ) {
18021823
case WILDCARD:
1803-
final TypeMirror superBound = ((WildcardType) arg).getSuperBound();
1804-
// horrible hack b/c Jakarta Data is not typesafe
1805-
return superBound == null ? entity.asType() : superBound;
1824+
return ((WildcardType) arg).getSuperBound();
18061825
case ARRAY:
18071826
case DECLARED:
18081827
case TYPEVAR:

0 commit comments

Comments
 (0)