From ca615aac3d241ebccc7c33b6bccc6aba854bcf0d Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Wed, 15 Aug 2012 20:25:35 +0300 Subject: [PATCH] KT-2350 fix: enums with overrides and constructor parameters --- .../jetbrains/jet/codegen/ImplementationBodyCodegen.java | 3 +-- compiler/testData/codegen/regressions/kt2350.kt | 7 +++++++ compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/regressions/kt2350.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index ce9fc75dc0d..368e9c68974 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -1088,7 +1088,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { iv.dup(); iv.iconst(ordinal); - // TODO type and constructor parameters ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, enumConstant); String implClass = typeMapper.mapType(classDescriptor.getDefaultType(), MapTypeMode.IMPL).getInternalName(); @@ -1103,7 +1102,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { iv.aconst(enumConstant.getName()); iv.iconst(ordinal); - if (delegationSpecifiers.size() == 1) { + if (delegationSpecifiers.size() == 1 && !state.getInjector().getClosureAnnotator().enumEntryNeedSubclass(enumConstant)) { final JetDelegationSpecifier specifier = delegationSpecifiers.get(0); if (specifier instanceof JetDelegatorToSuperCall) { final JetDelegatorToSuperCall superCall = (JetDelegatorToSuperCall) specifier; diff --git a/compiler/testData/codegen/regressions/kt2350.kt b/compiler/testData/codegen/regressions/kt2350.kt new file mode 100644 index 00000000000..b32bbb58e9b --- /dev/null +++ b/compiler/testData/codegen/regressions/kt2350.kt @@ -0,0 +1,7 @@ +enum class A(val b: String) { + E1: A("OK"){ override fun t() = b } + + abstract fun t(): String +} + +fun box()= A.E1.t() diff --git a/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java index c57ea2dae7a..1aa3990052c 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java @@ -135,4 +135,9 @@ public class EnumGenTest extends CodegenTestCase { public void testKt1119() { blackBoxFile("regressions/kt1119.kt"); } + + public void testKt2350() { + blackBoxFile("regressions/kt2350.kt"); + System.out.println(generateToText()); + } }