blob: 386b7ffabbc73ebf57a66497cb0bae124a9df8d6 [file] [log] [blame]
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 method;
NoGenericTypeParametersValidator(Method method) {
this.method = method;
}
void validate(List<Throwable> errors) {
for (Type each : method.getGenericParameterTypes()) {
validateNoTypeParameterOnType(each, errors);
}
}
private void validateNoTypeParameterOnType(Type type, List<Throwable> errors) {
if (type instanceof TypeVariable<?>) {
errors.add(new Exception("Method " + method.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);
}
}