From 7bab3a10481826da744139bfe44f1f664816983e Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Fri, 15 Nov 2019 14:10:06 +0100 Subject: [PATCH] Set non-synthetic origin for generated members of PropertyReference --- .../kotlin/backend/jvm/DeclarationOrigins.kt | 1 + .../jvm/lower/CallableReferenceLowering.kt | 4 +-- .../lower/InlineCallableReferenceToLambda.kt | 4 +-- .../jvm/lower/PropertyReferenceLowering.kt | 4 ++- .../flags/functionReference.kt | 25 +++++++++++++++++++ .../functionReferenceInInlineFunction.kt | 0 .../flags/propertyReference.kt | 25 +++++++++++++++++++ .../propertyReferenceInInlineFunction.kt | 0 .../visibility/functionReference.kt | 9 ------- .../visibility/propertyReference.kt | 9 ------- .../flags/WriteFlagsTestGenerated.java | 16 ++++++------ .../codegen/ir/IrWriteFlagsTestGenerated.java | 16 ++++++------ 12 files changed, 74 insertions(+), 39 deletions(-) create mode 100644 compiler/testData/writeFlags/callableReference/flags/functionReference.kt rename compiler/testData/writeFlags/callableReference/{visibility => flags}/functionReferenceInInlineFunction.kt (100%) create mode 100644 compiler/testData/writeFlags/callableReference/flags/propertyReference.kt rename compiler/testData/writeFlags/callableReference/{visibility => flags}/propertyReferenceInInlineFunction.kt (100%) delete mode 100644 compiler/testData/writeFlags/callableReference/visibility/functionReference.kt delete mode 100644 compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/DeclarationOrigins.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/DeclarationOrigins.kt index c60dcf75086..8c291143d8f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/DeclarationOrigins.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/DeclarationOrigins.kt @@ -39,6 +39,7 @@ interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin { IrDeclarationOriginImpl("SYNTHETIC_METHOD_FOR_TYPEALIAS_ANNOTATIONS", isSynthetic = true) object GENERATED_PROPERTY_REFERENCE : IrDeclarationOriginImpl("GENERATED_PROPERTY_REFERENCE", isSynthetic = true) object GENERATED_SAM_IMPLEMENTATION : IrDeclarationOriginImpl("GENERATED_SAM_IMPLEMENTATION", isSynthetic = true) + object GENERATED_MEMBER_IN_CALLABLE_REFERENCE : IrDeclarationOriginImpl("GENERATED_MEMBER_IN_CALLABLE_REFERENCE", isSynthetic = false) object ENUM_MAPPINGS_FOR_WHEN : IrDeclarationOriginImpl("ENUM_MAPPINGS_FOR_WHEN", isSynthetic = true) object SYNTHETIC_INLINE_CLASS_MEMBER : IrDeclarationOriginImpl("SYNTHETIC_INLINE_CLASS_MEMBER", isSynthetic = true) object INLINE_CLASS_GENERATED_IMPL_METHOD : IrDeclarationOriginImpl("INLINE_CLASS_GENERATED_IMPL_METHOD") diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt index 80d58426f45..966551e767d 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt @@ -172,7 +172,7 @@ internal class CallableReferenceLowering(private val context: JvmBackendContext) private fun createConstructor(): IrConstructor = functionReferenceClass.addConstructor { setSourceRange(irFunctionReference) - origin = JvmLoweredDeclarationOrigin.FUNCTION_REFERENCE_IMPL + origin = JvmLoweredDeclarationOrigin.GENERATED_MEMBER_IN_CALLABLE_REFERENCE returnType = functionReferenceClass.defaultType isPrimary = true }.apply { @@ -323,7 +323,7 @@ internal class CallableReferenceLowering(private val context: JvmBackendContext) private fun buildOverride(superFunction: IrSimpleFunction, newReturnType: IrType = superFunction.returnType): IrSimpleFunction = functionReferenceClass.addFunction { setSourceRange(irFunctionReference) - origin = functionReferenceClass.origin + origin = JvmLoweredDeclarationOrigin.GENERATED_MEMBER_IN_CALLABLE_REFERENCE name = superFunction.name returnType = newReturnType visibility = superFunction.visibility diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InlineCallableReferenceToLambda.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InlineCallableReferenceToLambda.kt index b36b1f87c5a..c5009e59fc5 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InlineCallableReferenceToLambda.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InlineCallableReferenceToLambda.kt @@ -79,7 +79,7 @@ internal class InlineCallableReferenceToLambdaPhase(val context: JvmBackendConte return irBuilder.irBlock(expression, IrStatementOrigin.LAMBDA) { val function = buildFun { setSourceRange(expression) - origin = JvmLoweredDeclarationOrigin.FUNCTION_REFERENCE_IMPL + origin = JvmLoweredDeclarationOrigin.GENERATED_MEMBER_IN_CALLABLE_REFERENCE name = Name.identifier("stub_for_inline") visibility = Visibilities.LOCAL returnType = field.type @@ -124,7 +124,7 @@ internal class InlineCallableReferenceToLambdaPhase(val context: JvmBackendConte val function = buildFun { setSourceRange(expression) - origin = JvmLoweredDeclarationOrigin.FUNCTION_REFERENCE_IMPL + origin = JvmLoweredDeclarationOrigin.GENERATED_MEMBER_IN_CALLABLE_REFERENCE name = Name.identifier("stub_for_inlining") visibility = Visibilities.LOCAL returnType = referencedFunction.returnType diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt index 2828bb5ca36..5261b31de01 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/PropertyReferenceLowering.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin import org.jetbrains.kotlin.backend.jvm.ir.createJvmIrBuilder import org.jetbrains.kotlin.backend.jvm.ir.irArrayOf +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.* @@ -102,7 +103,8 @@ internal class PropertyReferenceLowering(val context: JvmBackendContext) : Class name = method.name returnType = method.returnType visibility = method.visibility - origin = this@addOverride.origin + modality = Modality.OPEN + origin = JvmLoweredDeclarationOrigin.GENERATED_MEMBER_IN_CALLABLE_REFERENCE }.apply { overriddenSymbols.add(method.symbol) dispatchReceiverParameter = thisReceiver!!.copyTo(this) diff --git a/compiler/testData/writeFlags/callableReference/flags/functionReference.kt b/compiler/testData/writeFlags/callableReference/flags/functionReference.kt new file mode 100644 index 00000000000..d75c8916d49 --- /dev/null +++ b/compiler/testData/writeFlags/callableReference/flags/functionReference.kt @@ -0,0 +1,25 @@ +class A { + fun foo() {} + + val bar = A::foo +} + +// TESTED_OBJECT_KIND: class +// TESTED_OBJECTS: A$bar$1 +// FLAGS: ACC_FINAL, ACC_SUPER, ACC_SYNTHETIC + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: A$bar$1, getName +// FLAGS: ACC_PUBLIC, ACC_FINAL + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: A$bar$1, getOwner +// FLAGS: ACC_PUBLIC, ACC_FINAL + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: A$bar$1, getSignature +// FLAGS: ACC_PUBLIC, ACC_FINAL + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: A$bar$1, invoke +// FLAGS: ACC_PUBLIC, ACC_FINAL \ No newline at end of file diff --git a/compiler/testData/writeFlags/callableReference/visibility/functionReferenceInInlineFunction.kt b/compiler/testData/writeFlags/callableReference/flags/functionReferenceInInlineFunction.kt similarity index 100% rename from compiler/testData/writeFlags/callableReference/visibility/functionReferenceInInlineFunction.kt rename to compiler/testData/writeFlags/callableReference/flags/functionReferenceInInlineFunction.kt diff --git a/compiler/testData/writeFlags/callableReference/flags/propertyReference.kt b/compiler/testData/writeFlags/callableReference/flags/propertyReference.kt new file mode 100644 index 00000000000..3875cc57d89 --- /dev/null +++ b/compiler/testData/writeFlags/callableReference/flags/propertyReference.kt @@ -0,0 +1,25 @@ +class A { + val foo = "" + + val bar = A::foo +} + +// TESTED_OBJECT_KIND: class +// TESTED_OBJECTS: A$bar$1 +// FLAGS: ACC_FINAL, ACC_SUPER, ACC_SYNTHETIC + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: A$bar$1, getName +// FLAGS: ACC_PUBLIC + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: A$bar$1, getOwner +// FLAGS: ACC_PUBLIC + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: A$bar$1, getSignature +// FLAGS: ACC_PUBLIC + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: A$bar$1, get +// FLAGS: ACC_PUBLIC \ No newline at end of file diff --git a/compiler/testData/writeFlags/callableReference/visibility/propertyReferenceInInlineFunction.kt b/compiler/testData/writeFlags/callableReference/flags/propertyReferenceInInlineFunction.kt similarity index 100% rename from compiler/testData/writeFlags/callableReference/visibility/propertyReferenceInInlineFunction.kt rename to compiler/testData/writeFlags/callableReference/flags/propertyReferenceInInlineFunction.kt diff --git a/compiler/testData/writeFlags/callableReference/visibility/functionReference.kt b/compiler/testData/writeFlags/callableReference/visibility/functionReference.kt deleted file mode 100644 index bae66e6de6c..00000000000 --- a/compiler/testData/writeFlags/callableReference/visibility/functionReference.kt +++ /dev/null @@ -1,9 +0,0 @@ -class A { - fun foo() {} - - val bar = A::foo -} - -// TESTED_OBJECT_KIND: class -// TESTED_OBJECTS: A$bar$1 -// FLAGS: ACC_FINAL, ACC_SUPER, ACC_SYNTHETIC diff --git a/compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt b/compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt deleted file mode 100644 index eeab284fba0..00000000000 --- a/compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt +++ /dev/null @@ -1,9 +0,0 @@ -class A { - val foo = "" - - val bar = A::foo -} - -// TESTED_OBJECT_KIND: class -// TESTED_OBJECTS: A$bar$1 -// FLAGS: ACC_FINAL, ACC_SUPER, ACC_SYNTHETIC diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java index f2534ce18d8..cd942d33fbd 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java @@ -41,36 +41,36 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/callableReference"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); } - @TestMetadata("compiler/testData/writeFlags/callableReference/visibility") + @TestMetadata("compiler/testData/writeFlags/callableReference/flags") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) - public static class Visibility extends AbstractWriteFlagsTest { + public static class Flags extends AbstractWriteFlagsTest { private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM, testDataFilePath); } - public void testAllFilesPresentInVisibility() throws Exception { - KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/callableReference/visibility"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); + public void testAllFilesPresentInFlags() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/callableReference/flags"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); } @TestMetadata("functionReference.kt") public void testFunctionReference() throws Exception { - runTest("compiler/testData/writeFlags/callableReference/visibility/functionReference.kt"); + runTest("compiler/testData/writeFlags/callableReference/flags/functionReference.kt"); } @TestMetadata("functionReferenceInInlineFunction.kt") public void testFunctionReferenceInInlineFunction() throws Exception { - runTest("compiler/testData/writeFlags/callableReference/visibility/functionReferenceInInlineFunction.kt"); + runTest("compiler/testData/writeFlags/callableReference/flags/functionReferenceInInlineFunction.kt"); } @TestMetadata("propertyReference.kt") public void testPropertyReference() throws Exception { - runTest("compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt"); + runTest("compiler/testData/writeFlags/callableReference/flags/propertyReference.kt"); } @TestMetadata("propertyReferenceInInlineFunction.kt") public void testPropertyReferenceInInlineFunction() throws Exception { - runTest("compiler/testData/writeFlags/callableReference/visibility/propertyReferenceInInlineFunction.kt"); + runTest("compiler/testData/writeFlags/callableReference/flags/propertyReferenceInInlineFunction.kt"); } } } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteFlagsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteFlagsTestGenerated.java index 959501de2fe..34d3ed8eac0 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteFlagsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteFlagsTestGenerated.java @@ -41,36 +41,36 @@ public class IrWriteFlagsTestGenerated extends AbstractIrWriteFlagsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/callableReference"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true); } - @TestMetadata("compiler/testData/writeFlags/callableReference/visibility") + @TestMetadata("compiler/testData/writeFlags/callableReference/flags") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) - public static class Visibility extends AbstractIrWriteFlagsTest { + public static class Flags extends AbstractIrWriteFlagsTest { private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath); } - public void testAllFilesPresentInVisibility() throws Exception { - KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/callableReference/visibility"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true); + public void testAllFilesPresentInFlags() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/callableReference/flags"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM_IR, true); } @TestMetadata("functionReference.kt") public void testFunctionReference() throws Exception { - runTest("compiler/testData/writeFlags/callableReference/visibility/functionReference.kt"); + runTest("compiler/testData/writeFlags/callableReference/flags/functionReference.kt"); } @TestMetadata("functionReferenceInInlineFunction.kt") public void testFunctionReferenceInInlineFunction() throws Exception { - runTest("compiler/testData/writeFlags/callableReference/visibility/functionReferenceInInlineFunction.kt"); + runTest("compiler/testData/writeFlags/callableReference/flags/functionReferenceInInlineFunction.kt"); } @TestMetadata("propertyReference.kt") public void testPropertyReference() throws Exception { - runTest("compiler/testData/writeFlags/callableReference/visibility/propertyReference.kt"); + runTest("compiler/testData/writeFlags/callableReference/flags/propertyReference.kt"); } @TestMetadata("propertyReferenceInInlineFunction.kt") public void testPropertyReferenceInInlineFunction() throws Exception { - runTest("compiler/testData/writeFlags/callableReference/visibility/propertyReferenceInInlineFunction.kt"); + runTest("compiler/testData/writeFlags/callableReference/flags/propertyReferenceInInlineFunction.kt"); } } }