code: public static List<Class<?>> resolveGenericsOf(final Type type, final Map<String, Type> generics) {
          final Type[] typeGenerics = getGenerics(type, generics);
          if (typeGenerics.length == 0) {
              return Collections.emptyList();
          }
          final List<Class<?>> res = new ArrayList<Class<?>>();
          for (Type gen : typeGenerics) {
              res.add(resolveClass(gen, generics));
          }
          return res;
      }
docs: Called to properly resolve generified type (e.g. generified method return).
  For example, when calling for {@code List<T>} it will return type of {@code T}.
  <p>
  If called on class (e.g. List) then return raw generic definition (upper bounds).
  
  @param type     type to analyze
  @param generics root class generics mapping
  @return resolved generic classes or empty list if type does not support generics
  @throws UnknownGenericException when found generic not declared on type (e.g. method generic)