1. A method for finding terminal classes in a collection of programming language classes, wherein a terminal class is a class that is not extended by any other class, the method comprising: receiving a collection of classes; adding the classes to a map of the collection of classes, wherein keys to each class in the map include each class' superclass and the interfaces each class directly implements; finding all terminal classes in the collection of classes with only a single pass through the collection of classes by: analyzing a given class in the map to determine if the given class extends any other class in the collection of classes; if the given class extends any other class, removing this extended class from the collection of classes; repeating the steps of analyzing classes and removing extended classes until all remaining classes in the collection of classes are terminal classes; and automatically creating a hierarchical representation of the collection of classes.