Finally, I found the answer by studying different open-source projects. Unfortunately, most examples on the web are dealing with simple cases in which they apply a series of changes immediately.
If you need to visit different entities of a unit, and accordingly change different places of that unit, the only thing you need is to keep the same instance of an ASTRewrite for the whole unit. IN other words, the creation, rewriting and applying of ASTRewrite, should be only once for each CompilationUnit.
For each Method declaration we break-down the addComment method:
ListRewrite listRewrite = rewriter.getListRewrite(method.getBody(),
Block.STATEMENTS_PROPERTY);
Statement placeHolder = (Statement)rewriter.createStringPlaceholder("//MyComment",
ASTNode.EMPTY_STATEMENT);
listRewrite.insertFirst(placeHolder, null);
Lastly, whenever the whole unit has been visited, we should apply changes once:
TextEdit edits = rewriter.rewriteAST();
Document document = new Document(unit.getSource());
edits.apply(document);
unit.getBuffer().setContents(document.get());
Thanks to open-source community :)