diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index d50c06a2451..dde0a945584 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -192,7 +192,7 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() { } fun testKotlinJavaScriptProjectWithCustomOutputPaths() { - initProject(JS_STDLIB) + initProject(JS_STDLIB_WITHOUT_FACET) buildAllModules().assertSuccessful() checkOutputFilesList(File(workDir, "target")) @@ -243,6 +243,7 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() { fun testKotlinJavaScriptProjectWithDirectoryAsStdlib() { initProject() + setupKotlinJSFacet() val jslibJar = PathUtil.kotlinPathsForDistDirectory.jsStdLibJarPath val jslibDir = File(workDir, "KotlinJavaScript") try { diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt index 935c3542e6e..2e471188072 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt @@ -11,6 +11,10 @@ import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.idea.test.runAll +import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments +import org.jetbrains.kotlin.config.KotlinFacetSettings +import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension +import org.jetbrains.kotlin.platform.js.JsPlatforms import java.io.File import java.nio.file.Paths @@ -55,6 +59,7 @@ abstract class KotlinJpsBuildTestBase : AbstractKotlinJpsBuildTestCase() { NONE, JVM_MOCK_RUNTIME, JVM_FULL_RUNTIME, + JS_STDLIB_WITHOUT_FACET, JS_STDLIB, } @@ -66,7 +71,24 @@ abstract class KotlinJpsBuildTestBase : AbstractKotlinJpsBuildTestCase() { LibraryDependency.NONE -> {} LibraryDependency.JVM_MOCK_RUNTIME -> addKotlinMockRuntimeDependency() LibraryDependency.JVM_FULL_RUNTIME -> addKotlinStdlibDependency() - LibraryDependency.JS_STDLIB -> addKotlinJavaScriptStdlibDependency() + LibraryDependency.JS_STDLIB_WITHOUT_FACET -> addKotlinJavaScriptStdlibDependency() + LibraryDependency.JS_STDLIB -> { + addKotlinJavaScriptStdlibDependency() + setupKotlinJSFacet() + } + } + } + + protected fun setupKotlinJSFacet() { + myProject.modules.forEach { + val facet = KotlinFacetSettings() + facet.compilerArguments = K2JSCompilerArguments() + facet.targetPlatform = JsPlatforms.defaultJsPlatform + + it.container.setChild( + JpsKotlinFacetModuleExtension.KIND, + JpsKotlinFacetModuleExtension(facet) + ) } } diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt index 7457f3fe9dc..ac567512607 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt @@ -8,18 +8,14 @@ package org.jetbrains.kotlin.jps.targets import org.jetbrains.jps.incremental.ModuleBuildTarget import org.jetbrains.jps.model.java.JpsJavaClasspathKind import org.jetbrains.jps.model.java.JpsJavaExtensionService -import org.jetbrains.jps.model.library.JpsOrderRootType -import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.jps.build.KotlinBuilder import org.jetbrains.kotlin.jps.build.KotlinChunk import org.jetbrains.kotlin.jps.build.KotlinCompileContext import org.jetbrains.kotlin.jps.build.ModuleBuildTarget import org.jetbrains.kotlin.jps.model.platform import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider -import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.platform.impl.* -import org.jetbrains.kotlin.utils.LibraryUtils import kotlin.system.measureTimeMillis class KotlinTargetsIndex( @@ -32,7 +28,6 @@ internal class KotlinTargetsIndexBuilder internal constructor( private val uninitializedContext: KotlinCompileContext ) { private val byJpsModuleBuildTarget = mutableMapOf>() - private val isKotlinJsStdlibJar = mutableMapOf() private val chunks = mutableListOf() fun build(): KotlinTargetsIndex { @@ -132,10 +127,9 @@ internal class KotlinTargetsIndexBuilder internal constructor( return dependencies } - private fun ensureLoaded(target: ModuleBuildTarget): KotlinModuleBuildTarget<*> { return byJpsModuleBuildTarget.computeIfAbsent(target) { - val platform = target.module.platform?.idePlatformKind ?: detectTargetPlatform(target) + val platform = target.module.platform?.idePlatformKind ?: DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind when { platform.isCommon -> KotlinCommonModuleBuildTarget(uninitializedContext, target) @@ -145,35 +139,4 @@ internal class KotlinTargetsIndexBuilder internal constructor( } } } - - /** - * Compatibility for KT-14082 - * todo: remove when all projects migrated to facets - */ - private fun detectTargetPlatform(target: ModuleBuildTarget): IdePlatformKind<*> { - if (hasJsStdLib(target)) return JsIdePlatformKind - - return DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind - } - - private fun hasJsStdLib(target: ModuleBuildTarget): Boolean { - JpsJavaExtensionService.dependencies(target.module) - .recursively() - .exportedOnly() - .includedIn(JpsJavaClasspathKind.compile(target.isTests)) - .libraries - .forEach { library -> - for (root in library.getRoots(JpsOrderRootType.COMPILED)) { - val url = root.url - - val isKotlinJsLib = isKotlinJsStdlibJar.computeIfAbsent(url) { - LibraryUtils.isKotlinJavascriptStdLibrary(JpsPathUtil.urlToFile(url)) - } - - if (isKotlinJsLib) return true - } - } - - return false - } } \ No newline at end of file