diff options
Diffstat (limited to 'org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java')
-rw-r--r-- | org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java b/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java index c7351d7bb38..a61d0616988 100644 --- a/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java +++ b/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/FileDocumentProvider.java @@ -1128,7 +1128,19 @@ public class FileDocumentProvider extends StorageDocumentProvider { protected ISchedulingRule getValidateStateRule(Object element) { if (element instanceof IFileEditorInput) { IFileEditorInput input= (IFileEditorInput) element; - return fResourceRuleFactory.validateEditRule(new IResource[] { input.getFile() }); + IFile file= input.getFile(); + ISchedulingRule validateEditRule= fResourceRuleFactory.validateEditRule(new IResource[] { file }); + if (validateEditRule == null) { + // Note that factory decides to provide a null rule for modifiable files (not read-only). + // Null rule means, that org.eclipse.core.internal.resources.WorkManager.checkIn(ISchedulingRule, IProgressMonitor) + // will run jobManager.beginRule(null, monitor); which will NOT show any progress dialog + // and will *immediately* lock UI thread via lock.acquire(); while the workspace is locked + // Providing here a file we enforce the progress dialog, where this operation can be cancelled by user, + // so that an occasional "Modify" or "Save" of the editor will NOT block UI forever. + return file; + } else { + return validateEditRule; + } } return null; } |