@Nullable private static PsiElement findParent( int syncStartOffset, int syncEndOffset, @NotNull AnchorTypeInfo type, PsiElement anchor) { TextRange range = anchor.getTextRange(); if (range.getStartOffset() != syncStartOffset) return null; while (range.getEndOffset() < syncEndOffset) { anchor = anchor.getParent(); if (anchor == null || anchor.getTextRange() == null) { return null; } range = anchor.getTextRange(); } while (range.getEndOffset() == syncEndOffset) { if (type.isAcceptable(anchor)) { return anchor; } anchor = anchor.getParent(); if (anchor == null || anchor.getTextRange() == null) break; range = anchor.getTextRange(); } return null; }