| package org.junit.runners.model; |
| |
| import java.lang.reflect.GenericArrayType; |
| import java.lang.reflect.Method; |
| import java.lang.reflect.ParameterizedType; |
| import java.lang.reflect.Type; |
| import java.lang.reflect.TypeVariable; |
| import java.lang.reflect.WildcardType; |
| import java.util.List; |
| |
| class NoGenericTypeParametersValidator { |
| private final Method fMethod; |
| |
| NoGenericTypeParametersValidator(Method method) { |
| this.fMethod = method; |
| } |
| |
| void validate(List<Throwable> errors) { |
| for (Type each : fMethod.getGenericParameterTypes()) |
| validateNoTypeParameterOnType(each, errors); |
| } |
| |
| private void validateNoTypeParameterOnType(Type type, List<Throwable> errors) { |
| if (type instanceof TypeVariable<?>) { |
| errors.add(new Exception("Method " + fMethod.getName() |
| + "() contains unresolved type variable " + type)); |
| } else if (type instanceof ParameterizedType) |
| validateNoTypeParameterOnParameterizedType((ParameterizedType) type, errors); |
| else if (type instanceof WildcardType) |
| validateNoTypeParameterOnWildcardType((WildcardType) type, errors); |
| else if (type instanceof GenericArrayType) |
| validateNoTypeParameterOnGenericArrayType((GenericArrayType) type, errors); |
| } |
| |
| private void validateNoTypeParameterOnParameterizedType(ParameterizedType parameterized, |
| List<Throwable> errors) { |
| for (Type each : parameterized.getActualTypeArguments()) |
| validateNoTypeParameterOnType(each, errors); |
| } |
| |
| private void validateNoTypeParameterOnWildcardType(WildcardType wildcard, |
| List<Throwable> errors) { |
| for (Type each : wildcard.getUpperBounds()) |
| validateNoTypeParameterOnType(each, errors); |
| for (Type each : wildcard.getLowerBounds()) |
| validateNoTypeParameterOnType(each, errors); |
| } |
| |
| private void validateNoTypeParameterOnGenericArrayType( |
| GenericArrayType arrayType, List<Throwable> errors) { |
| validateNoTypeParameterOnType(arrayType.getGenericComponentType(), errors); |
| } |
| } |