Eclipse plugin Eclipse AST不更改未在Eclipse中打开的文件

Eclipse plugin Eclipse AST不更改未在Eclipse中打开的文件,eclipse-plugin,abstract-syntax-tree,eclipse-jdt,Eclipse Plugin,Abstract Syntax Tree,Eclipse Jdt,我试图使用eclipse插件、JDT和AST(抽象语法树)修改源代码。我可以读取所有Java文件并对所有这些文件进行操作,但是当我使用 TextEdit edits=rewriter.rewriteAST(); //将文本编辑应用于编译单元 编辑、应用(文件); iCompilationUnit.getBuffer().setContents(document.get()); 它只在eclipse中以未保存模式打开的文件中进行更改。其余文件不受影响 请在下面找到我的代码片段: 编译单元cu=p

我试图使用eclipse插件、JDT和AST(抽象语法树)修改源代码。我可以读取所有Java文件并对所有这些文件进行操作,但是当我使用

TextEdit edits=rewriter.rewriteAST();
//将文本编辑应用于编译单元
编辑、应用(文件);
iCompilationUnit.getBuffer().setContents(document.get());
它只在eclipse中以未保存模式打开的文件中进行更改。其余文件不受影响

请在下面找到我的代码片段:

编译单元cu=parse(iCompilationUnit);
MethodVisitor=新MethodVisitor();
特写:接受(访客);
字符串source=iCompilationUnit.getSource();
文件=新文件(来源);
ASTRewrite rewriter=ASTRewrite.create(cu.getAST());
cu.recordModifications();
for(MethodDeclaration:visitor.getMethods()){
System.out.print(“方法名称:”+methodDeclaration.getName()
+“返回类型:”+methodDeclaration.getReturnType2());
MethodDeclaration methodDecl=MethodDeclaration;
Block=methodDecl.getBody();
ListRewrite ListRewrite=rewriter.getListRewrite(block,block.STATEMENTS\u属性);
语句占位符=(语句)rewriter.createStringPlaceholder(“System.out.println(\“Test Print\”);”,ASTNode.EMPTY\u语句);
insertFirst(占位符,null);
}
TextEdit edits=rewriter.rewriteAST();
//将文本编辑应用于编译单元
编辑、应用(文件);
iCompilationUnit.getBuffer().setContents(document.get());
尝试:

  • 将文本编辑直接应用于ICompilationUnit,而不是使用文档
  • 使用ICompilationUnit.commitWorkingCopy保存更改
  • 我使用的代码与此类似:

    iCompilationUnit.becomeWorkingCopy(新的NullProgressMonitor());
    编译单元cu=parse(iCompilationUnit);
    ASTRewrite rewriter=ASTRewrite.create(cu.getAST());
    ... 处理AST。。。
    iCompilationUnit.applyTextEdit(rewrite.rewriteAST(),新的NullProgressMonitor());
    iCompilationUnit.commitWorkingCopy(false,新的NullProgressMonitor());
    
    谢谢@christoph.keimel