From 813c7d0871afc688fa831782bc768c92763b8410 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Wed, 15 Aug 2012 16:06:06 +0300 Subject: [PATCH] test for obsolete KT-1119 & proper final flag for enum class with entries overriding methods/properties --- .../jet/codegen/ImplementationBodyCodegen.java | 7 +++++++ compiler/testData/codegen/regressions/kt1119.kt | 11 +++++++++++ .../tests/org/jetbrains/jet/codegen/EnumGenTest.java | 4 ++++ 3 files changed, 22 insertions(+) create mode 100644 compiler/testData/codegen/regressions/kt1119.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 7044253cdce..7504e3542f6 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -130,6 +130,13 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { access |= ACC_ANNOTATION; } if (isEnum) { + for (JetDeclaration declaration : myClass.getDeclarations()) { + if (declaration instanceof JetEnumEntry) { + if (state.getInjector().getClosureAnnotator().enumEntryNeedSubclass((JetEnumEntry) declaration)) { + access &= ~ACC_FINAL; + } + } + } access |= ACC_ENUM; } v.defineClass(myClass, V1_6, diff --git a/compiler/testData/codegen/regressions/kt1119.kt b/compiler/testData/codegen/regressions/kt1119.kt new file mode 100644 index 00000000000..9c371666f30 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt1119.kt @@ -0,0 +1,11 @@ +enum class Direction() { + NORTH { + val someSpecialValue = "OK" + } + + SOUTH + WEST + EAST +} + +fun box() = Direction.NORTH.someSpecialValue diff --git a/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java index 516195f6664..c57ea2dae7a 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java @@ -131,4 +131,8 @@ public class EnumGenTest extends CodegenTestCase { catch (ClassNotFoundException e) { } } + + public void testKt1119() { + blackBoxFile("regressions/kt1119.kt"); + } }