我正在尝试从我的eclipse插件修改java源代码。我已经为此引用了一些教程并完成了这个编码。当我使用ASTVisitor和ASTRewrite类尝试此代码时。放置此代码时代码流会中断。如果我删除此块中的代码,则插件运行。
我的目的是从源代码中删除节点Annotaion。请帮助我。我在这里先向您的帮助表示感谢。
@Override
public boolean visit(SingleMemberAnnotation node) {
ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager();
IPath iPath = javaUnit.getPath();
try {
bufferManager.connect(iPath, null);
ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(iPath);
IDocument document = textFileBuffer.getDocument();
AST ast= node.getAST();
SingleMemberAnnotation singleMemberAnnotation = ast.newSingleMemberAnnotation();
singleMemberAnnotation.delete();
textFileBuffer
.commit(null , true);
} catch (CoreException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
finally
{
try {
bufferManager.disconnect(iPath, null);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
TextEdit textEdit = null;
System.out.println("E");
try {
textEdit = rewrite.rewriteAST(new Document(javaUnit.getSource()),null);
} catch (JavaModelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
textEdit.apply(new Document(javaUnit.getSource()));
} catch (MalformedTreeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JavaModelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.visit(node);
}
答案 0 :(得分:1)
您正在将更改应用于刚刚丢弃的新创建的IDocument实例。将它们应用到文本文件缓冲区中的IDocument实例,并从访问者的外部连接/提交/断开缓冲区 - 如果你这样做,你可能会做更多次的必要它适用于每个SingleMemberAnnotation。