From d13035e6dc8a3181acd1c383e51902affc09ecb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 10 Oct 2009 18:01:06 +0000 Subject: [PATCH] --- .../query/domain/hierarchy/Entity4.java | 8 ++++ .../query/domain/hierarchy/EntityTest.java | 15 ++++++ .../query/domain/hierarchy/Supertype2.java | 8 ++++ .../query/codegen/EntitySerializer.java | 38 +++++++-------- .../query/codegen/SupertypeSerializer.java | 46 +++++++++++-------- 5 files changed, 79 insertions(+), 36 deletions(-) create mode 100644 querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/Entity4.java create mode 100644 querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/EntityTest.java create mode 100644 querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/Supertype2.java diff --git a/querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/Entity4.java b/querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/Entity4.java new file mode 100644 index 000000000..573d23eda --- /dev/null +++ b/querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/Entity4.java @@ -0,0 +1,8 @@ +package com.mysema.query.domain.hierarchy; + +import com.mysema.query.annotations.QueryEntity; + +@QueryEntity +public class Entity4 extends Supertype2{ + +} diff --git a/querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/EntityTest.java b/querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/EntityTest.java new file mode 100644 index 000000000..0049a8c10 --- /dev/null +++ b/querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/EntityTest.java @@ -0,0 +1,15 @@ +package com.mysema.query.domain.hierarchy; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class EntityTest { + + @SuppressWarnings("unchecked") + @Test + public void test(){ + assertTrue(QEntity2.entity2 instanceof QSupertype); + assertTrue(QEntity3.entity3 instanceof QSupertype); + } +} diff --git a/querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/Supertype2.java b/querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/Supertype2.java new file mode 100644 index 000000000..ebfbcdb04 --- /dev/null +++ b/querydsl-collections/src/test/java/com/mysema/query/domain/hierarchy/Supertype2.java @@ -0,0 +1,8 @@ +package com.mysema.query.domain.hierarchy; + +import com.mysema.query.annotations.QuerySupertype; + +@QuerySupertype +public class Supertype2 extends Supertype{ + +} diff --git a/querydsl-core/src/main/java/com/mysema/query/codegen/EntitySerializer.java b/querydsl-core/src/main/java/com/mysema/query/codegen/EntitySerializer.java index e7a565f8b..b0976c63d 100644 --- a/querydsl-core/src/main/java/com/mysema/query/codegen/EntitySerializer.java +++ b/querydsl-core/src/main/java/com/mysema/query/codegen/EntitySerializer.java @@ -224,33 +224,35 @@ public class EntitySerializer implements Serializer{ introImports(builder, model); introJavadoc(builder, model); introClassHeader(builder, model); - introDefaultInstance(builder, model); - introSuper(builder, model); + introDefaultInstance(builder, model); + if (model.getSuperModel() != null){ + introSuper(builder, model); + } writer.append(builder.toString()); } - private void introSuper(StringBuilder builder, BeanModel model) { - if (model.getSuperModel() != null){ - BeanModel superModel = model.getSuperModel(); - String superQueryType = superModel.getPrefix() + superModel.getSimpleName(); - if (!superModel.getPackageName().equals(model.getPackageName())){ - superQueryType = superModel.getPackageName() + "." + superQueryType; - } - - if (superModel.isEntityModel()){ - builder.append(" public final "+superQueryType+" _super = new " + superQueryType + "(this);\n\n"); - }else{ - builder.append(" public final "+superQueryType+"<"+model.getLocalName()+"> _super = this;\n\n"); - } - } + protected void introSuper(StringBuilder builder, BeanModel model) { + BeanModel superModel = model.getSuperModel(); + String superQueryType = superModel.getPrefix() + superModel.getSimpleName(); + if (!superModel.getPackageName().equals(model.getPackageName())){ + superQueryType = superModel.getPackageName() + "." + superQueryType; + } + if (superModel.isEntityModel()){ + builder.append(" public final "+superQueryType+" _super = new " + superQueryType + "(this);\n\n"); + }else{ + builder.append(" public final "+superQueryType+"<"+model.getLocalName()+"> _super = this;\n\n"); + } } protected void introClassHeader(StringBuilder builder, BeanModel model) { final String queryType = model.getPrefix() + model.getSimpleName(); final String localName = model.getLocalName(); builder.append("@SuppressWarnings(\"serial\")\n"); - if (model.getSuperModel() != null && !model.getSuperModel().isEntityModel()){ - BeanModel superModel = model.getSuperModel(); + BeanModel superModel = model.getSuperModel(); + while (superModel != null && superModel.isEntityModel()){ + superModel = superModel.getSuperModel(); + } + if (superModel != null){ String superQueryType = superModel.getPrefix() + superModel.getSimpleName(); if (!superModel.getPackageName().equals(model.getPackageName())){ superQueryType = superModel.getPackageName() + "." + superQueryType; diff --git a/querydsl-core/src/main/java/com/mysema/query/codegen/SupertypeSerializer.java b/querydsl-core/src/main/java/com/mysema/query/codegen/SupertypeSerializer.java index 1baf2b4d9..9385692fa 100644 --- a/querydsl-core/src/main/java/com/mysema/query/codegen/SupertypeSerializer.java +++ b/querydsl-core/src/main/java/com/mysema/query/codegen/SupertypeSerializer.java @@ -18,8 +18,15 @@ import net.jcip.annotations.Immutable; public class SupertypeSerializer extends EntitySerializer{ @Override - protected void introDefaultInstance(StringBuilder builder, BeanModel model) { - // no default instance + protected void constructors(BeanModel model, Writer writer) throws IOException { + final String simpleName = model.getSimpleName(); + final String queryType = model.getPrefix() + simpleName; + + StringBuilder builder = new StringBuilder(); + builder.append(" public "+queryType+"(Class type, @NotEmpty String entityName, PathMetadata metadata) {\n"); + builder.append(" super(type, entityName, metadata);\n"); + builder.append(" }\n"); + writer.append(builder.toString()); } @Override @@ -27,12 +34,6 @@ public class SupertypeSerializer extends EntitySerializer{ // no factory methods } - @Override - protected void introImports(StringBuilder builder, BeanModel model) { - builder.append("import com.mysema.query.util.*;\n"); - builder.append("import com.mysema.query.types.path.*;\n\n"); - } - @Override protected void introClassHeader(StringBuilder builder, BeanModel model) { final String queryType = model.getPrefix() + model.getSimpleName(); @@ -44,22 +45,31 @@ public class SupertypeSerializer extends EntitySerializer{ if (!superModel.getPackageName().equals(model.getPackageName())){ superQueryType = superModel.getPackageName() + "." + superQueryType; } - builder.append("public abstract class " + queryType + " extends "+superQueryType+"<" + localName + "> {\n\n"); + builder.append("public abstract class " + queryType + " extends "+superQueryType+" {\n\n"); }else{ builder.append("public abstract class " + queryType + " extends PEntity {\n\n"); } } @Override - protected void constructors(BeanModel model, Writer writer) throws IOException { - final String simpleName = model.getSimpleName(); - final String queryType = model.getPrefix() + simpleName; - - StringBuilder builder = new StringBuilder(); - builder.append(" public "+queryType+"(Class type, @NotEmpty String entityName, PathMetadata metadata) {\n"); - builder.append(" super(type, entityName, metadata);\n"); - builder.append(" }\n"); - writer.append(builder.toString()); + protected void introDefaultInstance(StringBuilder builder, BeanModel model) { + // no default instance + } + + @Override + protected void introImports(StringBuilder builder, BeanModel model) { + builder.append("import com.mysema.query.util.*;\n"); + builder.append("import com.mysema.query.types.path.*;\n\n"); + } + + @Override + protected void introSuper(StringBuilder builder, BeanModel model) { + BeanModel superModel = model.getSuperModel(); + String superQueryType = superModel.getPrefix() + superModel.getSimpleName(); + if (!superModel.getPackageName().equals(model.getPackageName())){ + superQueryType = superModel.getPackageName() + "." + superQueryType; + } + builder.append(" public final "+superQueryType+" _super = this;\n\n"); } }