1 32 package net.sf.retrotranslator.runtime.java.lang.reflect; 33 34 import java.lang.reflect.*; 35 import net.sf.retrotranslator.tests.BaseTestCase; 36 37 40 public class _FieldGenericTestCase<Z> extends BaseTestCase { 41 42 class MemberOuterNonGeneric { 43 } 44 45 class MemberOuterGeneric<T> { 46 class MemberInnerNonGeneric { 47 } 48 } 49 50 static class StaticMemberOuterNonGeneric { 51 } 52 53 static class StaticMemberOuterGeneric<T> { 54 class MemberInnerNonGeneric { 55 } 56 } 57 58 public void testVariable() { 59 class Test { 60 public Z f; 63 } 64 Type type = getType(Test.class); 65 assertVariable(type); 66 } 67 68 public void testMemberNonGeneric() { 69 class Test { 70 public MemberOuterNonGeneric f; 73 } 74 ParameterizedType outerType = getParameterizedType(Test.class); 75 assertEquals(MemberOuterNonGeneric.class, outerType.getRawType()); 76 assertEquals(0, outerType.getActualTypeArguments().length); 77 assertThisType(outerType.getOwnerType()); 78 } 79 80 public void testStaticMemberNonGeneric() { 81 class Test { 82 public StaticMemberOuterNonGeneric f; 85 } 86 Type type = getType(Test.class); 87 assertEquals(StaticMemberOuterNonGeneric.class, type); 88 } 89 90 public void testMemberGeneric() { 91 class Test { 92 public MemberOuterGeneric<? super Z[]> f; 95 } 96 ParameterizedType outerType = getParameterizedType(Test.class); 97 assertEquals(MemberOuterGeneric.class, outerType.getRawType()); 98 WildcardType wildcardType = (WildcardType) singleton(outerType.getActualTypeArguments()); 99 assertEquals(Object .class, singleton(wildcardType.getUpperBounds())); 100 GenericArrayType arrayType = (GenericArrayType) singleton(wildcardType.getLowerBounds()); 101 assertVariable(arrayType.getGenericComponentType()); 102 assertThisType(outerType.getOwnerType()); 103 } 104 105 public void testStaticMemberGeneric() { 106 class Test { 107 public StaticMemberOuterGeneric<String > f; 110 } 111 ParameterizedType type = getParameterizedType(Test.class); 112 assertEquals(StaticMemberOuterGeneric.class, type.getRawType()); 113 assertEquals(String .class, singleton(type.getActualTypeArguments())); 114 assertEquals(this.getClass(), type.getOwnerType()); 115 } 116 117 public void testMemberOuterGeneric() { 118 class Test { 119 public MemberOuterGeneric<String >.MemberInnerNonGeneric f; 122 } 123 ParameterizedType innerType = getParameterizedType(Test.class); 124 assertEquals(MemberOuterGeneric.MemberInnerNonGeneric.class, innerType.getRawType()); 125 assertEquals(0, innerType.getActualTypeArguments().length); 126 ParameterizedType outerType = (ParameterizedType) innerType.getOwnerType(); 127 assertEquals(MemberOuterGeneric.class, outerType.getRawType()); 128 assertEquals(String .class, singleton(outerType.getActualTypeArguments())); 129 assertThisType(outerType.getOwnerType()); 130 } 131 132 public void testStaticMemberOuterGeneric() { 133 class Test { 134 public StaticMemberOuterGeneric<String >.MemberInnerNonGeneric f; 137 } 138 ParameterizedType innerType = getParameterizedType(Test.class); 139 assertEquals(StaticMemberOuterGeneric.MemberInnerNonGeneric.class, innerType.getRawType()); 140 assertEquals(0, innerType.getActualTypeArguments().length); 141 ParameterizedType outerType = (ParameterizedType) innerType.getOwnerType(); 142 assertEquals(StaticMemberOuterGeneric.class, outerType.getRawType()); 143 assertEquals(String .class, singleton(outerType.getActualTypeArguments())); 144 assertEquals(this.getClass(), outerType.getOwnerType()); 145 } 146 147 private void assertThisType(Type thisType) { 148 ParameterizedType type = (ParameterizedType) thisType; 149 assertEquals(this.getClass(), type.getRawType()); 150 assertNull(type.getOwnerType()); 151 assertVariable(singleton(type.getActualTypeArguments())); 152 } 153 154 private void assertVariable(Type type) { 155 TypeVariable variable = (TypeVariable) type; 156 assertEquals("Z", variable.getName()); 157 assertEquals(this.getClass(), variable.getGenericDeclaration()); 158 assertEquals(Object .class, singleton(variable.getBounds())); 159 } 160 } 161 | Popular Tags |