public void rawInsertBeforeMe(@NotNull TreeElement firstNew) { final TreeElement anchorPrev = getTreePrev(); if (anchorPrev == null) { firstNew.rawRemoveUpToLast(); final CompositeElement p = getTreeParent(); if (p != null) p.setFirstChildNode(firstNew); while (true) { final TreeElement treeNext = firstNew.getTreeNext(); assert treeNext != this : "Attempt to create cycle"; firstNew.setTreeParent(p); if (treeNext == null) break; firstNew = treeNext; } setTreePrev(firstNew); firstNew.setTreeNext(this); if (p != null) { p.subtreeChanged(); } } else anchorPrev.rawInsertAfterMe(firstNew); DebugUtil.checkTreeStructure(this); }