JavaPlugin.log(new Status(IStatus.INFO, JavaPlugin.getPluginId(), IStatus.OK, "linked position deleted -> must leave: "+fPositionCategoryName, null));
	public void update(DocumentEvent event) {				int eventOffset= event.getOffset();		int eventOldLength= event.getLength();		int eventNewLength= event.getText() == null ? 0 : event.getText().length();		int deltaLength= eventNewLength - eventOldLength;		Position[] positions= getPositions(event.getDocument());						for (int i= 0; i != positions.length; i++) {						Position position= positions[i];						if (position.isDeleted())				continue;						int offset= position.getOffset();			int length= position.getLength();			int end= offset + length;						if (offset > eventOffset + eventOldLength) // position comes way after change - shift				position.setOffset(offset + deltaLength);			else if (end < eventOffset) // position comes way before change - leave alone				;			else if (offset <= eventOffset && end >= eventOffset + eventOldLength) { 				// event completely internal to the position - adjust length				position.setLength(length + deltaLength);			} else if (offset < eventOffset) {				// event extends over end of position - adjust length				int newEnd= eventOffset + eventNewLength;				position.setLength(newEnd - offset);			} else if (end > eventOffset + eventOldLength) { 				// event extends from before position into it - adjust offset and length				// offset becomes end of event, length ajusted acordingly				// we want to recycle the overlapping part				int newOffset = eventOffset + eventNewLength;				position.setOffset(newOffset);				position.setLength(length + deltaLength);			} else {				// event consumes the position - delete it				position.delete();				JavaPlugin.log(new Status(IStatus.INFO, JavaPlugin.getPluginId(), IStatus.OK, "linked position deleted -> must leave: "+fPositionCategoryName, null)); //$NON-NLS-1$				fMustLeave= true;			}		}				if (fMustLeave)			abort();	}