Better mirrors support for mixins and private fields

This is generally motivated by pageloader usage.

R=rnystrom@google.com

Review URL: https://codereview.chromium.org/2535273002 .
This commit is contained in:
Vijay Menon 2016-11-29 14:00:01 -08:00
parent 7c3932d594
commit 88c5dd5745
13 changed files with 895 additions and 453 deletions

View file

@ -616,11 +616,12 @@ define([], function() {
let TypeToTypeMirror = () => (TypeToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [core.Type])))();
let dynamicAndListTodynamic = () => (dynamicAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.List])))();
let dynamicAndStringAndListTodynamic = () => (dynamicAndStringAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.String, core.List])))();
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let SymbolTodynamic = () => (SymbolTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Symbol])))();
let dynamicToSymbol = () => (dynamicToSymbol = dart.constFn(dart.definiteFunctionType(core.Symbol, [dart.dynamic])))();
let dynamicToMapOfSymbol$dynamic = () => (dynamicToMapOfSymbol$dynamic = dart.constFn(dart.definiteFunctionType(MapOfSymbol$dynamic(), [dart.dynamic])))();
let TypeAndInvocationTodynamic = () => (TypeAndInvocationTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Type, core.Invocation])))();
let SymbolAnddynamicTovoid = () => (SymbolAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Symbol, dart.dynamic])))();
let MapOfSymbol$dynamicTodynamic = () => (MapOfSymbol$dynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [MapOfSymbol$dynamic()])))();
let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
let dynamicToTypeMirror = () => (dynamicToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [dart.dynamic])))();
let dynamicAnddynamicAnddynamicTovoid = () => (dynamicAnddynamicAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, dart.dynamic, dart.dynamic])))();
let ListToList = () => (ListToList = dart.constFn(dart.definiteFunctionType(core.List, [core.List])))();
@ -678,6 +679,7 @@ define([], function() {
let ObjectToint = () => (ObjectToint = dart.constFn(dart.definiteFunctionType(core.int, [core.Object])))();
let ObjectTovoid = () => (ObjectTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Object])))();
let StringAndStringTovoid$ = () => (StringAndStringTovoid$ = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, core.String])))();
let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
let MapOfString$StringAndStringToMapOfString$String = () => (MapOfString$StringAndStringToMapOfString$String = dart.constFn(dart.definiteFunctionType(MapOfString$String(), [MapOfString$String(), core.String])))();
let intAndintAndintTovoid = () => (intAndintAndintTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.int, core.int, core.int])))();
let String__Tovoid = () => (String__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String], [dart.dynamic])))();
@ -749,6 +751,7 @@ define([], function() {
let NodeAndNodeTovoid = () => (NodeAndNodeTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [html$.Node, html$.Node])))();
let dynamicToImageData = () => (dynamicToImageData = dart.constFn(dart.definiteFunctionType(html$.ImageData, [dart.dynamic])))();
let ImageDataTodynamic = () => (ImageDataTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [html$.ImageData])))();
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let Map__Todynamic = () => (Map__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Map], [dynamicTovoid()])))();
let ListOfStringToList = () => (ListOfStringToList = dart.constFn(dart.definiteFunctionType(core.List, [ListOfString()])))();
let dynamicToDateTime = () => (dynamicToDateTime = dart.constFn(dart.definiteFunctionType(core.DateTime, [dart.dynamic])))();
@ -780,10 +783,10 @@ define([], function() {
return Mixin;
};
dart.getMixins = function(clazz) {
return clazz[dart._mixins];
return Object.hasOwnProperty.call(clazz, dart._mixins) ? clazz[dart._mixins] : null;
};
dart.getImplements = function(clazz) {
return clazz[dart.implements];
return Object.hasOwnProperty.call(clazz, dart.implements) ? clazz[dart.implements] : null;
};
dart.flattenFutures = function(builder) {
function flatten(T) {
@ -8657,18 +8660,26 @@ define([], function() {
});
_internal.Sort._INSERTION_SORT_THRESHOLD = 32;
const _name = Symbol('_name');
const _nativeSymbol = Symbol('_nativeSymbol');
_internal.Symbol = class Symbol extends core.Object {
new(name) {
this[_name] = name;
this[_nativeSymbol] = null;
}
es6(name, nativeSymbol) {
this[_name] = name;
this[_nativeSymbol] = nativeSymbol;
}
unvalidated(name) {
this[_name] = name;
this[_nativeSymbol] = null;
}
validated(name) {
this[_name] = _internal.Symbol.validatePublicSymbol(name);
this[_nativeSymbol] = null;
}
['=='](other) {
return _internal.Symbol.is(other) && this[_name] == other[_name];
return _internal.Symbol.is(other) && this[_name] == other[_name] && dart.equals(this[_nativeSymbol], other[_nativeSymbol]);
}
get hashCode() {
let hash = this._hashCode;
@ -8684,6 +8695,9 @@ define([], function() {
static getName(symbol) {
return symbol[_name];
}
static getNativeSymbol(symbol) {
return symbol[_nativeSymbol];
}
static validatePublicSymbol(name) {
if (dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.publicSymbolPattern.hasMatch(name))) return name;
if (dart.test(name[dartx.startsWith]('_'))) {
@ -8695,16 +8709,21 @@ define([], function() {
return dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.symbolPattern.hasMatch(name));
}
};
dart.defineNamedConstructor(_internal.Symbol, 'es6');
dart.defineNamedConstructor(_internal.Symbol, 'unvalidated');
dart.defineNamedConstructor(_internal.Symbol, 'validated');
_internal.Symbol[dart.implements] = () => [core.Symbol];
dart.setSignature(_internal.Symbol, {
constructors: () => ({
new: dart.definiteFunctionType(_internal.Symbol, [core.String]),
es6: dart.definiteFunctionType(_internal.Symbol, [core.String, dart.dynamic]),
unvalidated: dart.definiteFunctionType(_internal.Symbol, [core.String]),
validated: dart.definiteFunctionType(_internal.Symbol, [core.String])
}),
fields: () => ({[_name]: core.String}),
fields: () => ({
[_name]: core.String,
[_nativeSymbol]: dart.dynamic
}),
methods: () => ({'==': dart.definiteFunctionType(core.bool, [core.Object])}),
sfields: () => ({
reservedWordRE: core.String,
@ -8716,10 +8735,11 @@ define([], function() {
}),
statics: () => ({
getName: dart.definiteFunctionType(core.String, [_internal.Symbol]),
getNativeSymbol: dart.definiteFunctionType(dart.dynamic, [_internal.Symbol]),
validatePublicSymbol: dart.definiteFunctionType(core.String, [core.String]),
isValidSymbol: dart.definiteFunctionType(core.bool, [core.String])
}),
names: ['getName', 'validatePublicSymbol', 'isValidSymbol']
names: ['getName', 'getNativeSymbol', 'validatePublicSymbol', 'isValidSymbol']
});
_internal.Symbol.reservedWordRE = '(?:assert|break|c(?:a(?:se|tch)|lass|on(?:st|tinue))|d(?:efault|o)|' + 'e(?:lse|num|xtends)|f(?:alse|inal(?:ly)?|or)|i[fns]|n(?:ew|ull)|' + 'ret(?:hrow|urn)|s(?:uper|witch)|t(?:h(?:is|row)|r(?:ue|y))|' + 'v(?:ar|oid)|w(?:hile|ith))';
_internal.Symbol.operatorRE = '(?:[\\-+*/%&|^]|\\[\\]=?|==|~/?|<[<=]?|>[>=]?|unary-)';
@ -13230,73 +13250,109 @@ define([], function() {
return _js_mirrors._dart.definiteFunctionType(type, []);
};
dart.fn(_js_mirrors._defaultConstructorType, dynamicTodynamic$());
_js_mirrors._getMixins = function(type) {
return _js_mirrors._dart.getMixins(type, []);
};
dart.fn(_js_mirrors._getMixins, dynamicTodynamic$());
_js_mirrors._Lazy$ = dart.generic(T => {
const _Lazy = dart.typedef('_Lazy', () => dart.functionType(T, []));
return _Lazy;
});
_js_mirrors._Lazy = _Lazy();
_js_mirrors._getESSymbol = function(symbol) {
return _internal.Symbol.getNativeSymbol(_internal.Symbol.as(symbol));
};
dart.lazyFn(_js_mirrors._getESSymbol, () => SymbolTodynamic());
_js_mirrors._getMember = function(symbol) {
let privateSymbol = _js_mirrors._getESSymbol(symbol);
if (privateSymbol != null) {
return privateSymbol;
}
return _js_mirrors.getName(symbol);
};
dart.lazyFn(_js_mirrors._getMember, () => SymbolTodynamic());
_js_mirrors._getNameForESSymbol = function(member) {
dart.assert(typeof member == "symbol");
let str = dart.toString(member);
dart.assert(dart.test(str[dartx.startsWith]('Symbol(')) && dart.test(str[dartx.endsWith](')')));
return str[dartx.substring](7, dart.notNull(str[dartx.length]) - 1);
};
dart.lazyFn(_js_mirrors._getNameForESSymbol, () => dynamicToString());
_js_mirrors._getSymbolForESSymbol = function(member) {
let name = _js_mirrors._getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
};
dart.lazyFn(_js_mirrors._getSymbolForESSymbol, () => dynamicToSymbol());
_js_mirrors._getSymbolForMember = function(member) {
if (typeof member == 'string') {
return core.Symbol.new(member);
} else {
let name = _js_mirrors._getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
}
};
dart.lazyFn(_js_mirrors._getSymbolForMember, () => dynamicToSymbol());
_js_mirrors._toDartMap = function(data) {
if (data == null) return dart.map();
let map = _js_mirrors._dart.map(data);
if (data == null) return dart.map({}, core.Symbol, dart.dynamic);
let map = MapOfSymbol$dynamic().new();
let publicMembers = Object.getOwnPropertyNames(data);
for (let member of core.Iterable._check(publicMembers)) {
let symbol = core.Symbol.new(core.String._check(member));
map[dartx._set](symbol, data[member]);
}
let privateMembers = Object.getOwnPropertySymbols(data);
for (let member of core.Iterable._check(privateMembers)) {
let name = _js_mirrors._getNameForESSymbol(member);
map[dartx._set](name, data[member]);
let symbol = _js_mirrors._getSymbolForESSymbol(member);
map[dartx._set](symbol, data[member]);
}
return map;
};
dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMap());
dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getConstructors = function(obj) {
let sig = _js_mirrors._dart.getConstructorSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getFields = function(obj) {
let sig = _js_mirrors._dart.getFieldSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getFields, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getFields, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getMethods = function(obj) {
let sig = _js_mirrors._dart.getMethodSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getGetters = function(obj) {
let sig = _js_mirrors._dart.getGetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getSetters = function(obj) {
let sig = _js_mirrors._dart.getSetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticFields = function(obj) {
let sig = _js_mirrors._dart.getStaticFieldSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStatics = function(obj) {
let sig = _js_mirrors._dart.getStaticSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticGetters = function(obj) {
let sig = _js_mirrors._dart.getStaticGetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticSetters = function(obj) {
let sig = _js_mirrors._dart.getStaticSetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._unwrap = function(obj) {
return _js_mirrors._dart.unwrapType(obj);
};
@ -13435,15 +13491,7 @@ define([], function() {
[_getAccessor](reflectee, symbol, args, namedArgs) {
if (args === void 0) args = null;
if (namedArgs === void 0) namedArgs = null;
let name = _js_mirrors.getName(symbol);
if (!dart.test(name[dartx.startsWith]('_'))) return name;
let privateMembers = Object.getOwnPropertySymbols(reflectee);
dart.dsend(privateMembers, 'addAll', Object.getOwnPropertySymbols(reflectee.__proto__));
for (let member of core.Iterable._check(privateMembers)) {
let privateName = _js_mirrors._getNameForESSymbol(member);
if (name == privateName) return member;
}
return new core.NoSuchMethodError(reflectee, symbol, args, namedArgs);
return _js_mirrors._getMember(symbol);
}
getField(symbol) {
let name = this[_getAccessor](this.reflectee, symbol);
@ -13520,6 +13568,7 @@ define([], function() {
let const$0;
const _declarations = Symbol('_declarations');
const _raw = Symbol('_raw');
const _mixin = Symbol('_mixin');
const _typeArguments = Symbol('_typeArguments');
let const$1;
_js_mirrors.JsClassMirror = class JsClassMirror extends _js_mirrors.JsMirror {
@ -13536,67 +13585,66 @@ define([], function() {
this[_declarations] = MapOfSymbol$DeclarationMirror().new();
let unwrapped = _js_mirrors._unwrap(this[_cls]);
let constructors = _js_mirrors._getConstructors(unwrapped);
constructors[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
}, StringAnddynamicTovoid()));
constructors[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
if (dart.test(constructors[dartx.isEmpty])) {
let name = 'new';
let ft = _js_mirrors._defaultConstructorType(_js_mirrors._unwrap(this[_cls]));
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
}
let fields = _js_mirrors._getFields(unwrapped);
fields[dartx.forEach](dart.fn((name, t) => {
let symbol = core.Symbol.new(name);
fields[dartx.forEach](dart.fn((symbol, t) => {
let metadata = [];
if (core.List.is(t)) {
metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
t = dart.dindex(t, 0);
}
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, StringAnddynamicTovoid()));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, SymbolAnddynamicTovoid()));
let methods = _js_mirrors._getMethods(unwrapped);
methods[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
methods[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let getters = _js_mirrors._getGetters(unwrapped);
getters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
getters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let setters = _js_mirrors._getSetters(unwrapped);
setters[dartx.forEach](dart.fn((name, ft) => {
name = dart.notNull(name) + '=';
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
setters[dartx.forEach](dart.fn((symbol, ft) => {
let name = dart.notNull(_js_mirrors.getName(symbol)) + '=';
symbol = new _internal.Symbol.es6(name, _js_mirrors._getESSymbol(symbol));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticFields = _js_mirrors._getStaticFields(unwrapped);
staticFields[dartx.forEach](dart.fn((name, t) => {
let symbol = core.Symbol.new(name);
staticFields[dartx.forEach](dart.fn((symbol, t) => {
let name = _js_mirrors.getName(symbol);
let metadata = [];
if (core.List.is(t)) {
metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
t = dart.dindex(t, 0);
}
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, StringAnddynamicTovoid()));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, SymbolAnddynamicTovoid()));
let statics = _js_mirrors._getStatics(unwrapped);
statics[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
statics[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticGetters = _js_mirrors._getStaticGetters(unwrapped);
staticGetters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
staticGetters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticSetters = _js_mirrors._getStaticSetters(unwrapped);
staticSetters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
staticSetters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
this[_declarations] = MapOfSymbol$DeclarationMirror().unmodifiable(this[_declarations]);
}
return this[_declarations];
@ -13605,7 +13653,7 @@ define([], function() {
this[_cls] = cls;
this[_raw] = _js_mirrors._getGenericClass(_js_mirrors._unwrap(cls));
this.simpleName = core.Symbol.new(_js_mirrors._unwrap(cls).name);
this.mixin = null;
this[_mixin] = null;
this[_typeArguments] = null;
this[_metadata$] = null;
this[_declarations] = null;
@ -13676,6 +13724,21 @@ define([], function() {
return mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(_js_mirrors._unwrap(this[_cls]).__proto__))));
}
}
get mixin() {
if (this[_mixin] != null) {
return this[_mixin];
}
let mixins = _js_mirrors._getMixins(_js_mirrors._unwrap(this[_cls]));
if (mixins == null || dart.test(dart.dload(mixins, 'isEmpty'))) {
this[_mixin] = this;
return this[_mixin];
}
if (dart.test(dart.dsend(dart.dload(mixins, 'length'), '>', 1))) {
dart.throw(new core.UnsupportedError("ClassMirror.mixin not yet supported for " + dart.str`classes (${this[_cls]}) with multiple mixins`));
}
this[_mixin] = mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(dart.dindex(mixins, 0)))));
return this[_mixin];
}
toString() {
return dart.str`ClassMirror on '${this[_cls]}'`;
}
@ -13724,7 +13787,7 @@ define([], function() {
[_cls]: core.Type,
simpleName: core.Symbol,
[_raw]: dart.dynamic,
mixin: mirrors.ClassMirror,
[_mixin]: mirrors.ClassMirror,
[_typeArguments]: ListOfTypeMirror(),
[_metadata$]: ListOfInstanceMirror(),
[_declarations]: MapOfSymbol$DeclarationMirror()
@ -13738,7 +13801,8 @@ define([], function() {
isOriginalDeclaration: dart.definiteFunctionType(core.bool, []),
typeArguments: dart.definiteFunctionType(core.List$(mirrors.TypeMirror), []),
originalDeclaration: dart.definiteFunctionType(mirrors.TypeMirror, []),
superclass: dart.definiteFunctionType(mirrors.ClassMirror, [])
superclass: dart.definiteFunctionType(mirrors.ClassMirror, []),
mixin: dart.definiteFunctionType(mirrors.ClassMirror, [])
}),
methods: () => ({
newInstance: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()]),
@ -13747,13 +13811,15 @@ define([], function() {
invoke: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()])
})
});
const _symbol = Symbol('_symbol');
const _name$ = Symbol('_name');
_js_mirrors.JsVariableMirror = class JsVariableMirror extends _js_mirrors.JsMirror {
get simpleName() {
return core.Symbol.new(this[_name$]);
return this[_symbol];
}
_(name, t, annotations) {
this[_name$] = name;
_(symbol, t, annotations) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.type = _js_mirrors.reflectType(t);
this.metadata = ListOfInstanceMirror().unmodifiable(annotations[dartx.map](mirrors.InstanceMirror)(dart.fn(a => _js_mirrors.reflect(a), dynamicToInstanceMirror())));
this.isStatic = false;
@ -13784,8 +13850,9 @@ define([], function() {
dart.defineNamedConstructor(_js_mirrors.JsVariableMirror, '_');
_js_mirrors.JsVariableMirror[dart.implements] = () => [mirrors.VariableMirror];
dart.setSignature(_js_mirrors.JsVariableMirror, {
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.String, core.Type, core.List])}),
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.Symbol, core.Type, core.List])}),
fields: () => ({
[_symbol]: core.Symbol,
[_name$]: core.String,
type: mirrors.TypeMirror,
metadata: ListOfInstanceMirror(),
@ -13795,8 +13862,8 @@ define([], function() {
getters: () => ({simpleName: dart.definiteFunctionType(core.Symbol, [])})
});
_js_mirrors.JsParameterMirror = class JsParameterMirror extends _js_mirrors.JsVariableMirror {
_(name, t, annotations) {
super._(name, t, annotations);
_(member, t, annotations) {
super._(member, t, annotations);
}
toString() {
return dart.str`ParameterMirror on '${this[_name$]}'`;
@ -13835,7 +13902,7 @@ define([], function() {
dart.defineNamedConstructor(_js_mirrors.JsParameterMirror, '_');
_js_mirrors.JsParameterMirror[dart.implements] = () => [mirrors.ParameterMirror];
dart.setSignature(_js_mirrors.JsParameterMirror, {
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.String, core.Type, core.List])})
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.Symbol, core.Type, core.List])})
});
const _params = Symbol('_params');
const _createParameterMirrorList = Symbol('_createParameterMirrorList');
@ -13850,10 +13917,11 @@ define([], function() {
return this[_name$][dartx.startsWith]('_');
}
get simpleName() {
return core.Symbol.new(this[_name$]);
return this[_symbol];
}
_constructor(cls, name, ftype) {
this[_name$] = name;
_constructor(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.isConstructor = true;
this.isStatic = false;
this[_params] = null;
@ -13861,8 +13929,9 @@ define([], function() {
this.isFinal = false;
this[_createParameterMirrorList](ftype);
}
_instanceMethod(cls, name, ftype) {
this[_name$] = name;
_instanceMethod(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.isConstructor = false;
this.isStatic = false;
this[_params] = null;
@ -13870,8 +13939,9 @@ define([], function() {
this.isFinal = false;
this[_createParameterMirrorList](ftype);
}
_staticMethod(cls, name, ftype) {
this[_name$] = name;
_staticMethod(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.isConstructor = false;
this.isStatic = true;
this[_params] = null;
@ -13880,7 +13950,7 @@ define([], function() {
this[_createParameterMirrorList](ftype);
}
get constructorName() {
return dart.test(this.isConstructor) ? core.Symbol.new(this[_name$]) : null;
return dart.test(this.isConstructor) ? this[_symbol] : null;
}
get parameters() {
return this[_params];
@ -13909,13 +13979,13 @@ define([], function() {
for (let i = 0; i < dart.notNull(args[dartx.length]); ++i) {
let type = args[dartx._get](i);
let metadata = dart.dindex(dart.dload(ftype, 'metadata'), i);
let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
params[dartx._set](i, param);
}
for (let i = 0; i < dart.notNull(opts[dartx.length]); ++i) {
let type = opts[dartx._get](i);
let metadata = dart.dindex(dart.dload(ftype, 'metadata'), dart.notNull(args[dartx.length]) + i);
let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
params[dartx._set](i + dart.notNull(args[dartx.length]), param);
}
this[_params] = ListOfParameterMirror().unmodifiable(params);
@ -13975,11 +14045,12 @@ define([], function() {
_js_mirrors.JsMethodMirror[dart.implements] = () => [mirrors.MethodMirror];
dart.setSignature(_js_mirrors.JsMethodMirror, {
constructors: () => ({
_constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
_instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
_staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic])
_constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
_instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
_staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic])
}),
fields: () => ({
[_symbol]: core.Symbol,
[_name$]: core.String,
[_params]: ListOfParameterMirror(),
[_metadata$]: ListOfInstanceMirror(),

View file

@ -616,11 +616,12 @@
let TypeToTypeMirror = () => (TypeToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [core.Type])))();
let dynamicAndListTodynamic = () => (dynamicAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.List])))();
let dynamicAndStringAndListTodynamic = () => (dynamicAndStringAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.String, core.List])))();
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let SymbolTodynamic = () => (SymbolTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Symbol])))();
let dynamicToSymbol = () => (dynamicToSymbol = dart.constFn(dart.definiteFunctionType(core.Symbol, [dart.dynamic])))();
let dynamicToMapOfSymbol$dynamic = () => (dynamicToMapOfSymbol$dynamic = dart.constFn(dart.definiteFunctionType(MapOfSymbol$dynamic(), [dart.dynamic])))();
let TypeAndInvocationTodynamic = () => (TypeAndInvocationTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Type, core.Invocation])))();
let SymbolAnddynamicTovoid = () => (SymbolAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Symbol, dart.dynamic])))();
let MapOfSymbol$dynamicTodynamic = () => (MapOfSymbol$dynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [MapOfSymbol$dynamic()])))();
let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
let dynamicToTypeMirror = () => (dynamicToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [dart.dynamic])))();
let dynamicAnddynamicAnddynamicTovoid = () => (dynamicAnddynamicAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, dart.dynamic, dart.dynamic])))();
let ListToList = () => (ListToList = dart.constFn(dart.definiteFunctionType(core.List, [core.List])))();
@ -678,6 +679,7 @@
let ObjectToint = () => (ObjectToint = dart.constFn(dart.definiteFunctionType(core.int, [core.Object])))();
let ObjectTovoid = () => (ObjectTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Object])))();
let StringAndStringTovoid$ = () => (StringAndStringTovoid$ = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, core.String])))();
let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
let MapOfString$StringAndStringToMapOfString$String = () => (MapOfString$StringAndStringToMapOfString$String = dart.constFn(dart.definiteFunctionType(MapOfString$String(), [MapOfString$String(), core.String])))();
let intAndintAndintTovoid = () => (intAndintAndintTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.int, core.int, core.int])))();
let String__Tovoid = () => (String__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String], [dart.dynamic])))();
@ -749,6 +751,7 @@
let NodeAndNodeTovoid = () => (NodeAndNodeTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [html$.Node, html$.Node])))();
let dynamicToImageData = () => (dynamicToImageData = dart.constFn(dart.definiteFunctionType(html$.ImageData, [dart.dynamic])))();
let ImageDataTodynamic = () => (ImageDataTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [html$.ImageData])))();
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let Map__Todynamic = () => (Map__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Map], [dynamicTovoid()])))();
let ListOfStringToList = () => (ListOfStringToList = dart.constFn(dart.definiteFunctionType(core.List, [ListOfString()])))();
let dynamicToDateTime = () => (dynamicToDateTime = dart.constFn(dart.definiteFunctionType(core.DateTime, [dart.dynamic])))();
@ -780,10 +783,10 @@
return Mixin;
};
dart.getMixins = function(clazz) {
return clazz[dart._mixins];
return Object.hasOwnProperty.call(clazz, dart._mixins) ? clazz[dart._mixins] : null;
};
dart.getImplements = function(clazz) {
return clazz[dart.implements];
return Object.hasOwnProperty.call(clazz, dart.implements) ? clazz[dart.implements] : null;
};
dart.flattenFutures = function(builder) {
function flatten(T) {
@ -8657,18 +8660,26 @@
});
_internal.Sort._INSERTION_SORT_THRESHOLD = 32;
const _name = Symbol('_name');
const _nativeSymbol = Symbol('_nativeSymbol');
_internal.Symbol = class Symbol extends core.Object {
new(name) {
this[_name] = name;
this[_nativeSymbol] = null;
}
es6(name, nativeSymbol) {
this[_name] = name;
this[_nativeSymbol] = nativeSymbol;
}
unvalidated(name) {
this[_name] = name;
this[_nativeSymbol] = null;
}
validated(name) {
this[_name] = _internal.Symbol.validatePublicSymbol(name);
this[_nativeSymbol] = null;
}
['=='](other) {
return _internal.Symbol.is(other) && this[_name] == other[_name];
return _internal.Symbol.is(other) && this[_name] == other[_name] && dart.equals(this[_nativeSymbol], other[_nativeSymbol]);
}
get hashCode() {
let hash = this._hashCode;
@ -8684,6 +8695,9 @@
static getName(symbol) {
return symbol[_name];
}
static getNativeSymbol(symbol) {
return symbol[_nativeSymbol];
}
static validatePublicSymbol(name) {
if (dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.publicSymbolPattern.hasMatch(name))) return name;
if (dart.test(name[dartx.startsWith]('_'))) {
@ -8695,16 +8709,21 @@
return dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.symbolPattern.hasMatch(name));
}
};
dart.defineNamedConstructor(_internal.Symbol, 'es6');
dart.defineNamedConstructor(_internal.Symbol, 'unvalidated');
dart.defineNamedConstructor(_internal.Symbol, 'validated');
_internal.Symbol[dart.implements] = () => [core.Symbol];
dart.setSignature(_internal.Symbol, {
constructors: () => ({
new: dart.definiteFunctionType(_internal.Symbol, [core.String]),
es6: dart.definiteFunctionType(_internal.Symbol, [core.String, dart.dynamic]),
unvalidated: dart.definiteFunctionType(_internal.Symbol, [core.String]),
validated: dart.definiteFunctionType(_internal.Symbol, [core.String])
}),
fields: () => ({[_name]: core.String}),
fields: () => ({
[_name]: core.String,
[_nativeSymbol]: dart.dynamic
}),
methods: () => ({'==': dart.definiteFunctionType(core.bool, [core.Object])}),
sfields: () => ({
reservedWordRE: core.String,
@ -8716,10 +8735,11 @@
}),
statics: () => ({
getName: dart.definiteFunctionType(core.String, [_internal.Symbol]),
getNativeSymbol: dart.definiteFunctionType(dart.dynamic, [_internal.Symbol]),
validatePublicSymbol: dart.definiteFunctionType(core.String, [core.String]),
isValidSymbol: dart.definiteFunctionType(core.bool, [core.String])
}),
names: ['getName', 'validatePublicSymbol', 'isValidSymbol']
names: ['getName', 'getNativeSymbol', 'validatePublicSymbol', 'isValidSymbol']
});
_internal.Symbol.reservedWordRE = '(?:assert|break|c(?:a(?:se|tch)|lass|on(?:st|tinue))|d(?:efault|o)|' + 'e(?:lse|num|xtends)|f(?:alse|inal(?:ly)?|or)|i[fns]|n(?:ew|ull)|' + 'ret(?:hrow|urn)|s(?:uper|witch)|t(?:h(?:is|row)|r(?:ue|y))|' + 'v(?:ar|oid)|w(?:hile|ith))';
_internal.Symbol.operatorRE = '(?:[\\-+*/%&|^]|\\[\\]=?|==|~/?|<[<=]?|>[>=]?|unary-)';
@ -13230,73 +13250,109 @@
return _js_mirrors._dart.definiteFunctionType(type, []);
};
dart.fn(_js_mirrors._defaultConstructorType, dynamicTodynamic$());
_js_mirrors._getMixins = function(type) {
return _js_mirrors._dart.getMixins(type, []);
};
dart.fn(_js_mirrors._getMixins, dynamicTodynamic$());
_js_mirrors._Lazy$ = dart.generic(T => {
const _Lazy = dart.typedef('_Lazy', () => dart.functionType(T, []));
return _Lazy;
});
_js_mirrors._Lazy = _Lazy();
_js_mirrors._getESSymbol = function(symbol) {
return _internal.Symbol.getNativeSymbol(_internal.Symbol.as(symbol));
};
dart.lazyFn(_js_mirrors._getESSymbol, () => SymbolTodynamic());
_js_mirrors._getMember = function(symbol) {
let privateSymbol = _js_mirrors._getESSymbol(symbol);
if (privateSymbol != null) {
return privateSymbol;
}
return _js_mirrors.getName(symbol);
};
dart.lazyFn(_js_mirrors._getMember, () => SymbolTodynamic());
_js_mirrors._getNameForESSymbol = function(member) {
dart.assert(typeof member == "symbol");
let str = dart.toString(member);
dart.assert(dart.test(str[dartx.startsWith]('Symbol(')) && dart.test(str[dartx.endsWith](')')));
return str[dartx.substring](7, dart.notNull(str[dartx.length]) - 1);
};
dart.lazyFn(_js_mirrors._getNameForESSymbol, () => dynamicToString());
_js_mirrors._getSymbolForESSymbol = function(member) {
let name = _js_mirrors._getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
};
dart.lazyFn(_js_mirrors._getSymbolForESSymbol, () => dynamicToSymbol());
_js_mirrors._getSymbolForMember = function(member) {
if (typeof member == 'string') {
return core.Symbol.new(member);
} else {
let name = _js_mirrors._getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
}
};
dart.lazyFn(_js_mirrors._getSymbolForMember, () => dynamicToSymbol());
_js_mirrors._toDartMap = function(data) {
if (data == null) return dart.map();
let map = _js_mirrors._dart.map(data);
if (data == null) return dart.map({}, core.Symbol, dart.dynamic);
let map = MapOfSymbol$dynamic().new();
let publicMembers = Object.getOwnPropertyNames(data);
for (let member of core.Iterable._check(publicMembers)) {
let symbol = core.Symbol.new(core.String._check(member));
map[dartx._set](symbol, data[member]);
}
let privateMembers = Object.getOwnPropertySymbols(data);
for (let member of core.Iterable._check(privateMembers)) {
let name = _js_mirrors._getNameForESSymbol(member);
map[dartx._set](name, data[member]);
let symbol = _js_mirrors._getSymbolForESSymbol(member);
map[dartx._set](symbol, data[member]);
}
return map;
};
dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMap());
dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getConstructors = function(obj) {
let sig = _js_mirrors._dart.getConstructorSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getFields = function(obj) {
let sig = _js_mirrors._dart.getFieldSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getFields, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getFields, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getMethods = function(obj) {
let sig = _js_mirrors._dart.getMethodSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getGetters = function(obj) {
let sig = _js_mirrors._dart.getGetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getSetters = function(obj) {
let sig = _js_mirrors._dart.getSetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticFields = function(obj) {
let sig = _js_mirrors._dart.getStaticFieldSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStatics = function(obj) {
let sig = _js_mirrors._dart.getStaticSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticGetters = function(obj) {
let sig = _js_mirrors._dart.getStaticGetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticSetters = function(obj) {
let sig = _js_mirrors._dart.getStaticSetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._unwrap = function(obj) {
return _js_mirrors._dart.unwrapType(obj);
};
@ -13435,15 +13491,7 @@
[_getAccessor](reflectee, symbol, args, namedArgs) {
if (args === void 0) args = null;
if (namedArgs === void 0) namedArgs = null;
let name = _js_mirrors.getName(symbol);
if (!dart.test(name[dartx.startsWith]('_'))) return name;
let privateMembers = Object.getOwnPropertySymbols(reflectee);
dart.dsend(privateMembers, 'addAll', Object.getOwnPropertySymbols(reflectee.__proto__));
for (let member of core.Iterable._check(privateMembers)) {
let privateName = _js_mirrors._getNameForESSymbol(member);
if (name == privateName) return member;
}
return new core.NoSuchMethodError(reflectee, symbol, args, namedArgs);
return _js_mirrors._getMember(symbol);
}
getField(symbol) {
let name = this[_getAccessor](this.reflectee, symbol);
@ -13520,6 +13568,7 @@
let const$0;
const _declarations = Symbol('_declarations');
const _raw = Symbol('_raw');
const _mixin = Symbol('_mixin');
const _typeArguments = Symbol('_typeArguments');
let const$1;
_js_mirrors.JsClassMirror = class JsClassMirror extends _js_mirrors.JsMirror {
@ -13536,67 +13585,66 @@
this[_declarations] = MapOfSymbol$DeclarationMirror().new();
let unwrapped = _js_mirrors._unwrap(this[_cls]);
let constructors = _js_mirrors._getConstructors(unwrapped);
constructors[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
}, StringAnddynamicTovoid()));
constructors[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
if (dart.test(constructors[dartx.isEmpty])) {
let name = 'new';
let ft = _js_mirrors._defaultConstructorType(_js_mirrors._unwrap(this[_cls]));
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
}
let fields = _js_mirrors._getFields(unwrapped);
fields[dartx.forEach](dart.fn((name, t) => {
let symbol = core.Symbol.new(name);
fields[dartx.forEach](dart.fn((symbol, t) => {
let metadata = [];
if (core.List.is(t)) {
metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
t = dart.dindex(t, 0);
}
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, StringAnddynamicTovoid()));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, SymbolAnddynamicTovoid()));
let methods = _js_mirrors._getMethods(unwrapped);
methods[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
methods[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let getters = _js_mirrors._getGetters(unwrapped);
getters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
getters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let setters = _js_mirrors._getSetters(unwrapped);
setters[dartx.forEach](dart.fn((name, ft) => {
name = dart.notNull(name) + '=';
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
setters[dartx.forEach](dart.fn((symbol, ft) => {
let name = dart.notNull(_js_mirrors.getName(symbol)) + '=';
symbol = new _internal.Symbol.es6(name, _js_mirrors._getESSymbol(symbol));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticFields = _js_mirrors._getStaticFields(unwrapped);
staticFields[dartx.forEach](dart.fn((name, t) => {
let symbol = core.Symbol.new(name);
staticFields[dartx.forEach](dart.fn((symbol, t) => {
let name = _js_mirrors.getName(symbol);
let metadata = [];
if (core.List.is(t)) {
metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
t = dart.dindex(t, 0);
}
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, StringAnddynamicTovoid()));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, SymbolAnddynamicTovoid()));
let statics = _js_mirrors._getStatics(unwrapped);
statics[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
statics[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticGetters = _js_mirrors._getStaticGetters(unwrapped);
staticGetters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
staticGetters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticSetters = _js_mirrors._getStaticSetters(unwrapped);
staticSetters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
staticSetters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
this[_declarations] = MapOfSymbol$DeclarationMirror().unmodifiable(this[_declarations]);
}
return this[_declarations];
@ -13605,7 +13653,7 @@
this[_cls] = cls;
this[_raw] = _js_mirrors._getGenericClass(_js_mirrors._unwrap(cls));
this.simpleName = core.Symbol.new(_js_mirrors._unwrap(cls).name);
this.mixin = null;
this[_mixin] = null;
this[_typeArguments] = null;
this[_metadata$] = null;
this[_declarations] = null;
@ -13676,6 +13724,21 @@
return mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(_js_mirrors._unwrap(this[_cls]).__proto__))));
}
}
get mixin() {
if (this[_mixin] != null) {
return this[_mixin];
}
let mixins = _js_mirrors._getMixins(_js_mirrors._unwrap(this[_cls]));
if (mixins == null || dart.test(dart.dload(mixins, 'isEmpty'))) {
this[_mixin] = this;
return this[_mixin];
}
if (dart.test(dart.dsend(dart.dload(mixins, 'length'), '>', 1))) {
dart.throw(new core.UnsupportedError("ClassMirror.mixin not yet supported for " + dart.str`classes (${this[_cls]}) with multiple mixins`));
}
this[_mixin] = mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(dart.dindex(mixins, 0)))));
return this[_mixin];
}
toString() {
return dart.str`ClassMirror on '${this[_cls]}'`;
}
@ -13724,7 +13787,7 @@
[_cls]: core.Type,
simpleName: core.Symbol,
[_raw]: dart.dynamic,
mixin: mirrors.ClassMirror,
[_mixin]: mirrors.ClassMirror,
[_typeArguments]: ListOfTypeMirror(),
[_metadata$]: ListOfInstanceMirror(),
[_declarations]: MapOfSymbol$DeclarationMirror()
@ -13738,7 +13801,8 @@
isOriginalDeclaration: dart.definiteFunctionType(core.bool, []),
typeArguments: dart.definiteFunctionType(core.List$(mirrors.TypeMirror), []),
originalDeclaration: dart.definiteFunctionType(mirrors.TypeMirror, []),
superclass: dart.definiteFunctionType(mirrors.ClassMirror, [])
superclass: dart.definiteFunctionType(mirrors.ClassMirror, []),
mixin: dart.definiteFunctionType(mirrors.ClassMirror, [])
}),
methods: () => ({
newInstance: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()]),
@ -13747,13 +13811,15 @@
invoke: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()])
})
});
const _symbol = Symbol('_symbol');
const _name$ = Symbol('_name');
_js_mirrors.JsVariableMirror = class JsVariableMirror extends _js_mirrors.JsMirror {
get simpleName() {
return core.Symbol.new(this[_name$]);
return this[_symbol];
}
_(name, t, annotations) {
this[_name$] = name;
_(symbol, t, annotations) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.type = _js_mirrors.reflectType(t);
this.metadata = ListOfInstanceMirror().unmodifiable(annotations[dartx.map](mirrors.InstanceMirror)(dart.fn(a => _js_mirrors.reflect(a), dynamicToInstanceMirror())));
this.isStatic = false;
@ -13784,8 +13850,9 @@
dart.defineNamedConstructor(_js_mirrors.JsVariableMirror, '_');
_js_mirrors.JsVariableMirror[dart.implements] = () => [mirrors.VariableMirror];
dart.setSignature(_js_mirrors.JsVariableMirror, {
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.String, core.Type, core.List])}),
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.Symbol, core.Type, core.List])}),
fields: () => ({
[_symbol]: core.Symbol,
[_name$]: core.String,
type: mirrors.TypeMirror,
metadata: ListOfInstanceMirror(),
@ -13795,8 +13862,8 @@
getters: () => ({simpleName: dart.definiteFunctionType(core.Symbol, [])})
});
_js_mirrors.JsParameterMirror = class JsParameterMirror extends _js_mirrors.JsVariableMirror {
_(name, t, annotations) {
super._(name, t, annotations);
_(member, t, annotations) {
super._(member, t, annotations);
}
toString() {
return dart.str`ParameterMirror on '${this[_name$]}'`;
@ -13835,7 +13902,7 @@
dart.defineNamedConstructor(_js_mirrors.JsParameterMirror, '_');
_js_mirrors.JsParameterMirror[dart.implements] = () => [mirrors.ParameterMirror];
dart.setSignature(_js_mirrors.JsParameterMirror, {
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.String, core.Type, core.List])})
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.Symbol, core.Type, core.List])})
});
const _params = Symbol('_params');
const _createParameterMirrorList = Symbol('_createParameterMirrorList');
@ -13850,10 +13917,11 @@
return this[_name$][dartx.startsWith]('_');
}
get simpleName() {
return core.Symbol.new(this[_name$]);
return this[_symbol];
}
_constructor(cls, name, ftype) {
this[_name$] = name;
_constructor(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.isConstructor = true;
this.isStatic = false;
this[_params] = null;
@ -13861,8 +13929,9 @@
this.isFinal = false;
this[_createParameterMirrorList](ftype);
}
_instanceMethod(cls, name, ftype) {
this[_name$] = name;
_instanceMethod(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.isConstructor = false;
this.isStatic = false;
this[_params] = null;
@ -13870,8 +13939,9 @@
this.isFinal = false;
this[_createParameterMirrorList](ftype);
}
_staticMethod(cls, name, ftype) {
this[_name$] = name;
_staticMethod(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.isConstructor = false;
this.isStatic = true;
this[_params] = null;
@ -13880,7 +13950,7 @@
this[_createParameterMirrorList](ftype);
}
get constructorName() {
return dart.test(this.isConstructor) ? core.Symbol.new(this[_name$]) : null;
return dart.test(this.isConstructor) ? this[_symbol] : null;
}
get parameters() {
return this[_params];
@ -13909,13 +13979,13 @@
for (let i = 0; i < dart.notNull(args[dartx.length]); ++i) {
let type = args[dartx._get](i);
let metadata = dart.dindex(dart.dload(ftype, 'metadata'), i);
let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
params[dartx._set](i, param);
}
for (let i = 0; i < dart.notNull(opts[dartx.length]); ++i) {
let type = opts[dartx._get](i);
let metadata = dart.dindex(dart.dload(ftype, 'metadata'), dart.notNull(args[dartx.length]) + i);
let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
params[dartx._set](i + dart.notNull(args[dartx.length]), param);
}
this[_params] = ListOfParameterMirror().unmodifiable(params);
@ -13975,11 +14045,12 @@
_js_mirrors.JsMethodMirror[dart.implements] = () => [mirrors.MethodMirror];
dart.setSignature(_js_mirrors.JsMethodMirror, {
constructors: () => ({
_constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
_instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
_staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic])
_constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
_instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
_staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic])
}),
fields: () => ({
[_symbol]: core.Symbol,
[_name$]: core.String,
[_params]: ListOfParameterMirror(),
[_metadata$]: ListOfInstanceMirror(),

View file

@ -614,11 +614,12 @@ let dynamicToInstanceMirror = () => (dynamicToInstanceMirror = dart.constFn(dart
let TypeToTypeMirror = () => (TypeToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [core.Type])))();
let dynamicAndListTodynamic = () => (dynamicAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.List])))();
let dynamicAndStringAndListTodynamic = () => (dynamicAndStringAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.String, core.List])))();
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let SymbolTodynamic = () => (SymbolTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Symbol])))();
let dynamicToSymbol = () => (dynamicToSymbol = dart.constFn(dart.definiteFunctionType(core.Symbol, [dart.dynamic])))();
let dynamicToMapOfSymbol$dynamic = () => (dynamicToMapOfSymbol$dynamic = dart.constFn(dart.definiteFunctionType(MapOfSymbol$dynamic(), [dart.dynamic])))();
let TypeAndInvocationTodynamic = () => (TypeAndInvocationTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Type, core.Invocation])))();
let SymbolAnddynamicTovoid = () => (SymbolAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Symbol, dart.dynamic])))();
let MapOfSymbol$dynamicTodynamic = () => (MapOfSymbol$dynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [MapOfSymbol$dynamic()])))();
let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
let dynamicToTypeMirror = () => (dynamicToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [dart.dynamic])))();
let dynamicAnddynamicAnddynamicTovoid = () => (dynamicAnddynamicAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, dart.dynamic, dart.dynamic])))();
let ListToList = () => (ListToList = dart.constFn(dart.definiteFunctionType(core.List, [core.List])))();
@ -676,6 +677,7 @@ let ObjectAndObjectTobool = () => (ObjectAndObjectTobool = dart.constFn(dart.def
let ObjectToint = () => (ObjectToint = dart.constFn(dart.definiteFunctionType(core.int, [core.Object])))();
let ObjectTovoid = () => (ObjectTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Object])))();
let StringAndStringTovoid = () => (StringAndStringTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, core.String])))();
let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
let MapOfString$StringAndStringToMapOfString$String = () => (MapOfString$StringAndStringToMapOfString$String = dart.constFn(dart.definiteFunctionType(MapOfString$String(), [MapOfString$String(), core.String])))();
let intAndintAndintTovoid = () => (intAndintAndintTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.int, core.int, core.int])))();
let String__Tovoid = () => (String__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String], [dart.dynamic])))();
@ -747,6 +749,7 @@ let StringToElementListOfElement = () => (StringToElementListOfElement = dart.co
let NodeAndNodeTovoid = () => (NodeAndNodeTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [html.Node, html.Node])))();
let dynamicToImageData = () => (dynamicToImageData = dart.constFn(dart.definiteFunctionType(html.ImageData, [dart.dynamic])))();
let ImageDataTodynamic = () => (ImageDataTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [html.ImageData])))();
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let Map__Todynamic = () => (Map__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Map], [dynamicTovoid()])))();
let ListOfStringToList = () => (ListOfStringToList = dart.constFn(dart.definiteFunctionType(core.List, [ListOfString()])))();
let dynamicToDateTime = () => (dynamicToDateTime = dart.constFn(dart.definiteFunctionType(core.DateTime, [dart.dynamic])))();
@ -778,10 +781,10 @@ dart.mixin = function(base, ...mixins) {
return Mixin;
};
dart.getMixins = function(clazz) {
return clazz[dart._mixins];
return Object.hasOwnProperty.call(clazz, dart._mixins) ? clazz[dart._mixins] : null;
};
dart.getImplements = function(clazz) {
return clazz[dart.implements];
return Object.hasOwnProperty.call(clazz, dart.implements) ? clazz[dart.implements] : null;
};
dart.flattenFutures = function(builder) {
function flatten(T) {
@ -8655,18 +8658,26 @@ dart.setSignature(_internal.Sort, {
});
_internal.Sort._INSERTION_SORT_THRESHOLD = 32;
const _name = Symbol('_name');
const _nativeSymbol = Symbol('_nativeSymbol');
_internal.Symbol = class Symbol extends core.Object {
new(name) {
this[_name] = name;
this[_nativeSymbol] = null;
}
es6(name, nativeSymbol) {
this[_name] = name;
this[_nativeSymbol] = nativeSymbol;
}
unvalidated(name) {
this[_name] = name;
this[_nativeSymbol] = null;
}
validated(name) {
this[_name] = _internal.Symbol.validatePublicSymbol(name);
this[_nativeSymbol] = null;
}
['=='](other) {
return _internal.Symbol.is(other) && this[_name] == other[_name];
return _internal.Symbol.is(other) && this[_name] == other[_name] && dart.equals(this[_nativeSymbol], other[_nativeSymbol]);
}
get hashCode() {
let hash = this._hashCode;
@ -8682,6 +8693,9 @@ _internal.Symbol = class Symbol extends core.Object {
static getName(symbol) {
return symbol[_name];
}
static getNativeSymbol(symbol) {
return symbol[_nativeSymbol];
}
static validatePublicSymbol(name) {
if (dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.publicSymbolPattern.hasMatch(name))) return name;
if (dart.test(name[dartx.startsWith]('_'))) {
@ -8693,16 +8707,21 @@ _internal.Symbol = class Symbol extends core.Object {
return dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.symbolPattern.hasMatch(name));
}
};
dart.defineNamedConstructor(_internal.Symbol, 'es6');
dart.defineNamedConstructor(_internal.Symbol, 'unvalidated');
dart.defineNamedConstructor(_internal.Symbol, 'validated');
_internal.Symbol[dart.implements] = () => [core.Symbol];
dart.setSignature(_internal.Symbol, {
constructors: () => ({
new: dart.definiteFunctionType(_internal.Symbol, [core.String]),
es6: dart.definiteFunctionType(_internal.Symbol, [core.String, dart.dynamic]),
unvalidated: dart.definiteFunctionType(_internal.Symbol, [core.String]),
validated: dart.definiteFunctionType(_internal.Symbol, [core.String])
}),
fields: () => ({[_name]: core.String}),
fields: () => ({
[_name]: core.String,
[_nativeSymbol]: dart.dynamic
}),
methods: () => ({'==': dart.definiteFunctionType(core.bool, [core.Object])}),
sfields: () => ({
reservedWordRE: core.String,
@ -8714,10 +8733,11 @@ dart.setSignature(_internal.Symbol, {
}),
statics: () => ({
getName: dart.definiteFunctionType(core.String, [_internal.Symbol]),
getNativeSymbol: dart.definiteFunctionType(dart.dynamic, [_internal.Symbol]),
validatePublicSymbol: dart.definiteFunctionType(core.String, [core.String]),
isValidSymbol: dart.definiteFunctionType(core.bool, [core.String])
}),
names: ['getName', 'validatePublicSymbol', 'isValidSymbol']
names: ['getName', 'getNativeSymbol', 'validatePublicSymbol', 'isValidSymbol']
});
_internal.Symbol.reservedWordRE = '(?:assert|break|c(?:a(?:se|tch)|lass|on(?:st|tinue))|d(?:efault|o)|' + 'e(?:lse|num|xtends)|f(?:alse|inal(?:ly)?|or)|i[fns]|n(?:ew|ull)|' + 'ret(?:hrow|urn)|s(?:uper|witch)|t(?:h(?:is|row)|r(?:ue|y))|' + 'v(?:ar|oid)|w(?:hile|ith))';
_internal.Symbol.operatorRE = '(?:[\\-+*/%&|^]|\\[\\]=?|==|~/?|<[<=]?|>[>=]?|unary-)';
@ -13228,73 +13248,109 @@ _js_mirrors._defaultConstructorType = function(type) {
return _js_mirrors._dart.definiteFunctionType(type, []);
};
dart.fn(_js_mirrors._defaultConstructorType, dynamicTodynamic());
_js_mirrors._getMixins = function(type) {
return _js_mirrors._dart.getMixins(type, []);
};
dart.fn(_js_mirrors._getMixins, dynamicTodynamic());
_js_mirrors._Lazy$ = dart.generic(T => {
const _Lazy = dart.typedef('_Lazy', () => dart.functionType(T, []));
return _Lazy;
});
_js_mirrors._Lazy = _Lazy();
_js_mirrors._getESSymbol = function(symbol) {
return _internal.Symbol.getNativeSymbol(_internal.Symbol.as(symbol));
};
dart.lazyFn(_js_mirrors._getESSymbol, () => SymbolTodynamic());
_js_mirrors._getMember = function(symbol) {
let privateSymbol = _js_mirrors._getESSymbol(symbol);
if (privateSymbol != null) {
return privateSymbol;
}
return _js_mirrors.getName(symbol);
};
dart.lazyFn(_js_mirrors._getMember, () => SymbolTodynamic());
_js_mirrors._getNameForESSymbol = function(member) {
dart.assert(typeof member == "symbol");
let str = dart.toString(member);
dart.assert(dart.test(str[dartx.startsWith]('Symbol(')) && dart.test(str[dartx.endsWith](')')));
return str[dartx.substring](7, dart.notNull(str[dartx.length]) - 1);
};
dart.lazyFn(_js_mirrors._getNameForESSymbol, () => dynamicToString());
_js_mirrors._getSymbolForESSymbol = function(member) {
let name = _js_mirrors._getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
};
dart.lazyFn(_js_mirrors._getSymbolForESSymbol, () => dynamicToSymbol());
_js_mirrors._getSymbolForMember = function(member) {
if (typeof member == 'string') {
return core.Symbol.new(member);
} else {
let name = _js_mirrors._getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
}
};
dart.lazyFn(_js_mirrors._getSymbolForMember, () => dynamicToSymbol());
_js_mirrors._toDartMap = function(data) {
if (data == null) return dart.map();
let map = _js_mirrors._dart.map(data);
if (data == null) return dart.map({}, core.Symbol, dart.dynamic);
let map = MapOfSymbol$dynamic().new();
let publicMembers = Object.getOwnPropertyNames(data);
for (let member of core.Iterable._check(publicMembers)) {
let symbol = core.Symbol.new(core.String._check(member));
map[dartx._set](symbol, data[member]);
}
let privateMembers = Object.getOwnPropertySymbols(data);
for (let member of core.Iterable._check(privateMembers)) {
let name = _js_mirrors._getNameForESSymbol(member);
map[dartx._set](name, data[member]);
let symbol = _js_mirrors._getSymbolForESSymbol(member);
map[dartx._set](symbol, data[member]);
}
return map;
};
dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMap());
dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getConstructors = function(obj) {
let sig = _js_mirrors._dart.getConstructorSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getFields = function(obj) {
let sig = _js_mirrors._dart.getFieldSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getFields, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getFields, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getMethods = function(obj) {
let sig = _js_mirrors._dart.getMethodSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getGetters = function(obj) {
let sig = _js_mirrors._dart.getGetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getSetters = function(obj) {
let sig = _js_mirrors._dart.getSetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticFields = function(obj) {
let sig = _js_mirrors._dart.getStaticFieldSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStatics = function(obj) {
let sig = _js_mirrors._dart.getStaticSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticGetters = function(obj) {
let sig = _js_mirrors._dart.getStaticGetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticSetters = function(obj) {
let sig = _js_mirrors._dart.getStaticSetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._unwrap = function(obj) {
return _js_mirrors._dart.unwrapType(obj);
};
@ -13433,15 +13489,7 @@ _js_mirrors.JsInstanceMirror = class JsInstanceMirror extends _js_mirrors.JsObje
[_getAccessor](reflectee, symbol, args, namedArgs) {
if (args === void 0) args = null;
if (namedArgs === void 0) namedArgs = null;
let name = _js_mirrors.getName(symbol);
if (!dart.test(name[dartx.startsWith]('_'))) return name;
let privateMembers = Object.getOwnPropertySymbols(reflectee);
dart.dsend(privateMembers, 'addAll', Object.getOwnPropertySymbols(reflectee.__proto__));
for (let member of core.Iterable._check(privateMembers)) {
let privateName = _js_mirrors._getNameForESSymbol(member);
if (name == privateName) return member;
}
return new core.NoSuchMethodError(reflectee, symbol, args, namedArgs);
return _js_mirrors._getMember(symbol);
}
getField(symbol) {
let name = this[_getAccessor](this.reflectee, symbol);
@ -13518,6 +13566,7 @@ const _cls = Symbol('_cls');
let const;
const _declarations = Symbol('_declarations');
const _raw = Symbol('_raw');
const _mixin = Symbol('_mixin');
const _typeArguments = Symbol('_typeArguments');
let const;
_js_mirrors.JsClassMirror = class JsClassMirror extends _js_mirrors.JsMirror {
@ -13534,67 +13583,66 @@ _js_mirrors.JsClassMirror = class JsClassMirror extends _js_mirrors.JsMirror {
this[_declarations] = MapOfSymbol$DeclarationMirror().new();
let unwrapped = _js_mirrors._unwrap(this[_cls]);
let constructors = _js_mirrors._getConstructors(unwrapped);
constructors[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
}, StringAnddynamicTovoid()));
constructors[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
if (dart.test(constructors[dartx.isEmpty])) {
let name = 'new';
let ft = _js_mirrors._defaultConstructorType(_js_mirrors._unwrap(this[_cls]));
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
}
let fields = _js_mirrors._getFields(unwrapped);
fields[dartx.forEach](dart.fn((name, t) => {
let symbol = core.Symbol.new(name);
fields[dartx.forEach](dart.fn((symbol, t) => {
let metadata = [];
if (core.List.is(t)) {
metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
t = dart.dindex(t, 0);
}
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, StringAnddynamicTovoid()));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, SymbolAnddynamicTovoid()));
let methods = _js_mirrors._getMethods(unwrapped);
methods[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
methods[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let getters = _js_mirrors._getGetters(unwrapped);
getters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
getters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let setters = _js_mirrors._getSetters(unwrapped);
setters[dartx.forEach](dart.fn((name, ft) => {
name = dart.notNull(name) + '=';
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
setters[dartx.forEach](dart.fn((symbol, ft) => {
let name = dart.notNull(_js_mirrors.getName(symbol)) + '=';
symbol = new _internal.Symbol.es6(name, _js_mirrors._getESSymbol(symbol));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticFields = _js_mirrors._getStaticFields(unwrapped);
staticFields[dartx.forEach](dart.fn((name, t) => {
let symbol = core.Symbol.new(name);
staticFields[dartx.forEach](dart.fn((symbol, t) => {
let name = _js_mirrors.getName(symbol);
let metadata = [];
if (core.List.is(t)) {
metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
t = dart.dindex(t, 0);
}
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, StringAnddynamicTovoid()));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, SymbolAnddynamicTovoid()));
let statics = _js_mirrors._getStatics(unwrapped);
statics[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
statics[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticGetters = _js_mirrors._getStaticGetters(unwrapped);
staticGetters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
staticGetters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticSetters = _js_mirrors._getStaticSetters(unwrapped);
staticSetters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
staticSetters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
this[_declarations] = MapOfSymbol$DeclarationMirror().unmodifiable(this[_declarations]);
}
return this[_declarations];
@ -13603,7 +13651,7 @@ _js_mirrors.JsClassMirror = class JsClassMirror extends _js_mirrors.JsMirror {
this[_cls] = cls;
this[_raw] = _js_mirrors._getGenericClass(_js_mirrors._unwrap(cls));
this.simpleName = core.Symbol.new(_js_mirrors._unwrap(cls).name);
this.mixin = null;
this[_mixin] = null;
this[_typeArguments] = null;
this[_metadata] = null;
this[_declarations] = null;
@ -13674,6 +13722,21 @@ _js_mirrors.JsClassMirror = class JsClassMirror extends _js_mirrors.JsMirror {
return mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(_js_mirrors._unwrap(this[_cls]).__proto__))));
}
}
get mixin() {
if (this[_mixin] != null) {
return this[_mixin];
}
let mixins = _js_mirrors._getMixins(_js_mirrors._unwrap(this[_cls]));
if (mixins == null || dart.test(dart.dload(mixins, 'isEmpty'))) {
this[_mixin] = this;
return this[_mixin];
}
if (dart.test(dart.dsend(dart.dload(mixins, 'length'), '>', 1))) {
dart.throw(new core.UnsupportedError("ClassMirror.mixin not yet supported for " + dart.str`classes (${this[_cls]}) with multiple mixins`));
}
this[_mixin] = mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(dart.dindex(mixins, 0)))));
return this[_mixin];
}
toString() {
return dart.str`ClassMirror on '${this[_cls]}'`;
}
@ -13722,7 +13785,7 @@ dart.setSignature(_js_mirrors.JsClassMirror, {
[_cls]: core.Type,
simpleName: core.Symbol,
[_raw]: dart.dynamic,
mixin: mirrors.ClassMirror,
[_mixin]: mirrors.ClassMirror,
[_typeArguments]: ListOfTypeMirror(),
[_metadata]: ListOfInstanceMirror(),
[_declarations]: MapOfSymbol$DeclarationMirror()
@ -13736,7 +13799,8 @@ dart.setSignature(_js_mirrors.JsClassMirror, {
isOriginalDeclaration: dart.definiteFunctionType(core.bool, []),
typeArguments: dart.definiteFunctionType(core.List$(mirrors.TypeMirror), []),
originalDeclaration: dart.definiteFunctionType(mirrors.TypeMirror, []),
superclass: dart.definiteFunctionType(mirrors.ClassMirror, [])
superclass: dart.definiteFunctionType(mirrors.ClassMirror, []),
mixin: dart.definiteFunctionType(mirrors.ClassMirror, [])
}),
methods: () => ({
newInstance: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()]),
@ -13745,13 +13809,15 @@ dart.setSignature(_js_mirrors.JsClassMirror, {
invoke: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()])
})
});
const _symbol = Symbol('_symbol');
const _name = Symbol('_name');
_js_mirrors.JsVariableMirror = class JsVariableMirror extends _js_mirrors.JsMirror {
get simpleName() {
return core.Symbol.new(this[_name]);
return this[_symbol];
}
_(name, t, annotations) {
this[_name] = name;
_(symbol, t, annotations) {
this[_symbol] = symbol;
this[_name] = _js_mirrors.getName(symbol);
this.type = _js_mirrors.reflectType(t);
this.metadata = ListOfInstanceMirror().unmodifiable(annotations[dartx.map](mirrors.InstanceMirror)(dart.fn(a => _js_mirrors.reflect(a), dynamicToInstanceMirror())));
this.isStatic = false;
@ -13782,8 +13848,9 @@ _js_mirrors.JsVariableMirror = class JsVariableMirror extends _js_mirrors.JsMirr
dart.defineNamedConstructor(_js_mirrors.JsVariableMirror, '_');
_js_mirrors.JsVariableMirror[dart.implements] = () => [mirrors.VariableMirror];
dart.setSignature(_js_mirrors.JsVariableMirror, {
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.String, core.Type, core.List])}),
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.Symbol, core.Type, core.List])}),
fields: () => ({
[_symbol]: core.Symbol,
[_name]: core.String,
type: mirrors.TypeMirror,
metadata: ListOfInstanceMirror(),
@ -13793,8 +13860,8 @@ dart.setSignature(_js_mirrors.JsVariableMirror, {
getters: () => ({simpleName: dart.definiteFunctionType(core.Symbol, [])})
});
_js_mirrors.JsParameterMirror = class JsParameterMirror extends _js_mirrors.JsVariableMirror {
_(name, t, annotations) {
super._(name, t, annotations);
_(member, t, annotations) {
super._(member, t, annotations);
}
toString() {
return dart.str`ParameterMirror on '${this[_name]}'`;
@ -13833,7 +13900,7 @@ _js_mirrors.JsParameterMirror = class JsParameterMirror extends _js_mirrors.JsVa
dart.defineNamedConstructor(_js_mirrors.JsParameterMirror, '_');
_js_mirrors.JsParameterMirror[dart.implements] = () => [mirrors.ParameterMirror];
dart.setSignature(_js_mirrors.JsParameterMirror, {
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.String, core.Type, core.List])})
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.Symbol, core.Type, core.List])})
});
const _params = Symbol('_params');
const _createParameterMirrorList = Symbol('_createParameterMirrorList');
@ -13848,10 +13915,11 @@ _js_mirrors.JsMethodMirror = class JsMethodMirror extends _js_mirrors.JsMirror {
return this[_name][dartx.startsWith]('_');
}
get simpleName() {
return core.Symbol.new(this[_name]);
return this[_symbol];
}
_constructor(cls, name, ftype) {
this[_name] = name;
_constructor(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name] = _js_mirrors.getName(symbol);
this.isConstructor = true;
this.isStatic = false;
this[_params] = null;
@ -13859,8 +13927,9 @@ _js_mirrors.JsMethodMirror = class JsMethodMirror extends _js_mirrors.JsMirror {
this.isFinal = false;
this[_createParameterMirrorList](ftype);
}
_instanceMethod(cls, name, ftype) {
this[_name] = name;
_instanceMethod(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name] = _js_mirrors.getName(symbol);
this.isConstructor = false;
this.isStatic = false;
this[_params] = null;
@ -13868,8 +13937,9 @@ _js_mirrors.JsMethodMirror = class JsMethodMirror extends _js_mirrors.JsMirror {
this.isFinal = false;
this[_createParameterMirrorList](ftype);
}
_staticMethod(cls, name, ftype) {
this[_name] = name;
_staticMethod(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name] = _js_mirrors.getName(symbol);
this.isConstructor = false;
this.isStatic = true;
this[_params] = null;
@ -13878,7 +13948,7 @@ _js_mirrors.JsMethodMirror = class JsMethodMirror extends _js_mirrors.JsMirror {
this[_createParameterMirrorList](ftype);
}
get constructorName() {
return dart.test(this.isConstructor) ? core.Symbol.new(this[_name]) : null;
return dart.test(this.isConstructor) ? this[_symbol] : null;
}
get parameters() {
return this[_params];
@ -13907,13 +13977,13 @@ _js_mirrors.JsMethodMirror = class JsMethodMirror extends _js_mirrors.JsMirror {
for (let i = 0; i < dart.notNull(args[dartx.length]); ++i) {
let type = args[dartx._get](i);
let metadata = dart.dindex(dart.dload(ftype, 'metadata'), i);
let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
params[dartx._set](i, param);
}
for (let i = 0; i < dart.notNull(opts[dartx.length]); ++i) {
let type = opts[dartx._get](i);
let metadata = dart.dindex(dart.dload(ftype, 'metadata'), dart.notNull(args[dartx.length]) + i);
let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
params[dartx._set](i + dart.notNull(args[dartx.length]), param);
}
this[_params] = ListOfParameterMirror().unmodifiable(params);
@ -13973,11 +14043,12 @@ dart.defineNamedConstructor(_js_mirrors.JsMethodMirror, '_staticMethod');
_js_mirrors.JsMethodMirror[dart.implements] = () => [mirrors.MethodMirror];
dart.setSignature(_js_mirrors.JsMethodMirror, {
constructors: () => ({
_constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
_instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
_staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic])
_constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
_instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
_staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic])
}),
fields: () => ({
[_symbol]: core.Symbol,
[_name]: core.String,
[_params]: ListOfParameterMirror(),
[_metadata]: ListOfInstanceMirror(),

View file

@ -617,11 +617,12 @@ dart_library.library('dart_sdk', null, /* Imports */[
let TypeToTypeMirror = () => (TypeToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [core.Type])))();
let dynamicAndListTodynamic = () => (dynamicAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.List])))();
let dynamicAndStringAndListTodynamic = () => (dynamicAndStringAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.String, core.List])))();
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let SymbolTodynamic = () => (SymbolTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Symbol])))();
let dynamicToSymbol = () => (dynamicToSymbol = dart.constFn(dart.definiteFunctionType(core.Symbol, [dart.dynamic])))();
let dynamicToMapOfSymbol$dynamic = () => (dynamicToMapOfSymbol$dynamic = dart.constFn(dart.definiteFunctionType(MapOfSymbol$dynamic(), [dart.dynamic])))();
let TypeAndInvocationTodynamic = () => (TypeAndInvocationTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Type, core.Invocation])))();
let SymbolAnddynamicTovoid = () => (SymbolAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Symbol, dart.dynamic])))();
let MapOfSymbol$dynamicTodynamic = () => (MapOfSymbol$dynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [MapOfSymbol$dynamic()])))();
let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
let dynamicToTypeMirror = () => (dynamicToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [dart.dynamic])))();
let dynamicAnddynamicAnddynamicTovoid = () => (dynamicAnddynamicAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, dart.dynamic, dart.dynamic])))();
let ListToList = () => (ListToList = dart.constFn(dart.definiteFunctionType(core.List, [core.List])))();
@ -679,6 +680,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
let ObjectToint = () => (ObjectToint = dart.constFn(dart.definiteFunctionType(core.int, [core.Object])))();
let ObjectTovoid = () => (ObjectTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Object])))();
let StringAndStringTovoid$ = () => (StringAndStringTovoid$ = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, core.String])))();
let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
let MapOfString$StringAndStringToMapOfString$String = () => (MapOfString$StringAndStringToMapOfString$String = dart.constFn(dart.definiteFunctionType(MapOfString$String(), [MapOfString$String(), core.String])))();
let intAndintAndintTovoid = () => (intAndintAndintTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.int, core.int, core.int])))();
let String__Tovoid = () => (String__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String], [dart.dynamic])))();
@ -750,6 +752,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
let NodeAndNodeTovoid = () => (NodeAndNodeTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [html$.Node, html$.Node])))();
let dynamicToImageData = () => (dynamicToImageData = dart.constFn(dart.definiteFunctionType(html$.ImageData, [dart.dynamic])))();
let ImageDataTodynamic = () => (ImageDataTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [html$.ImageData])))();
let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
let Map__Todynamic = () => (Map__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Map], [dynamicTovoid()])))();
let ListOfStringToList = () => (ListOfStringToList = dart.constFn(dart.definiteFunctionType(core.List, [ListOfString()])))();
let dynamicToDateTime = () => (dynamicToDateTime = dart.constFn(dart.definiteFunctionType(core.DateTime, [dart.dynamic])))();
@ -781,10 +784,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
return Mixin;
};
dart.getMixins = function(clazz) {
return clazz[dart._mixins];
return Object.hasOwnProperty.call(clazz, dart._mixins) ? clazz[dart._mixins] : null;
};
dart.getImplements = function(clazz) {
return clazz[dart.implements];
return Object.hasOwnProperty.call(clazz, dart.implements) ? clazz[dart.implements] : null;
};
dart.flattenFutures = function(builder) {
function flatten(T) {
@ -8658,18 +8661,26 @@ dart_library.library('dart_sdk', null, /* Imports */[
});
_internal.Sort._INSERTION_SORT_THRESHOLD = 32;
const _name = Symbol('_name');
const _nativeSymbol = Symbol('_nativeSymbol');
_internal.Symbol = class Symbol extends core.Object {
new(name) {
this[_name] = name;
this[_nativeSymbol] = null;
}
es6(name, nativeSymbol) {
this[_name] = name;
this[_nativeSymbol] = nativeSymbol;
}
unvalidated(name) {
this[_name] = name;
this[_nativeSymbol] = null;
}
validated(name) {
this[_name] = _internal.Symbol.validatePublicSymbol(name);
this[_nativeSymbol] = null;
}
['=='](other) {
return _internal.Symbol.is(other) && this[_name] == other[_name];
return _internal.Symbol.is(other) && this[_name] == other[_name] && dart.equals(this[_nativeSymbol], other[_nativeSymbol]);
}
get hashCode() {
let hash = this._hashCode;
@ -8685,6 +8696,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
static getName(symbol) {
return symbol[_name];
}
static getNativeSymbol(symbol) {
return symbol[_nativeSymbol];
}
static validatePublicSymbol(name) {
if (dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.publicSymbolPattern.hasMatch(name))) return name;
if (dart.test(name[dartx.startsWith]('_'))) {
@ -8696,16 +8710,21 @@ dart_library.library('dart_sdk', null, /* Imports */[
return dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.symbolPattern.hasMatch(name));
}
};
dart.defineNamedConstructor(_internal.Symbol, 'es6');
dart.defineNamedConstructor(_internal.Symbol, 'unvalidated');
dart.defineNamedConstructor(_internal.Symbol, 'validated');
_internal.Symbol[dart.implements] = () => [core.Symbol];
dart.setSignature(_internal.Symbol, {
constructors: () => ({
new: dart.definiteFunctionType(_internal.Symbol, [core.String]),
es6: dart.definiteFunctionType(_internal.Symbol, [core.String, dart.dynamic]),
unvalidated: dart.definiteFunctionType(_internal.Symbol, [core.String]),
validated: dart.definiteFunctionType(_internal.Symbol, [core.String])
}),
fields: () => ({[_name]: core.String}),
fields: () => ({
[_name]: core.String,
[_nativeSymbol]: dart.dynamic
}),
methods: () => ({'==': dart.definiteFunctionType(core.bool, [core.Object])}),
sfields: () => ({
reservedWordRE: core.String,
@ -8717,10 +8736,11 @@ dart_library.library('dart_sdk', null, /* Imports */[
}),
statics: () => ({
getName: dart.definiteFunctionType(core.String, [_internal.Symbol]),
getNativeSymbol: dart.definiteFunctionType(dart.dynamic, [_internal.Symbol]),
validatePublicSymbol: dart.definiteFunctionType(core.String, [core.String]),
isValidSymbol: dart.definiteFunctionType(core.bool, [core.String])
}),
names: ['getName', 'validatePublicSymbol', 'isValidSymbol']
names: ['getName', 'getNativeSymbol', 'validatePublicSymbol', 'isValidSymbol']
});
_internal.Symbol.reservedWordRE = '(?:assert|break|c(?:a(?:se|tch)|lass|on(?:st|tinue))|d(?:efault|o)|' + 'e(?:lse|num|xtends)|f(?:alse|inal(?:ly)?|or)|i[fns]|n(?:ew|ull)|' + 'ret(?:hrow|urn)|s(?:uper|witch)|t(?:h(?:is|row)|r(?:ue|y))|' + 'v(?:ar|oid)|w(?:hile|ith))';
_internal.Symbol.operatorRE = '(?:[\\-+*/%&|^]|\\[\\]=?|==|~/?|<[<=]?|>[>=]?|unary-)';
@ -13231,73 +13251,109 @@ dart_library.library('dart_sdk', null, /* Imports */[
return _js_mirrors._dart.definiteFunctionType(type, []);
};
dart.fn(_js_mirrors._defaultConstructorType, dynamicTodynamic$());
_js_mirrors._getMixins = function(type) {
return _js_mirrors._dart.getMixins(type, []);
};
dart.fn(_js_mirrors._getMixins, dynamicTodynamic$());
_js_mirrors._Lazy$ = dart.generic(T => {
const _Lazy = dart.typedef('_Lazy', () => dart.functionType(T, []));
return _Lazy;
});
_js_mirrors._Lazy = _Lazy();
_js_mirrors._getESSymbol = function(symbol) {
return _internal.Symbol.getNativeSymbol(_internal.Symbol.as(symbol));
};
dart.lazyFn(_js_mirrors._getESSymbol, () => SymbolTodynamic());
_js_mirrors._getMember = function(symbol) {
let privateSymbol = _js_mirrors._getESSymbol(symbol);
if (privateSymbol != null) {
return privateSymbol;
}
return _js_mirrors.getName(symbol);
};
dart.lazyFn(_js_mirrors._getMember, () => SymbolTodynamic());
_js_mirrors._getNameForESSymbol = function(member) {
dart.assert(typeof member == "symbol");
let str = dart.toString(member);
dart.assert(dart.test(str[dartx.startsWith]('Symbol(')) && dart.test(str[dartx.endsWith](')')));
return str[dartx.substring](7, dart.notNull(str[dartx.length]) - 1);
};
dart.lazyFn(_js_mirrors._getNameForESSymbol, () => dynamicToString());
_js_mirrors._getSymbolForESSymbol = function(member) {
let name = _js_mirrors._getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
};
dart.lazyFn(_js_mirrors._getSymbolForESSymbol, () => dynamicToSymbol());
_js_mirrors._getSymbolForMember = function(member) {
if (typeof member == 'string') {
return core.Symbol.new(member);
} else {
let name = _js_mirrors._getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
}
};
dart.lazyFn(_js_mirrors._getSymbolForMember, () => dynamicToSymbol());
_js_mirrors._toDartMap = function(data) {
if (data == null) return dart.map();
let map = _js_mirrors._dart.map(data);
if (data == null) return dart.map({}, core.Symbol, dart.dynamic);
let map = MapOfSymbol$dynamic().new();
let publicMembers = Object.getOwnPropertyNames(data);
for (let member of core.Iterable._check(publicMembers)) {
let symbol = core.Symbol.new(core.String._check(member));
map[dartx._set](symbol, data[member]);
}
let privateMembers = Object.getOwnPropertySymbols(data);
for (let member of core.Iterable._check(privateMembers)) {
let name = _js_mirrors._getNameForESSymbol(member);
map[dartx._set](name, data[member]);
let symbol = _js_mirrors._getSymbolForESSymbol(member);
map[dartx._set](symbol, data[member]);
}
return map;
};
dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMap());
dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getConstructors = function(obj) {
let sig = _js_mirrors._dart.getConstructorSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getFields = function(obj) {
let sig = _js_mirrors._dart.getFieldSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getFields, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getFields, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getMethods = function(obj) {
let sig = _js_mirrors._dart.getMethodSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getGetters = function(obj) {
let sig = _js_mirrors._dart.getGetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getSetters = function(obj) {
let sig = _js_mirrors._dart.getSetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticFields = function(obj) {
let sig = _js_mirrors._dart.getStaticFieldSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStatics = function(obj) {
let sig = _js_mirrors._dart.getStaticSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticGetters = function(obj) {
let sig = _js_mirrors._dart.getStaticGetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._getStaticSetters = function(obj) {
let sig = _js_mirrors._dart.getStaticSetterSig(obj);
return _js_mirrors._toDartMap(sig);
};
dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMap());
dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMapOfSymbol$dynamic());
_js_mirrors._unwrap = function(obj) {
return _js_mirrors._dart.unwrapType(obj);
};
@ -13436,15 +13492,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
[_getAccessor](reflectee, symbol, args, namedArgs) {
if (args === void 0) args = null;
if (namedArgs === void 0) namedArgs = null;
let name = _js_mirrors.getName(symbol);
if (!dart.test(name[dartx.startsWith]('_'))) return name;
let privateMembers = Object.getOwnPropertySymbols(reflectee);
dart.dsend(privateMembers, 'addAll', Object.getOwnPropertySymbols(reflectee.__proto__));
for (let member of core.Iterable._check(privateMembers)) {
let privateName = _js_mirrors._getNameForESSymbol(member);
if (name == privateName) return member;
}
return new core.NoSuchMethodError(reflectee, symbol, args, namedArgs);
return _js_mirrors._getMember(symbol);
}
getField(symbol) {
let name = this[_getAccessor](this.reflectee, symbol);
@ -13521,6 +13569,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
let const$0;
const _declarations = Symbol('_declarations');
const _raw = Symbol('_raw');
const _mixin = Symbol('_mixin');
const _typeArguments = Symbol('_typeArguments');
let const$1;
_js_mirrors.JsClassMirror = class JsClassMirror extends _js_mirrors.JsMirror {
@ -13537,67 +13586,66 @@ dart_library.library('dart_sdk', null, /* Imports */[
this[_declarations] = MapOfSymbol$DeclarationMirror().new();
let unwrapped = _js_mirrors._unwrap(this[_cls]);
let constructors = _js_mirrors._getConstructors(unwrapped);
constructors[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
}, StringAnddynamicTovoid()));
constructors[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
if (dart.test(constructors[dartx.isEmpty])) {
let name = 'new';
let ft = _js_mirrors._defaultConstructorType(_js_mirrors._unwrap(this[_cls]));
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
}
let fields = _js_mirrors._getFields(unwrapped);
fields[dartx.forEach](dart.fn((name, t) => {
let symbol = core.Symbol.new(name);
fields[dartx.forEach](dart.fn((symbol, t) => {
let metadata = [];
if (core.List.is(t)) {
metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
t = dart.dindex(t, 0);
}
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, StringAnddynamicTovoid()));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, SymbolAnddynamicTovoid()));
let methods = _js_mirrors._getMethods(unwrapped);
methods[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
methods[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let getters = _js_mirrors._getGetters(unwrapped);
getters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
getters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let setters = _js_mirrors._getSetters(unwrapped);
setters[dartx.forEach](dart.fn((name, ft) => {
name = dart.notNull(name) + '=';
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
}, StringAnddynamicTovoid()));
setters[dartx.forEach](dart.fn((symbol, ft) => {
let name = dart.notNull(_js_mirrors.getName(symbol)) + '=';
symbol = new _internal.Symbol.es6(name, _js_mirrors._getESSymbol(symbol));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticFields = _js_mirrors._getStaticFields(unwrapped);
staticFields[dartx.forEach](dart.fn((name, t) => {
let symbol = core.Symbol.new(name);
staticFields[dartx.forEach](dart.fn((symbol, t) => {
let name = _js_mirrors.getName(symbol);
let metadata = [];
if (core.List.is(t)) {
metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
t = dart.dindex(t, 0);
}
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, StringAnddynamicTovoid()));
this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
}, SymbolAnddynamicTovoid()));
let statics = _js_mirrors._getStatics(unwrapped);
statics[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
statics[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticGetters = _js_mirrors._getStaticGetters(unwrapped);
staticGetters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
staticGetters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
let staticSetters = _js_mirrors._getStaticSetters(unwrapped);
staticSetters[dartx.forEach](dart.fn((name, ft) => {
let symbol = core.Symbol.new(name);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
}, StringAnddynamicTovoid()));
staticSetters[dartx.forEach](dart.fn((symbol, ft) => {
let name = _js_mirrors.getName(symbol);
this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
}, SymbolAnddynamicTovoid()));
this[_declarations] = MapOfSymbol$DeclarationMirror().unmodifiable(this[_declarations]);
}
return this[_declarations];
@ -13606,7 +13654,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
this[_cls] = cls;
this[_raw] = _js_mirrors._getGenericClass(_js_mirrors._unwrap(cls));
this.simpleName = core.Symbol.new(_js_mirrors._unwrap(cls).name);
this.mixin = null;
this[_mixin] = null;
this[_typeArguments] = null;
this[_metadata$] = null;
this[_declarations] = null;
@ -13677,6 +13725,21 @@ dart_library.library('dart_sdk', null, /* Imports */[
return mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(_js_mirrors._unwrap(this[_cls]).__proto__))));
}
}
get mixin() {
if (this[_mixin] != null) {
return this[_mixin];
}
let mixins = _js_mirrors._getMixins(_js_mirrors._unwrap(this[_cls]));
if (mixins == null || dart.test(dart.dload(mixins, 'isEmpty'))) {
this[_mixin] = this;
return this[_mixin];
}
if (dart.test(dart.dsend(dart.dload(mixins, 'length'), '>', 1))) {
dart.throw(new core.UnsupportedError("ClassMirror.mixin not yet supported for " + dart.str`classes (${this[_cls]}) with multiple mixins`));
}
this[_mixin] = mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(dart.dindex(mixins, 0)))));
return this[_mixin];
}
toString() {
return dart.str`ClassMirror on '${this[_cls]}'`;
}
@ -13725,7 +13788,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
[_cls]: core.Type,
simpleName: core.Symbol,
[_raw]: dart.dynamic,
mixin: mirrors.ClassMirror,
[_mixin]: mirrors.ClassMirror,
[_typeArguments]: ListOfTypeMirror(),
[_metadata$]: ListOfInstanceMirror(),
[_declarations]: MapOfSymbol$DeclarationMirror()
@ -13739,7 +13802,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
isOriginalDeclaration: dart.definiteFunctionType(core.bool, []),
typeArguments: dart.definiteFunctionType(core.List$(mirrors.TypeMirror), []),
originalDeclaration: dart.definiteFunctionType(mirrors.TypeMirror, []),
superclass: dart.definiteFunctionType(mirrors.ClassMirror, [])
superclass: dart.definiteFunctionType(mirrors.ClassMirror, []),
mixin: dart.definiteFunctionType(mirrors.ClassMirror, [])
}),
methods: () => ({
newInstance: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()]),
@ -13748,13 +13812,15 @@ dart_library.library('dart_sdk', null, /* Imports */[
invoke: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()])
})
});
const _symbol = Symbol('_symbol');
const _name$ = Symbol('_name');
_js_mirrors.JsVariableMirror = class JsVariableMirror extends _js_mirrors.JsMirror {
get simpleName() {
return core.Symbol.new(this[_name$]);
return this[_symbol];
}
_(name, t, annotations) {
this[_name$] = name;
_(symbol, t, annotations) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.type = _js_mirrors.reflectType(t);
this.metadata = ListOfInstanceMirror().unmodifiable(annotations[dartx.map](mirrors.InstanceMirror)(dart.fn(a => _js_mirrors.reflect(a), dynamicToInstanceMirror())));
this.isStatic = false;
@ -13785,8 +13851,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart.defineNamedConstructor(_js_mirrors.JsVariableMirror, '_');
_js_mirrors.JsVariableMirror[dart.implements] = () => [mirrors.VariableMirror];
dart.setSignature(_js_mirrors.JsVariableMirror, {
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.String, core.Type, core.List])}),
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.Symbol, core.Type, core.List])}),
fields: () => ({
[_symbol]: core.Symbol,
[_name$]: core.String,
type: mirrors.TypeMirror,
metadata: ListOfInstanceMirror(),
@ -13796,8 +13863,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
getters: () => ({simpleName: dart.definiteFunctionType(core.Symbol, [])})
});
_js_mirrors.JsParameterMirror = class JsParameterMirror extends _js_mirrors.JsVariableMirror {
_(name, t, annotations) {
super._(name, t, annotations);
_(member, t, annotations) {
super._(member, t, annotations);
}
toString() {
return dart.str`ParameterMirror on '${this[_name$]}'`;
@ -13836,7 +13903,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart.defineNamedConstructor(_js_mirrors.JsParameterMirror, '_');
_js_mirrors.JsParameterMirror[dart.implements] = () => [mirrors.ParameterMirror];
dart.setSignature(_js_mirrors.JsParameterMirror, {
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.String, core.Type, core.List])})
constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.Symbol, core.Type, core.List])})
});
const _params = Symbol('_params');
const _createParameterMirrorList = Symbol('_createParameterMirrorList');
@ -13851,10 +13918,11 @@ dart_library.library('dart_sdk', null, /* Imports */[
return this[_name$][dartx.startsWith]('_');
}
get simpleName() {
return core.Symbol.new(this[_name$]);
return this[_symbol];
}
_constructor(cls, name, ftype) {
this[_name$] = name;
_constructor(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.isConstructor = true;
this.isStatic = false;
this[_params] = null;
@ -13862,8 +13930,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
this.isFinal = false;
this[_createParameterMirrorList](ftype);
}
_instanceMethod(cls, name, ftype) {
this[_name$] = name;
_instanceMethod(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.isConstructor = false;
this.isStatic = false;
this[_params] = null;
@ -13871,8 +13940,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
this.isFinal = false;
this[_createParameterMirrorList](ftype);
}
_staticMethod(cls, name, ftype) {
this[_name$] = name;
_staticMethod(cls, symbol, ftype) {
this[_symbol] = symbol;
this[_name$] = _js_mirrors.getName(symbol);
this.isConstructor = false;
this.isStatic = true;
this[_params] = null;
@ -13881,7 +13951,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
this[_createParameterMirrorList](ftype);
}
get constructorName() {
return dart.test(this.isConstructor) ? core.Symbol.new(this[_name$]) : null;
return dart.test(this.isConstructor) ? this[_symbol] : null;
}
get parameters() {
return this[_params];
@ -13910,13 +13980,13 @@ dart_library.library('dart_sdk', null, /* Imports */[
for (let i = 0; i < dart.notNull(args[dartx.length]); ++i) {
let type = args[dartx._get](i);
let metadata = dart.dindex(dart.dload(ftype, 'metadata'), i);
let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
params[dartx._set](i, param);
}
for (let i = 0; i < dart.notNull(opts[dartx.length]); ++i) {
let type = opts[dartx._get](i);
let metadata = dart.dindex(dart.dload(ftype, 'metadata'), dart.notNull(args[dartx.length]) + i);
let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
params[dartx._set](i + dart.notNull(args[dartx.length]), param);
}
this[_params] = ListOfParameterMirror().unmodifiable(params);
@ -13976,11 +14046,12 @@ dart_library.library('dart_sdk', null, /* Imports */[
_js_mirrors.JsMethodMirror[dart.implements] = () => [mirrors.MethodMirror];
dart.setSignature(_js_mirrors.JsMethodMirror, {
constructors: () => ({
_constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
_instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
_staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic])
_constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
_instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
_staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic])
}),
fields: () => ({
[_symbol]: core.Symbol,
[_name$]: core.String,
[_params]: ListOfParameterMirror(),
[_metadata$]: ListOfInstanceMirror(),

Binary file not shown.

View file

@ -124,6 +124,7 @@ class CodeGenerator extends GeneralizingAstVisitor
final ClassElement numClass;
final ClassElement objectClass;
final ClassElement stringClass;
final ClassElement symbolClass;
ConstFieldVisitor _constants;
@ -164,6 +165,7 @@ class CodeGenerator extends GeneralizingAstVisitor
nullClass = _getLibrary(c, 'dart:core').getType('Null'),
objectClass = _getLibrary(c, 'dart:core').getType('Object'),
stringClass = _getLibrary(c, 'dart:core').getType('String'),
symbolClass = _getLibrary(c, 'dart:_internal').getType('Symbol'),
dartJSLibrary = _getLibrary(c, 'dart:js');
LibraryElement get currentLibrary => _loader.currentElement.library;
@ -5227,11 +5229,17 @@ class CodeGenerator extends GeneralizingAstVisitor
@override
visitSymbolLiteral(SymbolLiteral node) {
JS.Expression emitSymbol() {
// TODO(vsm): When we canonicalize, we need to treat private symbols
// correctly.
// TODO(vsm): Handle qualified symbols correctly.
var last = node.components.last.toString();
var name = js.string(node.components.join('.'), "'");
return js
.call('#.new(#)', [_emitConstructorAccess(types.symbolType), name]);
if (last.startsWith('_')) {
var nativeSymbol = _emitPrivateNameSymbol(currentLibrary, last);
return js.call('new #.es6(#, #)',
[_emitConstructorAccess(symbolClass.type), name, nativeSymbol]);
} else {
return js
.call('#.new(#)', [_emitConstructorAccess(types.symbolType), name]);
}
}
return _emitConst(emitSymbol);

View file

@ -0,0 +1,38 @@
// Copyright (c) 2016, 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 test.mixin;
import 'dart:mirrors';
import 'package:expect/expect.dart';
class Super {}
class Mixin {}
class Mixin2 {}
class Class extends Super with Mixin {}
class MultipleMixins extends Class with Mixin2 {}
main() {
Expect.equals(reflectClass(Class),
reflectClass(Class).mixin);
Expect.equals(reflectClass(Mixin),
reflectClass(Class).superclass.mixin);
Expect.equals(reflectClass(Super),
reflectClass(Class).superclass.superclass.mixin);
Expect.equals(reflectClass(MultipleMixins),
reflectClass(MultipleMixins).mixin);
Expect.equals(reflectClass(Mixin2),
reflectClass(MultipleMixins).superclass.mixin);
Expect.equals(reflectClass(Class),
reflectClass(MultipleMixins).superclass.superclass.mixin);
Expect.equals(reflectClass(Mixin),
reflectClass(MultipleMixins).superclass.superclass.superclass
.mixin);
Expect.equals(reflectClass(Super),
reflectClass(MultipleMixins).superclass.superclass.superclass
.superclass.mixin);
}

View file

@ -0,0 +1,18 @@
// Copyright (c) 2016, 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 test.mixin;
import 'dart:mirrors';
import 'package:expect/expect.dart';
class Bar {
String _field = "hello";
String get field => _field;
}
var privateSymbol2 = #_field;
var publicSymbol2 = #field;

View file

@ -0,0 +1,36 @@
// Copyright (c) 2016, 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 test.mixin;
import 'dart:mirrors';
import 'package:expect/expect.dart';
import 'private_field_helper.dart';
class Foo extends Bar {
int _field = 42;
static int _staticField = 99;
}
var privateSymbol = #_field;
var publicSymbol = #field;
main() {
Expect.equals(publicSymbol, publicSymbol2);
Expect.notEquals(privateSymbol, privateSymbol2);
var foo = new Foo();
var m = reflect(foo);
m.setField(privateSymbol, 38);
Expect.equals(38, foo._field);
m.setField(privateSymbol2, "world");
Expect.equals("world", foo.field);
Expect.equals("world", m.getField(publicSymbol).reflectee);
var type = reflectClass(Foo);
Expect.equals(99, type.getField(#_staticField).reflectee);
}

View file

@ -15,6 +15,9 @@ part of dart._internal;
class Symbol implements core.Symbol {
final String _name;
// Used internally by DDC to map ES6 symbols to Dart.
final dynamic _nativeSymbol;
/**
* Source of RegExp matching Dart reserved words.
*
@ -95,22 +98,28 @@ class Symbol implements core.Symbol {
* The empty symbol is handled before this regexp is used, and is not
* accepted.
*/
static final RegExp symbolPattern = new RegExp(
'^(?:$operatorRE\$|$identifierRE(?:=?\$|[.](?!\$)))+?\$');
static final RegExp symbolPattern =
new RegExp('^(?:$operatorRE\$|$identifierRE(?:=?\$|[.](?!\$)))+?\$');
external const Symbol(String name);
external const Symbol.es6(String name, nativeSymbol);
/**
* Platform-private method used by the mirror system to create
* otherwise invalid names.
*/
const Symbol.unvalidated(this._name);
const Symbol.unvalidated(this._name) : this._nativeSymbol = null;
// This is called by dart2js.
Symbol.validated(String name)
: this._name = validatePublicSymbol(name);
: this._name = validatePublicSymbol(name),
this._nativeSymbol = null;
bool operator ==(Object other) => other is Symbol && _name == other._name;
bool operator ==(Object other) =>
other is Symbol &&
_name == other._name &&
_nativeSymbol == other._nativeSymbol;
external int get hashCode;
@ -119,6 +128,8 @@ class Symbol implements core.Symbol {
/// Platform-private accessor which cannot be called from user libraries.
static String getName(Symbol symbol) => symbol._name;
static dynamic getNativeSymbol(Symbol symbol) => symbol._nativeSymbol;
static String validatePublicSymbol(String name) {
if (name.isEmpty || publicSymbolPattern.hasMatch(name)) return name;
if (name.startsWith('_')) {
@ -127,8 +138,7 @@ class Symbol implements core.Symbol {
// message.
throw new ArgumentError('"$name" is a private identifier');
}
throw new ArgumentError(
'"$name" is not a valid (qualified) symbol name');
throw new ArgumentError('"$name" is not a valid (qualified) symbol name');
}
/**

View file

@ -11,7 +11,11 @@ import 'dart:_foreign_helper' show JS;
class Symbol implements core.Symbol {
@patch
const Symbol(String name)
: this._name = name;
: this._name = name, this._nativeSymbol = null;
@patch
const Symbol.es6(String name, dynamic nativeSymbol)
: this._name = name, this._nativeSymbol = nativeSymbol;
@patch
int get hashCode {

View file

@ -64,12 +64,12 @@ mixin(base, @rest mixins) => JS(
/// The Symbol for storing type arguments on a specialized generic type.
final _mixins = JS('', 'Symbol("mixins")');
getMixins(clazz) => JS('', '$clazz[$_mixins]');
getMixins(clazz) => JS('', 'Object.hasOwnProperty.call(#, #) ? #[#] : null', clazz, _mixins, clazz, _mixins);
@JSExportName('implements')
final _implements = JS('', 'Symbol("implements")');
getImplements(clazz) => JS('', '#[#]', clazz, _implements);
getImplements(clazz) => JS('', 'Object.hasOwnProperty.call(#, #) ? #[#] : null', clazz, _implements, clazz, _implements);
/// The Symbol for storing type arguments on a specialized generic type.
final _typeArguments = JS('', 'Symbol("typeArguments")');

View file

@ -71,71 +71,108 @@ dynamic _defaultConstructorType(type) {
return JS('', '#.definiteFunctionType(#, [])', _dart, type);
}
dynamic _getMixins(type) {
return JS('', '#.getMixins(#, [])', _dart, type);
}
typedef T _Lazy<T>();
dynamic _getESSymbol(Symbol symbol) =>
_internal.Symbol.getNativeSymbol(symbol as _internal.Symbol);
dynamic _getMember(Symbol symbol) {
var privateSymbol = _getESSymbol(symbol);
if (privateSymbol != null) {
return privateSymbol;
}
return getName(symbol);
}
String _getNameForESSymbol(member) {
// Convert private JS symbol "Symbol(_foo)" to string "_foo".
assert(JS('bool', 'typeof # == "symbol"', member));
var str = member.toString();
assert(str.startsWith('Symbol(') && str.endsWith(')'));
return str.substring(7, str.length - 1);
}
Map _toDartMap(data) {
Symbol _getSymbolForESSymbol(member) {
var name = _getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
}
// The [member] must be either a string (public) or an ES6 symbol (private).
Symbol _getSymbolForMember(member) {
if (member is String) {
return new Symbol(member);
} else {
var name = _getNameForESSymbol(member);
return new _internal.Symbol.es6(name, member);
}
}
Map<Symbol, dynamic> _toDartMap(data) {
if (data == null) return {};
var map = JS('Map', '#.map(#)', _dart, data);
var map = new Map<Symbol, dynamic>();
// Note: we recorded a map from fields/methods to their type and metadata.
// The key is a string name for public members but an ES6 symbol for private
// ones. That's works nicely for dynamic operations, but dart:mirrors expects
// strings, so we convert back here.
// Dart symbols, so we convert here.
var publicMembers = JS('', 'Object.getOwnPropertyNames(#)', data);
for (var member in publicMembers) {
var symbol = new Symbol(member);
map[symbol] = JS('', '#[#]', data, member);
}
var privateMembers = JS('', 'Object.getOwnPropertySymbols(#)', data);
for (var member in privateMembers) {
var name = _getNameForESSymbol(member);
map[name] = JS('', '#[#]', data, member);
var symbol = _getSymbolForESSymbol(member);
map[symbol] = JS('', '#[#]', data, member);
}
return map;
}
Map _getConstructors(obj) {
Map<Symbol, dynamic> _getConstructors(obj) {
List sig = JS('', '#.getConstructorSig(#)', _dart, obj);
return _toDartMap(sig);
}
Map _getFields(obj) {
Map<Symbol, dynamic> _getFields(obj) {
List sig = JS('', '#.getFieldSig(#)', _dart, obj);
return _toDartMap(sig);
}
Map _getMethods(obj) {
Map<Symbol, dynamic> _getMethods(obj) {
List sig = JS('', '#.getMethodSig(#)', _dart, obj);
return _toDartMap(sig);
}
Map _getGetters(obj) {
Map<Symbol, dynamic> _getGetters(obj) {
List sig = JS('', '#.getGetterSig(#)', _dart, obj);
return _toDartMap(sig);
}
Map _getSetters(obj) {
Map<Symbol, dynamic> _getSetters(obj) {
List sig = JS('', '#.getSetterSig(#)', _dart, obj);
return _toDartMap(sig);
}
Map _getStaticFields(obj) {
Map<Symbol, dynamic> _getStaticFields(obj) {
List sig = JS('', '#.getStaticFieldSig(#)', _dart, obj);
return _toDartMap(sig);
}
Map _getStatics(obj) {
Map<Symbol, dynamic> _getStatics(obj) {
List sig = JS('', '#.getStaticSig(#)', _dart, obj);
return _toDartMap(sig);
}
Map _getStaticGetters(obj) {
Map<Symbol, dynamic> _getStaticGetters(obj) {
List sig = JS('', '#.getStaticGetterSig(#)', _dart, obj);
return _toDartMap(sig);
}
Map _getStaticSetters(obj) {
Map<Symbol, dynamic> _getStaticSetters(obj) {
List sig = JS('', '#.getStaticSetterSig(#)', _dart, obj);
return _toDartMap(sig);
}
@ -211,21 +248,7 @@ class JsInstanceMirror extends JsObjectMirror implements InstanceMirror {
// Returns a String for public members or an ES6 symbol for private members.
_getAccessor(dynamic reflectee, Symbol symbol, [List<dynamic> args,
Map<Symbol, dynamic> namedArgs]) {
var name = getName(symbol);
if (!name.startsWith('_')) return name;
// TODO(vsm): Ideally, we'd record ES6 symbols properly during codegen if
// mirrors is enabled. Here, we're trying to recover it from the receiver
// instead.
//
// Get private fields and members. Members are on proto.
var privateMembers = JS('', 'Object.getOwnPropertySymbols(#)', reflectee)
..addAll(JS('', 'Object.getOwnPropertySymbols(#.__proto__)', reflectee));
for (var member in privateMembers) {
var privateName = _getNameForESSymbol(member);
if (name == privateName) return member;
}
return new NoSuchMethodError(reflectee, symbol, args, namedArgs);
return _getMember(symbol);
}
InstanceMirror getField(Symbol symbol) {
@ -275,7 +298,7 @@ class JsClassMirror extends JsMirror implements ClassMirror {
final dynamic _raw;
// TODO(vsm): Do this properly
final ClassMirror mixin = null;
ClassMirror _mixin = null;
List<TypeMirror> _typeArguments;
List<InstanceMirror> _metadata;
@ -305,67 +328,67 @@ class JsClassMirror extends JsMirror implements ClassMirror {
_declarations = new Map<Symbol, DeclarationMirror>();
var unwrapped = _unwrap(_cls);
var constructors = _getConstructors(unwrapped);
constructors.forEach((String name, ft) {
var symbol = new Symbol(name);
_declarations[symbol] = new JsMethodMirror._constructor(this, name, ft);
constructors.forEach((symbol, ft) {
var name = getName(symbol);
_declarations[symbol] = new JsMethodMirror._constructor(this, symbol, ft);
});
if (constructors.isEmpty) {
// Add a default
var name = 'new';
var ft = _defaultConstructorType(_unwrap(_cls));
var symbol = new Symbol(name);
_declarations[symbol] = new JsMethodMirror._constructor(this, name, ft);
_declarations[symbol] = new JsMethodMirror._constructor(this, symbol, ft);
}
var fields = _getFields(unwrapped);
fields.forEach((String name, t) {
var symbol = new Symbol(name);
fields.forEach((symbol, t) {
var metadata = [];
if (t is List) {
metadata = t.skip(1).toList();
t = t[0];
}
_declarations[symbol] = new JsVariableMirror._(name, _wrap(t), metadata);
_declarations[symbol] = new JsVariableMirror._(symbol, _wrap(t), metadata);
});
var methods = _getMethods(unwrapped);
methods.forEach((String name, ft) {
var symbol = new Symbol(name);
_declarations[symbol] = new JsMethodMirror._instanceMethod(this, name, ft);
methods.forEach((symbol, ft) {
var name = getName(symbol);
_declarations[symbol] = new JsMethodMirror._instanceMethod(this, symbol, ft);
});
var getters = _getGetters(unwrapped);
getters.forEach((String name, ft) {
var symbol = new Symbol(name);
_declarations[symbol] = new JsMethodMirror._instanceMethod(this, name, ft);
getters.forEach((symbol, ft) {
var name = getName(symbol);
_declarations[symbol] = new JsMethodMirror._instanceMethod(this, symbol, ft);
});
var setters = _getSetters(unwrapped);
setters.forEach((String name, ft) {
name += '=';
var symbol = new Symbol(name);
_declarations[symbol] = new JsMethodMirror._instanceMethod(this, name, ft);
setters.forEach((symbol, ft) {
var name = getName(symbol) + '=';
// Create a separate symbol for the setter.
symbol = new _internal.Symbol.es6(name, _getESSymbol(symbol));
_declarations[symbol] = new JsMethodMirror._instanceMethod(this, symbol, ft);
});
var staticFields = _getStaticFields(unwrapped);
staticFields.forEach((String name, t) {
var symbol = new Symbol(name);
staticFields.forEach((symbol, t) {
var name = getName(symbol);
var metadata = [];
if (t is List) {
metadata = t.skip(1).toList();
t = t[0];
}
_declarations[symbol] = new JsVariableMirror._(name, _wrap(t), metadata);
_declarations[symbol] = new JsVariableMirror._(symbol, _wrap(t), metadata);
});
var statics = _getStatics(unwrapped);
statics.forEach((String name, ft) {
var symbol = new Symbol(name);
_declarations[symbol] = new JsMethodMirror._staticMethod(this, name, ft);
statics.forEach((symbol, ft) {
var name = getName(symbol);
_declarations[symbol] = new JsMethodMirror._staticMethod(this, symbol, ft);
});
var staticGetters = _getStaticGetters(unwrapped);
staticGetters.forEach((String name, ft) {
var symbol = new Symbol(name);
_declarations[symbol] = new JsMethodMirror._staticMethod(this, name, ft);
staticGetters.forEach((symbol, ft) {
var name = getName(symbol);
_declarations[symbol] = new JsMethodMirror._staticMethod(this, symbol, ft);
});
var staticSetters = _getStaticSetters(unwrapped);
staticSetters.forEach((String name, ft) {
var symbol = new Symbol(name);
_declarations[symbol] = new JsMethodMirror._staticMethod(this, name, ft);
staticSetters.forEach((symbol, ft) {
var name = getName(symbol);
_declarations[symbol] = new JsMethodMirror._staticMethod(this, symbol, ft);
});
_declarations = new Map<Symbol, DeclarationMirror>.unmodifiable(_declarations);
}
@ -455,23 +478,44 @@ class JsClassMirror extends JsMirror implements ClassMirror {
}
}
ClassMirror get mixin {
if (_mixin != null) {
return _mixin;
}
var mixins = _getMixins(_unwrap(_cls));
if (mixins == null || mixins.isEmpty) {
// If there is no mixin, return this mirror per API.
_mixin = this;
return _mixin;
}
if (mixins.length > 1) {
throw new UnsupportedError("ClassMirror.mixin not yet supported for "
"classes ($_cls) with multiple mixins");
}
_mixin = reflectType(_wrap(mixins[0]));
return _mixin;
}
String toString() => "ClassMirror on '$_cls'";
}
class JsVariableMirror extends JsMirror implements VariableMirror {
final Symbol _symbol;
final String _name;
final TypeMirror type;
final List<InstanceMirror> metadata;
// TODO(vsm): Refactor this out.
Symbol get simpleName => new Symbol(_name);
Symbol get simpleName => _symbol;
// TODO(vsm): Fix this
final bool isStatic = false;
final bool isFinal = false;
JsVariableMirror._(this._name, Type t, List annotations)
: type = reflectType(t),
JsVariableMirror._(Symbol symbol, Type t, List annotations)
: _symbol = symbol,
_name = getName(symbol),
type = reflectType(t),
metadata = new List<InstanceMirror>.unmodifiable(
annotations.map((a) => reflect(a)));
@ -479,14 +523,14 @@ class JsVariableMirror extends JsMirror implements VariableMirror {
}
class JsParameterMirror extends JsVariableMirror implements ParameterMirror {
JsParameterMirror._(String name, Type t, List annotations)
: super._(name, t, annotations);
JsParameterMirror._(Symbol member, Type t, List annotations)
: super._(member, t, annotations);
String toString() => "ParameterMirror on '$_name'";
}
class JsMethodMirror extends JsMirror implements MethodMirror {
// TODO(vsm): This could be a JS symbol for private methods
final Symbol _symbol;
final String _name;
List<ParameterMirror> _params;
List<InstanceMirror> _metadata;
@ -499,25 +543,25 @@ class JsMethodMirror extends JsMirror implements MethodMirror {
bool get isPrivate => _name.startsWith('_');
// TODO(vsm): Refactor this out.
Symbol get simpleName => new Symbol(_name);
Symbol get simpleName => _symbol;
JsMethodMirror._constructor(JsClassMirror cls, String name, ftype)
: _name = name, isConstructor = true, isStatic = false {
JsMethodMirror._constructor(JsClassMirror cls, Symbol symbol, ftype)
: _symbol = symbol, _name = getName(symbol), isConstructor = true, isStatic = false {
_createParameterMirrorList(ftype);
}
JsMethodMirror._instanceMethod(JsClassMirror cls, String name, ftype)
: _name = name, isConstructor = false, isStatic = false {
JsMethodMirror._instanceMethod(JsClassMirror cls, Symbol symbol, ftype)
: _symbol = symbol, _name = getName(symbol), isConstructor = false, isStatic = false {
_createParameterMirrorList(ftype);
}
JsMethodMirror._staticMethod(JsClassMirror cls, String name, ftype)
: _name = name, isConstructor = false, isStatic = true {
JsMethodMirror._staticMethod(JsClassMirror cls, Symbol symbol, ftype)
: _symbol = symbol, _name = getName(symbol), isConstructor = false, isStatic = true {
_createParameterMirrorList(ftype);
}
// TODO(vsm): Support named constructors.
Symbol get constructorName => isConstructor ? new Symbol(_name) : null;
Symbol get constructorName => isConstructor ? _symbol : null;
List<ParameterMirror> get parameters => _params;
List<InstanceMirror> get metadata => _metadata;
@ -556,7 +600,7 @@ class JsMethodMirror extends JsMirror implements MethodMirror {
var type = args[i];
var metadata = ftype.metadata[i];
// TODO(vsm): Recover the param name.
var param = new JsParameterMirror._('', _wrap(type), metadata);
var param = new JsParameterMirror._(new Symbol(''), _wrap(type), metadata);
params[i] = param;
}
@ -564,7 +608,7 @@ class JsMethodMirror extends JsMirror implements MethodMirror {
var type = opts[i];
var metadata = ftype.metadata[args.length + i];
// TODO(vsm): Recover the param name.
var param = new JsParameterMirror._('', _wrap(type), metadata);
var param = new JsParameterMirror._(new Symbol(''), _wrap(type), metadata);
params[i + args.length] = param;
}