Eclipse AST不会更改在eclipse中未打开的文件 [英] Eclipse AST not changing files which are not opened in eclipse
本文介绍了Eclipse AST不会更改在eclipse中未打开的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用eclipse插件,JDT和AST(抽象语法树)来修改源代码。我可以读取所有Java文件,并对所有这些文件进行操作,但是当我使用
$ pre class =lang-java prettyprint-覆盖>
TextEdit edits = rewriter.rewriteAST();
//将文本编辑应用于编译单元
edits.apply(document);
iCompilationUnit.getBuffer()。setContents(document.get());
它只会在未保存模式的eclipse中对文件进行更改。
在下面找到我的代码片段:
CompilationUnit cu = parse(iCompilationUnit);
MethodVisitor visitor = new MethodVisitor();
cu.accept(访客);
String source = iCompilationUnit.getSource();
Document document = new Document(source);
ASTRewrite rewriter = ASTRewrite.create(cu.getAST());
cu.recordModifications();
for(MethodDeclaration methodDeclaration:visitor.getMethods()){
System.out.print(Method name:+ methodDeclaration.getName()
+返回类型:+ methodDeclaration。 getReturnType2());
MethodDeclaration methodDecl = methodDeclaration;
块块= methodDecl.getBody();
ListRewrite listRewrite = rewriter.getListRewrite(block,Block.STATEMENTS_PROPERTY);
语句placeHolder =(Statement)rewriter.createStringPlaceholder(System.out.println(\Test Print\);,ASTNode.EMPTY_STATEMENT);
listRewrite.insertFirst(placeHolder,null);
}
TextEdit edits = rewriter.rewriteAST();
//将文本编辑应用于编译单元
edits.apply(document);
iCompilationUnit.getBuffer()。setContents(document.get());
解决方案
尝试:
- 将TextEdit直接应用于ICompilationUnit,而不是使用Document。
- 使用ICompilationUnit.commitWorkingCopy保存更改
我使用的代码类似于:
iCompilationUnit.becomeWorkingCopy(new NullProgressMonitor());
CompilationUnit cu = parse(iCompilationUnit);
ASTRewrite rewriter = ASTRewrite.create(cu.getAST());
...进程AST ...
iCompilationUnit.applyTextEdit(rewrite.rewriteAST(),new NullProgressMonitor());
iCompilationUnit.commitWorkingCopy(false,new NullProgressMonitor());
I am trying to modify source code using eclipse plugin, JDT and AST (Abstract Syntax Tree). I can read all Java files and make operation on all those file, But when i am saving those changes (Edits) in to files using
TextEdit edits = rewriter.rewriteAST();
// apply the text edits to the compilation unit
edits.apply(document);
iCompilationUnit.getBuffer().setContents(document.get());
It only make changes in file those are open in eclipse in unsaved mode. Rest of files are not affected.
Find my code snippet below:
CompilationUnit cu = parse(iCompilationUnit);
MethodVisitor visitor = new MethodVisitor();
cu.accept(visitor);
String source = iCompilationUnit.getSource();
Document document= new Document(source);
ASTRewrite rewriter = ASTRewrite.create(cu.getAST());
cu.recordModifications();
for (MethodDeclaration methodDeclaration : visitor.getMethods()) {
System.out.print("Method name: " + methodDeclaration.getName()
+ " Return type: " + methodDeclaration.getReturnType2());
MethodDeclaration methodDecl = methodDeclaration;
Block block = methodDecl.getBody();
ListRewrite listRewrite = rewriter.getListRewrite(block, Block.STATEMENTS_PROPERTY);
Statement placeHolder = (Statement) rewriter.createStringPlaceholder("System.out.println(\"Test Print\");", ASTNode.EMPTY_STATEMENT);
listRewrite.insertFirst(placeHolder, null);
}
TextEdit edits = rewriter.rewriteAST();
// apply the text edits to the compilation unit
edits.apply(document);
iCompilationUnit.getBuffer().setContents(document.get());
解决方案
Try to:
- Apply the TextEdit directly to the ICompilationUnit instead of using Document.
- Use ICompilationUnit.commitWorkingCopy to save the changes
I use code similar to this:
iCompilationUnit.becomeWorkingCopy(new NullProgressMonitor());
CompilationUnit cu = parse(iCompilationUnit);
ASTRewrite rewriter = ASTRewrite.create(cu.getAST());
... process AST ...
iCompilationUnit.applyTextEdit(rewrite.rewriteAST(), new NullProgressMonitor());
iCompilationUnit.commitWorkingCopy(false, new NullProgressMonitor());
这篇关于Eclipse AST不会更改在eclipse中未打开的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文