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);
     }