in model/src/main/java/jetbrains/jetpad/model/collections/list/TreeList.java [149:176]
AvlTree<T> insert(int index, T value) {
int leftSize = size(myLeft);
if (index <= leftSize) {
AvlTree<T> unbalanced;
if (myLeft == null) {
if (index == 0) {
unbalanced = new AvlTree<>(new AvlTree<>(value), myRight, myValue);
} else {
throw new IndexOutOfBoundsException();
}
} else {
unbalanced = new AvlTree<>(myLeft.insert(index, value), myRight, myValue);
}
return balanceLeft(unbalanced);
} else {
AvlTree<T> unbalanced;
if (myRight == null) {
if (index == leftSize + 1) {
unbalanced = new AvlTree<>(myLeft, new AvlTree<>(value), myValue);
} else {
throw new IndexOutOfBoundsException();
}
} else {
unbalanced = new AvlTree<>(myLeft, myRight.insert(index - 1 - leftSize, value), myValue);
}
return balanceRight(unbalanced);
}
}