2011-08-18 5 views
0

J'essaie de modifier la source java de mon plugin eclipse. J'ai référé quelques tutoriels pour cela et fait ce codage. Quand j'essaye ce code en utilisant les classes ASTVisitor et ASTRewrite. Le flux de code se casse lorsque ce code est placé. Si je supprime le code à l'intérieur de ce bloc, le plugin fonctionne.Comment modifier le code source en utilisant JDT?

Mon intention est de supprimer un nœud dit Annotaion du code source. Veuillez m'aider dans ceci. Merci pour l'aide à l'avance.

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

Répondre

1

Vous appliquez vos modifications à une instance d'IDocument que vous venez de supprimer. Appliquez-les à l'instance IDocument dans le tampon de fichier texte, et connectez/commit/déconnectez le tampon de en dehors du du visiteur - vous allez potentiellement le faire beaucoup plus de fois que nécessaire si vous le faites pour chaque SingleMemberAnnotation.

Questions connexes