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:
+1
-1
@@ -116,7 +116,7 @@ public class XmlUnboundNsPrefixInspection extends XmlSuppressableInspectionTool
|
||||
if (!HighlightLevelUtil.shouldInspect(containingFile)) return;
|
||||
|
||||
final XmlExtension extension = XmlExtension.getExtension(containingFile);
|
||||
if (extension.isPrefixDeclared(context, namespacePrefix)) {
|
||||
if (extension.getPrefixDeclaration(context, namespacePrefix) != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ 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 org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -73,6 +74,7 @@ public class SchemaPrefix extends RenameableFakePsiElement {
|
||||
@NotNull
|
||||
@Override
|
||||
public SearchScope getUseScope() {
|
||||
return new LocalSearchScope(getDeclaration().getParent());
|
||||
XmlAttribute declaration = getDeclaration();
|
||||
return new LocalSearchScope(declaration.isNamespaceDeclaration() ? declaration.getParent() : ((XmlFile)declaration.getContainingFile()).getDocument());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,12 +19,13 @@ 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.xml.XmlAttribute;
|
||||
import com.intellij.psi.xml.XmlElement;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
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;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.xml.util.XmlUtil;
|
||||
import com.intellij.xml.XmlExtension;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
@@ -35,16 +36,26 @@ public class SchemaPrefixReference extends PsiReferenceBase<XmlElement> {
|
||||
private final NullableLazyValue<SchemaPrefix> myPrefix = new NullableLazyValue<SchemaPrefix>() {
|
||||
@Override
|
||||
protected SchemaPrefix compute() {
|
||||
if (myElement instanceof XmlAttribute && ((XmlAttribute)myElement).isNamespaceDeclaration()) {
|
||||
if (myElement instanceof XmlAttribute && (((XmlAttribute)myElement).isNamespaceDeclaration())) {
|
||||
return new SchemaPrefix((XmlAttribute)myElement, getRangeInElement(), myName);
|
||||
}
|
||||
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());
|
||||
}
|
||||
};
|
||||
}
|
||||
else {
|
||||
final PsiElement declaration = XmlUtil.findNamespaceDeclaration(myElement, myName);
|
||||
if (declaration instanceof XmlAttribute) {
|
||||
final XmlAttribute attribute = (XmlAttribute)declaration;
|
||||
final String prefix = attribute.getNamespacePrefix();
|
||||
XmlExtension extension = XmlExtension.getExtension(myElement.getContainingFile());
|
||||
final XmlAttribute declaration = extension.getPrefixDeclaration(PsiTreeUtil.getParentOfType(myElement, XmlTag.class, false), myName);
|
||||
if (declaration != null) {
|
||||
final String prefix = declaration.getNamespacePrefix();
|
||||
final TextRange textRange = TextRange.from(prefix.length() + 1, myName.length());
|
||||
return new SchemaPrefix(attribute, textRange, myName);
|
||||
return new SchemaPrefix(declaration, textRange, myName);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -56,7 +67,6 @@ public class SchemaPrefixReference extends PsiReferenceBase<XmlElement> {
|
||||
public SchemaPrefixReference(XmlElement element, TextRange range, String name) {
|
||||
super(element, range, true);
|
||||
myName = name;
|
||||
|
||||
}
|
||||
|
||||
public String getNamespacePrefix() {
|
||||
|
||||
@@ -242,15 +242,16 @@ public class DefaultXmlExtension extends XmlExtension {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isPrefixDeclared(final XmlTag context, String namespacePrefix) {
|
||||
public XmlAttribute getPrefixDeclaration(final XmlTag context, String namespacePrefix) {
|
||||
@NonNls String nsDeclarationAttrName = null;
|
||||
for(XmlTag t = context; t != null; t = t.getParentTag()) {
|
||||
if (t.hasNamespaceDeclarations()) {
|
||||
if (nsDeclarationAttrName == null) nsDeclarationAttrName = namespacePrefix.length() > 0 ? "xmlns:"+namespacePrefix:"xmlns";
|
||||
if (t.getAttributeValue(nsDeclarationAttrName) != null) return true;
|
||||
XmlAttribute attribute = t.getAttribute(nsDeclarationAttrName);
|
||||
if (attribute != null) return attribute;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Set<String> guessNamespace(final PsiFile file, String tagName) {
|
||||
|
||||
@@ -153,7 +153,8 @@ public abstract class XmlExtension {
|
||||
return HighlightInfoType.ERROR;
|
||||
}
|
||||
|
||||
public abstract boolean isPrefixDeclared(final XmlTag context, String namespacePrefix);
|
||||
@Nullable
|
||||
public abstract XmlAttribute getPrefixDeclaration(final XmlTag context, String namespacePrefix);
|
||||
|
||||
public boolean shouldBeHighlightedAsTag(XmlTag tag) {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user