diff --git a/jps/jps-plugin/build.gradle.kts b/jps/jps-plugin/build.gradle.kts index f0fab6b303e..f23e1d74e06 100644 --- a/jps/jps-plugin/build.gradle.kts +++ b/jps/jps-plugin/build.gradle.kts @@ -106,6 +106,8 @@ tasks.compileJava { tasks.compileKotlin { kotlinOptions.jvmTarget = "1.8" + sourceCompatibility = "1.8" + targetCompatibility = "1.8" } projectTest(parallel = true) { diff --git a/libraries/kotlin.test/js-ir/it/build.gradle.kts b/libraries/kotlin.test/js-ir/it/build.gradle.kts index adac2f826ab..985b589e5ac 100644 --- a/libraries/kotlin.test/js-ir/it/build.gradle.kts +++ b/libraries/kotlin.test/js-ir/it/build.gradle.kts @@ -57,7 +57,7 @@ val compileTestDevelopmentExecutableKotlinJs = tasks.named("comp val populateNodeModules = tasks.register("populateNodeModules") { dependsOn("compileTestDevelopmentExecutableKotlinJs") dependsOn(nodeModules) - from(compileTestDevelopmentExecutableKotlinJs.map { it.destinationDirectory }) + from(compileTestDevelopmentExecutableKotlinJs.map { it.destinationDir }) from { nodeModules.get().map { diff --git a/libraries/kotlin.test/js/it/build.gradle b/libraries/kotlin.test/js/it/build.gradle index 5f74d0b3982..f453e473da3 100644 --- a/libraries/kotlin.test/js/it/build.gradle +++ b/libraries/kotlin.test/js/it/build.gradle @@ -36,7 +36,7 @@ buildDir = "$projectDir/build" tasks.register("populateNodeModules", Copy) { dependsOn(compileKotlin2Js) dependsOn(configurations.nodeModules) - from compileKotlin2Js.destinationDirectory + from compileKotlin2Js.destinationDir from { configurations.nodeModules.collect { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt index cf352c6f033..bf4bc7db647 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt @@ -84,7 +84,7 @@ class BuildCacheRelocationIT : KGPBaseTest() { testProject.subProject("libraryProject").buildGradle.modify { it.replace("/exampleapp.js", "/web/exampleapp.js") // Fix assembling the JAR from the whole buildDir - it.replace("from buildDir", "from compileKotlin2Js.destinationDirectory") + it.replace("from buildDir", "from compileKotlin2Js.destinationDir") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationAvoidanceIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationAvoidanceIT.kt index 73e08457b83..0c578e497e7 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationAvoidanceIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationAvoidanceIT.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.gradle -import org.gradle.api.logging.configuration.WarningMode import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* import org.junit.jupiter.api.DisplayName @@ -128,23 +127,14 @@ class ConfigurationAvoidanceIT : KGPBaseTest() { @DisplayName("JS early configuration resolution") @GradleTest fun testEarlyConfigurationsResolutionKotlinJs(gradleVersion: GradleVersion) { - testEarlyConfigurationsResolution( - "kotlin-js-browser-project", - gradleVersion, - kts = true, - buildOptions = defaultBuildOptions.copy( - // bug in Gradle: https://github.com/gradle/gradle/issues/15796 - warningMode = if (gradleVersion < GradleVersion.version("7.0")) WarningMode.Summary else defaultBuildOptions.warningMode - ) - ) + testEarlyConfigurationsResolution("kotlin-js-browser-project", gradleVersion, kts = true) } private fun testEarlyConfigurationsResolution( projectName: String, gradleVersion: GradleVersion, - kts: Boolean, - buildOptions: BuildOptions = defaultBuildOptions - ) = project(projectName, gradleVersion, buildOptions = buildOptions) { + kts: Boolean + ) = project(projectName, gradleVersion) { (if (kts) buildGradleKts else buildGradle).appendText( //language=Gradle """${'\n'} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt index da7a243dc2d..482114746c6 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalJavaChangeIT.kt @@ -9,7 +9,10 @@ import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.testbase.* import org.junit.jupiter.api.DisplayName import java.nio.file.Path -import kotlin.io.path.* +import kotlin.io.path.createDirectories +import kotlin.io.path.deleteExisting +import kotlin.io.path.relativeTo +import kotlin.io.path.writeText import kotlin.test.assertTrue @DisplayName("Default incremental compilation with default precise java tracking") @@ -63,7 +66,9 @@ open class IncrementalJavaChangeDefaultIT : IncrementalCompilationJavaChangesBas } build("compileKotlin", "--rerun-tasks") { assertTasksExecuted(":compileKotlin") - assertTrue(kotlinClassesDir().notExists()) + val compiledKotlinClasses = kotlinClassesDir().allFilesWithExtension("class").toList() + + assertTrue(compiledKotlinClasses.isEmpty()) } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KlibBasedMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KlibBasedMppIT.kt index 70c325e6667..375b36bf5a8 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KlibBasedMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KlibBasedMppIT.kt @@ -94,7 +94,8 @@ class KlibBasedMppIT : BaseGradleIT() { "published-producer-commonMain.klib", "published-dependency-$hostSpecificSourceSet.klib", "published-dependency-commonMain.klib" - ) + ), + isNative = true ) } @@ -317,12 +318,13 @@ class KlibBasedMppIT : BaseGradleIT() { private fun BaseGradleIT.Project.checkTaskCompileClasspath( taskPath: String, checkModulesInClasspath: List = emptyList(), - checkModulesNotInClasspath: List = emptyList() + checkModulesNotInClasspath: List = emptyList(), + isNative: Boolean = false ) { val subproject = taskPath.substringBeforeLast(":").takeIf { it.isNotEmpty() && it != taskPath } val taskName = taskPath.removePrefix(subproject.orEmpty()) - val taskClass = "org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool<*>" - val expression = """(tasks.getByName("$taskName") as $taskClass).libraries.toList()""" + val taskClass = if (isNative) "org.jetbrains.kotlin.gradle.tasks.AbstractKotlinNativeCompile<*, *>" else "AbstractCompile" + val expression = """(tasks.getByName("$taskName") as $taskClass).${if (isNative) "libraries" else "classpath"}.toList()""" checkPrintedItems(subproject, expression, checkModulesInClasspath, checkModulesNotInClasspath) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index b46615335b8..bdaf6cad180 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -1176,14 +1176,7 @@ class GeneralKotlin2JsGradlePluginIT : KGPBaseTest() { @DisplayName("nodejs up-to-date check works") @GradleTest fun testNodeJsAndYarnDownload(gradleVersion: GradleVersion) { - project( - "cleanTask", - gradleVersion, - buildOptions = defaultBuildOptions.copy( - // bug in Gradle: https://github.com/gradle/gradle/issues/15796 - warningMode = if (gradleVersion < GradleVersion.version("7.0")) WarningMode.None else defaultBuildOptions.warningMode - ) - ) { + project("cleanTask", gradleVersion) { build("checkDownloadedFolder") build("checkIfLastModifiedNotNow", "--rerun-tasks") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinSpecificDependenciesIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinSpecificDependenciesIT.kt index 90821fb308c..cdb63c59874 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinSpecificDependenciesIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinSpecificDependenciesIT.kt @@ -551,15 +551,12 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() { taskPath: String, checkModulesInClasspath: List = emptyList(), checkModulesNotInClasspath: List = emptyList(), + isNative: Boolean = false, isBuildGradleKts: Boolean = false ) { val subproject = taskPath.substringBeforeLast(":").takeIf { it.isNotEmpty() && it != taskPath } val taskName = taskPath.removePrefix(subproject.orEmpty()) - val taskClass = if (isBuildGradleKts) { - "org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool<*>" - } else { - "org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool" - } + val taskClass = if (isNative) "org.jetbrains.kotlin.gradle.tasks.AbstractKotlinNativeCompile<*, *>" else "AbstractCompile" val expression = """(tasks.getByName("$taskName") as $taskClass).${if (isNative) "libraries" else "classpath"}.toList()""" checkPrintedItems(subproject, expression, checkModulesInClasspath, checkModulesNotInClasspath, isBuildGradleKts) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/CleanDataTaskIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/CleanDataTaskIT.kt index 7228549d209..b101cde76c6 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/CleanDataTaskIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/tasks/CleanDataTaskIT.kt @@ -5,9 +5,11 @@ package org.jetbrains.kotlin.gradle.tasks -import org.gradle.api.logging.configuration.WarningMode import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.BaseGradleIT import org.jetbrains.kotlin.gradle.testbase.* +import org.jetbrains.kotlin.gradle.transformProjectWithPluginsDsl +import org.junit.Test import org.junit.jupiter.api.DisplayName @@ -17,14 +19,7 @@ class CleanDataTaskIT : KGPBaseTest() { @DisplayName("nodejs is deleted from Gradle user home") @GradleTest fun testDownloadedFolderDeletion(gradleVersion: GradleVersion) { - project( - "cleanTask", - gradleVersion, - buildOptions = defaultBuildOptions.copy( - // bug in Gradle: https://github.com/gradle/gradle/issues/15796 - warningMode = if (gradleVersion < GradleVersion.version("7.0")) WarningMode.Summary else defaultBuildOptions.warningMode - ) - ) { + project("cleanTask", gradleVersion) { build("testCleanTask") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/destinationDirReferencedDuringEvaluation/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/destinationDirReferencedDuringEvaluation/build.gradle index 77074b9bc7f..e936c4ac897 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/destinationDirReferencedDuringEvaluation/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/destinationDirReferencedDuringEvaluation/build.gradle @@ -13,7 +13,7 @@ dependencies { } // important to test that destinationDir is configured before evaluation -test.testClassesDirs = files(project.tasks.compileTestKotlin.destinationDirectory) +test.testClassesDirs = files(project.tasks.compileTestKotlin.destinationDir) test { testLogging { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-multi-modules/bottom-mpp/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-multi-modules/bottom-mpp/build.gradle index 57e009ce32f..b1381845a3f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-multi-modules/bottom-mpp/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-multi-modules/bottom-mpp/build.gradle @@ -30,7 +30,7 @@ kotlin { // Creating static library with a custom name. staticLib('customNameForiosSimLib') { outputDirectory = file("fooCustomNameForiosSimLib") // outputDir is a `val` property. - linkTask.destinationDirectory = file("fooCustomNameForiosSimLib") + linkTask.destinationDir = file("fooCustomNameForiosSimLib") } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-multi-modules/top-mpp/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-multi-modules/top-mpp/build.gradle index 3e98b33c556..1b97b6d8d80 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-multi-modules/top-mpp/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-multi-modules/top-mpp/build.gradle @@ -39,7 +39,7 @@ kotlin { // Creating static library with a custom name. staticLib('customNameForLinuxLib') { outputDirectory = file("customNameForLinuxLib") // outputDir is a `val` property. - linkTask.destinationDirectory = file("customNameForLinuxLib") + linkTask.destinationDir = file("customNameForLinuxLib") } } } @@ -50,7 +50,7 @@ kotlin { // Creating static library with a custom name. staticLib('customNameForMacosLib') { outputDirectory = file("customNameForMacosLib") // outputDir is a `val` property. - linkTask.destinationDirectory = file("customNameForMacosLib") + linkTask.destinationDir = file("customNameForMacosLib") } } } @@ -60,7 +60,7 @@ kotlin { // KT-29395 fix framework { outputDirectory = file("fooDummyiOS") // outputDir is a `val` property. - linkTask.destinationDirectory = file("fooDummyiOS") + linkTask.destinationDir = file("fooDummyiOS") } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/CompilationSpecificPluginPath.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/CompilationSpecificPluginPath.kt index c057e222135..ca3c86a0936 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/CompilationSpecificPluginPath.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/CompilationSpecificPluginPath.kt @@ -8,8 +8,12 @@ package org.jetbrains.kotlin.gradle.mpp import org.gradle.api.Project import org.gradle.api.artifacts.Configuration +import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.plugins.ExtraPropertiesExtension import org.gradle.api.provider.Provider +import org.gradle.testfixtures.ProjectBuilder +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.tasks.* import kotlin.test.* @@ -289,7 +293,7 @@ internal class CompilationSpecificPluginPath { .getByName(taskName) .let { when (it) { - is AbstractKotlinNativeCompile<*, *, *> -> it.compilerPluginClasspath + is AbstractKotlinNativeCompile<*, *> -> it.compilerPluginClasspath is AbstractKotlinCompile<*> -> it.pluginClasspath.from.single() else -> error("Unexpected task type with name $taskName. Is it kotlin compile task?") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/KpmCompilerPluginTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/KpmCompilerPluginTest.kt index d9da6ac9f03..d92ccd1b85f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/KpmCompilerPluginTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/mpp/KpmCompilerPluginTest.kt @@ -144,7 +144,7 @@ class KpmCompilerPluginTest { .let { when (it) { is AbstractKotlinCompile<*> -> it.kotlinPluginData - is AbstractKotlinNativeCompile<*, *, *> -> it.kotlinPluginData + is AbstractKotlinNativeCompile<*, *> -> it.kotlinPluginData else -> error("Unknown task type: $it") } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index 67ebf5d085a..3c42fcfad8d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -300,7 +300,7 @@ internal open class GradleCompilerRunner( task.buildHistoryFile.get().asFile, task.abiSnapshotFile.get().asFile ) - dirToModule[task.destinationDirectory.get().asFile] = module + dirToModule[task.destinationDir] = module task.javaOutputDir.orNull?.asFile?.let { dirToModule[it] = module } nameToModules.getOrPut(module.name) { HashSet() }.add(module) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt index abbe5bbda39..26d289c684f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.gradle.utils.isParentOf import org.jetbrains.kotlin.incremental.classpathAsList import org.jetbrains.kotlin.incremental.destinationAsFile import java.io.File +import java.util.concurrent.Callable import javax.inject.Inject @CacheableTask @@ -62,7 +63,7 @@ abstract class KaptGenerateStubsTask @Inject constructor( val providerFactory = kotlinCompileTask.project.providers task.useModuleDetection.value(kotlinCompileTask.useModuleDetection).disallowChanges() task.moduleName.value(kotlinCompileTask.moduleName).disallowChanges() - task.classpath.from(kotlinCompileTask.classpath) + task.classpath = task.project.files(Callable { kotlinCompileTask.classpath }) task.kotlinTaskPluginClasspath.from( providerFactory.provider { kotlinCompileTask.pluginClasspath } ) @@ -118,17 +119,16 @@ abstract class KaptGenerateStubsTask @Inject constructor( @get:Incremental abstract val additionalSources: ConfigurableFileCollection - override fun setSource(vararg source: Any) { - super.setSource(sourceRootsContainer.add(sources)) + override fun source(vararg sources: Any): SourceTask { + return super.source(sourceRootsContainer.add(sources)) } - override fun setSource(source: Any) { + override fun setSource(sources: Any) { super.setSource(sourceRootsContainer.set(sources)) } - // TODO: prevent querying destinationDirectory on configuration time private fun isSourceRootAllowed(source: File): Boolean = - !destinationDirectory.get().asFile.isParentOf(source) && + !destinationDir.isParentOf(source) && !stubsDir.asFile.get().isParentOf(source) && generatedSourcesDirs.none { it.isParentOf(source) } @@ -146,7 +146,7 @@ abstract class KaptGenerateStubsTask @Inject constructor( args.verbose = verbose.get() args.classpathAsList = this.classpath.filter { it.exists() }.toList() - args.destinationAsFile = this.destinationDirectory.get().asFile + args.destinationAsFile = this.destinationDir } @get:Internal diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/model/builder/KotlinModelBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/model/builder/KotlinModelBuilder.kt index d14226e2dae..8ffac56f408 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/model/builder/KotlinModelBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/model/builder/KotlinModelBuilder.kt @@ -90,7 +90,7 @@ class KotlinModelBuilder(private val kotlinPluginVersion: String, private val an friendSourceSets.get(), kotlinSourceSet.kotlin.srcDirs, javaSourceSet.resources.srcDirs, - destinationDirectory.get().asFile, + destinationDir, javaSourceSet.output.resourcesDir!!, createCompilerArguments() ) @@ -116,7 +116,7 @@ class KotlinModelBuilder(private val kotlinPluginVersion: String, private val an friendSourceSets.get(), sources, resources, - destinationDirectory.get().asFile, + destinationDir, compilation.output.resourcesDir, createCompilerArguments() ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt index 5a42cd404ca..aebebb4fd44 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinMultiplatformPlugin.kt @@ -175,7 +175,7 @@ open class KotlinPlatformImplementationPluginBase(platformName: String) : Kotlin val commonSources = getKotlinSourceDirectorySetSafe(commonSourceSet)!! for (platformTask in platformTasks) { - platformTask.setSource(commonSources) + platformTask.source(commonSources) platformTask.commonSourceSet.from(commonSources) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index b9964ac5314..ea0d4ffaa2e 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.isMainCompilationData +import org.jetbrains.kotlin.gradle.report.BuildMetricsReporterService import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.targets.js.ir.* @@ -64,7 +65,7 @@ val KOTLIN_DSL_NAME = "kotlin" val KOTLIN_JS_DSL_NAME = "kotlin2js" val KOTLIN_OPTIONS_DSL_NAME = "kotlinOptions" -abstract class KotlinCompilationProcessor>( +abstract class KotlinCompilationProcessor( open val kotlinCompilation: KotlinCompilationData<*> ) { abstract val kotlinTask: TaskProvider @@ -122,7 +123,7 @@ internal abstract class KotlinSourceSetProcessor>( return register(project, name) { it.description = taskDescription it.destinationDirectory.set(defaultKotlinDestinationDir) - it.classpath.from({ kotlinCompilation.compileDependencyFiles }) + it.classpath = project.files({ kotlinCompilation.compileDependencyFiles }) } } @@ -1048,7 +1049,7 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool val kotlinTask = compilation.compileKotlinTaskProvider compilation.androidVariant.forEachJavaSourceDir { sources -> kotlinTask.configure { - it.setSource(sources.dir) + it.source(sources.dir) it.dependsOn(sources) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt index db8a6e98ece..23e93c629ad 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/SubpluginEnvironment.kt @@ -2,6 +2,7 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Project import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.JavaCompile import org.jetbrains.kotlin.gradle.dsl.KotlinCompile import org.jetbrains.kotlin.gradle.logging.kotlinDebug @@ -12,7 +13,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaCompilation import org.jetbrains.kotlin.gradle.targets.js.ir.JsIrBinary import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile -import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile @@ -89,20 +89,13 @@ class SubpluginEnvironment( } } -internal fun addCompilationSourcesToExternalCompileTask( - compilation: KotlinCompilation<*>, - task: TaskProvider> -) { +internal fun addCompilationSourcesToExternalCompileTask(compilation: KotlinCompilation<*>, task: TaskProvider) { if (compilation is KotlinJvmAndroidCompilation) { - compilation.androidVariant.forEachKotlinSourceSet { sourceSet -> - task.configure { it.setSource(sourceSet.kotlin) } - } - compilation.androidVariant.forEachJavaSourceDir { sources -> - task.configure { it.setSource(sources.dir) } - } + compilation.androidVariant.forEachKotlinSourceSet { sourceSet -> task.configure { it.source(sourceSet.kotlin) } } + compilation.androidVariant.forEachJavaSourceDir { sources -> task.configure { it.source(sources.dir) } } } else { task.configure { taskInstance -> - compilation.allKotlinSourceSets.forEach { sourceSet -> taskInstance.setSource(sourceSet.kotlin) } + compilation.allKotlinSourceSets.forEach { sourceSet -> taskInstance.source(sourceSet.kotlin) } } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt index 1c4e0745359..6f492880f70 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt @@ -163,7 +163,7 @@ internal fun addSourcesToKotlinCompileTask( fun AbstractKotlinCompile<*>.configureAction() { // In this call, the super-implementation of `source` adds the directories files to the roots of the union file tree, // so it's OK to pass just the source roots. - setSource(Callable(sources)) + source(Callable(sources)) sourceFilesExtensions.addAll(sourceFileExtensions) // The `commonSourceSet` is passed to the compiler as-is, converted with toList diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt index 63e5036c039..817401e9b4b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinCompilationTaskConfigurator.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 import org.gradle.api.Project import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.compile.AbstractCompile import org.jetbrains.kotlin.gradle.plugin.Kotlin2JvmSourceSetProcessor import org.jetbrains.kotlin.gradle.plugin.KotlinNativeTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.mpp.addCommonSourcesToKotlinCompileTask @@ -56,7 +57,7 @@ open class KotlinCompilationTaskConfigurator( val commonSources = getCommonSourcesForFragmentCompilation(fragment) compileTask.configure { - it.setSource(allSources) + it.source(allSources) it.commonSources.from(commonSources) it.configure() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt index c56eac798e9..07734f958cd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt @@ -77,7 +77,7 @@ internal class DefaultLanguageSettingsBuilder : LanguageSettingsBuilder { val pluginOptionsTask = compilerPluginOptionsTask.value ?: return null return when (pluginOptionsTask) { is AbstractKotlinCompile<*> -> pluginOptionsTask.pluginOptions - is AbstractKotlinNativeCompile<*, *, *> -> pluginOptionsTask.compilerPluginOptions + is AbstractKotlinNativeCompile<*, *> -> pluginOptionsTask.compilerPluginOptions else -> error("Unexpected task: $pluginOptionsTask") }.arguments } @@ -87,7 +87,7 @@ internal class DefaultLanguageSettingsBuilder : LanguageSettingsBuilder { val pluginClasspathTask = compilerPluginOptionsTask.value ?: return null return when (pluginClasspathTask) { is AbstractKotlinCompile<*> -> pluginClasspathTask.pluginClasspath - is AbstractKotlinNativeCompile<*, *, *> -> pluginClasspathTask.compilerPluginClasspath ?: pluginClasspathTask.project.files() + is AbstractKotlinNativeCompile<*, *> -> pluginClasspathTask.compilerPluginClasspath ?: pluginClasspathTask.project.files() else -> error("Unexpected task: $pluginClasspathTask") } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt index 9211349f80e..696263c17d9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt @@ -17,6 +17,7 @@ import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.Category import org.gradle.api.file.FileCollection import org.gradle.api.specs.Spec +import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.api.tasks.compile.AbstractCompile @@ -48,7 +49,7 @@ class Android25ProjectHandler( ) { val preJavaKotlinOutput = project.files(project.provider { mutableListOf().apply { - add(kotlinTask.get().destinationDirectory.get().asFile) + add(kotlinTask.get().destinationDir) if (Kapt3GradleSubplugin.isEnabled(project)) { // Add Kapt3 output as well, since there's no SyncOutputTask with the new API val kaptClasssesDir = Kapt3GradleSubplugin.getKaptGeneratedClassesDir(project, getVariantName(variantData)) @@ -59,7 +60,7 @@ class Android25ProjectHandler( val preJavaClasspathKey = variantData.registerPreJavacGeneratedBytecode(preJavaKotlinOutput) kotlinTask.configure { kotlinTaskInstance -> - kotlinTaskInstance.classpath + kotlinTaskInstance.classpath = project.files() .from(variantData.getCompileClasspath(preJavaClasspathKey)) .from(Callable { AndroidGradleWrapper.getRuntimeJars(androidPlugin, androidExt) }) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt index 993191dcefe..29dbafe7f3f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt @@ -130,7 +130,7 @@ class AndroidSubplugin : KotlinCompilerPluginSupportPlugin { ) ) kotlinCompilation.compileKotlinTaskProvider.configure { - it.setSource(getLayoutDirectories(project, sourceSet.res.srcDirs)) + it.source(getLayoutDirectories(project, sourceSet.res.srcDirs)) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt index 01a3dce42a5..37cca755d3c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt @@ -76,9 +76,9 @@ class KotlinJsDcePlugin : Plugin { val configuration = project.configurations.getByName(kotlinCompilation.compileDependencyConfigurationName) dceTask.configure { - it.classpath.from(configuration) - it.destinationDirectory.set(it.dceOptions.outputDirectory?.let { File(it) } ?: outputDir) - it.setSource((kotlinTask.get() as Kotlin2JsCompile).outputFileProperty) + it.classpath = configuration + it.destinationDir = it.dceOptions.outputDirectory?.let { File(it) } ?: outputDir + it.source((kotlinTask.get() as Kotlin2JsCompile).outputFileProperty.get()) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt index d078b824f23..5f955e49634 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt @@ -7,9 +7,10 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.ProjectLayout +import org.gradle.api.file.FileTree import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.* +import org.gradle.internal.hash.FileHasher import org.gradle.workers.WorkerExecutor import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments @@ -25,7 +26,6 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.PRODUCTION import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.utils.getValue -import org.jetbrains.kotlin.gradle.utils.property import org.jetbrains.kotlin.gradle.utils.toHexString import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import org.jetbrains.kotlin.statistics.metrics.StringMetrics @@ -36,9 +36,8 @@ import javax.inject.Inject @CacheableTask abstract class KotlinJsIrLink @Inject constructor( - private val objectFactory: ObjectFactory, - workerExecutor: WorkerExecutor, - private val projectLayout: ProjectLayout + objectFactory: ObjectFactory, + workerExecutor: WorkerExecutor ) : Kotlin2JsCompile( KotlinJsOptionsImpl(), objectFactory, @@ -82,8 +81,8 @@ abstract class KotlinJsIrLink @Inject constructor( lateinit var mode: KotlinJsBinaryMode // Not check sources, only klib module - @get:Internal - abstract override val sources: ConfigurableFileCollection + @Internal + override fun getSource(): FileTree = super.getSource() private val buildDir = project.buildDir @@ -93,18 +92,13 @@ abstract class KotlinJsIrLink @Inject constructor( @get:PathSensitive(PathSensitivity.RELATIVE) internal abstract val entryModule: DirectoryProperty - override val destinationDirectory: DirectoryProperty - get() = objectFactory.directoryProperty().apply { - set( - destinationDirectory.flatMap { dir -> - if (kotlinOptions.outputFile == null) { - objectFactory.property(dir) - } else { - projectLayout.dir(outputFileProperty.map { it.parentFile }) - } - } - ) + override fun getDestinationDir(): File { + return if (kotlinOptions.outputFile == null) { + super.getDestinationDir() + } else { + outputFile.parentFile } + } override fun skipCondition(): Boolean { return !entryModule.get().asFile.exists() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt index 183095f792f..78a166ecaa2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.tasks.registerTask +import org.jetbrains.kotlin.gradle.utils.listProperty import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.setProperty import javax.inject.Inject @@ -136,7 +137,7 @@ constructor( binary.linkSyncTaskName ) { task -> task.from( - project.layout.file(binary.linkTask.flatMap { it.destinationDirectory.map { it.asFile } }) + project.layout.file(binary.linkTask.map { it.destinationDir }) ) task.from(project.tasks.named(compilation.processResourcesTaskName)) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt index f1cd3eec953..bbe22471a55 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt @@ -97,9 +97,9 @@ open class KotlinJsIrTargetConfigurator() : compilation.compileKotlinTaskProvider.configure { task -> val outputFilePath = outputFile ?: if (produceUnzippedKlib) { - task.destinationDirectory.get().asFile.absoluteFile.normalize().absolutePath + task.destinationDir.absoluteFile.normalize().absolutePath } else { - File(task.destinationDirectory.get().asFile, "$baseName.$KLIB_TYPE").absoluteFile.normalize().absolutePath + File(task.destinationDir, "$baseName.$KLIB_TYPE").absoluteFile.normalize().absolutePath } outputFile = outputFilePath @@ -112,7 +112,7 @@ open class KotlinJsIrTargetConfigurator() : "To fix this, consider using the default outputFile location instead of providing it explicitly." ) - task.destinationDirectory.set(taskOutputDir) + task.destinationDir = taskOutputDir } val klibModuleName = target.project.klibModuleName(baseName) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index de3e29fedfc..8fef0c44934 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackDevtool +import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackMajorVersion import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackMajorVersion.Companion.choose import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.registerTask @@ -265,13 +266,9 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : } entryProperty.set( - project.layout.file( - actualDceTaskProvider - .map { - it.destinationDirectory.file(compilation.compileKotlinTask.outputFileProperty.get().name) - } - .flatMap { it.map { it.asFile } } - ) + project.layout.file(actualDceTaskProvider.map { + it.destinationDir.resolve(compilation.compileKotlinTask.outputFileProperty.get().name) + }) ) resolveFromModulesFirst = true @@ -308,14 +305,12 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : it.kotlinFilesOnly = true - it.classpath.from(project.configurations.getByName(compilation.runtimeDependencyConfigurationName)) - it.destinationDirectory.set( - it.dceOptions.outputDirectory?.let { File(it) } - ?: compilation.npmProject.dir.resolve(if (dev) DCE_DEV_DIR else DCE_DIR) - ) + it.classpath = project.configurations.getByName(compilation.runtimeDependencyConfigurationName) + it.destinationDir = it.dceOptions.outputDirectory?.let { File(it) } + ?: compilation.npmProject.dir.resolve(if (dev) DCE_DEV_DIR else DCE_DIR) it.defaultCompilerClasspath.setFrom(project.configurations.named(COMPILER_CLASSPATH_CONFIGURATION_NAME)) - it.setSource(kotlinTask.map { it.outputFileProperty }) + it.source(kotlinTask.map { it.outputFileProperty.get() }) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt index 985f9f5a601..e0c80c9c3ff 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt @@ -224,29 +224,23 @@ constructor( compilation.platformType } - /** - * [forNpmDependencies] is used to avoid querying [destinationDirectory] before task execution. - * Otherwise, Gradle will fail the build. - */ - private fun createWebpackConfig(forNpmDependencies: Boolean = false) = KotlinWebpackConfig( - mode = mode, - entry = if (forNpmDependencies) null else entry, - reportEvaluatedConfigFile = if (!forNpmDependencies && saveEvaluatedConfigFile) evaluatedConfigFile else null, - output = output, - outputPath = if (forNpmDependencies) null else destinationDirectory, - outputFileName = outputFileName, - configDirectory = configDirectory, - bundleAnalyzerReportDir = if (!forNpmDependencies && report) reportDir else null, - cssSupport = cssSupport, - devServer = devServer, - devtool = devtool, - sourceMaps = sourceMaps, - resolveFromModulesFirst = resolveFromModulesFirst, - webpackMajorVersion = webpackMajorVersion - ) - private fun createRunner(): KotlinWebpackRunner { - val config = createWebpackConfig() + val config = KotlinWebpackConfig( + mode = mode, + entry = entry, + reportEvaluatedConfigFile = if (saveEvaluatedConfigFile) evaluatedConfigFile else null, + output = output, + outputPath = destinationDirectory, + outputFileName = outputFileName, + configDirectory = configDirectory, + bundleAnalyzerReportDir = if (report) reportDir else null, + cssSupport = cssSupport, + devServer = devServer, + devtool = devtool, + sourceMaps = sourceMaps, + resolveFromModulesFirst = resolveFromModulesFirst, + webpackMajorVersion = webpackMajorVersion + ) if (platformType == KotlinPlatformType.wasm) { config.experiments += listOf( @@ -274,7 +268,7 @@ constructor( @Internal get() = true override val requiredNpmDependencies: Set - @Internal get() = createWebpackConfig(true).getRequiredDependencies(versions) + @Internal get() = createRunner().config.getRequiredDependencies(versions) private val isContinuous = project.gradle.startParameter.isContinuous diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilation.kt index 4d053d35645..3deadf18029 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilation.kt @@ -6,11 +6,13 @@ @file:Suppress("PackageDirectoryMismatch") // Old package for compatibility package org.jetbrains.kotlin.gradle.plugin.mpp +import org.gradle.api.file.FileCollection import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.compile.JavaCompile -import org.gradle.kotlin.dsl.named import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationOutput import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile @@ -43,9 +45,7 @@ class KotlinWithJavaCompilation( fun source(javaSourceSet: SourceSet) { with(target.project) { afterEvaluate { - tasks.named>(compileKotlinTaskName).configure { - it.setSource(javaSourceSet.java) - } + (tasks.getByName(compileKotlinTaskName) as AbstractKotlinCompile<*>).source(javaSourceSet.java) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt index 1a5135c37a8..9adacce56d8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt @@ -80,7 +80,7 @@ internal fun addSourcesToKotlinNativeCompileTask( addAsCommonSources: Lazy ) { project.tasks.withType(KotlinNativeCompile::class.java).matching { it.name == taskName }.configureEach { task -> - task.setSource(sourceFiles) + task.source(sourceFiles) task.commonSources.from(project.files(Callable { if (addAsCommonSources.value) sourceFiles() else emptyList() })) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index 003f72fc346..ee8b73a0179 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.apple.registerEmbedAndSignAppleFra import org.jetbrains.kotlin.gradle.plugin.mpp.isMain import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KpmAwareTargetConfigurator +import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled import org.jetbrains.kotlin.gradle.targets.native.* import org.jetbrains.kotlin.gradle.targets.native.internal.commonizeCInteropTask @@ -62,6 +63,7 @@ open class KotlinNativeTargetConfigurator : AbstractKotl it.group = BasePlugin.BUILD_GROUP it.description = "Links ${binary.outputKind.description} '${binary.name}' for a target '${target.name}'." it.enabled = binary.konanTarget.enabledOnCurrentHost + it.destinationDir = binary.outputDirectory } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt index 5d84aaa967d..f5220719897 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt @@ -220,7 +220,7 @@ open class KotlinCocoapodsPlugin : Plugin { check(targets.size == 1) { "The project has more than one target for the requested platform: `${requestedPlatform.visibleName}`" } val frameworkLinkTask = targets.single().binaries.getFramework(POD_FRAMEWORK_PREFIX, requestedBuildType).linkTaskProvider - project.createSyncFrameworkTask(frameworkLinkTask.flatMap { it.destinationDirectory.map { it.asFile }}, frameworkLinkTask) + project.createSyncFrameworkTask(frameworkLinkTask.map { it.destinationDir }, frameworkLinkTask) } private fun createSyncTask( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 329e66dd37a..1c0380f9ba7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -15,13 +15,11 @@ import org.gradle.api.artifacts.component.ModuleComponentSelector import org.gradle.api.artifacts.result.DependencyResult import org.gradle.api.artifacts.result.ResolvedDependencyResult import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.FileCollection import org.gradle.api.file.FileTree import org.gradle.api.provider.Provider import org.gradle.api.tasks.* -import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.cli.common.arguments.CommonToolArguments +import org.gradle.api.tasks.compile.AbstractCompile import org.jetbrains.kotlin.compilerRunner.* import org.jetbrains.kotlin.compilerRunner.KotlinNativeCInteropRunner.Companion.run import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions @@ -128,11 +126,7 @@ private fun Collection.filterKlibsPassedToCompiler(): List = filter } // endregion -abstract class AbstractKotlinNativeCompile< - T : KotlinCommonToolOptions, - K : KotlinNativeCompilationData<*>, - M : CommonToolArguments - > : AbstractKotlinCompileTool() { +abstract class AbstractKotlinNativeCompile> : AbstractCompile() { @get:Internal abstract val compilation: K @@ -157,6 +151,15 @@ abstract class AbstractKotlinNativeCompile< compilation.konanTarget } + // Inputs and outputs + @IgnoreEmptyDirectories + @InputFiles + @SkipWhenEmpty + @PathSensitive(PathSensitivity.RELATIVE) + override fun getSource(): FileTree { + return super.getSource() + } + @get:Classpath val libraries: FileCollection by project.provider { // Avoid resolving these dependencies during task graph construction when we can't build the target: @@ -171,8 +174,10 @@ abstract class AbstractKotlinNativeCompile< } @Deprecated("For native tasks use 'libraries' instead", ReplaceWith("libraries")) - override val classpath: ConfigurableFileCollection - get() = objects.fileCollection().from(libraries) + override fun getClasspath(): FileCollection = libraries + override fun setClasspath(configuration: FileCollection?) { + throw UnsupportedOperationException("Setting classpath directly is unsupported.") + } @get:Input val target: String by project.provider { compilation.konanTarget.name } @@ -207,24 +212,23 @@ abstract class AbstractKotlinNativeCompile< internal val useEmbeddableCompilerJar: Boolean get() = project.nativeUseEmbeddableCompilerJar - @get:Internal - open val outputFile: Provider - get() = destinationDirectory.map { - val prefix = outputKind.prefix(konanTarget) - val suffix = outputKind.suffix(konanTarget) - val filename = "$prefix${baseName}$suffix".let { - when { - outputKind == FRAMEWORK -> - it.asValidFrameworkName() - outputKind in listOf(STATIC, DYNAMIC) || outputKind == PROGRAM && konanTarget == KonanTarget.WASM32 -> - it.replace('-', '_') - else -> it - } + @Internal + open val outputFile: Provider = project.provider { + val prefix = outputKind.prefix(konanTarget) + val suffix = outputKind.suffix(konanTarget) + val filename = "$prefix${baseName}$suffix".let { + when { + outputKind == FRAMEWORK -> + it.asValidFrameworkName() + outputKind in listOf(STATIC, DYNAMIC) || outputKind == PROGRAM && konanTarget == KonanTarget.WASM32 -> + it.replace('-', '_') + else -> it } - - it.file(filename).asFile } + destinationDir.resolve(filename) + } + // endregion @Internal val compilerPluginOptions = CompilerPluginOptions() @@ -246,12 +250,12 @@ abstract class AbstractKotlinNativeCompile< // Used by IDE via reflection. @get:Internal - override val serializedCompilerArguments: List + val serializedCompilerArguments: List get() = buildCommonArgs() // Used by IDE via reflection. @get:Internal - override val defaultSerializedCompilerArguments: List + val defaultSerializedCompilerArguments: List get() = buildCommonArgs(true) private val languageSettingsBuilder by project.provider { @@ -297,20 +301,17 @@ abstract class AbstractKotlinNativeCompile< } } -// Remove it once actual K2NativeCompilerArguments will be available without 'kotlin.native.enabled = true' flag -class StubK2NativeCompilerArguments : CommonCompilerArguments() - /** * A task producing a klibrary from a compilation. */ @CacheableTask -abstract class KotlinNativeCompile +open class KotlinNativeCompile @Inject constructor( @Internal @Transient // can't be serialized for Gradle configuration cache final override val compilation: KotlinNativeCompilationData<*> -) : AbstractKotlinNativeCompile, StubK2NativeCompilerArguments>(), +) : AbstractKotlinNativeCompile>(), KotlinCompile { @get:Input @@ -394,14 +395,6 @@ constructor( } // endregion. - override fun createCompilerArgs(): StubK2NativeCompilerArguments = StubK2NativeCompilerArguments() - - override fun setupCompilerArgs( - args: StubK2NativeCompilerArguments, - defaultsOnly: Boolean, - ignoreClasspathResolutionErrors: Boolean - ) = Unit - @TaskAction fun compile() { val output = outputFile.get() @@ -447,7 +440,7 @@ constructor( shortModuleName, friendModule, sharedCompilationData, - sources.asFileTree, + source, commonSourcesTree ) @@ -459,12 +452,12 @@ constructor( * A task producing a final binary from a compilation. */ @CacheableTask -abstract class KotlinNativeLink +open class KotlinNativeLink @Inject constructor( @Internal val binary: NativeBinary -) : AbstractKotlinNativeCompile() { +) : AbstractKotlinNativeCompile() { @get:Internal final override val compilation: KotlinNativeCompilation get() = binary.compilation @@ -479,13 +472,19 @@ constructor( @Internal // Taken into account by getSources(). val intermediateLibrary: Provider = project.provider { compilation.compileKotlinTask.outputFile.get() } - override val sources: ConfigurableFileCollection = objects - .fileCollection() - .from(intermediateLibrary) - .apply { disallowChanges() } + @IgnoreEmptyDirectories + @InputFiles + @SkipWhenEmpty + override fun getSource(): FileTree = + objects.fileCollection().from(intermediateLibrary).asFileTree - override val destinationDirectory: DirectoryProperty = objects.directoryProperty().apply { - set(binary.outputDirectory) + @OutputDirectory + override fun getDestinationDir(): File { + return binary.outputDirectory + } + + override fun setDestinationDir(destinationDir: File) { + binary.outputDirectory = destinationDir } override val outputKind: CompilerOutputKind @@ -573,14 +572,6 @@ constructor( project.configurations.getByName(compilation.apiConfigurationName).files.filterKlibsPassedToCompiler() } - override fun createCompilerArgs(): StubK2NativeCompilerArguments = StubK2NativeCompilerArguments() - - override fun setupCompilerArgs( - args: StubK2NativeCompilerArguments, - defaultsOnly: Boolean, - ignoreClasspathResolutionErrors: Boolean - ) = Unit - private fun validatedExportedLibraries() { val exportConfiguration = exportLibraries as? Configuration ?: return val apiFiles = apiFilesProvider.get() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt index 07afea53b22..854f6a8790d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinCompileCommon.kt @@ -102,7 +102,7 @@ abstract class KotlinCompileCommon @Inject constructor( K2MetadataCompilerArguments() override fun getSourceRoots(): SourceRoots = - SourceRoots.KotlinOnly.create(sources, sourceFilesExtensions.get()) + SourceRoots.KotlinOnly.create(getSource(), sourceFilesExtensions.get()) override fun setupCompilerArgs(args: K2MetadataCompilerArguments, defaultsOnly: Boolean, ignoreClasspathResolutionErrors: Boolean) { args.apply { fillDefaultValues() } @@ -120,7 +120,7 @@ abstract class KotlinCompileCommon @Inject constructor( with(args) { classpath = classpathList.joinToString(File.pathSeparator) - destination = destinationDirectory.get().asFile.canonicalPath + destination = destinationDir.canonicalPath friendPaths = this@KotlinCompileCommon.friendPaths.files.map { it.absolutePath }.toTypedArray() refinesPaths = refinesMetadataPaths.map { it.absolutePath }.toTypedArray() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt index 60fe655b2a4..ed41eb91e53 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt @@ -16,11 +16,14 @@ package org.jetbrains.kotlin.gradle.tasks +import org.gradle.api.file.FileCollection +import org.gradle.api.file.FileTree import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction import org.gradle.work.ChangeType +import org.gradle.work.Incremental import org.gradle.work.InputChanges import org.jetbrains.kotlin.cli.common.arguments.DevModeOverwritingStrategies import org.jetbrains.kotlin.cli.common.arguments.K2JSDceArguments @@ -70,6 +73,11 @@ abstract class KotlinJsDce : AbstractKotlinCompileTool(), Kotl @Input var jvmArgs = mutableListOf() + @Incremental + override fun getClasspath(): FileCollection { + return super.getClasspath() + } + private val buildDir by lazy { project.buildDir } @@ -93,12 +101,13 @@ abstract class KotlinJsDce : AbstractKotlinCompileTool(), Kotl .filter { it.changeType == ChangeType.MODIFIED || it.changeType == ChangeType.ADDED } .map { it.file } } else { - classpath.asFileTree.files + classpath } - // TODO: use PatternFilterable here! - val inputFiles = sources.asFileTree.files.plus(classpathFiles) + val inputFiles = (listOf(source) + classpathFiles .filter { !kotlinFilesOnly || isDceCandidate(it) } - .map { it.path } + .map { objects.fileCollection().from(it).asFileTree }) + .reduce(FileTree::plus) + .files.map { it.path } val outputDirArgs = arrayOf("-output-dir", destinationDirectory.get().asFile.path) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/SourceRoots.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/SourceRoots.kt index 1c7d7076c02..59cf73033bb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/SourceRoots.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/SourceRoots.kt @@ -30,7 +30,7 @@ internal sealed class SourceRoots(val kotlinSourceFiles: FileCollection) { companion object { fun create( - taskSource: FileCollection, + taskSource: FileTree, sourceRoots: FilteringSourceRootsContainer, sourceFilesExtensions: List ): ForJvm { @@ -58,7 +58,7 @@ internal sealed class SourceRoots(val kotlinSourceFiles: FileCollection) { class KotlinOnly(kotlinSourceFiles: FileCollection) : SourceRoots(kotlinSourceFiles) { companion object { fun create( - taskSource: FileCollection, + taskSource: FileTree, sourceFilesExtensions: List ) = KotlinOnly( taskSource.filter { it.isKotlinFile(sourceFilesExtensions) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index f9d73cbc00b..43c5bfbfdb4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.gradle.tasks -import org.gradle.api.DefaultTask import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.Task @@ -14,6 +13,7 @@ import org.gradle.api.file.* import org.gradle.api.invocation.Gradle import org.gradle.api.logging.Logger import org.gradle.api.model.ObjectFactory +import org.gradle.api.model.ReplacedBy import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider @@ -22,7 +22,6 @@ import org.gradle.api.services.BuildServiceParameters import org.gradle.api.tasks.* import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.JavaCompile -import org.gradle.api.tasks.util.PatternFilterable import org.gradle.work.ChangeType import org.gradle.work.Incremental import org.gradle.work.InputChanges @@ -78,40 +77,26 @@ const val USING_JS_INCREMENTAL_COMPILATION_MESSAGE = "Using Kotlin/JS incrementa const val USING_JS_IR_BACKEND_MESSAGE = "Using Kotlin/JS IR backend" abstract class AbstractKotlinCompileTool - : DefaultTask(), - //PatternFilterable, + : AbstractCompile(), CompilerArgumentAwareWithInput, TaskWithLocalState { + @ReplacedBy("stableSources") + override fun getSource() = super.getSource() + @get:InputFiles @get:SkipWhenEmpty @get:IgnoreEmptyDirectories @get:PathSensitive(PathSensitivity.RELATIVE) - abstract val sources: ConfigurableFileCollection + internal val stableSources: FileCollection = project.files( + { source } + ) - /** - * Sets the source for this task. - * The given source object is evaluated as per [org.gradle.api.Project.files]. - */ - open fun setSource(source: Any) { - sources.from(source) + @Incremental + override fun getClasspath(): FileCollection { + return super.getClasspath() } - /** - * Sets the source for this task. - * The given source object is evaluated as per [org.gradle.api.Project.files]. - */ - open fun setSource(vararg source: Any) { - sources.from(source) - } - - @get:Classpath - @get:Incremental - abstract val classpath: ConfigurableFileCollection - - @get:OutputDirectory - abstract val destinationDirectory: DirectoryProperty - @get:Internal override val metrics: Property = project.objects .property(BuildMetricsReporterImpl()) @@ -418,7 +403,7 @@ abstract class AbstractKotlinCompile : AbstractKotl @get:Internal protected open val incrementalProps: List get() = listOfNotNull( - sources, + stableSources, classpath, commonSourceSet ) @@ -523,7 +508,7 @@ class KotlinJvmCompilerArgumentsProvider val moduleName: String = taskProvider.moduleName.get() val friendPaths: FileCollection = taskProvider.friendPaths val compileClasspath: Iterable = taskProvider.classpath - val destinationDir: File = taskProvider.destinationDirectory.get().asFile + val destinationDir: File = taskProvider.destinationDir internal val kotlinOptions: List = listOfNotNull( taskProvider.parentKotlinOptionsImpl.orNull as? KotlinJvmOptionsImpl, taskProvider.kotlinOptions as KotlinJvmOptionsImpl @@ -643,7 +628,7 @@ abstract class KotlinCompile @Inject constructor( private val jvmSourceRoots by project.provider { // serialize in the task state for configuration caching; avoid building anew in task execution, as it may access the project model - SourceRoots.ForJvm.create(sources, sourceRootsContainer, sourceFilesExtensions.get()) + SourceRoots.ForJvm.create(source, sourceRootsContainer, sourceFilesExtensions.get()) } /** A package prefix that is used for locating Java sources in a directory structure with non-full-depth packages. @@ -661,8 +646,10 @@ abstract class KotlinCompile @Inject constructor( logger.kotlinDebug { "Set $this.usePreciseJavaTracking=$value" } } - @get:Internal // To support compile avoidance (ClasspathSnapshotProperties.classpathSnapshot will be used as input instead) - override abstract val classpath: ConfigurableFileCollection + @Internal // To support compile avoidance (ClasspathSnapshotProperties.classpathSnapshot will be used as input instead) + override fun getClasspath(): FileCollection { + return super.getClasspath() + } @get:Input abstract val useKotlinAbiSnapshot: Property @@ -691,7 +678,7 @@ abstract class KotlinCompile @Inject constructor( } override val incrementalProps: List - get() = listOf(sources, commonSourceSet, classpathSnapshotProperties.classpath, classpathSnapshotProperties.classpathSnapshot) + get() = listOf(stableSources, commonSourceSet, classpathSnapshotProperties.classpath, classpathSnapshotProperties.classpathSnapshot) // Exclude classpathSnapshotDir from TaskOutputsBackup (see TaskOutputsBackup's kdoc for more info). */ override val taskOutputsBackupExcludes: List @@ -872,15 +859,15 @@ abstract class KotlinCompile @Inject constructor( } // override setSource to track source directory sets and files (for generated android folders) - override fun setSource(source: Any) { - sourceRootsContainer.set(source) - super.setSource(source) + override fun setSource(sources: Any) { + sourceRootsContainer.set(sources) + super.setSource(sources) } // override source to track source directory sets and files (for generated android folders) - override fun setSource(vararg source: Any) { - sourceRootsContainer.add(*source) - super.setSource(*source) + override fun source(vararg sources: Any): SourceTask { + sourceRootsContainer.add(*sources) + return super.source(*sources) } private fun getClasspathChanges(inputChanges: InputChanges): ClasspathChanges = when { @@ -1031,7 +1018,7 @@ abstract class Kotlin2JsCompile @Inject constructor( (kotlinOptions as KotlinJsOptionsImpl).updateArguments(args) } - override fun getSourceRoots() = SourceRoots.KotlinOnly.create(sources, sourceFilesExtensions.get()) + override fun getSourceRoots() = SourceRoots.KotlinOnly.create(getSource(), sourceFilesExtensions.get()) @get:InputFiles @get:IgnoreEmptyDirectories @@ -1128,7 +1115,7 @@ abstract class Kotlin2JsCompile @Inject constructor( sourceRoots as SourceRoots.KotlinOnly logger.debug("Calling compiler") - //destinationDir.mkdirs() + destinationDir.mkdirs() if (kotlinOptions.isIrBackendEnabled()) { logger.info(USING_JS_IR_BACKEND_MESSAGE)