From 7f319c18de4dd4397f97d7a4c461daf4c4288cf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Wed, 8 Jan 2020 13:17:58 +0100 Subject: [PATCH] JVM IR: Mark Enum.$VALUES field as synthetic (#2957) --- .../kotlin/backend/jvm/lower/EnumClassLowering.kt | 1 - .../kotlin/ir/declarations/IrDeclarationOrigin.kt | 2 +- compiler/testData/writeFlags/property/enumFields.kt | 11 +++++++++++ .../kotlin/codegen/flags/WriteFlagsTestGenerated.java | 5 +++++ .../kotlin/codegen/ir/IrWriteFlagsTestGenerated.java | 5 +++++ 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/writeFlags/property/enumFields.kt diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt index fbae32c7fe0..11873fea225 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/EnumClassLowering.kt @@ -257,7 +257,6 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP val irValuesInitializer = createSyntheticValuesFieldInitializerExpression() val descriptor = WrappedFieldDescriptor() - // TODO: mark ACC_SYNTHETIC return IrFieldImpl( UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.FIELD_FOR_ENUM_VALUES, IrFieldSymbolImpl(descriptor), diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt index 2c8bb15ac8d..8988283a583 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt @@ -49,7 +49,7 @@ interface IrDeclarationOrigin { object BRIDGE_SPECIAL: IrDeclarationOriginImpl("BRIDGE_SPECIAL") object FIELD_FOR_ENUM_ENTRY : IrDeclarationOriginImpl("FIELD_FOR_ENUM_ENTRY") - object FIELD_FOR_ENUM_VALUES : IrDeclarationOriginImpl("FIELD_FOR_ENUM_VALUES") + object FIELD_FOR_ENUM_VALUES : IrDeclarationOriginImpl("FIELD_FOR_ENUM_VALUES", isSynthetic = true) object FIELD_FOR_OBJECT_INSTANCE : IrDeclarationOriginImpl("FIELD_FOR_OBJECT_INSTANCE") val isSynthetic: Boolean get() = false diff --git a/compiler/testData/writeFlags/property/enumFields.kt b/compiler/testData/writeFlags/property/enumFields.kt new file mode 100644 index 00000000000..b10164604b1 --- /dev/null +++ b/compiler/testData/writeFlags/property/enumFields.kt @@ -0,0 +1,11 @@ +enum class Test { + A +} + +// TESTED_OBJECT_KIND: property +// TESTED_OBJECTS: Test, $VALUES +// FLAGS: ACC_PRIVATE, ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC + +// TESTED_OBJECT_KIND: property +// TESTED_OBJECTS: Test, A +// FLAGS: ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java index 105d69b105b..f7bc694baf3 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java @@ -902,6 +902,11 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/writeFlags/property"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true); } + @TestMetadata("enumFields.kt") + public void testEnumFields() throws Exception { + runTest("compiler/testData/writeFlags/property/enumFields.kt"); + } + @TestMetadata("compiler/testData/writeFlags/property/classObject") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteFlagsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteFlagsTestGenerated.java index ec73ac25c7b..b8c7762e643 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteFlagsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrWriteFlagsTestGenerated.java @@ -902,6 +902,11 @@ public class IrWriteFlagsTestGenerated extends AbstractIrWriteFlagsTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/writeFlags/property"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } + @TestMetadata("enumFields.kt") + public void testEnumFields() throws Exception { + runTest("compiler/testData/writeFlags/property/enumFields.kt"); + } + @TestMetadata("compiler/testData/writeFlags/property/classObject") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)