use partial stub re-serialization for prebuilt stub's merge

GitOrigin-RevId: 1c6a9d92d58a02294a9ef9563b2089250e1cad6c
This commit is contained in:
Dmitry Batkovich
2019-06-12 14:14:35 +03:00
committed by intellij-monorepo-bot
parent 18cd279232
commit af2ad448b7
2 changed files with 13 additions and 13 deletions
@@ -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 {
@@ -114,18 +114,14 @@ fun mergeStubs(paths: List<String>, 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)