mirror of
https://github.com/dart-lang/sdk
synced 2024-11-05 18:22:09 +00:00
b101a7d002
Change-Id: Ib33169c3e0ffc870915c189404074a1dea472546 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196548 Reviewed-by: Bob Nystrom <rnystrom@google.com> Commit-Queue: Leaf Petersen <leafp@google.com>
80 lines
2.2 KiB
Dart
80 lines
2.2 KiB
Dart
// 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.
|
|
|
|
// @dart = 2.9
|
|
|
|
library test.metadata_test;
|
|
|
|
import 'dart:mirrors';
|
|
|
|
const string = 'a metadata string';
|
|
|
|
const symbol = const Symbol('symbol');
|
|
|
|
const hest = 'hest';
|
|
|
|
@symbol
|
|
@string
|
|
class MyClass {
|
|
@hest
|
|
@hest
|
|
@symbol
|
|
var x;
|
|
var y;
|
|
|
|
@string
|
|
@symbol
|
|
@string
|
|
myMethod() => 1;
|
|
myOtherMethod() => 2;
|
|
}
|
|
|
|
checkMetadata(DeclarationMirror mirror, List expectedMetadata) {
|
|
List metadata = mirror.metadata.map((m) => m.reflectee).toList();
|
|
if (metadata == null) {
|
|
throw 'Null metadata on $mirror';
|
|
}
|
|
int expectedLength = expectedMetadata.length;
|
|
int actualLength = metadata.length;
|
|
if (expectedLength != actualLength) {
|
|
throw 'Expected length = $expectedLength, but got length = $actualLength.';
|
|
}
|
|
for (int i = 0; i < expectedLength; i++) {
|
|
if (metadata[i] != expectedMetadata[i]) {
|
|
throw '${metadata[i]} is not "${expectedMetadata[i]}"'
|
|
' in $mirror at index $i';
|
|
}
|
|
}
|
|
print(metadata);
|
|
}
|
|
|
|
@symbol
|
|
@string
|
|
@symbol
|
|
main() {
|
|
if (MirrorSystem.getName(symbol) != 'symbol') {
|
|
// This happened in dart2js due to how early library metadata is
|
|
// computed.
|
|
throw 'Bad constant: $symbol';
|
|
}
|
|
|
|
MirrorSystem mirrors = currentMirrorSystem();
|
|
ClassMirror myClassMirror = reflectClass(MyClass);
|
|
checkMetadata(myClassMirror, [symbol, string]);
|
|
LibraryMirror lib = mirrors.findLibrary(#test.metadata_test);
|
|
MethodMirror function = lib.declarations[#main] as MethodMirror;
|
|
checkMetadata(function, [symbol, string, symbol]);
|
|
MethodMirror method = myClassMirror.declarations[#myMethod] as MethodMirror;
|
|
checkMetadata(method, [string, symbol, string]);
|
|
method = myClassMirror.declarations[#myOtherMethod] as MethodMirror;
|
|
checkMetadata(method, []);
|
|
|
|
VariableMirror xMirror = myClassMirror.declarations[#x] as VariableMirror;
|
|
checkMetadata(xMirror, [hest, hest, symbol]);
|
|
|
|
VariableMirror yMirror = myClassMirror.declarations[#y] as VariableMirror;
|
|
checkMetadata(yMirror, []);
|
|
|
|
// TODO(ahe): Test local functions.
|
|
}
|