putHierarchyFrom: rootCollection with: visibleClasses into: hierarchy withIndent: indentString | sortBlock | sortBlock := [:a :b | a name < b name]. rootCollection do: [:rootClass | (visibleClasses includes: rootClass) ifTrue: [ hierarchy add: indentString, rootClass fullName. self putHierarchyFrom: (rootClass subclasses asSortedCollection: sortBlock) with: visibleClasses into: hierarchy withIndent: indentString, ' '] ifFalse: [ self putHierarchyFrom: (rootClass subclasses asSortedCollection: sortBlock) with: visibleClasses into: hierarchy withIndent: indentString]]