code: public Map<String, Type> ownerGenericsMap() {
          return ownerGenerics.isEmpty()
                  ? Collections.<String, Type>emptyMap() : new LinkedHashMap<String, Type>(ownerGenerics);
      }
docs: Inner class may use outer generics like this:
  <pre>{@code class Owner<T> {
  class Inner {
  T field;
  }
  }}</pre>.
  <p>
  NOTE: contains only owner type generics, not hidden by inner class generics. For example:
  <pre>{@code class Owner<T, K> {
  // hides outer generic
  class Inner<T> {}
  }}</pre>
  Here {@code ownerGenericsMap() == ["K": Object]} because owner generic "T" is overridden by inner class
  declaration.
  <p>
  In method or constructor contexts, context specific generics may also override owner generics
  (e.g. {@code <T> T method();}), but still all reachable by class owner generics wll be returned.
  This is done for consistency: no matter what context, method will return the same map. The only exception
  is {@link #visibleGenericsMap()} which return only actually visible generics from current context
  (class, method or constructor).
  
  @return reachable owner type generics if context type is inner class or empty map if not inner class or
  outer type does not contains generics
  @see #ownerClass()