diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java index da643a50d59..e05248eeef5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java @@ -91,13 +91,16 @@ public abstract class MutableClassDescriptorLite extends ClassDescriptorBase { } private static boolean isStatic(ClassDescriptor declarationClassDescriptor) { + if (declarationClassDescriptor.getKind() == ClassKind.ENUM_CLASS) { + return true; + } DeclarationDescriptor containingDescriptor = declarationClassDescriptor.getContainingDeclaration(); if (containingDescriptor instanceof NamespaceDescriptor) { return true; } else if (containingDescriptor instanceof ClassDescriptor) { ClassDescriptor containingClassDescriptor = (ClassDescriptor) containingDescriptor; - return containingClassDescriptor.getKind().isObject() || declarationClassDescriptor.getKind() == ClassKind.ENUM_CLASS; + return containingClassDescriptor.getKind().isObject(); } else { return false; diff --git a/compiler/testData/codegen/enum/inFunction.kt b/compiler/testData/codegen/enum/inFunction.kt new file mode 100644 index 00000000000..bcf9ae88113 --- /dev/null +++ b/compiler/testData/codegen/enum/inFunction.kt @@ -0,0 +1,11 @@ +// KT-2948 Assertion fails on a local enum + +fun foo(): String { + enum class E { + OK + } + + return E.OK.toString() +} + +fun box(): String = foo() \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java index aef8740d74f..3c44528a5ee 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/EnumGenTest.java @@ -164,6 +164,10 @@ public class EnumGenTest extends CodegenTestCase { blackBoxFile("enum/inner.kt"); } + public void testInFunction() { + blackBoxFile("enum/inFunction.kt"); + } + public void testInnerWithExistingClassObject() { blackBoxFile("enum/innerWithExistingClassObject.kt"); }