由于您没有提供任何代码,我无法给您一个明确的答案,但 ASTRewrite 确实有效,即使它在Eclipse “生态系统”之外使用。很可能您使用了错误的方法来应用 AST 上的更改。为了使其工作,请执行以下操作
将整个 java 文件读入一个字符串并从中创建一个org.eclipse.jface.text.Document
final String source = FileUtils.readFileToString(javaSRC);
org.eclipse.jface.text.Document document = new org.eclipse.jface.text.Document(source);
现在您可以创建ASTParser和ASTRewriter的实例,并将解析器的源设置为您刚刚创建的文档。
ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setSource(document.get().toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
final CompilationUnit cu = (CompilationUnit) parser.createAST(null);
ASTRewrite rewriter = ASTRewrite.create(cu.getAST());
cu.recordModifications();
完成所有修改后,调用正确的重写方法:public TextEdit rewriteAST(IDocument document,Map options)
在此之后,您可以应用更改并(如果您愿意)也可以将更改写回文件。
TextEdit edits = rewriter.rewriteAST(document,null);
edits.apply(document);
FileUtils.write(javaSRC, document.get());
顺便说一句:我已经用以下 jar 测试了这段代码:
org.eclipse.osgi_3.8.2.v20130124-134944.jar
org.eclipse.jdt.core_3.8.3.v20130121-145325.jar
org.eclipse.equinox.preferences_3.5.1.v20121031-182809.jar
org.eclipse.equinox.common_3.6.100.v20120522-1841.jar
org.eclipse.core.runtime_3.8.0.v20120912-155025.jar
org.eclipse.core.resources_3.8.1.v20121114-124432.jar
org.eclipse.core.jobs_3.5.300.v20120912-155018.jar
org.eclipse.core.contenttype_3.4.200.v20120523-2004.jar