Javac(com.sun.tools.javac.main.JavaCompiler)將 .java 轉為 .class,歷經四大階段:
.class 檔案com.sun.tools.javac.parser.Scannerint a = b + 2; → INT, IDENTIFIER(a), ASSIGN, IDENTIFIER(b), PLUS, INT_LITERAL(2), SEMICOLONJCTree 節點構成的 AST,每個節點對應一個語法結構(類、方法、運算式、註解等)com.sun.tools.javac.parser.Parser分為三個子階段,入口均在 com.sun.tools.javac.comp 套件:
Enter 類Symbol 物件),同時自動補齊預設建構子.class 或 .javaAttr(屬性賦值)+ Check(邏輯檢查)int a = 1 + 2; → AST 直接保留 3return 後無死碼)Flow 類if(false) 區塊)desugar() 在 TransTypes、Lower 中完成com.sun.tools.javac.jvm.Gen.class(含常數池、方法表、屬性表等)<init>)與類建構器(<clinit>)在此階段注入 ASTJDK 6+ 引入 JSR 269(javax.annotation.processing),允許在填充符號表之後、註解檢查之前介入: