// 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 expectedValues) { MethodMirror mirror = reflectClass(type).declarations[method] as MethodMirror; ParameterMirror parameter = mirror.parameters[parameterIndex]; List 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"]); }