public Event decode()

in maven-surefire-common/src/main/java/org/apache/maven/surefire/stream/EventDecoder.java [127:184]


    public Event decode(@Nonnull Memento memento) throws IOException {
        try {
            ForkedProcessEventType eventType = readMessageType(memento);
            if (eventType == null) {
                throw new MalformedFrameException(
                        memento.getLine().getPositionByteBuffer(),
                        memento.getByteBuffer().position());
            }

            for (SegmentType segmentType : nextSegmentType(eventType)) {
                switch (segmentType) {
                    case RUN_MODE:
                        memento.getData().add(RUN_MODES.get(readSegment(memento)));
                        break;
                    case TEST_RUN_ID:
                        memento.getData().add(readLong(memento));
                        break;
                    case STRING_ENCODING:
                        memento.setCharset(readCharset(memento));
                        break;
                    case DATA_STRING:
                        memento.getData().add(readString(memento));
                        break;
                    case DATA_INTEGER:
                        memento.getData().add(readInteger(memento));
                        break;
                    case END_OF_FRAME:
                        memento.getLine()
                                .setPositionByteBuffer(memento.getByteBuffer().position());
                        memento.getLine().clear();
                        return toMessage(eventType, memento);
                    default:
                        memento.getLine().setPositionByteBuffer(NO_POSITION);
                        getArguments()
                                .dumpStreamText(
                                        "Unknown enum (" + SegmentType.class.getSimpleName() + ") " + segmentType);
                }
            }
        } catch (MalformedFrameException e) {
            if (e.hasValidPositions()) {
                int length = e.readTo() - e.readFrom();
                memento.getLine().write(memento.getByteBuffer(), e.readFrom(), length);
            }
            return null;
        } catch (RuntimeException e) {
            getArguments().dumpStreamException(e);
            return null;
        } catch (IOException e) {
            if (!(e.getCause() instanceof InterruptedException)) {
                printRemainingStream(memento);
            }
            throw e;
        } finally {
            memento.reset();
        }

        throw new IOException("unreachable statement");
    }