protected void writeClassMetadata()

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());
        }
      }
    }
  }