繁体   English   中英

Eclipse JDT AST:如何将生成的AST写入java文件?

[英]Eclipse JDT AST: How to write generated AST to java file?

我目前正在使用eclipse AST来生成源代码。 除了在大多数示例中,我从头开始在独立应用程序中生成源代码,而不是eclipse插件。

从ASTParser读入时,您可以通过调用recordModifications()来激活修改,但是当从头开始创建AST时,例如通过调用newCompilationUnit() ,这不起作用。

因此,无法通过DocumentTextEdit将源写入文件 - 有一个例外,即尚未启用修改记录。
从头开始生成AST并写入文件的经验? 谢谢!

为什么不首先创建文件,然后从中生成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写入文件。 请看这里的介绍。

谢谢你的建议! 与此同时,我找到了一种通过内部类“ASTFlattener”发出源代码的方法,该类创建了AST的String表示。 这对我很有用....

我一直试图找到同一个问题的答案。 基于上面的答案,到目前为止我找到的最优雅的解决方案如下:

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

如果您从头开始生成源代码,也许您可​​以编写能够解析为临时文件的最小源代码,将修改应用于Ast,然后将其作为文本编辑将其写回该文件。 然后阅读来源。 然后,您可以将其传输到您想要的任何位置。

可能有更优雅的解决方案,但这可能有效。

从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 =>进度监视器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM