| Index: runtime/lib/mirrors_impl.dart
|
| diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
|
| index a2ab082698353683625dd7195acd806f3046f56c..e79a909d461ca5fd903cd8fa30c0ac7833eaf211 100644
|
| --- a/runtime/lib/mirrors_impl.dart
|
| +++ b/runtime/lib/mirrors_impl.dart
|
| @@ -272,7 +272,7 @@ class _LocalInstanceMirrorImpl extends _LocalObjectMirrorImpl
|
| Function operator [](Symbol selector) {
|
| bool found = false;
|
| for (ClassMirror c = type; c != null; c = c.superclass) {
|
| - var target = c.methods[selector];
|
| + var target = c._methods[selector];
|
| if (target != null && !target.isStatic && target.isRegularMethod) {
|
| found = true;
|
| break;
|
| @@ -364,14 +364,6 @@ class _LocalClosureMirrorImpl extends _LocalInstanceMirrorImpl
|
| return reflect(_apply(arguments, names));
|
| }
|
|
|
| - Future<InstanceMirror> applyAsync(List positionalArguments,
|
| - [Map<Symbol, dynamic> namedArguments]) {
|
| - return new Future(() {
|
| - return this.apply(_unwrapAsyncPositionals(positionalArguments),
|
| - _unwrapAsyncNamed(namedArguments));
|
| - });
|
| - }
|
| -
|
| InstanceMirror findInContext(Symbol name, {ifAbsent: null}) {
|
| List<String> parts = _n(name).split(".").toList(growable: false);
|
| if (parts.length > 3) {
|
| @@ -527,75 +519,43 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
|
| return _mixin;
|
| }
|
|
|
| - Map<Symbol, DeclarationMirror> _declarations;
|
| + Map<Symbol, DeclarationMirror> _cachedDeclarations;
|
| Map<Symbol, DeclarationMirror> get declarations {
|
| - if (_declarations != null) return _declarations;
|
| + if (_cachedDeclarations != null) return _cachedDeclarations;
|
| var decls = new Map<Symbol, DeclarationMirror>();
|
| - decls.addAll(members);
|
| - decls.addAll(constructors);
|
| + decls.addAll(_members);
|
| + decls.addAll(_constructors);
|
| typeVariables.forEach((tv) => decls[tv.simpleName] = tv);
|
| - return _declarations =
|
| + return _cachedDeclarations =
|
| new _UnmodifiableMapView<Symbol, DeclarationMirror>(decls);
|
| }
|
|
|
| - Map<Symbol, Mirror> _members;
|
| - Map<Symbol, Mirror> get members {
|
| - if (_members == null) {
|
| + Map<Symbol, Mirror> _cachedMembers;
|
| + Map<Symbol, Mirror> get _members {
|
| + if (_cachedMembers == null) {
|
| var whoseMembers = _isMixinTypedef ? _trueSuperclass : this;
|
| - _members = _makeMemberMap(mixin._computeMembers(whoseMembers._reflectee));
|
| - }
|
| - return _members;
|
| - }
|
| -
|
| - Map<Symbol, MethodMirror> _methods;
|
| - Map<Symbol, MethodMirror> get methods {
|
| - if (_methods == null) {
|
| - _methods = _filterMap(
|
| - members,
|
| - (key, value) => (value is MethodMirror && value.isRegularMethod));
|
| - }
|
| - return _methods;
|
| - }
|
| -
|
| - Map<Symbol, MethodMirror> _getters;
|
| - Map<Symbol, MethodMirror> get getters {
|
| - if (_getters == null) {
|
| - _getters = _filterMap(
|
| - members,
|
| - (key, value) => (value is MethodMirror && value.isGetter));
|
| - }
|
| - return _getters;
|
| - }
|
| -
|
| - Map<Symbol, MethodMirror> _setters;
|
| - Map<Symbol, MethodMirror> get setters {
|
| - if (_setters == null) {
|
| - _setters = _filterMap(
|
| - members,
|
| - (key, value) => (value is MethodMirror && value.isSetter));
|
| - }
|
| - return _setters;
|
| - }
|
| -
|
| - Map<Symbol, VariableMirror> _variables;
|
| - Map<Symbol, VariableMirror> get variables {
|
| - if (_variables == null) {
|
| - _variables = _filterMap(
|
| - members,
|
| - (key, value) => (value is VariableMirror));
|
| + _cachedMembers = _makeMemberMap(mixin._computeMembers(whoseMembers._reflectee));
|
| }
|
| - return _variables;
|
| + return _cachedMembers;
|
| }
|
|
|
| - Map<Symbol, MethodMirror> _constructors;
|
| - Map<Symbol, MethodMirror> get constructors {
|
| - if (_constructors == null) {
|
| + Map<Symbol, MethodMirror> _cachedConstructors;
|
| + Map<Symbol, MethodMirror> get _constructors {
|
| + if (_cachedConstructors == null) {
|
| var constructorsList = _computeConstructors(_reflectee);
|
| var stringName = _n(simpleName);
|
| constructorsList.forEach((c) => c._patchConstructorName(stringName));
|
| - _constructors = _makeMemberMap(constructorsList);
|
| + _cachedConstructors = _makeMemberMap(constructorsList);
|
| }
|
| - return _constructors;
|
| + return _cachedConstructors;
|
| + }
|
| +
|
| + get _methods {
|
| + var result = new Map();
|
| + declarations.forEach((k, v) {
|
| + if (v is MethodMirror && !v.isConstructor) result[k] = v;
|
| + });
|
| + return result;
|
| }
|
|
|
| bool get _isAnonymousMixinApplication {
|
| @@ -604,7 +564,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
|
| return true;
|
| }
|
|
|
| - List<TypeVariableMirror> _typeVariables = null;
|
| + List<TypeVariableMirror> _typeVariables;
|
| List<TypeVariableMirror> get typeVariables {
|
| if (_typeVariables == null) {
|
| if (_isAnonymousMixinApplication) return _typeVariables = emptyList;
|
| @@ -623,7 +583,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
|
| return _typeVariables;
|
| }
|
|
|
| - List<TypeMirror> _typeArguments = null;
|
| + List<TypeMirror> _typeArguments;
|
| List<TypeMirror> get typeArguments {
|
| if(_typeArguments == null) {
|
| if(_isGenericDeclaration || _isAnonymousMixinApplication) {
|
| @@ -649,7 +609,7 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
|
| String toString() => "ClassMirror on '${MirrorSystem.getName(simpleName)}'";
|
|
|
| Function operator [](Symbol selector) {
|
| - var target = methods[selector];
|
| + var target = _methods[selector];
|
| if (target == null || !target.isStatic || !target.isRegularMethod) {
|
| throw new ArgumentError(
|
| "${MirrorSystem.getName(simpleName)} has no static method "
|
| @@ -685,16 +645,6 @@ class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
|
| names));
|
| }
|
|
|
| - Future<InstanceMirror> newInstanceAsync(Symbol constructorName,
|
| - List positionalArguments,
|
| - [Map<Symbol, dynamic> namedArguments]) {
|
| - return new Future(() {
|
| - return this.newInstance(constructorName,
|
| - _unwrapAsyncPositionals(positionalArguments),
|
| - _unwrapAsyncNamed(namedArguments));
|
| - });
|
| - }
|
| -
|
| List<InstanceMirror> get metadata {
|
| // Get the metadata objects, convert them into InstanceMirrors using
|
| // reflect() and then make them into a Dart list.
|
| @@ -1056,68 +1006,20 @@ class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
|
|
|
| final Uri uri;
|
|
|
| - Map<Symbol, DeclarationMirror> _declarations;
|
| + Map<Symbol, DeclarationMirror> _cachedDeclarations;
|
| Map<Symbol, DeclarationMirror> get declarations {
|
| - if (_declarations != null) return _declarations;
|
| - return _declarations =
|
| - new _UnmodifiableMapView<Symbol, DeclarationMirror>(members);
|
| - }
|
| -
|
| - Map<Symbol, Mirror> _members;
|
| - Map<Symbol, Mirror> get members {
|
| - if (_members == null) {
|
| - _members = _makeMemberMap(_computeMembers(_reflectee));
|
| - }
|
| - return _members;
|
| + if (_cachedDeclarations != null) return _cachedDeclarations;
|
| + return _cachedDeclarations =
|
| + new _UnmodifiableMapView<Symbol, DeclarationMirror>(
|
| + _makeMemberMap(_computeMembers(_reflectee)));
|
| }
|
|
|
| - Map<Symbol, ClassMirror> _types;
|
| - Map<Symbol, TypeMirror> get types {
|
| - if (_types == null) {
|
| - _types = _filterMap(members, (key, value) => (value is TypeMirror));
|
| - }
|
| - return _types;
|
| - }
|
| -
|
| - Map<Symbol, ClassMirror> _classes;
|
| - Map<Symbol, ClassMirror> get classes {
|
| - if (_classes == null) {
|
| - _classes = _filterMap(members, (key, value) => (value is ClassMirror));
|
| - }
|
| - return _classes;
|
| - }
|
| -
|
| - Map<Symbol, MethodMirror> _functions;
|
| - Map<Symbol, MethodMirror> get functions {
|
| - if (_functions == null) {
|
| - _functions = _filterMap(members, (key, value) => (value is MethodMirror));
|
| - }
|
| - return _functions;
|
| - }
|
| -
|
| - Map<Symbol, MethodMirror> _getters;
|
| - Map<Symbol, MethodMirror> get getters {
|
| - if (_getters == null) {
|
| - _getters = _filterMap(functions, (key, value) => (value.isGetter));
|
| - }
|
| - return _getters;
|
| - }
|
| -
|
| - Map<Symbol, MethodMirror> _setters;
|
| - Map<Symbol, MethodMirror> get setters {
|
| - if (_setters == null) {
|
| - _setters = _filterMap(functions, (key, value) => (value.isSetter));
|
| - }
|
| - return _setters;
|
| - }
|
| -
|
| - Map<Symbol, VariableMirror> _variables;
|
| - Map<Symbol, VariableMirror> get variables {
|
| - if (_variables == null) {
|
| - _variables = _filterMap(members,
|
| - (key, value) => (value is VariableMirror));
|
| - }
|
| - return _variables;
|
| + get _functions {
|
| + var result = new Map();
|
| + declarations.forEach((k, v) {
|
| + if (v is MethodMirror) result[k] = v;
|
| + });
|
| + return result;
|
| }
|
|
|
| List<InstanceMirror> get metadata {
|
| @@ -1136,7 +1038,7 @@ class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
|
| String toString() => "LibraryMirror on '${_n(simpleName)}'";
|
|
|
| Function operator [](Symbol selector) {
|
| - var target = functions[selector];
|
| + var target = _functions[selector];
|
| if (target == null || !target.isRegularMethod) {
|
| throw new ArgumentError(
|
| "${MirrorSystem.getName(simpleName)} has no top-level method "
|
|
|