diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndex.java b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndex.java index fd66ad6dda5a..e8fc37c9fe09 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndex.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndex.java @@ -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 impl } }; - private final DataIndexer myIndexer = new DataIndexer() { - @Override - @NotNull - public Map 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 impl @NotNull @Override public DataIndexer getIndexer() { - return myIndexer; + return new CompositeDataIndexer() { + @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 getSubIndexerVersionDescriptor() { + return EnumeratorStringDescriptor.INSTANCE; + } + + @NotNull + @Override + public Map map(@NotNull FileContent inputData, @NotNull IdIndexer indexer) { + return indexer.map(inputData); + } + }; } @NotNull diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexImpl.java index e8981bee1d29..2066acf95eaa 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexImpl.java @@ -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; }