Skip to content
Merged
Show file tree
Hide file tree
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 @@ -1791,17 +1791,37 @@ private void createCriteriaFinder(
);
}

private void checkFinderParameter(TypeElement entity, VariableElement parameter) {
private void checkFinderParameter(@Nullable TypeElement entity, VariableElement parameter) {
final Types types = context.getTypeUtils();
final TypeMirror parameterType = parameterType(parameter);
final String typeName = parameterType.toString();
if ( isOrderParam( typeName ) || isRestrictionParam( typeName ) ) {
if ( isRestrictionParam( typeName ) ) {
final TypeMirror typeArgument = getTypeArgument( parameterType );
if ( typeArgument == null ) {
missingTypeArgError( entity.getSimpleName().toString(), parameter, typeName );
final TypeElement implicitEntityType = entity == null ? primaryEntity : entity;
if ( implicitEntityType != null ) {
if ( typeArgument == null ) {
missingTypeArgError( implicitEntityType.getSimpleName().toString(), parameter, typeName );
}
else if ( !types.isSameType( typeArgument, implicitEntityType.asType() ) ) {
wrongTypeArgError( implicitEntityType.getSimpleName().toString(), parameter, typeName );
}
}
else if ( !types.isSameType( typeArgument, entity.asType() ) ) {
wrongTypeArgError( entity.getSimpleName().toString(), parameter, typeName );
// else {
// message( parameter, "repository method does have well-defined entity type", Diagnostic.Kind.ERROR );
// }
}
else if ( isOrderParam( typeName ) ) {
final TypeMirror typeArgument = getTypeArgument( parameterType );
if ( entity != null ) {
if ( typeArgument == null ) {
missingTypeArgError( entity.getSimpleName().toString(), parameter, typeName );
}
else if ( !types.isSameType( typeArgument, entity.asType() ) ) {
wrongTypeArgError( entity.getSimpleName().toString(), parameter, typeName );
}
}
else {
message( parameter, "repository method does not return entity type", Diagnostic.Kind.ERROR );
}
}
}
Expand Down Expand Up @@ -3224,24 +3244,20 @@ private void checkParameters(
}
if ( returnType != null ) {
for ( VariableElement parameter : method.getParameters() ) {
final TypeElement entity = implicitEntityType(returnType);
if ( entity != null ) {
checkFinderParameter(entity, parameter);
}
// else? what?
checkFinderParameter( explicitEntityType(returnType), parameter );
}
}
}

private @Nullable TypeElement implicitEntityType(@Nullable TypeMirror resultType) {
private @Nullable TypeElement explicitEntityType(@Nullable TypeMirror resultType) {
if ( resultType != null && resultType.getKind() == TypeKind.DECLARED) {
final DeclaredType declaredType = (DeclaredType) resultType;
final Element typeElement = declaredType.asElement();
if ( hasAnnotation(typeElement, ENTITY) ) {
return (TypeElement) typeElement;
}
}
return primaryEntity;
return null;
}

private static boolean typeNameEquals(TypeMirror parameterType, String typeName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import org.hibernate.StatelessSession;
import org.hibernate.annotations.processing.Find;
import org.hibernate.annotations.processing.HQL;
import org.hibernate.query.Order;

import java.util.List;

Expand All @@ -36,5 +35,5 @@ public abstract class Books {
static class Summary { Summary(String title, String publisher, String isbn) {} }

@HQL("select title, publisher.name, isbn from Book")
abstract List<Summary> summarize(Session session, Order<Summary> order);
abstract List<Summary> summarize(Session session);
}