void (@NotNull PsiDocTag tag) { final PsiDocTag other = (PsiDocTag)myMatchingVisitor.getElement(); final CompiledPattern pattern = myMatchingVisitor.getMatchContext().getPattern(); final boolean isTypedVar = pattern.isTypedVar(tag.getNameElement()); if (!isTypedVar && !myMatchingVisitor.setResult(tag.getName().equals(other.getName()))) return; PsiElement psiDocTagValue = tag.getValueElement(); boolean isTypedValue = false; if (psiDocTagValue != null) { final PsiElement[] children = psiDocTagValue.getChildren(); if (children.length == 1) { psiDocTagValue = children[0]; } isTypedValue = pattern.isTypedVar(psiDocTagValue); if (isTypedValue) { if (other.getValueElement() != null) { if (!myMatchingVisitor.setResult(myMatchingVisitor.handleTypedElement(psiDocTagValue, other.getValueElement()))) return; } else { if (!myMatchingVisitor.setResult(myMatchingVisitor.allowsAbsenceOfMatch(psiDocTagValue))) return; } } } if (!isTypedValue && !myMatchingVisitor.setResult(myMatchingVisitor.matchInAnyOrder(new DocValuesIterator(tag.getFirstChild()), new DocValuesIterator(other.getFirstChild())))) { return; } if (isTypedVar) { myMatchingVisitor.setResult(myMatchingVisitor.handleTypedElement(tag.getNameElement(), other.getNameElement())); } }