void (@NotNull PsiAnnotation annotation) { final PsiAnnotation other = (PsiAnnotation)myMatchingVisitor.getElement(); if (!myMatchingVisitor.setResult(myMatchingVisitor.match(annotation.getNameReferenceElement(), other.getNameReferenceElement()))) return; final PsiNameValuePair[] attributes = annotation.getParameterList().getAttributes(); if (attributes.length == 0) { return; } final PsiNameValuePair[] otherAttributes = other.getParameterList().getAttributes(); final List<PsiElement> unmatchedElements = new SmartList<>(otherAttributes); final MatchContext context = myMatchingVisitor.getMatchContext(); context.pushMatchedElementsListener(elements -> unmatchedElements.removeAll(elements)); try { if (myMatchingVisitor.setResult(myMatchingVisitor.matchInAnyOrder(attributes, otherAttributes))) { other.putUserData(GlobalMatchingVisitor.UNMATCHED_ELEMENTS_KEY, unmatchedElements); } } finally { context.popMatchedElementsListener(); } }