in sources/java-incremental-compilation/jvm-inc-builder/src/com/intellij/tools/build/bazel/jvmIncBuilder/impl/graph/PersistentMVStoreMultiMaplet.java [29:83]
public PersistentMVStoreMultiMaplet(MVStore store, String mapName, DataType<K> keyType, DataType<V> valueType, Supplier<? extends C> collectionFactory, Function<Integer, C[]> collectionArrayFactory) {
myCollectionFactory = collectionFactory;
try {
C col = collectionFactory.get();
//noinspection unchecked
myEmptyCollection = col instanceof List? (C)Collections.emptyList() : col instanceof Set? (C)Collections.emptySet() : col;
if (col instanceof Set) {
myAppendDecisionMaker = new AppendSetDecisionMaker();
myRemoveDecisionMaker = new RemoveSetDecisionMaker();
}
else {
myAppendDecisionMaker = new AppendDecisionMaker();
myRemoveDecisionMaker = new RemoveDecisionMaker();
}
MVMap.Builder<K, C> mapBuilder = new MVMap.Builder<K, C>().keyType(keyType).valueType(new BasicDataType<>() {
@Override
public boolean isMemoryEstimationAllowed() {
return false;
}
@Override
public int getMemory(C obj) {
return 0;
}
@Override
public void write(WriteBuffer buff, C col) {
buff.putInt(col.size());
for (V value : col) {
valueType.write(buff, value);
}
}
@Override
public C read(ByteBuffer buff) {
C acc = myCollectionFactory.get();
int size = buff.getInt();
while (size-- > 0) {
acc.add(valueType.read(buff));
}
return acc;
}
@Override
public C[] createStorage(int size) {
//noinspection unchecked
return collectionArrayFactory.apply(size);
}
});
myMap = store.openMap(mapName, mapBuilder);
}
catch (Throwable e) {
throw new RuntimeException(e);
}
}