diff options
author | Lukas Felber | 2014-02-10 15:28:28 +0000 |
---|---|---|
committer | Thomas Corbat | 2014-02-26 15:16:13 +0000 |
commit | c558463abee55727d9c47c4e776899af89887d95 (patch) | |
tree | de3c89866ab6694ae19e18fce22c708b58619c1d /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core | |
parent | 8000c7fe6120f2efbd3780f9b330918193fd4c22 (diff) | |
download | org.eclipse.cdt-c558463abee55727d9c47c4e776899af89887d95.tar.gz org.eclipse.cdt-c558463abee55727d9c47c4e776899af89887d95.tar.xz org.eclipse.cdt-c558463abee55727d9c47c4e776899af89887d95.zip |
Bug 427002. [ast rewrite] Comments originating from other translation
units are now automatically taken into consideration when rewriting.
Change-Id: If535ab6cdd1ec293a0d95a6f726d848f6348f0ed
Signed-off-by: Lukas Felber <l.felber@gmx.ch>
Reviewed-on: https://git.eclipse.org/r/21761
Reviewed-by: Thomas Corbat <tcorbat@hsr.ch>
IP-Clean: Thomas Corbat <tcorbat@hsr.ch>
Tested-by: Thomas Corbat <tcorbat@hsr.ch>
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core')
2 files changed, 35 insertions, 1 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenter.java index 8fc605eee4f..9fd70e52f6f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenter.java @@ -179,6 +179,23 @@ public class ASTCommenter { if (ast == null) { return commentMap; } + addCommentsToMap(ast, commentMap); + return commentMap; + } + + /** + * Adds all comments given in {@code ast} to the {@code commentMap}. Calling this twice will have no + * effect. + * + * @param ast + * the AST which contains the comments to add + * @param commentMap + * the comment map to which the comments are added to + */ + public static void addCommentsToMap(IASTTranslationUnit ast, NodeCommentMap commentMap) { + if (ast == null || commentMap.isASTCovered(ast)) { + return; + } IASTComment[] commentsArray = ast.getComments(); List<IASTComment> comments = new ArrayList<IASTComment>(commentsArray.length); for (IASTComment comment : commentsArray) { @@ -189,8 +206,8 @@ public class ASTCommenter { assignPreprocessorComments(commentMap, comments, ast); CommentHandler commentHandler = new CommentHandler(comments); ASTCommenterVisitor commenter = new ASTCommenterVisitor(commentHandler, commentMap); + commentMap.setASTCovered(ast); ast.accept(commenter); - return commentMap; } private static boolean isCommentDirectlyBeforePreprocessorStatement(IASTComment comment, diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommentMap.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommentMap.java index 74303f4def3..63a9c471141 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommentMap.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommentMap.java @@ -19,6 +19,7 @@ import java.util.Map; import org.eclipse.cdt.core.dom.ast.IASTComment; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.internal.core.dom.rewrite.util.ASTNodes; /** @@ -32,6 +33,7 @@ public class NodeCommentMap { protected final Map<IASTNode, List<IASTComment>> leadingMap = new HashMap<IASTNode, List<IASTComment>>(); protected final Map<IASTNode, List<IASTComment>> trailingMap = new HashMap<IASTNode, List<IASTComment>>(); protected final Map<IASTNode, List<IASTComment>> freestandingMap = new HashMap<IASTNode, List<IASTComment>>(); + protected final List<IASTTranslationUnit> coveredUnits = new ArrayList<IASTTranslationUnit>(); /** * Add a comment to the map with the trailing comments. @@ -188,4 +190,19 @@ public class NodeCommentMap { } return endOffset; } + + /** + * Makes this comment map aware that comments of the given {@code ast} are already contained in the map. + * This can be used to make sure no-one accidentally tries to re-add already contained comments. + */ + public void setASTCovered(IASTTranslationUnit ast) { + coveredUnits.add(ast); + } + + /** + * Checks whether comments of the {@code ast} are already present in the map. + */ + public boolean isASTCovered(IASTTranslationUnit ast) { + return coveredUnits.contains(ast); + } } |