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