| Index: runtime/lib/mirrors_impl.dart | 
| diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart | 
| index ec24d3e13cab5d4c2aa275dca1c119eabd54468e..05f44e8fa6919ceb1df9802e48bb314bc89682ff 100644 | 
| --- a/runtime/lib/mirrors_impl.dart | 
| +++ b/runtime/lib/mirrors_impl.dart | 
| @@ -160,6 +160,70 @@ class _InvocationTrampoline implements Function { | 
| } | 
| } | 
|  | 
| +class _SyntheticAccessor implements MethodMirror { | 
| +  final DeclarationMirror owner; | 
| +  final Symbol simpleName; | 
| +  final bool isGetter; | 
| +  final bool isStatic; | 
| +  final bool isTopLevel; | 
| +  final _target; | 
| + | 
| +  _SyntheticAccessor(this.owner, | 
| +                     this.simpleName, | 
| +                     this.isGetter, | 
| +                     this.isStatic, | 
| +                     this.isTopLevel, | 
| +                     this._target); | 
| + | 
| +  bool get isSynthetic => true; | 
| +  bool get isRegularMethod => false; | 
| +  bool get isOperator => false; | 
| +  bool get isConstructor => false; | 
| +  bool get isConstConstructor => false; | 
| +  bool get isGenerativeConstructor => false; | 
| +  bool get isFactoryConstructor => false; | 
| +  bool get isRedirectingConstructor => false; | 
| +  bool get isAbstract => false; | 
| + | 
| +  bool get isSetter => !isGetter; | 
| +  bool get isPrivate => _n(simpleName).startsWith('_'); | 
| + | 
| +  Symbol get qualifiedName => _computeQualifiedName(owner, simpleName); | 
| +  Symbol get constructorName => const Symbol(''); | 
| + | 
| +  TypeMirror get returnType => _target.type; | 
| +  List<ParameterMirror> get parameters { | 
| +    if (isGetter) return emptyList; | 
| +    return new UnmodifiableListView( | 
| +        [new _SyntheticSetterParameter(this, this._target)]); | 
| +  } | 
| + | 
| +  List<InstanceMirror> get metadata => emptyList; | 
| + | 
| +  String get source => null; | 
| +} | 
| + | 
| +class _SyntheticSetterParameter implements ParameterMirror { | 
| +  final DeclarationMirror owner; | 
| +  final VariableMirror _target; | 
| + | 
| +  _SyntheticSetterParameter(this.owner, this._target); | 
| + | 
| +  Symbol get simpleName => _target.simpleName; | 
| +  Symbol get qualifiedName => _computeQualifiedName(owner, simpleName); | 
| +  TypeMirror get type => _target.type; | 
| + | 
| +  bool get isOptional => false; | 
| +  bool get isNamed => false; | 
| +  bool get isStatic => false; | 
| +  bool get isTopLevel => false; | 
| +  bool get isConst => false; | 
| +  bool get isFinal => true; | 
| +  bool get isPrivate => false; | 
| +  bool get hasDefaultValue => false; | 
| +  InstanceMirror get defaultValue => null; | 
| +} | 
| + | 
| abstract class _LocalObjectMirror extends _LocalMirror implements ObjectMirror { | 
| final _reflectee; // May be a MirrorReference or an ordinary object. | 
|  | 
| @@ -492,6 +556,59 @@ class _LocalClassMirror extends _LocalObjectMirror | 
| return _mixin; | 
| } | 
|  | 
| +  var _cachedStaticMembers; | 
| +  Map<Symbol, MethodMirror> get staticMembers { | 
| +    if (_cachedStaticMembers == null) { | 
| +      var result = new Map<Symbol, MethodMirror>(); | 
| +      declarations.values.forEach((decl) { | 
| +        if (decl is MethodMirror && decl.isStatic && | 
| +            !decl.isConstructor && !decl.isAbstract) { | 
| +          result[decl.simpleName] = decl; | 
| +        } | 
| +        if (decl is VariableMirror && decl.isStatic) { | 
| +          var getterName = decl.simpleName; | 
| +          result[getterName] = | 
| +              new _SyntheticAccessor(this, getterName, true, true, false, decl); | 
| +          if (!decl.isFinal) { | 
| +            var setterName = _asSetter(decl.simpleName, this.owner); | 
| +            result[setterName] = new _SyntheticAccessor( | 
| +                this, setterName, false, true, false, decl); | 
| +          } | 
| +        } | 
| +      }); | 
| +      _cachedStaticMembers = result; | 
| +    } | 
| +    return _cachedStaticMembers; | 
| +  } | 
| + | 
| +  var _cachedInstanceMembers; | 
| +  Map<Symbol, MethodMirror> get instanceMembers { | 
| +    if (_cachedInstanceMembers == null) { | 
| +      var result = new Map<Symbol, MethodMirror>(); | 
| +      if (superclass != null) { | 
| +        result.addAll(superclass.instanceMembers); | 
| +      } | 
| +      declarations.values.forEach((decl) { | 
| +        if (decl is MethodMirror && !decl.isStatic && | 
| +            !decl.isConstructor && !decl.isAbstract) { | 
| +          result[decl.simpleName] = decl; | 
| +        } | 
| +        if (decl is VariableMirror && !decl.isStatic) { | 
| +          var getterName = decl.simpleName; | 
| +          result[getterName] = | 
| +              new _SyntheticAccessor(this, getterName, true, false, false, decl); | 
| +          if (!decl.isFinal) { | 
| +            var setterName = _asSetter(decl.simpleName, this.owner); | 
| +            result[setterName] = new _SyntheticAccessor( | 
| +                this, setterName, false, false, false, decl); | 
| +          } | 
| +        } | 
| +      }); | 
| +      _cachedInstanceMembers = result; | 
| +    } | 
| +    return _cachedInstanceMembers; | 
| +  } | 
| + | 
| Map<Symbol, DeclarationMirror> _declarations; | 
| Map<Symbol, DeclarationMirror> get declarations { | 
| if (_declarations != null) return _declarations; | 
| @@ -918,8 +1035,12 @@ class _LocalTypedefMirror extends _LocalDeclarationMirror | 
| native "TypedefMirror_declaration"; | 
| } | 
|  | 
| -class _LocalLibraryMirror extends _LocalObjectMirror | 
| -    implements LibraryMirror { | 
| +Symbol _asSetter(Symbol getter, LibraryMirror library) { | 
| +  var unwrapped = MirrorSystem.getName(getter); | 
| +  return MirrorSystem.getSymbol('${unwrapped}=', library); | 
| +} | 
| + | 
| +class _LocalLibraryMirror extends _LocalObjectMirror implements LibraryMirror { | 
| final Symbol simpleName; | 
| final Uri uri; | 
|  | 
| @@ -951,6 +1072,11 @@ class _LocalLibraryMirror extends _LocalObjectMirror | 
| new _UnmodifiableMapView<Symbol, DeclarationMirror>(_members); | 
| } | 
|  | 
| +  Map<Symbol, MethodMirror> get topLevelMembers { | 
| +    throw new UnimplementedError( | 
| +        'LibraryMirror.topLevelMembers is not implemented'); | 
| +  } | 
| + | 
| Map<Symbol, Mirror> _cachedMembers; | 
| Map<Symbol, Mirror> get _members { | 
| if (_cachedMembers == null) { | 
| @@ -1005,7 +1131,7 @@ class _LocalLibraryMirror extends _LocalObjectMirror | 
| native "LibraryMirror_members"; | 
| } | 
|  | 
| -class _LocalMethodMirror extends _LocalDeclarationMirror | 
| +class _LocalMethodMirror extends _LocalDeclarationMirror | 
| implements MethodMirror { | 
| final bool isStatic; | 
| final bool isAbstract; | 
| @@ -1050,6 +1176,7 @@ class _LocalMethodMirror extends _LocalDeclarationMirror | 
| _n(constructorName).startsWith('_'); | 
|  | 
| bool get isTopLevel => owner is LibraryMirror; | 
| +  bool get isSynthetic => false; | 
|  | 
| SourceLocation get location { | 
| throw new UnimplementedError('MethodMirror.location is not implemented'); | 
|  |