From 03b74343c82d8118e6eab1d491d8e01625a68bae Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Thu, 28 Feb 2019 18:41:10 +0300 Subject: [PATCH] Refactor & minor fix in software component logic of AbstractKotlinTarget * Create the sources JAR for both Gradle 4.7+ and versions below 4.7 * Set `componentName` in all branches of `createKotlinVariant` --- .../kotlin/gradle/plugin/mpp/kotlinTargets.kt | 59 +++++++++---------- 1 file changed, 29 insertions(+), 30 deletions(-) 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 bd4a0b5d0c6..e5343262fdd 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 @@ -59,21 +59,20 @@ abstract class AbstractKotlinTarget( internal open val kotlinComponents: Set by lazy { val mainCompilation = compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) val usageContexts = createUsageContexts(mainCompilation) - setOf( - if (isGradleVersionAtLeast(4, 7)) { - val componentName = mainCompilation.target.name - createKotlinVariant(componentName, mainCompilation, usageContexts).apply { - sourcesArtifacts = setOf( - sourcesJarArtifact( - mainCompilation, componentName, - dashSeparatedName(target.name.toLowerCase(), componentName.toLowerCase()) - ) - ) - } - } else { - KotlinVariant(mainCompilation, usageContexts) - } + + val componentName = mainCompilation.target.name + + val result = if (isGradleVersionAtLeast(4, 7)) { + createKotlinVariant(componentName, mainCompilation, usageContexts) + } else { + KotlinVariant(mainCompilation, usageContexts) + } + + result.sourcesArtifacts = setOf( + sourcesJarArtifact(mainCompilation, componentName, dashSeparatedName(targetName.toLowerCase())) ) + + setOf(result).also { project.components.addAll(it) } } override val components: Set by lazy { @@ -160,24 +159,24 @@ abstract class AbstractKotlinTarget( compilation: KotlinCompilation<*>, usageContexts: Set ): KotlinVariant { + val kotlinExtension = project.kotlinExtension - val kotlinExtension = project.kotlinExtension as? KotlinMultiplatformExtension - ?: return KotlinVariantWithCoordinates(compilation, usageContexts) + val result = + if (kotlinExtension !is KotlinMultiplatformExtension || targetName == KotlinMultiplatformPlugin.METADATA_TARGET_NAME) + KotlinVariantWithCoordinates(compilation, usageContexts) + else { + val metadataTarget = + kotlinExtension.targets.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME) as AbstractKotlinTarget - if (targetName == KotlinMultiplatformPlugin.METADATA_TARGET_NAME) - return KotlinVariantWithCoordinates(compilation, usageContexts) - - val separateMetadataTarget = - kotlinExtension.targets.getByName(KotlinMultiplatformPlugin.METADATA_TARGET_NAME) as AbstractKotlinTarget - - val result = if (kotlinExtension.isGradleMetadataAvailable) { - KotlinVariantWithMetadataVariant(compilation, usageContexts, separateMetadataTarget) - } else { - // we should only add the Kotlin metadata dependency if we publish no Gradle metadata related to Kotlin MPP; - // with metadata, such a dependency would get invalid, since a platform module should only depend on modules for that - // same platform, not Kotlin metadata modules - KotlinVariantWithMetadataDependency(compilation, usageContexts, separateMetadataTarget) - } + if (kotlinExtension.isGradleMetadataAvailable) { + KotlinVariantWithMetadataVariant(compilation, usageContexts, metadataTarget) + } else { + // we should only add the Kotlin metadata dependency if we publish no Gradle metadata related to Kotlin MPP; + // with metadata, such a dependency would get invalid, since a platform module should only depend on modules for that + // same platform, not Kotlin metadata modules + KotlinVariantWithMetadataDependency(compilation, usageContexts, metadataTarget) + } + } result.componentName = componentName return result