From 45628a15fbef1044805256dd34eb95bb9fe31b19 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Wed, 26 Jul 2017 13:32:46 +0200 Subject: [PATCH] Properly generate inner classes when compiling source for inline KT-19175: Compiler generates different bytecode when classes are compiled separately or together #KT-19175 Fixed Original commit: ff676c050fbbdb1d37f592ab9a778ea94cd0d652 --- .../ExperimentalIncrementalJpsTestGenerated.java | 6 ++++++ .../Introspector.kt | 10 ++++++++++ .../IntrospectorImpl.kt.new | 12 ++++++++++++ .../innerClassNotGeneratedWhenRebuilding/Model.java | 4 ++++ .../ModelModifier.java | 3 +++ .../innerClassNotGeneratedWhenRebuilding/build.log | 7 +++++++ 6 files changed, 42 insertions(+) create mode 100644 jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/Introspector.kt create mode 100644 jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/IntrospectorImpl.kt.new create mode 100644 jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/Model.java create mode 100644 jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/ModelModifier.java create mode 100644 jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/build.log 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 f349f6d69bc..748c87e713a 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 @@ -1466,6 +1466,12 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta doTest(fileName); } + @TestMetadata("innerClassNotGeneratedWhenRebuilding") + public void testInnerClassNotGeneratedWhenRebuilding() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/"); + doTest(fileName); + } + @TestMetadata("jvmNameChanged") public void testJvmNameChanged() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/jvmNameChanged/"); diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/Introspector.kt b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/Introspector.kt new file mode 100644 index 00000000000..c46629ef944 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/Introspector.kt @@ -0,0 +1,10 @@ +abstract class Introspector(protected val model: Model) { + protected abstract inner class Retriever(protected val transaction: Any) { + protected var model: Model = this@Introspector.model + } + + protected abstract inner class SchemaRetriever(transaction: Any): Retriever(transaction) { + protected inline fun inSchema(crossinline modifier: (Any) -> Unit) = + model.modify { schema -> modifier.invoke(schema) } + } +} diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/IntrospectorImpl.kt.new b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/IntrospectorImpl.kt.new new file mode 100644 index 00000000000..75ae9d6cf2d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/IntrospectorImpl.kt.new @@ -0,0 +1,12 @@ +class IntrospectorImpl(model: ModuleImpl) : Introspector(model) { + private inner class SchemaRetriever(transaction: Any) : Introspector.SchemaRetriever(transaction) { + internal fun retrieve() { + inSchema { schema -> println(schema) } + } + } +} + +class ModuleImpl : Model { + override fun modify(modifier: ModelModifier) {} +} + diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/Model.java b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/Model.java new file mode 100644 index 00000000000..82f6d6476f6 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/Model.java @@ -0,0 +1,4 @@ +public interface Model { + void modify(ModelModifier modifier); +} + diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/ModelModifier.java b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/ModelModifier.java new file mode 100644 index 00000000000..fb19636744f --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/ModelModifier.java @@ -0,0 +1,3 @@ +public interface ModelModifier { + void perform(Object element); +} diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/build.log new file mode 100644 index 00000000000..632a8a2344b --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/innerClassNotGeneratedWhenRebuilding/build.log @@ -0,0 +1,7 @@ +================ Step #1 ================= + +Compiling files: + src/IntrospectorImpl.kt +End of files +Exit code: OK +------------------------------------------ \ No newline at end of file