From: <pao...@us...> - 2006-02-13 19:14:43
|
Update of /cvsroot/hibernate/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21308/metadata/src/test/org/hibernate/test/reflection/java/generics Modified Files: Dad.java Son.java Grandpa.java Added Files: TestAnnotation.java TypeEnvironmentFactoryTest.java Neighbour.java Removed Files: GenericsEnvironmentTest.java Log Message: Support for generics in reflection layer --- NEW FILE: TestAnnotation.java --- package org.hibernate.test.reflection.java.generics; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; /** * @author Davide Marchignoli * @author Paolo Perrotta */ @Target( { TYPE, METHOD, FIELD }) @Retention(RUNTIME) public @interface TestAnnotation { String name() default "abc"; } --- NEW FILE: TypeEnvironmentFactoryTest.java --- package org.hibernate.test.reflection.java.generics; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.hibernate.reflection.java.generics.TypeEnvironmentFactory; /** * @author Davide Marchignoli * @author Paolo Perrotta */ public class TypeEnvironmentFactoryTest extends TestCase { public void testBindsGenericsToSuperclassEnvironment() throws SecurityException, NoSuchMethodException { TypeEnvironmentFactory env = new TypeEnvironmentFactory(); Type type = Grandpa.class.getMethod( "returnsGeneric", new Class[0] ).getGenericReturnType(); Type asSeenFromGrandpa = env.getEnvironment( Grandpa.class ).bind( type ); assertTrue( asSeenFromGrandpa instanceof TypeVariable ); assertEquals( "T", asSeenFromGrandpa.toString() ); Type asSeenFromDad = env.getEnvironment( Dad.class ).bind( type ); assertTrue( asSeenFromDad instanceof ParameterizedType ); assertEquals( "java.util.List<T>", asSeenFromDad.toString() ); ParameterizedType asSeenFromSon = (ParameterizedType) env.getEnvironment( Son.class ).bind( type ); assertType_isCollectionOfClass_withElementsOfClass( asSeenFromSon, List.class, String.class ); } public void testBindsGenericsToOwnerEnvironment() throws SecurityException, NoSuchMethodException { TypeEnvironmentFactory env = new TypeEnvironmentFactory(); Type friendType = Dad.class.getMethod( "getFriend", new Class[0] ).getGenericReturnType(); ParameterizedType friendTypeAsSeenFromDad = (ParameterizedType) env.getEnvironment( Dad.class ).bind( friendType ); Class friendClass = (Class) friendTypeAsSeenFromDad.getRawType(); Type returnType = friendClass.getMethod( "embeddedProperty", new Class[0] ).getGenericReturnType(); ParameterizedType boundType = (ParameterizedType) env.getEnvironment( friendTypeAsSeenFromDad ).bind( returnType ); assertType_isCollectionOfClass_withElementsOfClass( boundType, Set.class, Integer.class ); } private void assertType_isCollectionOfClass_withElementsOfClass(ParameterizedType t, Class collectionClass, Class elementClass) { assertEquals( collectionClass, t.getRawType() ); assertEquals( 1, t.getActualTypeArguments().length ); assertEquals( elementClass, t.getActualTypeArguments()[0] ); } } --- NEW FILE: Neighbour.java --- package org.hibernate.test.reflection.java.generics; import java.util.Set; /** * @author Davide Marchignoli * @author Paolo Perrotta */ public class Neighbour<T> { public Set<T> embeddedProperty() { return null; } } Index: Dad.java =================================================================== RCS file: /cvsroot/hibernate/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics/Dad.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Dad.java 1 Feb 2006 13:43:33 -0000 1.1 +++ Dad.java 13 Feb 2006 19:14:35 -0000 1.2 @@ -1,11 +1,48 @@ package org.hibernate.test.reflection.java.generics; import java.util.List; +import java.util.Map; +import javax.persistence.Entity; /** * @author Davide Marchignoli * @author Paolo Perrotta */ -public class Dad<T> extends Grandpa<List<T>>{ +@TestAnnotation(name = "xyz") +@Entity +public class Dad<T> extends Grandpa<List<T>, Integer> { + + static Integer staticField; + + T fieldProperty; + + public Map<Double, T> getCollectionProperty() { + return null; + } + + @TestAnnotation(name = "xyz") + public Integer getMethodProperty() { + return null; + } + + public int getPrimitiveProperty() { + return 0; + } + + public boolean isPropertyStartingWithIs() { + return false; + } + + public int[] getPrimitiveArrayProperty() { + return null; + } + + public T[] getArrayProperty() { + return null; + } + + public static Integer getStaticThing() { + return null; + } } Index: Son.java =================================================================== RCS file: /cvsroot/hibernate/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics/Son.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Son.java 1 Feb 2006 13:43:33 -0000 1.1 +++ Son.java 13 Feb 2006 19:14:35 -0000 1.2 @@ -1,6 +1,5 @@ package org.hibernate.test.reflection.java.generics; - /** * @author Davide Marchignoli * @author Paolo Perrotta Index: Grandpa.java =================================================================== RCS file: /cvsroot/hibernate/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/generics/Grandpa.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Grandpa.java 1 Feb 2006 13:43:33 -0000 1.1 +++ Grandpa.java 13 Feb 2006 19:14:35 -0000 1.2 @@ -4,9 +4,16 @@ * @author Davide Marchignoli * @author Paolo Perrotta */ -public class Grandpa<T> { +public abstract class Grandpa<T, U> { - public T genericMethod() { - return null; - } + Integer grandpaField; + + public T returnsGeneric() { + return null; + } + + // generic embedded value + public Neighbour<U> getFriend() { + return null; + } } --- GenericsEnvironmentTest.java DELETED --- |