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