diff options
author | Sergey Prigogin | 2015-11-19 04:26:35 +0000 |
---|---|---|
committer | Sergey Prigogin | 2015-11-19 05:03:49 +0000 |
commit | f0bd13a754df8869a66cda2326d79f642585c339 (patch) | |
tree | 7021537ddfadf0ac190306f1784e650301334941 /core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter | |
parent | 49a9b0c3f6939e79278ed71bd1e4b8cd7620eb8d (diff) | |
download | org.eclipse.cdt-f0bd13a754df8869a66cda2326d79f642585c339.tar.gz org.eclipse.cdt-f0bd13a754df8869a66cda2326d79f642585c339.tar.xz org.eclipse.cdt-f0bd13a754df8869a66cda2326d79f642585c339.zip |
Bug 406462 - Allow designated initializers for C++
Change-Id: Iafadba03e6a54b679b4c10ea693a5f8a84ddf839
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.java | 45 |
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(); |