From 3f24f8bd8d45bfd5f3a8c27e2fd91ff4687f0dc7 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Mon, 24 Sep 2018 22:21:13 +0300 Subject: [PATCH] (minor) Transform KotlinPlatformType attribute to String, rename entries * To avoid unexpected effects from the Gradle instantiation mechanisms for attribute values, use a safer String attribute type for the KotlinPlatformType attribute * Rename its entries to keep enum entries naming consistent --- .../gradle/plugin/KotlinPlatformType.kt | 30 +++++++++---------- .../kotlin/gradle/plugin/KotlinPlugin.kt | 12 ++++---- .../gradle/plugin/KotlinTargetConfigurator.kt | 2 +- .../kotlin/gradle/plugin/mpp/KotlinUsages.kt | 6 ++-- .../gradle/plugin/mpp/kotlinTargetPresets.kt | 8 ++--- .../kotlin/gradle/plugin/mpp/kotlinTargets.kt | 4 +-- .../plugin/sources/KotlinSourceSetFactory.kt | 2 +- 7 files changed, 32 insertions(+), 32 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlatformType.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlatformType.kt index dfb5a5014b1..33d202ac6bb 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlatformType.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlatformType.kt @@ -10,43 +10,43 @@ import org.gradle.api.attributes.* import org.gradle.util.GradleVersion import java.io.Serializable -enum class KotlinPlatformType: Named, Serializable { - common, jvm, js, androidJvm, native; +enum class KotlinPlatformType(val attributeValue: String): Named, Serializable { + COMMON("common"), JVM("jvm"), JS("js"), ANDROID_JVM("androidJvm"), NATIVE("native"); override fun toString(): String = name override fun getName(): String = name - class CompatibilityRule : AttributeCompatibilityRule { - override fun execute(details: CompatibilityCheckDetails) = with(details) { - if (producerValue == jvm && consumerValue == androidJvm) + class CompatibilityRule : AttributeCompatibilityRule { + override fun execute(details: CompatibilityCheckDetails) = with(details) { + if (producerValue == JVM.attributeValue && consumerValue == ANDROID_JVM.attributeValue) compatible() // Allow the input metadata configuration consume platform-specific artifacts if no metadata is available, KT-26834 - if (consumerValue == common) + if (consumerValue == COMMON.attributeValue) compatible() } } - class DisambiguationRule : AttributeDisambiguationRule { - override fun execute(details: MultipleCandidatesDetails) = with(details) { - if (candidateValues == setOf(androidJvm, jvm)) - closestMatch(androidJvm) + class DisambiguationRule : AttributeDisambiguationRule { + override fun execute(details: MultipleCandidatesDetails) = with(details) { + if (candidateValues == setOf(ANDROID_JVM.attributeValue, JVM.attributeValue)) + closestMatch(ANDROID_JVM.attributeValue) - if (common in candidateValues) + if (COMMON.attributeValue in candidateValues) // then the consumer requests common or requests no platform-specific artifacts, // so common is the best match, KT-26834 - closestMatch(common) + closestMatch(COMMON.attributeValue) } } companion object { - val attribute = Attribute.of( + val ATTRIBUTE = Attribute.of( "org.jetbrains.kotlin.platform.type", - KotlinPlatformType::class.java + String::class.java ) fun setupAttributesMatchingStrategy(attributesSchema: AttributesSchema) { - attributesSchema.attribute(KotlinPlatformType.attribute).run { + attributesSchema.attribute(KotlinPlatformType.ATTRIBUTE).run { if (isGradleVersionAtLeast(4, 0)) { compatibilityRules.add(CompatibilityRule::class.java) disambiguationRules.add(DisambiguationRule::class.java) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 4136b59d3c8..5e508309004 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -395,7 +395,7 @@ internal abstract class AbstractKotlinPlugin( val javaSourceSets = project.convention.getPlugin(JavaPluginConvention::class.java).sourceSets val kotlinSourceSetDslName = when (kotlinTarget.platformType) { - KotlinPlatformType.js -> KOTLIN_JS_DSL_NAME + KotlinPlatformType.JS -> KOTLIN_JS_DSL_NAME else -> KOTLIN_DSL_NAME } @@ -428,7 +428,7 @@ internal abstract class AbstractKotlinPlugin( val project = kotlinTarget.project // Setup the consuming configurations: - project.dependencies.attributesSchema.attribute(KotlinPlatformType.attribute) + project.dependencies.attributesSchema.attribute(KotlinPlatformType.ATTRIBUTE) kotlinTarget.compilations.all { compilation -> AbstractKotlinTargetConfigurator.defineConfigurationsForCompilation(compilation, kotlinTarget, project.configurations) } @@ -436,7 +436,7 @@ internal abstract class AbstractKotlinPlugin( // Setup the published configurations: // Don't set the attributes for common module; otherwise their 'common' platform won't be compatible with the one in // platform-specific modules - if (kotlinTarget.platformType != KotlinPlatformType.common) { + if (kotlinTarget.platformType != KotlinPlatformType.COMMON) { project.configurations.getByName(kotlinTarget.apiElementsConfigurationName).run { attributes.attribute(Usage.USAGE_ATTRIBUTE, KotlinUsages.producerApiUsage(kotlinTarget)) usesPlatformOf(kotlinTarget) @@ -493,7 +493,7 @@ internal open class KotlinPlugin( Kotlin2JvmSourceSetProcessor(project, tasksProvider, compilation, kotlinPluginVersion) override fun apply(project: Project) { - val target = KotlinWithJavaTarget(project, KotlinPlatformType.jvm, targetName).apply { + val target = KotlinWithJavaTarget(project, KotlinPlatformType.JVM, targetName).apply { disambiguationClassifier = null // don't add anything to the task names } (project.kotlinExtension as KotlinSingleJavaTargetExtension).target = target @@ -520,7 +520,7 @@ internal open class KotlinCommonPlugin( KotlinCommonSourceSetProcessor(project, compilation, tasksProvider, kotlinPluginVersion) override fun apply(project: Project) { - val target = KotlinWithJavaTarget(project, KotlinPlatformType.common, targetName) + val target = KotlinWithJavaTarget(project, KotlinPlatformType.COMMON, targetName) (project.kotlinExtension as KotlinSingleJavaTargetExtension).target = target super.apply(project) @@ -546,7 +546,7 @@ internal open class Kotlin2JsPlugin( ) override fun apply(project: Project) { - val target = KotlinWithJavaTarget(project, KotlinPlatformType.js, targetName) + val target = KotlinWithJavaTarget(project, KotlinPlatformType.JS, targetName) (project.kotlinExtension as KotlinSingleJavaTargetExtension).target = target super.apply(project) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index e69d0e775f1..94a9bd8f86f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -701,7 +701,7 @@ internal fun Project.usageByName(usageName: String): Usage = } fun Configuration.usesPlatformOf(target: KotlinTarget): Configuration { - attributes.attribute(KotlinPlatformType.attribute, target.platformType) + attributes.attribute(KotlinPlatformType.ATTRIBUTE, target.platformType.attributeValue) // TODO: Provide an universal way to copy attributes from the target. if (target is KotlinNativeTarget) { attributes.attribute(KotlinNativeTarget.konanTargetAttribute, target.konanTarget.name) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt index a1da8c11de8..0ef36a937c5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt @@ -8,8 +8,8 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.attributes.* import org.gradle.api.attributes.Usage.* import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.androidJvm -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.jvm +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.ANDROID_JVM +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.JVM import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.usageByName import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast @@ -19,7 +19,7 @@ object KotlinUsages { const val KOTLIN_RUNTIME = "kotlin-runtime" val values = setOf(KOTLIN_API, KOTLIN_RUNTIME) - private val jvmPlatformTypes: Set = setOf(jvm, androidJvm) + private val jvmPlatformTypes: Set = setOf(JVM, ANDROID_JVM) internal fun consumerApiUsage(target: KotlinTarget) = target.project.usageByName( when (target.platformType) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt index e6dcfef3803..a3c815bc146 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt @@ -85,7 +85,7 @@ class KotlinMetadataTargetPreset( KotlinCommonCompilationFactory(forTarget) override val platformType: KotlinPlatformType - get() = KotlinPlatformType.common + get() = KotlinPlatformType.COMMON override fun buildCompilationProcessor(compilation: KotlinCommonCompilation): KotlinSourceSetProcessor<*> = KotlinCommonSourceSetProcessor( @@ -136,7 +136,7 @@ class KotlinJvmTargetPreset( KotlinJvmCompilationFactory(forTarget) override val platformType: KotlinPlatformType - get() = KotlinPlatformType.jvm + get() = KotlinPlatformType.JVM override fun buildCompilationProcessor(compilation: KotlinJvmCompilation): KotlinSourceSetProcessor<*> = Kotlin2JvmSourceSetProcessor(project, KotlinTasksProvider(compilation.target.targetName), compilation, kotlinPluginVersion) @@ -165,7 +165,7 @@ class KotlinJsTargetPreset( KotlinJsCompilationFactory(project, forTarget) override val platformType: KotlinPlatformType - get() = KotlinPlatformType.js + get() = KotlinPlatformType.JS override fun buildCompilationProcessor(compilation: KotlinJsCompilation): KotlinSourceSetProcessor<*> = Kotlin2JsSourceSetProcessor(project, KotlinTasksProvider(compilation.target.targetName), compilation, kotlinPluginVersion) @@ -210,7 +210,7 @@ class KotlinJvmWithJavaTargetPreset( override fun createTarget(name: String): KotlinWithJavaTarget { project.plugins.apply(JavaPlugin::class.java) - val target = KotlinWithJavaTarget(project, KotlinPlatformType.jvm, name).apply { + val target = KotlinWithJavaTarget(project, KotlinPlatformType.JVM, name).apply { disambiguationClassifier = name } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt index 64f6bd4269a..1664562ab9d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt @@ -122,7 +122,7 @@ open class KotlinAndroidTarget( internal set override val platformType: KotlinPlatformType - get() = KotlinPlatformType.androidJvm + get() = KotlinPlatformType.ANDROID_JVM private val compilationFactory = KotlinJvmAndroidCompilationFactory(project, this) @@ -179,7 +179,7 @@ open class KotlinOnlyTarget( class KotlinNativeTarget( project: Project, val konanTarget: KonanTarget -) : KotlinOnlyTarget(project, KotlinPlatformType.native) { +) : KotlinOnlyTarget(project, KotlinPlatformType.NATIVE) { init { attributes.attribute(konanTargetAttribute, konanTarget.name) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt index b2e94327666..6a2bdae3e68 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt @@ -68,7 +68,7 @@ internal class DefaultKotlinSourceSetFactory( dependencyConfigurationWithMetadata.forEach { (configurationName, metadataName) -> project.configurations.maybeCreate(metadataName).apply { - attributes.attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) + attributes.attribute(KotlinPlatformType.ATTRIBUTE, KotlinPlatformType.COMMON.attributeValue) attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_API)) isVisible = false isCanBeConsumed = false