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;
  }
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.
otto/src/main/java/com/squareup/otto/Bus.java