code: public List<Class<?>> resolveGenericsOf(final Type type) {
          return GenericsUtils.resolveGenericsOf(type, chooseContext(type).contextGenerics());
      }
docs: Useful for introspection, to know exact generic value.
  <pre>{@code class A extends B<Long>;
  class B<T> {
  List<T> doSmth();
  }}</pre>
  Resolving parameters in context of root class:
  {@code type(B.class).resolveGenericsOf(B.class.getMethod("doSmth").getGenericReturnType()) == [Long.class]}
  <p>
  When called on class, return upper bound from generic declaration.
  <p>
  Check if type containing generics, belonging to different context in current hierarchy and
  automatically change context to properly resolve generics. Fails when it is impossible to correctly
  resolve generics (preventing incorrect usage).
  
  @param type type to resolve generics
  @return resolved generic classes or empty list if type does not use generics
  @throws WrongGenericsContextException if type contains generics not visible from current class
  @see #resolveTypeGenerics(Type) if complete types are required