1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 174557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonpackage libcore.java.lang.reflect; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 194557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.lang.reflect.Constructor; 204557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.lang.reflect.Method; 214557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.lang.reflect.ParameterizedType; 224557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.lang.reflect.Type; 234557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.lang.reflect.TypeVariable; 24747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilsonimport tests.api.java.lang.reflect.GenericReflectionTestsBase; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests type parameters declared on classes. 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 30747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilsonpublic class OldGenericTypesTest extends GenericReflectionTestsBase { 31f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class GenericType<T>{ 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project T methodGenericType(T t){ return t;} 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("hiding") 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project <T> T hidingMethodGenericType(T t){ return t;} 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static <T> T staticMethodGenericType(T t){ return t;} 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 38f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class MultipleBoundedGenericTypes<T,S extends T>{ 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project void multipleBoundedGenericTypesTS(T t, S s){} 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 42f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class SimpleInheritance <T> extends GenericType<T>{} 44f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class ConstructorGenericType<T>{ 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ConstructorGenericType(T t){} 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 48f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class InnerClassTest<T>{ 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class InnerClass { 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InnerClass(T t) {} 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project void innerMethod(T t){} 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 55f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class ExceptionTest<T extends Exception>{ 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project void exceptionTest() throws T{} 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class InnerClass{ 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project void innerExceptionTest() throws T{} 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 62f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static interface InterfaceTest<T>{} 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testConstructorGenericType() throws Exception { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<? extends ConstructorGenericType> clazz = ConstructorGenericType.class; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<Class> typeVariable = getTypeParameter(clazz); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Constructor<?> constructor = clazz.getDeclaredConstructor(Object.class); 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] genericParameterTypes = constructor.getGenericParameterTypes(); 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(genericParameterTypes); 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type parameterType = genericParameterTypes[0]; 72f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariable, parameterType); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testStaticMethodGenericType() throws Exception { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<? extends GenericType> clazz = GenericType.class; 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<Class> typeVariable = getTypeParameter(clazz); 79f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method method = clazz.getDeclaredMethod("staticMethodGenericType", Object.class); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] genericParameterTypes = method.getGenericParameterTypes(); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(genericParameterTypes); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type parameterType = genericParameterTypes[0]; 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotEquals(typeVariable, parameterType); 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertInstanceOf(TypeVariable.class, parameterType); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(method, ((TypeVariable)parameterType).getGenericDeclaration()); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testHidingMethodGenericType() throws Exception { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<? extends GenericType> clazz = GenericType.class; 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<Class> typeVariable = getTypeParameter(clazz); 92f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method method = clazz.getDeclaredMethod("hidingMethodGenericType", Object.class); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] genericParameterTypes = method.getGenericParameterTypes(); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(genericParameterTypes); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type parameterType = genericParameterTypes[0]; 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotEquals(typeVariable, parameterType); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertInstanceOf(TypeVariable.class, parameterType); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(method, ((TypeVariable)parameterType).getGenericDeclaration()); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class MultipleGenericTypes<T,S>{ 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project void multipleGenericTypesT(T t){} 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project void multipleGenericTypesS(S s){} 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project void multipleGenericTypesTS(T t, S s){} 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testMultipleGenericTypes() throws Exception { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Type parameters 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<? extends MultipleGenericTypes> clazz = MultipleGenericTypes.class; 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<?>[] typeParameters = clazz.getTypeParameters(); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(2, typeParameters.length); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<?> typeVariableT = typeParameters[0]; 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(clazz, typeVariableT.getGenericDeclaration()); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("T", typeVariableT.getName()); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<?> typeVariableS = typeParameters[1]; 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("S", typeVariableS.getName()); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(clazz, typeVariableS.getGenericDeclaration()); 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // multipleGenericTypesT 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method multipleGenericTypesT = clazz.getDeclaredMethod("multipleGenericTypesT", new Class[]{Object.class}); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] multipleGenericTypesTTypes = multipleGenericTypesT.getGenericParameterTypes(); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(multipleGenericTypesTTypes); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type multipleGenericTypesTType = multipleGenericTypesTTypes[0]; 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariableT, multipleGenericTypesTType); 126f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // multipleGenericTypesS 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method multipleGenericTypesS = clazz.getDeclaredMethod("multipleGenericTypesS", new Class[]{Object.class}); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] multipleGenericTypesSTypes = multipleGenericTypesS.getGenericParameterTypes(); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(multipleGenericTypesSTypes); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type multipleGenericTypesSType = multipleGenericTypesSTypes[0]; 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariableS, multipleGenericTypesSType); 133f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // multipleGenericTypesS 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method multipleGenericTypesTS = clazz.getDeclaredMethod("multipleGenericTypesTS", new Class[]{Object.class, Object.class}); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] multipleGenericTypesTSTypes = multipleGenericTypesTS.getGenericParameterTypes(); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(2, multipleGenericTypesTSTypes.length); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type multipleGenericTypesTSTypeT = multipleGenericTypesTSTypes[0]; 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariableT, multipleGenericTypesTSTypeT); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type multipleGenericTypesTSTypeS = multipleGenericTypesTSTypes[1]; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariableS, multipleGenericTypesTSTypeS); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 143f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testMultipleBoundedGenericTypes() throws Exception { 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Type parameters 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<? extends MultipleBoundedGenericTypes> clazz = MultipleBoundedGenericTypes.class; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<?>[] typeParameters = clazz.getTypeParameters(); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(2, typeParameters.length); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<?> typeVariableT = typeParameters[0]; 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(clazz, typeVariableT.getGenericDeclaration()); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("T", typeVariableT.getName()); 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<?> typeVariableS = typeParameters[1]; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("S", typeVariableS.getName()); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(clazz, typeVariableS.getGenericDeclaration()); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] boundsS = typeVariableS.getBounds(); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(boundsS); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type boundS = boundsS[0]; 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariableT, boundS); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSimpleInheritance() throws Exception { 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<? extends SimpleInheritance> clazz = SimpleInheritance.class; 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<Class> subTypeVariable = getTypeParameter(clazz); 165f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertInstanceOf(ParameterizedType.class, clazz.getGenericSuperclass()); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ParameterizedType parameterizedSuperType = (ParameterizedType) clazz.getGenericSuperclass(); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertInstanceOf(Class.class, parameterizedSuperType.getRawType()); 169f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<Class> superTypeParameter = getTypeParameter((Class<?>)parameterizedSuperType.getRawType()); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<Class> typeParameter = getTypeParameter(GenericType.class); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(superTypeParameter, typeParameter); 173f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotEquals(subTypeVariable, superTypeParameter); 175f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] actualTypeArguments = parameterizedSuperType.getActualTypeArguments(); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(actualTypeArguments); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertInstanceOf(TypeVariable.class, actualTypeArguments[0]); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable actualSuperTypeVariable = (TypeVariable) actualTypeArguments[0]; 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(subTypeVariable, actualSuperTypeVariable); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testInnerClassTest() throws Exception { 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<? extends InnerClassTest> clazz =InnerClassTest.class; 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<Class> typeVariable = getTypeParameter(clazz); 186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?>[] declaredClasses = clazz.getDeclaredClasses(); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(declaredClasses); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?> innerClazz = declaredClasses[0]; 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(InnerClassTest.InnerClass.class, innerClazz); 191f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 192f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes //constructor 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Constructor<?>[] declaredConstructors = innerClazz.getDeclaredConstructors(); 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(declaredConstructors); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Constructor<?> declaredConstructor = declaredConstructors[0]; 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] genericParameterTypes = declaredConstructor.getGenericParameterTypes(); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(genericParameterTypes); 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariable, genericParameterTypes[0]); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertInstanceOf(TypeVariable.class, genericParameterTypes[0]); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<?> constructorTypeVariable = (TypeVariable<?>) genericParameterTypes[0]; 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(clazz ,constructorTypeVariable.getGenericDeclaration()); 202f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //method 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method declaredMethods = innerClazz.getDeclaredMethod("innerMethod", Object.class); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] methodParameterTypes = declaredMethods.getGenericParameterTypes(); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(methodParameterTypes); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariable, methodParameterTypes[0]); 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertInstanceOf(TypeVariable.class, methodParameterTypes[0]); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<?> methodTypeVariable = (TypeVariable<?>) methodParameterTypes[0]; 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(clazz, methodTypeVariable.getGenericDeclaration()); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testException() throws Exception { 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<? extends ExceptionTest> clazz = ExceptionTest.class; 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<Class> typeVariable = getTypeParameter(clazz); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method method = clazz.getDeclaredMethod("exceptionTest"); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] genericExceptionTypes = method.getGenericExceptionTypes(); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(genericExceptionTypes); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariable, genericExceptionTypes[0]); 220f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?>[] declaredClasses = clazz.getDeclaredClasses(); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(declaredClasses); 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?> innerClazz = declaredClasses[0]; 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ExceptionTest.InnerClass.class, innerClazz); 225f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //method 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Method declaredMethods = innerClazz.getDeclaredMethod("innerExceptionTest"); 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] exceptionTypes = declaredMethods.getGenericExceptionTypes(); 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertLenghtOne(exceptionTypes); 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(typeVariable, exceptionTypes[0]); 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertInstanceOf(TypeVariable.class, exceptionTypes[0]); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TypeVariable<?> methodTypeVariable = (TypeVariable<?>) exceptionTypes[0]; 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(clazz, methodTypeVariable.getGenericDeclaration()); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 236