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));
+ }
}