diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IdSignatureHashCalculator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IdSignatureHashCalculator.kt index 3de73db62ea..2bccb96f333 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IdSignatureHashCalculator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IdSignatureHashCalculator.kt @@ -22,7 +22,7 @@ internal class IdSignatureHashCalculator(private val icHasher: ICHasher) { private val idSignatureSources = hashMapOf() private val idSignatureHashes = hashMapOf() - private val fileAnnotationHashes = hashMapOf() + private val annotationContainerHashes = hashMapOf() private val constantHashes = hashMapOf() private val inlineFunctionFlatHashes = hashMapOf() @@ -33,10 +33,8 @@ internal class IdSignatureHashCalculator(private val icHasher: ICHasher) { private val inlineFunctionDepends = hashMapOf() - private val IrFile.annotationsHash: ICHash - get() = fileAnnotationHashes.getOrPut(this) { - icHasher.calculateIrAnnotationContainerHash(this) - } + private val IrSymbolOwner.annotationsHash: ICHash + get() = annotationContainerHashes.getOrPut(this) { calculateAnnotationHash() } private val IrProperty.constantHash: ICHash get() = constantHashes.getOrPut(this) { @@ -87,18 +85,31 @@ internal class IdSignatureHashCalculator(private val icHasher: ICHasher) { InlineFunctionDependencies(usedInlineFunctions, usedConstants) } - private fun IrSymbol.calculateSymbolHash(): ICHash { - var srcIrFile = signature?.let { sig -> idSignatureSources[sig]?.irFile } - if (srcIrFile == null) { - var parentDeclaration = (owner as? IrDeclaration)?.parent - while (parentDeclaration is IrDeclaration) { - parentDeclaration = parentDeclaration.parent - } - srcIrFile = parentDeclaration as? IrFile + private operator fun ICHash.plus(other: ICHash) = ICHash(hash.combineWith(other.hash)) + + private fun IrSymbolOwner.calculateAnnotationHash(): ICHash { + val annotationContainer = this as? IrAnnotationContainer ?: return ICHash() + var symbolAnnotationsHash = icHasher.calculateIrAnnotationContainerHash(annotationContainer) + + val declaration = this as? IrDeclaration + + (declaration?.parent as? IrSymbolOwner)?.let { symbolAnnotationsHash += it.annotationsHash } + + if (declaration is IrSimpleFunction) { + declaration.correspondingPropertySymbol?.let { symbolAnnotationsHash += it.owner.annotationsHash } } - val fileAnnotationsHash = srcIrFile?.annotationsHash ?: ICHash() - return ICHash(fileAnnotationsHash.hash.combineWith(icHasher.calculateIrSymbolHash(this).hash)) + if (declaration is IrOverridableDeclaration<*>) { + declaration.overriddenSymbols.forEach { + symbolAnnotationsHash += it.owner.annotationsHash + } + } + + return symbolAnnotationsHash + } + + private fun IrSymbol.calculateSymbolHash(): ICHash { + return owner.annotationsHash + icHasher.calculateIrSymbolHash(this) } private fun IrFunction.calculateInlineFunctionTransitiveHash(): ICHash { @@ -111,11 +122,11 @@ internal class IdSignatureHashCalculator(private val icHasher: ICHasher) { for (inlineFunction in usedInlineFunctions) { if (transitiveDepends.add(inlineFunction)) { newDependsStack += inlineFunction - transitiveHash = ICHash(transitiveHash.hash.combineWith(inlineFunction.inlineFunctionFlatHash.hash)) + transitiveHash += inlineFunction.inlineFunctionFlatHash } } for (constant in usedConstants) { - transitiveHash = ICHash(transitiveHash.hash.combineWith(constant.constantHash.hash)) + transitiveHash += constant.constantHash } } diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java index d1196117c87..42b82c967ed 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java @@ -20,6 +20,12 @@ import java.util.regex.Pattern; @TestMetadata("js/js.translator/testData/incremental/invalidation") @TestDataPath("$PROJECT_ROOT") public class JsFirInvalidationPerFileTestGenerated extends AbstractJsFirInvalidationPerFileTest { + @Test + @TestMetadata("abstractClassWithJsExport") + public void testAbstractClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/"); + } + @Test @TestMetadata("addUpdateRemoveDependentFile") public void testAddUpdateRemoveDependentFile() throws Exception { @@ -61,6 +67,12 @@ public class JsFirInvalidationPerFileTestGenerated extends AbstractJsFirInvalida runTest("js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/"); } + @Test + @TestMetadata("classWithJsExport") + public void testClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/classWithJsExport/"); + } + @Test @TestMetadata("companionConstVal") public void testCompanionConstVal() throws Exception { @@ -301,6 +313,12 @@ public class JsFirInvalidationPerFileTestGenerated extends AbstractJsFirInvalida runTest("js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/"); } + @Test + @TestMetadata("interfaceWithJsExport") + public void testInterfaceWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/"); + } + @Test @TestMetadata("jsCode") public void testJsCode() throws Exception { @@ -349,6 +367,12 @@ public class JsFirInvalidationPerFileTestGenerated extends AbstractJsFirInvalida runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/"); } + @Test + @TestMetadata("jsName") + public void testJsName() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsName/"); + } + @Test @TestMetadata("kotlinTest") public void testKotlinTest() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java index a87673c206a..25b91073c9f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java @@ -20,6 +20,12 @@ import java.util.regex.Pattern; @TestMetadata("js/js.translator/testData/incremental/invalidation") @TestDataPath("$PROJECT_ROOT") public class JsFirInvalidationPerModuleTestGenerated extends AbstractJsFirInvalidationPerModuleTest { + @Test + @TestMetadata("abstractClassWithJsExport") + public void testAbstractClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/"); + } + @Test @TestMetadata("addUpdateRemoveDependentFile") public void testAddUpdateRemoveDependentFile() throws Exception { @@ -61,6 +67,12 @@ public class JsFirInvalidationPerModuleTestGenerated extends AbstractJsFirInvali runTest("js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/"); } + @Test + @TestMetadata("classWithJsExport") + public void testClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/classWithJsExport/"); + } + @Test @TestMetadata("companionConstVal") public void testCompanionConstVal() throws Exception { @@ -301,6 +313,12 @@ public class JsFirInvalidationPerModuleTestGenerated extends AbstractJsFirInvali runTest("js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/"); } + @Test + @TestMetadata("interfaceWithJsExport") + public void testInterfaceWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/"); + } + @Test @TestMetadata("jsCode") public void testJsCode() throws Exception { @@ -349,6 +367,12 @@ public class JsFirInvalidationPerModuleTestGenerated extends AbstractJsFirInvali runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/"); } + @Test + @TestMetadata("jsName") + public void testJsName() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsName/"); + } + @Test @TestMetadata("kotlinTest") public void testKotlinTest() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java index c906b85a7fd..db8efb2c6ac 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java @@ -20,6 +20,12 @@ import java.util.regex.Pattern; @TestMetadata("js/js.translator/testData/incremental/invalidation") @TestDataPath("$PROJECT_ROOT") public class JsIrES6InvalidationPerFileTestGenerated extends AbstractJsIrES6InvalidationPerFileTest { + @Test + @TestMetadata("abstractClassWithJsExport") + public void testAbstractClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/"); + } + @Test @TestMetadata("addUpdateRemoveDependentFile") public void testAddUpdateRemoveDependentFile() throws Exception { @@ -61,6 +67,12 @@ public class JsIrES6InvalidationPerFileTestGenerated extends AbstractJsIrES6Inva runTest("js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/"); } + @Test + @TestMetadata("classWithJsExport") + public void testClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/classWithJsExport/"); + } + @Test @TestMetadata("companionConstVal") public void testCompanionConstVal() throws Exception { @@ -301,6 +313,12 @@ public class JsIrES6InvalidationPerFileTestGenerated extends AbstractJsIrES6Inva runTest("js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/"); } + @Test + @TestMetadata("interfaceWithJsExport") + public void testInterfaceWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/"); + } + @Test @TestMetadata("jsCode") public void testJsCode() throws Exception { @@ -349,6 +367,12 @@ public class JsIrES6InvalidationPerFileTestGenerated extends AbstractJsIrES6Inva runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/"); } + @Test + @TestMetadata("jsName") + public void testJsName() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsName/"); + } + @Test @TestMetadata("kotlinTest") public void testKotlinTest() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java index 5b21b6e6e2e..3ee49578fd4 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java @@ -20,6 +20,12 @@ import java.util.regex.Pattern; @TestMetadata("js/js.translator/testData/incremental/invalidation") @TestDataPath("$PROJECT_ROOT") public class JsIrES6InvalidationPerModuleTestGenerated extends AbstractJsIrES6InvalidationPerModuleTest { + @Test + @TestMetadata("abstractClassWithJsExport") + public void testAbstractClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/"); + } + @Test @TestMetadata("addUpdateRemoveDependentFile") public void testAddUpdateRemoveDependentFile() throws Exception { @@ -61,6 +67,12 @@ public class JsIrES6InvalidationPerModuleTestGenerated extends AbstractJsIrES6In runTest("js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/"); } + @Test + @TestMetadata("classWithJsExport") + public void testClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/classWithJsExport/"); + } + @Test @TestMetadata("companionConstVal") public void testCompanionConstVal() throws Exception { @@ -301,6 +313,12 @@ public class JsIrES6InvalidationPerModuleTestGenerated extends AbstractJsIrES6In runTest("js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/"); } + @Test + @TestMetadata("interfaceWithJsExport") + public void testInterfaceWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/"); + } + @Test @TestMetadata("jsCode") public void testJsCode() throws Exception { @@ -349,6 +367,12 @@ public class JsIrES6InvalidationPerModuleTestGenerated extends AbstractJsIrES6In runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/"); } + @Test + @TestMetadata("jsName") + public void testJsName() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsName/"); + } + @Test @TestMetadata("kotlinTest") public void testKotlinTest() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java index 818858634bf..c1da3032df6 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java @@ -20,6 +20,12 @@ import java.util.regex.Pattern; @TestMetadata("js/js.translator/testData/incremental/invalidation") @TestDataPath("$PROJECT_ROOT") public class JsIrInvalidationPerFileTestGenerated extends AbstractJsIrInvalidationPerFileTest { + @Test + @TestMetadata("abstractClassWithJsExport") + public void testAbstractClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/"); + } + @Test @TestMetadata("addUpdateRemoveDependentFile") public void testAddUpdateRemoveDependentFile() throws Exception { @@ -61,6 +67,12 @@ public class JsIrInvalidationPerFileTestGenerated extends AbstractJsIrInvalidati runTest("js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/"); } + @Test + @TestMetadata("classWithJsExport") + public void testClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/classWithJsExport/"); + } + @Test @TestMetadata("companionConstVal") public void testCompanionConstVal() throws Exception { @@ -301,6 +313,12 @@ public class JsIrInvalidationPerFileTestGenerated extends AbstractJsIrInvalidati runTest("js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/"); } + @Test + @TestMetadata("interfaceWithJsExport") + public void testInterfaceWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/"); + } + @Test @TestMetadata("jsCode") public void testJsCode() throws Exception { @@ -349,6 +367,12 @@ public class JsIrInvalidationPerFileTestGenerated extends AbstractJsIrInvalidati runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/"); } + @Test + @TestMetadata("jsName") + public void testJsName() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsName/"); + } + @Test @TestMetadata("kotlinTest") public void testKotlinTest() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java index 3e01ed6cce9..60a9db0bb78 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java @@ -20,6 +20,12 @@ import java.util.regex.Pattern; @TestMetadata("js/js.translator/testData/incremental/invalidation") @TestDataPath("$PROJECT_ROOT") public class JsIrInvalidationPerModuleTestGenerated extends AbstractJsIrInvalidationPerModuleTest { + @Test + @TestMetadata("abstractClassWithJsExport") + public void testAbstractClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/"); + } + @Test @TestMetadata("addUpdateRemoveDependentFile") public void testAddUpdateRemoveDependentFile() throws Exception { @@ -61,6 +67,12 @@ public class JsIrInvalidationPerModuleTestGenerated extends AbstractJsIrInvalida runTest("js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/"); } + @Test + @TestMetadata("classWithJsExport") + public void testClassWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/classWithJsExport/"); + } + @Test @TestMetadata("companionConstVal") public void testCompanionConstVal() throws Exception { @@ -301,6 +313,12 @@ public class JsIrInvalidationPerModuleTestGenerated extends AbstractJsIrInvalida runTest("js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/"); } + @Test + @TestMetadata("interfaceWithJsExport") + public void testInterfaceWithJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/"); + } + @Test @TestMetadata("jsCode") public void testJsCode() throws Exception { @@ -349,6 +367,12 @@ public class JsIrInvalidationPerModuleTestGenerated extends AbstractJsIrInvalida runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotationOnObjectWithUsage/"); } + @Test + @TestMetadata("jsName") + public void testJsName() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsName/"); + } + @Test @TestMetadata("kotlinTest") public void testKotlinTest() throws Exception { diff --git a/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/lib.0.kt b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/lib.0.kt new file mode 100644 index 00000000000..b076557c1c6 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/lib.0.kt @@ -0,0 +1,4 @@ +abstract class Foo { + abstract fun foo(): String + fun bar(): String = "K" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/lib.1.kt b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/lib.1.kt new file mode 100644 index 00000000000..2784cdc78f6 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/lib.1.kt @@ -0,0 +1,5 @@ +@JsExport +abstract class Foo { + abstract fun foo(): String + fun bar(): String = "K" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/lib.2.kt b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/lib.2.kt new file mode 100644 index 00000000000..c4f7db1aacd --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/lib.2.kt @@ -0,0 +1,4 @@ +abstract class Foo { + abstract fun foo(): String + fun bar(): String = "K" +} diff --git a/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/module.info b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/module.info new file mode 100644 index 00000000000..3ac9f27ecdb --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib1/module.info @@ -0,0 +1,12 @@ +STEP 0: + modifications: + U : lib.0.kt -> lib.kt + added file: lib.kt +STEP 1: + modifications: + U : lib.1.kt -> lib.kt + modified ir: lib.kt +STEP 2: + modifications: + U : lib.2.kt -> lib.kt + modified ir: lib.kt diff --git a/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib2/lib.0.kt b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib2/lib.0.kt new file mode 100644 index 00000000000..ac3be146849 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib2/lib.0.kt @@ -0,0 +1,3 @@ +class FooImpl : Foo() { + override fun foo() = "O" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib2/module.info b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib2/module.info new file mode 100644 index 00000000000..3672b6d429c --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/lib2/module.info @@ -0,0 +1,11 @@ +STEP 0: + dependencies: lib1 + modifications: + U : lib.0.kt -> lib.kt + added file: lib.kt +STEP 1: + dependencies: lib1 + updated imports: lib.kt +STEP 2: + dependencies: lib1 + updated imports: lib.kt diff --git a/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/main/m.kt b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/main/m.kt new file mode 100644 index 00000000000..2d31b9337d5 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/main/m.kt @@ -0,0 +1,4 @@ +fun box(): String { + val x = FooImpl() + return x.foo() + x.bar() +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/main/module.info b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/main/module.info new file mode 100644 index 00000000000..259f71e979f --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/main/module.info @@ -0,0 +1,9 @@ +STEP 0: + dependencies: lib1, lib2 + added file: m.kt +STEP 1: + dependencies: lib1, lib2 + updated imports: m.kt +STEP 2: + dependencies: lib1, lib2 + updated imports: m.kt diff --git a/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/project.info b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/project.info new file mode 100644 index 00000000000..9aff3291e32 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/abstractClassWithJsExport/project.info @@ -0,0 +1,14 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib2/lib, main/m, main/m.export, main +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib1/lib.export, lib1, lib2/lib, main/m +STEP 2: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib2/lib, main/m diff --git a/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/lib.0.kt b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/lib.0.kt new file mode 100644 index 00000000000..fd96f80665f --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/lib.0.kt @@ -0,0 +1,3 @@ +open class Foo { + open fun foo(): String = "Fail" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/lib.1.kt b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/lib.1.kt new file mode 100644 index 00000000000..19a4f1d8948 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/lib.1.kt @@ -0,0 +1,4 @@ +@JsExport +open class Foo { + open fun foo(): String = "Fail" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/lib.2.kt b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/lib.2.kt new file mode 100644 index 00000000000..fd96f80665f --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/lib.2.kt @@ -0,0 +1,3 @@ +open class Foo { + open fun foo(): String = "Fail" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/module.info b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/module.info new file mode 100644 index 00000000000..3ac9f27ecdb --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib1/module.info @@ -0,0 +1,12 @@ +STEP 0: + modifications: + U : lib.0.kt -> lib.kt + added file: lib.kt +STEP 1: + modifications: + U : lib.1.kt -> lib.kt + modified ir: lib.kt +STEP 2: + modifications: + U : lib.2.kt -> lib.kt + modified ir: lib.kt diff --git a/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib2/lib.0.kt b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib2/lib.0.kt new file mode 100644 index 00000000000..45e6e3eea40 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib2/lib.0.kt @@ -0,0 +1,3 @@ +class FooImpl : Foo() { + override fun foo() = "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib2/module.info b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib2/module.info new file mode 100644 index 00000000000..3672b6d429c --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/classWithJsExport/lib2/module.info @@ -0,0 +1,11 @@ +STEP 0: + dependencies: lib1 + modifications: + U : lib.0.kt -> lib.kt + added file: lib.kt +STEP 1: + dependencies: lib1 + updated imports: lib.kt +STEP 2: + dependencies: lib1 + updated imports: lib.kt diff --git a/js/js.translator/testData/incremental/invalidation/classWithJsExport/main/m.kt b/js/js.translator/testData/incremental/invalidation/classWithJsExport/main/m.kt new file mode 100644 index 00000000000..092d6755b32 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/classWithJsExport/main/m.kt @@ -0,0 +1,3 @@ +fun box(): String { + return FooImpl().foo() +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/classWithJsExport/main/module.info b/js/js.translator/testData/incremental/invalidation/classWithJsExport/main/module.info new file mode 100644 index 00000000000..259f71e979f --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/classWithJsExport/main/module.info @@ -0,0 +1,9 @@ +STEP 0: + dependencies: lib1, lib2 + added file: m.kt +STEP 1: + dependencies: lib1, lib2 + updated imports: m.kt +STEP 2: + dependencies: lib1, lib2 + updated imports: m.kt diff --git a/js/js.translator/testData/incremental/invalidation/classWithJsExport/project.info b/js/js.translator/testData/incremental/invalidation/classWithJsExport/project.info new file mode 100644 index 00000000000..9aff3291e32 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/classWithJsExport/project.info @@ -0,0 +1,14 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib2/lib, main/m, main/m.export, main +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib1/lib.export, lib1, lib2/lib, main/m +STEP 2: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib2/lib, main/m diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.0.kt b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.0.kt new file mode 100644 index 00000000000..38967b2adaa --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.0.kt @@ -0,0 +1,3 @@ +interface Foo { + fun foo(): String +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.1.kt b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.1.kt new file mode 100644 index 00000000000..ac7c4d9ba6b --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.1.kt @@ -0,0 +1,4 @@ +@JsExport +interface Foo { + fun foo(): String +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.2.kt b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.2.kt new file mode 100644 index 00000000000..7e227ccdc02 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.2.kt @@ -0,0 +1,3 @@ +interface Foo { + fun foo(): String = "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.3.kt b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.3.kt new file mode 100644 index 00000000000..bf038a5a274 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/lib.3.kt @@ -0,0 +1,4 @@ +@JsExport +interface Foo { + fun foo(): String = "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/module.info b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/module.info new file mode 100644 index 00000000000..77e355d1883 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib1/module.info @@ -0,0 +1,16 @@ +STEP 0: + modifications: + U : lib.0.kt -> lib.kt + added file: lib.kt +STEP 1: + modifications: + U : lib.1.kt -> lib.kt + modified ir: lib.kt +STEP 2: + modifications: + U : lib.2.kt -> lib.kt + modified ir: lib.kt +STEP 3: + modifications: + U : lib.3.kt -> lib.kt + modified ir: lib.kt diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib2/lib.0.kt b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib2/lib.0.kt new file mode 100644 index 00000000000..e49a5628723 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib2/lib.0.kt @@ -0,0 +1,3 @@ +class FooImpl : Foo { + override fun foo() = "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib2/lib.2.kt b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib2/lib.2.kt new file mode 100644 index 00000000000..84afff94817 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib2/lib.2.kt @@ -0,0 +1 @@ +class FooImpl : Foo \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib2/module.info b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib2/module.info new file mode 100644 index 00000000000..06c7f59ad10 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/lib2/module.info @@ -0,0 +1,16 @@ +STEP 0: + dependencies: lib1 + modifications: + U : lib.0.kt -> lib.kt + added file: lib.kt +STEP 1: + dependencies: lib1 + updated imports: lib.kt +STEP 2: + dependencies: lib1 + modifications: + U : lib.2.kt -> lib.kt + modified ir: lib.kt +STEP 3: + dependencies: lib1 + updated imports: lib.kt diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/main/m.kt b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/main/m.kt new file mode 100644 index 00000000000..092d6755b32 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/main/m.kt @@ -0,0 +1,3 @@ +fun box(): String { + return FooImpl().foo() +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/main/module.info b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/main/module.info new file mode 100644 index 00000000000..5037213492c --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/main/module.info @@ -0,0 +1,12 @@ +STEP 0: + dependencies: lib1, lib2 + added file: m.kt +STEP 1: + dependencies: lib1, lib2 + updated imports: m.kt +STEP 2: + dependencies: lib1, lib2 + updated imports: m.kt +STEP 3: + dependencies: lib1, lib2 + updated imports: m.kt diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/project.info b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/project.info new file mode 100644 index 00000000000..18628b0ee50 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithJsExport/project.info @@ -0,0 +1,18 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib2/lib, main/m, main/m.export, main +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib1/lib.export, lib1, lib2/lib, main/m +STEP 2: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib2/lib, main/m +STEP 3: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/lib, lib1/lib.export, lib2/lib, main/m diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.0.kt b/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.0.kt new file mode 100644 index 00000000000..56be77069ea --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.0.kt @@ -0,0 +1,8 @@ +interface Foo { + fun foo(): String + fun default(): String = "Default" +} + +open class Bar { + open fun bar(): String = "Bar" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.2.kt b/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.2.kt new file mode 100644 index 00000000000..737d5ab0c1c --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.2.kt @@ -0,0 +1,9 @@ +interface Foo { + @JsName("_foo_") + fun foo(): String + fun default(): String = "Default" +} + +open class Bar { + open fun bar(): String = "Bar" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.3.kt b/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.3.kt new file mode 100644 index 00000000000..3fc1a55b510 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.3.kt @@ -0,0 +1,10 @@ +interface Foo { + @JsName("_foo_") + fun foo(): String + @JsName("_default_") + fun default(): String = "Default" +} + +open class Bar { + open fun bar(): String = "Bar" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.4.kt b/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.4.kt new file mode 100644 index 00000000000..1e9177d2c68 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib1/lib.4.kt @@ -0,0 +1,11 @@ +interface Foo { + @JsName("_foo_") + fun foo(): String + @JsName("_default_") + fun default(): String = "Default" +} + +open class Bar { + @JsName("_bar_") + open fun bar(): String = "Bar" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib1/module.info b/js/js.translator/testData/incremental/invalidation/jsName/lib1/module.info new file mode 100644 index 00000000000..ba6a0878e0c --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib1/module.info @@ -0,0 +1,18 @@ +STEP 0: + modifications: + U : lib.0.kt -> lib.kt + added file: lib.kt +STEP 1: +STEP 2: + modifications: + U : lib.2.kt -> lib.kt + modified ir: lib.kt +STEP 3: + modifications: + U : lib.3.kt -> lib.kt + modified ir: lib.kt +STEP 4: + modifications: + U : lib.4.kt -> lib.kt + modified ir: lib.kt +STEP 5: diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib2/lib.0.kt b/js/js.translator/testData/incremental/invalidation/jsName/lib2/lib.0.kt new file mode 100644 index 00000000000..31e1aaebd00 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib2/lib.0.kt @@ -0,0 +1,3 @@ +open class FooBarImpl : Bar(), Foo { + override fun foo() = "FooImpl" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib2/module.info b/js/js.translator/testData/incremental/invalidation/jsName/lib2/module.info new file mode 100644 index 00000000000..137c285f051 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib2/module.info @@ -0,0 +1,20 @@ +STEP 0: + dependencies: lib1 + modifications: + U : lib.0.kt -> lib.kt + added file: lib.kt +STEP 1: + dependencies: lib1 + updated exports: lib.kt +STEP 2: + dependencies: lib1 + updated imports: lib.kt +STEP 3: + dependencies: lib1 + updated imports: lib.kt +STEP 4: + dependencies: lib1 + updated imports: lib.kt +STEP 5: + dependencies: lib1 + updated exports: lib.kt diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib3/lib.0.kt b/js/js.translator/testData/incremental/invalidation/jsName/lib3/lib.0.kt new file mode 100644 index 00000000000..57ba59182c1 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib3/lib.0.kt @@ -0,0 +1 @@ +class TestClass : FooBarImpl() \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib3/lib.1.kt b/js/js.translator/testData/incremental/invalidation/jsName/lib3/lib.1.kt new file mode 100644 index 00000000000..a2b7be5bbb9 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib3/lib.1.kt @@ -0,0 +1,3 @@ +class TestClass : FooBarImpl() { + override fun default(): String = "TestClass" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib3/lib.5.kt b/js/js.translator/testData/incremental/invalidation/jsName/lib3/lib.5.kt new file mode 100644 index 00000000000..57ba59182c1 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib3/lib.5.kt @@ -0,0 +1 @@ +class TestClass : FooBarImpl() \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsName/lib3/module.info b/js/js.translator/testData/incremental/invalidation/jsName/lib3/module.info new file mode 100644 index 00000000000..9a72b86190d --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/lib3/module.info @@ -0,0 +1,24 @@ +STEP 0: + dependencies: lib1, lib2 + modifications: + U : lib.0.kt -> lib.kt + added file: lib.kt +STEP 1: + dependencies: lib1, lib2 + modifications: + U : lib.1.kt -> lib.kt + modified ir: lib.kt +STEP 2: + dependencies: lib1, lib2 + updated imports: lib.kt +STEP 3: + dependencies: lib1, lib2 + updated imports: lib.kt +STEP 4: + dependencies: lib1, lib2 + updated imports: lib.kt +STEP 5: + dependencies: lib1, lib2 + modifications: + U : lib.5.kt -> lib.kt + modified ir: lib.kt diff --git a/js/js.translator/testData/incremental/invalidation/jsName/main/m.kt b/js/js.translator/testData/incremental/invalidation/jsName/main/m.kt new file mode 100644 index 00000000000..63caa0bd4ea --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/main/m.kt @@ -0,0 +1,34 @@ +fun box(step: Int): String { + val x = TestClass() + + if (x.bar() != "Bar") return "Fail bar in Bar" + if (x.foo() != "FooImpl") return "Fail overridden foo in FooBarImpl" + + when (step) { + 0 -> { + if (x.default() != "Default") return "Fail default in Foo" + } + 1 -> { + if (x.default() != "TestClass") return "Fail default in TestClass" + } + 2 -> { + if (x.asDynamic()._foo_() != "FooImpl") return "Fail overridden foo in FooBarImpl with @JsName" + } + 3 -> { + if (x.asDynamic()._foo_() != "FooImpl") return "Fail overridden foo in FooBarImpl with @JsName" + if (x.asDynamic()._default_() != "TestClass") return "Fail default in TestClass with @JsName" + } + 4 -> { + if (x.asDynamic()._foo_() != "FooImpl") return "Fail overridden foo in FooBarImpl with @JsName" + if (x.asDynamic()._default_() != "TestClass") return "Fail default in TestClass with @JsName" + if (x.asDynamic()._bar_() != "Bar") return "Fail bar in Bar with @JsName" + } + 5 -> { + if (x.asDynamic()._foo_() != "FooImpl") return "Fail overridden foo in FooBarImpl with @JsName" + if (x.asDynamic()._default_() != "Default") return "Fail default in Default with @JsName" + if (x.asDynamic()._bar_() != "Bar") return "Fail bar in Bar with @JsName" + } + } + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsName/main/module.info b/js/js.translator/testData/incremental/invalidation/jsName/main/module.info new file mode 100644 index 00000000000..051a72b8f5c --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/main/module.info @@ -0,0 +1,18 @@ +STEP 0: + dependencies: lib1, lib2, lib3 + added file: m.kt +STEP 1: + dependencies: lib1, lib2, lib3 + updated imports: m.kt +STEP 2: + dependencies: lib1, lib2, lib3 + updated imports: m.kt +STEP 3: + dependencies: lib1, lib2, lib3 + updated imports: m.kt +STEP 4: + dependencies: lib1, lib2, lib3 + updated imports: m.kt +STEP 5: + dependencies: lib1, lib2, lib3 + updated imports: m.kt diff --git a/js/js.translator/testData/incremental/invalidation/jsName/project.info b/js/js.translator/testData/incremental/invalidation/jsName/project.info new file mode 100644 index 00000000000..b2ce055bf1b --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsName/project.info @@ -0,0 +1,26 @@ +MODULES: lib1, lib2, lib3, main + +STEP 0: + libs: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib1/lib, lib2/lib, lib3/lib, main/m, main/m.export, main +STEP 1: + libs: lib1, lib2, lib3, main + dirty js modules: lib2, lib3, main + dirty js files: lib2/lib, lib3/lib, main/m +STEP 2: + libs: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib1/lib, lib2/lib, lib3/lib, main/m +STEP 3: + libs: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib1/lib, lib2/lib, lib3/lib, main/m +STEP 4: + libs: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib1/lib, lib2/lib, lib3/lib, main/m +STEP 5: + libs: lib1, lib2, lib3, main + dirty js modules: lib2, lib3, main + dirty js files: lib2/lib, lib3/lib, main/m