From df5f035760cf81742826c479a342ef9e52ea4da7 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 26 Jun 2015 20:32:03 +0300 Subject: [PATCH] KT-7716 Introduce Variable's name suggestions often have "1" at the end for no real reason #KT-7716 Fixed --- .../kotlin/idea/refactoring/NameValidatorImpl.kt | 5 +++-- .../refactoring/introduceVariable/NameSuggestionBug.kt | 8 ++++++++ .../introduceVariable/NameSuggestionBug.kt.after | 8 ++++++++ .../refactoring/introduce/JetExtractionTestGenerated.java | 6 ++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 idea/testData/refactoring/introduceVariable/NameSuggestionBug.kt create mode 100644 idea/testData/refactoring/introduceVariable/NameSuggestionBug.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/NameValidatorImpl.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/NameValidatorImpl.kt index 425b76996a0..042db54ffd1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/NameValidatorImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/NameValidatorImpl.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.psi.JetExpression import org.jetbrains.kotlin.psi.JetVisitorVoid import org.jetbrains.kotlin.psi.psiUtil.siblings import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.JetScope @@ -78,9 +79,9 @@ public class NameValidatorImpl( if (!visitedScopes.add(resolutionScope)) return val conflict = if (target === Target.PROPERTIES) - resolutionScope.getProperties(name).isNotEmpty() || resolutionScope.getLocalVariable(name) != null + resolutionScope.getProperties(name).any { !it.isExtension } || resolutionScope.getLocalVariable(name) != null else - resolutionScope.getFunctions(name).isNotEmpty() || resolutionScope.getClassifier(name) != null + resolutionScope.getFunctions(name).any { !it.isExtension } || resolutionScope.getClassifier(name) != null if (conflict) { conflictFound = true diff --git a/idea/testData/refactoring/introduceVariable/NameSuggestionBug.kt b/idea/testData/refactoring/introduceVariable/NameSuggestionBug.kt new file mode 100644 index 00000000000..042aa1855be --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/NameSuggestionBug.kt @@ -0,0 +1,8 @@ +class For + +val For.parent: For + get() = For() + +fun foo(f: For) { + f.parent +} \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/NameSuggestionBug.kt.after b/idea/testData/refactoring/introduceVariable/NameSuggestionBug.kt.after new file mode 100644 index 00000000000..dc8f65e7aac --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/NameSuggestionBug.kt.after @@ -0,0 +1,8 @@ +class For + +val For.parent: For + get() = For() + +fun foo(f: For) { + val parent = f.parent +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java index 686d6c50779..18985c72c86 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java @@ -163,6 +163,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { doIntroduceVariableTest(fileName); } + @TestMetadata("NameSuggestionBug.kt") + public void testNameSuggestionBug() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/NameSuggestionBug.kt"); + doIntroduceVariableTest(fileName); + } + @TestMetadata("noConflictWithInnerVariable.kt") public void testNoConflictWithInnerVariable() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/noConflictWithInnerVariable.kt");