@Override
  protected void checkDomElement(@NotNull DomElement element,
                                 @NotNull DomElementAnnotationHolder holder,
                                 @NotNull DomHighlightingHelper helper) {
    if (!isAllowed(holder)) return;

    super.checkDomElement(element, holder, helper);

    if (element instanceof IdeaPlugin) {
      Module module = element.getModule();
      if (module != null) {
        annotateIdeaPlugin((IdeaPlugin)element, holder, module);
        checkJetBrainsPlugin((IdeaPlugin)element, holder, module);
      }
    }
    else if (element instanceof Extension) {
      annotateExtension((Extension)element, holder);
    }
    else if (element instanceof ExtensionPoint) {
      annotateExtensionPoint((ExtensionPoint)element, holder);
    }
    else if (element instanceof Vendor) {
      annotateVendor((Vendor)element, holder);
    }
    else if (element instanceof ProductDescriptor) {
      annotateProductDescriptor((ProductDescriptor)element, holder);
    }
    else if (element instanceof IdeaVersion) {
      annotateIdeaVersion((IdeaVersion)element, holder);
    }
    else if (element instanceof Dependency) {
      annotateDependency((Dependency)element, holder);
    }
    else if (element instanceof DependencyDescriptor) {
      annotateDependencyDescriptor((DependencyDescriptor)element, holder);
    }
    else if (element instanceof ContentDescriptor) {
      annotateContentDescriptor((ContentDescriptor)element, holder);
    }
    else if (element instanceof Extensions) {
      annotateExtensions((Extensions)element, holder);
    }
    else if (element instanceof Extensions.UnresolvedExtension) {
      annotateUnresolvedExtension((Extensions.UnresolvedExtension)element, holder);
    }
    else if (element instanceof AddToGroup) {
      annotateAddToGroup((AddToGroup)element, holder);
    }
    else if (element instanceof Action) {
      annotateAction((Action)element, holder);
    }
    else if (element instanceof Synonym) {
      annotateSynonym((Synonym)element, holder);
    }
    else if (element instanceof Group) {
      annotateGroup((Group)element, holder);
    }
    else if (element instanceof Component) {
      annotateComponent((Component)element, holder);
      if (element instanceof Component.Project) {
        annotateProjectComponent((Component.Project)element, holder);
      }
    }
    else //noinspection deprecation
      if (element instanceof Helpset) {
        highlightRedundant(element, DevKitBundle.message("inspections.plugin.xml.deprecated.helpset"), holder);
      }
      else if (element instanceof Listeners) {
        annotateListeners((Listeners)element, holder);
      }
      else if (element instanceof Listener) {
        annotateListener((Listener)element, holder);
      }

    if (element instanceof GenericDomValue<?> domValue) {
      if (domValue.getConverter() instanceof PluginPsiClassConverter) {
        @SuppressWarnings("unchecked") GenericDomValue<PsiClass> psiClassDomValue = (GenericDomValue<PsiClass>)element;
        annotatePsiClassValue(psiClassDomValue, holder);
      }
    }
  }
@Override
  protected void checkDomElement(@NotNull DomElement element,
                                 @NotNull DomElementAnnotationHolder holder,
                                 @NotNull DomHighlightingHelper helper)