Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Prigogin2015-11-19 04:26:35 +0000
committerSergey Prigogin2015-11-19 05:03:49 +0000
commitf0bd13a754df8869a66cda2326d79f642585c339 (patch)
tree7021537ddfadf0ac190306f1784e650301334941 /core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter
parent49a9b0c3f6939e79278ed71bd1e4b8cd7620eb8d (diff)
downloadorg.eclipse.cdt-f0bd13a754df8869a66cda2326d79f642585c339.tar.gz
org.eclipse.cdt-f0bd13a754df8869a66cda2326d79f642585c339.tar.xz
org.eclipse.cdt-f0bd13a754df8869a66cda2326d79f642585c339.zip
Bug 406462 - Allow designated initializers for C++
Diffstat (limited to 'core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter')
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java45
1 files changed, 45 insertions, 0 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 f03dd5c0718..2deed2ea08f 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
@@ -111,6 +111,8 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDecltypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeleteExpression;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDesignatedInitializer;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDesignator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExplicitTemplateInstantiation;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFieldReference;
@@ -749,6 +751,8 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
visit((IASTInitializerList) node);
} else if (node instanceof ICASTDesignatedInitializer) {
visit((ICASTDesignatedInitializer) node);
+ } else if (node instanceof ICPPASTDesignatedInitializer) {
+ visit((ICPPASTDesignatedInitializer) node);
} else {
formatRaw(node);
}
@@ -2497,6 +2501,47 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
return PROCESS_SKIP;
}
+ private int visit(ICPPASTDesignatedInitializer node) {
+ scribe.printComment();
+ ICPPASTDesignator[] designators = node.getDesignators();
+ for (ICPPASTDesignator designator : designators) {
+ designator.accept(this);
+ if (scribe.printComment()) {
+ scribe.space();
+ }
+ }
+
+ if (peekNextToken() == Token.tASSIGN) {
+ scribe.printNextToken(Token.tASSIGN, preferences.insert_space_before_assignment_operator);
+ if (preferences.insert_space_after_assignment_operator) {
+ scribe.space();
+ }
+ }
+
+ Alignment expressionAlignment= scribe.createAlignment(
+ Alignment.DESIGNATED_INITIALIZER,
+ preferences.alignment_for_assignment,
+ 1,
+ getCurrentPosition());
+
+ scribe.enterAlignment(expressionAlignment);
+ boolean ok = false;
+ do {
+ try {
+ scribe.alignFragment(expressionAlignment, 0);
+
+ IASTInitializerClause initializer = node.getOperand();
+ initializer.accept(this);
+
+ ok = true;
+ } catch (AlignmentException e) {
+ scribe.redoAlignment(e);
+ }
+ } while (!ok);
+ scribe.exitAlignment(expressionAlignment, true);
+ return PROCESS_SKIP;
+ }
+
private int visit(IASTInitializerList node) {
scribe.printComment();

Back to the top