1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-31 20:23:26 +02:00

Bug 333816 - [c++0x] Double right angle brackets formatting breaks indentation when mixed with comments

This commit is contained in:
Anton Leherbauer 2011-01-14 11:55:00 +00:00
parent 08de213b26
commit edd24cd3c5
2 changed files with 35 additions and 5 deletions

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2010 Wind River Systems, Inc. and others.
* Copyright (c) 2006, 2011 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -206,6 +206,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
private boolean fExpectSemicolonAfterDeclaration= true;
private MultiStatus fStatus;
private int fOpenAngleBrackets;
public CodeFormatterVisitor(DefaultCodeFormatterOptions preferences, int offset, int length) {
@ -941,7 +942,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_parameters;
formatList(Arrays.asList(templateParameters), align, false, false);
}
scribe.printNextToken(Token.tGT, preferences.insert_space_before_closing_angle_bracket_in_template_parameters);
scribe.printNextToken(new int[] { Token.tGT, Token.tSHIFTR }, preferences.insert_space_before_closing_angle_bracket_in_template_parameters);
if (preferences.insert_space_after_closing_angle_bracket_in_template_parameters) {
scribe.space();
}
@ -1314,7 +1315,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_parameters;
formatList(Arrays.asList(templateParameters), align, false, false);
}
scribe.printNextToken(Token.tGT, preferences.insert_space_before_closing_angle_bracket_in_template_parameters);
scribe.printNextToken(new int[] { Token.tGT, Token.tSHIFTR }, preferences.insert_space_before_closing_angle_bracket_in_template_parameters);
if (preferences.insert_space_after_closing_angle_bracket_in_template_parameters) {
scribe.space();
}
@ -2736,6 +2737,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
if (preferences.insert_space_after_opening_angle_bracket_in_template_arguments) {
scribe.space();
}
int angleBrackets = fOpenAngleBrackets++;
final IASTNode[] templateArguments= node.getTemplateArguments();
if (templateArguments.length > 0) {
final ListAlignment align= new ListAlignment(Alignment.M_COMPACT_SPLIT);
@ -2743,7 +2745,21 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_arguments;
formatList(Arrays.asList(templateArguments), align, false, false);
}
scribe.printNextToken(Token.tGT, preferences.insert_space_before_closing_angle_bracket_in_template_arguments);
if (peekNextToken() == Token.tSHIFTR) {
if (fOpenAngleBrackets == angleBrackets + 2) {
fOpenAngleBrackets -= 2;
scribe.printNextToken(Token.tSHIFTR, preferences.insert_space_before_closing_angle_bracket_in_template_arguments);
} else {
scribe.printComment();
if (preferences.insert_space_before_closing_angle_bracket_in_template_arguments) {
scribe.space();
}
return PROCESS_SKIP;
}
} else {
--fOpenAngleBrackets;
scribe.printNextToken(Token.tGT, preferences.insert_space_before_closing_angle_bracket_in_template_arguments);
}
int nextToken= peekNextToken();
if (node.getPropertyInParent() != ICPPASTQualifiedName.SEGMENT_NAME || nextToken == Token.tGT) {
if (preferences.insert_space_after_closing_angle_bracket_in_template_arguments) {

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2010 Wind River Systems, Inc. and others.
* Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -1538,4 +1538,18 @@ public class CodeFormatterTest extends BaseUITestCase {
assertFormatterResult();
}
//int main() {
// std::vector<std::vector<int>> test;
// // some comment
// return 0;
//}
//int main() {
// std::vector<std::vector<int>> test;
// // some comment
// return 0;
//}
public void testDoubleClosingAngleBrackets_Bug333816() throws Exception {
assertFormatterResult();
}
}