From 30f78847b196b50ef3332a25d40f442570cf66b3 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 31 Jul 2020 17:33:38 +0300 Subject: [PATCH] [Gradle, JS] Not publish npm dependency constraints in metadata ^KT-41054 fixed --- .../kotlin/gradle/plugin/mpp/kotlinTargets.kt | 56 ++++++++++++------- .../js/npm/KotlinNpmResolutionManager.kt | 11 ++++ .../targets/js/npm/NpmDependencyConstraint.kt | 21 ++++--- .../gradle/targets/js/yarn/YarnWorkspaces.kt | 1 - 4 files changed, 58 insertions(+), 31 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 43d5e1ef66c..dd9ab7e1fca 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 @@ -10,24 +10,22 @@ import org.gradle.api.DomainObjectSet import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.artifacts.ConfigurablePublishArtifact +import org.gradle.api.artifacts.DependencyConstraint import org.gradle.api.artifacts.PublishArtifact import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.AttributeContainer import org.gradle.api.attributes.Usage.JAVA_RUNTIME_JARS -import org.gradle.api.component.ComponentWithCoordinates -import org.gradle.api.component.ComponentWithVariants -import org.gradle.api.component.SoftwareComponent -import org.gradle.api.component.SoftwareComponentFactory +import org.gradle.api.component.* import org.gradle.api.internal.component.SoftwareComponentInternal import org.gradle.api.internal.component.UsageContext import org.gradle.api.internal.project.ProjectInternal -import org.gradle.api.provider.Provider import org.gradle.api.publish.maven.MavenPublication import org.gradle.util.ConfigureUtil import org.gradle.util.WrapUtil 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.targets.js.npm.NpmDependencyConstraint import org.jetbrains.kotlin.gradle.utils.dashSeparatedName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -125,23 +123,43 @@ abstract class AbstractKotlinTarget( adhocVariant as SoftwareComponent - if (kotlinVariant is KotlinVariantWithMetadataVariant) { - object : ComponentWithVariants, ComponentWithCoordinates, SoftwareComponentInternal { - override fun getCoordinates() = kotlinVariant.coordinates - override fun getVariants(): Set = kotlinVariant.variants - override fun getName(): String = adhocVariant.name - override fun getUsages(): MutableSet = (adhocVariant as SoftwareComponentInternal).usages - } - } else { - object : ComponentWithCoordinates, SoftwareComponentInternal { - override fun getCoordinates() = (kotlinVariant as? ComponentWithCoordinates)?.coordinates - override fun getName(): String = adhocVariant.name - override fun getUsages(): MutableSet = (adhocVariant as SoftwareComponentInternal).usages - } - } + creatAdHocComponent(kotlinVariant, adhocVariant) }.toSet() } + private fun creatAdHocComponent( + kotlinVariant: KotlinTargetComponent, + adhocVariant: AdhocComponentWithVariants + ) = if (kotlinVariant is KotlinVariantWithMetadataVariant) { + object : ComponentWithVariants, ComponentWithCoordinates, SoftwareComponentInternal { + override fun getCoordinates() = kotlinVariant.coordinates + override fun getVariants(): Set = kotlinVariant.variants + override fun getName(): String = adhocVariant.name + override fun getUsages(): MutableSet = + getUsages(adhocVariant as SoftwareComponentInternal) + } + } else { + object : ComponentWithCoordinates, SoftwareComponentInternal { + override fun getCoordinates() = (kotlinVariant as? ComponentWithCoordinates)?.coordinates + override fun getName(): String = adhocVariant.name + override fun getUsages(): MutableSet = + getUsages(adhocVariant as SoftwareComponentInternal) + } + } + + private fun getUsages(component: SoftwareComponentInternal): MutableSet = + component + .usages + .map { usageContext -> + object : UsageContext by usageContext { + override fun getDependencyConstraints(): MutableSet = + usageContext.dependencyConstraints + .filterNot { it is NpmDependencyConstraint } + .toMutableSet() + } + } + .toMutableSet() + protected open fun createKotlinVariant( componentName: String, compilation: KotlinCompilation<*>, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt index 561d583c65b..727d9458598 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt @@ -192,6 +192,17 @@ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension } } + internal fun putNpmResolution( + path: String, + version: String + ) { + with(state) { + if (this is ResolutionState.Configuring) { + resolver.resolutions[path] = version + } + } + } + internal fun getNpmDependencyResolvedCompilation(npmDependency: NpmDependency): KotlinCompilationNpmResolution? { val project = npmDependency.project diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyConstraint.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyConstraint.kt index 3188abb6916..4ef9bd3a68d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyConstraint.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyConstraint.kt @@ -9,7 +9,6 @@ import org.gradle.api.Action import org.gradle.api.Project import org.gradle.api.artifacts.* import org.gradle.api.attributes.AttributeContainer -import org.gradle.api.internal.artifacts.DefaultModuleIdentifier import org.gradle.api.internal.artifacts.dependencies.DefaultMutableVersionConstraint import org.gradle.api.internal.artifacts.dependencies.DependencyConstraintInternal import org.gradle.api.internal.attributes.ImmutableAttributes @@ -17,17 +16,15 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin class NpmDependencyConstraint( internal val project: Project, - private val name: String, - private val version: String, - val scope: NpmDependency.Scope = NpmDependency.Scope.NORMAL + private val path: String, + private val version: String ) : DependencyConstraintInternal { - private val moduleIdentifier = DefaultModuleIdentifier.newId(null, name); private val versionConstraint = DefaultMutableVersionConstraint(version) - override fun getGroup(): String? = moduleIdentifier.group + override fun getGroup(): String? = null - override fun getName(): String = moduleIdentifier.name + override fun getName(): String = path override fun getVersion(): String = versionConstraint.version @@ -36,7 +33,11 @@ class NpmDependencyConstraint( } override fun getModule(): ModuleIdentifier { - return moduleIdentifier + return object : ModuleIdentifier { + override fun getGroup(): String? = null + + override fun getName(): String = path + } } override fun getAttributes(): AttributeContainer { @@ -60,10 +61,8 @@ class NpmDependencyConstraint( } override fun getVersionConstraint(): VersionConstraint { - println("get version constraint") val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - nodeJs.npmResolutionManager.requireConfiguringState() - .resolutions[name] = version + nodeJs.npmResolutionManager.putNpmResolution(path, version) return versionConstraint } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt index be7e7f7d81c..fc6c0a57dda 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt @@ -88,7 +88,6 @@ class YarnWorkspaces : YarnBasics() { YarnImportedPackagesVersionResolver(rootProject, npmProjects, nodeJsWorldDir).resolveAndUpdatePackages() rootPackageJson.workspaces = npmProjectWorkspaces + importedProjectWorkspaces - println("resolutions $resolutions") rootPackageJson.resolutions = resolutions rootPackageJson.saveTo( rootPackageJsonFile