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>