[BT] Introduce the project build uuid
This allows to perform some cleanups after the entire project build finished. #KT-57398 In Progress
This commit is contained in:
committed by
Space Team
parent
28c059f25b
commit
175c00e5c7
+8
-1
@@ -9,6 +9,7 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.invocation.Gradle
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.bundling.AbstractArchiveTask
|
||||
import org.gradle.api.tasks.bundling.Zip
|
||||
import org.gradle.jvm.tasks.Jar
|
||||
@@ -29,8 +30,10 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.internal.ClassLoadersCachingBuildService
|
||||
import org.jetbrains.kotlin.gradle.logging.kotlinDebug
|
||||
import org.jetbrains.kotlin.gradle.logging.kotlinInfo
|
||||
import org.jetbrains.kotlin.gradle.plugin.BuildFinishedListenerService
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.BuildIdService
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget
|
||||
@@ -60,7 +63,9 @@ internal fun createGradleCompilerRunner(
|
||||
buildMetricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>,
|
||||
workerExecutor: WorkerExecutor,
|
||||
runViaBuildToolsApi: Boolean,
|
||||
cachedClassLoadersService: Property<ClassLoadersCachingBuildService>
|
||||
cachedClassLoadersService: Property<ClassLoadersCachingBuildService>,
|
||||
buildFinishedListenerService: Provider<BuildFinishedListenerService>,
|
||||
buildIdService: Provider<BuildIdService>,
|
||||
): GradleCompilerRunner {
|
||||
return if (runViaBuildToolsApi) {
|
||||
GradleBuildToolsApiCompilerRunner(
|
||||
@@ -70,6 +75,8 @@ internal fun createGradleCompilerRunner(
|
||||
buildMetricsReporter,
|
||||
workerExecutor,
|
||||
cachedClassLoadersService,
|
||||
buildFinishedListenerService,
|
||||
buildIdService,
|
||||
)
|
||||
} else {
|
||||
GradleCompilerRunnerWithWorkers(
|
||||
|
||||
+10
@@ -21,15 +21,20 @@ import org.jetbrains.kotlin.gradle.internal.ClassLoadersCachingBuildService
|
||||
import org.jetbrains.kotlin.gradle.internal.ParentClassLoaderProvider
|
||||
import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger
|
||||
import org.jetbrains.kotlin.gradle.logging.SL4JKotlinLogger
|
||||
import org.jetbrains.kotlin.gradle.plugin.BuildFinishedListenerService
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.BuildIdService
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
|
||||
import org.jetbrains.kotlin.gradle.tasks.throwExceptionIfCompilationFailed
|
||||
import org.slf4j.LoggerFactory
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
@OptIn(ExperimentalBuildToolsApi::class)
|
||||
internal abstract class BuildToolsApiCompilationWork : WorkAction<BuildToolsApiCompilationWork.BuildToolsApiCompilationParameters> {
|
||||
internal interface BuildToolsApiCompilationParameters : WorkParameters {
|
||||
val buildIdService: Property<BuildIdService>
|
||||
val buildFinishedListenerService: Property<BuildFinishedListenerService>
|
||||
val classLoadersCachingService: Property<ClassLoadersCachingBuildService>
|
||||
val compilerWorkArguments: Property<GradleKotlinCompilerWorkArguments>
|
||||
val taskOutputsToRestore: ListProperty<File>
|
||||
@@ -64,6 +69,10 @@ internal abstract class BuildToolsApiCompilationWork : WorkAction<BuildToolsApiC
|
||||
val classLoader = parameters.classLoadersCachingService.get()
|
||||
.getClassLoader(workArguments.compilerFullClasspath, SharedApiClassesClassLoaderProvider)
|
||||
val compilationService = CompilationService.loadImplementation(classLoader)
|
||||
val buildId = ProjectId.ProjectUUID(parameters.buildIdService.get().buildId)
|
||||
parameters.buildFinishedListenerService.get().onCloseOnceByKey(buildId.toString()) {
|
||||
compilationService.finishProjectCompilation(buildId)
|
||||
}
|
||||
val executionConfig = compilationService.makeCompilerExecutionStrategyConfiguration().apply {
|
||||
when (executionStrategy) {
|
||||
KotlinCompilerExecutionStrategy.DAEMON -> TODO("The daemon strategy is not yet supported in the Build Tools API")
|
||||
@@ -73,6 +82,7 @@ internal abstract class BuildToolsApiCompilationWork : WorkAction<BuildToolsApiC
|
||||
}
|
||||
val jvmCompilationConfig = compilationService.makeJvmCompilationConfiguration()
|
||||
val result = compilationService.compileJvm(
|
||||
buildId,
|
||||
executionConfig,
|
||||
jvmCompilationConfig,
|
||||
emptyList(),
|
||||
|
||||
+7
-1
@@ -16,6 +16,8 @@ import org.jetbrains.kotlin.compilerRunner.CompilerExecutionSettings
|
||||
import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner
|
||||
import org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWorkArguments
|
||||
import org.jetbrains.kotlin.gradle.internal.ClassLoadersCachingBuildService
|
||||
import org.jetbrains.kotlin.gradle.plugin.BuildFinishedListenerService
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.BuildIdService
|
||||
import org.jetbrains.kotlin.gradle.tasks.GradleCompileTaskProvider
|
||||
import org.jetbrains.kotlin.gradle.tasks.TaskOutputsBackup
|
||||
import java.io.File
|
||||
@@ -26,7 +28,9 @@ internal class GradleBuildToolsApiCompilerRunner(
|
||||
compilerExecutionSettings: CompilerExecutionSettings,
|
||||
buildMetrics: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>,
|
||||
private val workerExecutor: WorkerExecutor,
|
||||
private val cachedClassLoadersService: Provider<ClassLoadersCachingBuildService>
|
||||
private val cachedClassLoadersService: Provider<ClassLoadersCachingBuildService>,
|
||||
private val buildFinishedListenerService: Provider<BuildFinishedListenerService>,
|
||||
private val buildIdService: Provider<BuildIdService>,
|
||||
) : GradleCompilerRunner(taskProvider, jdkToolsJar, compilerExecutionSettings, buildMetrics) {
|
||||
|
||||
|
||||
@@ -39,6 +43,8 @@ internal class GradleBuildToolsApiCompilerRunner(
|
||||
workQueue.submit(BuildToolsApiCompilationWork::class.java) { params ->
|
||||
params.compilerWorkArguments.set(workArgs)
|
||||
params.classLoadersCachingService.set(cachedClassLoadersService)
|
||||
params.buildFinishedListenerService.set(buildFinishedListenerService)
|
||||
params.buildIdService.set(buildIdService)
|
||||
if (taskOutputsBackup != null) {
|
||||
params.taskOutputsToRestore.set(taskOutputsBackup.outputsToRestore)
|
||||
params.buildDir.set(taskOutputsBackup.buildDirectory)
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.services.BuildService
|
||||
import org.gradle.api.services.BuildServiceParameters
|
||||
import org.gradle.api.tasks.Internal
|
||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||
import org.jetbrains.kotlin.gradle.utils.registerClassLoaderScopedBuildService
|
||||
import java.util.*
|
||||
|
||||
internal interface UsesBuildIdProviderService : Task {
|
||||
@get:Internal
|
||||
val buildIdService: Property<BuildIdService>
|
||||
}
|
||||
|
||||
internal abstract class BuildIdService : BuildService<BuildServiceParameters.None> {
|
||||
val buildId: UUID = UUID.randomUUID()
|
||||
|
||||
companion object {
|
||||
fun registerIfAbsent(project: Project): Provider<BuildIdService> =
|
||||
project.gradle.registerClassLoaderScopedBuildService(BuildIdService::class).also { service ->
|
||||
project.tasks.withType<UsesBuildIdProviderService>().configureEach { task ->
|
||||
task.usesService(service)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLI
|
||||
import org.jetbrains.kotlin.gradle.plugin.UsesBuildFinishedListenerService
|
||||
import org.jetbrains.kotlin.gradle.plugin.UsesVariantImplementationFactories
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.UsesKotlinToolingDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.UsesBuildIdProviderService
|
||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||
import org.jetbrains.kotlin.gradle.report.*
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
@@ -60,6 +61,7 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
|
||||
UsesBuildFinishedListenerService,
|
||||
UsesClassLoadersCachingBuildService,
|
||||
UsesKotlinToolingDiagnostics,
|
||||
UsesBuildIdProviderService,
|
||||
BaseKotlinCompile {
|
||||
|
||||
init {
|
||||
@@ -188,6 +190,8 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
|
||||
workerExecutor,
|
||||
runViaBuildToolsApi.get(),
|
||||
classLoadersCachingService,
|
||||
buildFinishedListenerService,
|
||||
buildIdService,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.gradle.internal.ClassLoadersCachingBuildService
|
||||
import org.jetbrains.kotlin.gradle.internal.KaptGenerateStubsTask
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.BuildIdService
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.associateWithClosure
|
||||
@@ -69,6 +70,7 @@ internal abstract class AbstractKotlinCompileConfig<TASK : AbstractKotlinCompile
|
||||
})
|
||||
val buildFinishedListenerService = BuildFinishedListenerService.registerIfAbsent(project)
|
||||
val cachedClassLoadersService = ClassLoadersCachingBuildService.registerIfAbsent(project)
|
||||
val buildIdService = BuildIdService.registerIfAbsent(project)
|
||||
configureTask { task ->
|
||||
val propertiesProvider = project.kotlinPropertiesProvider
|
||||
|
||||
@@ -113,6 +115,7 @@ internal abstract class AbstractKotlinCompileConfig<TASK : AbstractKotlinCompile
|
||||
.convention(propertiesProvider.suppressExperimentalICOptimizationsWarning)
|
||||
.finalizeValueOnRead()
|
||||
task.buildFinishedListenerService.value(buildFinishedListenerService).disallowChanges()
|
||||
task.buildIdService.value(buildIdService).disallowChanges()
|
||||
|
||||
task.incremental = false
|
||||
task.useModuleDetection.convention(false)
|
||||
|
||||
Reference in New Issue
Block a user