From 3923868331a90cbe1cfc8384d0e16f89c83a020d Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 9 Feb 2012 09:28:21 +0100 Subject: [PATCH] spellchecker: forbid to suggest existing name when "Rename To" (IDEA-80936) --- .../PreferrableNameSuggestionProvider.java | 26 +++++++++++++++++++ .../inplace/InplaceVariableIntroducer.java | 5 +++- .../refactoring/rename/RenameDialog.java | 5 +++- .../rename/inplace/InplaceRefactoring.java | 5 +++- .../src/META-INF/SpellCheckerPlugin.xml | 2 +- .../DictionarySuggestionProvider.java | 9 +++++-- 6 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 platform/lang-api/src/com/intellij/refactoring/rename/PreferrableNameSuggestionProvider.java diff --git a/platform/lang-api/src/com/intellij/refactoring/rename/PreferrableNameSuggestionProvider.java b/platform/lang-api/src/com/intellij/refactoring/rename/PreferrableNameSuggestionProvider.java new file mode 100644 index 000000000000..a99ce5ede9a9 --- /dev/null +++ b/platform/lang-api/src/com/intellij/refactoring/rename/PreferrableNameSuggestionProvider.java @@ -0,0 +1,26 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.refactoring.rename; + +/** + * User: anna + * Date: 2/8/12 + */ +public abstract class PreferrableNameSuggestionProvider implements NameSuggestionProvider { + public boolean shouldCheckOthers() { + return true; + } +} diff --git a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/InplaceVariableIntroducer.java b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/InplaceVariableIntroducer.java index 8d7d0c769521..21f0e587b203 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/InplaceVariableIntroducer.java +++ b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/InplaceVariableIntroducer.java @@ -33,7 +33,9 @@ import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.*; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiNamedElement; +import com.intellij.psi.codeStyle.SuggestedNameInfo; import com.intellij.refactoring.rename.NameSuggestionProvider; +import com.intellij.refactoring.rename.PreferrableNameSuggestionProvider; import com.intellij.refactoring.rename.inplace.InplaceRefactoring; import com.intellij.ui.awt.RelativePoint; import com.intellij.util.ui.PositionTracker; @@ -240,7 +242,8 @@ public abstract class InplaceVariableIntroducer extends In final LinkedHashSet names = new LinkedHashSet(); names.add(text); for (NameSuggestionProvider provider : Extensions.getExtensions(NameSuggestionProvider.EP_NAME)) { - provider.getSuggestedNames(psiVariable, psiVariable, names); + final SuggestedNameInfo suggestedNameInfo = provider.getSuggestedNames(psiVariable, psiVariable, names); + if (suggestedNameInfo != null && provider instanceof PreferrableNameSuggestionProvider && !((PreferrableNameSuggestionProvider)provider).shouldCheckOthers()) break; } final LookupElement[] items = new LookupElement[names.size()]; final Iterator iterator = names.iterator(); diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameDialog.java b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameDialog.java index 7ab5099e12a9..e3d2983c6b0f 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameDialog.java @@ -138,7 +138,10 @@ public class RenameDialog extends RefactoringDialog { final NameSuggestionProvider[] providers = Extensions.getExtensions(NameSuggestionProvider.EP_NAME); for(NameSuggestionProvider provider: providers) { SuggestedNameInfo info = provider.getSuggestedNames(myPsiElement, myNameSuggestionContext, result); - if (info != null) mySuggestedNameInfo = info; + if (info != null) { + mySuggestedNameInfo = info; + if (provider instanceof PreferrableNameSuggestionProvider && !((PreferrableNameSuggestionProvider)provider).shouldCheckOthers()) break; + } } if (result.size() == 0) { result.add(UsageViewUtil.getShortName(myPsiElement)); diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java index 71ac83cf8e95..9164e640fa5c 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java @@ -60,6 +60,7 @@ import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.psi.codeStyle.SuggestedNameInfo; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.ProjectScope; @@ -68,6 +69,7 @@ import com.intellij.psi.search.SearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.rename.NameSuggestionProvider; +import com.intellij.refactoring.rename.PreferrableNameSuggestionProvider; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.util.containers.Stack; import org.jetbrains.annotations.NonNls; @@ -616,7 +618,8 @@ public abstract class InplaceRefactoring { if (names == null) { names = new LinkedHashSet(); for (NameSuggestionProvider provider : Extensions.getExtensions(NameSuggestionProvider.EP_NAME)) { - provider.getSuggestedNames(myElementToRename, myElementToRename, names); + final SuggestedNameInfo suggestedNameInfo = provider.getSuggestedNames(myElementToRename, myElementToRename, names); + if (suggestedNameInfo != null && provider instanceof PreferrableNameSuggestionProvider && !((PreferrableNameSuggestionProvider)provider).shouldCheckOthers()) break; } } myLookupItems = new LookupElement[names.size()]; diff --git a/plugins/spellchecker/src/META-INF/SpellCheckerPlugin.xml b/plugins/spellchecker/src/META-INF/SpellCheckerPlugin.xml index 7f4abf63d633..5a4a66dfba5f 100644 --- a/plugins/spellchecker/src/META-INF/SpellCheckerPlugin.xml +++ b/plugins/spellchecker/src/META-INF/SpellCheckerPlugin.xml @@ -28,7 +28,7 @@ key="spellchecking.inspection.name" groupKey="spelling" enabledByDefault="true" level="TYPO" implementationClass="com.intellij.spellchecker.inspections.SpellCheckingInspection"/> - + diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/quickfixes/DictionarySuggestionProvider.java b/plugins/spellchecker/src/com/intellij/spellchecker/quickfixes/DictionarySuggestionProvider.java index 08978686773c..c0d1551251fd 100644 --- a/plugins/spellchecker/src/com/intellij/spellchecker/quickfixes/DictionarySuggestionProvider.java +++ b/plugins/spellchecker/src/com/intellij/spellchecker/quickfixes/DictionarySuggestionProvider.java @@ -18,14 +18,14 @@ package com.intellij.spellchecker.quickfixes; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiNamedElement; import com.intellij.psi.codeStyle.SuggestedNameInfo; -import com.intellij.refactoring.rename.NameSuggestionProvider; +import com.intellij.refactoring.rename.PreferrableNameSuggestionProvider; import com.intellij.spellchecker.SpellCheckerManager; import java.util.Set; import java.util.TreeSet; -public class DictionarySuggestionProvider implements NameSuggestionProvider { +public class DictionarySuggestionProvider extends PreferrableNameSuggestionProvider { private boolean active; @@ -33,6 +33,11 @@ public class DictionarySuggestionProvider implements NameSuggestionProvider { this.active = active; } + @Override + public boolean shouldCheckOthers() { + return !active; + } + public SuggestedNameInfo getSuggestedNames(PsiElement element, PsiElement nameSuggestionContext, Set result) { assert result != null; if (!active || nameSuggestionContext==null) {