diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt index 9e31970eb2c..24f9f924465 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt @@ -616,20 +616,24 @@ abstract class CompileServiceImplBase( val rootProjectDir = incrementalCompilationOptions.rootProjectDir val buildDir = incrementalCompilationOptions.buildDir - val modulesApiHistory = incrementalCompilationOptions.multiModuleICSettings?.run { - reporter.info { "Use module detection: $useModuleDetection" } - val modulesInfo = incrementalCompilationOptions.modulesInfo - ?: error("The build is configured to use the history-file based IC approach, but doesn't provide the modulesInfo") - check(rootProjectDir != null) { - "rootProjectDir is expected to be non null when the history-file based IC approach is used" - } + val modulesApiHistory = if (incrementalCompilationOptions.classpathChanges is ClasspathChanges.ClasspathSnapshotEnabled) { + EmptyModulesApiHistory + } else { + incrementalCompilationOptions.multiModuleICSettings?.run { + reporter.info { "Use module detection: $useModuleDetection" } + val modulesInfo = incrementalCompilationOptions.modulesInfo + ?: error("The build is configured to use the history-file based IC approach, but doesn't provide the modulesInfo") + check(rootProjectDir != null) { + "rootProjectDir is expected to be non null when the history-file based IC approach is used" + } - if (!useModuleDetection) { - ModulesApiHistoryJvm(rootProjectDir, modulesInfo) - } else { - ModulesApiHistoryAndroid(rootProjectDir, modulesInfo) - } - } ?: EmptyModulesApiHistory + if (!useModuleDetection) { + ModulesApiHistoryJvm(rootProjectDir, modulesInfo) + } else { + ModulesApiHistoryAndroid(rootProjectDir, modulesInfo) + } + } ?: EmptyModulesApiHistory + } val useK2 = k2jvmArgs.useK2 || LanguageVersion.fromVersionString(k2jvmArgs.languageVersion)?.usesK2 == true // TODO: This should be reverted after implementing of fir-based java tracker (KT-57147). diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt index 2d74bf1868c..5b9d1b31890 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildServiceDeclarationIT.kt @@ -24,7 +24,11 @@ class BuildServiceDeclarationIT : KGPBaseTest() { @GradleTest @JvmGradlePluginTests fun testJvmProject(gradleVersion: GradleVersion) { - project("kotlinJavaProject", gradleVersion) { + project( + "kotlinJavaProject", + gradleVersion, + buildOptions = defaultBuildOptions.copy(warningMode = WarningMode.Fail) + ) { enableStableConfigurationCachePreview() build("build") { assertOutputDoesNotContainBuildServiceDeclarationWarnings() @@ -72,7 +76,11 @@ class BuildServiceDeclarationIT : KGPBaseTest() { @GradleTest @OtherGradlePluginTests fun testKaptProject(gradleVersion: GradleVersion) { - project("kapt2/simple", gradleVersion) { + project( + "kapt2/simple", + gradleVersion, + buildOptions = defaultBuildOptions.copy(warningMode = WarningMode.Fail) + ) { enableStableConfigurationCachePreview() build("build") { assertOutputDoesNotContainBuildServiceDeclarationWarnings() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ProjectIsolationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ProjectIsolationIT.kt index 1ec66ba372f..8d06fa2bcf1 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ProjectIsolationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ProjectIsolationIT.kt @@ -14,11 +14,10 @@ class ProjectIsolationIT : KGPBaseTest() { override val defaultBuildOptions: BuildOptions get() = super.defaultBuildOptions.copy(configurationCache = true, projectIsolation = true) - @DisplayName("Should be compatible with project isolation") + @DisplayName("JVM project should be compatible with project isolation") @JvmGradlePluginTests @GradleTestVersions( minVersion = TestVersions.Gradle.G_7_1, - maxVersion = TestVersions.Gradle.G_7_6 ) @GradleTest fun testProjectIsolationInJvmSimple(gradleVersion: GradleVersion) { 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 9177a730206..81644d615fc 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 @@ -209,7 +209,7 @@ internal open class GradleCompilerRunner( } val incrementalCompilationEnvironment = environment.incrementalCompilationEnvironment - val modulesInfo = incrementalCompilationEnvironment?.let { incrementalModuleInfoProvider.get().info } + val modulesInfo = incrementalCompilationEnvironment?.let { incrementalModuleInfoProvider.orNull?.info } val workArgs = GradleKotlinCompilerWorkArguments( projectFiles = ProjectFilesForCompilation( loggerProvider, 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 941432fd4b3..9299e1b6eac 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 @@ -327,7 +327,7 @@ internal class GradleKotlinCompilerWork @Inject constructor( usePreciseJavaTracking = icEnv.usePreciseJavaTracking, outputFiles = outputFiles, multiModuleICSettings = icEnv.multiModuleICSettings, - modulesInfo = incrementalModuleInfo!!, + modulesInfo = incrementalModuleInfo, rootProjectDir = icEnv.rootProjectDir, buildDir = icEnv.buildDir, kotlinScriptExtensions = kotlinScriptExtensions, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt index f8980faba71..20ae1df3074 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/AbstractKotlinCompileConfig.kt @@ -13,11 +13,9 @@ import org.gradle.api.provider.Provider import org.gradle.api.provider.ProviderFactory import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.compilerRunner.CompilerSystemPropertiesService -import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension import org.jetbrains.kotlin.gradle.dsl.topLevelExtension -import org.jetbrains.kotlin.gradle.incremental.IncrementalModuleInfoBuildService import org.jetbrains.kotlin.gradle.internal.ClassLoadersCachingBuildService import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider @@ -27,7 +25,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget import org.jetbrains.kotlin.gradle.plugin.mpp.internal import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.KOTLIN_BUILD_DIR_NAME -import org.jetbrains.kotlin.gradle.utils.providerWithLazyConvention /** * Configuration for the base compile task, [org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile]. @@ -42,10 +39,6 @@ internal abstract class AbstractKotlinCompileConfig task.kotlinDaemonJvmArguments.set(providers.provider { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt index 724c52ab400..1bbc0bcd746 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/Kotlin2JsCompileConfig.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.gradle.tasks.configuration +import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner +import org.jetbrains.kotlin.gradle.incremental.IncrementalModuleInfoBuildService import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType @@ -12,6 +14,7 @@ import org.jetbrains.kotlin.gradle.targets.js.internal.LibraryFilterCachingServi import org.jetbrains.kotlin.gradle.targets.js.ir.* import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.utils.klibModuleName +import org.jetbrains.kotlin.gradle.utils.providerWithLazyConvention import java.io.File internal typealias Kotlin2JsCompileConfig = BaseKotlin2JsCompileConfig @@ -23,6 +26,11 @@ internal open class BaseKotlin2JsCompileConfig( init { val libraryFilterCachingService = LibraryFilterCachingService.registerIfAbsent(project) + val incrementalModuleInfoProvider = IncrementalModuleInfoBuildService.registerIfAbsent( + project, + objectFactory.providerWithLazyConvention { GradleCompilerRunner.buildModulesInfo(project.gradle) }, + ) + configureTask { task -> task.incremental = propertiesProvider.incrementalJs ?: true task.incrementalJsKlib = propertiesProvider.incrementalJsKlib ?: true @@ -65,6 +73,7 @@ internal open class BaseKotlin2JsCompileConfig( ) task.libraryFilterCacheService.value(libraryFilterCachingService).disallowChanges() + task.incrementalModuleInfoProvider.value(incrementalModuleInfoProvider).disallowChanges() } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileCommonConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileCommonConfig.kt index 92a95cc66cd..2afab2c20df 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileCommonConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileCommonConfig.kt @@ -23,6 +23,7 @@ internal class KotlinCompileCommonConfig( ).disallowChanges() task.refinesMetadataPaths.from(compilationInfo.refinesPaths).disallowChanges() task.moduleName.set(providers.provider { compilationInfo.moduleName }) + task.incrementalModuleInfoProvider.disallowChanges() } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt index cbdc09ac840..a628b0ca339 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt @@ -12,9 +12,11 @@ import org.gradle.api.artifacts.result.ResolvedDependencyResult import org.gradle.api.artifacts.transform.TransformSpec import org.gradle.api.attributes.Attribute import org.gradle.api.provider.Provider +import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension +import org.jetbrains.kotlin.gradle.incremental.IncrementalModuleInfoBuildService import org.jetbrains.kotlin.gradle.internal.ClassLoadersCachingBuildService import org.jetbrains.kotlin.gradle.internal.KOTLIN_BUILD_TOOLS_API_IMPL import org.jetbrains.kotlin.gradle.internal.KOTLIN_MODULE_GROUP @@ -51,6 +53,16 @@ internal open class BaseKotlinCompileConfig : AbstractKotl ).markResolvable() } else null + if (useClasspathSnapshot) { + taskProvider.configure { it.incrementalModuleInfoProvider.disallowChanges() } + } else { + val incrementalModuleInfoProvider = IncrementalModuleInfoBuildService.registerIfAbsent( + project, + objectFactory.providerWithLazyConvention { GradleCompilerRunner.buildModulesInfo(project.gradle) }, + ) + taskProvider.configure { it.incrementalModuleInfoProvider.value(incrementalModuleInfoProvider).disallowChanges() } + } + taskProvider.configure { task -> task.incremental = propertiesProvider.incrementalJvm ?: true task.usePreciseJavaTracking = propertiesProvider.usePreciseJavaTracking ?: true