diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java index 268d023908a..2a28cd17032 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java @@ -180,7 +180,12 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid { assert descriptor != null : String.format("No descriptor for enum entry \n---\n%s\n---\n", JetPsiUtil.getElementTextWithContext(enumEntry)); - if (!enumEntry.getDeclarations().isEmpty()) { + if (enumEntry.getDeclarations().isEmpty()) { + for (JetDelegationSpecifier specifier : enumEntry.getDelegationSpecifiers()) { + specifier.accept(this); + } + } + else { bindingTrace.record(ENUM_ENTRY_CLASS_NEED_SUBCLASS, descriptor); super.visitEnumEntry(enumEntry); } diff --git a/compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt b/compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt new file mode 100644 index 00000000000..3c7d4c2465a --- /dev/null +++ b/compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt @@ -0,0 +1,19 @@ +// KT-4423 Enum with function not compiled + +enum class Sign(val str: String, val func: (x: Int, y: Int) -> Int){ + plus: Sign("+", { x, y -> x + y }) + + mult: Sign("*", { x, y -> x * y }) { + override fun toString() = "${func(4,5)}" + } +} + +fun box(): String { + val sum = Sign.plus.func(2, 3) + if (sum != 5) return "Fail 1: $sum" + + val product = Sign.mult.toString() + if (product != "20") return "Fail 2: $product" + + return "OK" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 16bb47a4cf9..809efaf623d 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -2649,6 +2649,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("enumWithLambdaParameter.kt") + public void testEnumWithLambdaParameter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt"); + doTest(fileName); + } + @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/inPackage.kt");