From 97bbb59d7586432007e6640c423aea10b8bb8541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 29 Mar 2009 16:17:06 +0000 Subject: [PATCH] added support for annotated getters moved APT constants to com.mysema.query.apt.Constants added Adapter for Query --- querydsl-apt/pom.xml | 5 ++ .../java/com/mysema/query/apt/APTFactory.java | 10 +--- .../java/com/mysema/query/apt/Constants.java | 17 ++++++ .../apt/general/DefaultEntityVisitor.java | 55 ++++++++++++------- .../query/apt/general/GeneralProcessor.java | 3 - .../mysema/query/apt/jpa/JpaProcessor.java | 21 +++++-- .../query/apt/querydsl/QuerydslProcessor.java | 15 ++++- 7 files changed, 88 insertions(+), 38 deletions(-) create mode 100644 querydsl-apt/src/main/java/com/mysema/query/apt/Constants.java diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 89800bea6..e3617dd2d 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -29,6 +29,11 @@ 1.4 + + commons-lang + commons-lang + 2.4 + com.sun tools diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/APTFactory.java b/querydsl-apt/src/main/java/com/mysema/query/apt/APTFactory.java index 9ee7f2117..289f31bcf 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/APTFactory.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/APTFactory.java @@ -12,7 +12,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Set; -import com.mysema.query.apt.general.GeneralProcessor; import com.mysema.query.apt.jpa.JpaProcessor; import com.mysema.query.apt.querydsl.QuerydslProcessor; import com.sun.mirror.apt.AnnotationProcessor; @@ -26,14 +25,11 @@ import com.sun.mirror.declaration.AnnotationTypeDeclaration; * @author tiwe * @version $Id$ */ -public class APTFactory implements AnnotationProcessorFactory { +public class APTFactory implements AnnotationProcessorFactory, Constants { private static final Collection supportedAnnotations = Arrays.asList( - GeneralProcessor.qdEntity, - GeneralProcessor.qdDto, - JpaProcessor.jpaEmbeddable, - JpaProcessor.jpaEntity, - JpaProcessor.jpaSuperClass + qdEntity, qdDto, + jpaEntity, jpaSuperClass, jpaEmbeddable ); private static final Collection supportedOptions = Collections.emptySet(); diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/Constants.java b/querydsl-apt/src/main/java/com/mysema/query/apt/Constants.java new file mode 100644 index 000000000..be1b5e595 --- /dev/null +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/Constants.java @@ -0,0 +1,17 @@ +package com.mysema.query.apt; + +/** + * Constants provides + * + * @author tiwe + * @version $Id$ + */ +public interface Constants { + String qdEntity= "com.mysema.query.annotations.Domain"; + String qdDto = "com.mysema.query.annotations.DTO"; + + String jpaSuperClass = "javax.persistence.MappedSuperclass"; + String jpaEntity = "javax.persistence.Entity"; + String jpaEmbeddable = "javax.persistence.Embeddable"; + +} diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/general/DefaultEntityVisitor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/general/DefaultEntityVisitor.java index ee57cc230..4129b22a8 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/general/DefaultEntityVisitor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/general/DefaultEntityVisitor.java @@ -8,6 +8,8 @@ package com.mysema.query.apt.general; import java.util.HashMap; import java.util.Map; +import org.apache.commons.lang.StringUtils; + import com.mysema.query.apt.model.Field; import com.mysema.query.apt.model.Type; import com.sun.mirror.declaration.ClassDeclaration; @@ -24,10 +26,22 @@ import com.sun.mirror.util.SimpleDeclarationVisitor; * @version $Id$ */ public class DefaultEntityVisitor extends SimpleDeclarationVisitor { - public final Map types = new HashMap(); - private Type last; + public final Map types = new HashMap(); + + private void addField(String originalName, TypeHelper typeInfo) { + String name = FieldHelper.javaSafe(originalName); + String realName = FieldHelper.realName(originalName); + String keyTypeName = typeInfo.getKeyTypeName(); + String typeName = typeInfo.getFullName(); + String typePackage = typeInfo.getPackageName(); + String simpleTypeName = typeInfo.getSimpleName(); + Field.Type fieldType = typeInfo.getFieldType(); + last.addField(new Field(name, realName, keyTypeName, typePackage, + typeName, simpleTypeName, fieldType)); + } + @Override public void visitClassDeclaration(ClassDeclaration d) { String simpleName = d.getSimpleName(); @@ -37,7 +51,14 @@ public class DefaultEntityVisitor extends SimpleDeclarationVisitor { last = new Type(superType, packageName, name, simpleName); types.put(d.getQualifiedName(), last); } - + + @Override + public void visitFieldDeclaration(FieldDeclaration d) { + if (!d.getModifiers().contains(Modifier.STATIC) && !d.getModifiers().contains(Modifier.TRANSIENT)) { + addField(d.getSimpleName(), new TypeHelper(d.getType())); + } + } + @Override public void visitInterfaceDeclaration(InterfaceDeclaration d){ String simpleName = d.getSimpleName(); @@ -50,28 +71,20 @@ public class DefaultEntityVisitor extends SimpleDeclarationVisitor { last = new Type(superType, packageName, name, simpleName); types.put(d.getQualifiedName(), last); } - - @Override - public void visitFieldDeclaration(FieldDeclaration d) { - if (!d.getModifiers().contains(Modifier.STATIC) && !d.getModifiers().contains(Modifier.TRANSIENT)) { - TypeHelper typeInfo = new TypeHelper(d.getType()); - String name = FieldHelper.javaSafe(d.getSimpleName()); - String realName = FieldHelper.realName(name); - String keyTypeName = typeInfo.getKeyTypeName(); - String typeName = typeInfo.getFullName(); - String typePackage = typeInfo.getPackageName(); - String simpleTypeName = typeInfo.getSimpleName(); - Field.Type fieldType = typeInfo.getFieldType(); - last.addField(new Field(name, realName, keyTypeName, typePackage, - typeName, simpleTypeName, fieldType)); - } - } @Override public void visitMethodDeclaration(MethodDeclaration d) { if (!d.getModifiers().contains(Modifier.STATIC)){ - // TODO + if (d.getParameters().isEmpty()){ + if (d.getSimpleName().startsWith("get")){ + String name = StringUtils.uncapitalize(d.getSimpleName().substring(3)); + addField(name, new TypeHelper(d.getReturnType())); + }else if (d.getSimpleName().startsWith("is")){ + String name = StringUtils.uncapitalize(d.getSimpleName().substring(2)); + addField(name, new TypeHelper(d.getReturnType())); + } + } } } - + } \ No newline at end of file diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/general/GeneralProcessor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/general/GeneralProcessor.java index 90d707bb2..78ba6a79d 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/general/GeneralProcessor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/general/GeneralProcessor.java @@ -29,9 +29,6 @@ import com.sun.mirror.declaration.Declaration; * @version $Id$ */ public abstract class GeneralProcessor implements AnnotationProcessor { - - public static final String qdEntity= "com.mysema.query.annotations.Domain", - qdDto = "com.mysema.query.annotations.DTO"; public static final FreeMarkerSerializer DOMAIN_OUTER_TMPL = new FreeMarkerSerializer("/domain-as-outer-classes.ftl"), diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JpaProcessor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JpaProcessor.java index 0c2b560d9..a1306118d 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JpaProcessor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JpaProcessor.java @@ -5,12 +5,14 @@ import static com.sun.mirror.util.DeclarationVisitors.getDeclarationScanner; import java.util.Map; +import com.mysema.query.apt.Constants; import com.mysema.query.apt.general.DefaultEntityVisitor; import com.mysema.query.apt.general.GeneralProcessor; import com.mysema.query.apt.model.Type; import com.sun.mirror.apt.AnnotationProcessorEnvironment; import com.sun.mirror.declaration.AnnotationTypeDeclaration; import com.sun.mirror.declaration.Declaration; +import com.sun.mirror.declaration.MethodDeclaration; /** * JpaProcessor provides @@ -18,11 +20,7 @@ import com.sun.mirror.declaration.Declaration; * @author tiwe * @version $Id$ */ -public class JpaProcessor extends GeneralProcessor{ - - public static final String jpaSuperClass = "javax.persistence.MappedSuperclass", - jpaEntity = "javax.persistence.Entity", - jpaEmbeddable = "javax.persistence.Embeddable"; +public class JpaProcessor extends GeneralProcessor implements Constants{ public JpaProcessor(AnnotationProcessorEnvironment env) { super(env, jpaSuperClass, jpaEntity, qdDto); @@ -37,13 +35,24 @@ public class JpaProcessor extends GeneralProcessor{ Map entityTypes = entityVisitor.types; if (entityTypes.isEmpty()) { - env.getMessager().printNotice("No class generation for domain types"); + env.getMessager().printNotice("No class generation for embeddable types"); } else { serializeAsOuterClasses(entityTypes.values(), EMBEDDABLE_OUTER_TMPL); } } + // TODO : add switch for field / getter handling + @Override + protected DefaultEntityVisitor createEntityVisitor(){ + return new DefaultEntityVisitor(){ + @Override + public void visitMethodDeclaration(MethodDeclaration d) { + // skip property handling + } + }; + } + public void process() { super.process(); createEmbeddableClasses(); diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/querydsl/QuerydslProcessor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/querydsl/QuerydslProcessor.java index 18e218216..08e149f46 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/querydsl/QuerydslProcessor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/querydsl/QuerydslProcessor.java @@ -1,7 +1,10 @@ package com.mysema.query.apt.querydsl; +import com.mysema.query.apt.Constants; +import com.mysema.query.apt.general.DefaultEntityVisitor; import com.mysema.query.apt.general.GeneralProcessor; import com.sun.mirror.apt.AnnotationProcessorEnvironment; +import com.sun.mirror.declaration.MethodDeclaration; /** * QureydslProcessor provides @@ -9,10 +12,20 @@ import com.sun.mirror.apt.AnnotationProcessorEnvironment; * @author tiwe * @version $Id$ */ -public class QuerydslProcessor extends GeneralProcessor{ +public class QuerydslProcessor extends GeneralProcessor implements Constants{ public QuerydslProcessor(AnnotationProcessorEnvironment env) { super(env, null, qdEntity, qdDto); } + + @Override + protected DefaultEntityVisitor createEntityVisitor(){ + return new DefaultEntityVisitor(){ + @Override + public void visitMethodDeclaration(MethodDeclaration d) { + // skip property handling + } + }; + } }