diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt index 3b849c9496b..ea104b1fee5 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.ir.backend.js.ic import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.ir.backend.js.* import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsIrFragmentAndBinaryAst @@ -239,9 +240,9 @@ class CacheUpdater( return exportedSymbols } - private fun resolveFakeOverrideInlineFunction(symbol: IrSymbol): IdSignature? { + private fun resolveFakeOverrideFunction(symbol: IrSymbol): IdSignature? { return (symbol.owner as? IrSimpleFunction)?.let { overridable -> - if (overridable.isFakeOverride && overridable.isInline) { + if (overridable.isFakeOverride) { overridable.resolveFakeOverride()?.symbol?.signature } else { null @@ -249,6 +250,47 @@ class CacheUpdater( } } + private fun collectImplementedSymbol(deserializedSymbols: Map): Map { + return buildMap(deserializedSymbols.size) { + for ((signature, symbol) in deserializedSymbols) { + put(signature, symbol) + + fun addSymbol(decl: T): Boolean where T : IrDeclarationWithVisibility, T : IrSymbolOwner { + when (decl.visibility) { + DescriptorVisibilities.LOCAL -> return false + DescriptorVisibilities.PRIVATE -> return false + DescriptorVisibilities.PRIVATE_TO_THIS -> return false + } + + val sig = decl.symbol.signature + if (sig != null && sig !in deserializedSymbols) { + return put(sig, decl.symbol) == null + } + return false + } + + fun addNestedDeclarations(irClass: IrClass) { + for (decl in irClass.declarations) { + when (decl) { + is IrSimpleFunction -> addSymbol(decl) + is IrProperty -> { + decl.getter?.let(::addSymbol) + decl.setter?.let(::addSymbol) + } + is IrClass -> { + if (addSymbol(decl)) { + addNestedDeclarations(decl) + } + } + } + } + } + + (symbol.owner as? IrClass)?.let(::addNestedDeclarations) + } + } + } + private fun rebuildDirtySourceMetadata( jsIrLinker: JsIrLinker, loadedFragments: Map, @@ -264,16 +306,19 @@ class CacheUpdater( val libSrcFile = KotlinSourceFile(fileDeserializer.file) val reachableSignatures = fileDeserializer.symbolDeserializer.signatureDeserializer.signatureToIndexMapping() - val allImplementedSymbols = fileDeserializer.symbolDeserializer.deserializedSymbols val maybeImportedSignatures = reachableSignatures.keys.toMutableSet() - for ((signature, symbol) in allImplementedSymbols) { - if (signature in reachableSignatures) { + val implementedSymbols = collectImplementedSymbol(fileDeserializer.symbolDeserializer.deserializedSymbols) + for ((signature, symbol) in implementedSymbols) { + var symbolCanBeExported = maybeImportedSignatures.remove(signature) + resolveFakeOverrideFunction(symbol)?.let { resolvedSignature -> + if (resolvedSignature !in implementedSymbols) { + maybeImportedSignatures.add(resolvedSignature) + } + symbolCanBeExported = true + } + if (symbolCanBeExported) { signatureHashCalculator.addHashForSignatureIfNotExist(signature, symbol) idSignatureToFile[signature] = lib to libSrcFile - maybeImportedSignatures.remove(signature) - - val resolvedSignature = resolveFakeOverrideInlineFunction(symbol) ?: continue - maybeImportedSignatures.add(resolvedSignature) } } diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/InvalidationTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/InvalidationTestGenerated.java index 7248ece8d7b..594b8dcfe7f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/InvalidationTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/InvalidationTestGenerated.java @@ -80,6 +80,11 @@ public class InvalidationTestGenerated extends AbstractInvalidationTest { runTest("js/js.translator/testData/incremental/invalidation/exportsThroughInlineFunction/"); } + @TestMetadata("fakeOverrideClassFunctionQualifiers") + public void testFakeOverrideClassFunctionQualifiers() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/"); + } + @TestMetadata("fakeOverrideInheritance") public void testFakeOverrideInheritance() throws Exception { runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/"); @@ -100,6 +105,11 @@ public class InvalidationTestGenerated extends AbstractInvalidationTest { runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineProperty/"); } + @TestMetadata("fakeOverrideInterfaceFunctionQualifiers") + public void testFakeOverrideInterfaceFunctionQualifiers() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/"); + } + @TestMetadata("fastPath1") public void testFastPath1() throws Exception { runTest("js/js.translator/testData/incremental/invalidation/fastPath1/"); diff --git a/js/js.translator/testData/incremental/invalidation/class/lib1/module.info b/js/js.translator/testData/incremental/invalidation/class/lib1/module.info index 4b419b9c275..c8ac5b0261c 100644 --- a/js/js.translator/testData/incremental/invalidation/class/lib1/module.info +++ b/js/js.translator/testData/incremental/invalidation/class/lib1/module.info @@ -6,14 +6,11 @@ STEP 1: modifications: U : l1.1_simple_class.kt -> l1.kt modified ir: l1.kt - updated exports: l1.kt STEP 2: modifications: U : l1.2_inline_class.kt -> l1.kt modified ir: l1.kt - updated exports: l1.kt STEP 3: modifications: U : l1.1_simple_class.kt -> l1.kt modified ir: l1.kt - updated exports: l1.kt diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.0.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.0.kt new file mode 100644 index 00000000000..00cbb783e5d --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.0.kt @@ -0,0 +1,3 @@ +open class Module2OpenClass { + public suspend fun testFunction2() = 2 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.1.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.1.kt new file mode 100644 index 00000000000..1cfe06d7e53 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.1.kt @@ -0,0 +1,4 @@ +open class Module2OpenClass { + public suspend fun testFunction2() = 2 + public fun testFunction22() = 22 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.10.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.10.kt new file mode 100644 index 00000000000..531ee2d85b3 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.10.kt @@ -0,0 +1,2 @@ +open class Module2OpenClass { +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.2.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.2.kt new file mode 100644 index 00000000000..b80abd0d5cb --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.2.kt @@ -0,0 +1,4 @@ +open class Module2OpenClass { + public fun testFunction2() = 2 + public fun testFunction22() = 22 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.3.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.3.kt new file mode 100644 index 00000000000..66f3fbd1ce5 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.3.kt @@ -0,0 +1,7 @@ +open class Module2OpenClass { + public fun testFunction2() = 2 + public fun testFunction22() = 22 + + public val testField222: Int + get() = 222 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.5.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.5.kt new file mode 100644 index 00000000000..00e364c56dc --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.5.kt @@ -0,0 +1,7 @@ +open class Module2OpenClass { + public fun testFunction2() = 20 + public fun testFunction22() = 220 + + public val testField222: Int + get() = 2220 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.6.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.6.kt new file mode 100644 index 00000000000..a6448438bfe --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.6.kt @@ -0,0 +1,7 @@ +open class Module2OpenClass { + public fun testFunction2() = 20 + inline public fun testFunction22() = 220 + + public val testField222: Int + get() = 2220 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.7.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.7.kt new file mode 100644 index 00000000000..774735f8ef9 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.7.kt @@ -0,0 +1,7 @@ +open class Module2OpenClass { + public fun testFunction2() = 20 + inline public fun testFunction22() = 220 + + inline public val testField222: Int + get() = 2220 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.8.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.8.kt new file mode 100644 index 00000000000..179729c515c --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.8.kt @@ -0,0 +1,7 @@ +open class Module2OpenClass { + public fun testFunction2() = 20 + inline public fun testFunction22() = 2201 + + inline public val testField222: Int + get() = 2220 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.9.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.9.kt new file mode 100644 index 00000000000..4786a2de464 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/l1.9.kt @@ -0,0 +1,7 @@ +open class Module2OpenClass { + public fun testFunction2() = 20 + inline public fun testFunction22() = 2201 + + inline public val testField222: Int + get() = 22201 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/module.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/module.info new file mode 100644 index 00000000000..8c126603c0a --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib1/module.info @@ -0,0 +1,48 @@ +STEP 0: + modifications: + U : l1.0.kt -> l1.kt + added file: l1.kt +STEP 1: + modifications: + U : l1.1.kt -> l1.kt + modified ir: l1.kt + updated exports: l1.kt +STEP 2: + modifications: + U : l1.2.kt -> l1.kt + modified ir: l1.kt +STEP 3: + modifications: + U : l1.3.kt -> l1.kt + modified ir: l1.kt +STEP 4: + updated exports: l1.kt +STEP 5: + modifications: + U : l1.5.kt -> l1.kt + modified ir: l1.kt +STEP 6: + modifications: + U : l1.6.kt -> l1.kt + modified ir: l1.kt +STEP 7: + modifications: + U : l1.7.kt -> l1.kt + modified ir: l1.kt +STEP 8: + modifications: + U : l1.8.kt -> l1.kt + modified ir: l1.kt +STEP 9: + modifications: + U : l1.9.kt -> l1.kt + modified ir: l1.kt +STEP 10: + modifications: + U : l1.10.kt -> l1.kt + modified ir: l1.kt + updated exports: l1.kt +STEP 11: + modifications: + U : l1.0.kt -> l1.kt + modified ir: l1.kt diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib2/l2.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib2/l2.kt new file mode 100644 index 00000000000..08274fa6dfb --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib2/l2.kt @@ -0,0 +1,3 @@ +class Module1Class: Module2OpenClass() { + fun testFunction1() = 1 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib2/module.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib2/module.info new file mode 100644 index 00000000000..f770a10c220 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/lib2/module.info @@ -0,0 +1,25 @@ +STEP 0: + dependencies: lib1 + added file: l2.kt +STEP 1: + dependencies: lib1 + updated exports: l2.kt +STEP 2: + dependencies: lib1 + updated imports: l2.kt +STEP 3: + dependencies: lib1 +STEP 4: + dependencies: lib1 + updated exports: l2.kt +STEP 5: + dependencies: lib1 +STEP 6..9: + dependencies: lib1 + updated imports: l2.kt +STEP 10: + dependencies: lib1 + updated imports: l2.kt + updated exports: l2.kt +STEP 11: + dependencies: lib1 diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/m.0.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/m.0.kt new file mode 100644 index 00000000000..d591c0076a1 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/m.0.kt @@ -0,0 +1,10 @@ +fun box(stepId: Int): String { + val obj = Module1Class() + when (stepId) { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 -> { + if (obj.testFunction1() != 1) return "Fail 1" + } + else -> return "Unknown" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/m.1.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/m.1.kt new file mode 100644 index 00000000000..7b42b77c80f --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/m.1.kt @@ -0,0 +1,11 @@ +fun box(stepId: Int): String { + val obj = Module1Class() + when (stepId) { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 -> { + if (obj.testFunction1() != 1) return "Fail 1" + if (obj.testFunction22() != 22) return "Fail 22" + } + else -> return "Unknown" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/m.4.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/m.4.kt new file mode 100644 index 00000000000..1fbea4d5372 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/m.4.kt @@ -0,0 +1,27 @@ +fun box(stepId: Int): String { + val obj = Module1Class() + when (stepId) { + 0, 1, 2, 3, 4, 10, 11 -> { + if (obj.testFunction1() != 1) return "Fail 1" + if (obj.testFunction22() != 22) return "Fail 22" + if (obj.testField222 != 222) return "Fail 222" + } + 5, 6, 7 -> { + if (obj.testFunction1() != 1) return "Fail 1" + if (obj.testFunction22() != 220) return "Fail 220" + if (obj.testField222 != 2220) return "Fail 2220" + } + 8 -> { + if (obj.testFunction1() != 1) return "Fail 1" + if (obj.testFunction22() != 2201) return "Fail 2201" + if (obj.testField222 != 2220) return "Fail 2220" + } + 9 -> { + if (obj.testFunction1() != 1) return "Fail 1" + if (obj.testFunction22() != 2201) return "Fail 2201" + if (obj.testField222 != 22201) return "Fail 22201" + } + else -> return "Unknown" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/module.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/module.info new file mode 100644 index 00000000000..08c462af4a6 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/main/module.info @@ -0,0 +1,31 @@ +STEP 0: + modifications: + U : m.0.kt -> m.kt + dependencies: lib1, lib2 + added file: m.kt +STEP 1: + modifications: + U : m.1.kt -> m.kt + dependencies: lib1, lib2 + modified ir: m.kt +STEP 2: + dependencies: lib1, lib2 +STEP 3: + dependencies: lib1, lib2 +STEP 4: + dependencies: lib1, lib2 + modifications: + U : m.4.kt -> m.kt + modified ir: m.kt +STEP 5: + dependencies: lib1, lib2 +STEP 6..9: + dependencies: lib1, lib2 + updated imports: m.kt +STEP 10: + modifications: + U : m.0.kt -> m.kt + dependencies: lib1, lib2 + modified ir: m.kt +STEP 11: + dependencies: lib1, lib2 diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/project.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/project.info new file mode 100644 index 00000000000..01e14a616c3 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/project.info @@ -0,0 +1,23 @@ +MODULES: lib1, lib2, main + +STEP 0..1: + libs: lib1, lib2, main + dirty js: lib1, lib2, main +STEP 2: + libs: lib1, lib2, main + dirty js: lib1, lib2 +STEP 3: + libs: lib1, lib2, main + dirty js: lib1 +STEP 4: + libs: lib1, lib2, main + dirty js: main, lib1, lib2 +STEP 5: + libs: lib1, lib2, main + dirty js: lib1 +STEP 6..10: + libs: lib1, lib2, main + dirty js: lib1, lib2, main +STEP 11: + libs: lib1, lib2, main + dirty js: lib1 diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/lib1/module.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/lib1/module.info index 1d5ca2f6403..f60b27b3db4 100644 --- a/js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/lib1/module.info +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/lib1/module.info @@ -18,6 +18,7 @@ STEP 3: modifications: U : A.0.kt -> A.kt modified ir: A.kt + updated imports: B.kt, C.kt STEP 4: modifications: U : B.0.kt -> B.kt diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/lib2/module.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/lib2/module.info index b3714811939..99c086b8df8 100644 --- a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/lib2/module.info +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/lib2/module.info @@ -1,8 +1,6 @@ STEP 0: dependencies: lib1 added file: l2.kt -STEP 1: +STEP 1..2: dependencies: lib1 updated imports: l2.kt -STEP 2: - dependencies: lib1 diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/project.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/project.info index 7829bf96009..31bf237a5e9 100644 --- a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/project.info +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/project.info @@ -1,11 +1,5 @@ MODULES: lib1, lib2, main -STEP 0: +STEP 0..2: libs: lib1, lib2, main dirty js: lib1, lib2, main -STEP 1: - libs: lib1, lib2, main - dirty js: lib1, lib2, main -STEP 2: - libs: lib1, lib2, main - dirty js: lib1, main diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.0.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.0.kt new file mode 100644 index 00000000000..3766a4b55d2 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.0.kt @@ -0,0 +1,3 @@ +interface Module2Interface { + public suspend fun testFunction2() = 2 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.1.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.1.kt new file mode 100644 index 00000000000..0e7b1c36f47 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.1.kt @@ -0,0 +1,4 @@ +interface Module2Interface { + public suspend fun testFunction2() = 2 + public fun testFunction22() = 22 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.2.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.2.kt new file mode 100644 index 00000000000..6e3f9ff15d3 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.2.kt @@ -0,0 +1,4 @@ +interface Module2Interface { + public fun testFunction2() = 2 + public fun testFunction22() = 22 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.3.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.3.kt new file mode 100644 index 00000000000..bcf0e97523e --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.3.kt @@ -0,0 +1,7 @@ +interface Module2Interface { + public fun testFunction2() = 2 + public fun testFunction22() = 22 + + public val testField222: Int + get() = 222 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.5.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.5.kt new file mode 100644 index 00000000000..93f491f6412 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.5.kt @@ -0,0 +1,7 @@ +interface Module2Interface { + public fun testFunction2() = 20 + public fun testFunction22() = 220 + + public val testField222: Int + get() = 2220 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.6.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.6.kt new file mode 100644 index 00000000000..e5d0e579872 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/l1.6.kt @@ -0,0 +1,2 @@ +interface Module2Interface { +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/module.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/module.info new file mode 100644 index 00000000000..3abfddc8e1d --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib1/module.info @@ -0,0 +1,34 @@ +STEP 0: + modifications: + U : l1.0.kt -> l1.kt + added file: l1.kt +STEP 1: + modifications: + U : l1.1.kt -> l1.kt + modified ir: l1.kt + updated exports: l1.kt +STEP 2: + modifications: + U : l1.2.kt -> l1.kt + modified ir: l1.kt +STEP 3: + modifications: + U : l1.3.kt -> l1.kt + modified ir: l1.kt +STEP 4: + updated exports: l1.kt +STEP 5: + modifications: + U : l1.5.kt -> l1.kt + modified ir: l1.kt +STEP 6: + modifications: + U : l1.6.kt -> l1.kt + modified ir: l1.kt + updated exports: l1.kt +STEP 7: + modifications: + U : l1.0.kt -> l1.kt + modified ir: l1.kt +STEP 8: + updated exports: l1.kt diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib2/l2.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib2/l2.kt new file mode 100644 index 00000000000..674837960c7 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib2/l2.kt @@ -0,0 +1,3 @@ +class Module1Class: Module2Interface { + fun testFunction1() = 1 +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib2/module.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib2/module.info new file mode 100644 index 00000000000..90676e5f9a9 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/lib2/module.info @@ -0,0 +1,25 @@ +STEP 0: + dependencies: lib1 + added file: l2.kt +STEP 1: + dependencies: lib1 + updated exports: l2.kt +STEP 2: + dependencies: lib1 + updated imports: l2.kt +STEP 3: + dependencies: lib1 +STEP 4: + dependencies: lib1 + updated exports: l2.kt +STEP 5: + dependencies: lib1 +STEP 6: + dependencies: lib1 + updated imports: l2.kt + updated exports: l2.kt +STEP 7: + dependencies: lib1 +STEP 8: + dependencies: lib1 + updated exports: l2.kt diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.0.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.0.kt new file mode 100644 index 00000000000..f2124ab4831 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.0.kt @@ -0,0 +1,10 @@ +fun box(stepId: Int): String { + val obj = Module1Class() + when (stepId) { + 0, 1, 2, 3, 4, 5, 6, 7, 8 -> { + if (obj.testFunction1() != 1) return "Fail 1" + } + else -> return "Unknown" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.1.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.1.kt new file mode 100644 index 00000000000..e18abc94cfc --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.1.kt @@ -0,0 +1,11 @@ +fun box(stepId: Int): String { + val obj = Module1Class() + when (stepId) { + 0, 1, 2, 3, 4, 5, 6, 7, 8 -> { + if (obj.testFunction1() != 1) return "Fail 1" + if (obj.testFunction22() != 22) return "Fail 22" + } + else -> return "Unknown" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.4.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.4.kt new file mode 100644 index 00000000000..f1ed003d616 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.4.kt @@ -0,0 +1,17 @@ +fun box(stepId: Int): String { + val obj = Module1Class() + when (stepId) { + 0, 1, 2, 3, 4, 6, 7, 8 -> { + if (obj.testFunction1() != 1) return "Fail 1" + if (obj.testFunction22() != 22) return "Fail 22" + if (obj.testField222 != 222) return "Fail 222" + } + 5 -> { + if (obj.testFunction1() != 1) return "Fail 1" + if (obj.testFunction22() != 220) return "Fail 220" + if (obj.testField222 != 2220) return "Fail 2220" + } + else -> return "Unknown" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.8.kt b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.8.kt new file mode 100644 index 00000000000..9f2392d026e --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/m.8.kt @@ -0,0 +1,15 @@ +suspend fun testCrossReference(): Int { + val obj = Module1Class() + return obj.testFunction2() +} + +fun box(stepId: Int): String { + val obj = Module1Class() + when (stepId) { + 0, 1, 2, 3, 4, 5, 6, 7, 8 -> { + if (obj.testFunction1() != 1) return "Fail 1" + } + else -> return "Unknown" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/module.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/module.info new file mode 100644 index 00000000000..628806354f9 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/main/module.info @@ -0,0 +1,31 @@ +STEP 0: + dependencies: lib1, lib2 + modifications: + U : m.0.kt -> m.kt + added file: m.kt +STEP 1: + dependencies: lib1, lib2 + modifications: + U : m.1.kt -> m.kt + modified ir: m.kt +STEP 2..3: + dependencies: lib1, lib2 +STEP 4: + dependencies: lib1, lib2 + modifications: + U : m.4.kt -> m.kt + modified ir: m.kt +STEP 5: + dependencies: lib1, lib2 +STEP 6: + dependencies: lib1, lib2 + modifications: + U : m.0.kt -> m.kt + modified ir: m.kt +STEP 7: + dependencies: lib1, lib2 +STEP 8: + dependencies: lib1, lib2 + modifications: + U : m.8.kt -> m.kt + modified ir: m.kt diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/project.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/project.info new file mode 100644 index 00000000000..7f222b38181 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/project.info @@ -0,0 +1,26 @@ +MODULES: lib1, lib2, main + +STEP 0..1: + libs: lib1, lib2, main + dirty js: lib1, lib2, main +STEP 2: + libs: lib1, lib2, main + dirty js: lib1, lib2 +STEP 3: + libs: lib1, lib2, main + dirty js: lib1 +STEP 4: + libs: lib1, lib2, main + dirty js: lib1, lib2, main +STEP 5: + libs: lib1, lib2, main + dirty js: lib1 +STEP 6: + libs: lib1, lib2, main + dirty js: lib1, lib2, main +STEP 7: + libs: lib1, lib2, main + dirty js: lib1 +STEP 8: + libs: lib1, lib2, main + dirty js: lib1, lib2, main diff --git a/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/lib2/module.info b/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/lib2/module.info index 9cb2309a5ee..f399df8c8ad 100644 --- a/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/lib2/module.info +++ b/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/lib2/module.info @@ -3,8 +3,10 @@ STEP 0: added file: l2.kt STEP 1..3: dependencies: lib1 + updated imports: l2.kt STEP 4: dependencies: lib1 modifications: U : l2.4.kt -> l2.kt modified ir: l2.kt + updated exports: l2.kt diff --git a/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/main/module.info b/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/main/module.info index 30595c7cf95..9893cc37d8c 100644 --- a/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/main/module.info +++ b/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/main/module.info @@ -1,8 +1,6 @@ STEP 0: dependencies: lib1, lib2 added file: m.kt -STEP 1..3: +STEP 1..4: dependencies: lib1, lib2 updated imports: m.kt -STEP 4: - dependencies: lib1, lib2 diff --git a/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/project.info b/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/project.info index e0c715ec3dc..d0dbe7c8926 100644 --- a/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/project.info +++ b/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/project.info @@ -1,11 +1,8 @@ MODULES: lib1, lib2, main -STEP 0: +STEP 0..3: libs: lib1, lib2, main dirty js: lib1, lib2, main -STEP 1..3: - libs: lib1, lib2, main - dirty js: lib1, main STEP 4: libs: lib1, lib2, main - dirty js: lib2 + dirty js: lib2, main