diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationTestGenerated.java index 18b30afcc48..41ae363cd2f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationTestGenerated.java @@ -271,6 +271,12 @@ public class JsFirInvalidationTestGenerated extends AbstractJsFirInvalidationTes runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/"); } + @Test + @TestMetadata("interfaceOpenMethods") + public void testInterfaceOpenMethods() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/"); + } + @Test @TestMetadata("interfaceSuperUsage") public void testInterfaceSuperUsage() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java index 22d1c96a7f1..e30b1d67246 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java @@ -271,6 +271,12 @@ public class JsIrES6InvalidationTestGenerated extends AbstractJsIrES6Invalidatio runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/"); } + @Test + @TestMetadata("interfaceOpenMethods") + public void testInterfaceOpenMethods() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/"); + } + @Test @TestMetadata("interfaceSuperUsage") public void testInterfaceSuperUsage() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java index 5c5d2397d8c..71d015b7033 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java @@ -271,6 +271,12 @@ public class JsIrInvalidationTestGenerated extends AbstractJsIrInvalidationTest runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/"); } + @Test + @TestMetadata("interfaceOpenMethods") + public void testInterfaceOpenMethods() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/"); + } + @Test @TestMetadata("interfaceSuperUsage") public void testInterfaceSuperUsage() throws Exception { diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceA.0.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceA.0.kt new file mode 100644 index 00000000000..6f694ceffab --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceA.0.kt @@ -0,0 +1,3 @@ +interface A { + fun testA1() = 1 +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceA.1.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceA.1.kt new file mode 100644 index 00000000000..6d6577b8cd2 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceA.1.kt @@ -0,0 +1,5 @@ +interface A { + fun testA1() = 2 + + fun testA2() = 1 +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceB.0.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceB.0.kt new file mode 100644 index 00000000000..06557f05b04 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceB.0.kt @@ -0,0 +1,3 @@ +interface B : A { + fun testB1() = 2 +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceC.0.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceC.0.kt new file mode 100644 index 00000000000..0dd47266168 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/InterfaceC.0.kt @@ -0,0 +1,3 @@ +interface C : B { + fun testC1() = 3 +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/module.info b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/module.info new file mode 100644 index 00000000000..905e90eba96 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib1/module.info @@ -0,0 +1,14 @@ +STEP 0: + modifications: + U : InterfaceA.0.kt -> InterfaceA.kt + U : InterfaceB.0.kt -> InterfaceB.kt + U : InterfaceC.0.kt -> InterfaceC.kt + added file: InterfaceA.kt, InterfaceB.kt, InterfaceC.kt +STEP 1: + modifications: + U : InterfaceA.1.kt -> InterfaceA.kt + modified ir: InterfaceA.kt + updated exports: InterfaceA.kt + updated imports: InterfaceB.kt, InterfaceC.kt +STEP 2: + updated exports: InterfaceB.kt, InterfaceC.kt diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/GetA.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/GetA.kt new file mode 100644 index 00000000000..de4359ebcfc --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/GetA.kt @@ -0,0 +1,3 @@ +fun getObjectA() : A { + return myObject +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/GetB.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/GetB.kt new file mode 100644 index 00000000000..734f84d67e2 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/GetB.kt @@ -0,0 +1,3 @@ +fun getObjectB() : B { + return myObject +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/GetC.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/GetC.kt new file mode 100644 index 00000000000..2db3c0d72f7 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/GetC.kt @@ -0,0 +1,3 @@ +fun getObjectC() : C { + return myObject +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/MyClass.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/MyClass.kt new file mode 100644 index 00000000000..266e9b49ec3 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/MyClass.kt @@ -0,0 +1,4 @@ +private class MyClass : C { +} + +internal val myObject: C = MyClass() diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/module.info b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/module.info new file mode 100644 index 00000000000..a195bf65f64 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/lib2/module.info @@ -0,0 +1,8 @@ +STEP 0: + dependencies: lib1 + added file: GetA.kt, GetB.kt, GetC.kt, MyClass.kt +STEP 1: + dependencies: lib1 + updated imports: MyClass.kt, GetB.kt, GetC.kt, GetA.kt +STEP 2: + dependencies: lib1 diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/m.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/m.kt new file mode 100644 index 00000000000..18d728e4ba4 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/m.kt @@ -0,0 +1,15 @@ +fun box(stepId: Int): String { + val expected = when (stepId) { + 0 -> 10 + 1 -> 13 + 2 -> 16 + else -> return "Unknown" + } + + val x = test() + if (expected != x) { + return "Fail $expected != $x" + } + + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/module.info b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/module.info new file mode 100644 index 00000000000..8ab2e1d4f4c --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/module.info @@ -0,0 +1,13 @@ +STEP 0: + dependencies: lib1, lib2 + modifications: + U : test.0.kt -> test.kt + added file: m.kt, test.kt +STEP 1: + dependencies: lib1, lib2 + updated imports: test.kt +STEP 2: + dependencies: lib1, lib2 + modifications: + U : test.2.kt -> test.kt + modified ir: test.kt diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/test.0.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/test.0.kt new file mode 100644 index 00000000000..ff0bb64f107 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/test.0.kt @@ -0,0 +1,7 @@ +fun test(): Int { + val a = getObjectA() + val b = getObjectB() + val c = getObjectC() + + return a.testA1() + b.testA1() + b.testB1() + c.testA1() + c.testB1() + c.testC1() +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/test.2.kt b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/test.2.kt new file mode 100644 index 00000000000..e1044dbd881 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/main/test.2.kt @@ -0,0 +1,9 @@ +fun test(): Int { + val a = getObjectA() + val b = getObjectB() + val c = getObjectC() + + return a.testA1() + a.testA2() + + b.testA1() + b.testA2() + b.testB1() + + c.testA1() + c.testA2() + c.testB1() + c.testC1() +} diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/project.info b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/project.info new file mode 100644 index 00000000000..7a626b16630 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/project.info @@ -0,0 +1,8 @@ +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, main