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