code: Set<Class<?>> flattenHierarchy(Class<?> concreteClass) {
      Set<Class<?>> classes = flattenHierarchyCache.get(concreteClass);
      if (classes == null) {
        Set<Class<?>> classesCreation = getClassesFor(concreteClass);
        classes = flattenHierarchyCache.putIfAbsent(concreteClass, classesCreation);
        if (classes == null) {
          classes = classesCreation;
        }
      }
  
      return classes;
    }
docs: Flattens a class's type hierarchy into a set of Class objects.  The set will include all superclasses
  (transitively), and all interfaces implemented by these superclasses.
  
  @param concreteClass class whose type hierarchy will be retrieved.
  @return {@code concreteClass}'s complete type hierarchy, flattened and uniqued.