有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用JDT修改源代码?

我正试图从我的eclipse插件中修改java源代码。为此,我参考了一些教程,并编写了这些代码。当我使用ASTVisitor和ASTRewrite类尝试这段代码时。放置此代码时,代码流中断。如果我删除这个块中的代码,插件就会运行

我的意图是从源代码中删除一个节点,比如注释。请帮帮我。提前谢谢你的帮助

        @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);           
                    }

共 (1) 个答案

  1. # 1 楼答案

    您正在将所做的更改应用于刚刚创建的IDocument实例,并将其丢弃。将它们应用于文本文件缓冲区中的IDocument实例,并连接/提交/断开缓冲区与访问者外部的连接,如果对每个SingleMemberAnnotation都这样做,那么可能需要做的次数要多得多