Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHansruedi Patzen2019-06-21 14:12:38 +0000
committerMarco Stornelli2019-06-26 17:54:04 +0000
commit608745bb7372bb6d6151d86d8421fb4501debba9 (patch)
tree89d9ed4fcf1965a00b460fe698d854bb2ea927be
parentc9554c4ed6d3c0380ef53b3125e918756707206f (diff)
downloadorg.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)
-rw-r--r--core/org.eclipse.cdt.core/META-INF/MANIFEST.MF2
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java22
-rw-r--r--core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java20
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();
+ }
}

Back to the top