diff --git a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt index f2ee6fdfaee..49f4afd7a8e 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt @@ -23,17 +23,17 @@ import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumerImpl import org.jetbrains.kotlin.incremental.js.IrTranslationResultValue import org.jetbrains.kotlin.incremental.js.TranslationResultValue import org.jetbrains.kotlin.incremental.storage.* +import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf +import org.jetbrains.kotlin.library.metadata.KlibMetadataSerializerProtocol import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull -import org.jetbrains.kotlin.metadata.js.JsProtoBuf import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.parentOrNull import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol import org.jetbrains.kotlin.serialization.deserialization.getClassId -import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import java.io.DataInput import java.io.DataOutput @@ -371,7 +371,7 @@ private class ProtoDataProvider(private val serializerProtocol: SerializerExtens // TODO: remove this method once AbstractJsProtoComparisonTest is fixed fun getProtoData(sourceFile: File, metadata: ByteArray): Map { val classes = hashMapOf() - val proto = ProtoBuf.PackageFragment.parseFrom(metadata, JsSerializerProtocol.extensionRegistry) + val proto = ProtoBuf.PackageFragment.parseFrom(metadata, KlibMetadataSerializerProtocol.extensionRegistry) val nameResolver = NameResolverImpl(proto.strings, proto.qualifiedNames) proto.class_List.forEach { @@ -380,7 +380,7 @@ fun getProtoData(sourceFile: File, metadata: ByteArray): Map } proto.`package`.apply { - val packageFqName = getExtensionOrNull(JsProtoBuf.packageFqName)?.let(nameResolver::getPackageFqName)?.let(::FqName) ?: FqName.ROOT + val packageFqName = getExtensionOrNull(KlibMetadataProtoBuf.packageFqName)?.let(nameResolver::getPackageFqName)?.let(::FqName) ?: FqName.ROOT val packagePartClassId = ClassId(packageFqName, Name.identifier(sourceFile.nameWithoutExtension.capitalizeAsciiOnly() + "Kt")) classes[packagePartClassId] = PackagePartProtoData(this, nameResolver, packageFqName) } diff --git a/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt b/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt index 6e817a3a0ec..f0b34855939 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt @@ -21,8 +21,10 @@ import org.jetbrains.kotlin.incremental.ProtoCompareGenerated.ProtoBufClassKind import org.jetbrains.kotlin.incremental.ProtoCompareGenerated.ProtoBufPackageKind import org.jetbrains.kotlin.incremental.storage.ProtoMapValue import org.jetbrains.kotlin.metadata.ProtoBuf +import org.jetbrains.kotlin.metadata.ProtoBuf.Type import org.jetbrains.kotlin.metadata.deserialization.Flags import org.jetbrains.kotlin.metadata.deserialization.NameResolver +import org.jetbrains.kotlin.metadata.deserialization.TypeTable import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.protobuf.MessageLite @@ -260,10 +262,40 @@ class DifferenceCalculatorForClass( isClassAffected = true areSubclassesAffected = true - val oldSupertypes = oldProto.supertypeList.map { oldNameResolver.getClassId(it.className).asSingleFqName() } - val newSupertypes = newProto.supertypeList.map { newNameResolver.getClassId(it.className).asSingleFqName() } + val oldTypeTable = oldProto.typeTableOrNull?.let { TypeTable(it) } + val newTypeTable = newProto.typeTableOrNull?.let { TypeTable(it) } + + fun getSupertypes(supertypeList: List, nameResolver: NameResolver): List { + return supertypeList.map { nameResolver.getClassId(it.className).asSingleFqName() } + } + + fun getSupertypesById(supertypeIdList: List, typeTable: TypeTable?, nameResolver: NameResolver): List { + return supertypeIdList.mapNotNull { id -> + typeTable?.get(id)?.className?.let { + nameResolver.getClassId(it).asSingleFqName() + } + } + } + + val oldSupertypes = getSupertypes(oldProto.supertypeList, oldNameResolver) + val newSupertypes = getSupertypes(newProto.supertypeList, newNameResolver) + + val oldSupertypesById = getSupertypesById( + oldProto.supertypeIdList, + oldTypeTable, + oldNameResolver + ) + + val newSupertypesById = getSupertypesById( + newProto.supertypeIdList, + newTypeTable, + newNameResolver + ) + val changed = (oldSupertypes union newSupertypes) subtract (oldSupertypes intersect newSupertypes) - changedSupertypes.addAll(changed) + val changedById = (oldSupertypesById union newSupertypesById) subtract (oldSupertypesById intersect newSupertypesById) + val elements: Set = changed + changedById + changedSupertypes.addAll(elements) } ProtoBufClassKind.JVM_EXT_CLASS_MODULE_NAME, ProtoBufClassKind.JS_EXT_CLASS_CONTAINING_FILE_ID -> { diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibCompilerRunnerTest.kt b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibCompilerRunnerTest.kt index 0387fa8abbd..da8778f4dab 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibCompilerRunnerTest.kt +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibCompilerRunnerTest.kt @@ -2,15 +2,17 @@ package org.jetbrains.kotlin.incremental import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.incremental.testingUtils.BuildLogFinder +import org.jetbrains.kotlin.incremental.utils.TestCompilationResult +import org.jetbrains.kotlin.incremental.utils.TestICReporter +import org.jetbrains.kotlin.incremental.utils.TestMessageCollector import java.io.File -abstract class AbstractIncrementalK1JsKlibCompilerRunnerTest : AbstractIncrementalK1JsLegacyCompilerRunnerTest() { +abstract class AbstractIncrementalK1JsKlibCompilerRunnerTest : AbstractIncrementalCompilerRunnerTestBase() { override fun createCompilerArguments(destinationDir: File, testDir: File): K2JSCompilerArguments = K2JSCompilerArguments().apply { libraries = "build/js-ir-runtime/full-runtime.klib" outputDir = destinationDir.path moduleName = testDir.name - outputFile = null sourceMap = false irProduceKlibDir = false irProduceKlibFile = true @@ -19,7 +21,22 @@ abstract class AbstractIncrementalK1JsKlibCompilerRunnerTest : AbstractIncrement } override val buildLogFinder: BuildLogFinder - get() = super.buildLogFinder.copy(isKlibEnabled = true) + get() = super.buildLogFinder.copy( + isKlibEnabled = true, + isJsEnabled = true, + isScopeExpansionEnabled = scopeExpansionMode != CompileScopeExpansionMode.NEVER, + ) + + override fun make(cacheDir: File, outDir: File, sourceRoots: Iterable, args: K2JSCompilerArguments): TestCompilationResult { + val reporter = TestICReporter() + val messageCollector = TestMessageCollector() + makeJsIncrementally(cacheDir, sourceRoots, args, buildHistoryFile(cacheDir), messageCollector, reporter, scopeExpansionMode) + return TestCompilationResult(reporter, messageCollector) + } + + protected open val scopeExpansionMode = CompileScopeExpansionMode.NEVER + + override fun failFile(testDir: File): File = testDir.resolve("fail_js_legacy.txt") } abstract class AbstractIncrementalK1JsKlibCompilerWithScopeExpansionRunnerTest : AbstractIncrementalK1JsKlibCompilerRunnerTest() { diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsLegacyCompilerRunnerWithFriendModulesDisabledTest.kt b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibCompilerRunnerWithFriendModulesDisabledTest.kt similarity index 87% rename from compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsLegacyCompilerRunnerWithFriendModulesDisabledTest.kt rename to compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibCompilerRunnerWithFriendModulesDisabledTest.kt index 7d18fd5a719..125e9686492 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsLegacyCompilerRunnerWithFriendModulesDisabledTest.kt +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibCompilerRunnerWithFriendModulesDisabledTest.kt @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.incremental import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import java.io.File -abstract class AbstractIncrementalK1JsLegacyCompilerRunnerWithFriendModulesDisabledTest : AbstractIncrementalK1JsLegacyCompilerRunnerTest() { +abstract class AbstractIncrementalK1JsKlibCompilerRunnerWithFriendModulesDisabledTest : AbstractIncrementalK1JsKlibCompilerRunnerTest() { override fun createCompilerArguments(destinationDir: File, testDir: File): K2JSCompilerArguments = super.createCompilerArguments(destinationDir, testDir).apply { friendModulesDisabled = true diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsLegacyMultiplatformJsCompilerRunnerTest.kt b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibMultiplatformJsCompilerRunnerTest.kt similarity index 88% rename from compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsLegacyMultiplatformJsCompilerRunnerTest.kt rename to compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibMultiplatformJsCompilerRunnerTest.kt index 541d0065d6a..8784c70b3bf 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsLegacyMultiplatformJsCompilerRunnerTest.kt +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsKlibMultiplatformJsCompilerRunnerTest.kt @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.incremental import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import java.io.File -abstract class AbstractIncrementalK1JsLegacyMultiplatformJsCompilerRunnerTest : AbstractIncrementalK1JsLegacyCompilerRunnerTest() { +abstract class AbstractIncrementalK1JsKlibMultiplatformJsCompilerRunnerTest : AbstractIncrementalK1JsKlibCompilerRunnerTest() { override fun createCompilerArguments(destinationDir: File, testDir: File): K2JSCompilerArguments { return super.createCompilerArguments(destinationDir, testDir).apply { multiPlatform = true diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsLegacyCompilerRunnerTest.kt b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsLegacyCompilerRunnerTest.kt deleted file mode 100644 index 76a4668639d..00000000000 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalK1JsLegacyCompilerRunnerTest.kt +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.incremental - -import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments -import org.jetbrains.kotlin.incremental.testingUtils.BuildLogFinder -import org.jetbrains.kotlin.incremental.utils.TestCompilationResult -import org.jetbrains.kotlin.incremental.utils.TestICReporter -import org.jetbrains.kotlin.incremental.utils.TestMessageCollector -import java.io.File - -abstract class AbstractIncrementalK1JsLegacyCompilerRunnerTest : AbstractIncrementalCompilerRunnerTestBase() { - override fun make(cacheDir: File, outDir: File, sourceRoots: Iterable, args: K2JSCompilerArguments): TestCompilationResult { - val reporter = TestICReporter() - val messageCollector = TestMessageCollector() - makeJsIncrementally(cacheDir, sourceRoots, args, buildHistoryFile(cacheDir), messageCollector, reporter, scopeExpansionMode) - return TestCompilationResult(reporter, messageCollector) - } - - override val buildLogFinder: BuildLogFinder - get() = super.buildLogFinder.copy( - isJsEnabled = true, - isScopeExpansionEnabled = scopeExpansionMode != CompileScopeExpansionMode.NEVER - ) - - override fun createCompilerArguments(destinationDir: File, testDir: File): K2JSCompilerArguments = - K2JSCompilerArguments().apply { - outputFile = File(destinationDir, "${testDir.name}.js").path - sourceMap = true - metaInfo = true - forceDeprecatedLegacyCompilerUsage = true - languageVersion = "1.9" - } - - protected open val scopeExpansionMode = CompileScopeExpansionMode.NEVER - - override fun failFile(testDir: File): File = testDir.resolve("fail_js_legacy.txt") -} \ No newline at end of file diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsLegacyCompilerRunnerWithFriendModulesDisabledTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsKlibCompilerRunnerWithFriendModulesDisabledTestGenerated.java similarity index 90% rename from compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsLegacyCompilerRunnerWithFriendModulesDisabledTestGenerated.java rename to compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsKlibCompilerRunnerWithFriendModulesDisabledTestGenerated.java index 05ccf6bed54..80becc156d1 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsLegacyCompilerRunnerWithFriendModulesDisabledTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsKlibCompilerRunnerWithFriendModulesDisabledTestGenerated.java @@ -20,7 +20,7 @@ import java.util.regex.Pattern; @TestMetadata("jps/jps-plugin/testData/incremental/js/friendsModuleDisabled") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) -public class IncrementalK1JsLegacyCompilerRunnerWithFriendModulesDisabledTestGenerated extends AbstractIncrementalK1JsLegacyCompilerRunnerWithFriendModulesDisabledTest { +public class IncrementalK1JsKlibCompilerRunnerWithFriendModulesDisabledTestGenerated extends AbstractIncrementalK1JsKlibCompilerRunnerWithFriendModulesDisabledTest { private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); } diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsLegacyMultiplatformJsCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsKlibMultiplatformJsCompilerRunnerTestGenerated.java similarity index 92% rename from compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsLegacyMultiplatformJsCompilerRunnerTestGenerated.java rename to compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsKlibMultiplatformJsCompilerRunnerTestGenerated.java index 7c2fdc30a91..aad8097fb0c 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsLegacyMultiplatformJsCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalK1JsKlibMultiplatformJsCompilerRunnerTestGenerated.java @@ -20,7 +20,7 @@ import java.util.regex.Pattern; @TestMetadata("jps/jps-plugin/testData/incremental/mpp/allPlatforms") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) -public class IncrementalK1JsLegacyMultiplatformJsCompilerRunnerTestGenerated extends AbstractIncrementalK1JsLegacyMultiplatformJsCompilerRunnerTest { +public class IncrementalK1JsKlibMultiplatformJsCompilerRunnerTestGenerated extends AbstractIncrementalK1JsKlibMultiplatformJsCompilerRunnerTest { private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); } @@ -42,7 +42,7 @@ public class IncrementalK1JsLegacyMultiplatformJsCompilerRunnerTestGenerated ext @TestMetadata("jps/jps-plugin/testData/incremental/mpp/allPlatforms/touchActual") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) - public static class TouchActual extends AbstractIncrementalK1JsLegacyMultiplatformJsCompilerRunnerTest { + public static class TouchActual extends AbstractIncrementalK1JsKlibMultiplatformJsCompilerRunnerTest { private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); } @@ -55,7 +55,7 @@ public class IncrementalK1JsLegacyMultiplatformJsCompilerRunnerTestGenerated ext @TestMetadata("jps/jps-plugin/testData/incremental/mpp/allPlatforms/touchExpect") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) - public static class TouchExpect extends AbstractIncrementalK1JsLegacyMultiplatformJsCompilerRunnerTest { + public static class TouchExpect extends AbstractIncrementalK1JsKlibMultiplatformJsCompilerRunnerTest { private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); } diff --git a/compiler/testData/cli/js/kotlinPackage.args b/compiler/testData/cli/js/kotlinPackage.args index 3f214b98aaf..1da559d7098 100644 --- a/compiler/testData/cli/js/kotlinPackage.args +++ b/compiler/testData/cli/js/kotlinPackage.args @@ -1,5 +1,9 @@ $TESTDATA_DIR$/../kotlinPackage.kt --no-stdlib --Xforce-deprecated-legacy-compiler-usage --output -$TEMP_DIR$/out.js +-Xir-produce-klib-dir +-Xir-only +-libraries +$STDLIB_JS$ +-ir-output-dir +$TEMP_DIR$ +-ir-output-name +out diff --git a/compiler/testData/integration/ant/js/simpleWithoutStdlibAndFolderAsAnotherLib/build.xml b/compiler/testData/integration/ant/js/simpleWithoutStdlibAndFolderAsAnotherLib/build.xml index 2e034578eb5..96f85f36dcb 100644 --- a/compiler/testData/integration/ant/js/simpleWithoutStdlibAndFolderAsAnotherLib/build.xml +++ b/compiler/testData/integration/ant/js/simpleWithoutStdlibAndFolderAsAnotherLib/build.xml @@ -5,10 +5,6 @@ - - - - diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index f73cb2a906c..a79cf0ae652 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -146,7 +146,7 @@ fun main(args: Array) { model("incremental/js", extension = null, excludeParentDirs = true) } - testClass { + testClass { model("incremental/js/friendsModuleDisabled", extension = null, recursive = false) } @@ -154,7 +154,7 @@ fun main(args: Array) { model("incremental/mpp/allPlatforms", extension = null, excludeParentDirs = true) model("incremental/mpp/jvmOnlyK1", extension = null, excludeParentDirs = true) } - testClass { + testClass { model("incremental/mpp/allPlatforms", extension = null, excludeParentDirs = true) } //TODO: write a proper k2 multiplatform test runner KT-63183 diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt b/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt index 62d9080f5f7..5dcad83ea43 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt @@ -181,10 +181,12 @@ private fun readV2AndLaterConfig( } productionOutputPath = element.getChild("productionOutputPath")?.let { (it.content.firstOrNull() as? Text)?.textTrim?.let(FileUtilRt::toSystemDependentName) - } ?: (compilerArguments as? K2JSCompilerArguments)?.outputFile + } ?: (compilerArguments as? K2JSCompilerArguments)?.outputDir + ?: (compilerArguments as? K2JSCompilerArguments)?.outputFile testOutputPath = element.getChild("testOutputPath")?.let { (it.content.firstOrNull() as? Text)?.textTrim?.let(FileUtilRt::toSystemDependentName) - } ?: (compilerArguments as? K2JSCompilerArguments)?.outputFile + } ?: (compilerArguments as? K2JSCompilerArguments)?.outputDir + ?: (compilerArguments as? K2JSCompilerArguments)?.outputFile } } @@ -239,7 +241,7 @@ fun CommonCompilerArguments.convertPathsToSystemIndependent() { } is K2JSCompilerArguments -> { - outputFile = outputFile?.let(FileUtilRt::toSystemIndependentName) + outputDir = (outputDir ?: outputFile)?.let(FileUtilRt::toSystemIndependentName) libraries = libraries?.let(FileUtilRt::toSystemIndependentName) } @@ -354,14 +356,16 @@ private fun KotlinFacetSettings.writeConfig(element: Element) { if (pureKotlinSourceFolders.isNotEmpty()) { element.setAttribute("pureKotlinSourceFolders", pureKotlinSourceFolders.joinToString(";")) } - productionOutputPath?.let { - if (it != (compilerArguments as? K2JSCompilerArguments)?.outputFile) { - element.addContent(Element("productionOutputPath").apply { addContent(FileUtilRt.toSystemIndependentName(it)) }) + (compilerArguments as? K2JSCompilerArguments)?.let { compilerArguments -> + productionOutputPath?.let { + if (it != compilerArguments.outputDir && it != compilerArguments.outputFile) { + element.addContent(Element("productionOutputPath").apply { addContent(FileUtilRt.toSystemIndependentName(it)) }) + } } - } - testOutputPath?.let { - if (it != (compilerArguments as? K2JSCompilerArguments)?.outputFile) { - element.addContent(Element("testOutputPath").apply { addContent(FileUtilRt.toSystemIndependentName(it)) }) + testOutputPath?.let { + if (it != compilerArguments.outputDir && it != compilerArguments.outputFile) { + element.addContent(Element("testOutputPath").apply { addContent(FileUtilRt.toSystemIndependentName(it)) }) + } } } compilerSettings?.copyOf()?.let { diff --git a/jps/jps-common/test/CompilerArgumentsContentProspectorTest.kt b/jps/jps-common/test/CompilerArgumentsContentProspectorTest.kt index 72c85453557..ca8a1144728 100644 --- a/jps/jps-common/test/CompilerArgumentsContentProspectorTest.kt +++ b/jps/jps-common/test/CompilerArgumentsContentProspectorTest.kt @@ -237,7 +237,8 @@ class CompilerArgumentsContentProspectorTest { K2JSCompilerArguments::wasm ) private val k2JSCompilerArgumentsStringProperties = commonCompilerArgumentsStringProperties + listOf( - K2JSCompilerArguments::outputFile, + K2JSCompilerArguments::outputDir, + K2JSCompilerArguments::moduleName, K2JSCompilerArguments::libraries, K2JSCompilerArguments::sourceMapPrefix, K2JSCompilerArguments::sourceMapBaseDirs, diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt index fa3bc22bf32..a4dd4b7cad1 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt @@ -99,9 +99,6 @@ abstract class AbstractJvmLookupTrackerTest : AbstractLookupTrackerTest() { } abstract class AbstractJsKlibLookupTrackerTest : AbstractJsLookupTrackerTest() { - override val jsStdlibFile: File - get() = File(System.getProperty("jps.testData.js-ir-runtime") ?: "build/js-ir-runtime/full-runtime.klib") - override fun configureAdditionalArgs(args: K2JSCompilerArguments) { args.irProduceKlibDir = true args.irOnly = true @@ -157,7 +154,6 @@ abstract class AbstractJsLookupTrackerTest : AbstractLookupTrackerTest() { get() = PathUtil.kotlinPathsForDistDirectoryForTests.jsStdLibKlibPath protected open fun configureAdditionalArgs(args: K2JSCompilerArguments) { - args.outputFile = File(outDir, "out.js").canonicalPath } override fun runCompiler(filesToCompile: Iterable, env: JpsCompilerEnvironment): Any? { @@ -166,7 +162,6 @@ abstract class AbstractJsLookupTrackerTest : AbstractLookupTrackerTest() { libraries = libPaths.joinToString(File.pathSeparator) reportOutputFiles = true freeArgs = filesToCompile.map { it.canonicalPath } - forceDeprecatedLegacyCompilerUsage = true useFirLT = false } configureAdditionalArgs(args) 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 e0ef918744f..a494ca470c7 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 @@ -90,9 +90,7 @@ abstract class KotlinJpsBuildTestBase : AbstractKotlinJpsBuildTestCase() { protected fun setupKotlinJSFacet() { myProject.modules.forEach { val facet = KotlinFacetSettings() - facet.compilerArguments = K2JSCompilerArguments().apply { - forceDeprecatedLegacyCompilerUsage = true - } + facet.compilerArguments = K2JSCompilerArguments() facet.targetPlatform = JsPlatforms.defaultJsPlatform it.container.setChild( diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/dependeciestxt/ModulesTxt.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/dependeciestxt/ModulesTxt.kt index fd563d05cb7..9e883d61f3c 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/dependeciestxt/ModulesTxt.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/dependeciestxt/ModulesTxt.kt @@ -264,7 +264,6 @@ class ModulesTxtBuilder { "js" -> settings.compilerArguments = K2JSCompilerArguments().also { settings.targetPlatform = JsPlatforms.defaultJsPlatform - it.forceDeprecatedLegacyCompilerUsage = true } "native" -> settings.compilerArguments = K2NativeCompilerArguments().also { settings.targetPlatform = NativePlatforms.unspecifiedNativePlatform } diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/AbstractJsProtoComparisonTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/AbstractJsProtoComparisonTest.kt index b5604496c61..27a5f88f4c7 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/AbstractJsProtoComparisonTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/AbstractJsProtoComparisonTest.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.jps.incremental -import org.jetbrains.kotlin.cli.common.CompilerSystemProperties import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl @@ -27,10 +26,15 @@ import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumerImpl import org.jetbrains.kotlin.incremental.utils.TestMessageCollector import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.test.kotlinPathsForDistDirectoryForTests +import org.jetbrains.kotlin.utils.PathUtil import org.junit.Assert import java.io.File abstract class AbstractJsProtoComparisonTest : AbstractProtoComparisonTest() { + protected open val jsStdlibFile: File + get() = PathUtil.kotlinPathsForDistDirectoryForTests.jsStdLibKlibPath + override fun expectedOutputFile(testDir: File): File = File(testDir, "result-js.out") .takeIf { it.exists() } @@ -47,11 +51,13 @@ abstract class AbstractJsProtoComparisonTest : AbstractProtoComparisonTest c [include] - -pJs [compilationAndSourceSetHolder, js] -pJs -> c [include] \ No newline at end of file +pJvm -> c [include] \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError/build.log b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError/build.log index 5a5c9d57445..4c9737ed2f6 100644 --- a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError/build.log +++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError/build.log @@ -1,34 +1,6 @@ ================ Step #1 make compilation fail ================= Building c -Building pJs -Cleaning output files: - out/production/pJs/pJs.js - out/production/pJs/pJs.meta.js - out/production/pJs/pJs/root-package.kjsm -End of files -Complementary files. Marked as dirty by Kotlin: - pJs/src/fJs.kt -Compiling files: - c/src/f.kt - pJs/src/fJs.kt -End of files -Exit code: ABORT ------------------------------------------- -COMPILATION FAILED -[pJs] Expecting a top level declaration -[pJs] Expecting a top level declaration - -================ Step #2 fix error ================= - -Building c -Building pJs -Compiling files: - c/src/f.kt - pJs/src/fJs.kt -End of files -Exit code: OK ------------------------------------------- Building pJvm Cleaning output files: out/production/pJvm/META-INF/pJvm.kotlin_module @@ -42,5 +14,17 @@ Compiling files: c/src/f.kt pJvm/src/fJvm.kt End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED + +================ Step #2 fix error ================= + +Building c +Building pJvm +Compiling files: + c/src/f.kt + pJvm/src/fJvm.kt +End of files Exit code: OK ------------------------------------------ \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/_dependencies.txt b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/_dependencies.txt index cc3166eab6f..4d7c19bc98d 100644 --- a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/_dependencies.txt +++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/_dependencies.txt @@ -1,7 +1,4 @@ c [sourceSetHolder] pJvm [compilationAndSourceSetHolder, jvm] -pJvm -> c [include] - -pJs [compilationAndSourceSetHolder, js] -pJs -> c [include] \ No newline at end of file +pJvm -> c [include] \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/build.log b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/build.log index 95b7cff5177..b9889c3a345 100644 --- a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/build.log +++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/build.log @@ -1,41 +1,6 @@ ================ Step #1 make compilation fail ================= Building c -Building pJs -Cleaning output files: - out/production/pJs/pJs.js - out/production/pJs/pJs.meta.js - out/production/pJs/pJs/root-package.kjsm -End of files -Complementary files. Marked as dirty by Kotlin: - c/src/g.kt - pJs/src/fg.kt -Compiling files: - c/src/f.kt - c/src/g.kt - pJs/src/fg.kt -End of files -Exit code: ABORT ------------------------------------------- -COMPILATION FAILED -[pJs] Expecting a top level declaration -[pJs] Expecting a top level declaration - -================ Step #2 fix error ================= - -Building c -Building pJs -Complementary files. Marked as dirty by Kotlin: - c/src/g.kt -Compiling files: - c/src/f.kt - c/src/g.kt - pJs/src/fg.kt -End of files -Exit code: OK ------------------------------------------- -ChunkBuildStarted. Marked as dirty by Kotlin: - c/src/g.kt Building pJvm Cleaning output files: out/production/pJvm/META-INF/pJvm.kotlin_module @@ -51,5 +16,20 @@ Compiling files: c/src/g.kt pJvm/src/fg.kt End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED + +================ Step #2 fix error ================= + +Building c +Building pJvm +Complementary files. Marked as dirty by Kotlin: + c/src/g.kt +Compiling files: + c/src/f.kt + c/src/g.kt + pJvm/src/fg.kt +End of files Exit code: OK ------------------------------------------ \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/instantExecutionToJs/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/instantExecutionToJs/build.gradle index a58de639a31..84d4d72a991 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/instantExecutionToJs/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/instantExecutionToJs/build.gradle @@ -21,7 +21,8 @@ dependencies { } tasks.named("compileKotlinJs", Kotlin2JsCompile) { - it.kotlinOptions.outputFile = "${buildDir}/kotlin2js/main/module.js" + it.destinationDirectory = new File(buildDir, "kotlin2js/main") + it.kotlinOptions.moduleName = "module" it.kotlinOptions.freeCompilerArgs += ["-Xir-produce-klib-dir", "-Xir-only"] } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProject/libraryProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProject/libraryProject/build.gradle index 3ecfabd0e9c..055643ee0a2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProject/libraryProject/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProject/libraryProject/build.gradle @@ -29,7 +29,8 @@ artifacts { def outDir = "${buildDir}/kotlin2js/main/" -compileKotlin2Js.kotlinOptions.outputFile = outDir + "test-library.js" +compileKotlin2Js.destinationDirectory = new File(outDir) +compileKotlin2Js.kotlinOptions.moduleName = "test-library" compileKotlin2Js.kotlinOptions.freeCompilerArgs += ["-Xir-produce-klib-dir"] diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProject/mainProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProject/mainProject/build.gradle index 1f5081bc708..3abc31fb8c8 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProject/mainProject/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProject/mainProject/build.gradle @@ -21,7 +21,8 @@ dependencies { } compileKotlin2Js.kotlinOptions.sourceMap = true -compileKotlin2Js.kotlinOptions.outputFile = "${projectDir}/web/js/app.js" +compileKotlin2Js.destinationDirectory = new File(projectDir, "web/js") +compileKotlin2Js.kotlinOptions.moduleName = "app" compileKotlin2Js.kotlinOptions.suppressWarnings = true compileKotlin2Js.kotlinOptions.verbose = true diff --git a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java index 6bff8bf77ff..31afba4ac6e 100644 --- a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java +++ b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java @@ -100,9 +100,7 @@ public class K2JSCompilerMojo extends KotlinCompileMojoBase sourceRoots) throws MojoExecutionException { - arguments.setOutputFile(outputFile); - arguments.setNoStdlib(true); - arguments.setMetaInfo(metaInfo); + arguments.setOutputDir(new File(outputFile).getParent()); arguments.setModuleKind(moduleKind); arguments.setMain(main); arguments.setIrOnly(useIrBackend); diff --git a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinTestJSCompilerMojo.java b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinTestJSCompilerMojo.java index ca3a53a44e3..88ae9beb693 100644 --- a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinTestJSCompilerMojo.java +++ b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinTestJSCompilerMojo.java @@ -86,8 +86,7 @@ public class KotlinTestJSCompilerMojo extends K2JSCompilerMojo { super.configureSpecificCompilerArguments(arguments, sourceRoots); - arguments.setOutputFile(outputFile); - arguments.setMetaInfo(metaInfo); + arguments.setOutputDir(new File(outputFile).getParent()); } @Override diff --git a/plugins/atomicfu/atomicfu-runtime/build.gradle.kts b/plugins/atomicfu/atomicfu-runtime/build.gradle.kts index 3b48ea1a967..35005e59bc0 100644 --- a/plugins/atomicfu/atomicfu-runtime/build.gradle.kts +++ b/plugins/atomicfu/atomicfu-runtime/build.gradle.kts @@ -45,8 +45,4 @@ publishing { } } -configureDefaultPublishing() - -tasks.withType { - kotlinOptions.freeCompilerArgs += "-Xforce-deprecated-legacy-compiler-usage" -} \ No newline at end of file +configureDefaultPublishing() \ No newline at end of file