From 8e176cef3541ecf95e15d42a0054ac7511e8f891 Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Thu, 6 Mar 2014 15:28:28 +0400 Subject: [PATCH 1/2] EnforcedPlainTextFileTypeManager: Fix broken file status update sequence (PhpCompletionTest.testExcludedFiles()) [CR-IC-4656] --- .../EnforcedPlainTextFileTypeManager.java | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 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 f40d069c83c1..07399bd8d7cb 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 @@ -25,16 +25,13 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.project.ProjectManagerListener; import com.intellij.openapi.roots.ex.ProjectRootManagerEx; -import com.intellij.openapi.util.EmptyRunnable; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileWithId; import com.intellij.util.containers.ConcurrentWeakHashMap; import com.intellij.util.indexing.FileBasedIndex; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.Map; /** @@ -89,33 +86,27 @@ public class EnforcedPlainTextFileTypeManager implements ProjectManagerListener setPlainTextStatus(false, files); } - public void setPlainTextStatus(boolean isPlainText, VirtualFile... files) { - List filesToSync = new ArrayList(); - for (VirtualFile file : files) { - filesToSync.add(file); - FileBasedIndex.getInstance().requestReindex(file); - } - fireRootsChanged(filesToSync, isPlainText); - } - - private void fireRootsChanged(final Collection files, final boolean isAdded) { + private void setPlainTextStatus(final boolean isAdded, final VirtualFile... files) { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - for (Project project : ProjectManager.getInstance().getOpenProjects()) { - ProjectRootManagerEx.getInstanceEx(project).makeRootsChange(EmptyRunnable.getInstance(), false, true); - ProjectPlainTextFileTypeManager projectPlainTextFileTypeManager = ProjectPlainTextFileTypeManager.getInstance(project); - for (VirtualFile file : files) { - if (projectPlainTextFileTypeManager.hasProjectContaining(file)) { - ensureProjectFileSetAdded(project, projectPlainTextFileTypeManager); - if (isAdded) { - projectPlainTextFileTypeManager.addFile(file); - } - else { - projectPlainTextFileTypeManager.removeFile(file); + for (final Project project : ProjectManager.getInstance().getOpenProjects()) { + ProjectRootManagerEx.getInstanceEx(project).makeRootsChange(new Runnable() { + @Override + public void run() { + ProjectPlainTextFileTypeManager projectPlainTextFileTypeManager = ProjectPlainTextFileTypeManager.getInstance(project); + for (VirtualFile file : files) { + if (projectPlainTextFileTypeManager.hasProjectContaining(file)) { + ensureProjectFileSetAdded(project, projectPlainTextFileTypeManager); + if (isAdded ? + projectPlainTextFileTypeManager.addFile(file) : + projectPlainTextFileTypeManager.removeFile(file)) { + FileBasedIndex.getInstance().requestReindex(file); + } + } } } - } + }, false, true); } } }); From 6f729cfe0f7e8087dbdfd22aab5d7fac68beb880 Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Fri, 7 Mar 2014 14:00:32 +0400 Subject: [PATCH 2/2] EnforcedPlainTextFileTypeManager: pass project as a parameter [CR-IC-4656] --- .../EnforcedPlainTextFileTypeManager.java | 38 +++++++++---------- .../exclude/ui/MarkAsOriginalTypeAction.java | 6 ++- .../exclude/ui/MarkAsPlainTextAction.java | 6 ++- ...EnforcedPlaintTextFileTypeManagerTest.java | 4 +- 4 files changed, 30 insertions(+), 24 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 07399bd8d7cb..67ec99535f03 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 @@ -78,36 +78,34 @@ public class EnforcedPlainTextFileTypeManager implements ProjectManagerListener return !originalType.isBinary() && originalType != FileTypes.PLAIN_TEXT && originalType != StdFileTypes.JAVA; } - public void markAsPlainText(VirtualFile... files) { - setPlainTextStatus(true, files); + public void markAsPlainText(@NotNull Project project, VirtualFile... files) { + setPlainTextStatus(project, true, files); } - public void resetOriginalFileType(VirtualFile... files) { - setPlainTextStatus(false, files); + public void resetOriginalFileType(@NotNull Project project, VirtualFile... files) { + setPlainTextStatus(project, false, files); } - private void setPlainTextStatus(final boolean isAdded, final VirtualFile... files) { + private void setPlainTextStatus(@NotNull final Project project, final boolean isAdded, final VirtualFile... files) { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - for (final Project project : ProjectManager.getInstance().getOpenProjects()) { - ProjectRootManagerEx.getInstanceEx(project).makeRootsChange(new Runnable() { - @Override - public void run() { - ProjectPlainTextFileTypeManager projectPlainTextFileTypeManager = ProjectPlainTextFileTypeManager.getInstance(project); - for (VirtualFile file : files) { - if (projectPlainTextFileTypeManager.hasProjectContaining(file)) { - ensureProjectFileSetAdded(project, projectPlainTextFileTypeManager); - if (isAdded ? - projectPlainTextFileTypeManager.addFile(file) : - projectPlainTextFileTypeManager.removeFile(file)) { - FileBasedIndex.getInstance().requestReindex(file); - } + ProjectRootManagerEx.getInstanceEx(project).makeRootsChange(new Runnable() { + @Override + public void run() { + ProjectPlainTextFileTypeManager projectPlainTextFileTypeManager = ProjectPlainTextFileTypeManager.getInstance(project); + for (VirtualFile file : files) { + if (projectPlainTextFileTypeManager.hasProjectContaining(file)) { + ensureProjectFileSetAdded(project, projectPlainTextFileTypeManager); + if (isAdded ? + projectPlainTextFileTypeManager.addFile(file) : + projectPlainTextFileTypeManager.removeFile(file)) { + FileBasedIndex.getInstance().requestReindex(file); } } } - }, false, true); - } + } + }, false, true); } }); } 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 c4e9c1a8ea31..31800af92667 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 @@ -20,6 +20,7 @@ import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.file.exclude.EnforcedPlainTextFileTypeManager; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeManager; +import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import java.util.ArrayList; @@ -33,6 +34,7 @@ public class MarkAsOriginalTypeAction extends AnAction { public void actionPerformed(AnActionEvent e) { DataContext dataContext = e.getDataContext(); final VirtualFile[] selectedFiles = CommonDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext); + final Project project = CommonDataKeys.PROJECT.getData(dataContext); if (selectedFiles == null || selectedFiles.length == 0) return; Collection filesToUnmark = new ArrayList(); for (VirtualFile file : selectedFiles) { @@ -42,7 +44,9 @@ public class MarkAsOriginalTypeAction extends AnAction { } EnforcedPlainTextFileTypeManager typeManager = EnforcedPlainTextFileTypeManager.getInstance(); assert typeManager != null; - typeManager.resetOriginalFileType(filesToUnmark.toArray(new VirtualFile[filesToUnmark.size()])); + if (project != null) { + typeManager.resetOriginalFileType(project, 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 7af431c561b5..7bc03da3a195 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 @@ -18,6 +18,7 @@ package com.intellij.openapi.file.exclude.ui; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.file.exclude.EnforcedPlainTextFileTypeFactory; import com.intellij.openapi.file.exclude.EnforcedPlainTextFileTypeManager; +import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import java.util.ArrayList; @@ -31,6 +32,7 @@ public class MarkAsPlainTextAction extends AnAction { public void actionPerformed(AnActionEvent e) { DataContext dataContext = e.getDataContext(); final VirtualFile[] selectedFiles = CommonDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext); + final Project project = CommonDataKeys.PROJECT.getData(dataContext); if (selectedFiles == null || selectedFiles.length == 0) return; EnforcedPlainTextFileTypeManager typeManager = EnforcedPlainTextFileTypeManager.getInstance(); assert typeManager != null; @@ -43,7 +45,9 @@ public class MarkAsPlainTextAction extends AnAction { filesToMark.add(file); } } - typeManager.markAsPlainText(filesToMark.toArray(new VirtualFile[filesToMark.size()])); + if (project != null) { + typeManager.markAsPlainText(project, filesToMark.toArray(new VirtualFile[filesToMark.size()])); + } } @Override diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/fileTypes/EnforcedPlaintTextFileTypeManagerTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/fileTypes/EnforcedPlaintTextFileTypeManagerTest.java index 2fe27875e2e9..b7cefc60d1f6 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/fileTypes/EnforcedPlaintTextFileTypeManagerTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/fileTypes/EnforcedPlaintTextFileTypeManagerTest.java @@ -29,10 +29,10 @@ public class EnforcedPlaintTextFileTypeManagerTest extends LightPlatformCodeInsi VirtualFile file = myFixture.getTempDirFixture().createFile("test.java"); FileType originalType = file.getFileType(); assertEquals("JAVA", originalType.getName()); - manager.markAsPlainText(file); + manager.markAsPlainText(getProject(), file); FileType changedType = file.getFileType(); assertEquals(EnforcedPlainTextFileTypeFactory.ENFORCED_PLAIN_TEXT, changedType.getName()); - manager.resetOriginalFileType(file); + manager.resetOriginalFileType(getProject(), file); FileType revertedType = file.getFileType(); assertEquals(originalType, revertedType); }