Eclipse代码模板中% if/% endif含义及AST提取方法
解答
1. % if和% endif的含义
这两个不是Java原生语法,你当前查看的不是可直接编译的Java源码,是Eclipse PDE(插件开发环境)的代码生成模板文件:
- 以
%开头的是模板专属的条件控制指令,用来根据用户创建视图时选择的参数,动态决定生成的Java代码包含哪些片段 - 所有
$xxx$格式的内容是模板变量,生成代码时会被替换为用户输入的实际值
比如你选择创建树类型的视图(viewType取值为treeViewer),生成代码时就会保留% if viewType == "treeViewer"和对应% endif之间的代码,否则这部分会被直接剔除。
2. 提取AST报错的原因
Java AST解析器只能处理语法完全符合Java规范的源码文件,你直接输入模板文件的话,里面的模板控制指令、变量占位符都属于非法Java语法,自然会解析失败。
3. 正确提取AST的方法
你需要先对模板做预处理,得到合法Java文件后再做AST解析,两种可行路径:
- 直接在Eclipse PDE中使用该模板创建视图,按提示输入所有需要的参数(包名、类名、视图类型等),Eclipse会自动生成完整合法的Java文件,再对该生成文件执行AST提取即可
- 如果需要批量处理模板,可自行实现预处理逻辑:先给定所有模板变量的实际取值,遍历所有
% if条件分支,保留符合条件的代码段,替换所有$xxx$占位符为实际值,预处理完成后得到语法合规的Java代码,再走常规AST解析流程。
内容的提问来源于stack exchange,提问作者Vallxy
相关产品推荐
相关产品推荐

