diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/coroutines/AddContinuationToFunctionsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/coroutines/AddContinuationToFunctionsLowering.kt index 9c24ded402c..7b548209003 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/coroutines/AddContinuationToFunctionsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/coroutines/AddContinuationToFunctionsLowering.kt @@ -121,7 +121,9 @@ private fun IrSimpleFunction.createSuspendFunctionStub(context: CommonBackendCon function.copyReceiverParametersFrom(this, substitutionMap) function.overriddenSymbols += overriddenSymbols.map { - it.owner.getOrCreateFunctionWithContinuationStub(context).symbol + factory.stageController.restrictTo(it.owner) { + it.owner.getOrCreateFunctionWithContinuationStub(context).symbol + } } function.valueParameters = valueParameters.map { it.copyTo(function) } 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 43a9122eadd..2a54659c2ea 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 @@ -280,6 +280,11 @@ public class InvalidationTestGenerated extends AbstractInvalidationTest { runTest("js/js.translator/testData/incremental/invalidation/suspendFunctions/"); } + @TestMetadata("suspendInterfaceWithDefaultParams") + public void testSuspendInterfaceWithDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/"); + } + @TestMetadata("toplevelProperties") public void testToplevelProperties() throws Exception { runTest("js/js.translator/testData/incremental/invalidation/toplevelProperties/"); diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/l1A.0.kt b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/l1A.0.kt new file mode 100644 index 00000000000..5b60e89d077 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/l1A.0.kt @@ -0,0 +1,6 @@ +class ClassA1 : InterfaceA { + override suspend fun functionA(x: Int, s: String, b: Boolean?): Int { + return 0 + } +} + diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/l1I.0.kt b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/l1I.0.kt new file mode 100644 index 00000000000..9b3f5535f59 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/l1I.0.kt @@ -0,0 +1,5 @@ +interface InterfaceA { + suspend fun functionA(x: Int, s: String, b: Boolean? = null): Int +} + +fun function1(): Int = 0 diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/l1I.1.kt b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/l1I.1.kt new file mode 100644 index 00000000000..5e2c8130ab1 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/l1I.1.kt @@ -0,0 +1,5 @@ +interface InterfaceA { + suspend fun functionA(x: Int, s: String, b: Boolean? = null): Int +} + +fun function1(): Int = 1 diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/module.info b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/module.info new file mode 100644 index 00000000000..d25f44b020d --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib1/module.info @@ -0,0 +1,9 @@ +STEP 0: + modifications: + U : l1I.0.kt -> l1I.kt + U : l1A.0.kt -> l1A.kt + added file: l1I.kt, l1A.kt +STEP 1: + modifications: + U : l1I.1.kt -> l1I.kt + modified ir: l1I.kt diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib2/l2A.0.kt b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib2/l2A.0.kt new file mode 100644 index 00000000000..14d76fef2da --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib2/l2A.0.kt @@ -0,0 +1,6 @@ +class ClassA2 : InterfaceA { + override suspend fun functionA(x: Int, s: String, b: Boolean?): Int { + return function1() + } +} + diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib2/module.info b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib2/module.info new file mode 100644 index 00000000000..17a44fb06c8 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/lib2/module.info @@ -0,0 +1,7 @@ +STEP 0: + dependencies: lib1 + modifications: + U : l2A.0.kt -> l2A.kt + added file: l2A.kt +STEP 1: + dependencies: lib1 diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/main/m.kt b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/main/m.kt new file mode 100644 index 00000000000..9a943517202 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/main/m.kt @@ -0,0 +1,16 @@ +internal suspend fun testDefaltParam(stepId: Int): Int { + return callFun(ClassA2()) +} + +private suspend fun ignoreIt() = ClassA1() + +private suspend fun callFun(a: InterfaceA): Int { + return a.functionA(0, "", false) +} + +suspend fun box(stepId: Int): String { + if (testDefaltParam(stepId) != stepId) { + return "Fail" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/main/module.info b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/main/module.info new file mode 100644 index 00000000000..406ec8bd244 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/main/module.info @@ -0,0 +1,5 @@ +STEP 0: + dependencies: lib1, lib2 + added file: m.kt +STEP 1: + dependencies: lib1, lib2 diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/project.info b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/project.info new file mode 100644 index 00000000000..e0c29a65aaa --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/project.info @@ -0,0 +1,9 @@ +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + dirty js: lib1, lib2, main +STEP 1: + libs: lib1, lib2, main + dirty js: lib1 +