private boolean matchChildren(PsiElement @NotNull [] children1,
                                PsiElement @NotNull [] children2,
                                @NotNull List<PsiElement> candidates,
                                @NotNull Match match) {
    if (children1.length != children2.length) return false;

    for (int i = 0; i < children1.length; i++) {
      PsiElement child1 = children1[i];
      PsiElement child2 = children2[i];
      if (!matchPattern(child1, child2, candidates, match) &&
          !matchExtractableExpression(child1, child2, candidates, match)) {
        return false;
      }
    }
    return true;
  }
private boolean matchChildren(PsiElement @NotNull [] children1,
                                PsiElement @NotNull [] children2,
                                @NotNull List<PsiElement> candidates,
                                @NotNull Match match)