Merge "Fix memory leak" am: be3c5da1f8 am: 64d5ab0cae
am: 70c700066d

Change-Id: I3c71673650b0f4bbfa9deb4d71ab683eea0e2639
diff --git a/src/main/java/com/android/tools/metalava/Driver.kt b/src/main/java/com/android/tools/metalava/Driver.kt
index 97ae453..2a440bd 100644
--- a/src/main/java/com/android/tools/metalava/Driver.kt
+++ b/src/main/java/com/android/tools/metalava/Driver.kt
@@ -154,6 +154,8 @@
         }
         exitCode = e.exitCode
         exitValue = false
+    } finally {
+        Disposer.dispose(LintCoreApplicationEnvironment.get().parentDisposable)
     }
 
     if (options.updateBaseline) {
@@ -434,8 +436,6 @@
         AnnotationStatistics(codebase).measureCoverageOf(options.annotationCoverageOf)
     }
 
-    Disposer.dispose(LintCoreApplicationEnvironment.get().parentDisposable)
-
     if (options.verbose) {
         val packageCount = codebase.size()
         options.stdout.println("\n$PROGRAM_NAME finished handling $packageCount packages in $stopwatch")
@@ -900,7 +900,7 @@
 private fun createProjectEnvironment(): LintCoreProjectEnvironment {
     ensurePsiFileCapacity()
     val appEnv = LintCoreApplicationEnvironment.get()
-    val parentDisposable = Disposer.newDisposable()
+    val parentDisposable = appEnv.parentDisposable
 
     if (!assertionsEnabled() &&
         System.getenv(ENV_VAR_METALAVA_DUMP_ARGV) == null &&
diff --git a/src/test/java/com/android/tools/metalava/DriverTest.kt b/src/test/java/com/android/tools/metalava/DriverTest.kt
index 5d521dc..533e58f 100644
--- a/src/test/java/com/android/tools/metalava/DriverTest.kt
+++ b/src/test/java/com/android/tools/metalava/DriverTest.kt
@@ -38,6 +38,7 @@
 import com.google.common.io.ByteStreams
 import com.google.common.io.Closeables
 import com.google.common.io.Files
+import com.intellij.openapi.util.Disposer
 import org.intellij.lang.annotations.Language
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotNull
@@ -94,6 +95,9 @@
 
             val sw = StringWriter()
             val writer = PrintWriter(sw)
+
+            Disposer.setDebugMode(true)
+
             if (!com.android.tools.metalava.run(arrayOf(*args), writer, writer)) {
                 val actualFail = cleanupString(sw.toString(), null)
                 if (cleanupString(expectedFail, null).replace(".", "").trim() !=
@@ -124,6 +128,8 @@
                 fail("Printed newlines with nothing else")
             }
 
+            Disposer.assertIsEmpty(true)
+
             return printedOutput
         } finally {
             System.setOut(previousOut)