| // Copyright (c) 2017, 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 lib; |
| |
| @MirrorsUsed(targets: "lib") |
| import "dart:mirrors"; |
| |
| import "package:expect/expect.dart"; |
| |
| class A { |
| call(int x) => 123 + x; |
| bar(int y) => 321 + y; |
| } |
| |
| foo(int y) => 456 + y; |
| |
| main() { |
| // Static function. |
| ClosureMirror f1 = reflect(foo); |
| Expect.equals(1456, f1.apply([1000]).reflectee); |
| |
| // Local declaration. |
| chomp(int z) => z + 42; |
| ClosureMirror f2 = reflect(chomp); |
| Expect.equals(1042, f2.apply([1000]).reflectee); |
| |
| // Local expression. |
| ClosureMirror f3 = reflect((u) => u + 987); |
| Expect.equals(1987, f3.apply([1000]).reflectee); |
| |
| // Instance property extraction. |
| ClosureMirror f4 = reflect(new A().bar); |
| Expect.equals(1321, f4.apply([1000]).reflectee); |
| |
| // Instance implementing Function via call method. |
| ClosureMirror f5 = reflect(new A()); |
| Expect.equals(1123, f5.apply([1000]).reflectee); |
| } |