mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-29 03:45:35 +02:00
Change the scheduling rule
This commit is contained in:
parent
977904112c
commit
3c381cd8bc
1 changed files with 67 additions and 27 deletions
|
@ -19,8 +19,11 @@ import org.eclipse.cdt.internal.ui.CFileElementWorkingCopy;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IResourceRuleFactory;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||||
import org.eclipse.jface.text.DefaultLineTracker;
|
import org.eclipse.jface.text.DefaultLineTracker;
|
||||||
import org.eclipse.jface.text.IDocument;
|
import org.eclipse.jface.text.IDocument;
|
||||||
import org.eclipse.jface.text.ILineTracker;
|
import org.eclipse.jface.text.ILineTracker;
|
||||||
|
@ -149,36 +152,73 @@ public class CDocumentProvider extends TextFileDocumentProvider {
|
||||||
super.disposeFileInfo(element, info);
|
super.disposeFileInfo(element, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void commitFileBuffer(IProgressMonitor monitor, Object element, FileInfo fileInfo, boolean overwrite)
|
protected void commitWorkingCopy(IProgressMonitor monitor, Object element, TranslationUnitInfo info, boolean overwrite)
|
||||||
throws CoreException {
|
throws CoreException {
|
||||||
if (fileInfo instanceof TranslationUnitInfo) {
|
|
||||||
TranslationUnitInfo info = (TranslationUnitInfo)fileInfo;
|
|
||||||
|
|
||||||
synchronized (info.fCopy) {
|
synchronized (info.fCopy) {
|
||||||
info.fCopy.reconcile();
|
info.fCopy.reconcile();
|
||||||
}
|
|
||||||
|
|
||||||
//if (fSavePolicy != null)
|
|
||||||
// fSavePolicy.preSave(info.fCopy);
|
|
||||||
|
|
||||||
try {
|
|
||||||
fIsAboutToSave = true;
|
|
||||||
//info.fCopy.commit(overwrite, monitor);
|
|
||||||
super.commitFileBuffer(monitor, info, overwrite);
|
|
||||||
} 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;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
super.commitFileBuffer(monitor, fileInfo, overwrite);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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.commit(overwrite, monitor);
|
||||||
|
commitFileBuffer(monitor, info, overwrite);
|
||||||
|
} 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider#createSaveOperation(java.lang.Object, org.eclipse.jface.text.IDocument, boolean)
|
||||||
|
*/
|
||||||
|
protected DocumentProviderOperation createSaveOperation(final Object element, final IDocument document, final boolean overwrite) throws CoreException {
|
||||||
|
final FileInfo info= getFileInfo(element);
|
||||||
|
if (info instanceof TranslationUnitInfo) {
|
||||||
|
return new DocumentProviderOperation() {
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider.DocumentProviderOperation#execute(org.eclipse.core.runtime.IProgressMonitor)
|
||||||
|
*/
|
||||||
|
protected void execute(IProgressMonitor monitor) throws CoreException {
|
||||||
|
commitWorkingCopy(monitor, element, (TranslationUnitInfo) info, overwrite);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider.DocumentProviderOperation#getSchedulingRule()
|
||||||
|
*/
|
||||||
|
public ISchedulingRule getSchedulingRule() {
|
||||||
|
if (info.fElement instanceof IFileEditorInput) {
|
||||||
|
IFile file= ((IFileEditorInput) info.fElement).getFile();
|
||||||
|
IResourceRuleFactory ruleFactory= ResourcesPlugin.getWorkspace().getRuleFactory();
|
||||||
|
if (file == null || !file.exists())
|
||||||
|
return ruleFactory.createRule(file);
|
||||||
|
else
|
||||||
|
return ruleFactory.modifyRule(file);
|
||||||
|
} else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return super.createSaveOperation(element, document, overwrite);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue