private static ResolvableType findGenericType(ResolvableType source, Class<?> type) { Class<?> rawType = getRawType(source); if (Object.class.equals(rawType)) { return null; } if (rawType.equals(type)) { return source; } return findGenericType(source.getSuperType(), type); }
private ResolvableType resolveVariable(TypeVariable<?> typeVariable, ResolvableType contextType) { ResolvableType resolvedType; if (contextType.hasGenerics()) { resolvedType = ResolvableType.forType(typeVariable, contextType); if (resolvedType.resolve() != null) { return resolvedType; } } resolvedType = resolveVariable(typeVariable, contextType.getSuperType()); if (resolvedType.resolve() != null) { return resolvedType; } for (ResolvableType ifc : contextType.getInterfaces()) { resolvedType = resolveVariable(typeVariable, ifc); if (resolvedType.resolve() != null) { return resolvedType; } } return ResolvableType.NONE; }