package com.jetbrains.lang.dart.ide.index;
import com.intellij.util.io.DataExternalizer;
import com.intellij.util.io.DataInputOutputUtil;
import com.intellij.util.io.IOUtil;
import com.jetbrains.lang.dart.DartComponentType;
import org.jetbrains.annotations.NotNull;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class DartComponentInfoListExternalizer implements DataExternalizer<List<DartComponentInfo>> {
@Override
public void save(@NotNull final DataOutput out, @NotNull final List<DartComponentInfo> infos) throws IOException {
DataInputOutputUtil.writeINT(out, infos.size());
for (DartComponentInfo componentInfo : infos) {
final DartComponentType dartComponentType = componentInfo.getComponentType();
final int key = dartComponentType == null ? -1 : dartComponentType.getKey();
DataInputOutputUtil.writeINT(out, key);
final String libraryName = componentInfo.getLibraryName();
out.writeBoolean(libraryName != null);
if (libraryName != null) {
IOUtil.writeUTF(out, libraryName);
}
}
}
@Override
public List<DartComponentInfo> read(@NotNull DataInput in) throws IOException {
int size = DataInputOutputUtil.readINT(in);
if (size == 0) return Collections.emptyList();
List<DartComponentInfo> result = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
final int componentTypeKey = DataInputOutputUtil.readINT(in);
final boolean hasLibraryName = in.readBoolean();
final String libraryName = hasLibraryName ? IOUtil.readUTF(in) : null;
result.add(new DartComponentInfo(DartComponentType.valueOf(componentTypeKey), libraryName));
}
return result;
}
}