IDEA-51134: Refactor / rename could work for JSP taglib prefix

This commit is contained in:
Dmitry Avdeev
2010-07-09 16:41:40 +04:00
parent 628a356679
commit 08728cdebb
5 changed files with 20 additions and 28 deletions
@@ -38,7 +38,7 @@ public class VariableInplaceRenameHandler implements RenameHandler {
private static final ThreadLocal<Boolean> ourPreventInlineRenameFlag = new ThreadLocal<Boolean>();
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);
}
@@ -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());
}
}
@@ -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<XmlElement> {
}
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());
@@ -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;
}
@@ -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) {