пользовательская аннотация/метаданные в dart lang

Может ли кто-нибудь объяснить мне использование аннотаций в Dart?

В документации я нашел этот пример:

library todo;

class todo {
  final String who;
  final String what;

  const todo(this.who, this.what);
}

с последующим

import 'todo.dart';

@todo('seth', 'make this do something')
void doSomething() {
 print('do something');
}

Итак, что я должен написать в main(), чтобы функция doSomething() выполнялась?

Спасибо


person Hasan A Yousef    schedule 08.11.2014    source источник


Ответы (1)


Что-то типа

import 'dart:mirrors';
import 'do_something.dart';
import 'todo.dart';


void main() {
  currentMirrorSystem().libraries.forEach((uri, lib) {
    //print('lib: ${uri}');
    lib.declarations.forEach((s, decl) {
      //print('decl: ${s}');
      decl.metadata.where((m) => m.reflectee is Todo).forEach((m) {
        var anno = m.reflectee as Todo;
        if(decl is MethodMirror) {
          print('Todo(${anno.who}, ${anno.what})');
          ((decl as MethodMirror).owner as LibraryMirror).invoke(s, []);
        };
      });
    });
  });
}
person Günter Zöchbauer    schedule 09.11.2014
comment
Я определенно искал что-то подобное. Спасибо! - person Fallenreaper; 22.09.2016
comment
Если код работает в браузере, вам следует рассмотреть возможность использования отражаемого пакета из соображений размера кода. - person Günter Zöchbauer; 22.09.2016