idindex with composite index

GitOrigin-RevId: 96a69ed9354aa27a91b9da6e76a2c7109f18f545
This commit is contained in:
Dmitry Batkovich
2019-12-17 14:06:19 +00:00
committed by intellij-monorepo-bot
parent 825d617f01
commit 9ccf528c27
2 changed files with 37 additions and 21 deletions
@@ -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
@@ -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;
}