This commit is contained in:
Timo Westkämper 2009-10-10 18:01:06 +00:00
parent 6ce5316f1f
commit d13035e6dc
5 changed files with 79 additions and 36 deletions

View File

@ -0,0 +1,8 @@
package com.mysema.query.domain.hierarchy;
import com.mysema.query.annotations.QueryEntity;
@QueryEntity
public class Entity4 extends Supertype2{
}

View File

@ -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);
}
}

View File

@ -0,0 +1,8 @@
package com.mysema.query.domain.hierarchy;
import com.mysema.query.annotations.QuerySupertype;
@QuerySupertype
public class Supertype2 extends Supertype{
}

View File

@ -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;

View File

@ -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<? extends T> 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 + "<T extends "+localName+"> extends "+superQueryType+"<T> {\n\n");
}else{
builder.append("public abstract class " + queryType + "<T extends "+localName+"> extends PEntity<T> {\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<? extends T> 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+"<T> _super = this;\n\n");
}
}