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 instance_view_element; | 5 library instance_view_element; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:html'; | 8 import 'dart:html'; |
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 15 matching lines...) Expand all Loading... |
26 import 'package:observatory/src/elements/nav/refresh.dart'; | 26 import 'package:observatory/src/elements/nav/refresh.dart'; |
27 import 'package:observatory/src/elements/nav/top_menu.dart'; | 27 import 'package:observatory/src/elements/nav/top_menu.dart'; |
28 import 'package:observatory/src/elements/nav/vm_menu.dart'; | 28 import 'package:observatory/src/elements/nav/vm_menu.dart'; |
29 import 'package:observatory/src/elements/object_common.dart'; | 29 import 'package:observatory/src/elements/object_common.dart'; |
30 import 'package:observatory/src/elements/source_inset.dart'; | 30 import 'package:observatory/src/elements/source_inset.dart'; |
31 import 'package:observatory/src/elements/source_link.dart'; | 31 import 'package:observatory/src/elements/source_link.dart'; |
32 import 'package:observatory/src/elements/view_footer.dart'; | 32 import 'package:observatory/src/elements/view_footer.dart'; |
33 import 'package:observatory/utils.dart'; | 33 import 'package:observatory/utils.dart'; |
34 | 34 |
35 class InstanceViewElement extends HtmlElement implements Renderable { | 35 class InstanceViewElement extends HtmlElement implements Renderable { |
36 static const tag = const Tag<InstanceViewElement>('instance-view', | 36 static const tag = |
37 dependencies: const [ | 37 const Tag<InstanceViewElement>('instance-view', dependencies: const [ |
38 ClassRefElement.tag, | 38 ClassRefElement.tag, |
39 ContextRefElement.tag, | 39 ContextRefElement.tag, |
40 CurlyBlockElement.tag, | 40 CurlyBlockElement.tag, |
41 FieldRefElement.tag, | 41 FieldRefElement.tag, |
42 FunctionRefElement.tag, | 42 FunctionRefElement.tag, |
43 InstanceRefElement.tag, | 43 InstanceRefElement.tag, |
44 NavClassMenuElement.tag, | 44 NavClassMenuElement.tag, |
45 NavLibraryMenuElement.tag, | 45 NavLibraryMenuElement.tag, |
46 NavTopMenuElement.tag, | 46 NavTopMenuElement.tag, |
47 NavVMMenuElement.tag, | 47 NavVMMenuElement.tag, |
48 NavIsolateMenuElement.tag, | 48 NavIsolateMenuElement.tag, |
49 NavRefreshElement.tag, | 49 NavRefreshElement.tag, |
50 NavNotifyElement.tag, | 50 NavNotifyElement.tag, |
51 ObjectCommonElement.tag, | 51 ObjectCommonElement.tag, |
52 SourceInsetElement.tag, | 52 SourceInsetElement.tag, |
53 SourceLinkElement.tag, | 53 SourceLinkElement.tag, |
54 ViewFooterElement.tag | 54 ViewFooterElement.tag |
55 ]); | 55 ]); |
56 | 56 |
57 RenderingScheduler<InstanceViewElement> _r; | 57 RenderingScheduler<InstanceViewElement> _r; |
58 | 58 |
59 Stream<RenderedEvent<InstanceViewElement>> get onRendered => _r.onRendered; | 59 Stream<RenderedEvent<InstanceViewElement>> get onRendered => _r.onRendered; |
60 | 60 |
61 M.VM _vm; | 61 M.VM _vm; |
62 M.IsolateRef _isolate; | 62 M.IsolateRef _isolate; |
63 M.EventRepository _events; | 63 M.EventRepository _events; |
64 M.NotificationRepository _notifications; | 64 M.NotificationRepository _notifications; |
65 M.Instance _instance; | 65 M.Instance _instance; |
66 M.LibraryRef _library; | 66 M.LibraryRef _library; |
67 M.InstanceRepository _instances; | 67 M.InstanceRepository _instances; |
68 M.ClassRepository _classes; | 68 M.ClassRepository _classes; |
69 M.RetainedSizeRepository _retainedSizes; | 69 M.RetainedSizeRepository _retainedSizes; |
70 M.ReachableSizeRepository _reachableSizes; | 70 M.ReachableSizeRepository _reachableSizes; |
71 M.InboundReferencesRepository _references; | 71 M.InboundReferencesRepository _references; |
72 M.RetainingPathRepository _retainingPaths; | 72 M.RetainingPathRepository _retainingPaths; |
73 M.ScriptRepository _scripts; | 73 M.ScriptRepository _scripts; |
74 M.EvalRepository _eval; | 74 M.EvalRepository _eval; |
75 M.TypeArguments _typeArguments; | 75 M.TypeArguments _typeArguments; |
76 M.TypeArgumentsRepository _arguments; | 76 M.TypeArgumentsRepository _arguments; |
77 M.BreakpointRepository _breakpoints; | 77 M.BreakpointRepository _breakpoints; |
78 M.FunctionRepository _functions; | 78 M.FunctionRepository _functions; |
79 M.SourceLocation _location; | 79 M.SourceLocation _location; |
80 | 80 |
81 | |
82 M.VMRef get vm => _vm; | 81 M.VMRef get vm => _vm; |
83 M.IsolateRef get isolate => _isolate; | 82 M.IsolateRef get isolate => _isolate; |
84 M.NotificationRepository get notifications => _notifications; | 83 M.NotificationRepository get notifications => _notifications; |
85 M.Instance get instance => _instance; | 84 M.Instance get instance => _instance; |
86 | 85 |
87 factory InstanceViewElement(M.VM vm, M.IsolateRef isolate, | 86 factory InstanceViewElement( |
88 M.Instance instance, | 87 M.VM vm, |
89 M.EventRepository events, | 88 M.IsolateRef isolate, |
90 M.NotificationRepository notifications, | 89 M.Instance instance, |
91 M.InstanceRepository instances, | 90 M.EventRepository events, |
92 M.ClassRepository classes, | 91 M.NotificationRepository notifications, |
93 M.RetainedSizeRepository retainedSizes, | 92 M.InstanceRepository instances, |
94 M.ReachableSizeRepository reachableSizes, | 93 M.ClassRepository classes, |
95 M.InboundReferencesRepository references, | 94 M.RetainedSizeRepository retainedSizes, |
96 M.RetainingPathRepository retainingPaths, | 95 M.ReachableSizeRepository reachableSizes, |
97 M.ScriptRepository scripts, | 96 M.InboundReferencesRepository references, |
98 M.EvalRepository eval, | 97 M.RetainingPathRepository retainingPaths, |
99 M.TypeArgumentsRepository arguments, | 98 M.ScriptRepository scripts, |
100 M.BreakpointRepository breakpoints, | 99 M.EvalRepository eval, |
101 M.FunctionRepository functions, | 100 M.TypeArgumentsRepository arguments, |
102 {RenderingQueue queue}) { | 101 M.BreakpointRepository breakpoints, |
| 102 M.FunctionRepository functions, |
| 103 {RenderingQueue queue}) { |
103 assert(vm != null); | 104 assert(vm != null); |
104 assert(isolate != null); | 105 assert(isolate != null); |
105 assert(events != null); | 106 assert(events != null); |
106 assert(notifications != null); | 107 assert(notifications != null); |
107 assert(instance != null); | 108 assert(instance != null); |
108 assert(instances != null); | 109 assert(instances != null); |
109 assert(classes != null); | 110 assert(classes != null); |
110 assert(retainedSizes != null); | 111 assert(retainedSizes != null); |
111 assert(reachableSizes != null); | 112 assert(reachableSizes != null); |
112 assert(references != null); | 113 assert(references != null); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 | 149 |
149 @override | 150 @override |
150 detached() { | 151 detached() { |
151 super.detached(); | 152 super.detached(); |
152 _r.disable(notify: true); | 153 _r.disable(notify: true); |
153 children = []; | 154 children = []; |
154 } | 155 } |
155 | 156 |
156 void render() { | 157 void render() { |
157 final content = [ | 158 final content = [ |
158 new HeadingElement.h2()..text = M.isAbstractType(_instance.kind) | 159 new HeadingElement.h2() |
159 ? 'type ${_instance.name}' | 160 ..text = M.isAbstractType(_instance.kind) |
160 : 'instance of ${_instance.clazz.name}', | 161 ? 'type ${_instance.name}' |
| 162 : 'instance of ${_instance.clazz.name}', |
161 new HRElement(), | 163 new HRElement(), |
162 new ObjectCommonElement(_isolate, _instance, _retainedSizes, | 164 new ObjectCommonElement(_isolate, _instance, _retainedSizes, |
163 _reachableSizes, _references, _retainingPaths, | 165 _reachableSizes, _references, _retainingPaths, _instances, |
164 _instances, queue: _r.queue), | 166 queue: _r.queue), |
165 new BRElement(), | 167 new BRElement(), |
166 new DivElement()..classes = ['memberList'] | 168 new DivElement() |
| 169 ..classes = ['memberList'] |
167 ..children = _createMembers(), | 170 ..children = _createMembers(), |
168 new HRElement(), | 171 new HRElement(), |
169 new EvalBoxElement(_isolate, _instance, _instances, _eval, | 172 new EvalBoxElement(_isolate, _instance, _instances, _eval, |
170 quickExpressions: const ['toString()', | 173 quickExpressions: const ['toString()', 'runtimeType'], |
171 'runtimeType'], | 174 queue: _r.queue) |
172 queue: _r.queue) | |
173 ]; | 175 ]; |
174 if (_location != null) { | 176 if (_location != null) { |
175 content.addAll([ | 177 content.addAll([ |
176 new HRElement(), | 178 new HRElement(), |
177 new SourceInsetElement(_isolate, _location, _scripts, _instances, | 179 new SourceInsetElement( |
178 _events, queue: _r.queue) | 180 _isolate, _location, _scripts, _instances, _events, |
| 181 queue: _r.queue) |
179 ]); | 182 ]); |
180 } | 183 } |
181 content.addAll([ | 184 content.addAll([new HRElement(), new ViewFooterElement(queue: _r.queue)]); |
182 new HRElement(), | |
183 new ViewFooterElement(queue: _r.queue) | |
184 ]); | |
185 children = [ | 185 children = [ |
186 navBar(_createMenu()), | 186 navBar(_createMenu()), |
187 new DivElement()..classes = ['content-centered-big'] | 187 new DivElement() |
| 188 ..classes = ['content-centered-big'] |
188 ..children = content | 189 ..children = content |
189 ]; | 190 ]; |
190 } | 191 } |
191 | 192 |
192 List<Element> _createMenu() { | 193 List<Element> _createMenu() { |
193 final menu = [ | 194 final menu = [ |
194 new NavTopMenuElement(queue: _r.queue), | 195 new NavTopMenuElement(queue: _r.queue), |
195 new NavVMMenuElement(_vm, _events, queue: _r.queue), | 196 new NavVMMenuElement(_vm, _events, queue: _r.queue), |
196 new NavIsolateMenuElement(_isolate, _events, queue: _r.queue) | 197 new NavIsolateMenuElement(_isolate, _events, queue: _r.queue) |
197 ]; | 198 ]; |
198 if (_library != null) { | 199 if (_library != null) { |
199 menu.add(new NavLibraryMenuElement(_isolate, _library, | 200 menu.add(new NavLibraryMenuElement(_isolate, _library, queue: _r.queue)); |
200 queue: _r.queue)); | |
201 } | 201 } |
202 menu.addAll([ | 202 menu.addAll([ |
203 new NavClassMenuElement(_isolate, _instance.clazz, queue: _r.queue), | 203 new NavClassMenuElement(_isolate, _instance.clazz, queue: _r.queue), |
204 navMenu('instance'), | 204 navMenu('instance'), |
205 new NavRefreshElement(queue: _r.queue) | 205 new NavRefreshElement(queue: _r.queue) |
206 ..onRefresh.listen((e) { | 206 ..onRefresh.listen((e) { |
207 e.element.disabled = true; | 207 e.element.disabled = true; |
208 _refresh(); | 208 _refresh(); |
209 }), | 209 }), |
210 new NavNotifyElement(_notifications, queue: _r.queue) | 210 new NavNotifyElement(_notifications, queue: _r.queue) |
211 ]); | 211 ]); |
212 return menu; | 212 return menu; |
213 } | 213 } |
214 | 214 |
215 List<Element> _createMembers() { | 215 List<Element> _createMembers() { |
216 final members = <Element>[]; | 216 final members = <Element>[]; |
217 if (_instance.valueAsString != null) { | 217 if (_instance.valueAsString != null) { |
218 members.add(new DivElement()..classes = ['memberItem'] | 218 members.add(new DivElement() |
| 219 ..classes = ['memberItem'] |
219 ..children = [ | 220 ..children = [ |
220 new DivElement()..classes = ['memberName'] | 221 new DivElement() |
| 222 ..classes = ['memberName'] |
221 ..text = _instance.kind == M.InstanceKind.string | 223 ..text = _instance.kind == M.InstanceKind.string |
222 ? 'value as literal' | 224 ? 'value as literal' |
223 : 'value', | 225 : 'value', |
224 new DivElement()..classes = ['memberValue'] | 226 new DivElement() |
| 227 ..classes = ['memberValue'] |
225 ..text = _instance.kind == M.InstanceKind.string | 228 ..text = _instance.kind == M.InstanceKind.string |
226 ? Utils.formatStringAsLiteral(_instance.valueAsString, | 229 ? Utils.formatStringAsLiteral( |
227 _instance.valueAsStringIsTruncated) | 230 _instance.valueAsString, _instance.valueAsStringIsTruncated) |
228 : _instance.valueAsString | 231 : _instance.valueAsString |
229 ]); | 232 ]); |
230 } | 233 } |
231 if (_instance.typeClass != null) { | 234 if (_instance.typeClass != null) { |
232 members.add(new DivElement()..classes = ['memberItem'] | 235 members.add(new DivElement() |
| 236 ..classes = ['memberItem'] |
233 ..children = [ | 237 ..children = [ |
234 new DivElement()..classes = ['memberName'] | 238 new DivElement() |
| 239 ..classes = ['memberName'] |
235 ..text = 'type class', | 240 ..text = 'type class', |
236 new DivElement()..classes = ['memberValue'] | 241 new DivElement() |
| 242 ..classes = ['memberValue'] |
237 ..children = [ | 243 ..children = [ |
238 new ClassRefElement(_isolate, _instance.typeClass, | 244 new ClassRefElement(_isolate, _instance.typeClass, |
239 queue: _r.queue) | 245 queue: _r.queue) |
240 ] | 246 ] |
241 ]); | 247 ]); |
242 } | 248 } |
243 if (_typeArguments != null && _typeArguments.types.isNotEmpty) { | 249 if (_typeArguments != null && _typeArguments.types.isNotEmpty) { |
244 members.add(new DivElement()..classes = ['memberItem'] | 250 members.add(new DivElement() |
| 251 ..classes = ['memberItem'] |
245 ..children = [ | 252 ..children = [ |
246 new DivElement()..classes = ['memberName'] | 253 new DivElement() |
| 254 ..classes = ['memberName'] |
247 ..text = 'type arguments', | 255 ..text = 'type arguments', |
248 new DivElement()..classes = ['memberValue'] | 256 new DivElement() |
249 ..children = ([ | 257 ..classes = ['memberValue'] |
250 new SpanElement()..text = '< ' | 258 ..children = ([new SpanElement()..text = '< '] |
251 ] | 259 ..addAll(_typeArguments.types.expand((type) => [ |
252 ..addAll(_typeArguments.types.expand((type) => [ | 260 new InstanceRefElement(_isolate, type, _instances, |
253 new InstanceRefElement(_isolate, type, _instances, queue: | 261 queue: _r.queue), |
254 _r.queue), | 262 new SpanElement()..text = ', ' |
255 new SpanElement()..text = ', ' | 263 ])) |
256 ])) | 264 ..removeLast() |
257 ..removeLast() | 265 ..add(new SpanElement()..text = ' >')) |
258 ..add(new SpanElement()..text = ' >')) | |
259 ]); | 266 ]); |
260 } | 267 } |
261 if (_instance.parameterizedClass != null) { | 268 if (_instance.parameterizedClass != null) { |
262 members.add(new DivElement()..classes = ['memberItem'] | 269 members.add(new DivElement() |
| 270 ..classes = ['memberItem'] |
263 ..children = [ | 271 ..children = [ |
264 new DivElement()..classes = ['memberName'] | 272 new DivElement() |
| 273 ..classes = ['memberName'] |
265 ..text = 'parameterized class', | 274 ..text = 'parameterized class', |
266 new DivElement()..classes = ['memberValue'] | 275 new DivElement() |
| 276 ..classes = ['memberValue'] |
267 ..children = [ | 277 ..children = [ |
268 new ClassRefElement(_isolate, _instance.parameterizedClass, | 278 new ClassRefElement(_isolate, _instance.parameterizedClass, |
269 queue: _r.queue) | 279 queue: _r.queue) |
270 ] | 280 ] |
271 ]); | 281 ]); |
272 } | 282 } |
273 if (_instance.parameterIndex != null) { | 283 if (_instance.parameterIndex != null) { |
274 members.add(new DivElement()..classes = ['memberItem'] | 284 members.add(new DivElement() |
| 285 ..classes = ['memberItem'] |
275 ..children = [ | 286 ..children = [ |
276 new DivElement()..classes = ['memberName'] | 287 new DivElement() |
| 288 ..classes = ['memberName'] |
277 ..text = 'parameter index', | 289 ..text = 'parameter index', |
278 new DivElement()..classes = ['memberValue'] | 290 new DivElement() |
| 291 ..classes = ['memberValue'] |
279 ..text = '${_instance.parameterIndex}' | 292 ..text = '${_instance.parameterIndex}' |
280 ]); | 293 ]); |
281 } | 294 } |
282 if (_instance.targetType != null) { | 295 if (_instance.targetType != null) { |
283 members.add(new DivElement()..classes = ['memberItem'] | 296 members.add(new DivElement() |
| 297 ..classes = ['memberItem'] |
284 ..children = [ | 298 ..children = [ |
285 new DivElement()..classes = ['memberName'] | 299 new DivElement() |
| 300 ..classes = ['memberName'] |
286 ..text = 'target type', | 301 ..text = 'target type', |
287 new DivElement()..classes = ['memberValue'] | 302 new DivElement() |
| 303 ..classes = ['memberValue'] |
288 ..children = [ | 304 ..children = [ |
289 new InstanceRefElement(_isolate, _instance.targetType, _instances, | 305 new InstanceRefElement(_isolate, _instance.targetType, _instances, |
290 queue: _r.queue) | 306 queue: _r.queue) |
291 ] | 307 ] |
292 ]); | 308 ]); |
293 } | 309 } |
294 if (_instance.bound != null) { | 310 if (_instance.bound != null) { |
295 members.add(new DivElement()..classes = ['memberItem'] | 311 members.add(new DivElement() |
| 312 ..classes = ['memberItem'] |
296 ..children = [ | 313 ..children = [ |
297 new DivElement()..classes = ['memberName'] | 314 new DivElement() |
| 315 ..classes = ['memberName'] |
298 ..text = 'bound', | 316 ..text = 'bound', |
299 new DivElement()..classes = ['memberValue'] | 317 new DivElement() |
| 318 ..classes = ['memberValue'] |
300 ..children = [ | 319 ..children = [ |
301 new InstanceRefElement(_isolate, _instance.bound, _instances, | 320 new InstanceRefElement(_isolate, _instance.bound, _instances, |
302 queue: _r.queue) | 321 queue: _r.queue) |
303 ] | 322 ] |
304 ]); | 323 ]); |
305 } | 324 } |
306 if (_instance.closureFunction != null) { | 325 if (_instance.closureFunction != null) { |
307 members.add(new DivElement()..classes = ['memberItem'] | 326 members.add(new DivElement() |
| 327 ..classes = ['memberItem'] |
308 ..children = [ | 328 ..children = [ |
309 new DivElement()..classes = ['memberName'] | 329 new DivElement() |
| 330 ..classes = ['memberName'] |
310 ..text = 'closure function', | 331 ..text = 'closure function', |
311 new DivElement()..classes = ['memberValue'] | 332 new DivElement() |
| 333 ..classes = ['memberValue'] |
312 ..children = [ | 334 ..children = [ |
313 new FunctionRefElement(_isolate, _instance.closureFunction, | 335 new FunctionRefElement(_isolate, _instance.closureFunction, |
314 queue: _r.queue) | 336 queue: _r.queue) |
315 ] | 337 ] |
316 ]); | 338 ]); |
317 } | 339 } |
318 if (_instance.closureContext != null) { | 340 if (_instance.closureContext != null) { |
319 members.add(new DivElement()..classes = ['memberItem'] | 341 members.add(new DivElement() |
| 342 ..classes = ['memberItem'] |
320 ..children = [ | 343 ..children = [ |
321 new DivElement()..classes = ['memberName'] | 344 new DivElement() |
| 345 ..classes = ['memberName'] |
322 ..text = 'closure context', | 346 ..text = 'closure context', |
323 new DivElement()..classes = ['memberValue'] | 347 new DivElement() |
| 348 ..classes = ['memberValue'] |
324 ..children = [ | 349 ..children = [ |
325 new ContextRefElement(_isolate, _instance.closureContext, | 350 new ContextRefElement(_isolate, _instance.closureContext, |
326 queue: _r.queue) | 351 queue: _r.queue) |
327 ] | 352 ] |
328 ]); | 353 ]); |
329 } | 354 } |
330 if (_instance.kind == M.InstanceKind.closure) { | 355 if (_instance.kind == M.InstanceKind.closure) { |
331 ButtonElement btn; | 356 ButtonElement btn; |
332 members.add(new DivElement()..classes = ['memberItem'] | 357 members.add(new DivElement() |
| 358 ..classes = ['memberItem'] |
333 ..children = [ | 359 ..children = [ |
334 new DivElement()..classes = ['memberName'] | 360 new DivElement() |
| 361 ..classes = ['memberName'] |
335 ..text = 'closure breakpoint', | 362 ..text = 'closure breakpoint', |
336 new DivElement()..classes = ['memberValue'] | 363 new DivElement() |
| 364 ..classes = ['memberValue'] |
337 ..children = [ | 365 ..children = [ |
338 btn = new ButtonElement() | 366 btn = new ButtonElement() |
339 ..text = _instance.activationBreakpoint == null | 367 ..text = _instance.activationBreakpoint == null |
340 ? 'break on activation' | 368 ? 'break on activation' |
341 : 'remove' | 369 : 'remove' |
342 ..onClick.listen((_) { | 370 ..onClick.listen((_) { |
343 btn.disabled = true; | 371 btn.disabled = true; |
344 _toggleBreakpoint(); | 372 _toggleBreakpoint(); |
345 }) | 373 }) |
346 ] | 374 ] |
347 ]); | 375 ]); |
348 } | 376 } |
349 | 377 |
350 if (_instance.nativeFields != null && _instance.nativeFields.isNotEmpty) { | 378 if (_instance.nativeFields != null && _instance.nativeFields.isNotEmpty) { |
351 int i = 0; | 379 int i = 0; |
352 members.add(new DivElement()..classes = ['memberItem'] | 380 members.add(new DivElement() |
| 381 ..classes = ['memberItem'] |
353 ..children = [ | 382 ..children = [ |
354 new DivElement()..classes = ['memberName'] | 383 new DivElement() |
| 384 ..classes = ['memberName'] |
355 ..text = 'native fields (${_instance.nativeFields.length})', | 385 ..text = 'native fields (${_instance.nativeFields.length})', |
356 new DivElement()..classes = ['memberName'] | 386 new DivElement() |
| 387 ..classes = ['memberName'] |
357 ..children = [ | 388 ..children = [ |
358 new CurlyBlockElement( | 389 new CurlyBlockElement( |
359 expanded: _instance.nativeFields.length <= 100, | 390 expanded: _instance.nativeFields.length <= 100, |
360 queue: _r.queue) | 391 queue: _r.queue) |
361 ..content = [ | 392 ..content = [ |
362 new DivElement()..classes = ['memberList'] | 393 new DivElement() |
363 ..children = _instance.nativeFields.map((f) => | 394 ..classes = ['memberList'] |
364 new DivElement()..classes = ['memberItem'] | 395 ..children = _instance.nativeFields |
365 ..children = [ | 396 .map((f) => new DivElement() |
366 new DivElement()..classes = ['memberName'] | 397 ..classes = ['memberItem'] |
367 ..text = '[ ${i++} ]', | 398 ..children = [ |
368 new DivElement()..classes = ['memberValue'] | 399 new DivElement() |
369 ..text = '[ ${f.value} ]' | 400 ..classes = ['memberName'] |
370 ]).toList() | 401 ..text = '[ ${i++} ]', |
| 402 new DivElement() |
| 403 ..classes = ['memberValue'] |
| 404 ..text = '[ ${f.value} ]' |
| 405 ]) |
| 406 .toList() |
371 ] | 407 ] |
372 ] | 408 ] |
373 ]); | 409 ]); |
374 } | 410 } |
375 | 411 |
376 if (_instance.fields != null && _instance.fields.isNotEmpty) { | 412 if (_instance.fields != null && _instance.fields.isNotEmpty) { |
377 final fields = _instance.fields.toList(); | 413 final fields = _instance.fields.toList(); |
378 members.add(new DivElement()..classes = ['memberItem'] | 414 members.add(new DivElement() |
| 415 ..classes = ['memberItem'] |
379 ..children = [ | 416 ..children = [ |
380 new DivElement()..classes = ['memberName'] | 417 new DivElement() |
| 418 ..classes = ['memberName'] |
381 ..text = 'fields (${fields.length})', | 419 ..text = 'fields (${fields.length})', |
382 new DivElement()..classes = ['memberName'] | 420 new DivElement() |
| 421 ..classes = ['memberName'] |
383 ..children = [ | 422 ..children = [ |
384 new CurlyBlockElement( | 423 new CurlyBlockElement( |
385 expanded: fields.length <= 100, | 424 expanded: fields.length <= 100, queue: _r.queue) |
386 queue: _r.queue) | |
387 ..content = [ | 425 ..content = [ |
388 new DivElement()..classes = ['memberList'] | 426 new DivElement() |
389 ..children = fields.map((f) => | 427 ..classes = ['memberList'] |
390 new DivElement()..classes = ['memberItem'] | 428 ..children = fields |
391 ..children = [ | 429 .map((f) => new DivElement() |
392 new DivElement()..classes = ['memberName'] | 430 ..classes = ['memberItem'] |
393 ..children = [ | 431 ..children = [ |
394 new FieldRefElement(_isolate, f.decl, _instances, | 432 new DivElement() |
395 queue: _r.queue) | 433 ..classes = ['memberName'] |
396 ], | 434 ..children = [ |
397 new DivElement()..classes = ['memberValue'] | 435 new FieldRefElement( |
398 ..children = [ | 436 _isolate, f.decl, _instances, |
399 new SpanElement()..text = ' = ', | 437 queue: _r.queue) |
400 anyRef(_isolate, f.value, _instances, | 438 ], |
401 queue: _r.queue) | 439 new DivElement() |
402 ] | 440 ..classes = ['memberValue'] |
403 ]).toList() | 441 ..children = [ |
| 442 new SpanElement()..text = ' = ', |
| 443 anyRef(_isolate, f.value, _instances, |
| 444 queue: _r.queue) |
| 445 ] |
| 446 ]) |
| 447 .toList() |
404 ] | 448 ] |
405 ] | 449 ] |
406 ]); | 450 ]); |
407 } | 451 } |
408 | 452 |
409 if (_instance.elements != null && _instance.elements.isNotEmpty) { | 453 if (_instance.elements != null && _instance.elements.isNotEmpty) { |
410 final elements = _instance.elements.toList(); | 454 final elements = _instance.elements.toList(); |
411 int i = 0; | 455 int i = 0; |
412 members.add(new DivElement()..classes = ['memberItem'] | 456 members.add(new DivElement() |
| 457 ..classes = ['memberItem'] |
413 ..children = [ | 458 ..children = [ |
414 new DivElement()..classes = ['memberName'] | 459 new DivElement() |
| 460 ..classes = ['memberName'] |
415 ..text = 'elements (${_instance.length})', | 461 ..text = 'elements (${_instance.length})', |
416 new DivElement()..classes = ['memberValue'] | 462 new DivElement() |
| 463 ..classes = ['memberValue'] |
417 ..children = [ | 464 ..children = [ |
418 new CurlyBlockElement( | 465 new CurlyBlockElement( |
419 expanded: elements.length <= 100, | 466 expanded: elements.length <= 100, queue: _r.queue) |
420 queue: _r.queue) | |
421 ..content = [ | 467 ..content = [ |
422 new DivElement()..classes = ['memberList'] | 468 new DivElement() |
423 ..children = elements.map((element) => | 469 ..classes = ['memberList'] |
424 new DivElement()..classes = ['memberItem'] | 470 ..children = elements |
425 ..children = [ | 471 .map((element) => new DivElement() |
426 new DivElement()..classes = ['memberName'] | 472 ..classes = ['memberItem'] |
427 ..text = '[ ${i++} ]', | 473 ..children = [ |
428 new DivElement()..classes = ['memberValue'] | 474 new DivElement() |
429 ..children = [ | 475 ..classes = ['memberName'] |
430 anyRef(_isolate, element, _instances, | 476 ..text = '[ ${i++} ]', |
431 queue: _r.queue) | 477 new DivElement() |
432 ] | 478 ..classes = ['memberValue'] |
433 ]).toList() | 479 ..children = [ |
| 480 anyRef(_isolate, element, _instances, |
| 481 queue: _r.queue) |
| 482 ] |
| 483 ]) |
| 484 .toList() |
434 ] | 485 ] |
435 ] | 486 ] |
436 ]); | 487 ]); |
437 if (_instance.length != elements.length) { | 488 if (_instance.length != elements.length) { |
438 members.add(new DivElement()..classes = ['memberItem'] | 489 members.add(new DivElement() |
| 490 ..classes = ['memberItem'] |
439 ..children = [ | 491 ..children = [ |
440 new DivElement()..classes = ['memberName'] | 492 new DivElement() |
| 493 ..classes = ['memberName'] |
441 ..text = '...', | 494 ..text = '...', |
442 new DivElement()..classes = ['memberValue'] | 495 new DivElement() |
| 496 ..classes = ['memberValue'] |
443 ..text = '${_instance.length - elements.length} omitted elements' | 497 ..text = '${_instance.length - elements.length} omitted elements' |
444 ]); | 498 ]); |
445 } | 499 } |
446 } | 500 } |
447 | 501 |
448 if (_instance.associations != null && _instance.associations.isNotEmpty) { | 502 if (_instance.associations != null && _instance.associations.isNotEmpty) { |
449 final associations = _instance.associations.toList(); | 503 final associations = _instance.associations.toList(); |
450 members.add(new DivElement()..classes = ['memberItem'] | 504 members.add(new DivElement() |
| 505 ..classes = ['memberItem'] |
451 ..children = [ | 506 ..children = [ |
452 new DivElement()..classes = ['memberName'] | 507 new DivElement() |
| 508 ..classes = ['memberName'] |
453 ..text = 'associations (${_instance.length})', | 509 ..text = 'associations (${_instance.length})', |
454 new DivElement()..classes = ['memberName'] | 510 new DivElement() |
| 511 ..classes = ['memberName'] |
455 ..children = [ | 512 ..children = [ |
456 new CurlyBlockElement( | 513 new CurlyBlockElement( |
457 expanded: associations.length <= 100, | 514 expanded: associations.length <= 100, queue: _r.queue) |
458 queue: _r.queue) | |
459 ..content = [ | 515 ..content = [ |
460 new DivElement()..classes = ['memberList'] | 516 new DivElement() |
461 ..children = associations.map((a) => | 517 ..classes = ['memberList'] |
462 new DivElement()..classes = ['memberItem'] | 518 ..children = associations |
463 ..children = [ | 519 .map((a) => new DivElement() |
464 new DivElement()..classes = ['memberName'] | 520 ..classes = ['memberItem'] |
465 ..children = [ | 521 ..children = [ |
466 new SpanElement()..text = '[ ', | 522 new DivElement() |
467 anyRef(_isolate, a.key, _instances, | 523 ..classes = ['memberName'] |
468 queue: _r.queue), | 524 ..children = [ |
469 new SpanElement()..text = ' ]', | 525 new SpanElement()..text = '[ ', |
470 ], | 526 anyRef(_isolate, a.key, _instances, |
471 new DivElement()..classes = ['memberValue'] | 527 queue: _r.queue), |
472 ..children = [ | 528 new SpanElement()..text = ' ]', |
473 anyRef(_isolate, a.value, _instances, | 529 ], |
474 queue: _r.queue) | 530 new DivElement() |
475 ] | 531 ..classes = ['memberValue'] |
476 ]).toList() | 532 ..children = [ |
| 533 anyRef(_isolate, a.value, _instances, |
| 534 queue: _r.queue) |
| 535 ] |
| 536 ]) |
| 537 .toList() |
477 ] | 538 ] |
478 ] | 539 ] |
479 ]); | 540 ]); |
480 if (_instance.length != associations.length) { | 541 if (_instance.length != associations.length) { |
481 members.add(new DivElement()..classes = ['memberItem'] | 542 members.add(new DivElement() |
| 543 ..classes = ['memberItem'] |
482 ..children = [ | 544 ..children = [ |
483 new DivElement()..classes = ['memberName'] | 545 new DivElement() |
| 546 ..classes = ['memberName'] |
484 ..text = '...', | 547 ..text = '...', |
485 new DivElement()..classes = ['memberValue'] | 548 new DivElement() |
| 549 ..classes = ['memberValue'] |
486 ..text = '${_instance.length - associations.length} ' | 550 ..text = '${_instance.length - associations.length} ' |
487 'omitted elements' | 551 'omitted elements' |
488 ]); | 552 ]); |
489 } | 553 } |
490 } | 554 } |
491 | 555 |
492 if (_instance.typedElements != null && _instance.typedElements.isNotEmpty) { | 556 if (_instance.typedElements != null && _instance.typedElements.isNotEmpty) { |
493 final typedElements = _instance.typedElements.toList(); | 557 final typedElements = _instance.typedElements.toList(); |
494 int i = 0; | 558 int i = 0; |
495 members.add(new DivElement()..classes = ['memberItem'] | 559 members.add(new DivElement() |
| 560 ..classes = ['memberItem'] |
496 ..children = [ | 561 ..children = [ |
497 new DivElement()..classes = ['memberName'] | 562 new DivElement() |
| 563 ..classes = ['memberName'] |
498 ..text = 'elements (${_instance.length})', | 564 ..text = 'elements (${_instance.length})', |
499 new DivElement()..classes = ['memberValue'] | 565 new DivElement() |
| 566 ..classes = ['memberValue'] |
500 ..children = [ | 567 ..children = [ |
501 new CurlyBlockElement( | 568 new CurlyBlockElement( |
502 expanded: typedElements.length <= 100, | 569 expanded: typedElements.length <= 100, queue: _r.queue) |
503 queue: _r.queue) | |
504 ..content = [ | 570 ..content = [ |
505 new DivElement()..classes = ['memberList'] | 571 new DivElement() |
506 ..children = typedElements.map((e) => | 572 ..classes = ['memberList'] |
507 new DivElement()..classes = ['memberItem'] | 573 ..children = typedElements |
508 ..children = [ | 574 .map((e) => new DivElement() |
509 new DivElement()..classes = ['memberName'] | 575 ..classes = ['memberItem'] |
510 ..text = '[ ${i++} ]', | 576 ..children = [ |
511 new DivElement()..classes = ['memberValue'] | 577 new DivElement() |
512 ..text = '$e' | 578 ..classes = ['memberName'] |
513 ]).toList() | 579 ..text = '[ ${i++} ]', |
| 580 new DivElement() |
| 581 ..classes = ['memberValue'] |
| 582 ..text = '$e' |
| 583 ]) |
| 584 .toList() |
514 ] | 585 ] |
515 ] | 586 ] |
516 ]); | 587 ]); |
517 if (_instance.length != typedElements.length) { | 588 if (_instance.length != typedElements.length) { |
518 members.add(new DivElement()..classes = ['memberItem'] | 589 members.add(new DivElement() |
519 ..children = [ | 590 ..classes = ['memberItem'] |
520 new DivElement()..classes = ['memberName'] | 591 ..children = [ |
| 592 new DivElement() |
| 593 ..classes = ['memberName'] |
521 ..text = '...', | 594 ..text = '...', |
522 new DivElement()..classes = ['memberValue'] | 595 new DivElement() |
| 596 ..classes = ['memberValue'] |
523 ..text = '${_instance.length - typedElements.length} ' | 597 ..text = '${_instance.length - typedElements.length} ' |
524 'omitted elements' | 598 'omitted elements' |
525 ]); | 599 ]); |
526 } | 600 } |
527 } | 601 } |
528 | 602 |
529 if (_instance.kind == M.InstanceKind.regExp) { | 603 if (_instance.kind == M.InstanceKind.regExp) { |
530 members.addAll([ | 604 members.addAll([ |
531 new DivElement()..classes = ['memberItem'] | 605 new DivElement() |
532 ..children = [ | 606 ..classes = ['memberItem'] |
533 new DivElement()..classes = ['memberName'] | 607 ..children = [ |
| 608 new DivElement() |
| 609 ..classes = ['memberName'] |
534 ..text = 'pattern', | 610 ..text = 'pattern', |
535 new DivElement()..classes = ['memberValue'] | 611 new DivElement() |
| 612 ..classes = ['memberValue'] |
536 ..children = [ | 613 ..children = [ |
537 anyRef(_isolate, _instance.pattern, _instances, queue: _r.queue) | 614 anyRef(_isolate, _instance.pattern, _instances, queue: _r.queue) |
538 ] | 615 ] |
539 ], | 616 ], |
540 new DivElement()..classes = ['memberItem'] | 617 new DivElement() |
541 ..children = [ | 618 ..classes = ['memberItem'] |
542 new DivElement()..classes = ['memberName'] | 619 ..children = [ |
| 620 new DivElement() |
| 621 ..classes = ['memberName'] |
543 ..text = 'isCaseSensitive', | 622 ..text = 'isCaseSensitive', |
544 new DivElement()..classes = ['memberValue'] | 623 new DivElement() |
| 624 ..classes = ['memberValue'] |
545 ..text = _instance.isCaseSensitive ? 'yes' : 'no' | 625 ..text = _instance.isCaseSensitive ? 'yes' : 'no' |
546 ], | 626 ], |
547 new DivElement()..classes = ['memberItem'] | 627 new DivElement() |
548 ..children = [ | 628 ..classes = ['memberItem'] |
549 new DivElement()..classes = ['memberName'] | 629 ..children = [ |
| 630 new DivElement() |
| 631 ..classes = ['memberName'] |
550 ..text = 'isMultiLine', | 632 ..text = 'isMultiLine', |
551 new DivElement()..classes = ['memberValue'] | 633 new DivElement() |
| 634 ..classes = ['memberValue'] |
552 ..text = _instance.isMultiLine ? 'yes' : 'no' | 635 ..text = _instance.isMultiLine ? 'yes' : 'no' |
553 ], | 636 ], |
554 new DivElement()..classes = ['memberItem'] | 637 new DivElement() |
555 ..children = [ | 638 ..classes = ['memberItem'] |
556 new DivElement()..classes = ['memberName'] | 639 ..children = [ |
| 640 new DivElement() |
| 641 ..classes = ['memberName'] |
557 ..text = 'oneByteFunction', | 642 ..text = 'oneByteFunction', |
558 new DivElement()..classes = ['memberValue'] | 643 new DivElement() |
| 644 ..classes = ['memberValue'] |
559 ..children = [ | 645 ..children = [ |
560 new FunctionRefElement(_isolate, _instance.oneByteFunction, | 646 new FunctionRefElement(_isolate, _instance.oneByteFunction, |
561 queue: _r.queue) | 647 queue: _r.queue) |
562 ] | 648 ] |
563 ], | 649 ], |
564 new DivElement()..classes = ['memberItem'] | 650 new DivElement() |
565 ..children = [ | 651 ..classes = ['memberItem'] |
566 new DivElement()..classes = ['memberName'] | 652 ..children = [ |
| 653 new DivElement() |
| 654 ..classes = ['memberName'] |
567 ..text = 'twoByteFunction', | 655 ..text = 'twoByteFunction', |
568 new DivElement()..classes = ['memberValue'] | 656 new DivElement() |
| 657 ..classes = ['memberValue'] |
569 ..children = [ | 658 ..children = [ |
570 new FunctionRefElement(_isolate, _instance.twoByteFunction, | 659 new FunctionRefElement(_isolate, _instance.twoByteFunction, |
571 queue: _r.queue) | 660 queue: _r.queue) |
572 ] | 661 ] |
573 ], | 662 ], |
574 new DivElement()..classes = ['memberItem'] | 663 new DivElement() |
575 ..children = [ | 664 ..classes = ['memberItem'] |
576 new DivElement()..classes = ['memberName'] | 665 ..children = [ |
| 666 new DivElement() |
| 667 ..classes = ['memberName'] |
577 ..text = 'externalOneByteFunction', | 668 ..text = 'externalOneByteFunction', |
578 new DivElement()..classes = ['memberValue'] | 669 new DivElement() |
579 ..children = [ | 670 ..classes = ['memberValue'] |
580 new FunctionRefElement(_isolate, | 671 ..children = [ |
581 _instance.externalOneByteFunction, | 672 new FunctionRefElement( |
582 queue: _r.queue) | 673 _isolate, _instance.externalOneByteFunction, |
583 ] | 674 queue: _r.queue) |
584 ], | 675 ] |
585 new DivElement()..classes = ['memberItem'] | 676 ], |
586 ..children = [ | 677 new DivElement() |
587 new DivElement()..classes = ['memberName'] | 678 ..classes = ['memberItem'] |
| 679 ..children = [ |
| 680 new DivElement() |
| 681 ..classes = ['memberName'] |
588 ..text = 'externalTwoByteFunction', | 682 ..text = 'externalTwoByteFunction', |
589 new DivElement()..classes = ['memberValue'] | 683 new DivElement() |
590 ..children = [ | 684 ..classes = ['memberValue'] |
591 new FunctionRefElement(_isolate, | 685 ..children = [ |
592 _instance.externalTwoByteFunction, | 686 new FunctionRefElement( |
593 queue: _r.queue) | 687 _isolate, _instance.externalTwoByteFunction, |
594 ] | 688 queue: _r.queue) |
595 ], | 689 ] |
596 new DivElement()..classes = ['memberItem'] | 690 ], |
597 ..children = [ | 691 new DivElement() |
598 new DivElement()..classes = ['memberName'] | 692 ..classes = ['memberItem'] |
| 693 ..children = [ |
| 694 new DivElement() |
| 695 ..classes = ['memberName'] |
599 ..text = 'oneByteBytecode', | 696 ..text = 'oneByteBytecode', |
600 new DivElement()..classes = ['memberValue'] | 697 new DivElement() |
601 ..children = [ | 698 ..classes = ['memberValue'] |
602 new InstanceRefElement(_isolate, _instance.oneByteBytecode, | 699 ..children = [ |
603 _instances, queue: _r.queue) | 700 new InstanceRefElement( |
604 ] | 701 _isolate, _instance.oneByteBytecode, _instances, |
605 ], | 702 queue: _r.queue) |
606 new DivElement()..classes = ['memberItem'] | 703 ] |
607 ..children = [ | 704 ], |
608 new DivElement()..classes = ['memberName'] | 705 new DivElement() |
| 706 ..classes = ['memberItem'] |
| 707 ..children = [ |
| 708 new DivElement() |
| 709 ..classes = ['memberName'] |
609 ..text = 'twoByteBytecode', | 710 ..text = 'twoByteBytecode', |
610 new DivElement()..classes = ['memberValue'] | 711 new DivElement() |
611 ..children = [ | 712 ..classes = ['memberValue'] |
612 new InstanceRefElement(_isolate, _instance.twoByteBytecode, | 713 ..children = [ |
613 _instances, queue: _r.queue) | 714 new InstanceRefElement( |
| 715 _isolate, _instance.twoByteBytecode, _instances, |
| 716 queue: _r.queue) |
614 ] | 717 ] |
615 ] | 718 ] |
616 ]); | 719 ]); |
617 } | 720 } |
618 | 721 |
619 if (_instance.kind == M.InstanceKind.mirrorReference) { | 722 if (_instance.kind == M.InstanceKind.mirrorReference) { |
620 members.add(new DivElement()..classes = ['memberItem'] | 723 members.add(new DivElement() |
| 724 ..classes = ['memberItem'] |
621 ..children = [ | 725 ..children = [ |
622 new DivElement()..classes = ['memberName'] | 726 new DivElement() |
| 727 ..classes = ['memberName'] |
623 ..text = 'referent', | 728 ..text = 'referent', |
624 new DivElement()..classes = ['memberValue'] | 729 new DivElement() |
| 730 ..classes = ['memberValue'] |
625 ..children = [ | 731 ..children = [ |
626 new ContextRefElement(_isolate, _instance.referent, | 732 new ContextRefElement(_isolate, _instance.referent, |
627 queue: _r.queue) | 733 queue: _r.queue) |
628 ] | 734 ] |
629 ]); | 735 ]); |
630 } | 736 } |
631 if (_instance.kind == M.InstanceKind.weakProperty) { | 737 if (_instance.kind == M.InstanceKind.weakProperty) { |
632 members.addAll([ | 738 members.addAll([ |
633 new DivElement()..classes = ['memberItem'] | 739 new DivElement() |
634 ..children = [ | 740 ..classes = ['memberItem'] |
635 new DivElement()..classes = ['memberName'] | 741 ..children = [ |
| 742 new DivElement() |
| 743 ..classes = ['memberName'] |
636 ..text = 'key', | 744 ..text = 'key', |
637 new DivElement()..classes = ['memberValue'] | 745 new DivElement() |
| 746 ..classes = ['memberValue'] |
638 ..children = [ | 747 ..children = [ |
639 new InstanceRefElement(_isolate, _instance.key, _instances, | 748 new InstanceRefElement(_isolate, _instance.key, _instances, |
640 queue: _r.queue), | 749 queue: _r.queue), |
641 ] | 750 ] |
642 ], | 751 ], |
643 new DivElement()..classes = ['memberItem'] | 752 new DivElement() |
644 ..children = [ | 753 ..classes = ['memberItem'] |
645 new DivElement()..classes = ['memberName'] | 754 ..children = [ |
| 755 new DivElement() |
| 756 ..classes = ['memberName'] |
646 ..text = 'value', | 757 ..text = 'value', |
647 new DivElement()..classes = ['memberValue'] | 758 new DivElement() |
| 759 ..classes = ['memberValue'] |
648 ..children = [ | 760 ..children = [ |
649 new InstanceRefElement(_isolate, _instance.value, _instances, | 761 new InstanceRefElement(_isolate, _instance.value, _instances, |
650 queue: _r.queue), | 762 queue: _r.queue), |
651 ] | 763 ] |
652 ] | 764 ] |
653 ]); | 765 ]); |
654 } | 766 } |
655 return members; | 767 return members; |
656 } | 768 } |
657 | 769 |
658 Future _refresh() async { | 770 Future _refresh() async { |
659 _instance = await _instances.get(_isolate, _instance.id); | 771 _instance = await _instances.get(_isolate, _instance.id); |
660 await _loadExtraData(); | 772 await _loadExtraData(); |
661 _r.dirty(); | 773 _r.dirty(); |
662 } | 774 } |
663 | 775 |
664 Future _loadExtraData() async { | 776 Future _loadExtraData() async { |
665 _library = (await _classes.get(_isolate, _instance.clazz.id)).library; | 777 _library = (await _classes.get(_isolate, _instance.clazz.id)).library; |
666 if (_instance.typeArguments != null) { | 778 if (_instance.typeArguments != null) { |
667 _typeArguments = await _arguments.get(_isolate, | 779 _typeArguments = |
668 _instance.typeArguments.id); | 780 await _arguments.get(_isolate, _instance.typeArguments.id); |
669 } else { | 781 } else { |
670 _typeArguments = null; | 782 _typeArguments = null; |
671 } | 783 } |
672 if (_instance.closureFunction != null) { | 784 if (_instance.closureFunction != null) { |
673 _location = (await _functions.get(_isolate, | 785 _location = (await _functions.get(_isolate, _instance.closureFunction.id)) |
674 _instance.closureFunction.id)).location; | 786 .location; |
675 } else if (_instance.typeClass != null) { | 787 } else if (_instance.typeClass != null) { |
676 _location = (await _classes.get(_isolate, | 788 _location = |
677 _instance.typeClass.id)).location; | 789 (await _classes.get(_isolate, _instance.typeClass.id)).location; |
678 } | 790 } |
679 _r.dirty(); | 791 _r.dirty(); |
680 } | 792 } |
681 | 793 |
682 Future _toggleBreakpoint() async { | 794 Future _toggleBreakpoint() async { |
683 if (_instance.activationBreakpoint == null) { | 795 if (_instance.activationBreakpoint == null) { |
684 await _breakpoints.addOnActivation(_isolate, _instance); | 796 await _breakpoints.addOnActivation(_isolate, _instance); |
685 } else { | 797 } else { |
686 await _breakpoints.remove(_isolate, _instance.activationBreakpoint); | 798 await _breakpoints.remove(_isolate, _instance.activationBreakpoint); |
687 } | 799 } |
688 await _refresh(); | 800 await _refresh(); |
689 } | 801 } |
690 } | 802 } |
OLD | NEW |