redraw();
	void leave(int flags) {		if (!fIsActive)			return;		fIsActive= false;		endCompoundChange();		//		// debug trace//		JavaPlugin.log(new Status(IStatus.INFO, JavaPlugin.getPluginId(), IStatus.OK, "leaving linked mode", null));		disconnect();		redraw();				for (int i= 0; i < fTargets.length; i++) {			if (fCurrentTarget.fKeyListener != null) {				((ITextViewerExtension) fTargets[i].getViewer()).removeVerifyKeyListener(fCurrentTarget.fKeyListener);				fCurrentTarget.fKeyListener= null;			}		}				for (int i= 0; i < fTargets.length; i++) {						if (fTargets[i].fAnnotationModel != null) {				fTargets[i].fAnnotationModel.removeAllAnnotations();				fTargets[i].fAnnotationModel= null;			}						ITextViewer vi= fTargets[i].getViewer();			if (vi instanceof ISourceViewer) {				ISourceViewer sv= (ISourceViewer) vi;				IAnnotationModel model= sv.getAnnotationModel();								if (model instanceof IAnnotationModelExtension) {					IAnnotationModelExtension ext= (IAnnotationModelExtension) model;					ext.removeAnnotationModel(getUniqueKey());				}							}		}				if (fExitPosition != null)			fExitPosition.getDocument().removePosition(fExitPosition);		if ((flags & ILinkedListener.UPDATE_CARET) != 0 && fExitPosition != null && fFramePosition != fExitPosition && !fExitPosition.isDeleted())			switchPosition(fExitPosition, true, false);		for (int i= 0; i < fTargets.length; i++) {			IDocument doc= fTargets[i].getViewer().getDocument();			if (doc != null) {				doc.removePositionUpdater(fPositionUpdater);				boolean uninstallCat= false;				String[] cats= doc.getPositionCategories();				for (int j= 0; j < cats.length; j++) {					if (getCategory().equals(cats[j])) {						uninstallCat= true;						break;					}				}				if (uninstallCat)					try {						doc.removePositionCategory(getCategory());					} catch (BadPositionCategoryException e) {						// ignore					}			}		}		fEnvironment.exit(flags);	}