свойство 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 в приведенном выше примере также является рефлексивной целью.
Реализация
final targets;
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-mirrors/MirrorsUsed/targets.html