code: private void separateOwnerGenerics() {
          ownerType = (Class) TypeUtils.getOuter(currentType);
          ownerGenerics = GenericsUtils.extractOwnerGenerics(currentType, typeGenerics);
          if (ownerGenerics.isEmpty()) {
              allTypeGenerics = typeGenerics;
          } else {
              allTypeGenerics = new LinkedHashMap<String, Type>(typeGenerics);
              // remove owner generics from main set (ok to modify map because it's a copy)
              for (String key : ownerGenerics.keySet()) {
                  typeGenerics.remove(key);
              }
          }
      }
docs: If current type is inner class then it could reference outer class generics and they were included
  into complete generics map. Now we need to separate them back.
  <p>
  In case when outer generic name clashes with inner class generic outer generic is overridden by class generic
  (become unreachable).