public static void readSequentially()

in test-discovery/src/com/intellij/rt/coverage/data/api/TestDiscoveryProtocolUtil.java [34:90]


  public static void readSequentially(InputStream testDiscoveryDataStream,
                                      TestDiscoveryProtocolReader reader) throws IOException {
    DataInputStream input = new DataInputStream(testDiscoveryDataStream);

    boolean start = true;
    Integer version = null;
    while (true) {
      final int read = input.read();
      if (read == -1) {
        reader.debug("stream ended before finish marker received");
        input.close();
        return;
      }
      byte msgType = (byte) read;
      switch (msgType) {
        case TestDiscoveryProtocolDataListener.START_MARKER:
          byte v = input.readByte();
          version = (int) v;
          reader.testDiscoveryDataProcessingStarted(version);
          reader.debug("start marker, format version: " + version);
          break;
        case TestDiscoveryProtocolDataListener.FINISH_MARKER:
          reader.testDiscoveryDataProcessingFinished();
          reader.debug("finish marker");
          input.close();
          return;
        case TestDiscoveryProtocolDataListener.TEST_FINISHED_MARKER:
          reader.debug("test data received");
          assert version != null;
          readTestData(input, reader, version);
          break;
        case TestDiscoveryProtocolDataListener.NAMES_DICTIONARY_PART_MARKER:
          reader.debug("partial dictionary received");
          readDictionary(input, reader);
          break;
        case TestDiscoveryProtocolDataListener.METADATA_MARKER:
          reader.debug("metadata received");
          readMetadata(input, reader);
          break;
        case TestDiscoveryProtocolDataListener.CLASS_METADATA_MARKER:
          reader.debug("class metadata received");
          readClassMetadata(input, reader);
          break;
        case SingleTrFileDiscoveryProtocolDataListener.HEADER_START:
          final byte[] jtc = new byte[3];
          if (!start) throw new IllegalStateException("File header is not expected here");
          if (input.read(jtc) != 3) throw new IOException("Failed to read header fully");
          if (!Arrays.equals(jtc, SingleTrFileDiscoveryProtocolDataListener.HEADER_TAIL))
            reader.error("File header mismatch: I" + new String(jtc, "ASCII"));
          reader.debug("file header");
          break;
        default:
          reader.error(String.format("Unknown input: %2X", msgType));
      }
      start = false;
    }
  }