mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-51134: Refactor / rename could work for JSP taglib prefix
This commit is contained in:
+8
-3
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user