Index: test/codegen/lib/mirrors/parameter_metadata_test.dart |
diff --git a/test/codegen/lib/mirrors/parameter_metadata_test.dart b/test/codegen/lib/mirrors/parameter_metadata_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9f49450ea4b53a630e9258ef2fc49c61c3212c09 |
--- /dev/null |
+++ b/test/codegen/lib/mirrors/parameter_metadata_test.dart |
@@ -0,0 +1,63 @@ |
+// 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) {} |
+ |
+ 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]; |
+ checkMetadata(mm.parameters[0], []); |
+ |
+ mm = cm.declarations[#B.bar]; |
+ checkMetadata(mm.parameters[0], [m3, m2]); |
+ checkMetadata(mm.parameters[1], []); |
+ |
+ mm = cm.declarations[#baz]; |
+ checkMetadata(mm.parameters[0], [m1]); |
+ checkMetadata(mm.parameters[1], [m2]); |
+ checkMetadata(mm.parameters[2], [m3]); |
+ |
+ mm = cm.declarations[#qux]; |
+ checkMetadata(mm.parameters[0], []); |
+ checkMetadata(mm.parameters[1], [m3, m2, m1]); |
+ |
+ mm = cm.declarations[#quux]; |
+ checkMetadata(mm.parameters[0], []); |
+ checkMetadata(mm.parameters[1], []); |
+ |
+ mm = cm.declarations[#corge]; |
+ checkMetadata(mm.parameters[0], [m1]); |
+ checkMetadata(mm.parameters[1], [m2]); |
+ |
+ mm = cm.declarations[const Symbol('x=')]; |
+ checkMetadata(mm.parameters[0], [m2]); |
+} |