From 31f8fe04613d360fc8fad480ff40c1e8a4721859 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 24 Jan 2020 18:38:37 +0300 Subject: [PATCH] [Gradle, JS] Api and runtime variants for legacy and ir --- .../gradle/plugin/KotlinPluginWrapper.kt | 2 + .../kotlin/gradle/plugin/mpp/kotlinTargets.kt | 3 +- .../gradle/targets/js/KotlinJsTarget.kt | 57 +++++++------------ 3 files changed, 24 insertions(+), 38 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index f44b24f219d..131743c931e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlugin +import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.addNpmDependencyExtension import org.jetbrains.kotlin.gradle.tasks.KOTLIN_COMPILER_EMBEDDABLE @@ -102,6 +103,7 @@ abstract class KotlinBasePluginWrapper( private fun setupAttributeMatchingStrategy(project: Project) = with(project.dependencies.attributesSchema) { KotlinPlatformType.setupAttributesMatchingStrategy(this) KotlinUsages.setupAttributesMatchingStrategy(project, this) + KotlinJsTarget.setupAttributesMatchingStrategy(project.dependencies.attributesSchema) ProjectLocalConfigurations.setupAttributesMatchingStrategy(this) } 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 66504534b2d..ed675f85e58 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 @@ -184,7 +184,8 @@ abstract class AbstractKotlinTarget( return result } - private fun createUsageContexts( + // TODO[Ilya Goncharov] fix internal on public when we remove legacy js + internal fun createUsageContexts( producingCompilation: KotlinCompilation<*> ): Set { // Here, the Java Usage values are used intentionally as Gradle needs this for diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index 881f5f14597..2f4b2643882 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -7,16 +7,19 @@ package org.jetbrains.kotlin.gradle.targets.js 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.Usage +import org.gradle.api.attributes.AttributesSchema import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix -import org.jetbrains.kotlin.gradle.plugin.mpp.* +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent +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.plugin.mpp.PRIMARY_SINGLE_COMPONENT_NAME import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl @@ -26,7 +29,7 @@ import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinNodeJs import org.jetbrains.kotlin.gradle.tasks.locateTask import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport import org.jetbrains.kotlin.gradle.testing.testTaskName -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast +import org.jetbrains.kotlin.gradle.utils.dashSeparatedName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import javax.inject.Inject @@ -46,46 +49,22 @@ constructor( if (irTarget == null) super.kotlinComponents else { - val usageContexts = mutableSetOf() - - // This usage value is only needed for Maven scope mapping. Don't replace it with a custom Kotlin Usage value - val javaApiUsage = project.usageByName(if (isGradleVersionAtLeast(5, 3)) "java-api-jars" else Usage.JAVA_API) - - usageContexts += run { - DefaultKotlinUsageContext( - compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME), - javaApiUsage, - apiElementsConfigurationName - ) - } - - usageContexts += run { - DefaultKotlinUsageContext( - irTarget!!.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME), - javaApiUsage, - irTarget!!.apiElementsConfigurationName - ) - } + val mainCompilation = compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) + val usageContexts = createUsageContexts(mainCompilation) + + irTarget!!.createUsageContexts(irTarget!!.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME)) val componentName = if (project.kotlinExtension is KotlinMultiplatformExtension) targetName else PRIMARY_SINGLE_COMPONENT_NAME - val component = - createKotlinVariant(componentName, compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME), usageContexts) + val result = createKotlinVariant(componentName, mainCompilation, usageContexts) - val sourcesJarTask = - sourcesJarTask(project, lazy { project.kotlinExtension.sourceSets.toSet() }, null, targetName.toLowerCase()) - - component.sourcesArtifacts = setOf( - project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, sourcesJarTask).apply { - this as ConfigurablePublishArtifact - classifier = "sources" - } + result.sourcesArtifacts = setOf( + sourcesJarArtifact(mainCompilation, componentName, dashSeparatedName(targetName.toLowerCase())) ) - setOf(component) + setOf(result) } } @@ -178,5 +157,9 @@ constructor( const val LEGACY = "legacy" const val IR = "ir" + + fun setupAttributesMatchingStrategy(attributesSchema: AttributesSchema) { + attributesSchema.attribute(jsModeAttribute) + } } } \ No newline at end of file