From 2e887ebcef12eb559f5690eed7f2009e6ce57782 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 15 Aug 2016 15:43:49 +0300 Subject: [PATCH] Rename: Do not report shadowing conflict if redeclaration is detected #KT-13240 Fixed --- ChangeLog.md | 1 + .../idea/refactoring/rename/renameConflictUtils.kt | 1 + .../before/test.kt | 9 +++++++++ .../noShadowingConflictForSiblingDeclarations.test | 7 +++++++ .../idea/refactoring/rename/RenameTestGenerated.java | 6 ++++++ 5 files changed, 24 insertions(+) create mode 100644 idea/testData/refactoring/rename/noShadowingConflictForSiblingDeclarations/before/test.kt create mode 100644 idea/testData/refactoring/rename/noShadowingConflictForSiblingDeclarations/noShadowingConflictForSiblingDeclarations.test diff --git a/ChangeLog.md b/ChangeLog.md index f7bd1c06b41..ccca7b5ecd3 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -266,6 +266,7 @@ Using 'this' as function argument in constructor of non-final class - [`KT-13239`](https://youtrack.jetbrains.com/issue/KT-13239) Rename: Warn about function name conflicts - [`KT-13174`](https://youtrack.jetbrains.com/issue/KT-13174) Move: Warn about accessibility conflicts due to moving to unrelated module - [`KT-13175`](https://youtrack.jetbrains.com/issue/KT-13175) Move: Warn about accessibility conflicts when moving entire file +- [`KT-13240`](https://youtrack.jetbrains.com/issue/KT-13240) Rename: Do not report shadowing conflict if redeclaration is detected ##### New features diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/renameConflictUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/renameConflictUtils.kt index 02e108872db..25a1ee09645 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/renameConflictUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/renameConflictUtils.kt @@ -162,6 +162,7 @@ fun reportShadowing( result: MutableList ) { val candidate = DescriptorToSourceUtilsIde.getAnyDeclaration(declaration.project, candidateDescriptor) as? PsiNamedElement ?: return + if (declaration.parent == candidate.parent) return val message = "${declaration.renderDescription().capitalize()} will be shadowed by ${candidate.renderDescription()}" result += BasicUnresolvableCollisionUsageInfo(refElement, elementToBindUsageInfoTo, message) } diff --git a/idea/testData/refactoring/rename/noShadowingConflictForSiblingDeclarations/before/test.kt b/idea/testData/refactoring/rename/noShadowingConflictForSiblingDeclarations/before/test.kt new file mode 100644 index 00000000000..63f13715f31 --- /dev/null +++ b/idea/testData/refactoring/rename/noShadowingConflictForSiblingDeclarations/before/test.kt @@ -0,0 +1,9 @@ +package test + +class /*rename*/SameScopeA { val contentA = 1 } +class SameScopeB { val contentB = 2 } + +fun useClass() { + val va = SameScopeA().contentA + val vb = SameScopeB().contentB +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/noShadowingConflictForSiblingDeclarations/noShadowingConflictForSiblingDeclarations.test b/idea/testData/refactoring/rename/noShadowingConflictForSiblingDeclarations/noShadowingConflictForSiblingDeclarations.test new file mode 100644 index 00000000000..d4b7dfd8268 --- /dev/null +++ b/idea/testData/refactoring/rename/noShadowingConflictForSiblingDeclarations/noShadowingConflictForSiblingDeclarations.test @@ -0,0 +1,7 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "test.kt", + "newName": "SameScopeB", + "withRuntime": "true", + "hint": "Class 'SameScopeB' is already declared in package 'test'" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java index 85798530ae1..60483393267 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -227,6 +227,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("noShadowingConflictForSiblingDeclarations/noShadowingConflictForSiblingDeclarations.test") + public void testNoShadowingConflictForSiblingDeclarations_NoShadowingConflictForSiblingDeclarations() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/noShadowingConflictForSiblingDeclarations/noShadowingConflictForSiblingDeclarations.test"); + doTest(fileName); + } + @TestMetadata("parameterRedeclaration/parameterRedeclaration.test") public void testParameterRedeclaration_ParameterRedeclaration() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/parameterRedeclaration/parameterRedeclaration.test");