Index: runtime/bin/vmservice/observatory/lib/src/elements/service_ref.dart |
diff --git a/runtime/bin/vmservice/observatory/lib/src/elements/service_ref.dart b/runtime/bin/vmservice/observatory/lib/src/elements/service_ref.dart |
index 5b6b1a1ed41893ba35820619f57bf1f309274556..f449cbd05b6a4c3d1cad03da815b0221be296ce4 100644 |
--- a/runtime/bin/vmservice/observatory/lib/src/elements/service_ref.dart |
+++ b/runtime/bin/vmservice/observatory/lib/src/elements/service_ref.dart |
@@ -4,6 +4,8 @@ |
library service_ref_element; |
+import 'dart:html'; |
+import 'package:logging/logging.dart'; |
import 'package:polymer/polymer.dart'; |
import 'observatory_element.dart'; |
import 'package:observatory/service.dart'; |
@@ -54,3 +56,71 @@ class ServiceRefElement extends ObservatoryElement { |
return name.isEmpty; |
} |
} |
+ |
+ |
+@CustomTag('service-ref-downcast') |
Cutch
2014/08/21 20:08:55
Rename service-ref to be service-ref-common or ser
|
+class ServiceRefDowncastElement extends ObservatoryElement { |
+ @published ServiceObject ref; |
+ ServiceRefDowncastElement.created() : super.created(); |
+ |
+ ObservatoryElement _constructElementForRef() { |
+ var type = ref.serviceType; |
+ switch (type) { |
+ case 'Class': |
+ ClassRefElement element = new Element.tag('class-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Code': |
+ CodeRefElement element = new Element.tag('code-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Field': |
+ FieldRefElement element = new Element.tag('field-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Function': |
+ FunctionRefElement element = new Element.tag('function-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Library': |
+ LibraryRefElement element = new Element.tag('library-ref'); |
+ element.ref = ref; |
+ return element; |
+ case 'Type': |
+ case 'Array': |
+ case 'Bool': |
+ case 'Closure': |
+ case 'Double': |
+ case 'GrowableObjectArray': |
+ case 'Instance': |
+ case 'Smi': |
+ case 'Mint': |
+ case 'Bigint': |
+ case 'String': |
+ InstanceRefElement element = new Element.tag('instance-ref'); |
+ element.ref = ref; |
+ return element; |
+ default: |
+ Element element = new Element.tag('span'); |
+ element.text = "<<Unknown service ref: $ref>>"; |
+ return element; |
+ } |
+ } |
+ |
+ refChanged(oldValue) { |
+ // Remove the current view. |
+ children.clear(); |
+ if (ref == null) { |
+ Logger.root.info('Viewing null object.'); |
+ return; |
+ } |
+ var type = ref.serviceType; |
+ var element = _constructElementForRef(); |
+ if (element == null) { |
+ Logger.root.info('Unable to find a ref element for \'${type}\''); |
+ return; |
+ } |
+ children.add(element); |
+ Logger.root.info('Viewing object of \'${type}\''); |
+ } |
+} |