@Override
public void replace(int offset, int length, String text) {
if (text == null)
text= "";
if (fReplaceList.size() == 0) {
fReplaceList.add(new Replace(offset, offset, length, text));
} else {
Replace firstReplace= fReplaceList.getFirst();
Replace lastReplace= fReplaceList.getLast();
if (offset + length <= firstReplace.newOffset) {
int delta= text.length() - length;
if (delta != 0) {
for (Replace replace : fReplaceList) {
replace.newOffset += delta;
}
}
fReplaceList.addFirst(new Replace(offset, offset, length, text));
} else if (offset >= lastReplace.newOffset + lastReplace.text.length()) {
int delta= getDelta(lastReplace);
fReplaceList.add(new Replace(offset - delta, offset, length, text));
} else if (ASSERT_SEQUENTIALITY) {
throw new IllegalArgumentException();
} else {
commit();
fSource.replace(offset, length, text);
}
}
}