Index: runtime/bin/vmservice/observatory/lib/src/elements/inbound_reference.dart |
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/inbound_reference.dart b/runtime/bin/vmservice/observatory/lib/src/elements/inbound_reference.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7da3a750b6d5a6f8af59eb1b33b13d8b02cb9388 |
--- /dev/null |
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/inbound_reference.dart |
@@ -0,0 +1,48 @@ |
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library instance_ref_element; |
+ |
+import 'package:polymer/polymer.dart'; |
+import 'package:observatory/service.dart'; |
+import 'service_ref.dart'; |
+ |
+@CustomTag('inbound-reference') |
+class InboundReferenceElement extends ServiceRefElement { |
+ InboundReferenceElement.created() : super.created(); |
+ |
+ dynamic get slot => ref['slot']; |
+ bool get slotIsNum => slot is num; |
koda
2014/08/21 18:21:20
Consider something more descriptive, like "array i
Cutch
2014/08/21 20:08:55
slotIsListIndex
|
+ bool get slotIsField => slot is ServiceMap && slot['type'] == '@Field'; |
+ |
+ ServiceObject get source => ref['source']; |
+ |
+ // I.e., inbound references to 'source' for recursive pointer chasing. |
+ @observable ObservableList inboundReferences; |
+ Future<ServiceObject> fetchInboundReferences(arg) { |
+ return source.isolate.get(source.id + "/inbound_references?limit=$arg") |
+ .then((ServiceMap response) { |
+ inboundReferences = new ObservableList.from(response['references']); |
+ }); |
+ } |
+ |
+ // TODO(turnidge): This is here to workaround vm/dart2js differences. |
+ dynamic expander() { |
+ return expandEvent; |
+ } |
+ |
+ void expandEvent(bool expand, var done) { |
+ assert(ref is ServiceMap); |
+ if (expand) { |
+ fetchInboundReferences(100).then((result) { |
+ notifyPropertyChange(#ref, 0, 1); |
+ }).whenComplete(done); |
+ } else { |
+ ServiceMap refMap = ref; |
+ refMap['fields'] = null; |
+ refMap['elements'] = null; |
+ done(); |
+ } |
+ } |
+} |