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

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

Issue 2872603002: Revert "Warn when adding something to a closed sink and improve documentation." (Closed)
Patch Set: 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 | « sdk/lib/async/stream_controller.dart ('k') | sdk/lib/core/sink.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 * Wraps an [_EventSink] so it exposes only the [EventSink] interface. 8 * Wraps an [_EventSink] so it exposes only the [EventSink] interface.
9 */ 9 */
10 class _EventSinkWrapper<T> implements EventSink<T> { 10 class _EventSinkWrapper<T> implements EventSink<T> {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 * Wraps handlers (from [StreamTransformer.fromHandlers]) into an `EventSink`. 202 * Wraps handlers (from [StreamTransformer.fromHandlers]) into an `EventSink`.
203 * 203 *
204 * This way we can reuse the code from [_StreamSinkTransformer]. 204 * This way we can reuse the code from [_StreamSinkTransformer].
205 */ 205 */
206 class _HandlerEventSink<S, T> implements EventSink<S> { 206 class _HandlerEventSink<S, T> implements EventSink<S> {
207 final _TransformDataHandler<S, T> _handleData; 207 final _TransformDataHandler<S, T> _handleData;
208 final _TransformErrorHandler<T> _handleError; 208 final _TransformErrorHandler<T> _handleError;
209 final _TransformDoneHandler<T> _handleDone; 209 final _TransformDoneHandler<T> _handleDone;
210 210
211 /// The output sink where the handlers should send their data into. 211 /// The output sink where the handlers should send their data into.
212 EventSink<T> _sink; 212 final EventSink<T> _sink;
213 213
214 _HandlerEventSink( 214 _HandlerEventSink(
215 this._handleData, this._handleError, this._handleDone, this._sink) { 215 this._handleData, this._handleError, this._handleDone, this._sink);
216 if (_sink == null) {
217 throw new ArgumentError("The provided sink must not be null.");
218 }
219 }
220
221 bool get _isClosed => _sink == null;
222 216
223 void add(S data) { 217 void add(S data) {
224 if (_isClosed) {
225 // TODO(29554): throw a StateError, and don't just report the problem.
226 Zone.ROOT
227 ..print("Sink is closed and adding to it is an error.")
228 ..print(" See http://dartbug.com/29554.")
229 ..print(StackTrace.current);
230 }
231 if (_handleData != null) { 218 if (_handleData != null) {
232 _handleData(data, _sink); 219 _handleData(data, _sink);
233 } else { 220 } else {
234 _sink.add(data as T); 221 _sink.add(data as T);
235 } 222 }
236 } 223 }
237 224
238 void addError(Object error, [StackTrace stackTrace]) { 225 void addError(Object error, [StackTrace stackTrace]) {
239 if (_isClosed) {
240 // TODO(29554): throw a StateError, and don't just report the problem.
241 Zone.ROOT
242 ..print("Sink is closed and adding to it is an error.")
243 ..print(" See http://dartbug.com/29554.")
244 ..print(StackTrace.current);
245 }
246 if (_handleError != null) { 226 if (_handleError != null) {
247 _handleError(error, stackTrace, _sink); 227 _handleError(error, stackTrace, _sink);
248 } else { 228 } else {
249 _sink.addError(error, stackTrace); 229 _sink.addError(error, stackTrace);
250 } 230 }
251 } 231 }
252 232
253 void close() { 233 void close() {
254 if (_isClosed) return;
255 var sink = _sink;
256 _sink = null;
257 if (_handleDone != null) { 234 if (_handleDone != null) {
258 _handleDone(sink); 235 _handleDone(_sink);
259 } else { 236 } else {
260 sink.close(); 237 _sink.close();
261 } 238 }
262 } 239 }
263 } 240 }
264 241
265 /** 242 /**
266 * A StreamTransformer that transformers events with the given handlers. 243 * A StreamTransformer that transformers events with the given handlers.
267 * 244 *
268 * Note that this transformer can only be used once. 245 * Note that this transformer can only be used once.
269 */ 246 */
270 class _StreamHandlerTransformer<S, T> extends _StreamSinkTransformer<S, T> { 247 class _StreamHandlerTransformer<S, T> extends _StreamSinkTransformer<S, T> {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 StreamSubscription<T> listen(void onData(T event), 300 StreamSubscription<T> listen(void onData(T event),
324 {Function onError, void onDone(), bool cancelOnError}) { 301 {Function onError, void onDone(), bool cancelOnError}) {
325 cancelOnError = identical(true, cancelOnError); 302 cancelOnError = identical(true, cancelOnError);
326 StreamSubscription<T> result = _onListen(_stream, cancelOnError); 303 StreamSubscription<T> result = _onListen(_stream, cancelOnError);
327 result.onData(onData); 304 result.onData(onData);
328 result.onError(onError); 305 result.onError(onError);
329 result.onDone(onDone); 306 result.onDone(onDone);
330 return result; 307 return result;
331 } 308 }
332 } 309 }
OLDNEW
« no previous file with comments | « sdk/lib/async/stream_controller.dart ('k') | sdk/lib/core/sink.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698