void (@NotNull PsiElement psiElement, @NotNull AnnotationHolder holder) { if (psiElement instanceof XmlToken) { PsiElement parent = psiElement.getParent(); if (parent instanceof XmlTag tag) { XmlToken start = XmlTagUtil.getStartTagNameElement(tag); XmlToken endTagName = XmlTagUtil.getEndTagNameElement(tag); if (start == psiElement) { if (endTagName != null && !(tag instanceof HtmlTag) && !tag.getName().equals(endTagName.getText())) { registerProblemStart(holder, tag, start, endTagName); } else if (endTagName == null && !(tag instanceof HtmlTag && HtmlUtil.isSingleHtmlTag(tag, true))) { PsiErrorElement errorElement = PsiTreeUtil.getChildOfType(tag, PsiErrorElement.class); endTagName = findEndTagName(errorElement); if (endTagName != null) { registerProblemStart(holder, tag, start, endTagName); } } } else if (endTagName == psiElement) { if (!(tag instanceof HtmlTag) && !tag.getName().equals(endTagName.getText())) { registerProblemEnd(holder, tag, endTagName); } } } } else if (psiElement instanceof PsiErrorElement) { PsiElement[] children = psiElement.getChildren(); for (PsiElement token : children) { if (token instanceof XmlToken && XmlTokenType.XML_NAME == ((XmlToken)token).getTokenType()) { PsiFile psiFile = holder.getCurrentAnnotationSession().getFile(); if (HTMLLanguage.INSTANCE == psiFile.getViewProvider().getBaseLanguage() || HTMLLanguage.INSTANCE == psiElement.getLanguage()) { String message = XmlPsiBundle.message("xml.parsing.closing.tag.matches.nothing"); if (message.equals(((PsiErrorElement)psiElement).getErrorDescription()) && psiFile.getContext() == null) { holder.newAnnotation(HighlightSeverity.WARNING, message).range(psiElement).withFix(new RemoveExtraClosingTagIntentionAction()).create(); } } } } } }