比如有个需求:
通过分析注解,来生成一段dart代码。
dart上如果要自动生成代码,那么就需要用到代码生成器,code generator,这和Android里面apt类似。一般我们会引用source_gen声明一些generator,然后放在build.yaml里面,调用build_runner来生成代码。
如果不想使用框架,而是自己手写这个过程呢?
1.从dart文件读入代码
2.分析代码,读出里面的annotation对应的value值。
3.根据value值,自己再生成代码字符串content
4.把代码字符串写到一个dart文件中
如果是简单的第二个过程,可以想到一种,通过正则匹配来读出对应的annotation里面的值。然后用来生成代码字符串content。如果类很复杂,那么自己来手动分析就会比较繁琐。
dart中有一个工具analyzer,来分析代码。它会把一段代码内容导入进来,进行分析,然后生成一个ast抽象语法树。
我们现在利用它写一个demo读取出dart里面的注解内容。
我们先定义好一些注解类:
class SFLegoClass{
final String host;
final String source;
const SFLegoClass(this.host,this.source);
}
class SFLegoField{
final String fieldAlias;
const SFLegoField(this.fieldAlias);
}
class SFLegoMethod{
final String method;
const SFLegoMethod(this.m