| Index: sdk/lib/async/zone.dart
|
| diff --git a/sdk/lib/async/zone.dart b/sdk/lib/async/zone.dart
|
| index e0c3e4bdac4be043465dd6760a85c226d3035e8d..24f83f8bd8ba69a5ce7468aa031005d93a9d2266 100644
|
| --- a/sdk/lib/async/zone.dart
|
| +++ b/sdk/lib/async/zone.dart
|
| @@ -8,13 +8,6 @@ typedef R ZoneCallback<R>();
|
| typedef R ZoneUnaryCallback<R, T>(T arg);
|
| typedef R ZoneBinaryCallback<R, T1, T2>(T1 arg1, T2 arg2);
|
|
|
| -/// *Experimental*. Might disappear without warning.
|
| -typedef T TaskCreate<T, S extends TaskSpecification>(
|
| - S specification, Zone zone);
|
| -/// *Experimental*. Might disappear without warning.
|
| -typedef void TaskRun<T, A>(T task, A arg);
|
| -
|
| -
|
| // TODO(floitsch): we are abusing generic typedefs as typedefs for generic
|
| // functions.
|
| /*ABUSE*/
|
| @@ -40,30 +33,18 @@ typedef ZoneBinaryCallback<R, T1, T2> RegisterBinaryCallbackHandler<R, T1, T2>(
|
| Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2));
|
| typedef AsyncError ErrorCallbackHandler(Zone self, ZoneDelegate parent,
|
| Zone zone, Object error, StackTrace stackTrace);
|
| -/// *Experimental*. Might disappear without warning.
|
| -/*ABUSE*/
|
| -typedef T CreateTaskHandler<T, S extends TaskSpecification>(
|
| - Zone self, ZoneDelegate parent, Zone zone,
|
| - TaskCreate<T, S> create, S taskSpecification);
|
| -/// *Experimental*. Might disappear without warning.
|
| -/*ABUSE*/
|
| -typedef void RunTaskHandler<T, A>(Zone self, ZoneDelegate parent, Zone zone,
|
| - TaskRun<T, A> run, T task, A arg);
|
| typedef void ScheduleMicrotaskHandler(
|
| Zone self, ZoneDelegate parent, Zone zone, void f());
|
| -typedef void PrintHandler(
|
| - Zone self, ZoneDelegate parent, Zone zone, String line);
|
| -typedef Zone ForkHandler(Zone self, ZoneDelegate parent, Zone zone,
|
| - ZoneSpecification specification,
|
| - Map zoneValues);
|
| -
|
| -// The following typedef declarations are used by functionality which
|
| -// will be removed and replaced by tasksif the task experiment is successful.
|
| typedef Timer CreateTimerHandler(
|
| Zone self, ZoneDelegate parent, Zone zone, Duration duration, void f());
|
| typedef Timer CreatePeriodicTimerHandler(
|
| Zone self, ZoneDelegate parent, Zone zone,
|
| Duration period, void f(Timer timer));
|
| +typedef void PrintHandler(
|
| + Zone self, ZoneDelegate parent, Zone zone, String line);
|
| +typedef Zone ForkHandler(Zone self, ZoneDelegate parent, Zone zone,
|
| + ZoneSpecification specification,
|
| + Map zoneValues);
|
|
|
| /** Pair of error and stack trace. Returned by [Zone.errorCallback]. */
|
| class AsyncError implements Error {
|
| @@ -75,41 +56,10 @@ class AsyncError implements Error {
|
| String toString() => '$error';
|
| }
|
|
|
| -/**
|
| - * A task specification contains the necessary information to create a task.
|
| - *
|
| - * See [Zone.createTask] for how a specification is used to create a task.
|
| - *
|
| - * Task specifications should be public and it should be possible to create
|
| - * new instances as a user. That is, custom zones should be able to replace
|
| - * an existing specification with a modified one.
|
| - *
|
| - * *Experimental*. This class might disappear without warning.
|
| - */
|
| -abstract class TaskSpecification {
|
| - /**
|
| - * Description of the task.
|
| - *
|
| - * This string is unused by the root-zone, but might be used for debugging,
|
| - * and testing. As such, it should be relatively unique in its category.
|
| - *
|
| - * As a general guideline we recommend: "package-name.library.action".
|
| - */
|
| - String get name;
|
| -
|
| - /**
|
| - * Whether the scheduled task triggers at most once.
|
| - *
|
| - * If the task is not a one-shot task, it may need to be canceled to prevent
|
| - * further iterations of the task.
|
| - */
|
| - bool get isOneShot;
|
| -}
|
|
|
| class _ZoneFunction<T extends Function> {
|
| final _Zone zone;
|
| final T function;
|
| -
|
| const _ZoneFunction(this.zone, this.function);
|
| }
|
|
|
| @@ -135,9 +85,6 @@ class _ZoneFunction<T extends Function> {
|
| abstract class ZoneSpecification {
|
| /**
|
| * Creates a specification with the provided handlers.
|
| - *
|
| - * The task-related parameters ([createTask] and [runTask]) are experimental
|
| - * and might be removed without warning.
|
| */
|
| const factory ZoneSpecification({
|
| HandleUncaughtErrorHandler handleUncaughtError,
|
| @@ -149,11 +96,7 @@ abstract class ZoneSpecification {
|
| RegisterBinaryCallbackHandler registerBinaryCallback,
|
| ErrorCallbackHandler errorCallback,
|
| ScheduleMicrotaskHandler scheduleMicrotask,
|
| - CreateTaskHandler createTask,
|
| - RunTaskHandler runTask,
|
| - // TODO(floitsch): mark as deprecated once tasks are non-experimental.
|
| CreateTimerHandler createTimer,
|
| - // TODO(floitsch): mark as deprecated once tasks are non-experimental.
|
| CreatePeriodicTimerHandler createPeriodicTimer,
|
| PrintHandler print,
|
| ForkHandler fork
|
| @@ -162,9 +105,6 @@ abstract class ZoneSpecification {
|
| /**
|
| * Creates a specification from [other] with the provided handlers overriding
|
| * the ones in [other].
|
| - *
|
| - * The task-related parameters ([createTask] and [runTask]) are experimental
|
| - * and might be removed without warning.
|
| */
|
| factory ZoneSpecification.from(ZoneSpecification other, {
|
| HandleUncaughtErrorHandler handleUncaughtError: null,
|
| @@ -176,11 +116,7 @@ abstract class ZoneSpecification {
|
| RegisterBinaryCallbackHandler registerBinaryCallback: null,
|
| ErrorCallbackHandler errorCallback: null,
|
| ScheduleMicrotaskHandler scheduleMicrotask: null,
|
| - CreateTaskHandler createTask: null,
|
| - RunTaskHandler runTask: null,
|
| - // TODO(floitsch): mark as deprecated once tasks are non-experimental.
|
| CreateTimerHandler createTimer: null,
|
| - // TODO(floitsch): mark as deprecated once tasks are non-experimental.
|
| CreatePeriodicTimerHandler createPeriodicTimer: null,
|
| PrintHandler print: null,
|
| ForkHandler fork: null
|
| @@ -196,14 +132,11 @@ abstract class ZoneSpecification {
|
| registerBinaryCallback: registerBinaryCallback ??
|
| other.registerBinaryCallback,
|
| errorCallback: errorCallback ?? other.errorCallback,
|
| -
|
| - createTask: createTask ?? other.createTask,
|
| - runTask: runTask ?? other.runTask,
|
| - print : print ?? other.print,
|
| - fork: fork ?? other.fork,
|
| scheduleMicrotask: scheduleMicrotask ?? other.scheduleMicrotask,
|
| createTimer : createTimer ?? other.createTimer,
|
| - createPeriodicTimer: createPeriodicTimer ?? other.createPeriodicTimer);
|
| + createPeriodicTimer: createPeriodicTimer ?? other.createPeriodicTimer,
|
| + print : print ?? other.print,
|
| + fork: fork ?? other.fork);
|
| }
|
|
|
| HandleUncaughtErrorHandler get handleUncaughtError;
|
| @@ -215,17 +148,10 @@ abstract class ZoneSpecification {
|
| RegisterBinaryCallbackHandler get registerBinaryCallback;
|
| ErrorCallbackHandler get errorCallback;
|
| ScheduleMicrotaskHandler get scheduleMicrotask;
|
| - /// *Experimental*. Might disappear without warning.
|
| - CreateTaskHandler get createTask;
|
| - /// *Experimental*. Might disappear without warning.
|
| - RunTaskHandler get runTask;
|
| - PrintHandler get print;
|
| - ForkHandler get fork;
|
| -
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| CreateTimerHandler get createTimer;
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| CreatePeriodicTimerHandler get createPeriodicTimer;
|
| + PrintHandler get print;
|
| + ForkHandler get fork;
|
| }
|
|
|
| /**
|
| @@ -246,14 +172,10 @@ class _ZoneSpecification implements ZoneSpecification {
|
| this.registerBinaryCallback: null,
|
| this.errorCallback: null,
|
| this.scheduleMicrotask: null,
|
| - this.createTask: null,
|
| - this.runTask: null,
|
| - this.print: null,
|
| - this.fork: null,
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| this.createTimer: null,
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| - this.createPeriodicTimer: null
|
| + this.createPeriodicTimer: null,
|
| + this.print: null,
|
| + this.fork: null
|
| });
|
|
|
| final HandleUncaughtErrorHandler handleUncaughtError;
|
| @@ -265,15 +187,10 @@ class _ZoneSpecification implements ZoneSpecification {
|
| final RegisterBinaryCallbackHandler registerBinaryCallback;
|
| final ErrorCallbackHandler errorCallback;
|
| final ScheduleMicrotaskHandler scheduleMicrotask;
|
| - final CreateTaskHandler createTask;
|
| - final RunTaskHandler runTask;
|
| - final PrintHandler print;
|
| - final ForkHandler fork;
|
| -
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| final CreateTimerHandler createTimer;
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| final CreatePeriodicTimerHandler createPeriodicTimer;
|
| + final PrintHandler print;
|
| + final ForkHandler fork;
|
| }
|
|
|
| /**
|
| @@ -300,23 +217,10 @@ abstract class ZoneDelegate {
|
| Zone zone, /*=R*/ f(/*=T1*/ arg1, /*=T2*/ arg2));
|
| AsyncError errorCallback(Zone zone, Object error, StackTrace stackTrace);
|
| void scheduleMicrotask(Zone zone, void f());
|
| -
|
| - /// *Experimental*. Might disappear without notice.
|
| - Object/*=T*/ createTask/*<T, S extends TaskSpecification>*/(
|
| - Zone zone, TaskCreate/*<T, S>*/ create,
|
| - TaskSpecification/*=S*/ specification);
|
| - /// *Experimental*. Might disappear without notice.
|
| - void runTask/*<T, A>*/(
|
| - Zone zone, TaskRun/*<T, A>*/ run, Object/*=T*/ task,
|
| - Object/*=A*/ argument);
|
| -
|
| - void print(Zone zone, String line);
|
| - Zone fork(Zone zone, ZoneSpecification specification, Map zoneValues);
|
| -
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| Timer createTimer(Zone zone, Duration duration, void f());
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer));
|
| + void print(Zone zone, String line);
|
| + Zone fork(Zone zone, ZoneSpecification specification, Map zoneValues);
|
| }
|
|
|
| /**
|
| @@ -507,102 +411,13 @@ abstract class Zone {
|
| void scheduleMicrotask(void f());
|
|
|
| /**
|
| - * Creates a task in the current zone.
|
| - *
|
| - * A task represents an asynchronous operation or process that reports back
|
| - * through the event loop.
|
| - *
|
| - * This function allows the zone to intercept the initialization of the
|
| - * task while the [runTask] function is invoked when the task reports back.
|
| - *
|
| - * By default, in the root zone, the [create] function is invoked with the
|
| - * [specification] as argument. It returns a task object which is used for all
|
| - * future interactions between the zone and the task. The object is
|
| - * a unique instance representing the task. It is generally returned to
|
| - * whoever initiated the task.
|
| - * For example, the HTML library uses the returned [StreamSubscription] as
|
| - * task object when users register an event listener.
|
| - *
|
| - * Tasks are created when the program starts an operation that reports back
|
| - * through the event loop. For example, a timer or an HTTP request both
|
| - * return through the event loop and are therefore tasks.
|
| - *
|
| - * If the [create] function is not invoked (because a custom zone has
|
| - * replaced or intercepted it), then the operation is *not* started. This
|
| - * means that a custom zone can intercept tasks, like HTTP requests.
|
| - *
|
| - * A task goes through the following steps:
|
| - * - a user invokes a library function that should eventually return through
|
| - * the event loop.
|
| - * - the library function creates a [TaskSpecification] that contains the
|
| - * necessary information to start the operation, and invokes
|
| - * `Zone.current.createTask` with the specification and a [create] closure.
|
| - * The closure, when invoked, uses the specification to start the operation
|
| - * (usually by interacting with the underlying system, or as a native
|
| - * extension), and returns a task object that identifies the running task.
|
| - * - custom zones handle the request and (unless completely intercepted and
|
| - * aborted), end up calling the root zone's [createTask] which runs the
|
| - * provided `create` closure, which may have been replaced at this point.
|
| - * - later, the asynchronous operation returns through the event loop.
|
| - * It invokes [Zone.runTask] on the zone in which the task should run
|
| - * (and which was originally passed to the `create` function by
|
| - * `createTask`). The [runTask] function receives the
|
| - * task object, a `run` function and an argument. As before, custom zones
|
| - * may intercept this call. Eventually (unless aborted), the `run` function
|
| - * is invoked. This last step may happen multiple times for tasks that are
|
| - * not oneshot tasks (see [ZoneSpecification.isOneShot]).
|
| - *
|
| - * Custom zones may replace the [specification] with a different one, thus
|
| - * modifying the task parameters. An operation that wishes to be an
|
| - * interceptable task must publicly specify the types that intercepting code
|
| - * sees:
|
| - * - The specification type (extending [TaskSpecification]) which holds the
|
| - * information available when intercepting the `createTask` call.
|
| - * - The task object type, returned by `createTask` and [create]. This object
|
| - * may simply be typed as [Object].
|
| - * - The argument type, if [runTask] takes a meaningful argument.
|
| - *
|
| - * *Experimental*. Might disappear without notice.
|
| - */
|
| - Object/*=T*/ createTask/*<T, S extends TaskSpecification>*/(
|
| - /*=T*/ create(TaskSpecification/*=S*/ specification, Zone zone),
|
| - TaskSpecification/*=S*/ specification);
|
| -
|
| - /**
|
| - * Runs a task callback.
|
| - *
|
| - * This function is invoked when an operation, started through [createTask],
|
| - * generates an event.
|
| - *
|
| - * Generally, tasks schedule Dart code in the global event loop when the
|
| - * [createTask] function is invoked. Since the
|
| - * event loop does not expect any return value from the code it runs, the
|
| - * [runTask] function is a void function.
|
| - *
|
| - * The [task] object must be the same as the one created with [createTask].
|
| - *
|
| - * It is good practice that task operations provide a meaningful [argument],
|
| - * so that custom zones can interact with it. They might want to log or
|
| - * replace the argument before calling the [run] function.
|
| - *
|
| - * See [createTask].
|
| - *
|
| - * *Experimental*. Might disappear without notice.
|
| - */
|
| - void runTask/*<T, A>*/(
|
| - /*=T*/ run(/*=T*/ task, /*=A*/ argument), Object/*=T*/ task,
|
| - Object/*=A*/ argument);
|
| -
|
| - /**
|
| * Creates a Timer where the callback is executed in this zone.
|
| */
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| Timer createTimer(Duration duration, void callback());
|
|
|
| /**
|
| * Creates a periodic Timer where the callback is executed in this zone.
|
| */
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| Timer createPeriodicTimer(Duration period, void callback(Timer timer));
|
|
|
| /**
|
| @@ -708,7 +523,7 @@ class _ZoneDelegate implements ZoneDelegate {
|
| // TODO(floitsch): make this a generic method call on '<R>' once it's
|
| // supported. Remove the unnecessary cast.
|
| return handler(implZone, _parentDelegate(implZone), zone, f)
|
| - as dynamic/*=ZoneCallback<R>*/;
|
| + as Object/*=ZoneCallback<R>*/;
|
| }
|
|
|
| ZoneUnaryCallback/*<R, T>*/ registerUnaryCallback/*<R, T>*/(
|
| @@ -719,7 +534,7 @@ class _ZoneDelegate implements ZoneDelegate {
|
| // TODO(floitsch): make this a generic method call on '<R, T>' once it's
|
| // supported. Remove the unnecessary cast.
|
| return handler(implZone, _parentDelegate(implZone), zone, f)
|
| - as dynamic/*=ZoneUnaryCallback<R, T>*/;
|
| + as Object/*=ZoneUnaryCallback<R, T>*/;
|
| }
|
|
|
| ZoneBinaryCallback/*<R, T1, T2>*/ registerBinaryCallback/*<R, T1, T2>*/(
|
| @@ -730,7 +545,7 @@ class _ZoneDelegate implements ZoneDelegate {
|
| // TODO(floitsch): make this a generic method call on '<R, T1, T2>' once
|
| // it's supported. Remove the unnecessary cast.
|
| return handler(implZone, _parentDelegate(implZone), zone, f)
|
| - as dynamic/*=ZoneBinaryCallback<R, T1, T2>*/;
|
| + as Object/*=ZoneBinaryCallback<R, T1, T2>*/;
|
| }
|
|
|
| AsyncError errorCallback(Zone zone, Object error, StackTrace stackTrace) {
|
| @@ -749,25 +564,18 @@ class _ZoneDelegate implements ZoneDelegate {
|
| handler(implZone, _parentDelegate(implZone), zone, f);
|
| }
|
|
|
| - Object/*=T*/ createTask/*<T, S extends TaskSpecification>*/(
|
| - Zone zone, TaskCreate/*<T, S>*/ create, TaskSpecification/*=S*/ specification) {
|
| - var implementation = _delegationTarget._createTask;
|
| + Timer createTimer(Zone zone, Duration duration, void f()) {
|
| + var implementation = _delegationTarget._createTimer;
|
| _Zone implZone = implementation.zone;
|
| - // TODO(floitsch): make the handler call a generic method call on '<T, S>'
|
| - // once it's supported. Remove the unnecessary cast.
|
| - var handler =
|
| - implementation.function as CreateTaskHandler/*<T, S>*/;
|
| - return handler(
|
| - implZone, _parentDelegate(implZone), zone, create, specification);
|
| + CreateTimerHandler handler = implementation.function;
|
| + return handler(implZone, _parentDelegate(implZone), zone, duration, f);
|
| }
|
|
|
| - void runTask/*<T, A>*/(Zone zone, TaskRun run, Object /*=T*/ task,
|
| - Object /*=A*/ argument) {
|
| - var implementation = _delegationTarget._runTask;
|
| + Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer)) {
|
| + var implementation = _delegationTarget._createPeriodicTimer;
|
| _Zone implZone = implementation.zone;
|
| - RunTaskHandler handler = implementation.function;
|
| - // TODO(floitsch): make this a generic call on '<T, A>'.
|
| - handler(implZone, _parentDelegate(implZone), zone, run, task, argument);
|
| + CreatePeriodicTimerHandler handler = implementation.function;
|
| + return handler(implZone, _parentDelegate(implZone), zone, period, f);
|
| }
|
|
|
| void print(Zone zone, String line) {
|
| @@ -785,22 +593,6 @@ class _ZoneDelegate implements ZoneDelegate {
|
| return handler(
|
| implZone, _parentDelegate(implZone), zone, specification, zoneValues);
|
| }
|
| -
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| - Timer createTimer(Zone zone, Duration duration, void f()) {
|
| - var implementation = _delegationTarget._createTimer;
|
| - _Zone implZone = implementation.zone;
|
| - CreateTimerHandler handler = implementation.function;
|
| - return handler(implZone, _parentDelegate(implZone), zone, duration, f);
|
| - }
|
| -
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| - Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer)) {
|
| - var implementation = _delegationTarget._createPeriodicTimer;
|
| - _Zone implZone = implementation.zone;
|
| - CreatePeriodicTimerHandler handler = implementation.function;
|
| - return handler(implZone, _parentDelegate(implZone), zone, period, f);
|
| - }
|
| }
|
|
|
|
|
| @@ -818,17 +610,11 @@ abstract class _Zone implements Zone {
|
| _ZoneFunction<RegisterBinaryCallbackHandler> get _registerBinaryCallback;
|
| _ZoneFunction<ErrorCallbackHandler> get _errorCallback;
|
| _ZoneFunction<ScheduleMicrotaskHandler> get _scheduleMicrotask;
|
| - _ZoneFunction<CreateTaskHandler> get _createTask;
|
| - _ZoneFunction<RunTaskHandler> get _runTask;
|
| + _ZoneFunction<CreateTimerHandler> get _createTimer;
|
| + _ZoneFunction<CreatePeriodicTimerHandler> get _createPeriodicTimer;
|
| _ZoneFunction<PrintHandler> get _print;
|
| _ZoneFunction<ForkHandler> get _fork;
|
| _ZoneFunction<HandleUncaughtErrorHandler> get _handleUncaughtError;
|
| -
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| - _ZoneFunction<CreateTimerHandler> get _createTimer;
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| - _ZoneFunction<CreatePeriodicTimerHandler> get _createPeriodicTimer;
|
| -
|
| _Zone get parent;
|
| ZoneDelegate get _delegate;
|
| Map get _map;
|
| @@ -850,17 +636,12 @@ class _CustomZone extends _Zone {
|
| _ZoneFunction<RegisterBinaryCallbackHandler> _registerBinaryCallback;
|
| _ZoneFunction<ErrorCallbackHandler> _errorCallback;
|
| _ZoneFunction<ScheduleMicrotaskHandler> _scheduleMicrotask;
|
| - _ZoneFunction<CreateTaskHandler> _createTask;
|
| - _ZoneFunction<RunTaskHandler> _runTask;
|
| + _ZoneFunction<CreateTimerHandler> _createTimer;
|
| + _ZoneFunction<CreatePeriodicTimerHandler> _createPeriodicTimer;
|
| _ZoneFunction<PrintHandler> _print;
|
| _ZoneFunction<ForkHandler> _fork;
|
| _ZoneFunction<HandleUncaughtErrorHandler> _handleUncaughtError;
|
|
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| - _ZoneFunction<CreateTimerHandler> _createTimer;
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| - _ZoneFunction<CreatePeriodicTimerHandler> _createPeriodicTimer;
|
| -
|
| // A cached delegate to this zone.
|
| ZoneDelegate _delegateCache;
|
|
|
| @@ -911,14 +692,13 @@ class _CustomZone extends _Zone {
|
| ? new _ZoneFunction<ScheduleMicrotaskHandler>(
|
| this, specification.scheduleMicrotask)
|
| : parent._scheduleMicrotask;
|
| - _createTask = (specification.createTask != null)
|
| - ? new _ZoneFunction<CreateTaskHandler>(
|
| - this, specification.createTask)
|
| - : parent._createTask;
|
| - _runTask = (specification.runTask != null)
|
| - ? new _ZoneFunction<RunTaskHandler>(
|
| - this, specification.runTask)
|
| - : parent._runTask;
|
| + _createTimer = (specification.createTimer != null)
|
| + ? new _ZoneFunction<CreateTimerHandler>(this, specification.createTimer)
|
| + : parent._createTimer;
|
| + _createPeriodicTimer = (specification.createPeriodicTimer != null)
|
| + ? new _ZoneFunction<CreatePeriodicTimerHandler>(
|
| + this, specification.createPeriodicTimer)
|
| + : parent._createPeriodicTimer;
|
| _print = (specification.print != null)
|
| ? new _ZoneFunction<PrintHandler>(this, specification.print)
|
| : parent._print;
|
| @@ -929,16 +709,6 @@ class _CustomZone extends _Zone {
|
| ? new _ZoneFunction<HandleUncaughtErrorHandler>(
|
| this, specification.handleUncaughtError)
|
| : parent._handleUncaughtError;
|
| -
|
| - // Deprecated fields, once tasks are non-experimental.
|
| - _createTimer = (specification.createTimer != null)
|
| - ? new _ZoneFunction<CreateTimerHandler>(
|
| - this, specification.createTimer)
|
| - : parent._createTimer;
|
| - _createPeriodicTimer = (specification.createPeriodicTimer != null)
|
| - ? new _ZoneFunction<CreatePeriodicTimerHandler>(
|
| - this, specification.createPeriodicTimer)
|
| - : parent._createPeriodicTimer;
|
| }
|
|
|
| /**
|
| @@ -1089,7 +859,7 @@ class _CustomZone extends _Zone {
|
| // TODO(floitsch): make this a generic method call on '<R>' once it's
|
| // supported. Remove the unnecessary cast.
|
| return handler(implementation.zone, parentDelegate, this, callback)
|
| - as dynamic/*=ZoneCallback<R>*/;
|
| + as Object/*=ZoneCallback<R>*/;
|
| }
|
|
|
| ZoneUnaryCallback/*<R, T>*/ registerUnaryCallback/*<R, T>*/(
|
| @@ -1101,7 +871,7 @@ class _CustomZone extends _Zone {
|
| // TODO(floitsch): make this a generic method call on '<R, T>' once it's
|
| // supported. Remove the unnecessary cast.
|
| return handler(implementation.zone, parentDelegate, this, callback)
|
| - as dynamic/*=ZoneUnaryCallback<R, T>*/;
|
| + as Object/*=ZoneUnaryCallback<R, T>*/;
|
| }
|
|
|
| ZoneBinaryCallback/*<R, T1, T2>*/ registerBinaryCallback/*<R, T1, T2>*/(
|
| @@ -1113,7 +883,7 @@ class _CustomZone extends _Zone {
|
| // TODO(floitsch): make this a generic method call on '<R, T1, T2>' once
|
| // it's supported. Remove the unnecessary cast.
|
| return handler(implementation.zone, parentDelegate, this, callback)
|
| - as dynamic/*=ZoneBinaryCallback<R, T1, T2>*/;
|
| + as Object/*=ZoneBinaryCallback<R, T1, T2>*/;
|
| }
|
|
|
| AsyncError errorCallback(Object error, StackTrace stackTrace) {
|
| @@ -1132,40 +902,9 @@ class _CustomZone extends _Zone {
|
| assert(implementation != null);
|
| ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
|
| ScheduleMicrotaskHandler handler = implementation.function;
|
| - handler(implementation.zone, parentDelegate, this, f);
|
| - }
|
| -
|
| - Object/*=T*/ createTask/*<T, S extends TaskSpecification>*/(
|
| - TaskCreate/*<T, S>*/ create, TaskSpecification/*=S*/ specification) {
|
| - var implementation = this._createTask;
|
| - ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
|
| - // TODO(floitsch): make the handler call a generic method call on '<T, S>'
|
| - // once it's supported. Remove the unnecessary cast.
|
| - var handler =
|
| - implementation.function as CreateTaskHandler/*<T, S>*/;
|
| - return handler(
|
| - implementation.zone, parentDelegate, this, create, specification);
|
| - }
|
| -
|
| - void runTask/*<T, A>*/(
|
| - TaskRun/*<T, A>*/ run, Object/*=T*/ task, Object/*=A*/ arg1) {
|
| - var implementation = this._runTask;
|
| - ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
|
| - RunTaskHandler handler = implementation.function;
|
| - // TODO(floitsch): make this a generic method call on '<T, A>' once it's
|
| - // supported.
|
| - handler(implementation.zone, parentDelegate, this, run, task, arg1);
|
| + return handler(implementation.zone, parentDelegate, this, f);
|
| }
|
|
|
| - void print(String line) {
|
| - var implementation = this._print;
|
| - assert(implementation != null);
|
| - ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
|
| - PrintHandler handler = implementation.function;
|
| - return handler(implementation.zone, parentDelegate, this, line);
|
| - }
|
| -
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| Timer createTimer(Duration duration, void f()) {
|
| var implementation = this._createTimer;
|
| assert(implementation != null);
|
| @@ -1174,7 +913,6 @@ class _CustomZone extends _Zone {
|
| return handler(implementation.zone, parentDelegate, this, duration, f);
|
| }
|
|
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| Timer createPeriodicTimer(Duration duration, void f(Timer timer)) {
|
| var implementation = this._createPeriodicTimer;
|
| assert(implementation != null);
|
| @@ -1183,6 +921,14 @@ class _CustomZone extends _Zone {
|
| return handler(
|
| implementation.zone, parentDelegate, this, duration, f);
|
| }
|
| +
|
| + void print(String line) {
|
| + var implementation = this._print;
|
| + assert(implementation != null);
|
| + ZoneDelegate parentDelegate = _parentDelegate(implementation.zone);
|
| + PrintHandler handler = implementation.function;
|
| + return handler(implementation.zone, parentDelegate, this, line);
|
| + }
|
| }
|
|
|
| /*=R*/ _rootHandleUncaughtError/*<R>*/(
|
| @@ -1260,39 +1006,22 @@ void _rootScheduleMicrotask(Zone self, ZoneDelegate parent, Zone zone, f()) {
|
| _scheduleAsyncCallback(f);
|
| }
|
|
|
| -Object/*=T*/ _rootCreateTask/*<T, S extends TaskSpecification>*/(
|
| - Zone self, ZoneDelegate parent, Zone zone,
|
| - TaskCreate/*<T, S>*/ create, TaskSpecification/*=S*/ specification) {
|
| - return create(specification, zone);
|
| -}
|
| -
|
| -void _rootRunTask/*<T, A>*/(
|
| - Zone self, ZoneDelegate parent, Zone zone, TaskRun run/*<T, A>*/,
|
| - Object/*=T*/ task, Object/*=A*/ arg) {
|
| - if (Zone._current == zone) {
|
| - run(task, arg);
|
| - return;
|
| - }
|
| -
|
| - Zone old = Zone._enter(zone);
|
| - try {
|
| - run(task, arg);
|
| - } catch (e, s) {
|
| - zone.handleUncaughtError/*<dynamic>*/(e, s);
|
| - } finally {
|
| - Zone._leave(old);
|
| - }
|
| -}
|
| -
|
| Timer _rootCreateTimer(Zone self, ZoneDelegate parent, Zone zone,
|
| Duration duration, void callback()) {
|
| - return new Timer._task(zone, duration, callback);
|
| + if (!identical(_ROOT_ZONE, zone)) {
|
| + callback = zone.bindCallback(callback);
|
| + }
|
| + return Timer._createTimer(duration, callback);
|
| }
|
|
|
| Timer _rootCreatePeriodicTimer(
|
| Zone self, ZoneDelegate parent, Zone zone,
|
| Duration duration, void callback(Timer timer)) {
|
| - return new Timer._periodicTask(zone, duration, callback);
|
| + if (!identical(_ROOT_ZONE, zone)) {
|
| + // TODO(floitsch): the return type should be 'void'.
|
| + callback = zone.bindUnaryCallback/*<dynamic, Timer>*/(callback);
|
| + }
|
| + return Timer._createPeriodicTimer(duration, callback);
|
| }
|
|
|
| void _rootPrint(Zone self, ZoneDelegate parent, Zone zone, String line) {
|
| @@ -1353,10 +1082,10 @@ class _RootZone extends _Zone {
|
| _ZoneFunction<ScheduleMicrotaskHandler> get _scheduleMicrotask =>
|
| const _ZoneFunction<ScheduleMicrotaskHandler>(
|
| _ROOT_ZONE, _rootScheduleMicrotask);
|
| - _ZoneFunction<CreateTaskHandler> get _createTask =>
|
| - const _ZoneFunction<CreateTaskHandler>(_ROOT_ZONE, _rootCreateTask);
|
| - _ZoneFunction<RunTaskHandler> get _runTask =>
|
| - const _ZoneFunction<RunTaskHandler>(_ROOT_ZONE, _rootRunTask);
|
| + _ZoneFunction<CreateTimerHandler> get _createTimer =>
|
| + const _ZoneFunction<CreateTimerHandler>(_ROOT_ZONE, _rootCreateTimer);
|
| + _ZoneFunction<CreatePeriodicTimerHandler> get _createPeriodicTimer =>
|
| + const _ZoneFunction<CreatePeriodicTimerHandler>(_ROOT_ZONE, _rootCreatePeriodicTimer);
|
| _ZoneFunction<PrintHandler> get _print =>
|
| const _ZoneFunction<PrintHandler>(_ROOT_ZONE, _rootPrint);
|
| _ZoneFunction<ForkHandler> get _fork =>
|
| @@ -1365,14 +1094,6 @@ class _RootZone extends _Zone {
|
| const _ZoneFunction<HandleUncaughtErrorHandler>(
|
| _ROOT_ZONE, _rootHandleUncaughtError);
|
|
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| - _ZoneFunction<CreateTimerHandler> get _createTimer =>
|
| - const _ZoneFunction<CreateTimerHandler>(_ROOT_ZONE, _rootCreateTimer);
|
| - // TODO(floitsch): deprecate once tasks are non-experimental.
|
| - _ZoneFunction<CreatePeriodicTimerHandler> get _createPeriodicTimer =>
|
| - const _ZoneFunction<CreatePeriodicTimerHandler>(
|
| - _ROOT_ZONE, _rootCreatePeriodicTimer);
|
| -
|
| // The parent zone.
|
| _Zone get parent => null;
|
|
|
| @@ -1504,16 +1225,6 @@ class _RootZone extends _Zone {
|
| _rootScheduleMicrotask(null, null, this, f);
|
| }
|
|
|
| - Object/*=T*/ createTask/*<T, S extends TaskSpecification>*/(
|
| - TaskCreate/*<T, S>*/ create, TaskSpecification/*=S*/ specification) {
|
| - return _rootCreateTask/*<T, S>*/(null, null, this, create, specification);
|
| - }
|
| -
|
| - void runTask/*<T, A>*/(
|
| - TaskRun/*<T, A>*/ run, Object/*=T*/ task, Object/*=A*/ arg) {
|
| - _rootRunTask/*<T, A>*/(null, null, this, run, task, arg);
|
| - }
|
| -
|
| Timer createTimer(Duration duration, void f()) {
|
| return Timer._createTimer(duration, f);
|
| }
|
|
|