diff options
2 files changed, 22 insertions, 3 deletions
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java index e3e3b2ee517..4977b9aff1f 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.Stack; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.ast.ExpansionOverlapsBoundaryException; import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; @@ -129,6 +130,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; import org.eclipse.cdt.core.formatter.DefaultCodeFormatterConstants; +import org.eclipse.cdt.core.parser.IToken; import org.eclipse.cdt.internal.formatter.align.Alignment; import org.eclipse.cdt.internal.formatter.align.AlignmentException; import org.eclipse.cdt.internal.formatter.scanner.Scanner; @@ -1450,9 +1452,16 @@ public class CodeFormatterVisitor extends CPPASTVisitor { // base specifiers final List<ICPPASTBaseSpecifier> baseSpecifiers= Arrays.asList(node.getBaseSpecifiers()); if (baseSpecifiers.size() > 0) { - scribe.printNextToken(Token.tCOLON, preferences.insert_space_before_colon_in_base_clause); - if (preferences.insert_space_after_colon_in_base_clause) { - scribe.space(); + ICPPASTBaseSpecifier baseSpecifier = baseSpecifiers.get(0); + try { + if (baseSpecifier.getLeadingSyntax().getType() == IToken.tCOLON) { + scribe.printNextToken(Token.tCOLON, preferences.insert_space_before_colon_in_base_clause); + if (preferences.insert_space_after_colon_in_base_clause) { + scribe.space(); + } + } + } catch (UnsupportedOperationException exc) { + } catch (ExpansionOverlapsBoundaryException exc) { } final ListAlignment align= new ListAlignment(preferences.alignment_for_base_clause_in_type_declaration); align.fSpaceAfterComma= preferences.insert_space_after_comma_in_base_types; diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java index 8ee066b26f8..68feb712ea5 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java @@ -1240,4 +1240,14 @@ public class CodeFormatterTest extends BaseUITestCase { assertFormatterResult(); } + //#define MACRO(a) class b : public a + //MACRO(aClass){ int a;}; + + //#define MACRO(a) class b : public a + //MACRO(aClass) { + // int a; + //}; + public void testCompositeTypeSpecAsMacro_Bug298592() throws Exception { + assertFormatterResult(); + } } |