| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 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 | 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 class_tree_element; | 5 library class_tree_element; |
| 6 | 6 |
| 7 import 'dart:html'; | 7 import 'dart:html'; |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 import 'package:observatory/models.dart' as M; | 9 import 'package:observatory/models.dart' as M; |
| 10 import 'package:observatory/src/elements/class_ref.dart'; | 10 import 'package:observatory/src/elements/class_ref.dart'; |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 _tree = new VirtualTreeElement(_create, _update, _children, | 108 _tree = new VirtualTreeElement(_create, _update, _children, |
| 109 items: [_object], queue: _r.queue); | 109 items: [_object], queue: _r.queue); |
| 110 _tree.expand(_object, autoExpandSingleChildNodes: true); | 110 _tree.expand(_object, autoExpandSingleChildNodes: true); |
| 111 return _tree; | 111 return _tree; |
| 112 } | 112 } |
| 113 | 113 |
| 114 Future _refresh() async { | 114 Future _refresh() async { |
| 115 _object = null; | 115 _object = null; |
| 116 _subclasses.clear(); | 116 _subclasses.clear(); |
| 117 _mixins.clear(); | 117 _mixins.clear(); |
| 118 _object = await _register(await _classes.getObject()); | 118 _object = await _register(await _classes.getObject(_isolate)); |
| 119 _r.dirty(); | 119 _r.dirty(); |
| 120 } | 120 } |
| 121 | 121 |
| 122 Future<M.Class> _register(M.Class cls) async { | 122 Future<M.Class> _register(M.Class cls) async { |
| 123 _subclasses[cls.id] = await Future.wait( | 123 _subclasses[cls.id] = await Future.wait( |
| 124 (await Future.wait(cls.subclasses.map(_getActualChildrens))) | 124 (await Future.wait(cls.subclasses.map(_getActualChildrens))) |
| 125 .expand((f) => f) | 125 .expand((f) => f) |
| 126 .map(_register) | 126 .map(_register) |
| 127 ); | 127 ); |
| 128 return cls; | 128 return cls; |
| 129 } | 129 } |
| 130 | 130 |
| 131 Future<Iterable<M.Class>> _getActualChildrens(M.ClassRef ref) async { | 131 Future<Iterable<M.Class>> _getActualChildrens(M.ClassRef ref) async { |
| 132 var cls = await _classes.get(ref.id); | 132 var cls = await _classes.get(_isolate, ref.id); |
| 133 if (cls.isPatch) { | 133 if (cls.isPatch) { |
| 134 return const []; | 134 return const []; |
| 135 } | 135 } |
| 136 if (cls.mixin == null) { | 136 if (cls.mixin == null) { |
| 137 return [cls]; | 137 return [cls]; |
| 138 } | 138 } |
| 139 return (await Future.wait(cls.subclasses.map(_getActualChildrens))) | 139 return (await Future.wait(cls.subclasses.map(_getActualChildrens))) |
| 140 .expand((f) => f) | 140 .expand((f) => f) |
| 141 ..forEach((subcls) { | 141 ..forEach((subcls) { |
| 142 _mixins[subcls.id] = (_mixins[subcls.id] ?? [])..add(cls.mixin); | 142 _mixins[subcls.id] = (_mixins[subcls.id] ?? [])..add(cls.mixin); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 : new ClassRefElement(_isolate, type.typeClass, queue: _r.queue) | 176 : new ClassRefElement(_isolate, type.typeClass, queue: _r.queue) |
| 177 ]).toList(); | 177 ]).toList(); |
| 178 children.first.text = ' with '; | 178 children.first.text = ' with '; |
| 179 return children; | 179 return children; |
| 180 } | 180 } |
| 181 | 181 |
| 182 Iterable<M.Class> _children(M.Class cls) { | 182 Iterable<M.Class> _children(M.Class cls) { |
| 183 return _subclasses[cls.id]; | 183 return _subclasses[cls.id]; |
| 184 } | 184 } |
| 185 } | 185 } |
| OLD | NEW |