diff --git a/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeInsertHandler.java b/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeInsertHandler.java index 3e52b819c285..164264988635 100644 --- a/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeInsertHandler.java +++ b/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeInsertHandler.java @@ -17,7 +17,6 @@ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.AutoPopupController; import com.intellij.codeInsight.lookup.LookupElement; -import com.intellij.lang.html.HTMLLanguage; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; @@ -34,7 +33,6 @@ import com.intellij.psi.xml.XmlTag; import com.intellij.util.IncorrectOperationException; import com.intellij.util.text.CharArrayUtil; import com.intellij.xml.XmlNamespaceHelper; -import com.intellij.xml.util.HtmlUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -65,10 +63,6 @@ public class XmlAttributeInsertHandler implements InsertHandler { final Document document = editor.getDocument(); final int caretOffset = editor.getCaretModel().getOffset(); final PsiFile file = context.getFile(); - if (file.getLanguage() == HTMLLanguage.INSTANCE && - HtmlUtil.isSingleHtmlAttribute((String)item.getObject())) { - return; - } final CharSequence chars = document.getCharsSequence(); if (!CharArrayUtil.regionMatches(chars, caretOffset, "=\"") && !CharArrayUtil.regionMatches(chars, caretOffset, "='")) { diff --git a/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeReferenceCompletionProvider.java b/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeReferenceCompletionProvider.java index 7a60cb05dd07..0e220b66bb04 100644 --- a/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeReferenceCompletionProvider.java +++ b/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeReferenceCompletionProvider.java @@ -20,6 +20,7 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; +import com.intellij.psi.html.HtmlTag; import com.intellij.psi.impl.source.xml.XmlAttributeImpl; import com.intellij.psi.impl.source.xml.XmlAttributeReference; import com.intellij.psi.meta.PsiPresentableMetaData; @@ -87,6 +88,12 @@ public class XmlAttributeReferenceCompletionProvider extends CompletionProvider< InsertHandler insertHandler = XmlAttributeInsertHandler.INSTANCE; + if (tag instanceof HtmlTag && + HtmlUtil.isShortNotationOfBooleanAttributePreferred() && + HtmlUtil.isBooleanAttribute(descriptor, tag)) { + insertHandler = null; + } + if (replacementInsertHandler != null) { insertHandler = replacementInsertHandler; } diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java b/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java index 28aea7442b07..6970f1da3e1c 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java @@ -39,6 +39,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.html.HtmlTag; import com.intellij.psi.impl.source.html.HtmlDocumentImpl; +import com.intellij.psi.impl.source.html.dtd.HtmlAttributeDescriptorImpl; import com.intellij.psi.impl.source.parsing.xml.HtmlBuilderDriver; import com.intellij.psi.impl.source.parsing.xml.XmlBuilder; import com.intellij.psi.templateLanguages.TemplateLanguageFileViewProvider; @@ -125,11 +126,7 @@ public class HtmlUtil { @NonNls private static final String[] INLINE_ELEMENTS_CONTAINER = {"p", "h1", "h2", "h3", "h4", "h5", "h6", "pre", "dt"}; private static final Set INLINE_ELEMENTS_CONTAINER_MAP = new THashSet(); - - @NonNls private static final String[] EMPTY_ATTRS = - {"nowrap", "compact", "disabled", "readonly", "selected", "multiple", "nohref", "ismap", "declare", "noshade", "checked"}; - private static final Set EMPTY_ATTRS_MAP = new THashSet(); - + private static final Set POSSIBLY_INLINE_TAGS_MAP = new THashSet(); @NonNls private static final String[] HTML5_TAGS = { @@ -146,7 +143,6 @@ public class HtmlUtil { if (control.endTag == HTMLControls.TagState.FORBIDDEN) EMPTY_TAGS_MAP.add(tagName); AUTO_CLOSE_BY_MAP.put(tagName, new THashSet(control.autoClosedBy)); } - ContainerUtil.addAll(EMPTY_ATTRS_MAP, EMPTY_ATTRS); ContainerUtil.addAll(OPTIONAL_END_TAGS_MAP, OPTIONAL_END_TAGS); ContainerUtil.addAll(BLOCK_TAGS_MAP, BLOCK_TAGS); ContainerUtil.addAll(INLINE_ELEMENTS_CONTAINER_MAP, INLINE_ELEMENTS_CONTAINER); @@ -175,10 +171,6 @@ public class HtmlUtil { return closingTags != null && closingTags.contains(childTagName); } - public static boolean isSingleHtmlAttribute(String attrName) { - return EMPTY_ATTRS_MAP.contains(attrName.toLowerCase(Locale.US)); - } - public static boolean isHtmlBlockTag(String tagName) { return BLOCK_TAGS_MAP.contains(tagName.toLowerCase(Locale.US)); } @@ -261,16 +253,18 @@ public class HtmlUtil { } public static boolean isBooleanAttribute(@NotNull XmlAttributeDescriptor descriptor, @Nullable XmlElement context) { - final String[] values = descriptor.getEnumeratedValues(); - if (values == null) { - return false; - } - if (values.length == 2) { - return values[0].isEmpty() && values[1].equals(descriptor.getName()) - || values[1].isEmpty() && values[0].equals(descriptor.getName()); - } - else if (values.length == 1) { - return descriptor.getName().equals(values[0]); + if (descriptor instanceof HtmlAttributeDescriptorImpl && descriptor.isEnumerated()) { + final String[] values = descriptor.getEnumeratedValues(); + if (values == null) { + return false; + } + if (values.length == 2) { + return values[0].isEmpty() && values[1].equals(descriptor.getName()) + || values[1].isEmpty() && values[0].equals(descriptor.getName()); + } + else if (values.length == 1) { + return descriptor.getName().equals(values[0]); + } } return context != null && isCustomBooleanAttribute(descriptor.getName(), context); }