From 08728cdebbb16e8471392e6fb4311a3a5a09e3e7 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 9 Jul 2010 16:40:21 +0400 Subject: [PATCH] IDEA-51134: Refactor / rename could work for JSP taglib prefix --- .../inplace/VariableInplaceRenameHandler.java | 11 ++++++++--- .../psi/impl/source/xml/SchemaPrefix.java | 6 ++---- .../impl/source/xml/SchemaPrefixReference.java | 10 +--------- xml/impl/src/com/intellij/xml/XmlExtension.java | 6 ++++++ .../refactoring/SchemaPrefixRenameHandler.java | 15 +++------------ 5 files changed, 20 insertions(+), 28 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenameHandler.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenameHandler.java index 5e03a82c9f0f..aa9655238917 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenameHandler.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenameHandler.java @@ -38,7 +38,7 @@ public class VariableInplaceRenameHandler implements RenameHandler { private static final ThreadLocal ourPreventInlineRenameFlag = new ThreadLocal(); private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler"); - public boolean isAvailableOnDataContext(final DataContext dataContext) { + public final boolean isAvailableOnDataContext(final DataContext dataContext) { final PsiElement element = PsiElementRenameHandler.getElement(dataContext); final Editor editor = PlatformDataKeys.EDITOR.getData(dataContext); final PsiFile file = LangDataKeys.PSI_FILE.getData(dataContext); @@ -47,15 +47,20 @@ public class VariableInplaceRenameHandler implements RenameHandler { if (ourPreventInlineRenameFlag.get() != null) { return false; } + return isAvailable(element, editor, file); + } + + protected boolean isAvailable(PsiElement element, Editor editor, PsiFile file) { final PsiElement nameSuggestionContext = file.findElementAt(editor.getCaretModel().getOffset()); - final RefactoringSupportProvider supportProvider = element != null ? LanguageRefactoringSupport.INSTANCE.forLanguage(element.getLanguage()):null; + final RefactoringSupportProvider + supportProvider = element != null ? LanguageRefactoringSupport.INSTANCE.forLanguage(element.getLanguage()):null; return supportProvider != null && editor.getSettings().isVariableInplaceRenameEnabled() && supportProvider.doInplaceRenameFor(element, nameSuggestionContext); } - public boolean isRenaming(final DataContext dataContext) { + public final boolean isRenaming(final DataContext dataContext) { return isAvailableOnDataContext(dataContext); } diff --git a/xml/impl/src/com/intellij/psi/impl/source/xml/SchemaPrefix.java b/xml/impl/src/com/intellij/psi/impl/source/xml/SchemaPrefix.java index 54c10e76fd95..48209276767b 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/xml/SchemaPrefix.java +++ b/xml/impl/src/com/intellij/psi/impl/source/xml/SchemaPrefix.java @@ -17,11 +17,10 @@ package com.intellij.psi.impl.source.xml; import com.intellij.openapi.util.TextRange; import com.intellij.psi.impl.RenameableFakePsiElement; -import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; import com.intellij.psi.xml.XmlAttribute; -import com.intellij.psi.xml.XmlFile; import com.intellij.util.Icons; +import com.intellij.xml.XmlExtension; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -74,7 +73,6 @@ public class SchemaPrefix extends RenameableFakePsiElement { @NotNull @Override public SearchScope getUseScope() { - XmlAttribute declaration = getDeclaration(); - return new LocalSearchScope(declaration.isNamespaceDeclaration() ? declaration.getParent() : ((XmlFile)declaration.getContainingFile()).getDocument()); + return XmlExtension.getExtension(getContainingFile()).getNsPrefixScope(getDeclaration()); } } diff --git a/xml/impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java b/xml/impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java index 0cf3ce3aa5ab..7a2d3833b47d 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java +++ b/xml/impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java @@ -19,8 +19,6 @@ import com.intellij.openapi.util.NullableLazyValue; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReferenceBase; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.SearchScope; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.*; import com.intellij.util.ArrayUtil; @@ -41,13 +39,7 @@ public class SchemaPrefixReference extends PsiReferenceBase { } else if (myElement instanceof XmlAttributeValue && ((XmlAttribute)((XmlAttributeValue)myElement).getParent()).getLocalName().equals("prefix")) { - return new SchemaPrefix((XmlAttribute)myElement.getParent(), getRangeInElement().shiftRight(myElement.getStartOffsetInParent()), myName) { - @NotNull - @Override - public SearchScope getUseScope() { - return new LocalSearchScope(((XmlFile)myElement.getContainingFile()).getDocument()); - } - }; + return new SchemaPrefix((XmlAttribute)myElement.getParent(), getRangeInElement().shiftRight(myElement.getStartOffsetInParent()), myName); } else { XmlExtension extension = XmlExtension.getExtension(myElement.getContainingFile()); diff --git a/xml/impl/src/com/intellij/xml/XmlExtension.java b/xml/impl/src/com/intellij/xml/XmlExtension.java index a2b39f8edc60..43ab08f8de94 100644 --- a/xml/impl/src/com/intellij/xml/XmlExtension.java +++ b/xml/impl/src/com/intellij/xml/XmlExtension.java @@ -29,6 +29,8 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.source.xml.TagNameReference; +import com.intellij.psi.search.LocalSearchScope; +import com.intellij.psi.search.SearchScope; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlDocument; import com.intellij.psi.xml.XmlFile; @@ -156,6 +158,10 @@ public abstract class XmlExtension { @Nullable public abstract XmlAttribute getPrefixDeclaration(final XmlTag context, String namespacePrefix); + public SearchScope getNsPrefixScope(XmlAttribute declaration) { + return new LocalSearchScope(declaration.getParent()); + } + public boolean shouldBeHighlightedAsTag(XmlTag tag) { return true; } diff --git a/xml/impl/src/com/intellij/xml/refactoring/SchemaPrefixRenameHandler.java b/xml/impl/src/com/intellij/xml/refactoring/SchemaPrefixRenameHandler.java index e5dbf87336d3..838fbee82313 100644 --- a/xml/impl/src/com/intellij/xml/refactoring/SchemaPrefixRenameHandler.java +++ b/xml/impl/src/com/intellij/xml/refactoring/SchemaPrefixRenameHandler.java @@ -15,9 +15,6 @@ */ package com.intellij.xml.refactoring; -import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.actionSystem.LangDataKeys; -import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -36,18 +33,12 @@ import java.util.Collection; */ public class SchemaPrefixRenameHandler extends VariableInplaceRenameHandler { - public boolean isAvailableOnDataContext(DataContext dataContext) { - SchemaPrefixReference ref = getReference(dataContext); + @Override + protected boolean isAvailable(PsiElement element, Editor editor, PsiFile file) { + SchemaPrefixReference ref = getReference(file, editor); return ref != null && ref.resolve() != null; } - @Nullable - private static SchemaPrefixReference getReference(DataContext dataContext) { - PsiFile file = LangDataKeys.PSI_FILE.getData(dataContext); - Editor editor = PlatformDataKeys.EDITOR.getData(dataContext); - return getReference(file, editor); - } - @Nullable private static SchemaPrefixReference getReference(PsiFile file, Editor editor) { if (file != null && editor != null) {