KotlinToolingMetadata: Use Project property accessor for task

This commit is contained in:
sebastian.sellmair
2021-03-15 13:58:58 +01:00
committed by TeamCityServer
parent 0a59301f8a
commit 0119541462
4 changed files with 32 additions and 23 deletions
@@ -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()
}
}
@@ -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> {
}
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<Project> {
plugin.apply(project)
project.addNpmDependencyExtension()
project.buildKotlinToolingMetadataTask
}
private fun addKotlinCompilerConfiguration(project: Project) {
@@ -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"
@@ -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<BuildKotlinToolingMetadataTask>?
get() {
if (!PropertiesProvider(this).enableKotlinToolingMetadataArtifact) return null
locateTask<BuildKotlinToolingMetadataTask>(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<File> = 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()
)
}