Html: replace old isSingleAttribute method with brand new isBooleanAttribute

This commit is contained in:
Alexander Zolotov
2014-12-24 19:44:39 +03:00
parent d01141f8fb
commit 6eff2e784c
3 changed files with 21 additions and 26 deletions
@@ -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<LookupElement> {
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, "='")) {
@@ -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<LookupElement> insertHandler = XmlAttributeInsertHandler.INSTANCE;
if (tag instanceof HtmlTag &&
HtmlUtil.isShortNotationOfBooleanAttributePreferred() &&
HtmlUtil.isBooleanAttribute(descriptor, tag)) {
insertHandler = null;
}
if (replacementInsertHandler != null) {
insertHandler = replacementInsertHandler;
}
@@ -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<String> INLINE_ELEMENTS_CONTAINER_MAP = new THashSet<String>();
@NonNls private static final String[] EMPTY_ATTRS =
{"nowrap", "compact", "disabled", "readonly", "selected", "multiple", "nohref", "ismap", "declare", "noshade", "checked"};
private static final Set<String> EMPTY_ATTRS_MAP = new THashSet<String>();
private static final Set<String> POSSIBLY_INLINE_TAGS_MAP = new THashSet<String>();
@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<String>(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);
}