private void resolveDirectDependencies(Class<?> clazz, HashSet<Class<?>> dependencies) { for (Field field : clazz.getDeclaredFields()) { resolveGenericDirectDependencies(field.getGenericType(), dependencies); } for (Constructor<?> ctor : clazz.getDeclaredConstructors()) { for (Type genericParameterType : ctor.getGenericParameterTypes()) { resolveGenericDirectDependencies(genericParameterType, dependencies); } } for (Method method : clazz.getDeclaredMethods()) { resolveGenericDirectDependencies(method.getGenericReturnType(), dependencies); for (Type genericParameterType : method.getGenericParameterTypes()) { resolveGenericDirectDependencies(genericParameterType, dependencies); } } Type genericSuperClass = clazz.getGenericSuperclass(); if (genericSuperClass != null) { resolveGenericDirectDependencies(genericSuperClass, dependencies); } for (Type genericInterface : clazz.getGenericInterfaces()) { resolveGenericDirectDependencies(genericInterface, dependencies); } }
private void resolveGenericDirectDependencies(Type type, HashSet<Class<?>> dependencies) { if (type instanceof Class<?>) { dependencies.add((Class<?>)type); } else if (type instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType)type; for (Type typeArg : parameterizedType.getActualTypeArguments()) { resolveGenericDirectDependencies(typeArg, dependencies); } } else if (type instanceof WildcardType) { WildcardType wildcardType = (WildcardType)type; for (Type upperBound : wildcardType.getUpperBounds()) { resolveGenericDirectDependencies(upperBound, dependencies); } for (Type lowerBound : wildcardType.getLowerBounds()) { resolveGenericDirectDependencies(lowerBound, dependencies); } } else { throw new UnsupportedOperationException("Type " + type + " not yet supported"); } }
private void resolveGenericDirectDependencies(Type type, HashSet<Class<?>> dependencies) { if (type instanceof Class<?>) { dependencies.add((Class<?>)type); } else if (type instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType)type; for (Type typeArg : parameterizedType.getActualTypeArguments()) { resolveGenericDirectDependencies(typeArg, dependencies); } } else if (type instanceof WildcardType) { WildcardType wildcardType = (WildcardType)type; for (Type upperBound : wildcardType.getUpperBounds()) { resolveGenericDirectDependencies(upperBound, dependencies); } for (Type lowerBound : wildcardType.getLowerBounds()) { resolveGenericDirectDependencies(lowerBound, dependencies); } } else { throw new UnsupportedOperationException("Type " + type + " not yet supported"); } }
private void resolveDirectDependencies(Class<?> clazz, HashSet<Class<?>> dependencies) { for (Field field : clazz.getDeclaredFields()) { resolveGenericDirectDependencies(field.getGenericType(), dependencies); } for (Constructor<?> ctor : clazz.getDeclaredConstructors()) { for (Type genericParameterType : ctor.getGenericParameterTypes()) { resolveGenericDirectDependencies(genericParameterType, dependencies); } } for (Method method : clazz.getDeclaredMethods()) { resolveGenericDirectDependencies(method.getGenericReturnType(), dependencies); for (Type genericParameterType : method.getGenericParameterTypes()) { resolveGenericDirectDependencies(genericParameterType, dependencies); } } Type genericSuperClass = clazz.getGenericSuperclass(); if (genericSuperClass != null) { resolveGenericDirectDependencies(genericSuperClass, dependencies); } for (Type genericInterface : clazz.getGenericInterfaces()) { resolveGenericDirectDependencies(genericInterface, dependencies); } }