From af2ad448b73709ed8f38952ec93b211d6d0b10d7 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Mon, 10 Jun 2019 15:06:33 +0300 Subject: [PATCH] use partial stub re-serialization for prebuilt stub's merge GitOrigin-RevId: 1c6a9d92d58a02294a9ef9563b2089250e1cad6c --- .../intellij/psi/stubs/SerializedStubTree.java | 18 +++++++++++------- .../jetbrains/index/stubs/StubsGenerator.kt | 8 ++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/SerializedStubTree.java b/platform/lang-impl/src/com/intellij/psi/stubs/SerializedStubTree.java index 29cca1875206..cb2b93558ff4 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/SerializedStubTree.java +++ b/platform/lang-impl/src/com/intellij/psi/stubs/SerializedStubTree.java @@ -21,19 +21,15 @@ package com.intellij.psi.stubs; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.ThreadLocalCachedValue; +import com.intellij.openapi.util.io.BufferExposingByteArrayOutputStream; import com.intellij.psi.impl.DebugUtil; import com.intellij.util.CompressionUtil; -import com.intellij.util.io.DataInputOutputUtil; -import com.intellij.util.io.DigestUtil; -import com.intellij.util.io.PersistentHashMapValueStorage; -import com.intellij.util.io.UnsyncByteArrayInputStream; +import com.intellij.util.io.*; import one.util.streamex.IntStreamEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; +import java.io.*; import java.security.MessageDigest; import java.util.Map; @@ -82,6 +78,14 @@ public class SerializedStubTree { } } + @NotNull + public SerializedStubTree reSerialize(@NotNull SerializationManagerImpl currentSerializationManager, + @NotNull SerializationManagerImpl newSerializationManager) throws IOException { + BufferExposingByteArrayOutputStream outStub = new BufferExposingByteArrayOutputStream(); + currentSerializationManager.reSerialize(new ByteArrayInputStream(myBytes, 0, myLength), outStub, newSerializationManager); + return new SerializedStubTree(outStub.getInternalBuffer(), outStub.size(), null); + } + // willIndexStub is one time optimization hint, once can safely pass false @NotNull public Stub getStub(boolean willIndexStub) throws SerializerNotFoundException { diff --git a/tools/index-tools/src/org/jetbrains/index/stubs/StubsGenerator.kt b/tools/index-tools/src/org/jetbrains/index/stubs/StubsGenerator.kt index 8633a0689031..ddb70d31952f 100644 --- a/tools/index-tools/src/org/jetbrains/index/stubs/StubsGenerator.kt +++ b/tools/index-tools/src/org/jetbrains/index/stubs/StubsGenerator.kt @@ -114,18 +114,14 @@ fun mergeStubs(paths: List, stubsFilePath: String, stubsFileName: String count++ val value = fromStorage.get(key) - val stub = value.getStub(false, serializationManager) - // re-serialize stub tree to correctly enumerate strings in the new string enumerator - val bytes = BufferExposingByteArrayOutputStream() - newSerializationManager.serialize(stub, bytes) - - val newStubTree = SerializedStubTree(bytes.internalBuffer, bytes.size(), null) + val newStubTree = value.reSerialize(serializationManager, newSerializationManager) if (storage.containsMapping(key)) { if (newStubTree != storage.get(key)) { // TODO: why are they slightly different??? storage.get(key).getStub(false, newSerializationManager) + val stub = value.getStub(false, serializationManager) val bytes2 = BufferExposingByteArrayOutputStream() newSerializationManager.serialize(stub, bytes2)