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 2e39ac53c..dd128bd8f 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 @@ -36,6 +36,7 @@ import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.TypeExtends; import com.mysema.codegen.model.TypeSuper; import com.mysema.codegen.model.Types; +import com.mysema.query.annotations.QueryExclude; import com.mysema.query.codegen.EntityType; import com.mysema.query.codegen.QueryTypeFactory; import com.mysema.query.codegen.Supertype; @@ -424,12 +425,18 @@ public final class ExtendedTypeFactory { if (e.getKind() == ElementKind.CLASS) { if (e.getSuperclass().getKind() != TypeKind.NONE) { TypeMirror supertype = normalize(e.getSuperclass()); - Type superClass = getType(supertype, deep); - if (superClass == null) { - System.err.println("Got no type for " + supertype); - } else if (!superClass.getFullName().startsWith("java")) { - superTypes = Collections.singleton(getType(supertype, deep)); + if (supertype instanceof DeclaredType + && ((DeclaredType)supertype).asElement().getAnnotation(QueryExclude.class) != null) { + return Collections.emptySet(); + } else { + Type superClass = getType(supertype, deep); + if (superClass == null) { + System.err.println("Got no type for " + supertype); + } else if (!superClass.getFullName().startsWith("java")) { + superTypes = Collections.singleton(getType(supertype, deep)); + } } + } // interface } else { diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/QueryExcludeTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/QueryExcludeTest.java new file mode 100644 index 000000000..7d680ba64 --- /dev/null +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/QueryExcludeTest.java @@ -0,0 +1,30 @@ +package com.mysema.query.domain; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.mysema.query.annotations.QueryEntity; +import com.mysema.query.annotations.QueryExclude; +import com.mysema.query.types.path.EntityPathBase; + +public class QueryExcludeTest { + + @QueryExclude + @QueryEntity + public class Entity { + + } + + @QueryEntity + public class SubEntity extends Entity { + + } + + @Test + public void SubEntity() { + assertEquals(EntityPathBase.class, QQueryExcludeTest_SubEntity.class.getSuperclass()); + } + + +}