[KAPT] KT-64303 Dispose resources allocated by Standalone Analysis API; re-enable Kapt4IT

Merge-request: KT-MR-13510
Merged-by: Pavel Mikhailovskii <Pavel.Mikhailovskii@jetbrains.com>
This commit is contained in:
strangepleasures
2023-12-14 14:10:14 +00:00
committed by Space Team
parent c66370bf93
commit 7b841d90e6
5 changed files with 55 additions and 54 deletions
@@ -14,7 +14,6 @@ import kotlin.io.path.name
import kotlin.io.path.walk
@DisplayName("Kapt 4 base checks")
@Disabled("Causes OOM on Windows")
class Kapt4IT : Kapt3IT() {
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
@@ -4,7 +4,6 @@ import org.gradle.api.logging.LogLevel
import org.gradle.testkit.runner.BuildResult
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.DisplayName
import java.io.File
import java.nio.file.Path
@@ -15,7 +14,6 @@ import kotlin.io.path.deleteRecursively
import kotlin.io.path.writeText
import kotlin.test.assertEquals
@Disabled("Causes OOM on Windows")
@DisplayName("Kapt incremental compilation")
@OtherGradlePluginTests
open class KaptIncrementalIT : KGPBaseTest() {
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.gradle.incapt.IncrementalBinaryIsolatingProcessor
import org.jetbrains.kotlin.gradle.incapt.IncrementalIsolatingProcessor
import org.jetbrains.kotlin.gradle.incapt.IncrementalProcessor
import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.DisplayName
import java.io.File
import kotlin.io.path.createDirectories
@@ -21,7 +20,6 @@ import kotlin.io.path.writeText
import kotlin.test.assertEquals
import kotlin.test.assertTrue
@Disabled("Causes OOM on Windows")
@DisplayName("Kapt incremental tests with aggregating apt")
open class KaptIncrementalWithAggregatingApt : KaptIncrementalIT() {
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.gradle.incapt.IncrementalBinaryIsolatingProcessor
import org.jetbrains.kotlin.gradle.incapt.IncrementalProcessor
import org.jetbrains.kotlin.gradle.incapt.IncrementalProcessorReferencingClasspath
import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.condition.DisabledOnOs
import org.junit.jupiter.api.condition.OS
@@ -24,7 +23,6 @@ import java.util.zip.ZipOutputStream
import kotlin.io.path.*
import kotlin.test.assertEquals
@Disabled("Causes OOM on Windows")
@DisplayName("Kapt incremental tests with isolating apt")
open class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() {
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.kapt4
import com.intellij.openapi.util.Disposer
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiJavaFile
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
@@ -64,56 +65,63 @@ private class Kapt4AnalysisHandlerExtension : FirAnalysisHandlerExtension() {
}
}
val standaloneAnalysisAPISession =
buildStandaloneAnalysisAPISession(classLoader = Kapt4AnalysisHandlerExtension::class.java.classLoader) {
@Suppress("DEPRECATION") // TODO: KT-61319 Kapt: remove usages of deprecated buildKtModuleProviderByCompilerConfiguration
buildKtModuleProviderByCompilerConfiguration(updatedConfiguration)
val projectDisposable = Disposer.newDisposable("StandaloneAnalysisAPISession.project")
try {
val standaloneAnalysisAPISession =
buildStandaloneAnalysisAPISession(
projectDisposable = projectDisposable,
classLoader = Kapt4AnalysisHandlerExtension::class.java.classLoader) {
@Suppress("DEPRECATION") // TODO: KT-61319 Kapt: remove usages of deprecated buildKtModuleProviderByCompilerConfiguration
buildKtModuleProviderByCompilerConfiguration(updatedConfiguration)
registerProjectService(KtLifetimeTokenProvider::class.java, KtAlwaysAccessibleLifetimeTokenProvider())
}
val (module, files) = standaloneAnalysisAPISession.modulesWithFiles.entries.single()
optionsBuilder.apply {
projectBaseDir = projectBaseDir ?: module.project.basePath?.let(::File)
val contentRoots = configuration[CLIConfigurationKeys.CONTENT_ROOTS] ?: emptyList()
compileClasspath.addAll(contentRoots.filterIsInstance<JvmClasspathRoot>().map { it.file })
javaSourceRoots.addAll(contentRoots.filterIsInstance<JavaSourceRoot>().map { it.file })
classesOutputDir = classesOutputDir ?: configuration.get(JVMConfigurationKeys.OUTPUT_DIRECTORY)
}
if (!optionsBuilder.checkOptions(logger, configuration)) return false
val options = optionsBuilder.build()
if (options[KaptFlag.VERBOSE]) {
logger.info(options.logString())
}
return try {
if (options.mode.generateStubs) {
generateAndSaveStubs(
module,
files,
options,
logger,
configuration.getBoolean(CommonConfigurationKeys.REPORT_OUTPUT_FILES),
configuration[CommonConfigurationKeys.METADATA_VERSION]
)
}
if (options.mode.runAnnotationProcessing) {
KaptContext(
options,
false,
logger
).use { context ->
runProcessors(context, options)
registerProjectService(KtLifetimeTokenProvider::class.java, KtAlwaysAccessibleLifetimeTokenProvider())
}
}
true
} catch (e: Exception) {
logger.exception(e)
false
val (module, files) = standaloneAnalysisAPISession.modulesWithFiles.entries.single()
optionsBuilder.apply {
projectBaseDir = projectBaseDir ?: module.project.basePath?.let(::File)
val contentRoots = configuration[CLIConfigurationKeys.CONTENT_ROOTS] ?: emptyList()
compileClasspath.addAll(contentRoots.filterIsInstance<JvmClasspathRoot>().map { it.file })
javaSourceRoots.addAll(contentRoots.filterIsInstance<JavaSourceRoot>().map { it.file })
classesOutputDir = classesOutputDir ?: configuration.get(JVMConfigurationKeys.OUTPUT_DIRECTORY)
}
if (!optionsBuilder.checkOptions(logger, configuration)) return false
val options = optionsBuilder.build()
if (options[KaptFlag.VERBOSE]) {
logger.info(options.logString())
}
return try {
if (options.mode.generateStubs) {
generateAndSaveStubs(
module,
files,
options,
logger,
configuration.getBoolean(CommonConfigurationKeys.REPORT_OUTPUT_FILES),
configuration[CommonConfigurationKeys.METADATA_VERSION]
)
}
if (options.mode.runAnnotationProcessing) {
KaptContext(
options,
false,
logger
).use { context ->
runProcessors(context, options)
}
}
true
} catch (e: Exception) {
logger.exception(e)
false
}
} finally {
Disposer.dispose(projectDisposable)
}
}