void (PsiElement pattern, PsiElement candidate, Match match) { if (pattern == null || candidate == null) return; final Parameter parameter = pattern.getUserData(PARAMETER); if (parameter != null) { match.putParameter(parameter, candidate); return; } PsiElement[] children1 = getFilteredChildren(pattern); PsiElement[] children2 = getFilteredChildren(candidate); if (children1.length != children2.length) return; for (int i = 0; i < children1.length; i++) { PsiElement child1 = children1[i]; PsiElement child2 = children2[i]; traverseParameter(child1, child2, match); } }