SimpleMatch (@NotNull final PsiElement candidate) { if (!canReplace(myReplacement, candidate)) return null; for (PsiElement pattern : myPattern) { if (PsiTreeUtil.isAncestor(pattern, candidate, false)) return null; } PsiElement sibling = candidate; final ArrayList<PsiElement> candidates = new ArrayList<>(); for (int i = 0; i != myPattern.size(); ++i) { if (sibling == null) return null; candidates.add(sibling); sibling = PsiTreeUtil.skipWhitespacesAndCommentsForward(sibling); } if (myPattern.size() != candidates.size()) return null; if (candidates.size() <= 0) return null; final SimpleMatch match = new SimpleMatch(candidates.get(0), candidates.get(candidates.size() - 1)); myOriginalToDuplicateLocalVariable.clear(); for (int i = 0; i < myPattern.size(); i++) { if (!matchPattern(myPattern.get(i), candidates.get(i), match)) return null; } return match; }