ModuleContext should not create a zillion TypeOracles.

Review by: bobv

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6702 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/ModuleContext.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/ModuleContext.java
index 51ac681..23d9c57 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/ModuleContext.java
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/ModuleContext.java
@@ -20,17 +20,35 @@
 import com.google.gwt.dev.cfg.ModuleDef;
 import com.google.gwt.dev.cfg.ModuleDefLoader;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Helper for loading modules from the classpath.
  */
 class ModuleContext {
+  private static final Map<String, TypeOracle> typeOracleMap = new HashMap<String, TypeOracle>();
+
+  private static TypeOracle getTypeOracleFor(TreeLogger logger,
+      String moduleName) throws UnableToCompleteException {
+    TypeOracle oracle;
+    synchronized (typeOracleMap) {
+      oracle = typeOracleMap.get(moduleName);
+      if (oracle == null) {
+        ModuleDef moduleDef = ModuleDefLoader.loadFromClassPath(logger,
+            moduleName);
+        oracle = moduleDef.getCompilationState(logger).getTypeOracle();
+        typeOracleMap.put(moduleName, oracle);
+      }
+    }
+    return oracle;
+  }
+
   private final TypeOracle oracle;
-  private final ModuleDef moduleDef;
 
   ModuleContext(TreeLogger logger, String moduleName)
       throws UnableToCompleteException {
-    moduleDef = ModuleDefLoader.loadFromClassPath(logger, moduleName);
-    oracle = moduleDef.getTypeOracle(logger);
+    this.oracle = getTypeOracleFor(logger, moduleName);
   }
 
   public TypeOracle getOracle() {
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleTest.gwt.xml b/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleTest.gwt.xml
index b417c6a..5617bc0 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleTest.gwt.xml
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleTest.gwt.xml
@@ -14,5 +14,6 @@
 
 <module>
   <inherits name="com.google.gwt.core.Core"/>
+  <inherits name="com.google.gwt.junit.JUnit"/>

   <source path="test"/>
 </module>