From 350e255408ae4f8dd56501759da447dbd6011729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 21 Aug 2009 13:48:56 +0000 Subject: [PATCH] added @Transient annotation --- .../com/mysema/query/apt/APTTypeModel.java | 1 + .../java/com/mysema/query/apt/Processor.java | 9 +++- .../mysema/query/collections/domain/Cat.java | 2 +- .../domain/CustomComparableLiteral.java | 3 +- .../collections/domain/CustomLiteral.java | 2 +- .../mysema/query/collections/domain/Host.java | 13 +++-- .../collections/domain/RelationType.java | 14 ++--- .../query/collections/domain/SimpleTypes.java | 47 +++++++++++++++++ .../mysema/query/annotations/Transient.java | 27 ++++++++++ .../query/codegen/InspectingTypeModel.java | 10 +++- .../query/codegen/ReflectionTypeModel.java | 48 +++++++++-------- .../mysema/query/codegen/ClassModelTest.java | 4 +- .../codegen/ReflectionTypeModelTest.java | 52 +++++++++++++++++++ .../mysema/query/codegen/SerializerTest.java | 3 +- .../com/mysema/query/types/JodaTimeTest.java | 1 - .../java/com/mysema/query/types/OpsTest.java | 1 - .../com/mysema/query/types/TypesTest.java | 38 +++++--------- 17 files changed, 201 insertions(+), 74 deletions(-) create mode 100644 querydsl-core/src/main/java/com/mysema/query/annotations/Transient.java create mode 100644 querydsl-core/src/test/java/com/mysema/query/codegen/ReflectionTypeModelTest.java diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/APTTypeModel.java b/querydsl-apt/src/main/java/com/mysema/query/apt/APTTypeModel.java index 0683e8622..9e9125833 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/APTTypeModel.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/APTTypeModel.java @@ -96,6 +96,7 @@ public final class APTTypeModel extends InspectingTypeModel implements TypeVisit } }else if (arg0.asElement().getKind() == ElementKind.INTERFACE){ + fieldType = getFieldType(name); Iterator i = arg0.getTypeArguments().iterator(); if (name.equals(Serializable.class.getName())){ setNames(Serializable.class); diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java index ef8ed3ace..733769fd0 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java @@ -30,6 +30,7 @@ import javax.tools.Diagnostic.Kind; import org.apache.commons.lang.StringUtils; import com.mysema.commons.lang.Assert; +import com.mysema.query.annotations.Transient; import com.mysema.query.codegen.ClassModel; import com.mysema.query.codegen.ConstructorModel; import com.mysema.query.codegen.FieldModel; @@ -53,6 +54,7 @@ public class Processor { TypeModel c = APTTypeModel.get(e.asType(), elementUtils); ClassModel classModel = new ClassModel(null, c.getPackageName(), c.getName(), c.getSimpleName()); List elements = e.getEnclosedElements(); + // CONSTRUCTOR for (ExecutableElement constructor : ElementFilter.constructorsIn(elements)){ if (isValidConstructor(constructor)){ @@ -79,6 +81,7 @@ public class Processor { TypeModel c = APTTypeModel.get(e.asType(), elementUtils); ClassModel classModel = new ClassModel(sc.getName(), c.getPackageName(), c.getName(), c.getSimpleName()); List elements = e.getEnclosedElements(); + // GETTERS for (ExecutableElement method : ElementFilter.methodsIn(elements)){ String name = method.getSimpleName().toString(); @@ -100,6 +103,7 @@ public class Processor { } } } + // FIELDS for (VariableElement field : ElementFilter.fieldsIn(elements)){ if (isValidField(field)){ @@ -157,12 +161,15 @@ public class Processor { protected boolean isValidField(VariableElement field) { return useFields + && field.getAnnotation(Transient.class) == null && !field.getModifiers().contains(Modifier.TRANSIENT) && !field.getModifiers().contains(Modifier.STATIC); } protected boolean isValidGetter(ExecutableElement getter){ - return useGetters && !getter.getModifiers().contains(Modifier.STATIC); + return useGetters + && getter.getAnnotation(Transient.class) == null + && !getter.getModifiers().contains(Modifier.STATIC); } public void process(RoundEnvironment roundEnv) { diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/Cat.java b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/Cat.java index c90ebaebf..8a85c66c9 100644 --- a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/Cat.java +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/Cat.java @@ -23,7 +23,7 @@ public class Cat extends Animal { } public Cat(String name) { - Cat kitten = new Cat(); + Cat kitten = new Cat(); this.kittens = Arrays.asList(kitten); this.kittensByName = Collections.singletonMap("Kitty", kitten); this.name = name; diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/CustomComparableLiteral.java b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/CustomComparableLiteral.java index 8261dc652..a3236a7b3 100644 --- a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/CustomComparableLiteral.java +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/CustomComparableLiteral.java @@ -3,7 +3,8 @@ package com.mysema.query.collections.domain; import com.mysema.query.annotations.Literal; @Literal -public class CustomComparableLiteral implements Comparable { +public class CustomComparableLiteral implements + Comparable { @Override public int compareTo(CustomComparableLiteral o) { diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/CustomLiteral.java b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/CustomLiteral.java index bc1ef22da..f01a8e479 100644 --- a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/CustomLiteral.java +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/CustomLiteral.java @@ -4,5 +4,5 @@ import com.mysema.query.annotations.Literal; @Literal public class CustomLiteral { - + } \ No newline at end of file diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/Host.java b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/Host.java index 3c580eac9..8ab29d115 100644 --- a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/Host.java +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/Host.java @@ -3,15 +3,14 @@ package com.mysema.query.collections.domain; import com.mysema.query.annotations.Entity; public class Host { - - public enum MyEnum{ - VAR1, - VAR2 + + public enum MyEnum { + VAR1, VAR2 } - + @Entity - public static class Reference{ - + public static class Reference { + } } diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/RelationType.java b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/RelationType.java index a5067a376..9c97c7dbf 100644 --- a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/RelationType.java +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/RelationType.java @@ -13,16 +13,16 @@ import com.mysema.query.collections.domain2.RelationType2; @Entity @SuppressWarnings("unchecked") public class RelationType { - + Host.MyEnum enumProperty; List enumList; - Map enumMap1; - Map enumMap; - + Map enumMap1; + Map enumMap; + // list List list; List list2; - List list3; + List list3; List list4; List list5; @@ -48,11 +48,11 @@ public class RelationType { Map map; Map map2; Map map3; - + Map map4; Map map5; Map map6; - + Map map7; Map map8; Map map9; diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/SimpleTypes.java b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/SimpleTypes.java index 9f8185e0b..d63e68898 100644 --- a/querydsl-collections/src/test/java/com/mysema/query/collections/domain/SimpleTypes.java +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/domain/SimpleTypes.java @@ -1,37 +1,84 @@ package com.mysema.query.collections.domain; +import static org.junit.Assert.*; + import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import java.util.Locale; +import org.junit.Test; + import com.mysema.query.annotations.Entity; +import com.mysema.query.annotations.Transient; @Entity public class SimpleTypes { + + @Test + public void test() throws SecurityException{ + try { + QSimpleTypes.class.getField("skipMe"); + fail("Expected NoSuchFieldException"); + } catch (NoSuchFieldException e) { + // expected + } + } + transient int test; + long id; + BigDecimal bigDecimal; + Byte bbyte; + byte bbyte2; + Character cchar; + char cchar2; + Double ddouble; + double ddouble2; + Float ffloat; + float ffloat2; + Integer iint; + int iint2; + Locale llocale; + Long llong; + long llong2; + String sstring; + Date date; + java.sql.Time time; + java.sql.Timestamp timestamp; + Serializable serializable; + Object object; + Class clazz; + CustomLiteral literal; + CustomComparableLiteral literal2; + + java.sql.Clob clob; + + java.sql.Blob blob; + + @Transient + String skipMe; } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/annotations/Transient.java b/querydsl-core/src/main/java/com/mysema/query/annotations/Transient.java new file mode 100644 index 000000000..0d99218c4 --- /dev/null +++ b/querydsl-core/src/main/java/com/mysema/query/annotations/Transient.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2009 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.query.annotations; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * Annotate fields and getters that should be skipped in APT based code generation + * with this annotation + * + * @author tiwe + * + */ +@Documented +@Target({FIELD,METHOD}) +@Retention(RUNTIME) +public @interface Transient { + +} diff --git a/querydsl-core/src/main/java/com/mysema/query/codegen/InspectingTypeModel.java b/querydsl-core/src/main/java/com/mysema/query/codegen/InspectingTypeModel.java index 56c40438c..d375d8d55 100644 --- a/querydsl-core/src/main/java/com/mysema/query/codegen/InspectingTypeModel.java +++ b/querydsl-core/src/main/java/com/mysema/query/codegen/InspectingTypeModel.java @@ -5,6 +5,8 @@ */ package com.mysema.query.codegen; +import java.sql.Blob; +import java.sql.Clob; import java.util.Locale; import com.mysema.query.util.TypeUtil; @@ -24,6 +26,8 @@ public abstract class InspectingTypeModel extends SimpleTypeModel { return FieldType.BOOLEAN; } else if (fullName.equals(Locale.class.getName()) + || fullName.equals(Clob.class.getName()) + || fullName.equals(Blob.class.getName()) || fullName.equals(Class.class.getName()) || fullName.equals(Object.class.getName())) { return FieldType.SIMPLE; @@ -113,7 +117,11 @@ public abstract class InspectingTypeModel extends SimpleTypeModel { } protected final void setNames(Class cl){ - packageName = cl.getPackage().getName(); + if (cl.getPackage() != null){ + packageName = cl.getPackage().getName(); + }else{ + packageName = "java.lang"; + } name = cl.getName(); simpleName = cl.getSimpleName(); } diff --git a/querydsl-core/src/main/java/com/mysema/query/codegen/ReflectionTypeModel.java b/querydsl-core/src/main/java/com/mysema/query/codegen/ReflectionTypeModel.java index 8c25b2421..ffef91360 100644 --- a/querydsl-core/src/main/java/com/mysema/query/codegen/ReflectionTypeModel.java +++ b/querydsl-core/src/main/java/com/mysema/query/codegen/ReflectionTypeModel.java @@ -43,48 +43,50 @@ public final class ReflectionTypeModel extends InspectingTypeModel implements Ty } private ReflectionTypeModel(Class cl, java.lang.reflect.Type genericType) { + setNames(cl); + fieldType = getFieldType(name); if (cl.isArray()) { - TypeModel valueInfo = ReflectionTypeModel.get(cl.getComponentType()); + TypeModel valueInfo = get(cl.getComponentType()); handleArray(valueInfo); - } else if (cl.isEnum()) { - setNames(cl); + } else if (cl.isEnum()) { fieldType = FieldType.SIMPLE; } else if (cl.isPrimitive()) { handlePrimitiveWrapperType(ClassUtils.primitiveToWrapper(cl)); } else if (cl.isInterface()) { - if (Serializable.class.isAssignableFrom(cl)){ - setNames(Serializable.class); - fieldType = FieldType.SIMPLE; - - }else if (java.util.Map.class.isAssignableFrom(cl)) { - TypeModel keyInfo = ReflectionTypeModel.get(TypeUtil.getTypeParameter(genericType, 0)); - TypeModel valueInfo = ReflectionTypeModel.get(TypeUtil.getTypeParameter(genericType, 1)); - handleMapInterface(keyInfo, valueInfo); - - } else if (java.util.List.class.isAssignableFrom(cl)) { - TypeModel valueInfo = ReflectionTypeModel.get(TypeUtil.getTypeParameter(genericType, 0)); - handleList(valueInfo); - - } else if (java.util.Collection.class.isAssignableFrom(cl)) { - TypeModel valueInfo = ReflectionTypeModel.get(TypeUtil.getTypeParameter(genericType, 0)); - handleCollection(valueInfo); - } + handleInterface(cl, genericType); } else { - setNames(cl); if (cl.getAnnotation(Literal.class) != null) { if (Comparable.class.isAssignableFrom(cl)) { fieldType = FieldType.COMPARABLE; } else { fieldType = FieldType.SIMPLE; } - } else { - fieldType = getFieldType(name); } } } + private void handleInterface(Class cl, java.lang.reflect.Type genericType) { + if (Serializable.class.isAssignableFrom(cl)){ + setNames(Serializable.class); + fieldType = FieldType.SIMPLE; + + }else if (java.util.Map.class.isAssignableFrom(cl)) { + TypeModel keyInfo = get(TypeUtil.getTypeParameter(genericType, 0)); + TypeModel valueInfo = get(TypeUtil.getTypeParameter(genericType, 1)); + handleMapInterface(keyInfo, valueInfo); + + } else if (java.util.List.class.isAssignableFrom(cl)) { + TypeModel valueInfo = get(TypeUtil.getTypeParameter(genericType, 0)); + handleList(valueInfo); + + } else if (java.util.Collection.class.isAssignableFrom(cl)) { + TypeModel valueInfo = get(TypeUtil.getTypeParameter(genericType, 0)); + handleCollection(valueInfo); + } + } + } 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 ddeb9bda7..fbc4b5c92 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 @@ -15,9 +15,9 @@ import java.util.Set; import org.junit.Test; -// TODO: Auto-generated Javadoc + /** - * TypeHelperTest provides. + * ClassModelTest provides. * * @author tiwe * @version $Id$ diff --git a/querydsl-core/src/test/java/com/mysema/query/codegen/ReflectionTypeModelTest.java b/querydsl-core/src/test/java/com/mysema/query/codegen/ReflectionTypeModelTest.java new file mode 100644 index 000000000..1d0fe3166 --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/query/codegen/ReflectionTypeModelTest.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2009 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.query.codegen; + +import static org.junit.Assert.assertEquals; + +import java.io.Serializable; +import java.sql.Blob; +import java.sql.Clob; +import java.util.Arrays; +import java.util.Locale; + +import org.junit.Test; + + +public class ReflectionTypeModelTest { + + @Test + public void test(){ + TypeModel blob = get(Blob.class); + assertEquals("Blob", blob.getLocalName()); + assertEquals("Blob", blob.getSimpleName()); + assertEquals("java.sql.Blob", blob.getName()); + assertEquals("java.sql", blob.getPackageName()); + + TypeModel bo = get(boolean.class); + assertEquals("Boolean", bo.getLocalName()); + assertEquals("Boolean", bo.getSimpleName()); + assertEquals("java.lang.Boolean", bo.getName()); + assertEquals("java.lang", bo.getPackageName()); + } + + @Test + public void getFieldType(){ + for (Class cl : Arrays.>asList(Blob.class, Clob.class, Locale.class, Class.class, Serializable.class)){ + assertEquals(FieldType.SIMPLE, get(cl).getFieldType()); + } + + for (Class cl : Arrays.>asList(Number.class, Integer.class)){ + assertEquals(FieldType.NUMERIC, get(cl).getFieldType()); + } + + assertEquals(FieldType.BOOLEAN, get(boolean.class).getFieldType()); + } + + private TypeModel get(Class cl){ + return ReflectionTypeModel.get(cl); + } +} diff --git a/querydsl-core/src/test/java/com/mysema/query/codegen/SerializerTest.java b/querydsl-core/src/test/java/com/mysema/query/codegen/SerializerTest.java index 60f2d9723..9544b3c25 100644 --- a/querydsl-core/src/test/java/com/mysema/query/codegen/SerializerTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/codegen/SerializerTest.java @@ -15,9 +15,8 @@ import javax.annotation.Nullable; import org.junit.Test; -// TODO: Auto-generated Javadoc /** - * HibernateProcessorTest provides. + * SerializerTest provides. * * @author tiwe * @version $Id$ diff --git a/querydsl-core/src/test/java/com/mysema/query/types/JodaTimeTest.java b/querydsl-core/src/test/java/com/mysema/query/types/JodaTimeTest.java index f3978a32d..f4a0e8d05 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/JodaTimeTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/JodaTimeTest.java @@ -11,7 +11,6 @@ import org.junit.Test; import com.mysema.query.alias.Alias; import com.mysema.query.types.expr.EComparable; -// TODO: Auto-generated Javadoc /** * JodaTimeTest provides. * diff --git a/querydsl-core/src/test/java/com/mysema/query/types/OpsTest.java b/querydsl-core/src/test/java/com/mysema/query/types/OpsTest.java index 7ec090775..6c8d5c2bf 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/OpsTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/OpsTest.java @@ -17,7 +17,6 @@ import org.junit.Test; import com.mysema.query.types.operation.Ops; -// TODO: Auto-generated Javadoc /** * OpsTest provides. * diff --git a/querydsl-core/src/test/java/com/mysema/query/types/TypesTest.java b/querydsl-core/src/test/java/com/mysema/query/types/TypesTest.java index 58b5a9ef8..86b09d22d 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/TypesTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/TypesTest.java @@ -12,7 +12,6 @@ import org.junit.Test; import com.mysema.query.types.expr.Expr; import com.mysema.query.types.path.Path; - // TODO: Auto-generated Javadoc /** * TypesTest provides. @@ -21,37 +20,24 @@ import com.mysema.query.types.path.Path; * @version $Id$ */ public class TypesTest { - -// @Test -// public void testAlias(){ -// for (Class cl : Alias.class.getClasses()){ -// assertTrue(cl.getName(),Alias.class.isAssignableFrom(cl)); -// if (!cl.isInterface()){ -// assertTrue(cl.getName(),Expr.class.isAssignableFrom(cl)); -// } -// } -// } - - /** - * Test expr. - */ -@Test - public void testExpr(){ - for (Class cl : Expr.class.getClasses()){ - assertTrue(cl.getName(),Expr.class.isAssignableFrom(cl)); + + @Test + public void testExpr() { + for (Class cl : Expr.class.getClasses()) { + assertTrue(cl.getName(), Expr.class.isAssignableFrom(cl)); } } - + /** * Test path. */ @Test - public void testPath(){ - for (Class cl : Path.class.getClasses()){ - assertTrue(cl.getName(),Path.class.isAssignableFrom(cl)); - if (!cl.isInterface()){ - assertTrue(cl.getName(),Expr.class.isAssignableFrom(cl)); - } + public void testPath() { + for (Class cl : Path.class.getClasses()) { + assertTrue(cl.getName(), Path.class.isAssignableFrom(cl)); + if (!cl.isInterface()) { + assertTrue(cl.getName(), Expr.class.isAssignableFrom(cl)); + } } }