From 0119541462a8c513d7101a27afc56c317afe1aa3 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Mon, 15 Mar 2021 13:58:58 +0100 Subject: [PATCH] KotlinToolingMetadata: Use Project property accessor for task --- .../gradle/BuildKotlinToolingMetadataTest.kt | 4 +- .../gradle/plugin/KotlinPluginWrapper.kt | 4 +- .../kotlin/gradle/plugin/mpp/Publishing.kt | 7 +--- .../tooling/BuildKotlinToolingMetadataTask.kt | 40 ++++++++++++------- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/BuildKotlinToolingMetadataTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/BuildKotlinToolingMetadataTest.kt index 7d61c9bc24f..088310d5c4c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/BuildKotlinToolingMetadataTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/BuildKotlinToolingMetadataTest.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.* import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget -import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask +import org.jetbrains.kotlin.gradle.tooling.buildKotlinToolingMetadataTask import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.library.KotlinAbiVersion import org.jetbrains.kotlin.tooling.KotlinToolingMetadata @@ -152,7 +152,7 @@ class BuildKotlinToolingMetadataTest { } private fun getKotlinToolingMetadata(): KotlinToolingMetadata { - val task = project.tasks.named(BuildKotlinToolingMetadataTask.defaultTaskName, BuildKotlinToolingMetadataTask::class.java).get() + val task = project.buildKotlinToolingMetadataTask!!.get() return task.getKotlinToolingMetadata() } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index cd0ad69148d..1b79c543c3a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.gradle.tasks.KOTLIN_KLIB_COMMONIZER_EMBEDDABLE import org.jetbrains.kotlin.gradle.tasks.KOTLIN_MODULE_GROUP import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestsRegistry import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask +import org.jetbrains.kotlin.gradle.tooling.buildKotlinToolingMetadataTask import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility import org.jetbrains.kotlin.gradle.utils.loadPropertyFromResources import org.jetbrains.kotlin.statistics.metrics.StringMetrics @@ -91,7 +92,6 @@ abstract class KotlinBasePluginWrapper : Plugin { } project.extensions.add(KotlinTestsRegistry.PROJECT_EXTENSION_NAME, createTestRegistry(project)) - project.tasks.register(BuildKotlinToolingMetadataTask.defaultTaskName, BuildKotlinToolingMetadataTask::class.java) val plugin = getPlugin(project, kotlinGradleBuildServices) @@ -100,6 +100,8 @@ abstract class KotlinBasePluginWrapper : Plugin { plugin.apply(project) project.addNpmDependencyExtension() + + project.buildKotlinToolingMetadataTask } private fun addKotlinCompilerConfiguration(project: Project) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/Publishing.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/Publishing.kt index 781de3a1912..cdd1bb39503 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/Publishing.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/Publishing.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled -import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask +import org.jetbrains.kotlin.gradle.tooling.buildKotlinToolingMetadataTask internal fun configurePublishingWithMavenPublish(project: Project) = project.pluginManager.withPlugin("maven-publish") { project.extensions.configure(PublishingExtension::class.java) { publishing -> @@ -50,10 +50,7 @@ private fun createRootPublication(project: Project, publishing: PublishingExtens } private fun MavenPublication.addKotlinToolingMetadataArtifactIfNeeded(project: Project) { - if (!PropertiesProvider(project).enableKotlinToolingMetadataArtifact) return - val buildKotlinToolingMetadataTask = project.tasks.withType(BuildKotlinToolingMetadataTask::class.java) - .named(BuildKotlinToolingMetadataTask.defaultTaskName) ?: return - + val buildKotlinToolingMetadataTask = project.buildKotlinToolingMetadataTask ?: return artifact(buildKotlinToolingMetadataTask.flatMap { it.outputFile }) { artifact -> artifact.classifier = "kotlin-tooling-metadata" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tooling/BuildKotlinToolingMetadataTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tooling/BuildKotlinToolingMetadataTask.kt index 82f614d6768..cc6da4d5d79 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tooling/BuildKotlinToolingMetadataTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tooling/BuildKotlinToolingMetadataTask.kt @@ -7,43 +7,54 @@ package org.jetbrains.kotlin.gradle.tooling import com.android.build.gradle.BaseExtension import org.gradle.api.DefaultTask +import org.gradle.api.Project import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.OutputFile -import org.gradle.api.tasks.TaskAction +import org.gradle.api.tasks.* import org.jetbrains.kotlin.compilerRunner.konanVersion import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.plugin.KotlinBasePluginWrapper -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion +import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.targets.metadata.isCompatibilityMetadataVariantEnabled import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled +import org.jetbrains.kotlin.gradle.tasks.locateTask +import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.library.KotlinAbiVersion import org.jetbrains.kotlin.tooling.KotlinToolingMetadata import org.jetbrains.kotlin.tooling.toJsonString import java.io.File +/** + * The default task managed by the Kotlin Gradle plugin or `null` if the task is disabled. + * @see [PropertiesProvider.enableKotlinToolingMetadataArtifact] + */ +internal val Project.buildKotlinToolingMetadataTask: TaskProvider? + get() { + if (!PropertiesProvider(this).enableKotlinToolingMetadataArtifact) return null + locateTask(BuildKotlinToolingMetadataTask.defaultTaskName)?.let { return it } + return registerTask(BuildKotlinToolingMetadataTask.defaultTaskName) { task -> + task.group = "build" + task.description = "Build metadata json file containing information about the used Kotlin tooling" + } + } + open class BuildKotlinToolingMetadataTask : DefaultTask() { companion object { + /** + * The name of the default task managed by the Kotlin Gradle plugin. + * If enabled, the Kotlin Gradle plugin will automatically register and manage a task with that name. + * @see PropertiesProvider.enableKotlinToolingMetadataArtifact + */ const val defaultTaskName: String = "buildKotlinToolingMetadata" } - init { - group = "build" - description = "Build metadata json file containing information about the used Kotlin tooling" - } - - @get:OutputFile val outputFile: Property = project.objects.property(File::class.java) .convention(project.buildDir.resolve("kotlinToolingMetadata").resolve("kotlin-tooling-metadata.json")) @@ -144,4 +155,3 @@ private fun buildNativeExtrasOrNull(target: KotlinTarget): KotlinToolingMetadata konanAbiVersion = KotlinAbiVersion.CURRENT.toString() ) } -