From 6996d6d4784300d6304c640c5e7d30a511b80012 Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Mon, 20 Aug 2007 11:42:57 +0000 Subject: [PATCH] Fix for 197494: Code formatter has problems with macros that contain access keywords --- .../formatter/CodeFormatterVisitor.java | 29 ++++++++++++------- .../cdt/ui/tests/text/CodeFormatterTest.java | 18 ++++++++++++ 2 files changed, 36 insertions(+), 11 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 938149ff5be..ec4120f1d3a 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 @@ -1082,18 +1082,25 @@ public class CodeFormatterVisitor extends CPPASTVisitor { if (!preferences.indent_access_specifier_compare_to_type_header) { scribe.unIndent(); } - switch (node.getVisibility()) { - case ICPPASTVisiblityLabel.v_private: - scribe.printNextToken(Token.t_private, false); - break; - case ICPPASTVisiblityLabel.v_protected: - scribe.printNextToken(Token.t_protected, false); - break; - case ICPPASTVisiblityLabel.v_public: - scribe.printNextToken(Token.t_public, false); - break; + if (node.getNodeLocations()[0] instanceof IASTMacroExpansion) { + skipNode(node); + } else { + switch (node.getVisibility()) { + case ICPPASTVisiblityLabel.v_private: + scribe.printNextToken(Token.t_private, false); + break; + case ICPPASTVisiblityLabel.v_protected: + scribe.printNextToken(Token.t_protected, false); + break; + case ICPPASTVisiblityLabel.v_public: + scribe.printNextToken(Token.t_public, false); + break; + } + if (peekNextToken() != Token.tCOLON) { + scribe.skipToToken(Token.tCOLON); + } + scribe.printNextToken(Token.tCOLON, false/*preferences.insert_space_before_colon_in_visibility_label */); } - scribe.printNextToken(Token.tCOLON, false/*preferences.insert_space_before_colon_in_visibility_label */); if (!preferences.indent_access_specifier_compare_to_type_header) { scribe.indent(); } 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 3f6e8f5a80d..f5e758bb498 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 @@ -179,4 +179,22 @@ public class CodeFormatterTest extends BaseUITestCase { public void testForWithEmptyExpression_Bug195942() throws Exception { assertFormatterResult(); } + + //#define MY private: + // + //class ClassA + //{ + //MY ClassA() {} + //}; + + //#define MY private: + // + //class ClassA { + //MY + // ClassA() { + // } + //}; + public void testAccessSpecifierAsMacro_Bug197494() throws Exception { + assertFormatterResult(); + } }