code: private static LinkedHashMap<String, Type> analyzeParent(final Class type,
                                                               final Map<String, Type> generics) {
          LinkedHashMap<String, Type> res = null;
          final Class parent = type.getSuperclass();
          if (!type.isInterface() && parent != null && parent != Object.class
                  && type.getGenericSuperclass() instanceof ParameterizedType) {
              res = resolveGenerics(type.getGenericSuperclass(), generics);
          } else if (parent != null && parent.getTypeParameters().length > 0) {
              // root class didn't declare generics
              res = resolveRawGenerics(parent);
          }
          return res == null ? EmptyGenericsMap.getInstance() : res;
      }
docs: Analyze super class generics (relative to provided type). Class may not declare generics for super class
  ({@code Some extends Base} where {@code class Base<T> }) and, in this case, parent class generics could
  be resolved only by upper bound. Note that parent type analysis must be performed only when generics
  for perent type are not known ahead of time (inlying resolution cases).
  
  @param type     type to analyze parent class for
  @param generics known type generics
  @return resolved parent class generics