diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java index 0cebf7fe8..b3c52e7ab 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java @@ -406,7 +406,9 @@ public final class ExtendedTypeFactory { if (e.getSuperclass().getKind() != TypeKind.NONE){ TypeMirror supertype = normalize(e.getSuperclass()); Type superClass = getType(supertype, deep); - if (!superClass.getFullName().startsWith("java")){ + if (superClass == null) { + System.err.println("Got no type for " + supertype); + } else if (!superClass.getFullName().startsWith("java")){ superTypes = Collections.singleton(getType(supertype, deep)); } } diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java index bc77c9122..3fdb8f44f 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java @@ -712,6 +712,7 @@ public class Processor { private void serialize(Serializer serializer, Collection models) { Messager msg = env.getMessager(); for (EntityType model : models) { + try { Type type = configuration.getTypeMappings().getPathType(model, model, true); diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/ExternalEntityTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/ExternalEntityTest.java index 9272e1ae2..c9ae704f5 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/ExternalEntityTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/ExternalEntityTest.java @@ -3,7 +3,6 @@ package com.mysema.query.domain; import org.junit.Ignore; import com.mysema.query.annotations.QueryEntity; -import com.mysema.query.codegen.sub.AbstractEntity; @Ignore public class ExternalEntityTest { diff --git a/querydsl-core/src/main/java/com/mysema/query/codegen/EntityType.java b/querydsl-core/src/main/java/com/mysema/query/codegen/EntityType.java index d414fd35c..a260780b8 100644 --- a/querydsl-core/src/main/java/com/mysema/query/codegen/EntityType.java +++ b/querydsl-core/src/main/java/com/mysema/query/codegen/EntityType.java @@ -204,5 +204,4 @@ public class EntityType extends TypeAdapter implements Comparable { return escapedPropertyNames; } - } diff --git a/querydsl-core/src/main/java/com/mysema/query/codegen/TypeResolver.java b/querydsl-core/src/main/java/com/mysema/query/codegen/TypeResolver.java index c0199cdca..41d1713b7 100644 --- a/querydsl-core/src/main/java/com/mysema/query/codegen/TypeResolver.java +++ b/querydsl-core/src/main/java/com/mysema/query/codegen/TypeResolver.java @@ -50,9 +50,12 @@ public final class TypeResolver { if (index > -1){ // get binding of var via model supertype - Supertype type = subtype.getSuperType(); - while (!type.getType().equals(declaringType)){ - type = type.getEntityType().getSuperType(); + Supertype type = subtype.getSuperType(); + while (!type.getEntityType().equals(declaringType)){ +// if (type.getEntityType().getSuperType() == null) { +// throw new IllegalStateException("Got no supertype for " + type.getType() + ", declaring type " + declaringType); +// } + type = type.getEntityType().getSuperType(); } return type.getType().getParameters().get(index); }else{ diff --git a/querydsl-core/src/test/java/com/mysema/query/codegen/sub/AbstractEntity.java b/querydsl-core/src/test/java/com/mysema/query/codegen/sub/AbstractEntity.java deleted file mode 100644 index ed0bec8fb..000000000 --- a/querydsl-core/src/test/java/com/mysema/query/codegen/sub/AbstractEntity.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mysema.query.codegen.sub; - -public class AbstractEntity { - -} diff --git a/querydsl-core/src/test/java/com/mysema/query/domain/AbstractEntity.java b/querydsl-core/src/test/java/com/mysema/query/domain/AbstractEntity.java new file mode 100644 index 000000000..5ee4e1f51 --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/query/domain/AbstractEntity.java @@ -0,0 +1,8 @@ +package com.mysema.query.domain; + +import com.mysema.query.annotations.QueryEntity; + +@QueryEntity +public class AbstractEntity extends GenericEntity{ + +} diff --git a/querydsl-core/src/test/java/com/mysema/query/domain/GenericEntity.java b/querydsl-core/src/test/java/com/mysema/query/domain/GenericEntity.java new file mode 100644 index 000000000..4d3233454 --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/query/domain/GenericEntity.java @@ -0,0 +1,17 @@ +package com.mysema.query.domain; + +import java.io.Serializable; + +public class GenericEntity { + + private KeyType id; + + public KeyType getId() { + return id; + } + + public void setId(KeyType id) { + this.id = id; + } + +} diff --git a/querydsl-core/src/test/java/com/mysema/query/domain/QAbstractEntity.java b/querydsl-core/src/test/java/com/mysema/query/domain/QAbstractEntity.java new file mode 100644 index 000000000..eb4c5cf8d --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/query/domain/QAbstractEntity.java @@ -0,0 +1,36 @@ +package com.mysema.query.domain; + +import static com.mysema.query.types.PathMetadataFactory.forVariable; + +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.BeanPath; +import com.mysema.query.types.path.EntityPathBase; +import com.mysema.query.types.path.NumberPath; + + +/** + * QAnimal is a Querydsl query type for Animal + */ +@SuppressWarnings("unchecked") +public class QAbstractEntity extends EntityPathBase { + + private static final long serialVersionUID = 781156670; + + public static final QAbstractEntity animal = new QAbstractEntity("abstractEntity"); + + public final NumberPath id = createNumber("id", Integer.class); + + public QAbstractEntity(String variable) { + super(AbstractEntity.class, forVariable(variable)); + } + + public QAbstractEntity(BeanPath> entity) { + super(entity.getType(), entity.getMetadata()); + } + + public QAbstractEntity(PathMetadata metadata) { + super(AbstractEntity.class, metadata); + } + +} +