diff --git a/src/main/java/com/android/tools/metalava/Driver.kt b/src/main/java/com/android/tools/metalava/Driver.kt
index 97ae453478cfca2026c9568be48bd273175d2312..2a440bd468eaef0f0e8a1ae996ae7c03c819c050 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 @@ fun run(
         }
         exitCode = e.exitCode
         exitValue = false
+    } finally {
+        Disposer.dispose(LintCoreApplicationEnvironment.get().parentDisposable)
     }
 
     if (options.updateBaseline) {
@@ -434,8 +436,6 @@ private fun processFlags() {
         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 @@ fun loadFromJarFile(apiJar: File, manifest: File? = null, preFiltered: Boolean =
 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 5d521dcf039a92ac2ef8c972651917b6c2ba3387..533e58f8d1690d6cdf2d644e490fb8139499bdae 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.android.utils.StdLogger
 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 @@ abstract class DriverTest {
 
             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 @@ abstract class DriverTest {
                 fail("Printed newlines with nothing else")
             }
 
+            Disposer.assertIsEmpty(true)
+
             return printedOutput
         } finally {
             System.setOut(previousOut)