Index: test/codegen/lib/mirrors/inherited_metadata_test.dart |
diff --git a/test/codegen/lib/mirrors/inherited_metadata_test.dart b/test/codegen/lib/mirrors/inherited_metadata_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c0671f944da492b0e50e4333399b6bef0f91b4d4 |
--- /dev/null |
+++ b/test/codegen/lib/mirrors/inherited_metadata_test.dart |
@@ -0,0 +1,51 @@ |
+// 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. |
+ |
+library test.mirrors; |
+ |
+@MirrorsUsed(targets: "test.mirrors") |
+import 'dart:mirrors'; |
+ |
+import 'package:expect/expect.dart'; |
+ |
+ |
+class RemoteClass { |
+ final String name; |
+ const RemoteClass([this.name]); |
+} |
+ |
+class A { |
+} |
+ |
+@RemoteClass("ASF") |
+class B extends A { |
+} |
+ |
+class C extends B { |
+} |
+ |
+ |
+void main() { |
+ bool foundB = false; |
+ |
+ MirrorSystem mirrorSystem = currentMirrorSystem(); |
+ mirrorSystem.libraries.forEach((lk, l) { |
+ l.declarations.forEach((dk, d) { |
+ if(d is ClassMirror) { |
+ d.metadata.forEach((md) { |
+ InstanceMirror metadata = md as InstanceMirror; |
+ // Metadata must not be inherited. |
+ if(metadata.type == reflectClass(RemoteClass)) { |
+ Expect.isFalse(foundB); |
+ Expect.equals(#B, d.simpleName); |
+ foundB = true; |
+ } |
+ }); |
+ } |
+ }); |
+ }); |
+ |
+ Expect.isTrue(foundB); |
+} |
+ |