[Gradle, JS] Difference through gradle attribute

This commit is contained in:
Ilya Goncharov
2020-01-22 19:34:36 +03:00
parent 4d323d3567
commit 619b922215
5 changed files with 24 additions and 9 deletions
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget.Companion.LEGACY
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.util.concurrent.Callable
import kotlin.reflect.KMutableProperty1
@@ -446,14 +446,9 @@ internal fun Project.usageByName(usageName: String): Usage =
fun Configuration.usesPlatformOf(target: KotlinTarget): Configuration {
attributes.attribute(KotlinPlatformType.attribute, target.platformType)
println("$target ${target is KotlinJsTarget}")
if (target is KotlinJsTarget) {
attributes.attribute(KotlinJsTarget.jsTargetAttribute, "legacy")
}
if (target is KotlinJsIrTarget) {
attributes.attribute(KotlinJsTarget.jsTargetAttribute, "ir")
attributes.attribute(KotlinJsTarget.jsLegacyAttribute, LEGACY)
}
// TODO: Provide an universal way to copy attributes from the target.
@@ -31,6 +31,8 @@ open class KotlinJsPlugin(
val kotlinExtension = project.kotlinExtension as KotlinJsProjectExtension
configureDefaultVersionsResolutionStrategy(project, kotlinPluginVersion)
KotlinJsTarget.setupAttributesMatchingStrategy(project.dependencies.attributesSchema)
val irPrest = if (mixedMode) KotlinJsIrSingleTargetPreset(project, kotlinPluginVersion) else null
val target = KotlinJsSingleTargetPreset(project, kotlinPluginVersion, irPrest).createTarget("Js")
@@ -9,6 +9,8 @@ import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.artifacts.ConfigurablePublishArtifact
import org.gradle.api.artifacts.Dependency
import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.AttributesSchema
import org.gradle.api.attributes.Usage
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
@@ -41,6 +43,10 @@ constructor(
override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsReportAggregatingTestRun>
internal set
init {
attributes.attribute(KotlinJsTarget.jsLegacyAttribute, LEGACY)
}
override val kotlinComponents: Set<KotlinTargetComponent> by lazy {
if (irTarget == null)
super.kotlinComponents
@@ -161,4 +167,17 @@ constructor(
}
}
}
companion object {
val jsLegacyAttribute = Attribute.of(
"org.jetbrains.kotlin.js.legacy",
String::class.java
)
const val LEGACY = "legacy"
fun setupAttributesMatchingStrategy(attributesSchema: AttributesSchema) {
attributesSchema.attribute(jsLegacyAttribute)
}
}
}
@@ -69,7 +69,7 @@ class KotlinJsSingleTargetPreset(
// In a Kotlin/JS single-platform project, we don't need any disambiguation suffixes or prefixes in the names:
override fun provideTargetDisambiguationClassifier(target: KotlinOnlyTarget<KotlinJsCompilation>): String? =
null
irPreset?.let { "legacy" }
override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator(
kotlinPluginVersion,
@@ -11,7 +11,6 @@ import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.targets.js.JsIrAggregatingExecutionSource
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsIrReportAggregatingTestRun