【Groovy】编译时元编程 ( ASTTransformation#visit 方法简介 | org.codehaus.groovy.ast.ModuleNode 脚本节点 )
生活随笔
收集整理的這篇文章主要介紹了
【Groovy】编译时元编程 ( ASTTransformation#visit 方法简介 | org.codehaus.groovy.ast.ModuleNode 脚本节点 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、ASTTransformation#visit 方法簡介
- 二、org.codehaus.groovy.ast.ModuleNode 腳本節點
一、ASTTransformation#visit 方法簡介
在上一篇博客 【Groovy】編譯時元編程 ( 編譯 ASTTransformation | 打包 ASTTransformation 字節碼文件 | 編譯 Groovy 類同進行編譯時處理 ) 中 , 寫的進行 Groovy 編譯時處理 ASTTransformation 如下 :
import org.codehaus.groovy.ast.ASTNode import org.codehaus.groovy.control.SourceUnit import org.codehaus.groovy.transform.ASTTransformation import org.codehaus.groovy.transform.GroovyASTTransformation@GroovyASTTransformation class MyASTTransformation implements ASTTransformation {/*** 編譯時處理方法* @param nodes AST 抽象語法樹節點 , 是 ASTNode 數組類型* @param source 源單元 , 可以通過該對象拿到源文件*/@Overridevoid visit(ASTNode[] nodes, SourceUnit source) {println nodesprintln source} }打印結果為 :
[org.codehaus.groovy.ast.ModuleNode@2609b277] org.codehaus.groovy.control.SourceUnit@1fd14d74在 visit 方法中 , ASTNode[] nodes 參數是 AST 語法樹根節點 , SourceUnit source 參數代表源碼 ;
二、org.codehaus.groovy.ast.ModuleNode 腳本節點
ASTNode[] nodes 參數是 AST 語法樹節點 , 該數組的值是
[org.codehaus.groovy.ast.ModuleNode@2609b277]AST 語法樹節點是 org.codehaus.groovy.ast.ModuleNode 類型對象 ;
org.codehaus.groovy.ast.ModuleNode 是 Groovy 腳本的語法樹節點 ;
- 其內部封裝的 List<ClassNode> classes = new LinkedList<ClassNode>(); 成員表示該腳本中定義了多少個 Groovy 類節點 ;
- private List<MethodNode> methods = new ArrayList<MethodNode>(); 成員表示該腳本中有多少個方法 ;
- private Map<String, ImportNode> imports = new HashMap<String, ImportNode>(); 成員表示導入了多少類 ;
通過 ModuleNode 類 , 可以拿到 Groovy 腳本中幾乎所有的內容 ;
org.codehaus.groovy.ast.ModuleNode 原型如下 :
/*** 表示一個模塊,該模塊通常由一個類聲明組成,* 但可以包括一些導入、一些語句和多個類,* 這些類與Python或Ruby中的腳本等語句混合在一起** @author Jochen Theodorou* @author Paul King* @author <a href="mailto:james@coredevelopers.net">James Strachan</a>*/ public class ModuleNode extends ASTNode implements Opcodes {private BlockStatement statementBlock = new BlockStatement();List<ClassNode> classes = new LinkedList<ClassNode>();private List<MethodNode> methods = new ArrayList<MethodNode>();private Map<String, ImportNode> imports = new HashMap<String, ImportNode>();private List<ImportNode> starImports = new ArrayList<ImportNode>();private Map<String, ImportNode> staticImports = new LinkedHashMap<String, ImportNode>();private Map<String, ImportNode> staticStarImports = new LinkedHashMap<String, ImportNode>();private CompileUnit unit;private PackageNode packageNode;private String description;private boolean createClassForStatements = true;private transient SourceUnit context;private boolean importsResolved = false;private ClassNode scriptDummy;private String mainClassName = null; }總結
以上是生活随笔為你收集整理的【Groovy】编译时元编程 ( ASTTransformation#visit 方法简介 | org.codehaus.groovy.ast.ModuleNode 脚本节点 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】编译时元编程 ( 编译
- 下一篇: 【Groovy】编译时元编程 ( AST