Fix a memory leak introduced by the JDT upgrade.
Bug: #9596
Bug-Link: https://github.com/gwtproject/gwt/issues/9596
Change-Id: I3116a3972d82c3355942d1ef6a4c6394ed139af1
diff --git a/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java b/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
index 911bd5a..88ff022 100644
--- a/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
@@ -232,16 +232,26 @@
*/
private static final double ABORT_COUNT_MAX = 100;
- private class CompilerImpl extends Compiler {
- private TreeLogger logger;
+ private static class CompilerImpl extends Compiler {
+ private final TreeLogger logger;
private int abortCount = 0;
+ private final UnitProcessor processor;
+ private final Map<String, CompiledClass> internalTypes;
- public CompilerImpl(TreeLogger logger, CompilerOptions compilerOptions) {
- super(new INameEnvironmentImpl(packages, internalTypes),
+ public CompilerImpl(
+ TreeLogger logger,
+ CompilerOptions compilerOptions,
+ INameEnvironment nameEnvironment,
+ UnitProcessor processor,
+ Map<String, CompiledClass> internalTypes) {
+ super(nameEnvironment,
DefaultErrorHandlingPolicies.proceedWithAllProblems(),
- compilerOptions, new ICompilerRequestorImpl(), new DefaultProblemFactory(
- Locale.getDefault()));
+ compilerOptions,
+ new ICompilerRequestorImpl(),
+ new DefaultProblemFactory(Locale.getDefault()));
this.logger = logger;
+ this.processor = processor;
+ this.internalTypes = internalTypes;
}
/**
@@ -296,7 +306,7 @@
createCompiledClass(classFile, results);
}
List<CompiledClass> compiledClasses = new ArrayList<CompiledClass>(results.values());
- addBinaryTypes(compiledClasses);
+ addBinaryTypes(compiledClasses, internalTypes);
ICompilationUnit icu = cud.compilationResult().compilationUnit;
Adapter adapter = (Adapter) icu;
@@ -997,7 +1007,13 @@
icus.add(new Adapter(builder));
}
- compilerImpl = new CompilerImpl(logger, getCompilerOptions());
+ compilerImpl =
+ new CompilerImpl(
+ logger,
+ getCompilerOptions(),
+ new INameEnvironmentImpl(packages, internalTypes),
+ processor,
+ internalTypes);
try {
compilerImpl.compile(icus.toArray(new ICompilationUnit[icus.size()]));
} catch (AbortCompilation e) {
@@ -1039,6 +1055,11 @@
}
private void addBinaryTypes(Collection<CompiledClass> compiledClasses) {
+ addBinaryTypes(compiledClasses, internalTypes);
+ }
+
+ private static void addBinaryTypes(
+ Collection<CompiledClass> compiledClasses, Map<String, CompiledClass> internalTypes) {
for (CompiledClass cc : compiledClasses) {
internalTypes.put(cc.getInternalName(), cc);
}