| 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 fancy_syntax.mirrors; |
| 6 |
| 7 import 'dart:mirrors'; |
| 8 |
| 9 /** |
| 10 * Walks up the class hierarchy to find a method declaration with the given |
| 11 * [name]. |
| 12 * |
| 13 * Note that it's not possible to tell if there's an implementation via |
| 14 * noSuchMethod(). |
| 15 */ |
| 16 Mirror getMemberMirror(ClassMirror classMirror, Symbol name) { |
| 17 if (classMirror.members.containsKey(name)) { |
| 18 return classMirror.members[name]; |
| 19 } |
| 20 if (hasSuperclass(classMirror)) { |
| 21 var mirror = getMemberMirror(classMirror.superclass, name); |
| 22 if (mirror != null) { |
| 23 return mirror; |
| 24 } |
| 25 } |
| 26 for (ClassMirror supe in classMirror.superinterfaces) { |
| 27 var mirror = getMemberMirror(supe, name); |
| 28 if (mirror != null) { |
| 29 return mirror; |
| 30 } |
| 31 } |
| 32 return null; |
| 33 } |
| 34 |
| 35 ClassMirror __objMirror; |
| 36 ClassMirror get _objMirror { |
| 37 if (__objMirror == null) { |
| 38 __objMirror = reflectClass(Object); |
| 39 } |
| 40 return __objMirror; |
| 41 } |
| 42 |
| 43 /** |
| 44 * Work-around for http://dartbug.com/5794 |
| 45 */ |
| 46 bool hasSuperclass(ClassMirror classMirror) { |
| 47 var superclass = classMirror.superclass; |
| 48 return (superclass != null) && (superclass != _objMirror); |
| 49 } |
| OLD | NEW |