| Index: pkg/dev_compiler/tool/input_sdk/lib/async/stream_transformers.dart
|
| diff --git a/pkg/dev_compiler/tool/input_sdk/lib/async/stream_transformers.dart b/pkg/dev_compiler/tool/input_sdk/lib/async/stream_transformers.dart
|
| deleted file mode 100644
|
| index e0982da4260ec621621a82b526aa21dac87f2be4..0000000000000000000000000000000000000000
|
| --- a/pkg/dev_compiler/tool/input_sdk/lib/async/stream_transformers.dart
|
| +++ /dev/null
|
| @@ -1,313 +0,0 @@
|
| -// Copyright (c) 2013, 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.
|
| -
|
| -part of dart.async;
|
| -
|
| -/**
|
| - * Wraps an [_EventSink] so it exposes only the [EventSink] interface.
|
| - */
|
| -class _EventSinkWrapper<T> implements EventSink<T> {
|
| - _EventSink _sink;
|
| - _EventSinkWrapper(this._sink);
|
| -
|
| - void add(T data) { _sink._add(data); }
|
| - void addError(error, [StackTrace stackTrace]) {
|
| - _sink._addError(error, stackTrace);
|
| - }
|
| - void close() { _sink._close(); }
|
| -}
|
| -
|
| -/**
|
| - * A StreamSubscription that pipes data through a sink.
|
| - *
|
| - * The constructor of this class takes a [_SinkMapper] which maps from
|
| - * [EventSink] to [EventSink]. The input to the mapper is the output of
|
| - * the transformation. The returned sink is the transformation's input.
|
| - */
|
| -class _SinkTransformerStreamSubscription<S, T>
|
| - extends _BufferingStreamSubscription<T> {
|
| - /// The transformer's input sink.
|
| - EventSink<S> _transformerSink;
|
| -
|
| - /// The subscription to the input stream.
|
| - StreamSubscription<S> _subscription;
|
| -
|
| - _SinkTransformerStreamSubscription(Stream<S> source,
|
| - _SinkMapper<S, T> mapper,
|
| - void onData(T data),
|
| - Function onError,
|
| - void onDone(),
|
| - bool cancelOnError)
|
| - // We set the adapter's target only when the user is allowed to send data.
|
| - : super(onData, onError, onDone, cancelOnError) {
|
| - _EventSinkWrapper<T> eventSink = new _EventSinkWrapper<T>(this);
|
| - _transformerSink = mapper(eventSink);
|
| - _subscription = source.listen(_handleData,
|
| - onError: _handleError,
|
| - onDone: _handleDone);
|
| - }
|
| -
|
| - /** Whether this subscription is still subscribed to its source. */
|
| - bool get _isSubscribed => _subscription != null;
|
| -
|
| - // _EventSink interface.
|
| -
|
| - /**
|
| - * Adds an event to this subscriptions.
|
| - *
|
| - * Contrary to normal [_BufferingStreamSubscription]s we may receive
|
| - * events when the stream is already closed. Report them as state
|
| - * error.
|
| - */
|
| - void _add(T data) {
|
| - if (_isClosed) {
|
| - throw new StateError("Stream is already closed");
|
| - }
|
| - super._add(data);
|
| - }
|
| -
|
| - /**
|
| - * Adds an error event to this subscriptions.
|
| - *
|
| - * Contrary to normal [_BufferingStreamSubscription]s we may receive
|
| - * events when the stream is already closed. Report them as state
|
| - * error.
|
| - */
|
| - void _addError(Object error, StackTrace stackTrace) {
|
| - if (_isClosed) {
|
| - throw new StateError("Stream is already closed");
|
| - }
|
| - super._addError(error, stackTrace);
|
| - }
|
| -
|
| - /**
|
| - * Adds a close event to this subscriptions.
|
| - *
|
| - * Contrary to normal [_BufferingStreamSubscription]s we may receive
|
| - * events when the stream is already closed. Report them as state
|
| - * error.
|
| - */
|
| - void _close() {
|
| - if (_isClosed) {
|
| - throw new StateError("Stream is already closed");
|
| - }
|
| - super._close();
|
| - }
|
| -
|
| - // _BufferingStreamSubscription hooks.
|
| -
|
| - void _onPause() {
|
| - if (_isSubscribed) _subscription.pause();
|
| - }
|
| -
|
| - void _onResume() {
|
| - if (_isSubscribed) _subscription.resume();
|
| - }
|
| -
|
| - Future _onCancel() {
|
| - if (_isSubscribed) {
|
| - StreamSubscription subscription = _subscription;
|
| - _subscription = null;
|
| - subscription.cancel();
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - void _handleData(S data) {
|
| - try {
|
| - _transformerSink.add(data);
|
| - } catch (e, s) {
|
| - _addError(e, s);
|
| - }
|
| - }
|
| -
|
| - void _handleError(error, [stackTrace]) {
|
| - try {
|
| - _transformerSink.addError(error, stackTrace);
|
| - } catch (e, s) {
|
| - if (identical(e, error)) {
|
| - _addError(error, stackTrace);
|
| - } else {
|
| - _addError(e, s);
|
| - }
|
| - }
|
| - }
|
| -
|
| - void _handleDone() {
|
| - try {
|
| - _subscription = null;
|
| - _transformerSink.close();
|
| - } catch (e, s) {
|
| - _addError(e, s);
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| -typedef EventSink<S> _SinkMapper<S, T>(EventSink<T> output);
|
| -
|
| -/**
|
| - * A StreamTransformer for Sink-mappers.
|
| - *
|
| - * A Sink-mapper takes an [EventSink] (its output) and returns another
|
| - * EventSink (its input).
|
| - *
|
| - * Note that this class can be `const`.
|
| - */
|
| -class _StreamSinkTransformer<S, T> implements StreamTransformer<S, T> {
|
| - final _SinkMapper<S, T> _sinkMapper;
|
| - const _StreamSinkTransformer(this._sinkMapper);
|
| -
|
| - Stream<T> bind(Stream<S> stream)
|
| - => new _BoundSinkStream<S, T>(stream, _sinkMapper);
|
| -}
|
| -
|
| -/**
|
| - * The result of binding a StreamTransformer for Sink-mappers.
|
| - *
|
| - * It contains the bound Stream and the sink-mapper. Only when the user starts
|
| - * listening to this stream is the sink-mapper invoked. The result is used
|
| - * to create a StreamSubscription that transforms events.
|
| - */
|
| -class _BoundSinkStream<S, T> extends Stream<T> {
|
| - final _SinkMapper<S, T> _sinkMapper;
|
| - final Stream<S> _stream;
|
| -
|
| - bool get isBroadcast => _stream.isBroadcast;
|
| -
|
| - _BoundSinkStream(this._stream, this._sinkMapper);
|
| -
|
| - StreamSubscription<T> listen(void onData(T event),
|
| - { Function onError,
|
| - void onDone(),
|
| - bool cancelOnError }) {
|
| - cancelOnError = identical(true, cancelOnError);
|
| - StreamSubscription<T> subscription =
|
| - new _SinkTransformerStreamSubscription<S, T>(
|
| - _stream, _sinkMapper, onData, onError, onDone, cancelOnError);
|
| - return subscription;
|
| - }
|
| -}
|
| -
|
| -/// Data-handler coming from [StreamTransformer.fromHandlers].
|
| -typedef void _TransformDataHandler<S, T>(S data, EventSink<T> sink);
|
| -/// Error-handler coming from [StreamTransformer.fromHandlers].
|
| -typedef void _TransformErrorHandler<T>(
|
| - Object error, StackTrace stackTrace, EventSink<T> sink);
|
| -/// Done-handler coming from [StreamTransformer.fromHandlers].
|
| -typedef void _TransformDoneHandler<T>(EventSink<T> sink);
|
| -
|
| -/**
|
| - * Wraps handlers (from [StreamTransformer.fromHandlers]) into an `EventSink`.
|
| - *
|
| - * This way we can reuse the code from [_StreamSinkTransformer].
|
| - */
|
| -class _HandlerEventSink<S, T> implements EventSink<S> {
|
| - final _TransformDataHandler<S, T> _handleData;
|
| - final _TransformErrorHandler<T> _handleError;
|
| - final _TransformDoneHandler<T> _handleDone;
|
| -
|
| - /// The output sink where the handlers should send their data into.
|
| - final EventSink<T> _sink;
|
| -
|
| - _HandlerEventSink(this._handleData, this._handleError, this._handleDone,
|
| - this._sink);
|
| -
|
| - void add(S data) { _handleData(data, _sink); }
|
| - void addError(Object error, [StackTrace stackTrace]) {
|
| - _handleError(error, stackTrace, _sink);
|
| - }
|
| - void close() { _handleDone(_sink); }
|
| -}
|
| -
|
| -/**
|
| - * A StreamTransformer that transformers events with the given handlers.
|
| - *
|
| - * Note that this transformer can only be used once.
|
| - */
|
| -class _StreamHandlerTransformer<S, T> extends _StreamSinkTransformer<S, T> {
|
| -
|
| - _StreamHandlerTransformer({
|
| - void handleData(S data, EventSink<T> sink),
|
| - void handleError(Object error, StackTrace stackTrace, EventSink<T> sink),
|
| - void handleDone(EventSink<T> sink)})
|
| - : super((EventSink<T> outputSink) {
|
| - if (handleData == null) handleData = _defaultHandleData;
|
| - if (handleError == null) handleError = _defaultHandleError;
|
| - if (handleDone == null) handleDone = _defaultHandleDone;
|
| - return new _HandlerEventSink<S, T>(
|
| - handleData, handleError, handleDone, outputSink);
|
| - });
|
| -
|
| - Stream<T> bind(Stream<S> stream) {
|
| - return super.bind(stream);
|
| - }
|
| -
|
| - /** Default data handler forwards all data. */
|
| - static void _defaultHandleData(var data, EventSink sink) {
|
| - sink.add(data);
|
| - }
|
| -
|
| - /** Default error handler forwards all errors. */
|
| - static void _defaultHandleError(error, StackTrace stackTrace,
|
| - EventSink sink) {
|
| - sink.addError(error, stackTrace);
|
| - }
|
| -
|
| - /** Default done handler forwards done. */
|
| - static void _defaultHandleDone(EventSink sink) {
|
| - sink.close();
|
| - }
|
| -}
|
| -
|
| -/// A closure mapping a stream and cancelOnError to a StreamSubscription.
|
| -typedef StreamSubscription<T> _SubscriptionTransformer<S, T>(
|
| - Stream<S> stream, bool cancelOnError);
|
| -
|
| -/**
|
| - * A [StreamTransformer] that minimizes the number of additional classes.
|
| - *
|
| - * Instead of implementing three classes: a [StreamTransformer], a [Stream]
|
| - * (as the result of a `bind` call) and a [StreamSubscription] (which does the
|
| - * actual work), this class only requires a fincution that is invoked when the
|
| - * last bit (the subscription) of the transformer-workflow is needed.
|
| - *
|
| - * The given transformer function maps from Stream and cancelOnError to a
|
| - * `StreamSubscription`. As such it can also act on `cancel` events, making it
|
| - * fully general.
|
| - */
|
| -class _StreamSubscriptionTransformer<S, T> implements StreamTransformer<S, T> {
|
| - final _SubscriptionTransformer<S, T> _transformer;
|
| -
|
| - const _StreamSubscriptionTransformer(this._transformer);
|
| -
|
| - Stream<T> bind(Stream<S> stream) =>
|
| - new _BoundSubscriptionStream<S, T>(stream, _transformer);
|
| -}
|
| -
|
| -/**
|
| - * A stream transformed by a [_StreamSubscriptionTransformer].
|
| - *
|
| - * When this stream is listened to it invokes the [_transformer] function with
|
| - * the stored [_stream]. Usually the transformer starts listening at this
|
| - * moment.
|
| - */
|
| -class _BoundSubscriptionStream<S, T> extends Stream<T> {
|
| - final _SubscriptionTransformer<S, T> _transformer;
|
| - final Stream<S> _stream;
|
| -
|
| - _BoundSubscriptionStream(this._stream, this._transformer);
|
| -
|
| - StreamSubscription<T> listen(void onData(T event),
|
| - { Function onError,
|
| - void onDone(),
|
| - bool cancelOnError }) {
|
| - cancelOnError = identical(true, cancelOnError);
|
| - StreamSubscription<T> result = _transformer(_stream, cancelOnError);
|
| - result.onData(onData);
|
| - result.onError(onError);
|
| - result.onDone(onDone);
|
| - return result;
|
| - }
|
| -}
|
|
|