mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
idindex with composite index
GitOrigin-RevId: 96a69ed9354aa27a91b9da6e76a2c7109f18f545
This commit is contained in:
committed by
intellij-monorepo-bot
parent
825d617f01
commit
9ccf528c27
+27
-16
@@ -12,18 +12,18 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.UsageSearchContext;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.util.SystemProperties;
|
||||
import com.intellij.util.indexing.*;
|
||||
import com.intellij.util.io.DataExternalizer;
|
||||
import com.intellij.util.io.EnumeratorStringDescriptor;
|
||||
import com.intellij.util.io.InlineKeyDescriptor;
|
||||
import com.intellij.util.io.KeyDescriptor;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.DataInput;
|
||||
import java.io.DataOutput;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -58,19 +58,6 @@ public class IdIndex extends FileBasedIndexExtension<IdIndexEntry, Integer> impl
|
||||
}
|
||||
};
|
||||
|
||||
private final DataIndexer<IdIndexEntry, Integer, FileContent> myIndexer = new DataIndexer<IdIndexEntry, Integer, FileContent>() {
|
||||
@Override
|
||||
@NotNull
|
||||
public Map<IdIndexEntry, Integer> map(@NotNull final FileContent inputData) {
|
||||
final IdIndexer indexer = IdTableBuilding.getFileTypeIndexer(inputData.getFileType());
|
||||
if (indexer != null) {
|
||||
return indexer.map(inputData);
|
||||
}
|
||||
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public int getVersion() {
|
||||
return 16 + (FileBasedIndex.ourSnapshotMappingsEnabled ? 0xFF:0); // TODO: version should enumerate all word scanner versions and build version upon that set
|
||||
@@ -90,7 +77,31 @@ public class IdIndex extends FileBasedIndexExtension<IdIndexEntry, Integer> impl
|
||||
@NotNull
|
||||
@Override
|
||||
public DataIndexer<IdIndexEntry, Integer, FileContent> getIndexer() {
|
||||
return myIndexer;
|
||||
return new CompositeDataIndexer<IdIndexEntry, Integer, IdIndexer, String>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public IdIndexer calculateSubIndexer(@NotNull IndexedFile file) {
|
||||
return IdTableBuilding.getFileTypeIndexer(file.getFileType());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getSubIndexerVersion(@NotNull IdIndexer indexer) {
|
||||
return indexer.getClass().getName() + ":" + indexer.getVersion();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public KeyDescriptor<String> getSubIndexerVersionDescriptor() {
|
||||
return EnumeratorStringDescriptor.INSTANCE;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Map<IdIndexEntry, Integer> map(@NotNull FileContent inputData, @NotNull IdIndexer indexer) {
|
||||
return indexer.map(inputData);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+10
-5
@@ -5,6 +5,7 @@ import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.FileTypeRegistry;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.util.indexing.CustomInputsIndexFileBasedIndexExtension;
|
||||
import com.intellij.util.indexing.InvertedIndex;
|
||||
import com.intellij.util.io.DataExternalizer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -18,12 +19,16 @@ public class IdIndexImpl extends IdIndex implements CustomInputsIndexFileBasedIn
|
||||
Arrays.sort(types, (o1, o2) -> Comparing.compare(o1.getName(), o2.getName()));
|
||||
|
||||
int version = super.getVersion();
|
||||
for(FileType fileType:types) {
|
||||
if (!isIndexable(fileType)) continue;
|
||||
IdIndexer indexer = IdTableBuilding.getFileTypeIndexer(fileType);
|
||||
if (indexer == null) continue;
|
||||
version = version * 31 + (indexer.getVersion() ^ indexer.getClass().getName().hashCode());
|
||||
|
||||
if (!InvertedIndex.ARE_COMPOSITE_INDEXERS_ENABLED) {
|
||||
for(FileType fileType:types) {
|
||||
if (!isIndexable(fileType)) continue;
|
||||
IdIndexer indexer = IdTableBuilding.getFileTypeIndexer(fileType);
|
||||
if (indexer == null) continue;
|
||||
version = version * 31 + (indexer.getVersion() ^ indexer.getClass().getName().hashCode());
|
||||
}
|
||||
}
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user