adding a new ExtensionFileNameMatcher should re-assign file type for files previously...
authorSergey Simonchik <sergey.simonchik@jetbrains.com>
Mon, 27 Oct 2014 15:44:25 +0000 (19:44 +0400)
committerSergey Simonchik <sergey.simonchik@jetbrains.com>
Mon, 27 Oct 2014 15:44:25 +0000 (19:44 +0400)
platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java

index 37e9dc5836284718c06f1b579d79647294ee969c..1891e59711bd830c1bcd41fb6bc7872d094f7e4e 100644 (file)
@@ -358,8 +358,10 @@ public class FileTypeManagerImpl extends FileTypeManagerEx implements NamedJDOME
     for (final StandardFileType pair : myStandardFileTypes.values()) {
       registerFileTypeWithoutNotification(pair.fileType, pair.matchers);
     }
-    for (StandardFileType pair : myStandardFileTypes.values()) {
-      registerReDetectedMappings(pair);
+    if (!myUnresolvedMappings.isEmpty()) {
+      for (StandardFileType pair : myStandardFileTypes.values()) {
+        registerReDetectedMappings(pair);
+      }
     }
     // Resolve unresolved mappings initialized before certain plugin initialized.
     for (final StandardFileType pair : myStandardFileTypes.values()) {
@@ -1297,14 +1299,23 @@ public class FileTypeManagerImpl extends FileTypeManagerEx implements NamedJDOME
     FileType fileType = pair.fileType;
     if (fileType == PlainTextFileType.INSTANCE) return;
     for (FileNameMatcher matcher : pair.matchers) {
-      String typeName = myUnresolvedMappings.get(matcher);
-      if (typeName != null && !typeName.equals(fileType.getName())) {
-        Trinity<String, String, Boolean> trinity = myUnresolvedRemovedMappings.get(matcher);
-        myRemovedMappings.put(matcher, Pair.create(fileType, trinity != null && trinity.third));
+      registerReDetectedMapping(fileType, matcher);
+      if (matcher instanceof ExtensionFileNameMatcher) {
+        // also check exact file name matcher
+        ExtensionFileNameMatcher extMatcher = (ExtensionFileNameMatcher)matcher;
+        registerReDetectedMapping(fileType, new ExactFileNameMatcher("." + extMatcher.getExtension()));
       }
     }
   }
 
+  private void registerReDetectedMapping(@NotNull FileType fileType, @NotNull FileNameMatcher matcher) {
+    String typeName = myUnresolvedMappings.get(matcher);
+    if (typeName != null && !typeName.equals(fileType.getName())) {
+      Trinity<String, String, Boolean> trinity = myUnresolvedRemovedMappings.get(matcher);
+      myRemovedMappings.put(matcher, Pair.create(fileType, trinity != null && trinity.third));
+    }
+  }
+
   Map<FileNameMatcher, Pair<FileType, Boolean>> getRemovedMappings() {
     return myRemovedMappings;
   }