| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library service_ref_element; | |
| 6 | |
| 7 import 'dart:html'; | |
| 8 | |
| 9 import 'package:logging/logging.dart'; | |
| 10 import 'package:observatory/service.dart'; | |
| 11 import 'package:observatory/repositories.dart'; | |
| 12 import 'package:polymer/polymer.dart'; | |
| 13 | |
| 14 import 'helpers/any_ref.dart'; | |
| 15 import 'observatory_element.dart'; | |
| 16 | |
| 17 class ServiceRefElement extends ObservatoryElement { | |
| 18 @published ServiceObject ref; | |
| 19 @published bool internal = false; | |
| 20 @published String expandKey; | |
| 21 ServiceRefElement.created() : super.created(); | |
| 22 | |
| 23 void refChanged(oldValue) { | |
| 24 notifyPropertyChange(#url, "", url); | |
| 25 notifyPropertyChange(#name, [], name); | |
| 26 notifyPropertyChange(#nameIsEmpty, 0, 1); | |
| 27 notifyPropertyChange(#hoverText, "", hoverText); | |
| 28 } | |
| 29 | |
| 30 String get url { | |
| 31 if (ref == null) { | |
| 32 return 'NULL REF'; | |
| 33 } | |
| 34 return gotoLink('/inspect', ref); | |
| 35 } | |
| 36 | |
| 37 String get serviceId { | |
| 38 if (ref == null) { | |
| 39 return 'NULL REF'; | |
| 40 } | |
| 41 return ref.id; | |
| 42 } | |
| 43 | |
| 44 String get hoverText { | |
| 45 if (ref == null) { | |
| 46 return 'NULL REF'; | |
| 47 } | |
| 48 return ref.vmName; | |
| 49 } | |
| 50 | |
| 51 String get name { | |
| 52 if (ref == null) { | |
| 53 return 'NULL REF'; | |
| 54 } | |
| 55 return ref.name; | |
| 56 } | |
| 57 | |
| 58 // Workaround isEmpty not being useable due to missing @MirrorsUsed. | |
| 59 bool get nameIsEmpty { | |
| 60 return (name == null) || name.isEmpty; | |
| 61 } | |
| 62 | |
| 63 | |
| 64 @published bool expanded = false; | |
| 65 dynamic expander() { | |
| 66 return expandEvent; | |
| 67 } | |
| 68 void expandEvent(bool expand, Function onDone) { | |
| 69 if (expand) { | |
| 70 ref.reload().then((result) { | |
| 71 ref = result; | |
| 72 notifyPropertyChange(#ref, 0, 1); | |
| 73 expanded = true; | |
| 74 }).whenComplete(onDone); | |
| 75 } else { | |
| 76 expanded = false; | |
| 77 onDone(); | |
| 78 } | |
| 79 } | |
| 80 } | |
| 81 | |
| 82 | |
| 83 @CustomTag('any-service-ref') | |
| 84 class AnyServiceRefElement extends ObservatoryElement { | |
| 85 @published ServiceObject ref; | |
| 86 @published String expandKey; | |
| 87 @published bool asValue = false; | |
| 88 AnyServiceRefElement.created() : super.created(); | |
| 89 | |
| 90 refChanged(oldValue) { | |
| 91 // Remove the current view. | |
| 92 children.clear(); | |
| 93 if (ref == null) { | |
| 94 Logger.root.info('Viewing null object.'); | |
| 95 return; | |
| 96 } | |
| 97 var obj; | |
| 98 if (ref is Guarded) { | |
| 99 var g = ref as Guarded; | |
| 100 obj = g.asValue ?? g.asSentinel; | |
| 101 } else { | |
| 102 obj = ref; | |
| 103 } | |
| 104 var element; | |
| 105 switch (obj.type) { | |
| 106 case 'Class': | |
| 107 if (asValue) { | |
| 108 element = new Element.tag('class-ref-as-value'); | |
| 109 element.ref = obj; | |
| 110 } else { | |
| 111 element = new Element.tag('class-ref'); | |
| 112 element.ref = obj; | |
| 113 } | |
| 114 break; | |
| 115 case 'Code': | |
| 116 element = new Element.tag('code-ref'); | |
| 117 element.ref = obj; | |
| 118 break; | |
| 119 case 'Context': | |
| 120 element = new Element.tag('context-ref'); | |
| 121 element.ref = obj; | |
| 122 break; | |
| 123 case 'Error': | |
| 124 element = new Element.tag('error-ref'); | |
| 125 element.ref = obj; | |
| 126 break; | |
| 127 case 'Field': | |
| 128 element = new Element.tag('field-ref'); | |
| 129 element.ref = obj; | |
| 130 break; | |
| 131 case 'Function': | |
| 132 element = new Element.tag('function-ref'); | |
| 133 element.ref = obj; | |
| 134 break; | |
| 135 case 'Instance': | |
| 136 element = new Element.tag('instance-ref'); | |
| 137 element.ref = obj; | |
| 138 break; | |
| 139 case 'Library': | |
| 140 if (asValue) { | |
| 141 element = | |
| 142 new Element.tag('library-ref-as-value'); | |
| 143 element.ref = obj; | |
| 144 } else { | |
| 145 element = | |
| 146 new Element.tag('library-ref'); | |
| 147 element.ref = obj; | |
| 148 } | |
| 149 break; | |
| 150 case 'Script': | |
| 151 element = new Element.tag('script-ref'); | |
| 152 element.ref = obj; | |
| 153 break; | |
| 154 default: | |
| 155 element = anyRef(obj.isolate, obj, | |
| 156 new InstanceRepository(), queue: app.queue); | |
| 157 break; | |
| 158 } | |
| 159 if (element == null) { | |
| 160 Logger.root.info('Unable to find a ref element for \'${ref.type}\''); | |
| 161 element = new Element.tag('span'); | |
| 162 element.text = "<<Unknown service ref: $ref>>"; | |
| 163 return; | |
| 164 } | |
| 165 children.add(element); | |
| 166 } | |
| 167 } | |
| OLD | NEW |