code: void addAllClasses(ListBuffer<ClassDocImpl> l, boolean filtered) {
          try {
              if (isSynthetic()) return;
              // sometimes synthetic classes are not marked synthetic
              if (!JavadocTool.isValidClassName(tsym.name.toString())) return;
              if (filtered && !env.shouldDocument(tsym)) return;
              if (l.contains(this)) return;
              l.append(this);
              List<ClassDocImpl> more = List.nil();
              for (Scope.Entry e = tsym.members().elems; e != null;
                   e = e.sibling) {
                  if (e.sym != null && e.sym.kind == Kinds.TYP) {
                      ClassSymbol s = (ClassSymbol)e.sym;
                      ClassDocImpl c = env.getClassDoc(s);
                      if (c.isSynthetic()) continue;
                      if (c != null) more = more.prepend(c);
                  }
              }
              // this extra step preserves the ordering from oldjavadoc
              for (; more.nonEmpty(); more=more.tail) {
                  more.head.addAllClasses(l, filtered);
              }
          } catch (CompletionFailure e) {
              // quietly ignore completion failures
          }
      }
docs: Adds all inner classes of this class, and their
  inner classes recursively, to the list l.