JavaPlugin.log(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.OK, null, e));
JavaPlugin.log(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.OK, "ConcurrentModification in IndentAction", e));
	public void run() {		// update has been called by the framework		if (!isEnabled() || !validateEditorInputState())			return;				ITextSelection selection= getSelection();		final IDocument document= getDocument();				if (document != null) {						final int offset= selection.getOffset();			final int length= selection.getLength();			final Position end= new Position(offset + length);			final int firstLine, nLines;			fCaretOffset= -1;						try {				document.addPosition(end);				firstLine= document.getLineOfOffset(offset);				// check for marginal (zero-length) lines				int minusOne= length == 0 ? 0 : 1;				nLines= document.getLineOfOffset(offset + length - minusOne) - firstLine + 1;			} catch (BadLocationException e) {				// will only happen on concurrent modification				JavaPlugin.log(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.OK, null, e));				return;			}						Runnable runnable= new Runnable() {				public void run() {					IRewriteTarget target= (IRewriteTarget)getTextEditor().getAdapter(IRewriteTarget.class);					if (target != null) {						target.beginCompoundChange();						target.setRedraw(false);					}										try {						JavaHeuristicScanner scanner= new JavaHeuristicScanner(document);						JavaIndenter indenter= new JavaIndenter(document, scanner);						boolean hasChanged= false;						for (int i= 0; i < nLines; i++) {							hasChanged |= indentLine(document, firstLine + i, offset, indenter, scanner);						}												// update caret position: move to new position when indenting just one line						// keep selection when indenting multiple						int newOffset, newLength;						if (fIsTabAction) {							newOffset= fCaretOffset;							newLength= 0;						} else if (nLines > 1) {							newOffset= offset;							newLength= end.getOffset() - offset;						} else {							newOffset= fCaretOffset;							newLength= 0;						}												// always reset the selection if anything was replaced						// but not when we had a singleline nontab invocation						if (newOffset != -1 && (hasChanged || newOffset != offset || newLength != length))							selectAndReveal(newOffset, newLength);												document.removePosition(end);					} catch (BadLocationException e) {						// will only happen on concurrent modification						JavaPlugin.log(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.OK, null, e));											} finally {												if (target != null) {							target.endCompoundChange();							target.setRedraw(true);						}					}				}			};						if (nLines > 50) {				Display display= getTextEditor().getEditorSite().getWorkbenchWindow().getShell().getDisplay();				BusyIndicator.showWhile(display, runnable);			} else				runnable.run();					}	}