diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java index f128bad08e3..dbd0e6938d2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java @@ -164,6 +164,14 @@ public class OverloadResolver { ) { MultiMap functionsByName = MultiMap.create(); + if (classDescriptor.getKind() == ClassKind.ENUM_CLASS) { + MutableClassDescriptor classObjectDescriptor = (MutableClassDescriptor) classDescriptor.getClassObjectDescriptor(); + assert classObjectDescriptor != null; + for (CallableMemberDescriptor memberDescriptor : classObjectDescriptor.getDeclaredCallableMembers()) { + functionsByName.putValue(memberDescriptor.getName(), memberDescriptor); + } + } + for (CallableMemberDescriptor function : classDescriptor.getDeclaredCallableMembers()) { functionsByName.putValue(function.getName(), function); } diff --git a/compiler/testData/diagnostics/tests/redeclarations/kt2418.kt b/compiler/testData/diagnostics/tests/redeclarations/kt2418.kt new file mode 100644 index 00000000000..e12db2d2989 --- /dev/null +++ b/compiler/testData/diagnostics/tests/redeclarations/kt2418.kt @@ -0,0 +1,27 @@ +//KT-2418 Front-end allows enum constants with same name + +package kt2418 + +enum class A { + FOO + FOO +} + +enum class B { + FOO + + fun FOO() {} +} + +enum class C { + FOO + + val FOO = 1 +} + +enum class D { + FOO + + class FOO {} +} + diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 9dec273a6fd..a099b6dbd7c 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2245,6 +2245,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/redeclarations/kt2247.kt"); } + @TestMetadata("kt2418.kt") + public void testKt2418() throws Exception { + doTest("compiler/testData/diagnostics/tests/redeclarations/kt2418.kt"); + } + @TestMetadata("kt2438.kt") public void testKt2438() throws Exception { doTest("compiler/testData/diagnostics/tests/redeclarations/kt2438.kt");