Adds some needed JTypeOracle javadoc.

Suggested by: bobv

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5768 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JTypeOracle.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JTypeOracle.java
index 0c202d1..81f5e9f 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JTypeOracle.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JTypeOracle.java
@@ -205,32 +205,85 @@
     return instantiatedTypes.contains(type);
   }
 
+  /**
+   * A map of all interfaces to the set of classes that could theoretically
+   * implement them.
+   */
   private final Map<JInterfaceType, Set<JClassType>> couldBeImplementedMap = new IdentityHashMap<JInterfaceType, Set<JClassType>>();
 
+  /**
+   * A map of all classes to the set of interfaces that they could theoretically
+   * implement.
+   */
   private final Map<JClassType, Set<JInterfaceType>> couldImplementMap = new IdentityHashMap<JClassType, Set<JInterfaceType>>();
 
+  /**
+   * The set of all interfaces that are initially implemented by both a Java and
+   * Overlay type.
+   */
   private final Set<JInterfaceType> dualImpls = new IdentityHashSet<JInterfaceType>();
 
+  /**
+   * A map of all classes to the set of interfaces they directly implement,
+   * possibly through inheritance.
+   */
   private final Map<JClassType, Set<JInterfaceType>> implementsMap = new IdentityHashMap<JClassType, Set<JInterfaceType>>();
 
   private Set<JReferenceType> instantiatedTypes = null;
 
+  /**
+   * A map of all interfaces to the set of classes that directly implement them,
+   * possibly through inheritance.
+   */
   private final Map<JInterfaceType, Set<JClassType>> isImplementedMap = new IdentityHashMap<JInterfaceType, Set<JClassType>>();
 
+  /**
+   * Caches the {@link Object} class.
+   */
   private JClassType javaLangObject = null;
 
+  /**
+   * A map of all interfaces that are implemented by overlay types to the
+   * overlay type that initially implements it.
+   */
   private final Map<JInterfaceType, JClassType> jsoSingleImpls = new IdentityHashMap<JInterfaceType, JClassType>();
 
+  /**
+   * The associated {@link JProgram}.
+   */
   private final JProgram program;
 
+  /**
+   * A map of all classes to the set of classes that extend them, directly or
+   * indirectly.
+   */
   private final Map<JClassType, Set<JClassType>> subClassMap = new IdentityHashMap<JClassType, Set<JClassType>>();
 
+  /**
+   * A map of all interfaces to the set of interfaces that extend them, directly
+   * or indirectly.
+   */
   private final Map<JInterfaceType, Set<JInterfaceType>> subInterfaceMap = new IdentityHashMap<JInterfaceType, Set<JInterfaceType>>();
 
+  /**
+   * A map of all classes to the set of classes they extend, directly or
+   * indirectly.
+   */
   private final Map<JClassType, Set<JClassType>> superClassMap = new IdentityHashMap<JClassType, Set<JClassType>>();
 
+  /**
+   * A map of all interfaces to the set of interfaces they extend, directly or
+   * indirectly.
+   */
   private final Map<JInterfaceType, Set<JInterfaceType>> superInterfaceMap = new IdentityHashMap<JInterfaceType, Set<JInterfaceType>>();
 
+  /**
+   * A map of all methods with virtual overrides, onto the collection of
+   * overridden methods. Each key method's collections is a map of the set of
+   * subclasses who inherit the key method mapped onto the set of interface
+   * methods the key method virtually implements. For a definition of a virtual
+   * override, see {@link #getAllVirtualOverrides(JMethod)}.
+   */
   private final Map<JMethod, Map<JClassType, Set<JMethod>>> virtualUpRefMap = new IdentityHashMap<JMethod, Map<JClassType, Set<JMethod>>>();
 
   public JTypeOracle(JProgram program) {
@@ -459,10 +512,26 @@
   }
 
   /**
-   * References to any methods which this method does not directly override
-   * within the class in which it is declared; however, some instantiable
-   * subclass will cause the implementation of this method to effectively
-   * override methods with identical signatures declared in unrelated classes.
+   * Returns the set of methods the given method virtually overrides. A virtual
+   * override is an association between a concrete method and an unrelated
+   * interface method with the exact same name and signature. The association
+   * occurs if and only if some subclass extends the concrete method's
+   * containing class and implements the interface method's containing
+   * interface. Example:
+   * 
+   * <pre>
+   * interface IFoo {
+   *   foo();
+   * }
+   * class Unrelated {
+   *   foo() { ... }
+   * }
+   * class Foo extends Unrelated implements IFoo {
+   * }
+   * </pre>
+   * 
+   * In this case, <code>Unrelated.foo()</code> virtually implements
+   * <code>IFoo.foo()</code> in subclass <code>Foo</code>.
    */
   public Set<JMethod> getAllVirtualOverrides(JMethod method) {
     Set<JMethod> results = new IdentityHashSet<JMethod>();
@@ -687,7 +756,8 @@
   }
 
   /**
-   * Returns true if qType is a superinterface of type, directly or indirectly.
+   * Returns true if type extends the interface represented by qType, either
+   * directly or indirectly.
    */
   private boolean extendsInterface(JInterfaceType type, JInterfaceType qType) {
     return get(superInterfaceMap, type).contains(qType);
@@ -739,8 +809,8 @@
   }
 
   /**
-   * Returns true if qType is an implemented interface of type, directly or
-   * indirectly.
+   * Returns true if type implements the interface represented by qType, either
+   * directly or indirectly.
    */
   private boolean implementsInterface(JClassType type, JInterfaceType qType) {
     return get(implementsMap, type).contains(qType);