boolean (final @NotNull PsiElement fst, final @NotNull PsiElement snd) { if (fst.equals(snd)) return true; if (fst.isValid() && fst.isPhysical() || snd.isValid() && snd.isPhysical()) return false; if (fst.getTextLength() != snd.getTextLength()) return false; if (fst.getStartOffsetInParent() != snd.getStartOffsetInParent()) return false; PsiElement nav1 = fst.getNavigationElement(); PsiElement nav2 = snd.getNavigationElement(); return nav1 != null && nav1.equals(nav2); }