code: public static Map<Class<?>, LinkedHashMap<String, Type>> resolve(
              final Class<?> type,
              final LinkedHashMap<String, Type> rootGenerics,
              final Map<Class<?>, LinkedHashMap<String, Type>> knownGenerics,
              final List<Class<?>> ignoreClasses) {
          final Map<Class<?>, LinkedHashMap<String, Type>> generics =
                  new HashMap<Class<?>, LinkedHashMap<String, Type>>();
          generics.put(type, rootGenerics);
          try {
              analyzeType(generics, type, knownGenerics, ignoreClasses);
          } catch (Exception ex) {
              throw new GenericsResolutionException(type, rootGenerics, knownGenerics, ex);
          }
          return generics;
      }
docs: Analyze class hierarchy and resolve actual generic values for all composing types.  Root type
  generics must be specified directly.
  <p>
  If generics are known for some middle type, then they would be used "as is" instead of generics tracked
  from root. Also, known generics will be used for lower hierarchy resolution.
  
  @param type          class to analyze
  @param rootGenerics  resolved root type generics (including owner type generics); must not be null!
  @param knownGenerics type generics known before analysis (some middle class generics are known) and
  could contain possible outer generics (types for sure not included in resolving type
  hierarchy); must not be null, but could be empty map
  @param ignoreClasses classes to ignore during analysis
  @return resolved generics for all types in class hierarchy