我目前正在使用eclipse AST生成源代码。除了大多数示例之外,我从头开始在独立应用程序中生成源代码,而不是eclipse插件。
从ASTParser读入时,您可以通过调用recordModifications()
来激活修改,但是当从头开始创建AST时,这不起作用,例如:致电newCompilationUnit()
。
因此,无法通过Document
和TextEdit
将源写入文件 - 有一个例外,即未启用修改记录。
从头开始生成AST并写入文件的经验?
谢谢!
答案 0 :(得分:2)
为什么不先创建文件,然后从中生成一个AST,如下所示:
ICompilationUnit unit = JavaCore.createCompilationUnitFrom(file);
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setResolveBindings(true);
parser.setSource(unit);
// Parse the source code and generate an AST.
CompilationUnit ast = (CompilationUnit) parser.createAST(null);
如果文件是新创建的并且是空白的,那么可能AST将为空,然后您可以替换ast
对象的根并将其写入文件。此外,如果您不依赖于Eclipse,您可以使用JSR199标准执行相同的操作,并以正常方式将该AST写入文件。有关简介,请参阅here。
答案 1 :(得分:2)
感谢您的建议! 与此同时,我找到了一种通过内部类“ASTFlattener”发出源代码的方法,该类创建了AST的String表示。这对我很有用....
答案 2 :(得分:1)
我一直试图找到同一个问题的答案。 基于上面的答案,到目前为止我找到的最优雅的解决方案如下:
ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setCompilerOptions(....);
Document document = new Document("");
parser.setSource(document.get().toCharArray());
CompilationUnit unit = (CompilationUnit)parser.createAST(null);
unit.recordModifications();
TextEdit edits = unit.rewrite(document, null);
edits.apply(document);
// now write document.get() to file
答案 3 :(得分:0)
如果您从头开始生成源代码,也许您可以编写能够解析为临时文件的最小源代码,将修改应用于Ast,然后将其作为文本编辑写回到该文件中除此以外。然后阅读来源。然后,您可以将其传输到您想要的任何位置。
可能有更优雅的解决方案,但这可能有效。
答案 4 :(得分:0)
从AST创建了一个编译单元后我正在做:
AST ast = AST.newAST(AST.JLS4);
CompilationUnit unit = ast.newCompilationUnit();
...填写编译单元然后......
package.createCompilationUnit(className + ".java", unit.toString(), true, null);
其中:
package
= IPackageFragment
className
= String
(生成的班级名称)
unit
=> CompilationUnit
ast
true
=>强制更换
null
=>进度监控