filetypemanager perf fix
authorDmitry Jemerov <yole@jetbrains.com>
Mon, 15 Feb 2010 18:20:52 +0000 (15 21:20 +0300)
committerDmitry Jemerov <yole@jetbrains.com>
Mon, 15 Feb 2010 18:25:14 +0000 (15 21:25 +0300)
platform/platform-api/src/com/intellij/openapi/fileTypes/FileTypeManager.java
platform/platform-api/src/com/intellij/openapi/fileTypes/MockFileTypeManager.java
platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java
plugins/properties/src/com/intellij/lang/properties/ResourceBundleImpl.java

index e80b45c..9b8400a 100644 (file)
@@ -126,6 +126,8 @@ public abstract class FileTypeManager{
   @NotNull
   public abstract List<FileNameMatcher> 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.
index f9f98b8..080b51c 100644 (file)
@@ -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;
+  }
 }
index d84a059..8d9b442 100644 (file)
@@ -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<FileNameMatcher> 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);
index 029d8a1..c6e2bb2 100644 (file)
@@ -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) {