簡體   English   中英

如何使用JDT修改源代碼?

[英]How to modify source code using JDT?

我正在嘗試從我的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);           
                    }

您將所做的更改應用於剛剛丟棄的新創建的IDocument實例。 將它們應用於文本文件緩沖區中的IDocument實例,並從訪問者外部連接/提交/斷開緩沖區-如果您為每個SingleMemberAnnotation進行操作,則可能要做的次數要多得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM