| Index: runtime/observatory/lib/src/elements/service_ref.dart
|
| diff --git a/runtime/observatory/lib/src/elements/service_ref.dart b/runtime/observatory/lib/src/elements/service_ref.dart
|
| index e0a28fea5c46ef060c479f9f0047c456c55ab944..7a93447e5c31b3d5c42090d534a509242b497e95 100644
|
| --- a/runtime/observatory/lib/src/elements/service_ref.dart
|
| +++ b/runtime/observatory/lib/src/elements/service_ref.dart
|
| @@ -7,18 +7,11 @@ library service_ref_element;
|
| import 'dart:html';
|
|
|
| import 'package:logging/logging.dart';
|
| -import 'package:observatory/models.dart' as M;
|
| import 'package:observatory/service.dart';
|
| +import 'package:observatory/repositories.dart';
|
| import 'package:polymer/polymer.dart';
|
|
|
| -import 'class_ref.dart';
|
| -import 'class_ref_as_value.dart';
|
| -import 'code_ref.dart';
|
| -import 'error_ref.dart';
|
| -import 'function_ref.dart';
|
| -import 'library_ref.dart';
|
| -import 'library_ref_as_value.dart';
|
| -import 'script_ref.dart';
|
| +import 'helpers/any_ref.dart';
|
| import 'observatory_element.dart';
|
|
|
| class ServiceRefElement extends ObservatoryElement {
|
| @@ -94,86 +87,81 @@ class AnyServiceRefElement extends ObservatoryElement {
|
| @published bool asValue = false;
|
| AnyServiceRefElement.created() : super.created();
|
|
|
| - Element _constructElementForRef() {
|
| - var type = ref.type;
|
| - switch (type) {
|
| - case 'Class':
|
| + refChanged(oldValue) {
|
| + // Remove the current view.
|
| + children.clear();
|
| + if (ref == null) {
|
| + Logger.root.info('Viewing null object.');
|
| + return;
|
| + }
|
| + var obj;
|
| + if (ref is Guarded) {
|
| + var g = ref as Guarded;
|
| + obj = g.asValue ?? g.asSentinel;
|
| + } else {
|
| + obj = ref;
|
| + }
|
| + var element;
|
| + switch (obj.type) {
|
| + case 'Class':
|
| if (asValue) {
|
| - ClassRefAsValueElement element =
|
| - new Element.tag('class-ref-as-element');
|
| - element.ref = ref;
|
| - return element;
|
| + element = new Element.tag('class-ref-as-value');
|
| + element.ref = obj;
|
| + } else {
|
| + element = new Element.tag('class-ref');
|
| + element.ref = obj;
|
| }
|
| - return new ClassRefElement(ref.isolate,
|
| - ref as M.ClassRef,
|
| - queue: app.queue);
|
| + break;
|
| case 'Code':
|
| - return new CodeRefElement(ref.isolate, ref as M.Code, queue: app.queue);
|
| + element = new Element.tag('code-ref');
|
| + element.ref = obj;
|
| + break;
|
| case 'Context':
|
| - ServiceRefElement element = new Element.tag('context-ref');
|
| - element.ref = ref;
|
| - return element;
|
| + element = new Element.tag('context-ref');
|
| + element.ref = obj;
|
| + break;
|
| case 'Error':
|
| - return new ErrorRefElement(ref as M.ErrorRef, queue: app.queue);
|
| + element = new Element.tag('error-ref');
|
| + element.ref = obj;
|
| + break;
|
| case 'Field':
|
| - ServiceRefElement element = new Element.tag('field-ref');
|
| - element.ref = ref;
|
| - return element;
|
| + element = new Element.tag('field-ref');
|
| + element.ref = obj;
|
| + break;
|
| case 'Function':
|
| - return new FunctionRefElement(ref.isolate,
|
| - ref as M.FunctionRef,
|
| - queue: app.queue);
|
| + element = new Element.tag('function-ref');
|
| + element.ref = obj;
|
| + break;
|
| + case 'Instance':
|
| + element = new Element.tag('instance-ref');
|
| + element.ref = obj;
|
| + break;
|
| case 'Library':
|
| if (asValue) {
|
| - LibraryRefAsValueElement element =
|
| + element =
|
| new Element.tag('library-ref-as-value');
|
| - element.ref = ref;
|
| - return element;
|
| + element.ref = obj;
|
| + } else {
|
| + element =
|
| + new Element.tag('library-ref');
|
| + element.ref = obj;
|
| }
|
| - return new LibraryRefElement(ref.isolate,
|
| - ref as M.LibraryRef,
|
| - queue: app.queue);
|
| - case 'Object':
|
| - ServiceRefElement element = new Element.tag('object-ref');
|
| - element.ref = ref;
|
| - return element;
|
| + break;
|
| case 'Script':
|
| - return new ScriptRefElement(ref.isolate,
|
| - ref as M.ScriptRef,
|
| - queue: app.queue);
|
| - case 'Instance':
|
| - case 'Sentinel':
|
| - ServiceRefElement element = new Element.tag('instance-ref');
|
| - element.ref = ref;
|
| - if (expandKey != null) {
|
| - element.expandKey = expandKey;
|
| - }
|
| - return element;
|
| + element = new Element.tag('script-ref');
|
| + element.ref = obj;
|
| + break;
|
| default:
|
| - SpanElement element = new Element.tag('span');
|
| - element.text = "<<Unknown service ref: $ref>>";
|
| - return element;
|
| + element = anyRef(obj.isolate, obj,
|
| + new InstanceRepository(obj.isolate), queue: app.queue);
|
| + break;
|
| }
|
| - }
|
| -
|
| - refChanged(oldValue) {
|
| - // Remove the current view.
|
| - children.clear();
|
| - if (ref == null) {
|
| - Logger.root.info('Viewing null object.');
|
| - return;
|
| - }
|
| - var type = ref.type;
|
| - var element = _constructElementForRef();
|
| if (element == null) {
|
| - Logger.root.info('Unable to find a ref element for \'${type}\'');
|
| + Logger.root.info('Unable to find a ref element for \'${ref.type}\'');
|
| + element = new Element.tag('span');
|
| + element.text = "<<Unknown service ref: $ref>>";
|
| return;
|
| }
|
| children.add(element);
|
| }
|
| }
|
| -
|
| -@CustomTag('object-ref')
|
| -class ObjectRefElement extends ServiceRefElement {
|
| - ObjectRefElement.created() : super.created();
|
| -}
|
|
|