diff --git a/platform/core-api/src/com/intellij/codeInsight/FileModificationService.java b/platform/core-api/src/com/intellij/codeInsight/FileModificationService.java index 680ea24d09fa..f10d55c71fa9 100644 --- a/platform/core-api/src/com/intellij/codeInsight/FileModificationService.java +++ b/platform/core-api/src/com/intellij/codeInsight/FileModificationService.java @@ -16,6 +16,8 @@ package com.intellij.codeInsight; import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; @@ -40,4 +42,6 @@ public abstract class FileModificationService { public boolean preparePsiElementsForWrite(@NotNull PsiElement... elements) { return preparePsiElementsForWrite(Arrays.asList(elements)); } + + public abstract boolean prepareVirtualFilesForWrite(@NotNull Project project, @NotNull Collection files); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java index 3c430fa47973..f788b0478a33 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightUtilBase.java @@ -100,6 +100,12 @@ public class CodeInsightUtilBase extends CodeInsightUtilCore { return true; } + @Override + public boolean prepareVirtualFilesForWrite(@NotNull Project project, @NotNull Collection files) { + ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(files); + return !status.hasReadonlyFiles(); + } + // returns true on success public static boolean prepareEditorForWrite(@NotNull Editor editor) { if (!editor.isViewer()) return true;