void (@NotNull final XmlAttribute attribute, @NotNull final ProblemsHolder holder, final boolean isOnTheFly) { if (attribute.getValueElement() == null) { final XmlTag tag = attribute.getParent(); if (tag instanceof HtmlTag) { XmlElementDescriptor elementDescriptor = tag.getDescriptor(); if (elementDescriptor == null || elementDescriptor instanceof AnyXmlElementDescriptor) { return; } XmlAttributeDescriptor attributeDescriptor = attribute.getDescriptor(); if (attributeDescriptor != null && !(attributeDescriptor instanceof AnyXmlAttributeDescriptor)) { String name = attribute.getName(); if (!HtmlUtil.isBooleanAttribute(attributeDescriptor, null) && (!isCustomValuesEnabled() || !isCustomValue(name))) { final boolean html5 = HtmlUtil.isHtml5Context(tag); LocalQuickFix[] quickFixes = !html5 ? new LocalQuickFix[]{ new AddCustomHtmlElementIntentionAction(BOOLEAN_ATTRIBUTE_KEY, name, XmlAnalysisBundle.message( "html.quickfix.add.custom.html.boolean.attribute", name)), XmlQuickFixFactory.getInstance().addAttributeValueFix(attribute), new RemoveAttributeIntentionFix(name), } : new LocalQuickFix[] { XmlQuickFixFactory.getInstance().addAttributeValueFix(attribute) }; String error = null; if (html5) { if (attributeDescriptor instanceof XmlEnumerationDescriptor && ((XmlEnumerationDescriptor<?>)attributeDescriptor).getValueDeclaration(attribute, "") == null) { error = XmlPsiBundle.message("xml.inspections.attribute.requires.value", attribute.getName()); } } else { error = XmlAnalysisBundle.message("html.inspections.attribute.is.not.boolean", attribute.getName()); } if (error != null) { registerProblemOnAttributeName(attribute, error, holder, quickFixes); } } } } } }