From e50bacbc5cc449767e07c301eb6c03345b19fb03 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 9 Sep 2009 11:04:01 +0400 Subject: [PATCH] requestWriting method --- .../generation/GenerateDelegateHandler.java | 6 ++---- .../GenerateMembersHandlerBase.java | 6 ++---- .../impl/ImplementAbstractMethodHandler.java | 8 +++----- .../codeInsight/CodeInsightUtilBase.java | 2 +- .../actions/AbstractLayoutCodeProcessor.java | 2 +- .../completion/CodeCompletionHandlerBase.java | 2 +- .../editorActions/EmacsStyleIndentAction.java | 6 ++---- .../codeInsight/editorActions/EndHandler.java | 2 +- .../editorActions/PasteHandler.java | 2 +- .../editorActions/TypedHandler.java | 6 ++---- .../generation/AutoIndentLinesHandler.java | 2 +- .../CommentByBlockCommentHandler.java | 2 +- .../CommentByLineCommentHandler.java | 2 +- .../generation/ImplementMethodsHandler.java | 4 +--- .../generation/OverrideMethodsHandler.java | 4 +--- .../surroundWith/SurroundWithHandler.java | 2 +- .../template/impl/TemplateManagerImpl.java | 4 +--- .../src/com/intellij/find/FindUtil.java | 4 +--- .../EditorWriteActionHandler.java | 4 +--- .../editor/actionSystem/TypedAction.java | 6 ++---- .../fileEditor/FileDocumentManager.java | 20 ++++++++----------- .../editor/actions/MultiplePasteAction.java | 4 +--- .../openapi/editor/impl/EditorImpl.java | 4 +--- .../impl/FileDocumentManagerImpl.java | 16 +++++++++++++++ .../editor/ResourceBundleEditor.java | 2 +- 25 files changed, 54 insertions(+), 68 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateDelegateHandler.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateDelegateHandler.java index d4da65fffa3e..cf9de36ab727 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateDelegateHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateDelegateHandler.java @@ -32,10 +32,8 @@ public class GenerateDelegateHandler implements CodeInsightActionHandler { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.generation.GenerateDelegateHandler"); public void invoke(final Project project, final Editor editor, final PsiFile file) { - if (!file.isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), project)){ - return; - } + if (!file.isWritable() && !FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)) { + return; } PsiDocumentManager.getInstance(project).commitAllDocuments(); diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersHandlerBase.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersHandlerBase.java index 669dcf7669cb..03c80e103e18 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersHandlerBase.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersHandlerBase.java @@ -44,10 +44,8 @@ public abstract class GenerateMembersHandlerBase implements CodeInsightActionHan } public final void invoke(final Project project, final Editor editor, PsiFile file) { - if (!file.isWritable()){ - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), project)){ - return; - } + if (!file.isWritable() && !FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)) { + return; } final PsiClass aClass = OverrideImplementUtil.getContextClass(project, editor, file, false); if (aClass == null || aClass.isInterface()) return; //? diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ImplementAbstractMethodHandler.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ImplementAbstractMethodHandler.java index f9347b1cfd49..6a3daf4dcff4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ImplementAbstractMethodHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ImplementAbstractMethodHandler.java @@ -100,11 +100,9 @@ public class ImplementAbstractMethodHandler { private void implementInClass(final PsiClass psiClass) { if (!psiClass.isValid()) return; - if (!psiClass.isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(PsiDocumentManager.getInstance(myProject).getDocument(psiClass.getContainingFile()), myProject)){ - MessagesEx.fileIsReadOnly(myProject, psiClass.getContainingFile().getVirtualFile()).showNow(); - return; - } + if (!psiClass.isWritable() && !FileDocumentManager.getInstance().requestWriting(PsiDocumentManager.getInstance(myProject).getDocument(psiClass.getContainingFile()), myProject)) { + MessagesEx.fileIsReadOnly(myProject, psiClass.getContainingFile().getVirtualFile()).showNow(); + return; } CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java index e88cc2910823..fc6f4b123ebd 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java @@ -80,7 +80,7 @@ public class CodeInsightUtilBase { FileEditorManager.getInstance(project).openTextEditor(new OpenFileDescriptor(project, file.getVirtualFile()), true); final Document document = PsiDocumentManager.getInstance(project).getDocument(file); - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(document, project)) { + if (!FileDocumentManager.getInstance().requestWriting(document, project)) { ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { if (editor != null && editor.getComponent().isDisplayable()) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/actions/AbstractLayoutCodeProcessor.java b/platform/lang-impl/src/com/intellij/codeInsight/actions/AbstractLayoutCodeProcessor.java index b09375a9f61c..415185be4ecc 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/actions/AbstractLayoutCodeProcessor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/AbstractLayoutCodeProcessor.java @@ -134,7 +134,7 @@ public abstract class AbstractLayoutCodeProcessor { } if (!file.isWritable()){ - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(document, myProject)) { + if (!FileDocumentManager.getInstance().requestWriting(document, myProject)) { Messages.showMessageDialog(myProject, PsiBundle.message("cannot.modify.a.read.only.file", file.getName()), CodeInsightBundle.message("error.dialog.readonly.file.title"), Messages.getErrorIcon() diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java index 00e621d82e02..16d50ca19059 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -81,7 +81,7 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { document.fireReadOnlyModificationAttempt(); return; } - if (!psiFile.isWritable() && !FileDocumentManager.fileForDocumentCheckedOutSuccessfully(document, project)) { + if (!psiFile.isWritable() && !FileDocumentManager.getInstance().requestWriting(document, project)) { return; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EmacsStyleIndentAction.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EmacsStyleIndentAction.java index fc1799003b5c..92faea546928 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EmacsStyleIndentAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EmacsStyleIndentAction.java @@ -36,10 +36,8 @@ public class EmacsStyleIndentAction extends BaseCodeInsightAction implements Dum public void invoke(final Project project, final Editor editor, final PsiFile file) { PsiDocumentManager.getInstance(project).commitAllDocuments(); - if (!file.isWritable()){ - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), project)){ - return; - } + if (!file.isWritable() && !FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)) { + return; } final Document document = editor.getDocument(); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EndHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EndHandler.java index 575b860da5b6..c75fad5243a8 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EndHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/EndHandler.java @@ -68,7 +68,7 @@ public class EndHandler extends EditorActionHandler { caretModel.moveToLogicalPosition(new LogicalPosition(line, col)); if (caretModel.getLogicalPosition().column != col){ - if (!document.isWritable() && !FileDocumentManager.fileForDocumentCheckedOutSuccessfully(document, project)) { + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)) { return; } editor.getSelectionModel().removeSelection(); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java index ce66209cfca7..53708aa13a29 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/PasteHandler.java @@ -50,7 +50,7 @@ public class PasteHandler extends EditorActionHandler { if (editor.isViewer()) return; if (!editor.getDocument().isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), PlatformDataKeys.PROJECT.getData(dataContext))){ + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), PlatformDataKeys.PROJECT.getData(dataContext))){ return; } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java index 8302a58c400b..4aa137156923 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java @@ -114,10 +114,8 @@ public class TypedHandler implements TypedActionHandler { if (editor.isViewer()) return; - if (!editor.getDocument().isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), project)) { - return; - } + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)) { + return; } Editor injectedEditor = injectedEditorIfCharTypedIsSignificant(charTyped, editor, file); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/AutoIndentLinesHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/AutoIndentLinesHandler.java index 3ee99d3276c5..89147bfb177b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/AutoIndentLinesHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/AutoIndentLinesHandler.java @@ -18,7 +18,7 @@ public class AutoIndentLinesHandler implements CodeInsightActionHandler { PsiDocumentManager.getInstance(project).commitAllDocuments(); if (!file.isWritable()){ - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), project)){ + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)){ return; } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java index 53a71123b413..ad2c96cf6ac5 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java @@ -46,7 +46,7 @@ public class CommentByBlockCommentHandler implements CodeInsightActionHandler { myDocument = editor.getDocument(); if (!myFile.isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(myDocument, project)) { + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)) { return; } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java index b3f9c3956e72..d642c1acdbf9 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java @@ -49,7 +49,7 @@ public class CommentByLineCommentHandler implements CodeInsightActionHandler { myEditor = editor; if (!myFile.isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(myDocument, project)) { + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)) { return; } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/ImplementMethodsHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/ImplementMethodsHandler.java index d756723c8183..5a6f024db2e0 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/ImplementMethodsHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/ImplementMethodsHandler.java @@ -4,7 +4,6 @@ import com.intellij.codeInsight.CodeInsightActionHandler; import com.intellij.lang.CodeInsightActions; import com.intellij.lang.Language; import com.intellij.lang.LanguageCodeInsightActionHandler; -import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; @@ -13,9 +12,8 @@ import com.intellij.psi.util.PsiUtilBase; public class ImplementMethodsHandler implements CodeInsightActionHandler{ public final void invoke(final Project project, final Editor editor, PsiFile file) { - Document document = editor.getDocument(); if (!file.isWritable()){ - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(document, project)){ + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)){ return; } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/OverrideMethodsHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/OverrideMethodsHandler.java index 3925c7393782..a41e4c2841c1 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/OverrideMethodsHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/OverrideMethodsHandler.java @@ -4,7 +4,6 @@ import com.intellij.codeInsight.CodeInsightActionHandler; import com.intellij.lang.CodeInsightActions; import com.intellij.lang.Language; import com.intellij.lang.LanguageCodeInsightActionHandler; -import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; @@ -13,9 +12,8 @@ import com.intellij.psi.util.PsiUtilBase; public class OverrideMethodsHandler implements CodeInsightActionHandler{ public final void invoke(final Project project, final Editor editor, PsiFile file) { - Document document = editor.getDocument(); if (!file.isWritable()){ - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(document, project)){ + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)){ return; } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/surroundWith/SurroundWithHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/surroundWith/SurroundWithHandler.java index f6e9cc3bd828..b0e4a1e05c5d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/surroundWith/SurroundWithHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/surroundWith/SurroundWithHandler.java @@ -89,7 +89,7 @@ public class SurroundWithHandler implements CodeInsightActionHandler{ static void doSurround(final Project project, final Editor editor, final Surrounder surrounder, final PsiElement[] elements) { final PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); if (!file.isWritable()){ - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), project)){ + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)){ return; } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java index e6fc8c92b349..c78be652c077 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java @@ -207,10 +207,8 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo if (!isApplicable(file, caretOffset - template.getKey().length(), template)) { return false; } - if (!editor.getDocument().isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), myProject)){ + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), myProject)) { return false; - } } final int wordStart0 = wordStart; final TemplateImpl template0 = template; diff --git a/platform/lang-impl/src/com/intellij/find/FindUtil.java b/platform/lang-impl/src/com/intellij/find/FindUtil.java index 5f452be8bf4b..9af9f935d1a2 100644 --- a/platform/lang-impl/src/com/intellij/find/FindUtil.java +++ b/platform/lang-impl/src/com/intellij/find/FindUtil.java @@ -383,10 +383,8 @@ public class FindUtil { private static boolean replace(Project project, Editor editor, int offset, FindModel model) { Document document = editor.getDocument(); - if (!document.isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(document, project)){ + if (!FileDocumentManager.getInstance().requestWriting(document, project)) { return false; - } } document.startGuardedBlockChecking(); diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorWriteActionHandler.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorWriteActionHandler.java index 3064395a82d0..36f5d484d5f5 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorWriteActionHandler.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorWriteActionHandler.java @@ -27,10 +27,8 @@ public abstract class EditorWriteActionHandler extends EditorActionHandler { public final void execute(final Editor editor, final DataContext dataContext) { if (editor.isViewer()) return; - if (!editor.getDocument().isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), PlatformDataKeys.PROJECT.getData(dataContext))) + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), PlatformDataKeys.PROJECT.getData(dataContext))) return; - } ApplicationManager.getApplication().runWriteAction(new DocumentRunnable(editor.getDocument(),editor.getProject()) { public void run() { diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java index 1e4f405c96d4..859d3b5ce605 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java @@ -51,10 +51,8 @@ public class TypedAction { if (editor.isViewer()) return; Document doc = editor.getDocument(); - if (!doc.isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(doc, PlatformDataKeys.PROJECT.getData(dataContext))) { - return; - } + if (!FileDocumentManager.getInstance().requestWriting(doc, PlatformDataKeys.PROJECT.getData(dataContext))) { + return; } doc.startGuardedBlockChecking(); diff --git a/platform/platform-api/src/com/intellij/openapi/fileEditor/FileDocumentManager.java b/platform/platform-api/src/com/intellij/openapi/fileEditor/FileDocumentManager.java index 2578a7b0011d..9d6946e8f63e 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileEditor/FileDocumentManager.java +++ b/platform/platform-api/src/com/intellij/openapi/fileEditor/FileDocumentManager.java @@ -18,7 +18,6 @@ package com.intellij.openapi.fileEditor; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.ReadonlyStatusHandler; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -61,17 +60,14 @@ public abstract class FileDocumentManager { @NotNull public abstract String getLineSeparator(@Nullable VirtualFile file, @Nullable Project project); - public static boolean fileForDocumentCheckedOutSuccessfully(@NotNull Document document, Project project) { - if (project != null) { - final VirtualFile file = getInstance().getFile(document); - if (file != null && file.isValid()) { - final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(file); - return !operationStatus.hasReadonlyFiles(); - } - } - document.fireReadOnlyModificationAttempt(); - return false; - } + /** + * Requests writing access on given document + * + * @param document document + * @param project project + * @return true if writing access allowed + */ + public abstract boolean requestWriting(@NotNull Document document, Project project); public abstract void reloadFiles(VirtualFile... files); } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/MultiplePasteAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/MultiplePasteAction.java index a4a2f96b6bf7..04fcbea5787e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/MultiplePasteAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/MultiplePasteAction.java @@ -72,11 +72,9 @@ public class MultiplePasteAction extends AnAction implements DumbAware { ((CopyPasteManagerEx)CopyPasteManager.getInstance()).moveContentTopStackTop(chooser.getAllContents().get(selectedIndex)); if (editor != null) { - if (!editor.getDocument().isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), project)){ + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), project)){ return; } - } final AnAction pasteAction = ActionManager.getInstance().getAction(IdeActions.ACTION_PASTE); AnActionEvent newEvent = new AnActionEvent(e.getInputEvent(), diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 0988304912b6..ffb8f9f196bb 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -3983,10 +3983,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi final Editor editor = getEditor(source); if (action == MOVE && !editor.isViewer()) { - if (!editor.getDocument().isWritable()) { - if (!FileDocumentManager.fileForDocumentCheckedOutSuccessfully(editor.getDocument(), editor.getProject())){ + if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), editor.getProject())) { return; - } } CommandProcessor.getInstance().executeCommand(((EditorImpl)editor).myProject, new Runnable() { public void run() { diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java index 822b7b1e5369..eaf290c5d590 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java @@ -300,6 +300,22 @@ public class FileDocumentManagerImpl extends FileDocumentManager implements Appl } } + @Override + public boolean requestWriting(@NotNull Document document, Project project) { + if (document.isWritable()) { + return true; + } + if (project != null) { + final VirtualFile file = getInstance().getFile(document); + if (file != null && file.isValid()) { + final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(file); + return !operationStatus.hasReadonlyFiles(); + } + } + document.fireReadOnlyModificationAttempt(); + return false; + } + public void reloadFiles(final VirtualFile... files) { for (VirtualFile file : files) { if (file.exists()) { diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java index 1741f87670d9..ad4f4cdf55ce 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java @@ -422,7 +422,7 @@ public class ResourceBundleEditor extends UserDataHolderBase implements FileEdit documentManager.commitDocument(propertiesFileDocument); if (!propertiesFile.isWritable() && - !FileDocumentManager.fileForDocumentCheckedOutSuccessfully(propertiesFileDocument, project)) { + !FileDocumentManager.getInstance().requestWriting(document, project)) { uninstallDocumentListeners(); try { document.replaceString(0, document.getTextLength(), oldText);