fSharedState.isChanging= false;
fSharedState.fIsChanging= false;
	public void runWithEvent(Event event) {		// get involved objects		if (fSharedState.fEditor == null)			return;		if (!validateEditorInputState())			return;		ISourceViewer viewer= fSharedState.fEditor.getViewer();		if (viewer == null)			return;		IDocument document= viewer.getDocument();		if (document == null)			return;		StyledText widget= viewer.getTextWidget();		if (widget == null)			return;		// get selection		Point p= viewer.getSelectedRange();		if (p == null)			return;		ITextSelection sel= new TextSelection(document, p.x, p.y);		ITextSelection skippedLine= getSkippedLine(document, sel);		if (skippedLine == null)			return;		try {			ITextSelection movingArea= getMovingSelection(document, sel, viewer);			// if either the skipped line or the moving lines are outside the widget's			// visible area, bail out			if (!containedByVisibleRegion(movingArea, viewer) || !containedByVisibleRegion(skippedLine, viewer))				return;			// get the content to be moved around: the moving (selected) area and the skipped line			String moving= movingArea.getText();			String skipped= skippedLine.getText();			if (moving == null || skipped == null)				return;			String delim;			String insertion;			int offset;			if (fUpwards) {				delim= document.getLineDelimiter(skippedLine.getEndLine());				Assert.isNotNull(delim);				if (fCopy) {					insertion= moving + delim;					offset= movingArea.getOffset();				} else {					insertion= moving + delim + skipped;					offset= skippedLine.getOffset();				}			} else {				delim= document.getLineDelimiter(movingArea.getEndLine());				Assert.isNotNull(delim);				if (fCopy) {					insertion= moving + delim;					offset= skippedLine.getOffset();				} else {					insertion= skipped + delim + moving;					offset= movingArea.getOffset();				}			}			int lenght= fCopy ? 0 : insertion.length();			// modify the document			ILineRange selectionBefore= getLineRange(document, movingArea);						if (fCopy)				fSharedState.endCompoundEdit();			fSharedState.beginCompoundEdit();			fSharedState.isChanging= true;			document.replace(offset, lenght, insertion);						ILineRange selectionAfter;			if (fUpwards && fCopy)				selectionAfter= selectionBefore;			else if (fUpwards)				selectionAfter= new LineRange(selectionBefore.getStartLine() - 1, selectionBefore.getNumberOfLines());			else if (fCopy)				selectionAfter= new LineRange(selectionBefore.getStartLine() + selectionBefore.getNumberOfLines(), selectionBefore.getNumberOfLines());			else				selectionAfter= new LineRange(selectionBefore.getStartLine() + 1, selectionBefore.getNumberOfLines());						fSharedState.fResult= IndentUtil.indentLines(document, selectionAfter, getProject(), fSharedState.fResult);						// move the selection along			IRegion region= getRegion(document, selectionAfter);			selectAndReveal(viewer, region.getOffset(), region.getLength());					} catch (BadLocationException x) {			// won't happen without concurrent modification - bail out			return;		} finally {			fSharedState.isChanging= false;			if (fCopy)				fSharedState.endCompoundEdit();		}	}