| OLD | NEW | 
 | (Empty) | 
|   1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file |  | 
|   2 // for details. All rights reserved. Use of this source code is governed by a |  | 
|   3 // BSD-style license that can be found in the LICENSE file. |  | 
|   4  |  | 
|   5 library polymer_expressions.src.mirrors; |  | 
|   6  |  | 
|   7 import 'package:observe/observe.dart' show Reflectable, ObservableProperty; |  | 
|   8  |  | 
|   9 @MirrorsUsed(metaTargets: const [Reflectable, ObservableProperty], |  | 
|  10     override: 'polymer_expressions.src.mirrors') |  | 
|  11 import 'dart:mirrors'; |  | 
|  12  |  | 
|  13 /** |  | 
|  14  * Walks up the class hierarchy to find a method declaration with the given |  | 
|  15  * [name]. |  | 
|  16  * |  | 
|  17  * Note that it's not possible to tell if there's an implementation via |  | 
|  18  * noSuchMethod(). |  | 
|  19  */ |  | 
|  20 Mirror getMemberMirror(ClassMirror classMirror, Symbol name) { |  | 
|  21   if (classMirror.declarations.containsKey(name)) { |  | 
|  22     return classMirror.declarations[name]; |  | 
|  23   } |  | 
|  24   if (hasSuperclass(classMirror)) { |  | 
|  25     var mirror = getMemberMirror(classMirror.superclass, name); |  | 
|  26     if (mirror != null) { |  | 
|  27       return mirror; |  | 
|  28     } |  | 
|  29   } |  | 
|  30   for (ClassMirror supe in classMirror.superinterfaces) { |  | 
|  31     var mirror = getMemberMirror(supe, name); |  | 
|  32     if (mirror != null) { |  | 
|  33       return mirror; |  | 
|  34     } |  | 
|  35   } |  | 
|  36   return null; |  | 
|  37 } |  | 
|  38  |  | 
|  39 /** |  | 
|  40  * Work-around for http://dartbug.com/5794 |  | 
|  41  */ |  | 
|  42 bool hasSuperclass(ClassMirror classMirror) { |  | 
|  43   var superclass = classMirror.superclass; |  | 
|  44   return (superclass != null) && |  | 
|  45       (superclass.qualifiedName != #dart.core.Object); |  | 
|  46 } |  | 
| OLD | NEW |