Свойство targets
dynamic targetsСписок рефлективных целей.
Вместе с metaTargets, это обеспечивает полный список рефлективных целей, используемых библиотекой, к которой относятся эти метаданные.
Следующий текст не является нормативным:
На данный момент нет формального описания того, что такое рефлективная цель. Неформально, целью является библиотека, класс, метод или поле.
Dart2js в настоящее время поддерживает следующие форматы для указания целей:
- Константный List, содержащий константы String, представляющие (квалифицированные) имена целей и типы Dart.
- Одиночная константа String, значение которой представляет собой список (квалифицированных) имен, разделённых запятыми.
- Одиночный тип Dart.
Квалифицированное имя разрешается до цели следующим образом:
- Если квалифицированное имя совпадает с именем библиотеки, то совпадающая библиотека является целью.
- В противном случае найдите наибольший префикс имени, такой что префикс заканчивается прямо перед
.и является именем библиотеки. - Используйте эту библиотеку как текущую область видимости. Если совпадающий префикс не найден, используйте текущую библиотеку, то есть библиотеку, в которой размечено аннотация MirrorsUsed.
- Разделите оставшийся суффикс (всё имя, если в шаге 3 не было найдено имя библиотеки) на список String, используя
.в качестве разделителя. - Выберите все цели в текущей области видимости, имена которых совпадают со строкой String из списка.
Например:
library my.library.one;
class A {
var aField;
}
library main;
@MirrorsUsed(targets: "my.library.one.A.aField")
import "dart:mirrors";
Аннотация MirrorsUsed указывает A и aField из библиотеки my.library.one в качестве целей. Это пометит класс A как рефлективную цель. Указание цели для aField не оказывает никакого эффекта, так как в my.library.one нет цели с таким именем.
Обратите внимание, что всё внутри цели также доступно для рефлексии. Таким образом, если библиотека указана как цель, все классы в этой библиотеке становятся целями для рефлексии. Аналогично, если класс является целью, все его методы и поля становятся целями для рефлексии. Как следствие, aField в приведённом выше примере также является рефлективной целью.
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-mirrors/MirrorsUsed/targets.html