} finally { monitor.done();
	protected void commitWorkingCopy(IProgressMonitor monitor, Object element, CompilationUnitInfo info, boolean overwrite) throws CoreException {				synchronized (info.fCopy) {			info.fCopy.reconcile();		}				IDocument document= info.fTextFileBuffer.getDocument();		IResource resource= info.fCopy.getResource();				Assert.isTrue(resource instanceof IFile);		if (!resource.exists()) {			// underlying resource has been deleted, just recreate file, ignore the rest			createFileFromDocument(monitor, (IFile) resource, document);			return;		}				if (fSavePolicy != null)			fSavePolicy.preSave(info.fCopy);				try {						fIsAboutToSave= true;			info.fCopy.commitWorkingCopy(overwrite, monitor);						} catch (CoreException x) {			// inform about the failure			fireElementStateChangeFailed(element);			throw x;		} catch (RuntimeException x) {			// inform about the failure			fireElementStateChangeFailed(element);			throw x;		} finally {			fIsAboutToSave= false;		}				// If here, the dirty state of the editor will change to "not dirty".		// Thus, the state changing flag will be reset.		if (info.fModel instanceof AbstractMarkerAnnotationModel) {			AbstractMarkerAnnotationModel model= (AbstractMarkerAnnotationModel) info.fModel;			model.updateMarkers(document);		}				if (fSavePolicy != null) {			ICompilationUnit unit= fSavePolicy.postSave(info.fCopy);			if (unit != null && info.fModel instanceof AbstractMarkerAnnotationModel) {				IResource r= unit.getResource();				IMarker[] markers= r.findMarkers(IMarker.MARKER, true, IResource.DEPTH_ZERO);				if (markers != null && markers.length > 0) {					AbstractMarkerAnnotationModel model= (AbstractMarkerAnnotationModel) info.fModel;											for (int i= 0; i < markers.length; i++)						model.updateMarker(document, markers[i], null);				}			}		}	}