Как изменить исходный код с помощью JDT? - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь изменить исходный код java из моего плагина eclipse. Я привел несколько учебников для этого и сделал это кодирование. Когда я пытаюсь этот код, используя классы 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);           
                    }

1 Ответ

1 голос
/ 19 августа 2011

Вы применяете свои изменения к недавно созданному экземпляру IDocument, который вы просто отбрасываете. Примените их к экземпляру IDocument в буфере текстовых файлов и подключите / зафиксируйте / отключите буфер от за пределами посетителя - потенциально вы будете делать это гораздо чаще, чем необходимо, если вы это сделаете для каждого SingleMemberAnnotation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...