void (@NotNull final XmlAttribute attribute, @NotNull final ProblemsHolder holder, final boolean isOnTheFly) { 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 && !attribute.isNamespaceDeclaration()) { final String name = attribute.getName(); if (!XmlUtil.attributeFromTemplateFramework(name, tag) && (!isCustomValuesEnabled() || !isCustomValue(name))) { boolean maySwitchToHtml5 = HtmlUtil.isCustomHtml5Attribute(name) && !HtmlUtil.hasNonHtml5Doctype(tag); ArrayList<LocalQuickFix> quickfixes = new ArrayList<>(6); quickfixes .add(new AddCustomHtmlElementIntentionAction(ATTRIBUTE_KEY, name, XmlAnalysisBundle.message( "html.quickfix.add.custom.html.attribute", name))); quickfixes.add(new RemoveAttributeIntentionFix(name)); if (maySwitchToHtml5) { quickfixes.add(new SwitchToHtml5WithHighPriorityAction()); } addSimilarAttributesQuickFixes(tag, name, quickfixes); addRenameXmlAttributeQuickFixes(tag, name, quickfixes); registerProblemOnAttributeName(attribute, XmlAnalysisBundle.message("xml.inspections.attribute.is.not.allowed.here", attribute.getName()), holder, quickfixes.toArray(LocalQuickFix.EMPTY_ARRAY)); } } else if (attributeDescriptor instanceof XmlAttributeDescriptorEx) { ((XmlAttributeDescriptorEx)attributeDescriptor).validateAttributeName(attribute, holder, isOnTheFly); } } }