From 411745f26070efabaaf43172118a17a36583ce98 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 16 Jan 2017 16:40:26 +0300 Subject: [PATCH] Write kotlin metadata on class-files for coroutine state machines Otherwise it breaks JPS assumptions, that leads to exceptions like: Error:Kotlin: [Internal Error] java.lang.AssertionError: Couldn't load KotlinClass from /Users/jetbrains/IdeaProjects/KotlinPlaygroundBeta11/out/production/KotlinPlaygroundBeta11/Counter$both$1.class; it may happen because class doesn't have valid Kotlin annotations at org.jetbrains.kotlin.build.GeneratedJvmClass.(generatedFiles.kt:36) at org.jetbrains.kotlin.jps.build.KotlinBuilder.getGeneratedFiles(KotlinBuilder.kt:469) at org.jetbrains.kotlin.jps.build.KotlinBuilder.doBuild(KotlinBuilder.kt:241) at org.jetbrains.kotlin.jps.build.KotlinBuilder.build(KotlinBuilder.kt:140) ... Original commit: 9f217de10b980e7ff7a3681ea6e5e4e1ee52988d --- .../ExperimentalIncrementalJpsTestGenerated.java | 6 ++++++ .../kotlin/jps/build/IncrementalJpsTestGenerated.java | 6 ++++++ .../pureKotlin/suspendWithStateMachine/Counter.kt | 10 ++++++++++ .../pureKotlin/suspendWithStateMachine/build.log | 11 +++++++++++ .../pureKotlin/suspendWithStateMachine/other.kt | 4 ++++ .../pureKotlin/suspendWithStateMachine/other.kt.touch | 0 6 files changed, 37 insertions(+) create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/Counter.kt create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/build.log create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/other.kt create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/other.kt.touch 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 a8546c42f6b..d6e877b8eee 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 @@ -918,6 +918,12 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta doTest(fileName); } + @TestMetadata("suspendWithStateMachine") + public void testSuspendWithStateMachine() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/"); + doTest(fileName); + } + @TestMetadata("topLevelFunctionSameSignature") public void testTopLevelFunctionSameSignature() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/topLevelFunctionSameSignature/"); 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 27b7e07f341..39d92ad1aca 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 @@ -918,6 +918,12 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("suspendWithStateMachine") + public void testSuspendWithStateMachine() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/"); + doTest(fileName); + } + @TestMetadata("topLevelFunctionSameSignature") public void testTopLevelFunctionSameSignature() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/topLevelFunctionSameSignature/"); diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/Counter.kt b/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/Counter.kt new file mode 100644 index 00000000000..c43e7a6a7d9 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/Counter.kt @@ -0,0 +1,10 @@ +package test + +class Counter { + suspend fun one() {} + suspend fun two() {} + suspend fun both() { + one() + two() + } +} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/build.log new file mode 100644 index 00000000000..ce955a3768c --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/build.log @@ -0,0 +1,11 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/test/OtherKt.class +End of files +Compiling files: + src/other.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/other.kt b/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/other.kt new file mode 100644 index 00000000000..092462c70e0 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/other.kt @@ -0,0 +1,4 @@ +package test + +fun dummyFunction() { +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/other.kt.touch b/jps/jps-plugin/testData/incremental/pureKotlin/suspendWithStateMachine/other.kt.touch new file mode 100644 index 00000000000..e69de29bb2d