T (@NotNull T item, int index) { if (isMutable(item) || !isEditable(item)) { return item; } else { T mutable = originalToModified.get(item); if (mutable == null) { mutable = itemEditor.clone(item, false); modifiedToOriginal.put(mutable, item); originalToModified.put(item, mutable); silentlyReplaceItem(item, mutable, index); } return mutable; } }