mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
API for retrieving all registered file type extensions without instantiating all file types
GitOrigin-RevId: a7a5e660fdf357304a781bee42ec958f0db5fc72
This commit is contained in:
committed by
intellij-monorepo-bot
parent
66488e1a18
commit
769331b055
@@ -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<T> extends KeyedExtensionCollector<T, FileType> {
|
||||
public FileTypeExtension(@NonNls final String epName) {
|
||||
@@ -45,4 +48,13 @@ public class FileTypeExtension<T> extends KeyedExtensionCollector<T, FileType> {
|
||||
final List<T> all = allForFileType(t);
|
||||
return all.isEmpty() ? null : all.get(0);
|
||||
}
|
||||
|
||||
public Map<FileType, T> getAllRegisteredExtensions() {
|
||||
List<KeyedLazyInstance<T>> extensions = getExtensions();
|
||||
Map<FileType, T> result = new HashMap<>();
|
||||
for (KeyedLazyInstance<T> extension : extensions) {
|
||||
result.put(FileTypeRegistry.getInstance().findFileTypeByName(extension.getKey()), extension.getInstance());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+5
-8
@@ -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<TodoIndexEntry, Int
|
||||
@Override
|
||||
public int getVersion() {
|
||||
int version = 11;
|
||||
FileType[] types = FileTypeRegistry.getInstance().getRegisteredFileTypes();
|
||||
Arrays.sort(types, (o1, o2) -> Comparing.compare(o1.getName(), o2.getName()));
|
||||
Map<FileType, DataIndexer<TodoIndexEntry, Integer, FileContent>> extensions = TodoIndexers.INSTANCE.getAllRegisteredExtensions();
|
||||
List<FileType> types = new ArrayList<>(extensions.keySet());
|
||||
types.sort((o1, o2) -> Comparing.compare(o1.getName(), o2.getName()));
|
||||
|
||||
for (FileType fileType : types) {
|
||||
DataIndexer<TodoIndexEntry, Integer, FileContent> indexer = TodoIndexers.INSTANCE.forFileType(fileType);
|
||||
if (indexer == null) continue;
|
||||
DataIndexer<TodoIndexEntry, Integer, FileContent> indexer = extensions.get(fileType);
|
||||
|
||||
int versionFromIndexer = indexer instanceof VersionedTodoIndexer ? (((VersionedTodoIndexer)indexer).getVersion()) : 0xFF;
|
||||
version = version * 31 + (versionFromIndexer ^ indexer.getClass().getName().hashCode());
|
||||
|
||||
Reference in New Issue
Block a user