diff --git a/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeExtension.java b/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeExtension.java index f2898eb5f2fc..2547aa143a19 100644 --- a/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeExtension.java +++ b/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeExtension.java @@ -20,10 +20,13 @@ package com.intellij.openapi.fileTypes; import com.intellij.openapi.util.KeyedExtensionCollector; +import com.intellij.util.KeyedLazyInstance; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class FileTypeExtension extends KeyedExtensionCollector { public FileTypeExtension(@NonNls final String epName) { @@ -45,4 +48,13 @@ public class FileTypeExtension extends KeyedExtensionCollector { final List all = allForFileType(t); return all.isEmpty() ? null : all.get(0); } + + public Map getAllRegisteredExtensions() { + List> extensions = getExtensions(); + Map result = new HashMap<>(); + for (KeyedLazyInstance extension : extensions) { + result.put(FileTypeRegistry.getInstance().findFileTypeByName(extension.getKey()), extension.getInstance()); + } + return result; + } } \ No newline at end of file diff --git a/platform/editor-ui-ex/src/com/intellij/psi/impl/cache/impl/todo/TodoIndex.java b/platform/editor-ui-ex/src/com/intellij/psi/impl/cache/impl/todo/TodoIndex.java index 2d5618992a81..7aa1d0996ac6 100644 --- a/platform/editor-ui-ex/src/com/intellij/psi/impl/cache/impl/todo/TodoIndex.java +++ b/platform/editor-ui-ex/src/com/intellij/psi/impl/cache/impl/todo/TodoIndex.java @@ -5,7 +5,6 @@ package com.intellij.psi.impl.cache.impl.todo; import com.intellij.lang.LanguageParserDefinitions; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.FileTypeRegistry; import com.intellij.openapi.fileTypes.LanguageFileType; import com.intellij.openapi.fileTypes.impl.CustomSyntaxTableFileType; import com.intellij.openapi.util.Comparing; @@ -24,9 +23,7 @@ import java.beans.PropertyChangeListener; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -import java.util.Arrays; -import java.util.Collections; -import java.util.Map; +import java.util.*; /** * @author Eugene Zhuravlev @@ -106,12 +103,12 @@ public final class TodoIndex extends FileBasedIndexExtension Comparing.compare(o1.getName(), o2.getName())); + Map> extensions = TodoIndexers.INSTANCE.getAllRegisteredExtensions(); + List types = new ArrayList<>(extensions.keySet()); + types.sort((o1, o2) -> Comparing.compare(o1.getName(), o2.getName())); for (FileType fileType : types) { - DataIndexer indexer = TodoIndexers.INSTANCE.forFileType(fileType); - if (indexer == null) continue; + DataIndexer indexer = extensions.get(fileType); int versionFromIndexer = indexer instanceof VersionedTodoIndexer ? (((VersionedTodoIndexer)indexer).getVersion()) : 0xFF; version = version * 31 + (versionFromIndexer ^ indexer.getClass().getName().hashCode());