public static GenericsInfo create(final Class<?> type, final Class<?>... ignoreClasses) {
        final Map<Class<?>, LinkedHashMap<String, Type>> generics =
                new HashMap<Class<?>, LinkedHashMap<String, Type>>();
        if (type.getTypeParameters().length > 0) {
            // special case: root class also contains generics
            generics.put(type, resolveRawGenerics(type.getTypeParameters()));
        } else {
            generics.put(type, EMPTY_MAP);
        }
        analyzeType(generics, type, Arrays.asList(ignoreClasses));
        return new GenericsInfo(type, generics);
    }