欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【Groovy】编译时元编程 ( ASTTransformation#visit 方法简介 | org.codehaus.groovy.ast.ModuleNode 脚本节点 )

发布时间:2025/6/17 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【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 脚本节点 )的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。