Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
}
}
}
Expand Down Expand Up @@ -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<? super " + entity + ">')",
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<? super " + entity + ">')",
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<? super " + entity + ">')";
}
else if (parameterType.startsWith(LIST + "<" + HIB_ORDER)) {
return "order (should be 'List<Order<? super " + entity + ">>')";
}
else if (parameterType.startsWith(HIB_RESTRICTION)) {
return "restriction (should be 'Restriction<? super " + entity + ">')";
}
else if (parameterType.startsWith(LIST + "<" + HIB_RESTRICTION)) {
return "restriction (should be 'List<Restriction<? super " + entity + ">>')";
}
else if (parameterType.startsWith(JD_SORT)) {
return "sort (should be 'Sort<? super " + entity + ">')";
}
else {
return "parameter";
}
}

private List<OrderBy> orderByList(ExecutableElement method, TypeElement returnType) {
final TypeElement entityType = implicitEntityType( returnType );
if ( entityType != null ) {
Expand Down Expand Up @@ -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:
Expand All @@ -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:
Expand Down
Loading