diff options
author | Hansruedi Patzen | 2019-06-21 14:12:38 +0000 |
---|---|---|
committer | Marco Stornelli | 2019-06-26 17:54:04 +0000 |
commit | 608745bb7372bb6d6151d86d8421fb4501debba9 (patch) | |
tree | 89d9ed4fcf1965a00b460fe698d854bb2ea927be | |
parent | c9554c4ed6d3c0380ef53b3125e918756707206f (diff) | |
download | org.eclipse.cdt-608745bb7372bb6d6151d86d8421fb4501debba9.tar.gz org.eclipse.cdt-608745bb7372bb6d6151d86d8421fb4501debba9.tar.xz org.eclipse.cdt-608745bb7372bb6d6151d86d8421fb4501debba9.zip |
Bug 548512: Declarator formatting multiple keywords between pointers
Bugfix and removal of code duplication.
Change-Id: Id6a94c4cf59311f287b73e09019ddd323361fdc7
Signed-off-by: Hansruedi Patzen <hansruedi.patzen@hsr.ch>
(cherry picked from commit 9fe897881749cf5c622d205eba8953ce68986abd)
3 files changed, 33 insertions, 11 deletions
diff --git a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF index ea35f5b6e6c..5a821074b53 100644 --- a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.core; singleton:=true -Bundle-Version: 6.8.0.qualifier +Bundle-Version: 6.8.1.qualifier Bundle-Activator: org.eclipse.cdt.core.CCorePlugin Bundle-Vendor: %providerName Bundle-Localization: plugin 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<Integer> 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(); + } } |