in test-discovery/src/com/intellij/rt/coverage/data/TestDiscoveryProtocolDataListener.java [199:248]
protected void writeClassMetadata(DataOutput os, List<ClassMetadata> metadata) throws IOException {
if (metadata == null || metadata.isEmpty()) return;
if (myVersion < 2) return;
final NameEnumerator.Incremental enumerator = getNameEnumerator();
// Prepare data for enumerator
for (ClassMetadata data : metadata) {
enumerator.enumerate(data.getFqn());
if (data.getFiles() != null) for (String file : data.getFiles()) {
enumerator.enumerate(file);
}
if (data.getMethods() != null) for (String method : data.getMethods().keySet()) {
enumerator.enumerate(method);
}
}
writeDictionaryIncrementIfNeeded(os);
final ArrayList<ClassMetadata> list = new ArrayList<ClassMetadata>(metadata);
os.writeByte(CLASS_METADATA_MARKER);
CoverageIOUtil.writeINT(os, list.size());
for (ClassMetadata data : list) {
// Class ID
CoverageIOUtil.writeINT(os, enumerator.enumerate(data.getFqn()));
// Files array
final List<String> files = data.getFiles();
if (files == null) {
CoverageIOUtil.writeINT(os, 0);
} else {
CoverageIOUtil.writeINT(os, files.size());
for (String file : files) {
CoverageIOUtil.writeINT(os, enumerator.enumerate(file));
}
}
// Methods array
final Map<String, byte[]> methods = data.getMethods();
if (methods == null) {
CoverageIOUtil.writeINT(os, 0);
} else {
CoverageIOUtil.writeINT(os, methods.size());
for (Map.Entry<String, byte[]> method : methods.entrySet()) {
CoverageIOUtil.writeINT(os, enumerator.enumerate(method.getKey()));
CoverageIOUtil.writeINT(os, method.getValue().length);
os.write(method.getValue());
}
}
}
}