[GradlePlugin] Add mixed mode for js and wasm compilations

This commit is contained in:
Igor Yakovlev
2022-05-03 12:28:45 +02:00
parent 73a86fffe5
commit 15ba9682e8
@@ -9,6 +9,7 @@ import org.gradle.api.Project
import org.gradle.api.logging.Logger import org.gradle.api.logging.Logger
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.internal.service.ServiceRegistry import org.gradle.internal.service.ServiceRegistry
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatRootResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatRootResolverPlugin
@@ -208,27 +209,36 @@ internal class KotlinRootNpmResolver internal constructor(
val targetResolver = this[target.path] val targetResolver = this[target.path]
val mainCompilations = targetResolver.compilationResolvers.filter { it.compilation.isMain() } val mainCompilations = targetResolver.compilationResolvers.filter { it.compilation.isMain() }
return if (mainCompilations.isNotEmpty()) { if (mainCompilations.isEmpty()) return null
//TODO[Ilya Goncharov] Hack for Mixed mode of legacy and IR tooling
if (mainCompilations.size == 2) { //TODO[Ilya Goncharov, Igor Iakovlev] Hack for Mixed mode of legacy and IR tooling and Wasm
check( var containsWasm = false
mainCompilations[0].compilation is KotlinJsIrCompilation var containsIrJs = false
|| mainCompilations[1].compilation is KotlinJsIrCompilation var containsLegacyJs = false
) { val errorMessage = "Cannot resolve project dependency $src -> $target." +
"Cannot resolve project dependency $src -> $target." + "Dependency to project with multiple js/wasm compilations is not supported yet."
"Dependency to project with multiple js compilation not supported yet."
check(mainCompilations.size <= 3) { errorMessage }
for (npmResolver in mainCompilations) {
when (val compilation = npmResolver.compilation) {
is KotlinJsIrCompilation -> {
if (compilation.platformType == KotlinPlatformType.wasm) {
check(!containsWasm) { errorMessage }
containsWasm = true
} else {
check(!containsIrJs) { errorMessage }
containsIrJs = true
}
}
else -> {
check(!containsLegacyJs) { errorMessage }
containsLegacyJs = true
} }
} }
}
check(containsWasm || containsIrJs || containsLegacyJs) { errorMessage }
if (mainCompilations.size > 2) { return mainCompilations
error(
"Cannot resolve project dependency $src -> $target." +
"Dependency to project with multiple js compilation not supported yet."
)
}
mainCompilations
} else null
} }
/** /**