diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java index 17c18f1e2b2..573f3c97ea5 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java @@ -114,7 +114,7 @@ public class DefaultCodeFormatterConstants { * FORMATTER / Option for alignment of assignment * - option id: "org.eclipse.cdt.core.formatter.alignment_for_assignment" * - possible values: values returned by createAlignmentValue(boolean, int, int) call - * - default: createAlignmentValue(false, M_NO_ALIGNMENT, INDENT_DEFAULT) + * - default: createAlignmentValue(false, WRAP_COMPACT, INDENT_DEFAULT) * * @see #createAlignmentValue(boolean, int, int) * @since 5.3 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 9a6a33ba7af..decb426ab35 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 @@ -169,18 +169,19 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, } private static class ListOptions { - public final int fMode; - public boolean fSpaceBeforeComma; - public boolean fSpaceAfterComma= true; - public boolean fSpaceAfterOpeningParen; - public boolean fSpaceBeforeClosingParen; - public boolean fSpaceBetweenEmptyParen; - public boolean fSpaceBeforeOpeningParen; - public int fContinuationIndentation= -1; - public int fTieBreakRule = Alignment.R_INNERMOST; + final int fMode; + boolean fUseFallbackMode; + boolean fSpaceBeforeComma; + boolean fSpaceAfterComma = true; + boolean fSpaceAfterOpeningParen; + boolean fSpaceBeforeClosingParen; + boolean fSpaceBetweenEmptyParen; + boolean fSpaceBeforeOpeningParen; + int fContinuationIndentation = -1; + int fTieBreakRule = Alignment.R_INNERMOST; - public ListOptions(int mode) { - fMode= mode; + ListOptions(int mode) { + this.fMode = mode; } } @@ -1339,7 +1340,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, private int visit(ICPPASTFunctionDeclarator node) { final List parameters = Arrays.asList(node.getParameters()); - final ListOptions options = createListOptionsForFunctionParameters(); + final ListOptions options = createListOptionsForFunctionDeclarationParameters(); formatList(parameters, options, true, node.takesVarArgs(), new CPPFunctionDeclaratorTailFormatter(node, scribe.getTailFormatter())); @@ -1416,13 +1417,14 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, private int visit(IASTStandardFunctionDeclarator node) { final List parameters = Arrays.asList(node.getParameters()); - final ListOptions options = createListOptionsForFunctionParameters(); + final ListOptions options = createListOptionsForFunctionDeclarationParameters(); formatList(parameters, options, true, node.takesVarArgs(), new TrailingSemicolonFormatter(node)); return PROCESS_SKIP; } - private ListOptions createListOptionsForFunctionParameters() { + private ListOptions createListOptionsForFunctionDeclarationParameters() { final ListOptions options= new ListOptions(preferences.alignment_for_parameters_in_method_declaration); + options.fUseFallbackMode= true; options.fSpaceBeforeOpeningParen= preferences.insert_space_before_opening_paren_in_method_declaration; options.fSpaceAfterOpeningParen= preferences.insert_space_after_opening_paren_in_method_declaration; options.fSpaceBeforeClosingParen= preferences.insert_space_before_closing_paren_in_method_declaration; @@ -1484,12 +1486,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, private int visit(ICASTKnRFunctionDeclarator node) { final List parameters= Arrays.asList(node.getParameterNames()); - ListOptions options= new ListOptions(preferences.alignment_for_parameters_in_method_declaration); - options.fSpaceAfterOpeningParen= preferences.insert_space_after_opening_paren_in_method_declaration; - options.fSpaceBeforeClosingParen= preferences.insert_space_before_closing_paren_in_method_declaration; - options.fSpaceBetweenEmptyParen= preferences.insert_space_between_empty_parens_in_method_declaration; - options.fSpaceBeforeComma= preferences.insert_space_before_comma_in_method_declaration_parameters; - options.fSpaceAfterComma= preferences.insert_space_after_comma_in_method_declaration_parameters; + ListOptions options= createListOptionsForFunctionDeclarationParameters(); formatList(parameters, options, true, false, null); IASTDeclaration[] parameterDecls= node.getParameterDeclarations(); @@ -1567,12 +1564,22 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, scribe.space(); } } - final ListOptions options= new ListOptions(preferences.alignment_for_declarator_list); - options.fSpaceAfterComma= preferences.insert_space_after_comma_in_declarator_list; - options.fSpaceBeforeComma= preferences.insert_space_before_comma_in_declarator_list; Runnable tailFormatter = fExpectSemicolonAfterDeclaration ? new TrailingSemicolonFormatter(node) : null; - formatList(declarators, options, false, false, tailFormatter); + if (declarators.size() == 1) { + scribe.setTailFormatter(tailFormatter); + try { + visit(declarators.get(0)); + scribe.runTailFormatter(); + } finally { + scribe.setTailFormatter(null); + } + } else { + final ListOptions options= new ListOptions(preferences.alignment_for_declarator_list); + options.fSpaceAfterComma= preferences.insert_space_after_comma_in_declarator_list; + options.fSpaceBeforeComma= preferences.insert_space_before_comma_in_declarator_list; + formatList(declarators, options, false, false, tailFormatter); + } } return PROCESS_SKIP; } @@ -1963,66 +1970,106 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, if (options.fSpaceAfterOpeningParen) { scribe.space(); } - final int continuationIndentation= options.fContinuationIndentation >= 0 ? - options.fContinuationIndentation : preferences.continuation_indentation; - Alignment alignment = scribe.createAlignment( - Alignment.LIST_ELEMENTS_PREFIX + - (elements.isEmpty() ? "ellipsis" : elements.get(0).getClass().getSimpleName()), //$NON-NLS-1$ - options.fMode, - options.fTieBreakRule, - elementsLength + (addEllipsis ? 1 : 0), - scribe.scanner.getCurrentPosition(), - continuationIndentation, - false); - scribe.enterAlignment(alignment); - boolean ok = false; + Alignment retryAlignment = null; + + int fallbackMode = options.fUseFallbackMode ? + getFallbackAlignmentMode(options.fMode) : options.fMode; + if (fallbackMode != options.fMode) { + retryAlignment = scribe.createAlignment( + Alignment.LIST_FALLBACK_TRAP, + Alignment.M_ONE_PER_LINE_SPLIT, + Alignment.R_INNERMOST, + 1, + scribe.scanner.getCurrentPosition(), + 0, + false); + scribe.enterAlignment(retryAlignment); + } + boolean success = false; + int mode = options.fMode; do { + if (retryAlignment != null) + scribe.alignFragment(retryAlignment, 0); + try { - int i; - for (i = 0; i < elementsLength; i++) { - final IASTNode node= elements.get(i); - if (i < alignment.fragmentCount - 1) { - scribe.setTailFormatter( - new TrailingCommaFormatter(options.fSpaceBeforeComma, - options.fSpaceAfterComma)); - } else { - scribe.setTailFormatter(tailFormatter); - } - scribe.alignFragment(alignment, i); - if (node instanceof ICPPASTConstructorChainInitializer) { - // Constructor chain initializer is a special case. - visit((ICPPASTConstructorChainInitializer) node); - } else { - node.accept(this); - } - if (i < alignment.fragmentCount - 1) { + final int continuationIndentation= options.fContinuationIndentation >= 0 ? + options.fContinuationIndentation : preferences.continuation_indentation; + Alignment alignment = scribe.createAlignment( + Alignment.LIST_ELEMENTS_PREFIX + + (elements.isEmpty() ? "ellipsis" : elements.get(0).getClass().getSimpleName()), //$NON-NLS-1$ + mode, + options.fTieBreakRule, + elementsLength + (addEllipsis ? 1 : 0), + scribe.scanner.getCurrentPosition(), + continuationIndentation, + false); + scribe.enterAlignment(alignment); + boolean ok = false; + do { + try { + int i; + for (i = 0; i < elementsLength; i++) { + final IASTNode node= elements.get(i); + if (i < alignment.fragmentCount - 1) { + scribe.setTailFormatter( + new TrailingCommaFormatter(options.fSpaceBeforeComma, + options.fSpaceAfterComma)); + } else { + scribe.setTailFormatter(tailFormatter); + } + scribe.alignFragment(alignment, i); + if (node instanceof ICPPASTConstructorChainInitializer) { + // Constructor chain initializer is a special case. + visit((ICPPASTConstructorChainInitializer) node); + } else { + node.accept(this); + } + if (i < alignment.fragmentCount - 1) { + scribe.runTailFormatter(); + } + } + if (addEllipsis) { + if (i > 0) { + scribe.printNextToken(Token.tCOMMA, options.fSpaceBeforeComma); + scribe.printTrailingComment(); + } + scribe.alignFragment(alignment, i); + if (i > 0 && options.fSpaceAfterComma) { + scribe.space(); + } + scribe.printNextToken(Token.tELIPSE); + } scribe.runTailFormatter(); + ok = true; + } catch (AlignmentException e) { + scribe.redoAlignment(e); + } catch (ASTProblemException e) { } - } - if (addEllipsis) { - if (i > 0) { - scribe.printNextToken(Token.tCOMMA, options.fSpaceBeforeComma); - scribe.printTrailingComment(); - } - scribe.alignFragment(alignment, i); - if (i > 0 && options.fSpaceAfterComma) { - scribe.space(); - } - scribe.printNextToken(Token.tELIPSE); - } - scribe.runTailFormatter(); - ok = true; + } while (!ok); + scribe.exitAlignment(alignment, true); + success = true; } catch (AlignmentException e) { + if (retryAlignment == null) + throw e; scribe.redoAlignment(e); - } catch (ASTProblemException e) { } - } while (!ok); - scribe.exitAlignment(alignment, true); + mode = fallbackMode; + } while (!success); + if (retryAlignment != null) + scribe.exitAlignment(retryAlignment, true); } else if (tailFormatter != null) { tailFormatter.run(); } } + private int getFallbackAlignmentMode(int alignmentMode) { + switch (alignmentMode & Alignment.SPLIT_MASK) { + case Alignment.M_COMPACT_SPLIT: + alignmentMode = Alignment.M_COMPACT_FIRST_BREAK_SPLIT | (alignmentMode & ~Alignment.SPLIT_MASK); + } + return alignmentMode & ~Alignment.M_INDENT_ON_COLUMN; + } + private int visit(ICPPASTTryBlockStatement node) { scribe.printNextToken(Token.t_try, scribe.printComment()); final IASTStatement tryBody= node.getTryBody(); @@ -2176,6 +2223,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, expressions= Collections.emptyList(); } final ListOptions options= new ListOptions(preferences.alignment_for_arguments_in_method_invocation); + options.fUseFallbackMode= true; options.fSpaceBeforeOpeningParen= preferences.insert_space_before_opening_paren_in_method_invocation; options.fSpaceAfterOpeningParen= preferences.insert_space_after_opening_paren_in_method_invocation; options.fSpaceBeforeClosingParen= preferences.insert_space_before_closing_paren_in_method_invocation; @@ -2273,7 +2321,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, Alignment expressionAlignment= scribe.createAlignment( Alignment.DECLARATION_INITIALIZER, preferences.alignment_for_assignment, - Alignment.R_OUTERMOST, + Alignment.R_INNERMOST, 1, scribe.scanner.getCurrentPosition()); @@ -2851,6 +2899,15 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, final int line = scribe.line; scribe.printNextToken(Token.tLPAREN, preferences.insert_space_before_opening_paren_in_for); fInsideFor= true; + if (preferences.insert_space_after_opening_paren_in_for) { + scribe.space(); + } + IASTStatement initializerStmt= node.getInitializerStatement(); + initializerStmt.accept(this); + if (peekNextToken() == Token.tSEMI) { + scribe.printNextToken(Token.tSEMI, preferences.insert_space_before_semicolon_in_for); + } + Alignment alignment = scribe.createAlignment( Alignment.FOR, Alignment.M_COMPACT_SPLIT, @@ -2863,15 +2920,6 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, do { try { try { - if (preferences.insert_space_after_opening_paren_in_for) { - scribe.space(); - } - IASTStatement initializerStmt= node.getInitializerStatement(); - initializerStmt.accept(this); - if (peekNextToken() == Token.tSEMI) { - scribe.printNextToken(Token.tSEMI, preferences.insert_space_before_semicolon_in_for); - } - scribe.alignFragment(alignment, 0); final IASTExpression condition = node.getConditionExpression(); if (condition != null) { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/DefaultCodeFormatterOptions.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/DefaultCodeFormatterOptions.java index 111374a659f..7b54068706f 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/DefaultCodeFormatterOptions.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/DefaultCodeFormatterOptions.java @@ -496,9 +496,9 @@ public class DefaultCodeFormatterOptions { try { this.alignment_for_assignment = Integer.parseInt((String) alignmentForAssignmentOption); } catch (NumberFormatException e) { - this.alignment_for_assignment = Alignment.M_ONE_PER_LINE_SPLIT; + this.alignment_for_assignment = Alignment.M_COMPACT_SPLIT; } catch (ClassCastException e) { - this.alignment_for_assignment = Alignment.M_ONE_PER_LINE_SPLIT; + this.alignment_for_assignment = Alignment.M_COMPACT_SPLIT; } } final Object alignmentForBinaryExpressionOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_BINARY_EXPRESSION); @@ -1468,7 +1468,7 @@ public class DefaultCodeFormatterOptions { public void setDefaultSettings() { // this.alignment_for_arguments_in_allocation_expression = Alignment.M_COMPACT_SPLIT; this.alignment_for_arguments_in_method_invocation = Alignment.M_COMPACT_SPLIT; - this.alignment_for_assignment = Alignment.M_NO_ALIGNMENT; + this.alignment_for_assignment = Alignment.M_COMPACT_SPLIT; this.alignment_for_base_clause_in_type_declaration = Alignment.M_NEXT_PER_LINE_SPLIT; this.alignment_for_binary_expression = Alignment.M_COMPACT_SPLIT; this.alignment_for_compact_if = Alignment.M_COMPACT_SPLIT; diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/Scribe.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/Scribe.java index 530469fd1f1..35bb2a6d8c8 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/Scribe.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/Scribe.java @@ -242,23 +242,27 @@ public class Scribe { return createAlignment(name, mode, Alignment.R_INNERMOST, count, sourceRestart); } - public Alignment createAlignment(String name, int mode, int count, int sourceRestart, boolean adjust) { + public Alignment createAlignment(String name, int mode, int count, int sourceRestart, + boolean adjust) { return createAlignment(name, mode, Alignment.R_INNERMOST, count, sourceRestart, adjust); } - public Alignment createAlignment(String name, int mode, int tieBreakRule, int count, int sourceRestart) { + public Alignment createAlignment(String name, int mode, int tieBreakRule, int count, + int sourceRestart) { return createAlignment(name, mode, tieBreakRule, count, sourceRestart, preferences.continuation_indentation, false); } - public Alignment createAlignment(String name, int mode, int count, int sourceRestart, int continuationIndent, - boolean adjust) { - return createAlignment(name, mode, Alignment.R_INNERMOST, count, sourceRestart, continuationIndent, adjust); + public Alignment createAlignment(String name, int mode, int count, int sourceRestart, + int continuationIndent, boolean adjust) { + return createAlignment(name, mode, Alignment.R_INNERMOST, count, sourceRestart, + continuationIndent, adjust); } - public Alignment createAlignment(String name, int mode, int tieBreakRule, int count, int sourceRestart, - int continuationIndent, boolean adjust) { - Alignment alignment= new Alignment(name, mode, tieBreakRule, this, count, sourceRestart, continuationIndent); + public Alignment createAlignment(String name, int mode, int tieBreakRule, int count, + int sourceRestart, int continuationIndent, boolean adjust) { + Alignment alignment= new Alignment(name, mode, tieBreakRule, this, count, sourceRestart, + continuationIndent); // adjust break indentation if (adjust && memberAlignment != null) { Alignment current= memberAlignment; @@ -273,7 +277,8 @@ public class Scribe { if ((mode & Alignment.M_INDENT_BY_ONE) != 0) { alignment.breakIndentationLevel= indentationLevel + indentSize; } else { - alignment.breakIndentationLevel= indentationLevel + continuationIndent * indentSize; + alignment.breakIndentationLevel= indentationLevel + + continuationIndent * indentSize; } alignment.update(); break; @@ -281,8 +286,8 @@ public class Scribe { if ((mode & Alignment.M_INDENT_BY_ONE) != 0) { alignment.breakIndentationLevel= current.originalIndentationLevel + indentSize; } else { - alignment.breakIndentationLevel= current.originalIndentationLevel + continuationIndent - * indentSize; + alignment.breakIndentationLevel= current.originalIndentationLevel + + continuationIndent * indentSize; } alignment.update(); break; @@ -301,16 +306,18 @@ public class Scribe { if ((mode & Alignment.M_INDENT_BY_ONE) != 0) { alignment.breakIndentationLevel= indentationLevel + indentSize; } else { - alignment.breakIndentationLevel= indentationLevel + continuationIndent * indentSize; + alignment.breakIndentationLevel= indentationLevel + + continuationIndent * indentSize; } alignment.update(); break; case Alignment.CHUNK_FIELD: if ((mode & Alignment.M_INDENT_BY_ONE) != 0) { - alignment.breakIndentationLevel= current.originalIndentationLevel + indentSize; + alignment.breakIndentationLevel= current.originalIndentationLevel + + indentSize; } else { - alignment.breakIndentationLevel= current.originalIndentationLevel + continuationIndent - * indentSize; + alignment.breakIndentationLevel= current.originalIndentationLevel + + continuationIndent * indentSize; } alignment.update(); break; @@ -573,8 +580,8 @@ public class Scribe { } public void handleLineTooLong() { - // search for closest breakable alignment, using tiebreak rules - // look for outermost breakable one + // Search for closest breakable alignment, using tie break rules + // look for outermost breakable one. int relativeDepth= 0; int outerMostDepth= -1; Alignment targetAlignment= currentAlignment; @@ -588,7 +595,7 @@ public class Scribe { if (outerMostDepth >= 0) { throwAlignmentException(AlignmentException.LINE_TOO_LONG, outerMostDepth); } - // look for innermost breakable one + // Look for innermost breakable one relativeDepth= 0; targetAlignment= currentAlignment; while (targetAlignment != null) { @@ -598,7 +605,7 @@ public class Scribe { targetAlignment= targetAlignment.enclosing; relativeDepth++; } - // did not find any breakable location - proceed + // Did not find any breakable location - proceed } private void throwAlignmentException(int kind, int relativeDepth) { @@ -771,7 +778,8 @@ public class Scribe { switch (currentToken.type) { case Token.tLBRACE: { scanner.resetTo(scanner.getCurrentTokenStartPosition(), scannerEndPosition - 1); - formatOpeningBrace(preferences.brace_position_for_block, preferences.insert_space_before_opening_brace_in_block); + formatOpeningBrace(preferences.brace_position_for_block, + preferences.insert_space_before_opening_brace_in_block); if (preferences.indent_statements_compare_to_block) { indent(); } @@ -936,8 +944,9 @@ public class Scribe { if (isNewLine) { if (Character.isWhitespace((char) currentCharacter)) { int previousStartPosition= scanner.getCurrentPosition(); - while (currentCharacter != -1 && currentCharacter != '\r' && currentCharacter != '\n' - && Character.isWhitespace((char) currentCharacter)) { + while (currentCharacter != -1 && currentCharacter != '\r' && + currentCharacter != '\n' && + Character.isWhitespace((char) currentCharacter)) { previousStart= nextCharacterStart; previousStartPosition= scanner.getCurrentPosition(); currentCharacter= scanner.getNextChar(); @@ -984,7 +993,8 @@ public class Scribe { pendingSpace= false; int previousStart= currentTokenStartPosition; - while (nextCharacterStart <= currentTokenEndPosition && (currentCharacter= scanner.getNextChar()) != -1) { + while (nextCharacterStart <= currentTokenEndPosition && + (currentCharacter= scanner.getNextChar()) != -1) { nextCharacterStart= scanner.getCurrentPosition(); switch (currentCharacter) { @@ -1050,8 +1060,10 @@ public class Scribe { if (skipOverInactive) { Position inactivePos= getInactivePosAt(scanner.getCurrentTokenStartPosition()); if (inactivePos != null) { - int startOffset= Math.min(scanner.getCurrentTokenStartPosition(), inactivePos.getOffset()); - int endOffset= Math.min(scannerEndPosition, inactivePos.getOffset() + inactivePos.getLength()); + int startOffset= Math.min(scanner.getCurrentTokenStartPosition(), + inactivePos.getOffset()); + int endOffset= Math.min(scannerEndPosition, + inactivePos.getOffset() + inactivePos.getLength()); if (startOffset < endOffset) { int savedIndentLevel= indentationLevel; scanner.resetTo(scanner.getCurrentTokenStartPosition(), scanner.eofPosition - 1); @@ -1098,7 +1110,8 @@ public class Scribe { // to change the trailing flag. if (trailing == BASIC_TRAILING_COMMENT && hasLineComment) { int currentCommentIndentation = computeIndentation(whiteSpaces, 0); - int relativeIndentation = currentCommentIndentation - lastLineComment.currentIndentation; + int relativeIndentation = + currentCommentIndentation - lastLineComment.currentIndentation; if (tabLength == 0) { canChangeTrailing = relativeIndentation == 0; } else { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/align/Alignment.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/align/Alignment.java index 3d235df0b43..a120cd12fcb 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/align/Alignment.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/align/Alignment.java @@ -32,7 +32,8 @@ public class Alignment { public static final String FOR = "for"; //$NON-NLS-1$ public static final String MACRO_ARGUMENTS = "macroArguments"; //$NON-NLS-1$ public static final String LIST_ELEMENTS_PREFIX = "listElements_"; //$NON-NLS-1$ - + public static final String LIST_FALLBACK_TRAP = "listFallbackTrap"; //$NON-NLS-1$ + /** The name of the alignment */ public String name; @@ -173,7 +174,7 @@ public class Alignment { // indent broken fragments at next indentation level, based on current column this.breakIndentationLevel = this.scribe.getNextIndentationLevel(currentColumn); if (this.breakIndentationLevel == this.location.outputIndentationLevel) { - this.breakIndentationLevel += (continuationIndent * indentSize); + this.breakIndentationLevel += continuationIndent * indentSize; } } else if ((mode & M_INDENT_BY_ONE) != 0) { // indent broken fragments exactly one level deeper than current indentation @@ -318,8 +319,7 @@ public class Alignment { */ case M_NEXT_PER_LINE_SPLIT: if (this.fragmentBreaks[0] == NONE) { - if (this.fragmentCount > 1 - && this.fragmentBreaks[1] == NONE) { + if (this.fragmentCount > 1 && this.fragmentBreaks[1] == NONE) { if ((this.mode & M_INDENT_ON_COLUMN) != 0) { this.fragmentIndentations[0] = this.breakIndentationLevel; } diff --git a/core/org.eclipse.cdt.ui.tests/resources/formatter/templates/After.cpp b/core/org.eclipse.cdt.ui.tests/resources/formatter/templates/After.cpp index b3f9156faee..ef9a86282cd 100644 --- a/core/org.eclipse.cdt.ui.tests/resources/formatter/templates/After.cpp +++ b/core/org.eclipse.cdt.ui.tests/resources/formatter/templates/After.cpp @@ -65,8 +65,8 @@ template void Foo::fum(int i) { } // TEMPLATE_VARIABLES -template char - * default_alloc_template::S_start_free = 0; +template char* default_alloc_template::S_start_free = + 0; // an instantiation, not a template: complex cf(0, 0); 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 5d54c2b9182..493acbae9e6 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 @@ -227,8 +227,8 @@ public class CodeFormatterTest extends BaseUITestCase { // //void test() { // ClassWithALongName* variable_with_a_long_name; - // for (ClassWithALongName::Iterator - // iter_for_class_with_a_long_name = variable_with_a_long_name->getIterator(); + // for (ClassWithALongName::Iterator iter_for_class_with_a_long_name = + // variable_with_a_long_name->getIterator(); // !iter_for_class_with_a_long_name.isDone(); // iter_for_class_with_a_long_name.next()) { // } @@ -627,9 +627,8 @@ public class CodeFormatterTest extends BaseUITestCase { // //void test() { // ClassWithALongName* variable_with_a_long_name; - // ClassWithALongName* another_variable = - // variable_with_a_long_name->methodWithALongName() - // ->anotherMethodWithALongName(); + // ClassWithALongName* another_variable = variable_with_a_long_name + // ->methodWithALongName()->anotherMethodWithALongName(); //} public void testMemberAccess() throws Exception { fOptions.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, CCorePlugin.SPACE); @@ -969,8 +968,26 @@ public class CodeFormatterTest extends BaseUITestCase { // int very_looong_parameter_name); public void testFunctionDeclaration() throws Exception { fOptions.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, CCorePlugin.SPACE); - fOptions.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION, - Integer.toString(Alignment.M_NEXT_PER_LINE_SPLIT | Alignment.M_INDENT_ON_COLUMN)); + fOptions.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_METHOD_DECLARATION, + Integer.toString(Alignment.M_COMPACT_SPLIT | Alignment.M_INDENT_ON_COLUMN)); + assertFormatterResult(); + } + + //const char* function_name1(const char* parameter_name, const char* another_parameter_name, + //int very_loooooooooooooooooooooooong_parameter_name); + //const char* function_name2(const char* parameter_name, const char* another_parameter_name, + //int very_looooooooooooooooooooooooong_parameter_name); + + //const char* function_name1(const char* parameter_name, + // const char* another_parameter_name, + // int very_loooooooooooooooooooooooong_parameter_name); + //const char* function_name2( + // const char* parameter_name, const char* another_parameter_name, + // int very_looooooooooooooooooooooooong_parameter_name); + public void testFunctionDeclarationFallbackFormat() throws Exception { + fOptions.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, CCorePlugin.SPACE); + fOptions.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_METHOD_DECLARATION, + Integer.toString(Alignment.M_COMPACT_SPLIT | Alignment.M_INDENT_ON_COLUMN)); assertFormatterResult(); } @@ -984,8 +1001,8 @@ public class CodeFormatterTest extends BaseUITestCase { //} public void testFunctionDefinition() throws Exception { fOptions.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, CCorePlugin.SPACE); - fOptions.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION, - Integer.toString(Alignment.M_NEXT_PER_LINE_SPLIT | Alignment.M_INDENT_ON_COLUMN)); + fOptions.put(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_PARAMETERS_IN_METHOD_DECLARATION, + Integer.toString(Alignment.M_COMPACT_SPLIT | Alignment.M_INDENT_ON_COLUMN)); assertFormatterResult(); }