调用镜像全局函数

时间:2015-12-30 12:12:56

标签: reflection dart dart-mirrors

我在我的lib中搜索所有全局注释函数:

@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调用全局镜像函数。

1 个答案:

答案 0 :(得分:1)

SELECT SUM(CASE WHEN Reliquat_id = 1 THEN Poids END) AS NbrARRNP,
                      SUM(CASE WHEN Reliquat_id = 2 THEN Poids END) AS NbrSTNP,
                      SUM(CASE WHEN Reliquat_id = 3 THEN Nombre END) AS NbrARR,
                      SUM(CASE WHEN Reliquat_id = 4 THEN Nombre END) AS ST,
                      SUM(CASE WHEN Reliquat_id = 5 THEN Nombre END) AS NbrCLASS,
                      SUM(CASE WHEN Reliquat_id = 6 THEN Nombre END) AS NbrINDEX FROM datas WHERE Chantier_id = 4 AND main_id =1;