@Override
public int lastAnnotationChange(int start, int end, String key, Object fromValue) {
Preconditions.checkPositionIndexes(start, end, size());
checkKeyNotNull(key);
start = Math.max(0, start);
end = Math.min(end, ranges.size());
OffsetPoint<Values> point = ranges.performActionAt(end, finder);
OffsetList.Container<Values> container = point.getContainer();
int offset = point.getOffset();
if (offset == 0) {
container = container.getPreviousContainer();
offset = container == ranges.sentinel() ? 0 : container.size();
}
int location = end;
while (location > start) {
if (!eq(getValue(container, key), fromValue)) {
return location;
}
if (container == null) {
break;
}
location -= offset;
container = container.getPreviousContainer();
offset = container == ranges.sentinel() ? 0 : container.size();
}
return -1;
}