From 5df85f6100edaf4ec238170379a6af105f808bb6 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 18 Apr 2013 20:05:50 +0400 Subject: [PATCH] KT-3525 Duplicate inner class name not detected #KT-3525 Fixed --- .../jetbrains/jet/lang/resolve/DeclarationResolver.java | 8 +++++++- .../tests/redeclarations/RedeclarationsInObjects.kt | 8 ++++++++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index e4605130fe4..03ee1a7576f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -346,7 +346,13 @@ public class DeclarationResolver { } private void checkRedeclarationsInInnerClassNames() { - for (MutableClassDescriptor classDescriptor : context.getClasses().values()) { + Iterable classesAndObjects = Iterables.concat(context.getClasses().values(), context.getObjects().values()); + for (MutableClassDescriptor classDescriptor : classesAndObjects) { + if (classDescriptor.getKind() == ClassKind.CLASS_OBJECT) { + // Class objects should be considered during analysing redeclarations in classes + continue; + } + Collection allDescriptors = classDescriptor.getScopeForMemberLookup().getOwnDeclaredDescriptors(); MutableClassDescriptorLite classObj = classDescriptor.getClassObjectDescriptor(); diff --git a/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.kt b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.kt new file mode 100644 index 00000000000..5d1a7bfc92a --- /dev/null +++ b/compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.kt @@ -0,0 +1,8 @@ +// KT-3525 +object B { + class C + class C + + val a : Int = 1 + val a : Int = 1 +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 7ac67528424..2a09f55db89 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -3468,6 +3468,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/redeclarations/Redeclarations.kt"); } + @TestMetadata("RedeclarationsInObjects.kt") + public void testRedeclarationsInObjects() throws Exception { + doTest("compiler/testData/diagnostics/tests/redeclarations/RedeclarationsInObjects.kt"); + } + @TestMetadata("RedeclaredTypeParameters.kt") public void testRedeclaredTypeParameters() throws Exception { doTest("compiler/testData/diagnostics/tests/redeclarations/RedeclaredTypeParameters.kt");