improvements to validation of @HQL method return type
This commit is contained in:
parent
fad11299f3
commit
14151fdb97
|
@ -441,11 +441,11 @@ public class AnnotationMetaEntity extends AnnotationMeta {
|
||||||
private void addQueryMethod(ExecutableElement method) {
|
private void addQueryMethod(ExecutableElement method) {
|
||||||
final TypeMirror returnType = method.getReturnType();
|
final TypeMirror returnType = method.getReturnType();
|
||||||
final TypeKind kind = returnType.getKind();
|
final TypeKind kind = returnType.getKind();
|
||||||
if ( kind == TypeKind.VOID || kind.isPrimitive() ) {
|
if ( kind == TypeKind.VOID || kind == TypeKind.ARRAY || kind.isPrimitive() ) {
|
||||||
addQueryMethod( method, returnType, null );
|
addQueryMethod( method, returnType, null );
|
||||||
}
|
}
|
||||||
else if ( kind == TypeKind.DECLARED ) {
|
else if ( kind == TypeKind.DECLARED ) {
|
||||||
final DeclaredType declaredType = ununi((DeclaredType) returnType);
|
final DeclaredType declaredType = ununi( (DeclaredType) returnType );
|
||||||
final TypeElement typeElement = (TypeElement) declaredType.asElement();
|
final TypeElement typeElement = (TypeElement) declaredType.asElement();
|
||||||
final List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments();
|
final List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments();
|
||||||
switch ( typeArguments.size() ) {
|
switch ( typeArguments.size() ) {
|
||||||
|
@ -1060,7 +1060,15 @@ public class AnnotationMetaEntity extends AnnotationMeta {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// TODO: anything more we can do here? e.g. check constructor
|
// TODO: anything more we can do here? e.g. check constructor
|
||||||
returnTypeCorrect = true;
|
try {
|
||||||
|
final Class<?> javaResultType = selection.getJavaType();
|
||||||
|
final TypeElement typeElement = context.getTypeElementForFullyQualifiedName( javaResultType.getName() );
|
||||||
|
returnTypeCorrect = context.getTypeUtils().isAssignable( returnType, typeElement.asType() );
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
//ignore
|
||||||
|
returnTypeCorrect = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( !returnTypeCorrect ) {
|
if ( !returnTypeCorrect ) {
|
||||||
context.message(method, mirror, value,
|
context.message(method, mirror, value,
|
||||||
|
|
|
@ -63,6 +63,24 @@ public interface Dao {
|
||||||
// @HQL("from Book where title like :title")
|
// @HQL("from Book where title like :title")
|
||||||
// SelectionQuery<Book> findByTitleWithOrderingByVarargs(String title, Order<? super Book>... order);
|
// SelectionQuery<Book> findByTitleWithOrderingByVarargs(String title, Order<? super Book>... order);
|
||||||
|
|
||||||
|
@HQL("select count(*) from Book")
|
||||||
|
long countBooks();
|
||||||
|
|
||||||
|
@HQL("select count(*)>1 from Book")
|
||||||
|
boolean booksExist();
|
||||||
|
|
||||||
|
@HQL("delete from Book")
|
||||||
|
int deleteBooks();
|
||||||
|
|
||||||
|
@HQL("select count(*), count(*)>1 from Book")
|
||||||
|
Object[] funnyQueryReturningArray();
|
||||||
|
|
||||||
|
class Record {
|
||||||
|
Record(Long count, Boolean exists) {}
|
||||||
|
}
|
||||||
|
@HQL("select count(*), count(*)>1 from Book")
|
||||||
|
Record funnyQueryReturningRecord();
|
||||||
|
|
||||||
@HQL("from Book where isbn = :isbn")
|
@HQL("from Book where isbn = :isbn")
|
||||||
Book findByIsbn(String isbn);
|
Book findByIsbn(String isbn);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue