com.sun.tools.javac.comp.CompileStates
编译阶段
public enum CompileState {
INIT(0), //初始化
PARSE(1), //词法和语法分析
ENTER(2), //建立符号表
PROCESS(3), //处理注解
ATTR(4), //属性计算
FLOW(5), //数据流分析
TRANSTYPES(6), //去除语法糖:泛型处理
TRANSPATTERNS(7), //去除语法糖:模式匹配处理
UNLAMBDA(8), //去除语法糖:LAMBDA处理(转换成方法)
LOWER(9), //去除语法糖:内部类、foreach循环、断言等。
GENERATE(10); //生成字节码
...
}
processAnnotations( //3:处理注解
enterTrees(stopIfError(CompileState.PARSE, //2:建立符号表
initModules(stopIfError(CompileState.PARSE,
parseFiles(sourceFileObjects)) //1:词法和语法分析
))
),classnames);
...
case SIMPLE:
generate( //10:生成字节码
desugar( //6~9:去除语法糖
flow( //5:数据流分析
attribute(todo)))); //4:属性计算
public class MyClass {
public int a = 2+3;
public int foo(){
int b = a + 10;
return b;
}
}
ast作用域图
https://time.geekbang.org/column/article/252828