From da275ff778bcc9844233ca062ea25170e2b32d4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Oct 2009 14:27:18 +0000 Subject: [PATCH] --- .../com/mysema/query/codegen/BeanModel.java | 14 +++-- .../query/codegen/EntitySerializer.java | 54 +++++++++++-------- .../query/codegen/SupertypeSerializer.java | 6 +-- .../mysema/query/codegen/ClassModelTest.java | 2 +- 4 files changed, 42 insertions(+), 34 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/codegen/BeanModel.java b/querydsl-core/src/main/java/com/mysema/query/codegen/BeanModel.java index ea747243d..4b9c07aef 100644 --- a/querydsl-core/src/main/java/com/mysema/query/codegen/BeanModel.java +++ b/querydsl-core/src/main/java/com/mysema/query/codegen/BeanModel.java @@ -31,12 +31,10 @@ public final class BeanModel implements Comparable { private boolean entityModel = true; - private final Set entityProperties = new TreeSet(); - // mutable private int escapeSuffix = 1; - private boolean hasLists, hasMaps; + private boolean hasLists, hasMaps, hasEntityFields; private final String prefix; @@ -79,7 +77,7 @@ public final class BeanModel implements Comparable { hasLists = true; break; case ENTITY: - entityProperties.add(field); + hasEntityFields = true; } } @@ -116,9 +114,9 @@ public final class BeanModel implements Comparable { return typeModel.getName(); } - public Set getEntityProperties() { - return entityProperties; - } +// public Set getEntityProperties() { +// return entityProperties; +// } public Set getProperties() { return properties; @@ -150,7 +148,7 @@ public final class BeanModel implements Comparable { } public boolean hasEntityFields() { - return !entityProperties.isEmpty(); + return hasEntityFields; } public int hashCode() { 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 8c9d14167..e9c1c39fa 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 @@ -122,7 +122,7 @@ public class EntitySerializer implements Serializer{ StringBuilder builder = new StringBuilder(); - boolean hasEntityFields = !model.getEntityProperties().isEmpty(); + boolean hasEntityFields = model.hasEntityFields(); String thisOrSuper = hasEntityFields ? "this" : "super"; // 1 @@ -185,7 +185,7 @@ public class EntitySerializer implements Serializer{ protected void initEntityFields(StringBuilder builder, BeanModel model) { BeanModel superModel = model.getSuperModel(); - if (superModel != null && !superModel.getEntityProperties().isEmpty()){ + if (superModel != null && superModel.hasEntityFields()){ String superQueryType = superModel.getPrefix() + superModel.getSimpleName(); if (!superModel.getPackageName().equals(model.getPackageName())){ superQueryType = superModel.getPackageName() + "." + superQueryType; @@ -193,15 +193,20 @@ public class EntitySerializer implements Serializer{ builder.append(" this._super = new " + superQueryType + "(type, entityName, metadata, inits);\n"); } - for (PropertyModel field : model.getEntityProperties()){ - builder.append(" this." + field.getEscapedName() + " = "); - if (!field.isInherited()){ - builder.append("inits.isInitialized(\""+field.getName()+"\") ? "); - builder.append("new " + field.getQueryTypeName() + "(PathMetadata.forProperty(this,\"" + field.getName() + "\"), inits.getInits(\""+field.getName()+"\")) : null;\n"); - }else{ - builder.append("_super." + field.getEscapedName() +";\n"); + for (PropertyModel field : model.getProperties()){ + if (field.getTypeCategory() == TypeCategory.ENTITY){ + builder.append(" this." + field.getEscapedName() + " = "); + if (!field.isInherited()){ + builder.append("inits.isInitialized(\""+field.getName()+"\") ? "); + builder.append("new " + field.getQueryTypeName() + "(PathMetadata.forProperty(this,\"" + field.getName() + "\"), inits.getInits(\""+field.getName()+"\")) : null;\n"); + }else{ + builder.append("_super." + field.getEscapedName() +";\n"); + } + }else if (field.isInherited() && superModel != null && superModel.hasEntityFields()){ + builder.append(" this." + field.getEscapedName() + " = "); + builder.append("_super." + field.getEscapedName() + ";\n"); } - } + } } protected void constructorsForVariables(StringBuilder builder, BeanModel model) { @@ -210,7 +215,7 @@ public class EntitySerializer implements Serializer{ final String localName = model.getLocalName(); final String genericName = model.getGenericName(); - boolean hasEntityFields = !model.getEntityProperties().isEmpty(); + boolean hasEntityFields = model.hasEntityFields(); String thisOrSuper = hasEntityFields ? "this" : "super"; if (!localName.equals(genericName)){ @@ -266,11 +271,14 @@ public class EntitySerializer implements Serializer{ protected void introInits(StringBuilder builder, BeanModel model) { if (model.hasEntityFields()){ List inits = new ArrayList(); - for (PropertyModel property : model.getEntityProperties()){ - for (String init : property.getInits()){ - inits.add(property.getEscapedName() + "." + init); + for (PropertyModel property : model.getProperties()){ + if (property.getTypeCategory() == TypeCategory.ENTITY){ + for (String init : property.getInits()){ + inits.add(property.getEscapedName() + "." + init); + } } - } + } + if (!inits.isEmpty()){ builder.append(" private static final PathInits __inits = new PathInits(\"*\""); for (String init : inits){ @@ -377,7 +385,6 @@ public class EntitySerializer implements Serializer{ protected void mapOfEntity(PropertyModel field, Writer writer) throws IOException{ final String keyType = field.getParameterName(0); final String valueType = field.getParameterName(1); -// final String simpleName = field.getSimpleTypeName(); final String genericKey = field.getGenericParameterName(0); final String genericValue = field.getGenericParameterName(1); @@ -419,8 +426,6 @@ public class EntitySerializer implements Serializer{ protected void mapOfSimpleAccessor(PropertyModel field, Writer writer) throws IOException { final String escapedName = field.getEscapedName(); -// final String keyType = field.getParameterName(0); -// final String valueType = field.getParameterName(1); final String genericKey = field.getGenericParameterName(0); final String genericValue = field.getGenericParameterName(1); @@ -448,9 +453,10 @@ public class EntitySerializer implements Serializer{ BeanModel superModel = field.getBeanModel().getSuperModel(); // construct value StringBuilder value = new StringBuilder(); - if (field.isInherited() && superModel != null && !superModel.hasEntityFields()){ - // copy from super - value.append("_super." + field.getEscapedName()); + if (field.isInherited() && superModel != null){ + if (!superModel.hasEntityFields()){ + value.append("_super." + field.getEscapedName()); + } }else{ value.append(factoryMethod + "(\"" + field.getName() + "\""); for (String arg : args){ @@ -464,7 +470,11 @@ public class EntitySerializer implements Serializer{ if (field.isInherited()){ builder.append(" // inherited\n"); } - builder.append(" public final " + type + " " + field.getEscapedName() + " = " + value + ";\n\n"); + if (value.length() > 0){ + builder.append(" public final " + type + " " + field.getEscapedName() + " = " + value + ";\n\n"); + }else{ + builder.append(" public final " + type + " " + field.getEscapedName() + ";\n\n"); + } writer.append(builder.toString()); } 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 198db2161..9c59d6cd2 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 @@ -25,7 +25,7 @@ public class SupertypeSerializer extends EntitySerializer{ StringBuilder builder = new StringBuilder(); - if (model.getEntityProperties().isEmpty()){ + if (!model.hasEntityFields()){ builder.append(" public "+queryType+"(PEntity entity){\n"); builder.append(" super(entity.getType(), entity.getEntityName(), entity.getMetadata());\n"); builder.append(" }\n\n"); @@ -33,7 +33,7 @@ public class SupertypeSerializer extends EntitySerializer{ }else{ builder.append(" public "+queryType+"(Class type, @NotEmpty String entityName, PathMetadata metadata, PathInits inits) {\n"); builder.append(" super(type, entityName, metadata);\n"); - if (!model.getEntityProperties().isEmpty()){ + if (model.hasEntityFields()){ initEntityFields(builder, model); } builder.append(" }\n"); @@ -54,7 +54,7 @@ public class SupertypeSerializer extends EntitySerializer{ @Override protected void introImports(StringBuilder builder, BeanModel model) { - if (!model.getEntityProperties().isEmpty()){ + if (model.hasEntityFields()){ builder.append("import com.mysema.query.util.*;\n"); } builder.append("import com.mysema.query.types.path.*;\n\n"); diff --git a/querydsl-core/src/test/java/com/mysema/query/codegen/ClassModelTest.java b/querydsl-core/src/test/java/com/mysema/query/codegen/ClassModelTest.java index aff8696a3..a15f9bdc5 100644 --- a/querydsl-core/src/test/java/com/mysema/query/codegen/ClassModelTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/codegen/ClassModelTest.java @@ -39,7 +39,7 @@ public class ClassModelTest { // assertEquals(2, type.getSimpleCollections().size()); // assertEquals(1, type.getEntityLists().size()); // assertEquals(1, type.getSimpleLists().size()); - assertEquals(1, type.getEntityProperties().size()); +// assertEquals(1, type.getEntityProperties().size()); // assertEquals(1, type.getStringProperties().size()); // assertEquals(2, type.getNumericProperties().size()); // assertEquals(3, type.getSimpleProperties().size());