Add kotlin-build-tools-enum-compat workaround

It acts as a workaround for the case when build tools or dependencies
are compiled with latest 'kotlin-stdlib' version, but at a runtime older
 'kotlin-stdlib' is provided, which does not know about new
 `EnumEntries`.

 ^KT-57317 Fixed
This commit is contained in:
Yahor Berdnikau
2023-04-17 11:46:09 +02:00
committed by Space Team
parent 1f649b698c
commit eb4e96a113
25 changed files with 174 additions and 128 deletions
+23 -3
View File
@@ -13,7 +13,6 @@ import org.gradle.api.attributes.*
import org.gradle.api.attributes.java.TargetJvmEnvironment
import org.gradle.api.attributes.java.TargetJvmVersion
import org.gradle.api.attributes.plugin.GradlePluginApiVersion
import org.gradle.api.file.FileCollection
import org.gradle.api.component.AdhocComponentWithVariants
import org.gradle.api.plugins.JavaLibraryPlugin
import org.gradle.api.plugins.JavaPlugin
@@ -31,12 +30,10 @@ import org.jetbrains.dokka.gradle.DokkaTask
import org.jetbrains.dokka.gradle.GradleExternalDocumentationLinkBuilder
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleJavaTargetExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import plugins.configureDefaultPublishing
import plugins.configureKotlinPomAttributes
import java.net.URL
import java.util.*
/**
* Gradle's plugins common variants.
@@ -251,6 +248,7 @@ fun Project.wireGradleVariantToCommonGradleVariant(
from(wireSourceSet.output, commonSourceSet.output)
setupPublicJar(archiveBaseName.get())
addEmbeddedRuntime()
addEmbeddedRuntime(wireSourceSet.embeddedConfigurationName)
} else if (name == wireSourceSet.sourcesJarTaskName) {
from(wireSourceSet.allSource, commonSourceSet.allSource)
}
@@ -302,6 +300,15 @@ fun Project.reconfigureMainSourcesSetForGradlePlugin(
withJavadocJar()
}
}
configurations.create(sourceSets.getByName("main").embeddedConfigurationName) {
isCanBeConsumed = false
isCanBeResolved = true
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
}
}
}
// Workaround for https://youtrack.jetbrains.com/issue/KT-52987
@@ -423,10 +430,20 @@ fun Project.createGradlePluginVariant(
configurations.named(variantSourceSet.apiElementsConfigurationName, commonVariantAttributes())
configurations.named(variantSourceSet.runtimeElementsConfigurationName, commonVariantAttributes())
configurations.create(variantSourceSet.embeddedConfigurationName) {
isCanBeConsumed = false
isCanBeResolved = true
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
}
}
}
tasks.named<Jar>(variantSourceSet.sourcesJarTaskName) {
addEmbeddedSources()
addEmbeddedSources(variantSourceSet.embeddedConfigurationName)
}
}
@@ -513,6 +530,7 @@ fun Project.publishShadowedJar(
jarTask.flatMap { it.archiveClassifier }
)
addEmbeddedRuntime()
addEmbeddedRuntime(sourceSet.embeddedConfigurationName)
from(sourceSet.output)
from(commonSourceSet.output)
@@ -701,3 +719,5 @@ private fun GradleExternalDocumentationLinkBuilder.addWorkaroundForElementList(p
packageListUrl.set(URL("${pluginVariant.gradleApiJavadocUrl}element-list"))
}
}
private val SourceSet.embeddedConfigurationName get() = "${name}Embedded"
+6 -4
View File
@@ -73,8 +73,9 @@ fun Project.noDefaultJar() {
configurations.named("archives", removeJarTaskArtifact(jarTask))
}
fun Jar.addEmbeddedRuntime() {
project.configurations.findByName("embedded")?.let { embedded ->
@JvmOverloads
fun Jar.addEmbeddedRuntime(embeddedConfigurationName: String = "embedded") {
project.configurations.findByName(embeddedConfigurationName)?.let { embedded ->
dependsOn(embedded)
val archiveOperations = project.serviceOf<ArchiveOperations>()
from {
@@ -203,8 +204,9 @@ fun Project.sourcesJarWithSourcesFromEmbedded(
return sourcesJarTask
}
fun Jar.addEmbeddedSources() {
project.configurations.findByName("embedded")?.let { embedded ->
@JvmOverloads
fun Jar.addEmbeddedSources(configurationName: String = "embedded") {
project.configurations.findByName(configurationName)?.let { embedded ->
val allSources by lazy {
embedded.resolvedConfiguration
.resolvedArtifacts