From f5b81b7935474c3ffdaff1d208a0c4c24be9eb8f Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 30 May 2016 14:35:54 +0300 Subject: [PATCH] Preserve sources properly for coroutine parts Otherwise incremental reporting leads to exception when inlining into coroutine body happens Original commit: 07592398c17451f8a47d4a09c0b3a01c1958ac70 --- ...perimentalIncrementalJpsTestGenerated.java | 6 +++++ .../build/IncrementalJpsTestGenerated.java | 6 +++++ .../inlineFunCallSite/coroutine/build.log | 24 +++++++++++++++++++ .../inlineFunCallSite/coroutine/inline.kt | 5 ++++ .../inlineFunCallSite/coroutine/inline.kt.new | 5 ++++ .../inlineFunCallSite/coroutine/usage.kt | 18 ++++++++++++++ 6 files changed, 64 insertions(+) create mode 100644 jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/build.log create mode 100644 jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/inline.kt create mode 100644 jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/inline.kt.new create mode 100644 jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/usage.kt diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java index c88cb6cc955..4daade82888 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java @@ -1124,6 +1124,12 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta doTest(fileName); } + @TestMetadata("coroutine") + public void testCoroutine() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/inlineFunCallSite/coroutine/"); + doTest(fileName); + } + @TestMetadata("function") public void testFunction() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/inlineFunCallSite/function/"); diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java index 23aba42cd33..bcc80c08637 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java @@ -1124,6 +1124,12 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("coroutine") + public void testCoroutine() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/inlineFunCallSite/coroutine/"); + doTest(fileName); + } + @TestMetadata("function") public void testFunction() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/inlineFunCallSite/function/"); diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/build.log new file mode 100644 index 00000000000..c8c6fee67d7 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/build.log @@ -0,0 +1,24 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/inline/InlineKt.class +End of files +Compiling files: + src/inline.kt +End of files +Marked as dirty by Kotlin: + src/usage.kt +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/usage/Controller.class + out/production/module/usage/UsageKt$bar$1.class + out/production/module/usage/UsageKt.class +End of files +Compiling files: + src/usage.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/inline.kt b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/inline.kt new file mode 100644 index 00000000000..9c46b1383d6 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/inline.kt @@ -0,0 +1,5 @@ +package inline + +inline fun f(x: Int): Int { + return x - 1 +} diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/inline.kt.new b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/inline.kt.new new file mode 100644 index 00000000000..7c3b34f3b5d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/inline.kt.new @@ -0,0 +1,5 @@ +package inline + +inline fun f(x: Int): Int { + return x + 1 +} diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/usage.kt b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/usage.kt new file mode 100644 index 00000000000..ed10ee21c2d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/usage.kt @@ -0,0 +1,18 @@ +package usage + +fun async(coroutine x: Controller.() -> Continuation) { + x(Controller()).resume(Unit) +} + +class Controller { + suspend fun step(param: Int, next: Continuation) { + next.resume(param + 1) + } +} + +fun bar() { + async { + val result = step(1) + inline.f(result) + } +}