From 78f65daacfa6e760c08a91d71ffb2d88fe7d7c73 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 15 Feb 2010 21:20:52 +0300 Subject: [PATCH] filetypemanager perf fix --- .../src/com/intellij/openapi/fileTypes/FileTypeManager.java | 2 ++ .../com/intellij/openapi/fileTypes/MockFileTypeManager.java | 4 ++++ .../openapi/fileTypes/impl/FileTypeManagerImpl.java | 13 +++++++++++++ .../com/intellij/lang/properties/ResourceBundleImpl.java | 3 +-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java b/platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java index e80b45c7ec..9b8400aa8a 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java +++ b/platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java @@ -126,6 +126,8 @@ public abstract class FileTypeManager{ @NotNull public abstract List getAssociations(@NotNull FileType type); + public abstract boolean isFileOfType(VirtualFile file, FileType type); + /** * Adds a listener for receiving notifications about changes in the list of * registered file types. diff --git a/platform/platform-api/src/com/intellij/openapi/fileTypes/MockFileTypeManager.java b/platform/platform-api/src/com/intellij/openapi/fileTypes/MockFileTypeManager.java index f9f98b806a..080b51c8fd 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileTypes/MockFileTypeManager.java +++ b/platform/platform-api/src/com/intellij/openapi/fileTypes/MockFileTypeManager.java @@ -109,4 +109,8 @@ class MockFileTypeManager extends FileTypeManager { public FileType getStdFileType(@NotNull @NonNls String fileTypeName) { return MockLanguageFileType.INSTANCE; } + + public boolean isFileOfType(VirtualFile file, FileType type) { + return false; + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java index d84a059b1d..8d9b442080 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java @@ -290,6 +290,19 @@ public class FileTypeManagerImpl extends FileTypeManagerEx implements NamedJDOME return getFileTypeByFileName(file.getName()); } + public boolean isFileOfType(VirtualFile file, FileType type) { + if (type instanceof FileTypeIdentifiableByVirtualFile) { + return ((FileTypeIdentifiableByVirtualFile) type).isMyFileType(file); + } + final List matchers = getAssociations(type); + for (FileNameMatcher matcher : matchers) { + if (matcher.accept(file.getName())) { + return true; + } + } + return false; + } + @NotNull public FileType getFileTypeByExtension(@NotNull String extension) { return getFileTypeByFileName("IntelliJ_IDEA_RULES." + extension); diff --git a/plugins/properties/src/com/intellij/lang/properties/ResourceBundleImpl.java b/plugins/properties/src/com/intellij/lang/properties/ResourceBundleImpl.java index 029d8a11a1..c6e2bb2248 100644 --- a/plugins/properties/src/com/intellij/lang/properties/ResourceBundleImpl.java +++ b/plugins/properties/src/com/intellij/lang/properties/ResourceBundleImpl.java @@ -33,7 +33,6 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; - import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -77,7 +76,7 @@ public class ResourceBundleImpl implements ResourceBundle { FileTypeManager fileTypeManager = FileTypeManager.getInstance(); PsiManager psiManager = PsiManager.getInstance(project); for (VirtualFile file : children) { - if (!file.isValid() || fileTypeManager.getFileTypeByFile(file) != StdFileTypes.PROPERTIES) continue; + if (!file.isValid() || !fileTypeManager.isFileOfType(file, StdFileTypes.PROPERTIES)) continue; if (Comparing.strEqual(PropertiesUtil.getBaseName(file), myBaseName)) { PsiFile psiFile = psiManager.findFile(file); if (psiFile instanceof PropertiesFile) { -- 2.11.4.GIT