From 32423794c94c8146f879a712132ffa88d2050b87 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 9 Jul 2010 18:47:12 +0400 Subject: [PATCH] IDEA-51134: rename for el ns prefixes --- .../psi/impl/source/xml/SchemaPrefix.java | 6 +++++ .../source/xml/SchemaPrefixReference.java | 26 +++++++++++-------- 2 files changed, 21 insertions(+), 11 deletions(-) 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 48209276767b..d0905e2ca6cc 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 @@ -16,6 +16,7 @@ package com.intellij.psi.impl.source.xml; import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiElement; import com.intellij.psi.impl.RenameableFakePsiElement; import com.intellij.psi.search.SearchScope; import com.intellij.psi.xml.XmlAttribute; @@ -75,4 +76,9 @@ public class SchemaPrefix extends RenameableFakePsiElement { public SearchScope getUseScope() { return XmlExtension.getExtension(getContainingFile()).getNsPrefixScope(getDeclaration()); } + + @Override + public boolean isEquivalentTo(PsiElement another) { + return another instanceof SchemaPrefix && ((SchemaPrefix)another).getDeclaration() == 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 7a2d3833b47d..ff276b14be8c 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 @@ -25,6 +25,7 @@ import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.xml.XmlExtension; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Konstantin Bulenkov @@ -42,15 +43,8 @@ public class SchemaPrefixReference extends PsiReferenceBase { return new SchemaPrefix((XmlAttribute)myElement.getParent(), getRangeInElement().shiftRight(myElement.getStartOffsetInParent()), myName); } else { - 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(declaration, textRange, myName); - } + return resolvePrefix(myElement, myName); } - return null; } }; @@ -77,9 +71,7 @@ public class SchemaPrefixReference extends PsiReferenceBase { @Override public boolean isReferenceTo(PsiElement element) { if (!(element instanceof SchemaPrefix) || !myName.equals(((SchemaPrefix)element).getName())) return false; - - SchemaPrefix prefix = resolve(); - return prefix != null && ((SchemaPrefix)element).getDeclaration() == prefix.getDeclaration(); + return super.isReferenceTo(element); } @Override @@ -96,4 +88,16 @@ public class SchemaPrefixReference extends PsiReferenceBase { } return super.handleElementRename(name); } + + @Nullable + public static SchemaPrefix resolvePrefix(PsiElement element, String name) { + XmlExtension extension = XmlExtension.getExtension(element.getContainingFile()); + final XmlAttribute declaration = extension.getPrefixDeclaration(PsiTreeUtil.getParentOfType(element, XmlTag.class, false), name); + if (declaration != null) { + final String prefix = declaration.getNamespacePrefix(); + final TextRange textRange = TextRange.from(prefix.length() + 1, name.length()); + return new SchemaPrefix(declaration, textRange, name); + } + return null; + } }