| OLD | NEW |
| 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 library barback.asset_node; | 5 library barback.asset_node; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'asset.dart'; | 9 import 'asset.dart'; |
| 10 import 'asset_id.dart'; | 10 import 'asset_id.dart'; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 Asset _asset; | 51 Asset _asset; |
| 52 | 52 |
| 53 /// The callback to be called to notify this asset node's creator that the | 53 /// The callback to be called to notify this asset node's creator that the |
| 54 /// concrete asset should be generated. | 54 /// concrete asset should be generated. |
| 55 /// | 55 /// |
| 56 /// This is null for non-lazy asset nodes (see [AssetNodeController.lazy]). | 56 /// This is null for non-lazy asset nodes (see [AssetNodeController.lazy]). |
| 57 /// Once this is called, it's set to null and [this] is no longer considered | 57 /// Once this is called, it's set to null and [this] is no longer considered |
| 58 /// lazy. | 58 /// lazy. |
| 59 Function _lazyCallback; | 59 Function _lazyCallback; |
| 60 | 60 |
| 61 /// Whether this is lazy and needs [force] to be called before it will be | 61 /// Whether this asset's transform is deferred. |
| 62 /// marked available. | 62 /// |
| 63 bool get isLazy => _lazyCallback != null; | 63 /// See [TransformNode.deferred]. |
| 64 bool get deferred => transform != null && transform.deferred; |
| 64 | 65 |
| 65 /// A broadcast stream that emits an event whenever the node changes state. | 66 /// A broadcast stream that emits an event whenever the node changes state. |
| 66 /// | 67 /// |
| 67 /// This stream is synchronous to ensure that when a source asset is modified | 68 /// This stream is synchronous to ensure that when a source asset is modified |
| 68 /// or removed, the appropriate portion of the asset graph is dirtied before | 69 /// or removed, the appropriate portion of the asset graph is dirtied before |
| 69 /// any [Barback.getAssetById] calls emit newly-incorrect values. | 70 /// any [Barback.getAssetById] calls emit newly-incorrect values. |
| 70 Stream<AssetState> get onStateChange => _stateChangeController.stream; | 71 Stream<AssetState> get onStateChange => _stateChangeController.stream; |
| 71 | 72 |
| 72 /// This is synchronous so that a source being updated will always be | 73 /// This is synchronous so that a source being updated will always be |
| 73 /// propagated through the build graph before anything that depends on it is | 74 /// propagated through the build graph before anything that depends on it is |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 if (node.state.isAvailable) { | 189 if (node.state.isAvailable) { |
| 189 setAvailable(node.asset); | 190 setAvailable(node.asset); |
| 190 } else if (node.state.isRemoved) { | 191 } else if (node.state.isRemoved) { |
| 191 setRemoved(); | 192 setRemoved(); |
| 192 } | 193 } |
| 193 } | 194 } |
| 194 | 195 |
| 195 /// Marks the node as [AssetState.DIRTY]. | 196 /// Marks the node as [AssetState.DIRTY]. |
| 196 void setDirty() { | 197 void setDirty() { |
| 197 assert(node._state != AssetState.REMOVED); | 198 assert(node._state != AssetState.REMOVED); |
| 198 node._state = AssetState.DIRTY; | |
| 199 node._asset = null; | 199 node._asset = null; |
| 200 node._lazyCallback = null; | 200 node._lazyCallback = null; |
| 201 |
| 202 // Don't re-emit a dirty event to avoid cases where we try to dispatch an |
| 203 // event while handling another event (e.g. an output is marked lazy, which |
| 204 // causes it to be forced, which causes it to be marked dirty). |
| 205 if (node._state.isDirty) return; |
| 206 node._state = AssetState.DIRTY; |
| 201 node._stateChangeController.add(AssetState.DIRTY); | 207 node._stateChangeController.add(AssetState.DIRTY); |
| 202 } | 208 } |
| 203 | 209 |
| 204 /// Marks the node as [AssetState.REMOVED]. | 210 /// Marks the node as [AssetState.REMOVED]. |
| 205 /// | 211 /// |
| 206 /// Once a node is marked as removed, it can't be marked as any other state. | 212 /// Once a node is marked as removed, it can't be marked as any other state. |
| 207 /// If a new asset is created with the same id, it will get a new node. | 213 /// If a new asset is created with the same id, it will get a new node. |
| 208 void setRemoved() { | 214 void setRemoved() { |
| 209 assert(node._state != AssetState.REMOVED); | 215 assert(node._state != AssetState.REMOVED); |
| 210 node._state = AssetState.REMOVED; | 216 node._state = AssetState.REMOVED; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 | 275 |
| 270 /// Whether this state is [AssetState.DIRTY]. | 276 /// Whether this state is [AssetState.DIRTY]. |
| 271 bool get isDirty => this == AssetState.DIRTY; | 277 bool get isDirty => this == AssetState.DIRTY; |
| 272 | 278 |
| 273 final String name; | 279 final String name; |
| 274 | 280 |
| 275 const AssetState._(this.name); | 281 const AssetState._(this.name); |
| 276 | 282 |
| 277 String toString() => name; | 283 String toString() => name; |
| 278 } | 284 } |
| OLD | NEW |