| // 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. |
| |
| // @dart = 2.9 |
| |
| import 'dart:mirrors'; |
| import 'package:expect/expect.dart'; |
| |
| class Bar { |
| final String name; |
| |
| const Bar(this.name); |
| } |
| |
| class Foo { |
| @Bar('bar') |
| int x = 40; |
| |
| @Bar('baz') |
| final String y = 'hi'; |
| |
| @Bar('foo') |
| void set z(int val) { |
| x = val; |
| } |
| } |
| |
| void main() { |
| dynamic f = new Foo(); |
| f.x += 2; |
| Expect.equals(f.x, 42); |
| Expect.equals(f.y, 'hi'); |
| |
| f.z = 0; |
| Expect.equals(f.x, 0); |
| |
| var members = reflect(f).type.declarations; |
| var x = members[#x] as VariableMirror; |
| var y = members[#y] as VariableMirror; |
| Expect.equals(x.type.simpleName, #int); |
| Expect.equals(y.type.simpleName, #String); |
| } |