Follow-on to clearing out TypeOracle state; also free Generators instances.
Review by: jat
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5169 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/Precompile.java b/dev/core/src/com/google/gwt/dev/Precompile.java
index ed22cd4..c03ce45 100644
--- a/dev/core/src/com/google/gwt/dev/Precompile.java
+++ b/dev/core/src/com/google/gwt/dev/Precompile.java
@@ -373,7 +373,7 @@
* @return the precompilation
*/
public static Precompilation precompile(TreeLogger logger,
- PrecompileOptionsImpl jjsOptions, ModuleDef module, File genDir,
+ JJSOptions jjsOptions, ModuleDef module, File genDir,
File generatorResourcesDir, File dumpSignatureFile) {
return precompile(logger, jjsOptions, module, 0, 0,
module.getProperties().numPermutations(), genDir,
@@ -421,7 +421,7 @@
FragmentLoaderCreator fragmentLoaderCreator = new FragmentLoaderCreator(
compilationState, module, genDir, generatorResourcesDir,
generatorArtifacts);
- JavaToJavaScriptCompiler.precompile(logger, compilationState, rpo,
+ JavaToJavaScriptCompiler.precompile(logger, module, rpo,
fragmentLoaderCreator, declEntryPts, additionalRootTypes, jjsOptions,
true);
return true;
@@ -432,7 +432,7 @@
}
private static Precompilation precompile(TreeLogger logger,
- PrecompileOptionsImpl jjsOptions, ModuleDef module, int permutationBase,
+ JJSOptions jjsOptions, ModuleDef module, int permutationBase,
int firstPerm, int numPerms, File genDir, File generatorResourcesDir,
File dumpSignatureFile) {
@@ -462,8 +462,8 @@
generatedArtifacts);
PerfLogger.start("Precompile");
UnifiedAst unifiedAst = JavaToJavaScriptCompiler.precompile(logger,
- compilationState, rpo, fragmentLoaderCreator, declEntryPts, null,
- jjsOptions, rpo.getPermuationCount() == 1);
+ module, rpo, fragmentLoaderCreator, declEntryPts, null, jjsOptions,
+ rpo.getPermuationCount() == 1);
PerfLogger.end();
// Merge all identical permutations together.
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java b/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java
index 1e2358c..1c35aac 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java
@@ -173,6 +173,21 @@
defaultExcludes, caseSensitive, true);
}
+ /**
+ * Free up memory no longer needed in later compile stages. After calling this
+ * method, the TypeOracle, ResourceOracle, and CompilationState will be empty
+ * and unusable. Calling {@link #refresh(TreeLogger)} will restore them.
+ */
+ public void clear() {
+ if (lazySourceOracle != null) {
+ lazySourceOracle.clear();
+ }
+ if (lazyCompilationState != null) {
+ lazyCompilationState.clear();
+ }
+ rules.dispose();
+ }
+
public void clearEntryPoints() {
entryPointTypeNames.clear();
}
diff --git a/dev/core/src/com/google/gwt/dev/cfg/Rule.java b/dev/core/src/com/google/gwt/dev/cfg/Rule.java
index 34e29aa..8096193 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/Rule.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/Rule.java
@@ -37,4 +37,7 @@
public abstract String realize(TreeLogger logger, GeneratorContext context,
String typeName) throws UnableToCompleteException;
+
+ protected void dispose() {
+ }
}
diff --git a/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java b/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
index 2f97c36..40b4527 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
@@ -28,7 +28,7 @@
*/
public class RuleGenerateWith extends Rule {
- private final Generator generator;
+ private Generator generator;
public RuleGenerateWith(Generator generator) {
this.generator = generator;
@@ -70,4 +70,9 @@
public String toString() {
return "<generate-with class='" + generator.getClass().getName() + "'/>";
}
+
+ @Override
+ protected void dispose() {
+ generator = null;
+ }
}
diff --git a/dev/core/src/com/google/gwt/dev/cfg/Rules.java b/dev/core/src/com/google/gwt/dev/cfg/Rules.java
index afb1817..fc22d43 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/Rules.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/Rules.java
@@ -25,6 +25,12 @@
private final LinkedList<Rule> list = new LinkedList<Rule>();
+ public void dispose() {
+ for (Rule rule : list) {
+ rule.dispose();
+ }
+ }
+
public boolean isEmpty() {
return list.isEmpty();
}
diff --git a/dev/core/src/com/google/gwt/dev/javac/CompilationState.java b/dev/core/src/com/google/gwt/dev/javac/CompilationState.java
index 8fb5a22..d145d46 100644
--- a/dev/core/src/com/google/gwt/dev/javac/CompilationState.java
+++ b/dev/core/src/com/google/gwt/dev/javac/CompilationState.java
@@ -146,7 +146,6 @@
updateExposedUnits();
jdtCompiler = null;
mediator = new TypeOracleMediator();
- sourceOracle.clear();
invalidatorState = new CompilationUnitInvalidator.InvalidatorState();
}
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
index 06961e3..90a10c0 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -27,7 +27,7 @@
import com.google.gwt.core.ext.soyc.impl.SplitPointRecorderImpl;
import com.google.gwt.core.ext.soyc.impl.StoryRecorderImpl;
import com.google.gwt.dev.PermutationResult;
-import com.google.gwt.dev.javac.CompilationState;
+import com.google.gwt.dev.cfg.ModuleDef;
import com.google.gwt.dev.jdt.RebindPermutationOracle;
import com.google.gwt.dev.jdt.WebModeCompilerFrontEnd;
import com.google.gwt.dev.jjs.CorrelationFactory.DummyCorrelationFactory;
@@ -319,7 +319,7 @@
* Performs a precompilation, returning a unified AST.
*
* @param logger the logger to use
- * @param compilationState the CompilationState
+ * @param module the module to compile
* @param rpo the RebindPermutationOracle
* @param fragmentLoaderCreator a FragmentLoaderCreator
* @param declEntryPts the set of entry classes declared in a GWT module;
@@ -333,10 +333,9 @@
* @throws UnableToCompleteException if an error other than
* {@link OutOfMemoryError} occurs
*/
- public static UnifiedAst precompile(TreeLogger logger,
- CompilationState compilationState, RebindPermutationOracle rpo,
- FragmentLoaderCreator fragmentLoaderCreator, String[] declEntryPts,
- String[] additionalRootTypes, JJSOptions options,
+ public static UnifiedAst precompile(TreeLogger logger, ModuleDef module,
+ RebindPermutationOracle rpo, FragmentLoaderCreator fragmentLoaderCreator,
+ String[] declEntryPts, String[] additionalRootTypes, JJSOptions options,
boolean singlePermutation) throws UnableToCompleteException {
if (additionalRootTypes == null) {
@@ -363,12 +362,12 @@
// Compile the source and get the compiler so we can get the parse tree
//
CompilationUnitDeclaration[] goldenCuds = WebModeCompilerFrontEnd.getCompilationUnitDeclarations(
- logger, allRootTypes.toArray(new String[0]), compilationState, rpo,
- fragmentLoaderCreator);
+ logger, allRootTypes.toArray(new String[0]),
+ module.getCompilationState(logger), rpo, fragmentLoaderCreator);
// Free up memory.
if (!options.isCompilationStateRetained()) {
- compilationState.clear();
+ module.clear();
}
// Check for compilation problems. We don't log here because any problems