added @Transient annotation

This commit is contained in:
Timo Westkämper 2009-08-21 13:48:56 +00:00
parent 523027f007
commit 350e255408
17 changed files with 201 additions and 74 deletions

View File

@ -96,6 +96,7 @@ public final class APTTypeModel extends InspectingTypeModel implements TypeVisit
}
}else if (arg0.asElement().getKind() == ElementKind.INTERFACE){
fieldType = getFieldType(name);
Iterator<? extends TypeMirror> i = arg0.getTypeArguments().iterator();
if (name.equals(Serializable.class.getName())){
setNames(Serializable.class);

View File

@ -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<? extends Element> 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<? extends Element> 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) {

View File

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

View File

@ -3,7 +3,8 @@ package com.mysema.query.collections.domain;
import com.mysema.query.annotations.Literal;
@Literal
public class CustomComparableLiteral implements Comparable<CustomComparableLiteral> {
public class CustomComparableLiteral implements
Comparable<CustomComparableLiteral> {
@Override
public int compareTo(CustomComparableLiteral o) {

View File

@ -4,5 +4,5 @@ import com.mysema.query.annotations.Literal;
@Literal
public class CustomLiteral {
}

View File

@ -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 {
}
}

View File

@ -13,16 +13,16 @@ import com.mysema.query.collections.domain2.RelationType2;
@Entity
@SuppressWarnings("unchecked")
public class RelationType {
Host.MyEnum enumProperty;
List<Host.MyEnum> enumList;
Map<String,Host.MyEnum> enumMap1;
Map<Host.MyEnum,String> enumMap;
Map<String, Host.MyEnum> enumMap1;
Map<Host.MyEnum, String> enumMap;
// list
List<RelationType> list;
List<? extends RelationType> list2;
List<String> list3;
List<String> list3;
List<RelationType2> list4;
List<Reference> list5;
@ -48,11 +48,11 @@ public class RelationType {
Map<String, RelationType> map;
Map<RelationType, RelationType> map2;
Map<RelationType, String> map3;
Map<String, RelationType2> map4;
Map<RelationType2, RelationType2> map5;
Map<RelationType2, String> map6;
Map<String, Reference> map7;
Map<Reference, Reference> map8;
Map<Reference, String> map9;

View File

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

View File

@ -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 {
}

View File

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

View File

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

View File

@ -15,9 +15,9 @@ import java.util.Set;
import org.junit.Test;
// TODO: Auto-generated Javadoc
/**
* TypeHelperTest provides.
* ClassModelTest provides.
*
* @author tiwe
* @version $Id$

View File

@ -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.<Class<?>>asList(Blob.class, Clob.class, Locale.class, Class.class, Serializable.class)){
assertEquals(FieldType.SIMPLE, get(cl).getFieldType());
}
for (Class<?> cl : Arrays.<Class<?>>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);
}
}

View File

@ -15,9 +15,8 @@ import javax.annotation.Nullable;
import org.junit.Test;
// TODO: Auto-generated Javadoc
/**
* HibernateProcessorTest provides.
* SerializerTest provides.
*
* @author tiwe
* @version $Id$

View File

@ -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.
*

View File

@ -17,7 +17,6 @@ import org.junit.Test;
import com.mysema.query.types.operation.Ops;
// TODO: Auto-generated Javadoc
/**
* OpsTest provides.
*

View File

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