From b4045bf7ce10365e4f642b17cceb4b5bf86cb3d7 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 24 May 2013 10:51:52 +0400 Subject: [PATCH] IDEA-45809 XML editing: Required attributes should be preferred in completion --- .../source/html/dtd/HtmlAttributeDescriptorImpl.java | 5 +++++ .../intellij/psi/impl/source/xml/XmlAttributeImpl.java | 5 ++--- .../intellij/xml/impl/BasicXmlAttributeDescriptor.java | 5 +++++ .../xml/impl/schema/XmlAttributeDescriptorImpl.java | 5 ----- .../codeInsight/completion/XmlCompletionTest.java | 10 ++++++++++ 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/xml/impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java b/xml/impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java index 75f8ae526b88..445a5503a855 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java +++ b/xml/impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java @@ -85,4 +85,9 @@ public class HtmlAttributeDescriptorImpl implements XmlAttributeDescriptor { public Object[] getDependences() { return ArrayUtil.EMPTY_OBJECT_ARRAY; } + + @Override + public String toString() { + return delegate.toString(); + } } diff --git a/xml/impl/src/com/intellij/psi/impl/source/xml/XmlAttributeImpl.java b/xml/impl/src/com/intellij/psi/impl/source/xml/XmlAttributeImpl.java index 1b57e316e47a..2accea933892 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/xml/XmlAttributeImpl.java +++ b/xml/impl/src/com/intellij/psi/impl/source/xml/XmlAttributeImpl.java @@ -416,8 +416,6 @@ public class XmlAttributeImpl extends XmlElementImpl implements XmlAttribute { return setName(newName); } - // TODO[ik]: namespace support - public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException { if (element instanceof PsiMetaOwner) { final PsiMetaOwner owner = (PsiMetaOwner)element; @@ -475,7 +473,8 @@ public class XmlAttributeImpl extends XmlElementImpl implements XmlAttribute { if (separator > 0) { element = element.withLookupString(name.substring(separator + 1)); } - variants.add(element.withCaseSensitivity(caseSensitive).withInsertHandler(XmlAttributeInsertHandler.INSTANCE)); + element = element.withCaseSensitivity(caseSensitive).withInsertHandler(XmlAttributeInsertHandler.INSTANCE); + variants.add(descriptor.isRequired() ? PrioritizedLookupElement.withPriority(element.appendTailText("(required)", true), 100) : element); } } } diff --git a/xml/impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java b/xml/impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java index 020baa8205b1..1aa72c3f7ffc 100644 --- a/xml/impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java +++ b/xml/impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java @@ -73,4 +73,9 @@ public abstract class BasicXmlAttributeDescriptor implements XmlAttributeDescrip public boolean isEnumerated(@Nullable XmlElement context) { return isEnumerated(); } + + @Override + public String toString() { + return getName(); + } } diff --git a/xml/impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java b/xml/impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java index 24591d37c2be..195449b9ef02 100644 --- a/xml/impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java +++ b/xml/impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java @@ -243,9 +243,4 @@ public class XmlAttributeDescriptorImpl extends BasicXmlAttributeDescriptor impl public void setName(String name) throws IncorrectOperationException { NamedObjectDescriptor.setName(myTag, name); } - - @Override - public String toString() { - return getName(); - } } diff --git a/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java b/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java index 34fdf9914843..574942bc1207 100644 --- a/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java +++ b/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java @@ -636,5 +636,15 @@ public class XmlCompletionTest extends LightCodeInsightFixtureTestCase { "xsi:noNamespaceSchemaLocation", "xsi:type"); } + + public void testRequiredAttributesOnTop() throws Exception { + myFixture.configureByText("foo.html", ""); + myFixture.completeBasic(); + List strings = myFixture.getLookupElementStrings(); + assertNotNull(strings); + assertEquals("alt", strings.get(0)); + assertEquals("src", strings.get(1)); + assertEquals("align", strings.get(2)); + } }