int (OffsetKey key) { synchronized (myMap) { final RangeMarker marker = myMap.get(key); if (marker == null) throw new IllegalArgumentException("Offset " + key + " is not registered"); if (!marker.isValid()) { removeOffset(key); throw new IllegalStateException("Offset " + key + " is invalid: " + marker + ", document.valid=" + (!(myDocument instanceof DocumentWindow) || ((DocumentWindow)myDocument).isValid()) + (myDocument instanceof DocumentWindow ? " (injected: " + Arrays.toString(((DocumentWindow)myDocument).getHostRanges()) + ")" : "") ); } final int endOffset = marker.getEndOffset(); if (marker.getStartOffset() != endOffset) { saveOffset(key, endOffset, false); } return endOffset; } }