diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index 1a6d2446c4e..a114ebd4515 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -10,6 +10,7 @@ import org.gradle.api.artifacts.ResolvedArtifact import org.gradle.api.artifacts.ResolvedDependency import org.gradle.api.artifacts.component.ProjectComponentIdentifier import org.gradle.api.attributes.Usage +import org.gradle.api.initialization.IncludedBuild import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputFiles import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation @@ -135,8 +136,14 @@ internal class KotlinCompilationNpmResolver( val artifact: ResolvedArtifact ) + data class CompositeDependency( + val dependency: ResolvedDependency, + val includedBuild: IncludedBuild + ) + inner class ConfigurationVisitor { private val internalDependencies = mutableSetOf() + private val internalCompositeDependencies = mutableSetOf() private val externalGradleDependencies = mutableSetOf() private val externalNpmDependencies = mutableSetOf() @@ -179,8 +186,11 @@ internal class KotlinCompilationNpmResolver( artifacts: MutableSet ) { artifacts.forEach { artifact -> - val componentIdentifier = artifact.id.componentIdentifier - if (componentIdentifier is ProjectComponentIdentifier) { + val artifactId = artifact.id + val componentIdentifier = artifactId.componentIdentifier + + val clazz = Class.forName("org.gradle.composite.internal.CompositeProjectComponentArtifactMetadata") + if (componentIdentifier is ProjectComponentIdentifier && !clazz.isAssignableFrom(artifactId::class.java)) { val dependentProject = project.findProject(componentIdentifier.projectPath) ?: error("Cannot find project ${componentIdentifier.projectPath}") @@ -191,10 +201,22 @@ internal class KotlinCompilationNpmResolver( } else { externalGradleDependencies.add(ExternalGradleDependency(dependency, artifact)) } + + if (clazz.isAssignableFrom(artifactId::class.java)) { + (artifactId.componentIdentifier as ProjectComponentIdentifier).let { identifier -> + val includedBuild = project.gradle.includedBuild(identifier.projectName.removePrefix(":")) + internalCompositeDependencies.add(CompositeDependency(dependency, includedBuild)) + } + } } } - fun toPackageJsonProducer() = PackageJsonProducer(internalDependencies, externalGradleDependencies, externalNpmDependencies) + fun toPackageJsonProducer() = PackageJsonProducer( + internalDependencies, + internalCompositeDependencies, + externalGradleDependencies, + externalNpmDependencies + ) } class PackageJsonProducerInputs( @@ -211,6 +233,7 @@ internal class KotlinCompilationNpmResolver( @Suppress("MemberVisibilityCanBePrivate") inner class PackageJsonProducer( val internalDependencies: Collection, + val internalCompositeDependencies: Collection, val externalGradleDependencies: Collection, val externalNpmDependencies: Collection ) {