Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: sdk/lib/async/stream.dart

Issue 2822173002: Warn when adding something to a closed sink and improve documentation (Closed)
Patch Set: Fix Zone.print only taking a string and update status files. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « CHANGELOG.md ('k') | sdk/lib/async/stream_controller.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.async; 5 part of dart.async;
6 6
7 // ------------------------------------------------------------------- 7 // -------------------------------------------------------------------
8 // Core Stream types 8 // Core Stream types
9 // ------------------------------------------------------------------- 9 // -------------------------------------------------------------------
10 10
(...skipping 1514 matching lines...) Expand 10 before | Expand all | Expand 10 after
1525 * In case of an error the subscription will automatically cancel (even 1525 * In case of an error the subscription will automatically cancel (even
1526 * when it was listening with `cancelOnError` set to `false`). 1526 * when it was listening with `cancelOnError` set to `false`).
1527 * 1527 *
1528 * In case of a `done` event the future completes with the given 1528 * In case of a `done` event the future completes with the given
1529 * [futureValue]. 1529 * [futureValue].
1530 */ 1530 */
1531 Future<E> asFuture<E>([E futureValue]); 1531 Future<E> asFuture<E>([E futureValue]);
1532 } 1532 }
1533 1533
1534 /** 1534 /**
1535 * An interface that abstracts creation or handling of [Stream] events. 1535 * A [Sink] that supports adding errors.
1536 *
1537 * This makes it suitable for capturing the results of asynchronous
1538 * computations, which can complete with a value or an error.
1539 *
1540 * The [EventSink] has been designed to handle asynchronous events from
1541 * [Stream]s. See, for example, [Stream.eventTransformed] which uses
1542 * `EventSink`s to transform events.
1536 */ 1543 */
1537 abstract class EventSink<T> implements Sink<T> { 1544 abstract class EventSink<T> implements Sink<T> {
1538 /** Send a data event to a stream. */ 1545 /**
1546 * Adds a data [event] to the sink.
1547 *
1548 * Must not be called on a closed sink.
1549 */
1539 void add(T event); 1550 void add(T event);
1540 1551
1541 /** Send an async error to a stream. */ 1552 /**
1542 void addError(Object errorEvent, [StackTrace stackTrace]); 1553 * Adds an [error] to the sink.
1554 *
1555 * Must not be called on a closed sink.
1556 */
1557 void addError(Object error, [StackTrace stackTrace]);
1543 1558
1544 /** Close the sink. No further events can be added after closing. */ 1559 /**
1560 * Closes the sink.
1561 *
1562 * Calling this method more than once is allowed, but does nothing.
1563 *
1564 * Neither [add] nor [addError] must be called after this method.
1565 */
1545 void close(); 1566 void close();
1546 } 1567 }
1547 1568
1548 /** [Stream] wrapper that only exposes the [Stream] interface. */ 1569 /** [Stream] wrapper that only exposes the [Stream] interface. */
1549 class StreamView<T> extends Stream<T> { 1570 class StreamView<T> extends Stream<T> {
1550 final Stream<T> _stream; 1571 final Stream<T> _stream;
1551 1572
1552 const StreamView(Stream<T> stream) 1573 const StreamView(Stream<T> stream)
1553 : _stream = stream, 1574 : _stream = stream,
1554 super._internal(); 1575 super._internal();
(...skipping 12 matching lines...) Expand all
1567 } 1588 }
1568 } 1589 }
1569 1590
1570 /** 1591 /**
1571 * Abstract interface for a "sink" accepting multiple entire streams. 1592 * Abstract interface for a "sink" accepting multiple entire streams.
1572 * 1593 *
1573 * A consumer can accept a number of consecutive streams using [addStream], 1594 * A consumer can accept a number of consecutive streams using [addStream],
1574 * and when no further data need to be added, the [close] method tells the 1595 * and when no further data need to be added, the [close] method tells the
1575 * consumer to complete its work and shut down. 1596 * consumer to complete its work and shut down.
1576 * 1597 *
1577 * This class is not just a [Sink<Stream>] because it is also combined with
1578 * other [Sink] classes, like it's combined with [EventSink] in the
1579 * [StreamSink] class.
1580 *
1581 * The [Stream.pipe] accepts a `StreamConsumer` and will pass the stream 1598 * The [Stream.pipe] accepts a `StreamConsumer` and will pass the stream
1582 * to the consumer's [addStream] method. When that completes, it will 1599 * to the consumer's [addStream] method. When that completes, it will
1583 * call [close] and then complete its own returned future. 1600 * call [close] and then complete its own returned future.
1584 */ 1601 */
1585 abstract class StreamConsumer<S> { 1602 abstract class StreamConsumer<S> {
1586 /** 1603 /**
1587 * Consumes the elements of [stream]. 1604 * Consumes the elements of [stream].
1588 * 1605 *
1589 * Listens on [stream] and does something for each event. 1606 * Listens on [stream] and does something for each event.
1590 * 1607 *
(...skipping 21 matching lines...) Expand all
1612 * Returns a future which is completed when the consumer has shut down. 1629 * Returns a future which is completed when the consumer has shut down.
1613 * If cleaning up can fail, the error may be reported in the returned future, 1630 * If cleaning up can fail, the error may be reported in the returned future,
1614 * otherwise it completes with `null`. 1631 * otherwise it completes with `null`.
1615 */ 1632 */
1616 Future close(); 1633 Future close();
1617 } 1634 }
1618 1635
1619 /** 1636 /**
1620 * A object that accepts stream events both synchronously and asynchronously. 1637 * A object that accepts stream events both synchronously and asynchronously.
1621 * 1638 *
1622 * A [StreamSink] unifies the asynchronous methods from [StreamConsumer] and 1639 * A [StreamSink] combines the methods from [StreamConsumer] and [EventSink].
1623 * the synchronous methods from [EventSink].
1624 * 1640 *
1625 * The [EventSink] methods can't be used while the [addStream] is called. 1641 * The [EventSink] methods can't be used while the [addStream] is called.
1626 * As soon as the [addStream]'s [Future] completes with a value, the 1642 * As soon as the [addStream]'s [Future] completes with a value, the
1627 * [EventSink] methods can be used again. 1643 * [EventSink] methods can be used again.
1628 * 1644 *
1629 * If [addStream] is called after any of the [EventSink] methods, it'll 1645 * If [addStream] is called after any of the [EventSink] methods, it'll
1630 * be delayed until the underlying system has consumed the data added by the 1646 * be delayed until the underlying system has consumed the data added by the
1631 * [EventSink] methods. 1647 * [EventSink] methods.
1632 * 1648 *
1633 * When [EventSink] methods are used, the [done] [Future] can be used to 1649 * When [EventSink] methods are used, the [done] [Future] can be used to
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
1916 /// Must only be used instead of listening to the [values] stream. 1932 /// Must only be used instead of listening to the [values] stream.
1917 /// If the stream has been listened to, this call fails. 1933 /// If the stream has been listened to, this call fails.
1918 /// After calling this method, listening on the [values] stream fails. 1934 /// After calling this method, listening on the [values] stream fails.
1919 Future cancel() { 1935 Future cancel() {
1920 // If values has been listened to, 1936 // If values has been listened to,
1921 // this throws a StateError saying that stream has already been listened to, 1937 // this throws a StateError saying that stream has already been listened to,
1922 // which is a correct error message for this call too. 1938 // which is a correct error message for this call too.
1923 return values.listen(null).cancel(); 1939 return values.listen(null).cancel();
1924 } 1940 }
1925 } 1941 }
OLDNEW
« no previous file with comments | « CHANGELOG.md ('k') | sdk/lib/async/stream_controller.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698