From e51a76571e0b029a80ce3a40768c878fa802fb02 Mon Sep 17 00:00:00 2001 From: Simon Taddiken Date: Wed, 2 Oct 2013 10:21:21 -0700 Subject: [PATCH] Bug 414501: modification of base specifiers now works using an ASTRewrite Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=414501 Change-Id: Ide93fa5f988f1121fddfed9af036cbac7518fe29 Signed-off-by: Simon Taddiken Reviewed-on: https://git.eclipse.org/r/15178 Reviewed-by: Sergey Prigogin IP-Clean: Sergey Prigogin Tested-by: Sergey Prigogin --- .../rewrite/astwriter/ASTWriterVisitor.java | 7 +++++++ .../dom/rewrite/astwriter/DeclSpecWriter.java | 6 +++++- .../changegenerator/ChangeGenerator.java | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java index 9a2a669e9eb..320140af070 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java @@ -30,6 +30,7 @@ import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; import org.eclipse.cdt.internal.core.dom.rewrite.ASTLiteralNode; import org.eclipse.cdt.internal.core.dom.rewrite.commenthandler.NodeCommentMap; @@ -139,6 +140,12 @@ public class ASTWriterVisitor extends ASTVisitor { scribe.print(lit.getRawSignature()); } + @Override + public int visit(ICPPASTBaseSpecifier baseSpecifier) { + declSpecWriter.writeBaseSpecifiers(baseSpecifier); + return ASTVisitor.PROCESS_SKIP; + } + @Override public int visit(IASTName name) { if (spaceNeededBeforeName && name.getSimpleID().length != 0) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java index f4610043e90..da523e529ca 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java @@ -282,7 +282,7 @@ public class DeclSpecWriter extends NodeWriter { return compDeclSpec.getMembers(); } - private void writeBaseSpecifiers(ICPPASTBaseSpecifier specifier) { + public void writeBaseSpecifiers(ICPPASTBaseSpecifier specifier) { switch (specifier.getVisibility()) { case ICPPASTBaseSpecifier.v_public: scribe.printStringSpace(Keywords.PUBLIC); @@ -294,6 +294,10 @@ public class DeclSpecWriter extends NodeWriter { scribe.printStringSpace(Keywords.PRIVATE); break; } + + if (specifier.isVirtual()) { + scribe.printStringSpace(Keywords.VIRTUAL); + } specifier.getName().accept(visitor); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java index bdd4d9e059a..50cf4385bd6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java @@ -40,6 +40,7 @@ import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTypeId; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; @@ -175,7 +176,25 @@ public class ChangeGenerator extends ASTVisitor { } return super.visit(declarator); } + + @Override + public int visit(ICPPASTBaseSpecifier baseSpecifier) { + handleInserts(baseSpecifier); + if (requiresRewrite(baseSpecifier)) { + handleReplace(baseSpecifier); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(baseSpecifier); + } + @Override + public int leave(ICPPASTBaseSpecifier baseSpecifier) { + if (!requiresRewrite(baseSpecifier)) { + handleAppends(baseSpecifier); + } + return super.leave(baseSpecifier); + } + @Override public int visit(IASTArrayModifier arrayModifier) { handleInserts(arrayModifier);