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"); + } }