diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/BrokenLazyConfigurationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/BrokenLazyConfigurationIT.kt index 931a5230964..dc91057ded8 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/BrokenLazyConfigurationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/BrokenLazyConfigurationIT.kt @@ -7,13 +7,11 @@ package org.jetbrains.kotlin.gradle.mpp import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* -import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.condition.OS import kotlin.io.path.absolutePathString import kotlin.io.path.appendText import kotlin.io.path.readText -import kotlin.test.assertEquals @DisplayName("Broken task configuration avoidance doesn't lead to build failures at least with simple setups") class BrokenLazyConfigurationIT : KGPBaseTest() { @@ -78,7 +76,6 @@ class BrokenLazyConfigurationIT : KGPBaseTest() { } } - @Disabled @MppGradlePluginTests @GradleTest @DisplayName("Changing build directory after task configuration doesn't lead to failures") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index f62f6ad1fbb..b63b2fd65a2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -14,6 +14,7 @@ import org.gradle.api.artifacts.Dependency import org.gradle.api.attributes.Category import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE +import org.gradle.api.file.DirectoryProperty import org.gradle.api.internal.plugins.DefaultArtifactPublicationSet import org.gradle.api.plugins.BasePlugin import org.gradle.api.provider.Provider @@ -135,7 +136,7 @@ open class KotlinNativeTargetConfigurator : AbstractKotl ) val interopTask = registerTask(interop.interopProcessingTaskName, listOf(params)) { - it.destinationDir = provider { klibOutputDirectory(compilationInfo).resolve("cinterop") } + it.destinationDir = klibOutputDirectory(compilationInfo).dir("cinterop").map { it.asFile } it.group = INTEROP_GROUP it.description = "Generates Kotlin/Native interop library '${interop.name}' " + "for compilation '${compilation.compilationName}'" + @@ -390,7 +391,7 @@ open class KotlinNativeTargetConfigurator : AbstractKotl "compilation in target '${compilationInfo.targetDisambiguationClassifier}'." it.enabled = konanTarget.enabledOnCurrentHost - it.destinationDirectory.set(project.klibOutputDirectory(compilationInfo).resolve("klib")) + it.destinationDirectory.set(project.klibOutputDirectory(compilationInfo).dir("klib")) val propertiesProvider = PropertiesProvider(project) if (propertiesProvider.useK2 == true) { it.compilerOptions.useK2.set(true) @@ -443,9 +444,11 @@ open class KotlinNativeTargetConfigurator : AbstractKotl private fun Project.klibOutputDirectory( compilation: KotlinCompilationInfo, - ): File { + ): DirectoryProperty { val targetSubDirectory = compilation.targetDisambiguationClassifier?.let { "$it/" }.orEmpty() - return buildDir.resolve("classes/kotlin/$targetSubDirectory${compilation.compilationName}") + return project.objects.directoryProperty().value( + layout.buildDirectory.dir("classes/kotlin/$targetSubDirectory${compilation.compilationName}") + ) } private fun addCompilerPlugins(compilation: AbstractKotlinNativeCompilation) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/AbstractKotlinCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/AbstractKotlinCompile.kt index 9e7ecb74c4a..5df9d970f56 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/AbstractKotlinCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/AbstractKotlinCompile.kt @@ -5,10 +5,7 @@ package org.jetbrains.kotlin.gradle.tasks -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.FileCollection -import org.gradle.api.file.FileSystemOperations +import org.gradle.api.file.* import org.gradle.api.logging.Logging import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property @@ -51,7 +48,7 @@ import org.jetbrains.kotlin.gradle.tasks.cleanOutputsAndLocalState as cleanOutpu @DisableCachingByDefault(because = "Abstract super-class, not to be instantiated directly") abstract class AbstractKotlinCompile @Inject constructor( objectFactory: ObjectFactory, - workerExecutor: WorkerExecutor + workerExecutor: WorkerExecutor, ) : AbstractKotlinCompileTool(objectFactory), CompileUsingKotlinDaemonWithNormalization, UsesBuildMetricsService, @@ -68,7 +65,8 @@ abstract class AbstractKotlinCompile @Inject constr cacheOnlyIfEnabledForKotlin() } - private val layout = project.layout + @get:Inject + internal abstract val projectLayout: ProjectLayout @get:Inject internal abstract val fileSystemOperations: FileSystemOperations @@ -257,8 +255,8 @@ abstract class AbstractKotlinCompile @Inject constr buildMetrics.measure(GradleBuildTime.BACKUP_OUTPUT) { TaskOutputsBackup( fileSystemOperations, - layout.buildDirectory, - layout.buildDirectory.dir("snapshot/kotlin/$name"), + projectLayout.buildDirectory, + projectLayout.buildDirectory.dir("snapshot/kotlin/$name"), outputsToRestore = allOutputFiles() - taskOutputsBackupExcludes.get(), logger ).also { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt index 116ee64a349..38a64e2762d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/Kotlin2JsCompile.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.gradle.targets.js.ir.PRODUCE_JS import org.jetbrains.kotlin.gradle.targets.js.ir.PRODUCE_UNZIPPED_KLIB import org.jetbrains.kotlin.gradle.targets.js.ir.PRODUCE_ZIPPED_KLIB import org.jetbrains.kotlin.gradle.tasks.internal.KotlinJsOptionsCompat +import org.jetbrains.kotlin.gradle.utils.getFile import org.jetbrains.kotlin.gradle.utils.isParentOf import org.jetbrains.kotlin.gradle.utils.newInstance import org.jetbrains.kotlin.gradle.utils.toPathsArray @@ -54,7 +55,7 @@ import javax.inject.Inject abstract class Kotlin2JsCompile @Inject constructor( override val compilerOptions: KotlinJsCompilerOptions, objectFactory: ObjectFactory, - workerExecutor: WorkerExecutor + workerExecutor: WorkerExecutor, ) : AbstractKotlinCompile(objectFactory, workerExecutor), KotlinCompilationTask, UsesLibraryFilterCachingService, @@ -329,7 +330,7 @@ abstract class Kotlin2JsCompile @Inject constructor( ClasspathChanges.NotAvailableForJSCompiler, taskBuildCacheableOutputDirectory.get().asFile, rootProjectDir = rootProjectDir, - buildDir = buildDir, + buildDir = projectLayout.buildDirectory.getFile(), multiModuleICSettings = multiModuleICSettings, preciseCompilationResultsBackup = preciseCompilationResultsBackup.get(), keepIncrementalCompilationCachesInMemory = keepIncrementalCompilationCachesInMemory.get(), @@ -353,7 +354,6 @@ abstract class Kotlin2JsCompile @Inject constructor( } private val rootProjectDir = project.rootDir - private val buildDir = project.buildDir private fun validateOutputDirectory() { val outputFile = outputFileProperty.get() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt index 29d74d9a6cc..7eb04728035 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompile.kt @@ -57,7 +57,7 @@ import javax.inject.Inject abstract class KotlinCompile @Inject constructor( final override val compilerOptions: KotlinJvmCompilerOptions, workerExecutor: WorkerExecutor, - objectFactory: ObjectFactory + objectFactory: ObjectFactory, ) : AbstractKotlinCompile(objectFactory, workerExecutor), K2MultiplatformCompilationTask, @Suppress("TYPEALIAS_EXPANSION_DEPRECATION") KotlinJvmCompileDsl { @@ -301,7 +301,6 @@ abstract class KotlinCompile @Inject constructor( } private val projectRootDir = project.rootDir - private val buildDir = project.buildDir override fun callCompilerAsync( args: K2JVMCompilerArguments, @@ -313,8 +312,8 @@ abstract class KotlinCompile @Inject constructor( val gradlePrintingMessageCollector = GradlePrintingMessageCollector(logger, args.allWarningsAsErrors) val gradleMessageCollector = GradleErrorMessageCollector( - gradlePrintingMessageCollector, kotlinPluginVersion = getKotlinPluginVersion(logger) - ) + gradlePrintingMessageCollector, kotlinPluginVersion = getKotlinPluginVersion(logger) + ) val outputItemCollector = OutputItemsCollectorImpl() val compilerRunner = compilerRunner.get() @@ -325,7 +324,7 @@ abstract class KotlinCompile @Inject constructor( classpathChanges = getClasspathChanges(inputChanges), workingDir = taskBuildCacheableOutputDirectory.get().asFile, rootProjectDir = projectRootDir, - buildDir = buildDir, + buildDir = projectLayout.buildDirectory.getFile(), usePreciseJavaTracking = usePreciseJavaTracking, disableMultiModuleIC = disableMultiModuleIC, multiModuleICSettings = multiModuleICSettings, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/TestReportService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/TestReportService.kt index 483f63cfd75..98afee5c417 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/TestReportService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/TestReportService.kt @@ -117,7 +117,7 @@ internal abstract class TestReportService : BuildService - spec.parameters.testTasksStateFile.set(project.buildDir.resolve("test-results/kotlin-test-tasks-state.bin")) + spec.parameters.testTasksStateFile.set(project.layout.buildDirectory.file("test-results/kotlin-test-tasks-state.bin")) }.also { serviceProvider -> SingleActionPerProject.run(project, UsesTestReportService::class.java.name) { project.tasks.withType().configureEach { task ->