diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 28b46b667f4..9d46b7d6255 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -195,7 +195,7 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() { } fun testKotlinJavaScriptProjectWithCustomOutputPaths() { - initProject(JS_STDLIB) + initProject(JS_STDLIB_WITHOUT_FACET) buildAllModules().assertSuccessful() checkOutputFilesList(File(workDir, "target")) @@ -246,6 +246,7 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() { fun testKotlinJavaScriptProjectWithDirectoryAsStdlib() { initProject() + setupKotlinJSFacet() val jslibJar = PathUtil.kotlinPathsForDistDirectory.jsStdLibJarPath val jslibDir = File(workDir, "KotlinJavaScript") try { diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt.201 b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt.201 index 82625bda9cf..e6a4d1ee9b9 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt.201 +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt.201 @@ -195,7 +195,7 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() { } fun testKotlinJavaScriptProjectWithCustomOutputPaths() { - initProject(JS_STDLIB) + initProject(JS_STDLIB_WITHOUT_FACET) buildAllModules().assertSuccessful() checkOutputFilesList(File(workDir, "target")) @@ -246,6 +246,7 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() { fun testKotlinJavaScriptProjectWithDirectoryAsStdlib() { initProject() + setupKotlinJSFacet() val jslibJar = PathUtil.kotlinPathsForDistDirectory.jsStdLibJarPath val jslibDir = File(workDir, "KotlinJavaScript") try { diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt index eae51a0d386..5b7a1e4862f 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt @@ -9,6 +9,10 @@ import com.intellij.openapi.util.io.FileUtil import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.util.JpsPathUtil +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 @@ -51,6 +55,7 @@ abstract class KotlinJpsBuildTestBase : AbstractKotlinJpsBuildTestCase() { NONE, JVM_MOCK_RUNTIME, JVM_FULL_RUNTIME, + JS_STDLIB_WITHOUT_FACET, JS_STDLIB, } @@ -62,7 +67,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-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt index 7457f3fe9dc..ac567512607 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt +++ b/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