我正在我的库中搜索所有带全局注释的函数:

@MyAnnotation()
String func(arg1, arg2) => "test";

main() {
    var routines = m.currentMirrorSystem().findLibrary(#my.lib).declarations.values
      .where((m.DeclarationMirror dm) =>
        dm is m.MethodMirror && dm.metadata.map((m.InstanceMirror im) => im.reflectee)
            .any((refl) => refl is MyAnnotation)
      );
     // this works all ok
}

现在,我有了带注释功能的List<DeclarationMirror>。但是我以后需要调用它。 ClosureMirror具有invoke方法,但是我无法看到任何方法来获取我的MethodMirror或例程的Symbol。
我不能仅使用新的ClosureMirror(func),因为我有很多带注释的函数,而且我不知道每个名字。我也没有任何ClassMirror或InstanceMirror。

所以问题是,如何通过其Symbol或MethodMirror调用全局镜像函数。

最佳答案

  m.MethodMirror f = routines[0];
    (f.owner as m.LibraryMirror).invoke(f.simpleName, ['a', 'b']);

关于reflection - 调用镜像的全局功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34529343/

10-10 18:05