From 9833e2202e37babda3b46607b0bc8a35cc0515e3 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 23 Jan 2020 19:06:22 +0300 Subject: [PATCH] [Gradle, JS] Hack for npm resolving of js mixed mode --- .../resolver/KotlinCompilationNpmResolver.kt | 8 ++++---- .../js/npm/resolver/KotlinRootNpmResolver.kt | 18 +++++++++++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) 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 93151e76c30..1a6d2446c4e 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 @@ -184,10 +184,10 @@ internal class KotlinCompilationNpmResolver( val dependentProject = project.findProject(componentIdentifier.projectPath) ?: error("Cannot find project ${componentIdentifier.projectPath}") - val dependentResolver = resolver.findDependentResolver(project, dependentProject) - if (dependentResolver != null) { - internalDependencies.add(dependentResolver) - } + resolver.findDependentResolver(project, dependentProject) + ?.forEach { dependentResolver -> + internalDependencies.add(dependentResolver) + } } else { externalGradleDependencies.add(ExternalGradleDependency(dependency, artifact)) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt index 67ab1889efa..0ccbf43e36b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinRootNpmResolver.kt @@ -9,6 +9,7 @@ import org.gradle.api.Project import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatRootResolverPlugin +import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModulesCache import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager @@ -51,20 +52,31 @@ internal class KotlinRootNpmResolver internal constructor( val compilations: Collection get() = projectResolvers.values.flatMap { it.compilationResolvers.map { it.compilation } } - fun findDependentResolver(src: Project, target: Project): KotlinCompilationNpmResolver? { + fun findDependentResolver(src: Project, target: Project): List? { // todo: proper finding using KotlinTargetComponent.findUsageContext val targetResolver = this[target] val mainCompilations = targetResolver.compilationResolvers.filter { it.compilation.name == KotlinCompilation.MAIN_COMPILATION_NAME } return if (mainCompilations.isNotEmpty()) { - if (mainCompilations.size > 1) { + //TODO[Ilya Goncharov] Hack for Mixed mode of legacy and IR tooling + if (mainCompilations.size == 2) { + check( + mainCompilations[0].compilation is KotlinJsIrCompilation + || mainCompilations[1].compilation is KotlinJsIrCompilation + ) { + "Cannot resolve project dependency $src -> $target." + + "Dependency to project with multiple js compilation not supported yet." + } + } + + if (mainCompilations.size > 2) { error( "Cannot resolve project dependency $src -> $target." + "Dependency to project with multiple js compilation not supported yet." ) } - mainCompilations.single() + mainCompilations } else null }