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 { 12b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private final Method fMethod; 13b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot NoGenericTypeParametersValidator(Method method) { 15b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot this.fMethod = method; 16b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 17b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 18b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot void validate(List<Throwable> errors) { 19b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot for (Type each : fMethod.getGenericParameterTypes()) 20b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot validateNoTypeParameterOnType(each, errors); 21b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 22b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private void validateNoTypeParameterOnType(Type type, List<Throwable> errors) { 24b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot if (type instanceof TypeVariable<?>) { 25b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot errors.add(new Exception("Method " + fMethod.getName() 26b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot + "() contains unresolved type variable " + type)); 27b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } else if (type instanceof ParameterizedType) 28b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot validateNoTypeParameterOnParameterizedType((ParameterizedType) type, errors); 29b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot else if (type instanceof WildcardType) 30b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot validateNoTypeParameterOnWildcardType((WildcardType) type, errors); 31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot else if (type instanceof GenericArrayType) 32b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot validateNoTypeParameterOnGenericArrayType((GenericArrayType) type, errors); 33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 34b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 35b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private void validateNoTypeParameterOnParameterizedType(ParameterizedType parameterized, 36b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot List<Throwable> errors) { 37b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot for (Type each : parameterized.getActualTypeArguments()) 38b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot validateNoTypeParameterOnType(each, errors); 39b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 40b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 41b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private void validateNoTypeParameterOnWildcardType(WildcardType wildcard, 42b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot List<Throwable> errors) { 43b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot for (Type each : wildcard.getUpperBounds()) 44b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot validateNoTypeParameterOnType(each, errors); 45b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot for (Type each : wildcard.getLowerBounds()) 46b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot validateNoTypeParameterOnType(each, errors); 47b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 48b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 49b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private void validateNoTypeParameterOnGenericArrayType( 50b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot GenericArrayType arrayType, List<Throwable> errors) { 51b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot validateNoTypeParameterOnType(arrayType.getGenericComponentType(), errors); 52b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 53b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot}