From a33abd921b3d4c7321ab73ff324aba66fa2fa623 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Thu, 3 Oct 2019 15:48:56 +0300 Subject: [PATCH] get rid of guava api in stub indexes update GitOrigin-RevId: ff3a67dde9c3fbe13b70d3d778508fbfb4c02b68 --- .../com/intellij/psi/stubs/StubIndexImpl.java | 37 +++++++++++++++---- .../util/indexing/UpdatableIndex.java | 3 +- .../util/indexing/VfsAwareMapReduceIndex.java | 1 + .../indexing/hash/FileContentHashIndex.java | 7 ++-- .../indexing/hash/MergedInvertedIndex.java | 3 +- .../indexing/impl/AbstractUpdateData.java | 26 +++++++++++++ .../util/indexing/impl/MapReduceIndex.java | 5 +-- .../util/indexing/impl/UpdateData.java | 28 ++++++-------- 8 files changed, 77 insertions(+), 33 deletions(-) create mode 100644 platform/util/src/com/intellij/util/indexing/impl/AbstractUpdateData.java diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java b/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java index e0e967ddc822..58eeaffbb162 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/StubIndexImpl.java @@ -13,6 +13,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.impl.ExtensionPointImpl; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.ModificationTracker; import com.intellij.openapi.util.ThrowableComputable; import com.intellij.openapi.util.io.BufferExposingByteArrayOutputStream; @@ -35,9 +36,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.FactoryMap; import com.intellij.util.indexing.*; import com.intellij.util.indexing.hash.MergedInvertedIndex; -import com.intellij.util.indexing.impl.InputDataDiffBuilder; -import com.intellij.util.indexing.impl.MapInputDataDiffBuilder; -import com.intellij.util.indexing.impl.UpdateData; +import com.intellij.util.indexing.impl.*; import com.intellij.util.indexing.provided.ProvidedIndexExtension; import com.intellij.util.io.*; import com.intellij.util.io.DataOutputStream; @@ -682,13 +681,35 @@ public final class StubIndexImpl extends StubIndex implements PersistentStateCom try { final UpdatableIndex index = getIndex(key); if (index == null) return; + index.updateWithMap(new AbstractUpdateData(fileId) { + @Override + protected boolean iterateKeys(@NotNull KeyValueUpdateProcessor addProcessor, + @NotNull KeyValueUpdateProcessor updateProcessor, + @NotNull RemovedKeyProcessor removeProcessor) throws StorageException { + boolean modified = false; - Map oldKeys = Maps.asMap(oldInputData.keySet(), x -> null); - Map newKeys = Maps.asMap(newInputData.keySet(), x -> null); + for (K oldKey : oldInputData.keySet()) { + if (!newInputData.containsKey(oldKey)) { + removeProcessor.process(oldKey, fileId); + if (!modified) modified = true; + } + } - final ThrowableComputable, IOException> - oldMapGetter = () -> new MapInputDataDiffBuilder<>(fileId, oldKeys); - index.updateWithMap(new UpdateData(fileId, newKeys, oldMapGetter, (IndexId)key, null)); + for (K oldKey : newInputData.keySet()) { + if (!oldInputData.containsKey(oldKey)) { + addProcessor.process(oldKey, null, fileId); + if (!modified) modified = true; + } + } + + return modified; + } + + @Override + public boolean newDataIsEmpty() { + return newInputData.isEmpty(); + } + }); } catch (StorageException e) { LOG.info(e); diff --git a/platform/lang-impl/src/com/intellij/util/indexing/UpdatableIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/UpdatableIndex.java index 70a173848af1..eb3b715691ab 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/UpdatableIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/UpdatableIndex.java @@ -19,6 +19,7 @@ package com.intellij.util.indexing; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Processor; +import com.intellij.util.indexing.impl.AbstractUpdateData; import com.intellij.util.indexing.impl.UpdateData; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -62,7 +63,7 @@ public interface UpdatableIndex extends InvertedIndex getExtension(); - void updateWithMap(@NotNull UpdateData updateData) throws StorageException; + void updateWithMap(@NotNull AbstractUpdateData updateData) throws StorageException; void setBufferingEnabled(boolean enabled); diff --git a/platform/lang-impl/src/com/intellij/util/indexing/VfsAwareMapReduceIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/VfsAwareMapReduceIndex.java index 2ea82b2319b0..163b76a73e98 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/VfsAwareMapReduceIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/VfsAwareMapReduceIndex.java @@ -225,6 +225,7 @@ public class VfsAwareMapReduceIndex extends MapReduceIndex createIndexUpdateComputation(@NotNull UpdateData updateData) { - return new HashIndexUpdateComputable(super.createIndexUpdateComputation(updateData), updateData.getNewData().isEmpty()); + protected Computable createIndexUpdateComputation(@NotNull AbstractUpdateData updateData) { + return new HashIndexUpdateComputable(super.createIndexUpdateComputation(updateData), updateData.newDataIsEmpty()); } public int getHashId(int fileId) throws StorageException { diff --git a/platform/lang-impl/src/com/intellij/util/indexing/hash/MergedInvertedIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/hash/MergedInvertedIndex.java index a244ecbe7e55..d55222cef5df 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/hash/MergedInvertedIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/hash/MergedInvertedIndex.java @@ -6,6 +6,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Processor; import com.intellij.util.indexing.*; +import com.intellij.util.indexing.impl.AbstractUpdateData; import com.intellij.util.indexing.impl.UpdateData; import com.intellij.util.indexing.provided.ProvidedIndexExtension; import org.jetbrains.annotations.NotNull; @@ -64,7 +65,7 @@ public class MergedInvertedIndex implements UpdatableIndex updateData) throws StorageException { + public void updateWithMap(@NotNull AbstractUpdateData updateData) throws StorageException { int fileId = updateData.getInputId(); if (myHashIndex.getHashId(fileId) != 0) { return; diff --git a/platform/util/src/com/intellij/util/indexing/impl/AbstractUpdateData.java b/platform/util/src/com/intellij/util/indexing/impl/AbstractUpdateData.java new file mode 100644 index 000000000000..e09566b99748 --- /dev/null +++ b/platform/util/src/com/intellij/util/indexing/impl/AbstractUpdateData.java @@ -0,0 +1,26 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.util.indexing.impl; + +import com.intellij.util.indexing.StorageException; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; + +public abstract class AbstractUpdateData { + private final int myInputId; + + protected AbstractUpdateData(int id) {myInputId = id;} + + protected abstract boolean iterateKeys(@NotNull KeyValueUpdateProcessor addProcessor, + @NotNull KeyValueUpdateProcessor updateProcessor, + @NotNull RemovedKeyProcessor removeProcessor) throws StorageException; + + public abstract boolean newDataIsEmpty(); + + public int getInputId() { + return myInputId; + } + + protected void updateForwardIndex() throws IOException { } + +} diff --git a/platform/util/src/com/intellij/util/indexing/impl/MapReduceIndex.java b/platform/util/src/com/intellij/util/indexing/impl/MapReduceIndex.java index 80eae3a0bad4..7b645f5b1afe 100644 --- a/platform/util/src/com/intellij/util/indexing/impl/MapReduceIndex.java +++ b/platform/util/src/com/intellij/util/indexing/impl/MapReduceIndex.java @@ -30,7 +30,6 @@ import com.intellij.util.indexing.impl.forward.IntForwardIndex; import com.intellij.util.indexing.impl.forward.IntForwardIndexAccessor; import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.DataOutputStream; -import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -241,7 +240,7 @@ public abstract class MapReduceIndex implements InvertedIndex< } @NotNull - protected Computable createIndexUpdateComputation(@NotNull UpdateData updateData) { + protected Computable createIndexUpdateComputation(@NotNull AbstractUpdateData updateData) { return () -> { try { updateWithMap(updateData); @@ -346,7 +345,7 @@ public abstract class MapReduceIndex implements InvertedIndex< } }; - public void updateWithMap(@NotNull UpdateData updateData) throws StorageException { + public void updateWithMap(@NotNull AbstractUpdateData updateData) throws StorageException { getWriteLock().lock(); try { IndexId oldIndexId = DebugAssertions.DEBUG_INDEX_ID.get(); diff --git a/platform/util/src/com/intellij/util/indexing/impl/UpdateData.java b/platform/util/src/com/intellij/util/indexing/impl/UpdateData.java index 2e1bdbf24a65..95bb7c1d6fd1 100644 --- a/platform/util/src/com/intellij/util/indexing/impl/UpdateData.java +++ b/platform/util/src/com/intellij/util/indexing/impl/UpdateData.java @@ -27,8 +27,7 @@ import java.io.IOException; import java.util.Map; @ApiStatus.Experimental -public class UpdateData { - private final int myInputId; +public class UpdateData extends AbstractUpdateData { private final Map myNewData; private final ThrowableComputable, IOException> myCurrentDataEvaluator; private final IndexId myIndexId; @@ -39,16 +38,16 @@ public class UpdateData { @NotNull ThrowableComputable, IOException> currentDataEvaluator, @NotNull IndexId indexId, @Nullable ThrowableRunnable forwardIndexUpdate) { - myInputId = inputId; + super(inputId); myNewData = newData; myCurrentDataEvaluator = currentDataEvaluator; myIndexId = indexId; myForwardIndexUpdate = forwardIndexUpdate; } - boolean iterateKeys(@NotNull KeyValueUpdateProcessor addProcessor, - @NotNull KeyValueUpdateProcessor updateProcessor, - @NotNull RemovedKeyProcessor removeProcessor) throws StorageException { + protected boolean iterateKeys(@NotNull KeyValueUpdateProcessor addProcessor, + @NotNull KeyValueUpdateProcessor updateProcessor, + @NotNull RemovedKeyProcessor removeProcessor) throws StorageException { final InputDataDiffBuilder currentData; try { currentData = getCurrentDataEvaluator().compute(); @@ -59,26 +58,23 @@ public class UpdateData { return currentData.differentiate(myNewData, addProcessor, updateProcessor, removeProcessor); } + @Override + public boolean newDataIsEmpty() { + return myNewData.isEmpty(); + } + @NotNull protected ThrowableComputable, IOException> getCurrentDataEvaluator() { return myCurrentDataEvaluator; } - public int getInputId() { - return myInputId; - } - @NotNull public Map getNewData() { return myNewData; } - @NotNull - public IndexId getIndexId() { - return myIndexId; - } - - void updateForwardIndex() throws IOException { + @Override + protected void updateForwardIndex() throws IOException { if (myForwardIndexUpdate != null) { myForwardIndexUpdate.run(); }