| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 part of service; | |
| 6 | |
| 7 /// Recursively upgrades all [ServiceObject]s inside [collection] which must | |
| 8 /// be an [ObservableMap] or an [ObservableList]. Upgraded elements will be | |
| 9 /// associated with [vm] and [isolate]. | |
| 10 void upgradeCollection(collection, VM vm, Isolate isolate) { | |
| 11 if (collection is ObservableMap) { | |
| 12 _upgradeObservableMap(collection, vm, isolate); | |
| 13 } else if (collection is ObservableList) { | |
| 14 _upgradeObservableList(collection, vm, isolate); | |
| 15 } | |
| 16 } | |
| 17 | |
| 18 void _upgradeObservableMap(ObservableMap map, VM vm, Isolate isolate) { | |
| 19 map.forEach((k, v) { | |
| 20 if ((v is ObservableMap) && ServiceObject.isServiceMap(v)) { | |
| 21 map[k] = v = _upgradeToServiceObject(vm, isolate, v); | |
| 22 } else if (v is ObservableList) { | |
| 23 _upgradeObservableList(v, vm, isolate); | |
| 24 } else if (v is ObservableMap) { | |
| 25 _upgradeObservableMap(v, vm, isolate); | |
| 26 } | |
| 27 }); | |
| 28 } | |
| 29 | |
| 30 void _upgradeObservableList(ObservableList list, VM vm, Isolate isolate) { | |
| 31 for (var i = 0; i < list.length; i++) { | |
| 32 var v = list[i]; | |
| 33 if ((v is ObservableMap) && ServiceObject.isServiceMap(v)) { | |
| 34 list[i] = _upgradeToServiceObject(vm, isolate, v); | |
| 35 } else if (v is ObservableList) { | |
| 36 _upgradeObservableList(v, vm, isolate); | |
| 37 } else if (v is ObservableMap) { | |
| 38 _upgradeObservableMap(v, vm, isolate); | |
| 39 } | |
| 40 } | |
| 41 } | |
| 42 | |
| 43 /// Upgrades response ([m]) from [vm] and [isolate] to a [ServiceObject]. | |
| 44 /// This acts like a factory which consumes an ObservableMap and returns | |
| 45 /// a fully upgraded ServiceObject. | |
| 46 ServiceObject _upgradeToServiceObject(VM vm, Isolate isolate, ObservableMap m) { | |
| 47 if (m == null) { | |
| 48 return null; | |
| 49 } | |
| 50 if (!ServiceObject.isServiceMap(m)) { | |
| 51 Logger.root.severe("Malformed service object: $m"); | |
| 52 } | |
| 53 assert(ServiceObject.isServiceMap(m)); | |
| 54 var type = ServiceObject.stripRef(m['type']); | |
| 55 switch (type) { | |
| 56 case 'Error': | |
| 57 if (isolate != null) { | |
| 58 return new ServiceError.fromMap(isolate, m); | |
| 59 } else { | |
| 60 return new ServiceError.fromMap(vm, m); | |
| 61 } | |
| 62 break; | |
| 63 case 'Script': | |
| 64 return isolate.scripts.putIfAbsent(m); | |
| 65 case 'Code': | |
| 66 return isolate.codes.putIfAbsent(m); | |
| 67 case 'Isolate': | |
| 68 return vm.isolates.getIsolateFromMap(m); | |
| 69 case 'Class': | |
| 70 return isolate.classes.putIfAbsent(m); | |
| 71 case 'Function': | |
| 72 return isolate.functions.putIfAbsent(m); | |
| 73 case 'VM': | |
| 74 return vm.update(m); | |
| 75 } | |
| 76 return new ServiceMap.fromMap(isolate, m); | |
| 77 } | |
| OLD | NEW |