void (PsiElement @NotNull [] pattern, PsiElement @NotNull [] copy, @NotNull Predicate<? super PsiExpression> isReplaceablePattern, @NotNull BiConsumer<? super PsiExpression, ? super PsiExpression> expressionsMapping, @NotNull BiConsumer<? super PsiVariable, ? super PsiVariable> variablesMapping) { pattern = DuplicatesFinder.getDeeplyFilteredElements(pattern); copy = DuplicatesFinder.getDeeplyFilteredElements(copy); if (copy.length != pattern.length) { return; // it's an extracted parameter, so there's no need to go deeper } for (int i = 0; i < pattern.length; i++) { collectCopyMapping(pattern[i], copy[i], isReplaceablePattern, expressionsMapping, variablesMapping); } }