code: public void expandSuperTypes() {
          if (store.keySet().contains(index(SubTypesScanner.class))) {
              Multimap<String, String> mmap = store.get(index(SubTypesScanner.class));
              Sets.SetView<String> keys = Sets.difference(mmap.keySet(), Sets.newHashSet(mmap.values()));
              Multimap<String, String> expand = HashMultimap.create();
              for (String key : keys) {
                  final Class<?> type = forName(key, loaders());
                  if (type != null) {
                      expandSupertypes(expand, key, type);
                  }
              }
              mmap.putAll(expand);
          }
      }
docs: expand super types after scanning, for super types that were not scanned.
  this is helpful in finding the transitive closure without scanning all 3rd party dependencies.
  it uses {@link ReflectionUtils#getSuperTypes(Class)}.
  <p>
  for example, for classes A,B,C where A supertype of B, B supertype of C:
  <ul>
  <li>if scanning C resulted in B (B->C in store), but A was not scanned (although A supertype of B) - then getSubTypes(A) will not return C</li>
  <li>if expanding supertypes, B will be expanded with A (A->B in store) - then getSubTypes(A) will return C</li>
  </ul>