1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.runners.model; 2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 3b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.reflect.GenericArrayType; 4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.reflect.Method; 5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.reflect.ParameterizedType; 6b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.reflect.Type; 7b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.reflect.TypeVariable; 8b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.lang.reflect.WildcardType; 9b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.List; 10b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 11b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotclass NoGenericTypeParametersValidator { 12aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin private final Method method; 13aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin 14aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin NoGenericTypeParametersValidator(Method method) { 15aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin this.method = method; 16aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 17aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin 18aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin void validate(List<Throwable> errors) { 19aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin for (Type each : method.getGenericParameterTypes()) { 20aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin validateNoTypeParameterOnType(each, errors); 21aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 22aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 23aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin 24aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin private void validateNoTypeParameterOnType(Type type, List<Throwable> errors) { 25aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin if (type instanceof TypeVariable<?>) { 26aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin errors.add(new Exception("Method " + method.getName() 27aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin + "() contains unresolved type variable " + type)); 28aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } else if (type instanceof ParameterizedType) { 29aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin validateNoTypeParameterOnParameterizedType((ParameterizedType) type, errors); 30aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } else if (type instanceof WildcardType) { 31aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin validateNoTypeParameterOnWildcardType((WildcardType) type, errors); 32aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } else if (type instanceof GenericArrayType) { 33aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin validateNoTypeParameterOnGenericArrayType((GenericArrayType) type, errors); 34aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 35aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 36aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin 37aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin private void validateNoTypeParameterOnParameterizedType(ParameterizedType parameterized, 38aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin List<Throwable> errors) { 39aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin for (Type each : parameterized.getActualTypeArguments()) { 40aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin validateNoTypeParameterOnType(each, errors); 41aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 42aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 43aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin 44aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin private void validateNoTypeParameterOnWildcardType(WildcardType wildcard, 45aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin List<Throwable> errors) { 46aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin for (Type each : wildcard.getUpperBounds()) { 47aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin validateNoTypeParameterOnType(each, errors); 48aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 49aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin for (Type each : wildcard.getLowerBounds()) { 50aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin validateNoTypeParameterOnType(each, errors); 51aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 52aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 53aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin 54aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin private void validateNoTypeParameterOnGenericArrayType( 55aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin GenericArrayType arrayType, List<Throwable> errors) { 56aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin validateNoTypeParameterOnType(arrayType.getGenericComponentType(), errors); 57aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin } 58b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot}