Chromium Code Reviews| Index: sdk/lib/async/stream_controller.dart |
| diff --git a/sdk/lib/async/stream_controller.dart b/sdk/lib/async/stream_controller.dart |
| index 5764ecdd2102e6dc975a6c1ca3d81a0ed4db3ad4..26dc882b5a5d1562ee91aaa14977018778f25aef 100644 |
| --- a/sdk/lib/async/stream_controller.dart |
| +++ b/sdk/lib/async/stream_controller.dart |
| @@ -77,12 +77,6 @@ abstract class StreamController<T> implements StreamSink<T> { |
| void onResume(), |
| onCancel(), |
| bool sync: false}) { |
| - if (onListen == null && onPause == null && |
| - onResume == null && onCancel == null) { |
| - return sync |
| - ? new _NoCallbackSyncStreamController<T>() |
| - : new _NoCallbackAsyncStreamController<T>(); |
| - } |
| return sync |
| ? new _SyncStreamController<T>(onListen, onPause, onResume, onCancel) |
| : new _AsyncStreamController<T>(onListen, onPause, onResume, onCancel); |
| @@ -139,6 +133,42 @@ abstract class StreamController<T> implements StreamSink<T> { |
| } |
| /** |
| + * Set the callback which is called when the stream is listened to. |
|
floitsch
2015/07/17 09:47:52
Sets
|
| + * |
| + * This overrides the previous callback, or clears it if the handler is |
| + * `null`. |
| + */ |
| + void set onListen(void onListenHandler()); |
| + |
| + /** |
| + * Set the callback which is called when the stream is paused. |
|
floitsch
2015/07/17 09:47:53
ditto. and for the others.
|
| + * |
| + * This overrides the previous callback, or clears it if the handler is |
| + * `null`. |
| + * |
| + * Pause related callbacks are not supported on broadcast stream controllers. |
| + */ |
| + void set onPause(void onPauseHandler()); |
| + |
| + /** |
| + * Set the callback which is called when the stream is resumed. |
| + * |
| + * This overrides the previous callback, or clears it if the handler is |
| + * `null`. |
| + * |
| + * Pause related callbacks are not supported on broadcast stream controllers. |
| + */ |
| + void set onResume(void onResumeHandler()); |
| + |
| + /** |
| + * Set the callback which is called when the stream is canceled. |
| + * |
| + * This overrides the previous callback, or clears it if the handler is |
| + * `null`. |
| + */ |
| + void set onCancel(onCancelHandler()); |
| + |
| + /** |
| * Returns a view of this object that only exposes the [StreamSink] interface. |
| */ |
| StreamSink<T> get sink; |
| @@ -383,12 +413,23 @@ abstract class _StreamController<T> implements StreamController<T>, |
| // accessed earlier, or if close is called before subscribing. |
| _Future _doneFuture; |
| - _StreamController(); |
| + _NotificationHandler _onListen; |
| + _NotificationHandler _onPause; |
| + _NotificationHandler _onResume; |
| + _NotificationHandler _onCancel; |
| - _NotificationHandler get _onListen; |
| - _NotificationHandler get _onPause; |
| - _NotificationHandler get _onResume; |
| - _NotificationHandler get _onCancel; |
| + _StreamController(void this._onListen(), |
| + void this._onPause(), |
| + void this._onResume(), |
| + this._onCancel()); |
| + |
| + void set onListen(void onListenHandler()) { _onListen = onListenHandler; } |
| + |
| + void set onPause(void onPauseHandler()) { _onPause = onPauseHandler; } |
| + |
| + void set onResume(void onResumeHandler()) { _onResume = onResumeHandler; } |
| + |
| + void set onCancel(onCancelHandler()) { _onCancel = onCancelHandler; } |
| // Return a new stream every time. The streams are equal, but not identical. |
| Stream<T> get stream => new _ControllerStream<T>(this); |
| @@ -722,44 +763,11 @@ abstract class _AsyncStreamControllerDispatch<T> |
| // TODO(lrn): Use common superclass for callback-controllers when VM supports |
| // constructors in mixin superclasses. |
| -class _AsyncStreamController<T> extends _StreamController<T> |
| - with _AsyncStreamControllerDispatch<T> { |
| - final _NotificationHandler _onListen; |
| - final _NotificationHandler _onPause; |
| - final _NotificationHandler _onResume; |
| - final _NotificationHandler _onCancel; |
| +class _AsyncStreamController<T> = _StreamController<T> |
| + with _AsyncStreamControllerDispatch<T>; |
| - _AsyncStreamController(void this._onListen(), |
| - void this._onPause(), |
| - void this._onResume(), |
| - this._onCancel()); |
| -} |
| - |
| -class _SyncStreamController<T> extends _StreamController<T> |
| - with _SyncStreamControllerDispatch<T> { |
| - final _NotificationHandler _onListen; |
| - final _NotificationHandler _onPause; |
| - final _NotificationHandler _onResume; |
| - final _NotificationHandler _onCancel; |
| - |
| - _SyncStreamController(void this._onListen(), |
| - void this._onPause(), |
| - void this._onResume(), |
| - this._onCancel()); |
| -} |
| - |
| -abstract class _NoCallbacks { |
| - _NotificationHandler get _onListen => null; |
| - _NotificationHandler get _onPause => null; |
| - _NotificationHandler get _onResume => null; |
| - _NotificationHandler get _onCancel => null; |
| -} |
| - |
| -class _NoCallbackAsyncStreamController<T> = _StreamController<T> |
| - with _AsyncStreamControllerDispatch<T>, _NoCallbacks; |
| - |
| -class _NoCallbackSyncStreamController<T> = _StreamController<T> |
| - with _SyncStreamControllerDispatch<T>, _NoCallbacks; |
| +class _SyncStreamController<T> = _StreamController<T> |
| + with _SyncStreamControllerDispatch<T>; |
| typedef _NotificationHandler(); |