private static void collectCopyMapping(PsiElement @NotNull [] pattern,
                                         PsiElement @NotNull [] copy,
                                         @NotNull List<? extends ClusterOfUsages> patternUsages,
                                         @NotNull Map<PsiExpression, PsiExpression> expressions,
                                         @NotNull Map<PsiVariable, PsiVariable> variables) {
    Set<PsiExpression> patternExpressions = new HashSet<>();
    for (ClusterOfUsages usages : patternUsages) {
      patternExpressions.addAll(usages.myPatterns);
    }

    collectCopyMapping(pattern, copy, patternExpressions::contains, expressions::put, variables::put);
  }
private static void collectCopyMapping(PsiElement @NotNull [] pattern,
                                         PsiElement @NotNull [] copy,
                                         @NotNull List<? extends ClusterOfUsages> patternUsages,
                                         @NotNull Map<PsiExpression, PsiExpression> expressions,
                                         @NotNull Map<PsiVariable, PsiVariable> variables)