From ef101232ed8c4e264e5d5c589216b00cc918fda2 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 5 Oct 2022 21:43:42 +0200 Subject: [PATCH] [Gradle, JS] Move session file from project --- .../compilerRunner/GradleKotlinCompilerRunner.kt | 15 +++++++-------- .../compilerRunner/GradleKotlinCompilerWork.kt | 4 ++-- .../gradle/plugin/KotlinGradleBuildServices.kt | 9 ++++----- .../plugin/KotlinGradleFinishBuildHandler.kt | 14 ++++---------- .../org/jetbrains/kotlin/gradle/tasks/Tasks.kt | 7 ++++--- .../jetbrains/kotlin/gradle/utils/gradleUtils.kt | 11 +++++++++++ 6 files changed, 32 insertions(+), 28 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/gradleUtils.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index aa67ffc682b..95e66a2409c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.daemon.common.filterExtractProps import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull -import org.jetbrains.kotlin.gradle.logging.GradleErrorMessageCollector import org.jetbrains.kotlin.gradle.logging.kotlinDebug import org.jetbrains.kotlin.gradle.logging.kotlinInfo import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation @@ -64,7 +63,7 @@ internal open class GradleCompilerRunner( internal val loggerProvider = taskProvider.logger.get() internal val buildDirProvider = taskProvider.buildDir.get().asFile internal val projectDirProvider = taskProvider.projectDir.get() - internal val projectRootDirProvider = taskProvider.rootDir.get() + internal val projectCacheDirProvider = taskProvider.projectCacheDir.get() internal val sessionDirProvider = taskProvider.sessionsDir.get() internal val projectNameProvider = taskProvider.projectName.get() internal val incrementalModuleInfoProvider = taskProvider.buildModulesInfo @@ -190,7 +189,7 @@ internal open class GradleCompilerRunner( projectDirProvider, buildDirProvider, projectNameProvider, - projectRootDirProvider, + projectCacheDirProvider, sessionDirProvider ), compilerFullClasspath = environment.compilerFullClasspath(jdkToolsJar), @@ -432,20 +431,20 @@ internal open class GradleCompilerRunner( // session files are deleted at org.jetbrains.kotlin.gradle.plugin.KotlinGradleBuildServices.buildFinished @Synchronized - internal fun getOrCreateSessionFlagFile(log: Logger, sessionsDir: File, projectRootDir: File): File { + internal fun getOrCreateSessionFlagFile(log: Logger, sessionsDir: File, projectCacheDirProvider: File): File { if (sessionFlagFile == null || !sessionFlagFile!!.exists()) { val sessionFilesDir = sessionsDir.apply { mkdirs() } sessionFlagFile = newTmpFile(prefix = "kotlin-compiler-", suffix = ".salive", directory = sessionFilesDir) - log.kotlinDebug { CREATED_SESSION_FILE_PREFIX + sessionFlagFile!!.relativeOrCanonical(projectRootDir) } + log.kotlinDebug { CREATED_SESSION_FILE_PREFIX + sessionFlagFile!!.relativeOrCanonical(projectCacheDirProvider) } } else { - log.kotlinDebug { EXISTING_SESSION_FILE_PREFIX + sessionFlagFile!!.relativeOrCanonical(projectRootDir) } + log.kotlinDebug { EXISTING_SESSION_FILE_PREFIX + sessionFlagFile!!.relativeOrCanonical(projectCacheDirProvider) } } return sessionFlagFile!! } - internal fun sessionsDir(rootProjectBuildDir: File): File = - File(File(rootProjectBuildDir, "kotlin"), "sessions") + internal fun sessionsDir(projectCacheDir: File): File = + File(File(projectCacheDir, "kotlin"), "sessions") } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt index 98d8a677e81..79bf165a0e8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerWork.kt @@ -41,10 +41,10 @@ internal class ProjectFilesForCompilation( val buildDir: File ) : Serializable { //TODO - constructor(logger: Logger, projectDir:File, buildDir: File, prjectName: String, projectRootDir: File, sessionDir: File) : this( + constructor(logger: Logger, projectDir:File, buildDir: File, prjectName: String, projectCacheDirProvider: File, sessionDir: File) : this( projectRootFile = projectDir, clientIsAliveFlagFile = GradleCompilerRunner.getOrCreateClientFlagFile(logger, prjectName), - sessionFlagFile = GradleCompilerRunner.getOrCreateSessionFlagFile(logger, sessionDir, projectRootDir), + sessionFlagFile = GradleCompilerRunner.getOrCreateSessionFlagFile(logger, sessionDir, projectCacheDirProvider), buildDir = buildDir ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt index d9c31ae0826..115dda4ed12 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt @@ -14,13 +14,13 @@ import org.gradle.api.services.BuildServiceParameters import org.jetbrains.kotlin.gradle.logging.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskLoggers +import org.jetbrains.kotlin.gradle.utils.projectCacheDir import java.io.File internal abstract class KotlinGradleBuildServices : BuildService, AutoCloseable { interface Parameters : BuildServiceParameters { - var buildDir: File - var rootDir: File + var projectCacheDir: File } private val log = Logging.getLogger(this.javaClass) @@ -63,7 +63,7 @@ internal abstract class KotlinGradleBuildServices : BuildService - service.parameters.rootDir = gradle.rootProject.rootDir - service.parameters.buildDir = gradle.rootProject.buildDir + service.parameters.projectCacheDir = gradle.projectCacheDir } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleFinishBuildHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleFinishBuildHandler.kt index 2a117fe6546..3ed99067371 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleFinishBuildHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleFinishBuildHandler.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.gradle.plugin -import org.gradle.api.invocation.Gradle import org.gradle.api.logging.Logging import org.jetbrains.kotlin.compilerRunner.DELETED_SESSION_FILE_PREFIX import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner @@ -33,24 +32,24 @@ internal class KotlinGradleFinishBuildHandler { startMemory = getUsedMemoryKb() } - fun buildFinished(rootProjectBuildDir: File, rootProjectRootDir: File) { + fun buildFinished(projectCacheDir: File) { TaskLoggers.clear() TaskExecutionResults.clear() GradleCompilerRunner.clearBuildModulesInfo() - val sessionsDir = GradleCompilerRunner.sessionsDir(rootProjectBuildDir) + val sessionsDir = GradleCompilerRunner.sessionsDir(projectCacheDir) if (sessionsDir.exists()) { val sessionFiles = sessionsDir.listFiles() // it is expected that only one session file per build exists // afaik is is not possible to run multiple gradle builds in one project since gradle locks some dirs if (sessionFiles.size > 1) { - log.warn("w: Detected multiple Kotlin daemon sessions at ${sessionsDir.relativeOrCanonical(rootProjectRootDir)}") + log.warn("w: Detected multiple Kotlin daemon sessions at ${sessionsDir.relativeOrCanonical(projectCacheDir)}") } for (file in sessionFiles) { file.delete() - log.kotlinDebug { DELETED_SESSION_FILE_PREFIX + file.relativeOrCanonical(rootProjectRootDir) } + log.kotlinDebug { DELETED_SESSION_FILE_PREFIX + file.relativeOrCanonical(projectCacheDir) } } } @@ -64,11 +63,6 @@ internal class KotlinGradleFinishBuildHandler { } } - fun buildFinished(gradle: Gradle) { - buildFinished(gradle.rootProject.buildDir, gradle.rootProject.rootDir) - gradle.removeListener(this) - } - internal fun getUsedMemoryKb(): Long? { if (!shouldReportMemoryUsage) return null diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 57632cf9b38..afdc2e4073e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -72,6 +72,7 @@ import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import org.jetbrains.kotlin.utils.JsLibraryUtils import org.jetbrains.kotlin.utils.addToStdlib.cast import java.io.File +import java.nio.file.Files.* import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject @@ -203,12 +204,12 @@ abstract class GradleCompileTaskProvider @Inject constructor( .property(project.rootProject.projectDir) @get:Internal - val rootDir: Provider = objectFactory - .property(project.rootProject.rootDir) + val projectCacheDir: Provider = objectFactory + .property(gradle.projectCacheDir) @get:Internal val sessionsDir: Provider = objectFactory - .property(GradleCompilerRunner.sessionsDir(project.rootProject.buildDir)) + .property(GradleCompilerRunner.sessionsDir(gradle.projectCacheDir)) @get:Internal val projectName: Provider = objectFactory diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/gradleUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/gradleUtils.kt new file mode 100644 index 00000000000..1dd09cb56d7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/gradleUtils.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2022 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.utils + +import org.gradle.api.invocation.Gradle + +val Gradle.projectCacheDir + get() = startParameter.projectCacheDir ?: this.rootProject.projectDir.resolve(".gradle") \ No newline at end of file