// Copyright (c) 2013, 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 test.parameter_metadata_test; import 'dart:mirrors'; import 'metadata_test.dart'; const m1 = 'm1'; const m2 = #m2; const m3 = const CustomAnnotation(3); class CustomAnnotation { final value; const CustomAnnotation(this.value); toString() => 'CustomAnnotation($value)'; } class B { B.foo(int x) {} factory B.bar(@m3 @m2 int z, x) => new B.foo(0); baz(@m1 final int x, @m2 int y, @m3 final int z) {} qux(int x, [@m3 @m2 @m1 int y = 3 + 1]) {} quux(int x, {String str: "foo"}) {} corge({@m1 int x: 3 * 17, @m2 String str: "bar"}) {} set x(@m2 final value) {} } main() { ClassMirror cm = reflectClass(B); MethodMirror mm; mm = cm.declarations[#B.foo] as MethodMirror; checkMetadata(mm.parameters[0], []); mm = cm.declarations[#B.bar] as MethodMirror; checkMetadata(mm.parameters[0], [m3, m2]); checkMetadata(mm.parameters[1], []); mm = cm.declarations[#baz] as MethodMirror; checkMetadata(mm.parameters[0], [m1]); checkMetadata(mm.parameters[1], [m2]); checkMetadata(mm.parameters[2], [m3]); mm = cm.declarations[#qux] as MethodMirror; checkMetadata(mm.parameters[0], []); checkMetadata(mm.parameters[1], [m3, m2, m1]); mm = cm.declarations[#quux] as MethodMirror; checkMetadata(mm.parameters[0], []); checkMetadata(mm.parameters[1], []); mm = cm.declarations[#corge] as MethodMirror; checkMetadata(mm.parameters[0], [m1]); checkMetadata(mm.parameters[1], [m2]); mm = cm.declarations[const Symbol('x=')] as MethodMirror; checkMetadata(mm.parameters[0], [m2]); }