@Override public T add(int index, I initialState) { int last = orderedValues.size(); Preconditions.checkPositionIndex(index, last); if (index == last) { return add(initialState); } T childAfter = orderedValues.get(index); E nodeAfter = valueToElement.get(childAfter); Map<String, String> attributes = Initializer.Helper.buildAttributes(initialState, factory); E fresh = createBefore(getDocument(), nodeAfter, attributes); return elementToValue.get(fresh); }