[Gradle, MPP] Make kotlin tooling metadata task compatible w/ conf cache

The value should be memoized in task, so it can be serialized in a way to not use project in execution time
#KT-47612 In Progress
This commit is contained in:
Alexander Likhachev
2021-07-05 20:02:54 +03:00
parent 5f53a2071d
commit 77471c0cd8
2 changed files with 11 additions and 9 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
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
@@ -186,7 +187,7 @@ class BuildKotlinToolingMetadataTest {
}
private fun getKotlinToolingMetadata(): KotlinToolingMetadata {
val task = project.buildKotlinToolingMetadataTask!!.get()
return task.getKotlinToolingMetadata()
val task = project.buildKotlinToolingMetadataTask?.get() ?: error("No ${BuildKotlinToolingMetadataTask.defaultTaskName} task")
return task.kotlinToolingMetadata
}
}
@@ -44,7 +44,7 @@ internal val Project.buildKotlinToolingMetadataTask: TaskProvider<BuildKotlinToo
}
}
open class BuildKotlinToolingMetadataTask : DefaultTask() {
abstract class BuildKotlinToolingMetadataTask : DefaultTask() {
companion object {
/**
@@ -59,19 +59,20 @@ open class BuildKotlinToolingMetadataTask : DefaultTask() {
val outputFile: Property<File> = project.objects.property(File::class.java)
.convention(project.buildDir.resolve("kotlinToolingMetadata").resolve("kotlin-tooling-metadata.json"))
@Internal
fun getKotlinToolingMetadata(): KotlinToolingMetadata {
return project.kotlinExtension.getKotlinToolingMetadata()
@get:Internal
internal val kotlinToolingMetadata by lazy {
project.kotlinExtension.getKotlinToolingMetadata()
}
@Input
internal fun getKotlinToolingMetadataJson(): String = getKotlinToolingMetadata().toJsonString()
@get:Input
internal val kotlinToolingMetadataJson
get() = kotlinToolingMetadata.toJsonString()
@TaskAction
internal fun createToolingMetadataFile() {
val outputFile = outputFile.orNull ?: return
outputFile.parentFile.mkdirs()
outputFile.writeText(getKotlinToolingMetadataJson())
outputFile.writeText(kotlinToolingMetadataJson)
}
}