| Index: pkg/analyzer_cli/lib/src/message_grouper.dart
|
| diff --git a/pkg/analyzer_cli/lib/src/message_grouper.dart b/pkg/analyzer_cli/lib/src/message_grouper.dart
|
| deleted file mode 100644
|
| index 8696796bc19673334137d9931ed3dcd5a2880e4c..0000000000000000000000000000000000000000
|
| --- a/pkg/analyzer_cli/lib/src/message_grouper.dart
|
| +++ /dev/null
|
| @@ -1,112 +0,0 @@
|
| -// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -import 'dart:io';
|
| -import 'dart:typed_data';
|
| -
|
| -/// Groups stdin input into messages by interpreting it as
|
| -/// base-128 encoded lengths interleaved with raw data.
|
| -///
|
| -/// The base-128 encoding is in little-endian order, with the high bit set on
|
| -/// all bytes but the last. This was chosen since it's the same as the
|
| -/// base-128 encoding used by protobufs, so it allows a modest amount of code
|
| -/// reuse at the other end of the protocol.
|
| -///
|
| -/// Possible future improvements to consider (should a debugging need arise):
|
| -/// - Put a magic number at the beginning of the stream.
|
| -/// - Use a guard byte between messages to sanity check that the encoder and
|
| -/// decoder agree on the encoding of lengths.
|
| -class MessageGrouper {
|
| - final _state = new _MessageGrouperState();
|
| - final Stdin _stdin;
|
| -
|
| - MessageGrouper(this._stdin);
|
| -
|
| - /// Blocks until the next full message is received, and then returns it.
|
| - ///
|
| - /// Returns null at end of file.
|
| - List<int> get next {
|
| - var message;
|
| - while (message == null) {
|
| - var nextByte = _stdin.readByteSync();
|
| - if (nextByte == -1) return null;
|
| - message = _state.handleInput(nextByte);
|
| - }
|
| - return message;
|
| - }
|
| -}
|
| -
|
| -/// State held by the [MessageGrouper] while waiting for additional data to
|
| -/// arrive.
|
| -class _MessageGrouperState {
|
| - /// `true` means we are waiting to receive bytes of base-128 encoded length.
|
| - /// Some bytes of length may have been received already.
|
| - ///
|
| - /// `false` means we are waiting to receive more bytes of message data. Some
|
| - /// bytes of message data may have been received already.
|
| - bool waitingForLength = true;
|
| -
|
| - /// If [waitingForLength] is `true`, the decoded value of the length bytes
|
| - /// received so far (if any). If [waitingForLength] is `false`, the decoded
|
| - /// length that was most recently received.
|
| - int length = 0;
|
| -
|
| - /// If [waitingForLength] is `true`, the amount by which the next received
|
| - /// length byte must be left-shifted; otherwise undefined.
|
| - int lengthShift = 0;
|
| -
|
| - /// If [waitingForLength] is `false`, a [Uint8List] which is ready to receive
|
| - /// message data. Otherwise null.
|
| - Uint8List message;
|
| -
|
| - /// If [waitingForLength] is `false`, the number of message bytes that have
|
| - /// been received so far. Otherwise zero.
|
| - int numMessageBytesReceived;
|
| -
|
| - _MessageGrouperState() {
|
| - reset();
|
| - }
|
| -
|
| - /// Handle one byte at a time.
|
| - ///
|
| - /// Returns a [List<int>] of message bytes if [byte] was the last byte in a
|
| - /// message, otherwise returns [null].
|
| - List<int> handleInput(int byte) {
|
| - if (waitingForLength) {
|
| - length |= (byte & 0x7f) << lengthShift;
|
| - if ((byte & 0x80) == 0) {
|
| - waitingForLength = false;
|
| - message = new Uint8List(length);
|
| - if (length == 0) {
|
| - // There is no message data to wait for, so just go ahead and deliver the
|
| - // empty message.
|
| - var messageToReturn = message;
|
| - reset();
|
| - return messageToReturn;
|
| - }
|
| - } else {
|
| - lengthShift += 7;
|
| - }
|
| - } else {
|
| - message[numMessageBytesReceived] = byte;
|
| - numMessageBytesReceived++;
|
| - if (numMessageBytesReceived == length) {
|
| - var messageToReturn = message;
|
| - reset();
|
| - return messageToReturn;
|
| - }
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - /// Reset the state so that we are ready to receive the next base-128 encoded
|
| - /// length.
|
| - void reset() {
|
| - waitingForLength = true;
|
| - length = 0;
|
| - lengthShift = 0;
|
| - message = null;
|
| - numMessageBytesReceived = 0;
|
| - }
|
| -}
|
|
|