Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Unified Diff: lib/runtime/dart_sdk.js

Side-by-side diff isn't available for this file because of its large size.
Issue 2164763005: Library custom formatters (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Pub upgrade Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
Download patch
Index: lib/runtime/dart_sdk.js
diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js
index 833702e8b97d6e69007fd154bd8f91d0264f913d..be7de333d5ddb91d1c8a84f0047c9d62955d9d50 100644
--- a/lib/runtime/dart_sdk.js
+++ b/lib/runtime/dart_sdk.js
@@ -843,6 +843,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
let ctor = function(...args) {
initMethod.apply(this, args);
};
+ ctor[dart.isNamedConstructor] = true;
ctor.prototype = proto;
dart.defineProperty(clazz, name, {value: ctor, configurable: true});
};
@@ -1848,6 +1849,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart._extensionType = Symbol("extensionType");
dart.dartx = dartx;
dart._runtimeType = Symbol("_runtimeType");
+ dart.isNamedConstructor = Symbol("isNamedConstructor");
+ dart.dartLibraryName = Symbol("dartLibraryName");
dart.metadata = Symbol("metadata");
dart._typeObject = Symbol("typeObject");
core.Object = class Object {
@@ -2484,10 +2487,30 @@ dart_library.library('dart_sdk', null, /* Imports */[
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [])
})
});
+ _debugger.Library = class Library extends core.Object {
+ new(name, object) {
+ this.name = name;
+ this.object = object;
+ }
+ };
+ dart.setSignature(_debugger.Library, {
+ constructors: () => ({new: dart.definiteFunctionType(_debugger.Library, [core.String, core.Object])})
+ });
+ _debugger.NamedConstructor = class NamedConstructor extends core.Object {
+ new(object) {
+ this.object = object;
+ }
+ };
+ dart.setSignature(_debugger.NamedConstructor, {
+ constructors: () => ({new: dart.definiteFunctionType(_debugger.NamedConstructor, [core.Object])})
+ });
_debugger.ClassMetadata = class ClassMetadata extends core.Object {
new(object) {
this.object = object;
}
+ get name() {
+ return _debugger.getTypeName(core.Type._check(core.Type.is(this.object) ? this.object : dart.getReifiedType(this.object)));
+ }
};
dart.setSignature(_debugger.ClassMetadata, {
constructors: () => ({new: dart.definiteFunctionType(_debugger.ClassMetadata, [core.Object])})
@@ -2631,7 +2654,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
_debugger.DartFormatter = class DartFormatter extends core.Object {
new() {
this[_formatters] = null;
- this[_formatters] = JSArrayOfFormatter().of([new _debugger.FunctionFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.MapEntryFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.ClassMetadataFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.ObjectFormatter()]);
+ this[_formatters] = JSArrayOfFormatter().of([new _debugger.NamedConstructorFormatter(), new _debugger.FunctionFormatter(), new _debugger.MapFormatter(), new _debugger.IterableFormatter(), new _debugger.MapEntryFormatter(), new _debugger.IterableSpanFormatter(), new _debugger.ClassMetadataFormatter(), new _debugger.HeritageClauseFormatter(), new _debugger.ModuleLibraryFormatter(), new _debugger.LibraryFormatter(), new _debugger.ObjectFormatter()]);
}
preview(object) {
try {
@@ -2697,12 +2720,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
children(object) {
let properties = LinkedHashSetOfNameValuePair().new();
this.addMetadataChildren(object, properties);
- let protoChain = JSArrayOfObject().of([]);
let current = object;
- while (current != null && !dart.test(_debugger.isNativeJavaScriptObject(current)) && current !== Object.prototype) {
- protoChain[dartx.add](current);
- current = _debugger.JSNative.getProperty(current, '__proto__');
- }
+ let protoChain = this.getProtoChain(current);
for (/* Unimplemented unknown name */current of protoChain) {
for (let symbol of _debugger.getOwnPropertySymbols(current)) {
let dartName = _debugger.symbolName(symbol);
@@ -2715,13 +2734,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
} else if (!dart.test(dartName[dartx.startsWith]('_'))) {
continue;
}
- let value = null;
- try {
- value = _debugger.JSNative.getProperty(object, symbol);
- } catch (e) {
- value = dart.str`<Exception thrown> ${e}`;
- }
-
+ let value = this.getPropertyValue(object, core.String._check(symbol));
properties.add(new _debugger.NameValuePair({name: dartName, value: value}));
}
}
@@ -2732,20 +2745,33 @@ dart_library.library('dart_sdk', null, /* Imports */[
if (dart.test(_debugger.hasMethod(object, name))) {
continue;
}
- let value = null;
- try {
- value = _debugger.JSNative.getProperty(object, name);
- } catch (e) {
- value = dart.str`<Exception thrown> ${e}`;
- }
-
+ let value = this.getPropertyValue(object, name);
properties.add(new _debugger.NameValuePair({name: name, value: value}));
}
}
return properties.toList();
}
addMetadataChildren(object, ret) {
- ret.add(new _debugger.NameValuePair({name: '[[class]]', value: new _debugger.ClassMetadata(object)}));
+ let value = new _debugger.ClassMetadata(object);
+ ret.add(new _debugger.NameValuePair({name: value.name, value: value}));
+ }
+ getPropertyValue(object, name) {
+ let value = null;
+ try {
+ value = _debugger.JSNative.getProperty(object, name);
+ } catch (e) {
+ value = dart.str`<Exception thrown> ${e}`;
+ }
+
+ return value;
+ }
+ getProtoChain(current) {
+ let protoChain = JSArrayOfObject().of([]);
+ while (current != null && !dart.test(_debugger.isNativeJavaScriptObject(current)) && current !== Object.prototype) {
+ protoChain[dartx.add](current);
+ current = _debugger.JSNative.getProperty(current, '__proto__');
+ }
+ return protoChain;
}
};
dart.setSignature(_debugger.ObjectFormatter, {
@@ -2754,7 +2780,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic]),
- addMetadataChildren: dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.Set$(_debugger.NameValuePair)])
+ addMetadataChildren: dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.Set$(_debugger.NameValuePair)]),
+ getPropertyValue: dart.definiteFunctionType(core.Object, [core.Object, core.String]),
+ getProtoChain: dart.definiteFunctionType(core.List$(core.Object), [dart.dynamic])
})
});
dart.defineLazy(_debugger.ObjectFormatter, {
@@ -2769,6 +2797,70 @@ dart_library.library('dart_sdk', null, /* Imports */[
},
set _customNames(_) {}
});
+ _debugger.ModuleLibraryFormatter = class ModuleLibraryFormatter extends _debugger.ObjectFormatter {
+ new() {
+ this.libraryName = null;
+ }
+ accept(object) {
+ let current = object;
+ let protoChain = this.getProtoChain(current);
+ for (/* Unimplemented unknown name */current of protoChain) {
+ for (let symbol of _debugger.getOwnPropertySymbols(current)) {
+ if (_debugger.symbolName(symbol) == 'dartLibraryName') {
+ this.libraryName = core.String._check(_debugger.JSNative.getProperty(current, symbol));
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ hasChildren(object) {
+ return true;
+ }
+ preview(object) {
+ let libraryNameArray = this.libraryName[dartx.split]('/');
+ if (dart.notNull(libraryNameArray[dartx.length]) > 1) {
+ libraryNameArray[dartx.set](dart.notNull(libraryNameArray[dartx.length]) - 1, '');
+ }
+ return dart.str`Library Module: ${libraryNameArray[dartx.join]('/')}`;
+ }
+ children(object) {
+ let properties = LinkedHashSetOfNameValuePair().new();
+ for (let name of _debugger.getOwnPropertyNames(object)) {
+ let value = _debugger.JSNative.getProperty(object, name);
+ name = dart.notNull(name[dartx.replaceAll]('__', '/')) + '.dart';
+ properties.add(new _debugger.NameValuePair({name: name, value: new _debugger.Library(name, value), hideName: true}));
+ }
+ return properties.toList();
+ }
+ };
+ _debugger.LibraryFormatter = class LibraryFormatter extends _debugger.ObjectFormatter {
+ accept(object) {
+ return _debugger.Library.is(object);
+ }
+ hasChildren(object) {
+ return true;
+ }
+ preview(object) {
+ return core.String._check(dart.dload(object, 'name'));
+ }
+ children(object) {
+ let properties = LinkedHashSetOfNameValuePair().new();
+ let entry = dart.dload(object, 'object');
+ for (let name of _debugger.getOwnPropertyNames(entry)) {
+ let value = this.getPropertyValue(entry, name);
+ if (dart.equals(_debugger.JSNative.getProperty(value, 'name'), 'makeGenericType')) {
+ continue;
+ } else if (core.Type.is(value)) {
+ let classMetadata = new _debugger.ClassMetadata(value);
+ properties.add(new _debugger.NameValuePair({name: classMetadata.name, value: classMetadata}));
+ } else {
+ properties.add(new _debugger.NameValuePair({name: name, value: value}));
+ }
+ }
+ return properties.toList();
+ }
+ };
_debugger.FunctionFormatter = class FunctionFormatter extends _debugger.Formatter {
accept(object) {
if (_debugger._typeof(object) != 'function') return false;
@@ -2839,7 +2931,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
};
const _getType = Symbol('_getType');
- _debugger.ClassMetadataFormatter = class ClassMetadataFormatter extends core.Object {
+ _debugger.ClassMetadataFormatter = class ClassMetadataFormatter extends _debugger.ObjectFormatter {
accept(object) {
return _debugger.ClassMetadata.is(object);
}
@@ -2849,35 +2941,83 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
preview(object) {
let entry = _debugger.ClassMetadata._check(object);
- return _debugger.getTypeName(core.Type._check(this[_getType](entry.object)));
+ let type = core.Type.is(entry.object) ? entry.object : dart.getReifiedType(entry.object);
+ let implements$ = dart.getImplements(type);
+ let ret = _debugger.getTypeName(core.Type._check(type));
+ if (implements$ != null) {
+ let typeNames = dart.dsend(dart.dcall(implements$), 'map', dart.fn(type => _debugger.getTypeName(core.Type._check(type)), dynamicToString()));
+ return dart.notNull(ret) + dart.str` implements ${dart.dsend(typeNames, 'join', ", ")}`;
+ } else {
+ return ret;
+ }
}
hasChildren(object) {
return true;
}
children(object) {
let entry = _debugger.ClassMetadata._check(object);
- let type = this[_getType](entry.object);
+ let classObject = entry.object;
+ let type = this[_getType](classObject);
let ret = JSArrayOfNameValuePair().of([]);
- let implements$ = dart.getImplements(type);
- if (implements$ != null) {
- ret[dartx.add](new _debugger.NameValuePair({name: '[[Implements]]', value: new _debugger.HeritageClause('implements', core.List._check(dart.dcall(implements$)))}));
- }
let mixins = dart.getMixins(type);
if (mixins != null && dart.test(dart.dload(mixins, 'isNotEmpty'))) {
ret[dartx.add](new _debugger.NameValuePair({name: '[[Mixins]]', value: new _debugger.HeritageClause('mixins', core.List._check(mixins))}));
}
- ret[dartx.add](new _debugger.NameValuePair({name: '[[JavaScript View]]', value: entry.object, config: _debugger.JsonMLConfig.skipDart}));
- if (!core.Type.is(entry.object)) {
- ret[dartx.add](new _debugger.NameValuePair({name: '[[JavaScript Constructor]]', value: _debugger.JSNative.getProperty(entry.object, 'constructor'), config: _debugger.JsonMLConfig.skipDart}));
+ for (let name of _debugger.getOwnPropertyNames(classObject)) {
+ if (name == 'length' || name == 'name' || name == 'prototype') continue;
+ let value = this.getPropertyValue(classObject, name);
+ for (let symbol of _debugger.getOwnPropertySymbols(value)) {
+ if (_debugger.symbolName(symbol) == 'isNamedConstructor') {
+ value = new _debugger.NamedConstructor(value);
+ name = dart.notNull(entry.name) + '.' + dart.notNull(name);
+ }
+ }
+ ret[dartx.add](new _debugger.NameValuePair({name: name, value: value}));
+ }
+ let prototype = classObject.prototype;
+ if (prototype != null) {
+ for (let name of _debugger.getOwnPropertyNames(prototype)) {
+ if (name == 'constructor' || name == 'new' || name == '$identityHash') {
+ continue;
+ }
+ let func = this.getPropertyValue(prototype, name);
+ let constructor = this.getPropertyValue(prototype, 'constructor');
+ for (let symbol of _debugger.getOwnPropertySymbols(constructor)) {
+ if (_debugger.symbolName(symbol) == 'sig') {
+ let sigObj = this.getPropertyValue(constructor, core.String._check(symbol));
+ let value = this.getPropertyValue(sigObj, name);
+ if (_debugger.getTypeName(core.Type._check(dart.getReifiedType(value))) != 'Null') {
+ dart.tag(func, value);
+ ret[dartx.add](new _debugger.NameValuePair({name: name, value: func}));
+ }
+ }
+ }
+ }
}
return ret;
}
};
- _debugger.ClassMetadataFormatter[dart.implements] = () => [_debugger.Formatter];
dart.setSignature(_debugger.ClassMetadataFormatter, {
+ methods: () => ({[_getType]: dart.definiteFunctionType(dart.dynamic, [dart.dynamic])})
+ });
+ _debugger.NamedConstructorFormatter = class NamedConstructorFormatter extends core.Object {
+ accept(object) {
+ return _debugger.NamedConstructor.is(object);
+ }
+ preview(object) {
+ return 'Named Constructor';
+ }
+ hasChildren(object) {
+ return true;
+ }
+ children(object) {
+ return JSArrayOfNameValuePair().of([new _debugger.NameValuePair({name: 'JavaScript Function', value: object, config: _debugger.JsonMLConfig.skipDart})]);
+ }
+ };
+ _debugger.NamedConstructorFormatter[dart.implements] = () => [_debugger.Formatter];
+ dart.setSignature(_debugger.NamedConstructorFormatter, {
methods: () => ({
accept: dart.definiteFunctionType(core.bool, [dart.dynamic]),
- [_getType]: dart.definiteFunctionType(dart.dynamic, [dart.dynamic]),
preview: dart.definiteFunctionType(core.String, [dart.dynamic]),
hasChildren: dart.definiteFunctionType(core.bool, [dart.dynamic]),
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])

Powered by Google App Engine
This is Rietveld 408576698