Categories
程式開發

详解Dart中如何通过注解生成代码


背景

最近在项目中使用到了Dart中的注解代码生成技术,这跟之前Java中APT+JavaPoet生成代码那套技术还是有一些不同的地方,比如

  • Flutter中在禁用了dart:mirror,无法使用反射情况下如何得到类相关信息?
  • Dart的文件不限制是class,可以是function、class,因而在注解扫描的范围不同的情况下如何拿到层层信息而不仅仅是toplevel信息?
  • 提取到注解信息时又是如何生成复杂的模板代码?

在Flutter中究竟是如何解决上面的问题呢?下面将一步步揭开这神秘的面纱。

一个简单的例子

先从一个简单的例子感受下dart中如何通过注解生成代码

  • 声明一个注解,并使用注解

详解Dart中如何通过注解生成代码 1

在Dart中构造器用const修饰就好,可以看出Dart的注解声明起来比较简单,不像java中还得有运行类型如RunTime、Source等

  • 解析注解的生成器

在Dart中我们一般使用source_gen中的GeneratorForAnnotation,该类继承自Generator这个跟Java APT中的processor职责类似,需要在GeneratorForAnnotation的泛型中填入我们需要处理的注解

详解Dart中如何通过注解生成代码 2

  • 触发生成器的Builer

原文链接:【https://www.infoq.cn/article/OwhDoBiQAv5VXDIGJXar】。未经作者许可,禁止转载。