From c66074b886516019b336ea43f70dedb2f2ad87f7 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Fri, 14 Feb 2025 22:20:41 +0100 Subject: [PATCH] improve message for validation of Restriction parameter of repo method and remove a hack that I believe is now obsolete --- .../annotation/AnnotationMetaEntity.java | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java index 9efe360f02f1..90d408d5fbc4 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java @@ -1674,12 +1674,12 @@ private void checkFinderParameter(TypeElement entity, VariableElement parameter) final TypeMirror parameterType = parameterType(parameter); final String typeName = parameterType.toString(); if ( isOrderParam( typeName ) || isRestrictionParam( typeName ) ) { - final TypeMirror typeArgument = getTypeArgument( parameterType, entity ); + final TypeMirror typeArgument = getTypeArgument( parameterType ); if ( typeArgument == null ) { - missingTypeArgError( entity.getSimpleName().toString(), parameter ); + missingTypeArgError( entity.getSimpleName().toString(), parameter, typeName ); } else if ( !types.isSameType( typeArgument, entity.asType() ) ) { - wrongTypeArgError( entity.getSimpleName().toString(), parameter ); + wrongTypeArgError( entity.getSimpleName().toString(), parameter, typeName ); } } } @@ -1727,16 +1727,37 @@ private void createCriteriaDelete(ExecutableElement method) { } } - private void wrongTypeArgError(String entity, VariableElement parameter) { - message(parameter, "mismatched type of order (should be 'Order')", + private void wrongTypeArgError(String entity, VariableElement parameter, String parameterType) { + message(parameter, "mismatched type of " + message(parameterType, entity), Diagnostic.Kind.ERROR ); } - private void missingTypeArgError(String entity, VariableElement parameter) { - message(parameter, "missing type of order (should be 'Order')", + private void missingTypeArgError(String entity, VariableElement parameter, String parameterType) { + message(parameter, "missing type of " + message(parameterType, entity), Diagnostic.Kind.ERROR ); } + private String message(String parameterType, String entity) { + if (parameterType.startsWith(HIB_ORDER) || parameterType.startsWith(JD_ORDER)) { + return "order (should be 'Order')"; + } + else if (parameterType.startsWith(LIST + "<" + HIB_ORDER)) { + return "order (should be 'List>')"; + } + else if (parameterType.startsWith(HIB_RESTRICTION)) { + return "restriction (should be 'Restriction')"; + } + else if (parameterType.startsWith(LIST + "<" + HIB_RESTRICTION)) { + return "restriction (should be 'List>')"; + } + else if (parameterType.startsWith(JD_SORT)) { + return "sort (should be 'Sort')"; + } + else { + return "parameter"; + } + } + private List orderByList(ExecutableElement method, TypeElement returnType) { final TypeElement entityType = implicitEntityType( returnType ); if ( entityType != null ) { @@ -1780,17 +1801,17 @@ private OrderBy orderByExpression(AnnotationMirror orderBy, TypeElement entityTy return new OrderBy( path, descending, ignoreCase ); } - private static @Nullable TypeMirror getTypeArgument(TypeMirror parameterType, TypeElement entity) { + private static @Nullable TypeMirror getTypeArgument(TypeMirror parameterType) { switch ( parameterType.getKind() ) { case ARRAY: final ArrayType arrayType = (ArrayType) parameterType; - return getTypeArgument( arrayType.getComponentType(), entity); + return getTypeArgument( arrayType.getComponentType() ); case DECLARED: final DeclaredType type = (DeclaredType) parameterType; switch ( typeName(parameterType) ) { case LIST: for (TypeMirror arg : type.getTypeArguments()) { - return getTypeArgument( arg, entity); + return getTypeArgument( arg ); } return null; case HIB_ORDER: @@ -1800,9 +1821,7 @@ private OrderBy orderByExpression(AnnotationMirror orderBy, TypeElement entityTy for ( TypeMirror arg : type.getTypeArguments() ) { switch ( arg.getKind() ) { case WILDCARD: - final TypeMirror superBound = ((WildcardType) arg).getSuperBound(); - // horrible hack b/c Jakarta Data is not typesafe - return superBound == null ? entity.asType() : superBound; + return ((WildcardType) arg).getSuperBound(); case ARRAY: case DECLARED: case TYPEVAR: