From 976b6885ea9972b374976904a79b7546a964362e Mon Sep 17 00:00:00 2001 From: Tor Norbye <tnorbye@google.com> Date: Thu, 24 Jan 2019 08:59:30 -0800 Subject: [PATCH] Fix memory leak Ensure that we clean up the application environment properly when exiting. This doesn't matter when metalava is invoked as part of the build since it's invoked and then exited, but when running unit tests this is important. Test: Existing unit tests Change-Id: I83ad663dd649d234cddd0afb6d3cf8f67b1d846f --- src/main/java/com/android/tools/metalava/Driver.kt | 6 +++--- src/test/java/com/android/tools/metalava/DriverTest.kt | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) 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 @@ 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 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.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) -- GitLab