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 61dcd0e17bd..406bbf40390 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 @@ -22,6 +22,7 @@ import java.util.EmptyStackException; import java.util.Iterator; import java.util.List; import java.util.Stack; +import java.util.function.Predicate; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.ASTVisitor; @@ -1659,22 +1660,23 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, } private boolean skipConstVolatileRestrict(boolean spaceBefore) { - boolean skipped = false; - int token = peekNextToken(); - while (token == Token.t_const || token == Token.t_volatile || token == Token.t_restrict) { - scribe.printNextToken(token, spaceBefore); - token = peekNextToken(); - skipped = true; - } - return skipped; + return skipTokenWhile(token -> token == Token.t_const || token == Token.t_volatile || token == Token.t_restrict, + spaceBefore); } private boolean skipMutableConstexpr() { + return skipTokenWhile(token -> token == Token.t_mutable || token == Token.t_constexpr, true); + } + + private boolean skipTokenWhile(Predicate pred, boolean spaceBefore) { boolean skipped = false; int token = peekNextToken(); - while (token == Token.t_mutable || token == Token.t_constexpr) { - scribe.printNextToken(token, true); + while (pred.test(token)) { + scribe.printNextToken(token, spaceBefore); token = peekNextToken(); + if (!spaceBefore && pred.test(token)) { + scribe.space(); + } skipped = true; } return skipped; 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 903653c03d5..c21ebb187c5 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 @@ -4337,4 +4337,24 @@ public class CodeFormatterTest extends BaseUITestCase { public void testAssigmentWithInitList_Bug547684() throws Exception { assertFormatterResult(); } + + //void func(int *const volatile&p) { + //} + + //void func(int *const volatile&p) { + //} + public void testConstVolatileParam_Bug548512() throws Exception { + assertFormatterResult(); + } + + //struct Foo { + // int *const volatile&p; + //}; + + //struct Foo { + // int *const volatile&p; + //}; + public void testConstVolatileMember_Bug548512() throws Exception { + assertFormatterResult(); + } }