diff --git a/buildSrc/src/main/kotlin/CommonUtil.kt b/buildSrc/src/main/kotlin/CommonUtil.kt index 8cdd65fb057..2c727c5afff 100644 --- a/buildSrc/src/main/kotlin/CommonUtil.kt +++ b/buildSrc/src/main/kotlin/CommonUtil.kt @@ -12,11 +12,14 @@ import org.gradle.api.tasks.SourceSetContainer import org.gradle.api.tasks.SourceSetOutput import org.gradle.kotlin.dsl.creating import org.gradle.kotlin.dsl.extra +import org.gradle.kotlin.dsl.registering import org.gradle.kotlin.dsl.the import java.io.File import java.util.concurrent.Callable -inline fun Project.task(noinline configuration: T.() -> Unit) = tasks.creating(T::class, configuration) +inline fun Project.task(noinline configuration: T.() -> Unit) = tasks.registering(T::class, configuration) + +inline fun Project.eagerTask(noinline configuration: T.() -> Unit) = tasks.creating(T::class, configuration) fun Project.callGroovy(name: String, vararg args: Any?): Any? { return (property(name) as Closure<*>).call(*args) diff --git a/buildSrc/src/main/kotlin/SmartJavaExec.kt b/buildSrc/src/main/kotlin/SmartJavaExec.kt index 58f92108ab3..051734c1de6 100644 --- a/buildSrc/src/main/kotlin/SmartJavaExec.kt +++ b/buildSrc/src/main/kotlin/SmartJavaExec.kt @@ -1,6 +1,7 @@ import org.gradle.api.Project import org.gradle.api.tasks.JavaExec import org.gradle.jvm.tasks.Jar +import org.gradle.kotlin.dsl.creating import org.gradle.kotlin.dsl.task /* @@ -8,7 +9,8 @@ import org.gradle.kotlin.dsl.task * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -fun Project.smartJavaExec(configure: JavaExec.() -> Unit) = task { +// creating class eagerly here: using register causes problems due to quite complicated relationships between these tasks +fun Project.smartJavaExec(configure: JavaExec.() -> Unit) = tasks.creating(JavaExec::class) { configure() passClasspathInJar() } diff --git a/buildSrc/src/main/kotlin/instrument.kt b/buildSrc/src/main/kotlin/instrument.kt index fc49ab87821..35f85f27ebd 100644 --- a/buildSrc/src/main/kotlin/instrument.kt +++ b/buildSrc/src/main/kotlin/instrument.kt @@ -68,16 +68,15 @@ fun Project.configureFormInstrumentation() { val instrumentedClassesDir = File(project.buildDir, "classes/${sourceSetParam.name}-instrumented") (sourceSetParam.output.classesDirs as ConfigurableFileCollection).setFrom(instrumentedClassesDir) val instrumentTask = - project.tasks.create(sourceSetParam.getTaskName("instrument", "classes"), IntelliJInstrumentCodeTask::class.java) - instrumentTask.apply { - dependsOn(sourceSetParam.classesTaskName).onlyIf { !classesDirsCopy.isEmpty } - sourceSet = sourceSetParam - instrumentationClasspath = instrumentationClasspathCfg - originalClassesDirs = classesDirsCopy - output = instrumentedClassesDir - } + project.tasks.register(sourceSetParam.getTaskName("instrument", "classes"), IntelliJInstrumentCodeTask::class.java) { + dependsOn(sourceSetParam.classesTaskName).onlyIf { !classesDirsCopy.isEmpty } + sourceSet = sourceSetParam + instrumentationClasspath = instrumentationClasspathCfg + originalClassesDirs = classesDirsCopy + output = instrumentedClassesDir + outputs.dir(instrumentedClassesDir) + } - instrumentTask.outputs.dir(instrumentedClassesDir) // Ensure that our task is invoked when the source set is built sourceSetParam.compiledBy(instrumentTask) @Suppress("UNUSED_EXPRESSION") diff --git a/compiler/ir/serialization.js/build.gradle.kts b/compiler/ir/serialization.js/build.gradle.kts index 13d9f6f01ce..5029e05a18d 100644 --- a/compiler/ir/serialization.js/build.gradle.kts +++ b/compiler/ir/serialization.js/build.gradle.kts @@ -85,7 +85,7 @@ val fullRuntimeSources by task { val reducedRuntimeSources by task { dependsOn(fullRuntimeSources) - from(fullRuntimeSources.outputs.files.singleFile) { + from(fullRuntimeSources.get().outputs.files.singleFile) { exclude( listOf( "libraries/stdlib/unsigned/**", @@ -161,10 +161,10 @@ fun JavaExec.buildKLib(sources: List, dependencies: List, outPat val fullRuntimeDir = buildDir.resolve("fullRuntime/klib") -val generateFullRuntimeKLib by task { +val generateFullRuntimeKLib by eagerTask { dependsOn(fullRuntimeSources) - buildKLib(sources = listOf(fullRuntimeSources.outputs.files.singleFile.path), + buildKLib(sources = listOf(fullRuntimeSources.get().outputs.files.singleFile.path), dependencies = emptyList(), outPath = fullRuntimeDir.absolutePath, commonSources = listOf("common", "src", "unsigned").map { "$buildDir/fullRuntime/src/libraries/stdlib/$it" } @@ -178,11 +178,11 @@ val packFullRuntimeKLib by tasks.registering(Jar::class) { archiveFileName.set("full-runtime.klib") } -val generateReducedRuntimeKLib by task { +val generateReducedRuntimeKLib by eagerTask { dependsOn(reducedRuntimeSources) val outPath = buildDir.resolve("reducedRuntime/klib").absolutePath - buildKLib(sources = listOf(reducedRuntimeSources.outputs.files.singleFile.path), + buildKLib(sources = listOf(reducedRuntimeSources.get().outputs.files.singleFile.path), dependencies = emptyList(), outPath = outPath, commonSources = listOf("common", "src", "unsigned").map { "$buildDir/reducedRuntime/src/libraries/stdlib/$it" } @@ -193,7 +193,7 @@ val kotlinTestCommonSources = listOf( "$rootDir/libraries/kotlin.test/annotations-common/src/main", "$rootDir/libraries/kotlin.test/common/src/main" ) -val generateKotlinTestKLib by task { +val generateKotlinTestKLib by eagerTask { dependsOn(generateFullRuntimeKLib) buildKLib( diff --git a/dependencies/android-sdk/build.gradle.kts b/dependencies/android-sdk/build.gradle.kts index 9aada936f42..c847916db5b 100644 --- a/dependencies/android-sdk/build.gradle.kts +++ b/dependencies/android-sdk/build.gradle.kts @@ -69,12 +69,14 @@ fun unzipSdkTask( } } } - prepareSdk.dependsOn(unzipTask) + prepareSdk.configure { + dependsOn(unzipTask) + } additionalConfig?.also { dependencies.add(it.name, dependency) } - + return unzipTask } diff --git a/libraries/reflect/build.gradle.kts b/libraries/reflect/build.gradle.kts index 681a3d6dae3..a8012bb2e87 100644 --- a/libraries/reflect/build.gradle.kts +++ b/libraries/reflect/build.gradle.kts @@ -123,14 +123,14 @@ val reflectShadowJar by task { } } -val stripMetadata by tasks.creating { +val stripMetadata by tasks.registering { dependsOn(reflectShadowJar) - val inputJar = reflectShadowJar.outputs.files.singleFile + val inputJar = provider { reflectShadowJar.get().outputs.files.singleFile } val outputJar = File("$libsDir/kotlin-reflect-stripped.jar") inputs.file(inputJar) outputs.file(outputJar) doLast { - stripMetadata(logger, "kotlin/reflect/jvm/internal/impl/.*", inputJar, outputJar) + stripMetadata(logger, "kotlin/reflect/jvm/internal/impl/.*", inputJar.get(), outputJar) } } @@ -138,10 +138,10 @@ val proguardOutput = "$libsDir/${property("archivesBaseName")}-proguard.jar" val proguard by task { dependsOn(stripMetadata) - inputs.files(stripMetadata.outputs.files) + inputs.files(stripMetadata.get().outputs.files) outputs.file(proguardOutput) - injars(mapOf("filter" to "!META-INF/versions/**"), stripMetadata.outputs.files) + injars(mapOf("filter" to "!META-INF/versions/**"), stripMetadata.get().outputs.files) injars(mapOf("filter" to "!META-INF/**,!**/*.kotlin_builtins"), proguardAdditionalInJars) outjars(proguardOutput) @@ -198,7 +198,7 @@ val result by task { dependsOn(task) from { - zipTree(task.outputs.files.singleFile) + zipTree(task.get().outputs.files.singleFile) } callGroovy("manifestAttributes", manifest, project, "Main") @@ -208,7 +208,7 @@ val modularJar by task { dependsOn(proguard) archiveClassifier.set("modular") from(zipTree(file(proguardOutput))) - from(zipTree(reflectShadowJar.archivePath)) { + from(zipTree(reflectShadowJar.get().archivePath)) { include("META-INF/versions/**") } callGroovy("manifestAttributes", manifest, project, "Main", true) @@ -216,14 +216,14 @@ val modularJar by task { val dexMethodCount by task { dependsOn(result) - jarFile = result.outputs.files.single() + jarFile = result.get().outputs.files.single() ownPackages = listOf("kotlin.reflect") } tasks.getByName("check").dependsOn(dexMethodCount) artifacts { listOf(mainJar.name, "runtime", "archives").forEach { configurationName -> - add(configurationName, result.outputs.files.singleFile) { + add(configurationName, result.get().outputs.files.singleFile) { builtBy(result) } } diff --git a/libraries/tools/kotlin-main-kts/build.gradle.kts b/libraries/tools/kotlin-main-kts/build.gradle.kts index 4440a942570..1ffd350b304 100644 --- a/libraries/tools/kotlin-main-kts/build.gradle.kts +++ b/libraries/tools/kotlin-main-kts/build.gradle.kts @@ -73,24 +73,24 @@ val proguard by task { dependsOn(packJar) configuration("main-kts.pro") - injars(mapOf("filter" to "!META-INF/versions/**"), packJar.outputs.files) + injars(mapOf("filter" to "!META-INF/versions/**"), packJar.get().outputs.files) val outputJar = fileFrom(buildDir, "libs", "$jarBaseName-$version-after-proguard.jar") outjars(outputJar) - inputs.files(packJar.outputs.files.singleFile) + inputs.files(packJar.get().outputs.files.singleFile) outputs.file(outputJar) libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardLibraryJars) } -val resultJar = tasks.register("resultJar") { +val resultJar by task { val pack = if (kotlinBuildProperties.proguard) proguard else packJar dependsOn(pack) setupPublicJar(jarBaseName) from { - zipTree(pack.outputs.files.singleFile) + zipTree(pack.get().outputs.files.singleFile) } } diff --git a/prepare/compiler/build.gradle.kts b/prepare/compiler/build.gradle.kts index 1390fdd8295..65eb61c70fe 100644 --- a/prepare/compiler/build.gradle.kts +++ b/prepare/compiler/build.gradle.kts @@ -246,7 +246,7 @@ val proguard by task { val outputJar = fileFrom(buildDir, "libs", "$compilerBaseName-after-proguard.jar") - inputs.files(packCompiler.outputs.files.singleFile) + inputs.files(packCompiler.get().outputs.files.singleFile) outputs.file(outputJar) libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardLibraries) @@ -255,7 +255,7 @@ val proguard by task { // This properties are used by proguard config compiler.pro doFirst { - System.setProperty("kotlin-compiler-jar-before-shrink", packCompiler.outputs.files.singleFile.canonicalPath) + System.setProperty("kotlin-compiler-jar-before-shrink", packCompiler.get().outputs.files.singleFile.canonicalPath) System.setProperty("kotlin-compiler-jar", outputJar.canonicalPath) } } @@ -267,7 +267,7 @@ val jar = runtimeJar { dependsOn(pack) from { - zipTree(pack.outputs.files.singleFile) + zipTree(pack.get().outputs.files.singleFile) } manifest.attributes["Class-Path"] = compilerManifestClassPath