diff --git a/CHANGELOG.md b/CHANGELOG.md index 58f9a4d0f4..9ddb75cfa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ This section is applicable when providing rules that depend on one or more value - Do not delete blank lines in KDoc (no-trailing-spaces) ([#1376](https://github.com/pinterest/ktlint/issues/1376)) - Do not indent raw string literals that are not followed by either trimIndent() or trimMargin() (`indent`) ([#1375](https://github.com/pinterest/ktlint/issues/1375)) - Revert remove unnecessary wildcard imports as introduced in Ktlint 0.43.0 (`no-unused-imports`) ([#1277](https://github.com/pinterest/ktlint/issues/1277)), ([#1393](https://github.com/pinterest/ktlint/issues/1393)), ([#1256](https://github.com/pinterest/ktlint/issues/1256)) +- (Possibly) resolve memory leak ([#1216](https://github.com/pinterest/ktlint/issues/1216)) ### Changed - Print the rule id always in the PlainReporter ([#1121](https://github.com/pinterest/ktlint/issues/1121)) diff --git a/ktlint-core/src/main/kotlin/com/pinterest/ktlint/core/internal/KotlinPsiFileFactory.kt b/ktlint-core/src/main/kotlin/com/pinterest/ktlint/core/internal/KotlinPsiFileFactory.kt index dc4160a8ef..433c5526d2 100644 --- a/ktlint-core/src/main/kotlin/com/pinterest/ktlint/core/internal/KotlinPsiFileFactory.kt +++ b/ktlint-core/src/main/kotlin/com/pinterest/ktlint/core/internal/KotlinPsiFileFactory.kt @@ -55,16 +55,22 @@ internal fun initPsiFileFactory(isFromCli: Boolean): PsiFileFactory { } val disposable = Disposer.newDisposable() - - val project = KotlinCoreEnvironment.createForProduction( - disposable, - compilerConfiguration, - EnvironmentConfigFiles.JVM_CONFIG_FILES - ).project as MockProject - - project.enableASTMutations() - - return PsiFileFactory.getInstance(project) + try { + val project = KotlinCoreEnvironment.createForProduction( + disposable, + compilerConfiguration, + EnvironmentConfigFiles.JVM_CONFIG_FILES + ).project as MockProject + + project.enableASTMutations() + + return PsiFileFactory.getInstance(project) + } finally { + // Dispose explicitly to (possibly) prevent memory leak + // https://discuss.kotlinlang.org/t/memory-leak-in-kotlincoreenvironment-and-kotlintojvmbytecodecompiler/21950 + // https://youtrack.jetbrains.com/issue/KT-47044 + disposable.dispose() + } } /**