| // Copyright (c) 2014, 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. |
| |
| import "dart:mirrors"; |
| |
| import 'package:expect/expect.dart'; |
| |
| class ParameterAnnotation { |
| final String value; |
| const ParameterAnnotation(this.value); |
| } |
| |
| class Foo { |
| Foo(@ParameterAnnotation("vogel") p) {} |
| Foo.named(@ParameterAnnotation("hamster") p) {} |
| Foo.named2( |
| @ParameterAnnotation("hamster") p, @ParameterAnnotation("wurm") p2) {} |
| |
| f1(@ParameterAnnotation("hest") p) {} |
| f2(@ParameterAnnotation("hest") @ParameterAnnotation("fisk") p) {} |
| f3(a, @ParameterAnnotation("fugl") p) {} |
| f4(@ParameterAnnotation("fisk") a, {@ParameterAnnotation("hval") p}) {} |
| f5(@ParameterAnnotation("fisk") a, [@ParameterAnnotation("hval") p]) {} |
| f6({@ParameterAnnotation("fisk") z, @ParameterAnnotation("hval") p}) {} |
| |
| set s1(@ParameterAnnotation("cheval") p) {} |
| } |
| |
| expectAnnotations( |
| Type type, Symbol method, int parameterIndex, List<String> expectedValues) { |
| MethodMirror mirror = reflectClass(type).declarations[method] as MethodMirror; |
| ParameterMirror parameter = mirror.parameters[parameterIndex]; |
| List<InstanceMirror> annotations = parameter.metadata; |
| Expect.equals(annotations.length, expectedValues.length, |
| "wrong number of parameter annotations"); |
| for (int i = 0; i < annotations.length; i++) { |
| Expect.equals( |
| expectedValues[i], |
| annotations[i].reflectee.value, |
| "annotation #$i of parameter #$parameterIndex " |
| "of $type.$method."); |
| } |
| } |
| |
| main() { |
| expectAnnotations(Foo, #Foo, 0, ["vogel"]); |
| expectAnnotations(Foo, #Foo.named, 0, ["hamster"]); |
| expectAnnotations(Foo, #Foo.named2, 0, ["hamster"]); |
| expectAnnotations(Foo, #Foo.named2, 1, ["wurm"]); |
| |
| expectAnnotations(Foo, #f1, 0, ["hest"]); |
| expectAnnotations(Foo, #f2, 0, ["hest", "fisk"]); |
| expectAnnotations(Foo, #f3, 0, []); |
| expectAnnotations(Foo, #f3, 1, ["fugl"]); |
| expectAnnotations(Foo, #f4, 0, ["fisk"]); |
| expectAnnotations(Foo, #f4, 1, ["hval"]); |
| expectAnnotations(Foo, #f5, 0, ["fisk"]); |
| expectAnnotations(Foo, #f5, 1, ["hval"]); |
| expectAnnotations(Foo, #f6, 0, ["fisk"]); |
| expectAnnotations(Foo, #f6, 1, ["hval"]); |
| |
| expectAnnotations(Foo, const Symbol('s1='), 0, ["cheval"]); |
| } |