From 4229f4e7937db40d30e322c1188a1237617a800b Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Sat, 5 May 2012 17:55:41 +0400 Subject: [PATCH] Fixed WI-6879 Don't invoke 'Mark as plain text' action in dispatch thread or wrap it with progress(ui freeeze) --- .../EnforcedPlainTextFileTypeManager.java | 21 ++++++++++++------- .../exclude/ui/MarkAsOriginalTypeAction.java | 13 ++++++------ .../exclude/ui/MarkAsPlainTextAction.java | 19 ++++++++++------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/openapi/file/exclude/EnforcedPlainTextFileTypeManager.java b/platform/lang-impl/src/com/intellij/openapi/file/exclude/EnforcedPlainTextFileTypeManager.java index fe31bacac77b..44b8a5089ef2 100644 --- a/platform/lang-impl/src/com/intellij/openapi/file/exclude/EnforcedPlainTextFileTypeManager.java +++ b/platform/lang-impl/src/com/intellij/openapi/file/exclude/EnforcedPlainTextFileTypeManager.java @@ -52,20 +52,25 @@ public class EnforcedPlainTextFileTypeManager extends PersistentFileSetManager { return true; } - public void markAsPlainText(VirtualFile file) { - if (addFile(file)) { - updateIndex(file); + public void markAsPlainText(VirtualFile... files) { + for (VirtualFile file : files) { + if (addFile(file)) { + FileBasedIndex.getInstance().requestReindex(file); + } } + fireRootsChanged(); } - public void unmarkPlainText(VirtualFile file) { - if (removeFile(file)) { - updateIndex(file); + public void unmarkPlainText(VirtualFile... files) { + for (VirtualFile file : files) { + if (removeFile(file)) { + FileBasedIndex.getInstance().requestReindex(file); + } } + fireRootsChanged(); } - private static void updateIndex(VirtualFile file) { - FileBasedIndex.getInstance().requestReindex(file); + private static void fireRootsChanged() { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { diff --git a/platform/lang-impl/src/com/intellij/openapi/file/exclude/ui/MarkAsOriginalTypeAction.java b/platform/lang-impl/src/com/intellij/openapi/file/exclude/ui/MarkAsOriginalTypeAction.java index 8f70cb9bcc02..02b80b8e50f4 100644 --- a/platform/lang-impl/src/com/intellij/openapi/file/exclude/ui/MarkAsOriginalTypeAction.java +++ b/platform/lang-impl/src/com/intellij/openapi/file/exclude/ui/MarkAsOriginalTypeAction.java @@ -21,7 +21,9 @@ import com.intellij.openapi.file.exclude.EnforcedPlainTextFileTypeManager; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.vfs.VirtualFile; -import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Collection; /** * @author Rustam Vishnyakov @@ -32,16 +34,15 @@ public class MarkAsOriginalTypeAction extends AnAction { DataContext dataContext = e.getDataContext(); final VirtualFile[] selectedFiles = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext); if (selectedFiles == null || selectedFiles.length == 0) return; + Collection filesToUnmark = new ArrayList(); for (VirtualFile file : selectedFiles) { if (file != null && !file.isDirectory()) { - unmarkPlainText(file); + filesToUnmark.add(file); } } - } - - private static void unmarkPlainText(@NotNull VirtualFile file) { EnforcedPlainTextFileTypeManager typeManager = EnforcedPlainTextFileTypeManager.getInstance(); - if (typeManager != null) typeManager.unmarkPlainText(file); + assert typeManager != null; + typeManager.unmarkPlainText(filesToUnmark.toArray(new VirtualFile[filesToUnmark.size()])); } @Override diff --git a/platform/lang-impl/src/com/intellij/openapi/file/exclude/ui/MarkAsPlainTextAction.java b/platform/lang-impl/src/com/intellij/openapi/file/exclude/ui/MarkAsPlainTextAction.java index c0c21e34a3aa..cd76ce260425 100644 --- a/platform/lang-impl/src/com/intellij/openapi/file/exclude/ui/MarkAsPlainTextAction.java +++ b/platform/lang-impl/src/com/intellij/openapi/file/exclude/ui/MarkAsPlainTextAction.java @@ -21,6 +21,9 @@ import com.intellij.openapi.file.exclude.EnforcedPlainTextFileTypeManager; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.Collection; + /** * @author Rustam Vishnyakov */ @@ -30,16 +33,18 @@ public class MarkAsPlainTextAction extends AnAction { DataContext dataContext = e.getDataContext(); final VirtualFile[] selectedFiles = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext); if (selectedFiles == null || selectedFiles.length == 0) return; + EnforcedPlainTextFileTypeManager typeManager = EnforcedPlainTextFileTypeManager.getInstance(); + assert typeManager != null; + Collection filesToMark = new ArrayList(); for (VirtualFile file : selectedFiles) { - if (file != null && !file.isDirectory()) { - markAsPlainText(file); + if (file != null && + !file.isDirectory() && + EnforcedPlainTextFileTypeManager.isApplicableFor(file) && + !typeManager.isMarkedAsPlainText(file)) { + filesToMark.add(file); } } - } - - private static void markAsPlainText(@NotNull VirtualFile file) { - EnforcedPlainTextFileTypeManager typeManager = EnforcedPlainTextFileTypeManager.getInstance(); - if (typeManager != null && !typeManager.isMarkedAsPlainText(file)) typeManager.markAsPlainText(file); + typeManager.markAsPlainText(filesToMark.toArray(new VirtualFile[filesToMark.size()])); } @Override