From bfd658b35cd94c3d817ba3e954575ab7ceb5dba6 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 17 Jun 2013 16:54:00 +0200 Subject: [PATCH] fix GrailsCompletionTest.testGspClosingJavascriptTag: restore completion of closing tags in SchemaPrefixReference --- .../TagNameReferenceCompletionProvider.java | 7 +++++++ .../intellij/xml/util/XmlPrefixReferenceProvider.java | 2 +- .../impl/providers/SchemaReferencesProvider.java | 2 +- .../psi/impl/source/xml/SchemaPrefixReference.java | 11 ++++++++++- .../psi/impl/source/xml/XmlAttributeImpl.java | 4 ++-- .../com/intellij/psi/impl/source/xml/XmlTagImpl.java | 3 ++- 6 files changed, 23 insertions(+), 6 deletions(-) diff --git a/xml/impl/resources/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java b/xml/impl/resources/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java index fa2f1609c3b9..061c92a49161 100644 --- a/xml/impl/resources/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java +++ b/xml/impl/resources/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java @@ -23,6 +23,7 @@ import com.intellij.codeInsight.lookup.TailTypeDecorator; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; +import com.intellij.psi.impl.source.xml.SchemaPrefixReference; import com.intellij.psi.impl.source.xml.TagNameReference; import com.intellij.psi.xml.XmlTag; import com.intellij.util.Consumer; @@ -54,6 +55,12 @@ public class TagNameReferenceCompletionProvider extends CompletionProvider 0) { return new PsiReference[] { - new SchemaPrefixReference(attributeValue, TextRange.from(1, i), value.substring(0, i)) + new SchemaPrefixReference(attributeValue, TextRange.from(1, i), value.substring(0, i), null) }; } } diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java index 8578453b1476..8862ac892f0e 100644 --- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java +++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java @@ -568,7 +568,7 @@ public class SchemaReferencesProvider extends PsiReferenceProvider { final XmlAttributeValue attributeValue = (XmlAttributeValue)element; final String prefix = XmlUtil.findPrefixByQualifiedName(attributeValue.getValue()); if (prefix.length() > 0) { - return new SchemaPrefixReference(attributeValue, TextRange.from(1, prefix.length()), prefix); + return new SchemaPrefixReference(attributeValue, TextRange.from(1, prefix.length()), prefix, null); } } return null; diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java index f8a4833f84d6..2c963a95bd80 100644 --- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java +++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java @@ -37,16 +37,20 @@ public class SchemaPrefixReference extends PsiReferenceBase implemen private final SchemaPrefix myPrefix; private final String myName; + @Nullable + private final TagNameReference myTagNameReference; /** * * @param element XmlAttribute || XmlAttributeValue * @param range * @param name + * @param reference */ - public SchemaPrefixReference(XmlElement element, TextRange range, String name) { + public SchemaPrefixReference(XmlElement element, TextRange range, String name, TagNameReference reference) { super(element, range); myName = name; + myTagNameReference = reference; if (myElement instanceof XmlAttribute && (((XmlAttribute)myElement).isNamespaceDeclaration())) { myPrefix = new SchemaPrefix((XmlAttribute)myElement, getRangeInElement(), myName); } @@ -108,4 +112,9 @@ public class SchemaPrefixReference extends PsiReferenceBase implemen public boolean isPrefixReference() { return true; } + + @Nullable + public TagNameReference getTagNameReference() { + return myTagNameReference; + } } diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlAttributeImpl.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlAttributeImpl.java index a7aff7848548..89237674fa37 100644 --- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlAttributeImpl.java +++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlAttributeImpl.java @@ -325,13 +325,13 @@ public class XmlAttributeImpl extends XmlElementImpl implements XmlAttribute { final String prefix = XmlUtil.findPrefixByQualifiedName(getName()); final TextRange range = prefix.length() == 0 ? TextRange.from(getName().length(), 0) : TextRange.from(prefix.length() + 1, localName.length()); - refs[0] = new SchemaPrefixReference(this, range, localName); + refs[0] = new SchemaPrefixReference(this, range, localName, null); } else { final String prefix = getNamespacePrefix(); if (prefix.length() > 0 && getLocalName().length() > 0) { refs = new PsiReference[referencesFromProviders.length + 2]; - refs[0] = new SchemaPrefixReference(this, TextRange.from(0, prefix.length()), prefix); + refs[0] = new SchemaPrefixReference(this, TextRange.from(0, prefix.length()), prefix, null); refs[1] = new XmlAttributeReference(this); } else { diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java index 30496bcd9eec..81645bd453f3 100644 --- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java +++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java @@ -180,7 +180,8 @@ public class XmlTagImpl extends XmlElementImpl implements XmlTag { } private SchemaPrefixReference createPrefixReference(ASTNode startTagName, String prefix, TagNameReference tagRef) { - return new SchemaPrefixReference(this, TextRange.from(startTagName.getStartOffset() - getStartOffset(), prefix.length()), prefix); + return new SchemaPrefixReference(this, TextRange.from(startTagName.getStartOffset() - getStartOffset(), prefix.length()), prefix, + tagRef); } @Override