/** * Process an existing result. * * @param result * The result. * @param type * The result type. */ private static void processExistingResult(final ParameterResult result, final Type type) { if (type instanceof Class) { final Class<?> clazz = (Class<?>) type; final TypeVariable<?>[] typeVariableSuper = clazz.getTypeParameters(); GenericsUtil.getClassMatch(clazz, typeVariableSuper, result); } else if (type instanceof ParameterizedType) { final ParameterizedType parameterizedType = (ParameterizedType) type; final Class<?> clazz = (Class<?>) parameterizedType.getRawType(); Type[] types = clazz.getTypeParameters(); GenericsUtil.getClassMatch(clazz, types, result); types = parameterizedType.getActualTypeArguments(); GenericsUtil.getClassMatch(clazz, types, result); final Type actualType = parameterizedType.getActualTypeArguments()[result.getIndex()]; if (actualType instanceof Class) { result.setResult(actualType); } else if (actualType instanceof ParameterizedType) { final ParameterizedType actualParameterizedType = (ParameterizedType) actualType; result.setResult(actualParameterizedType.getRawType()); } } }