diff options
Diffstat (limited to 'core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java')
-rw-r--r-- | core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java | 693 |
1 files changed, 321 insertions, 372 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 f95cdeb8018..14321ad528a 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 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2012 Wind River Systems, Inc. and others. + * Copyright (c) 2006, 2013 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 @@ -645,11 +645,9 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, if (!enterNode(node)) { return PROCESS_SKIP; } - try { - return formatDeclaration(node); - } finally { - exitNode(node); - } + int result = formatDeclaration(node); + exitNode(node); + return result; } private int formatDeclaration(IASTDeclaration node) { @@ -703,17 +701,14 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, @Override public int visit(IASTName node) { if (!enterNode(node)) { return PROCESS_SKIP; } - try { - if (node instanceof ICPPASTQualifiedName) { - visit((ICPPASTQualifiedName) node); - } else if (node instanceof ICPPASTTemplateId) { - visit((ICPPASTTemplateId) node); - } else { - formatRaw(node); - } - } finally { - exitNode(node); + if (node instanceof ICPPASTQualifiedName) { + visit((ICPPASTQualifiedName) node); + } else if (node instanceof ICPPASTTemplateId) { + visit((ICPPASTTemplateId) node); + } else { + formatRaw(node); } + exitNode(node); return PROCESS_SKIP; } @@ -734,19 +729,16 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, } if (!enterNode(node)) { return PROCESS_SKIP; } - try { - if (node instanceof IASTEqualsInitializer) { - visit((IASTEqualsInitializer) node); - } else if (node instanceof IASTInitializerList) { - visit((IASTInitializerList) node); - } else if (node instanceof ICASTDesignatedInitializer) { - visit((ICASTDesignatedInitializer) node); - } else { - formatRaw(node); - } - } finally { - exitNode(node); + if (node instanceof IASTEqualsInitializer) { + visit((IASTEqualsInitializer) node); + } else if (node instanceof IASTInitializerList) { + visit((IASTInitializerList) node); + } else if (node instanceof ICASTDesignatedInitializer) { + visit((ICASTDesignatedInitializer) node); + } else { + formatRaw(node); } + exitNode(node); return PROCESS_SKIP; } @@ -756,24 +748,21 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, @Override public int visit(IASTParameterDeclaration node) { if (!enterNode(node)) { return PROCESS_SKIP; } - try { - // decl-specifier - final IASTDeclSpecifier declSpec= node.getDeclSpecifier(); - if (declSpec != null) { - declSpec.accept(this); - } - // declarator - final IASTDeclarator declarator= node.getDeclarator(); - if (declarator != null) { - boolean needSpace= declarator.getPointerOperators().length > 0 && scribe.printComment(); - if (needSpace) { - scribe.space(); - } - declarator.accept(this); + // decl-specifier + final IASTDeclSpecifier declSpec= node.getDeclSpecifier(); + if (declSpec != null) { + declSpec.accept(this); + } + // declarator + final IASTDeclarator declarator= node.getDeclarator(); + if (declarator != null) { + boolean needSpace= declarator.getPointerOperators().length > 0 && scribe.printComment(); + if (needSpace) { + scribe.space(); } - } finally { - exitNode(node); + declarator.accept(this); } + exitNode(node); return PROCESS_SKIP; } @@ -784,58 +773,55 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, public int visit(IASTDeclarator node) { if (!enterNode(node)) { return PROCESS_SKIP; } - try { - // Common to all declarators - final IASTPointerOperator[] pointerOperators= node.getPointerOperators(); - formatPointers(pointerOperators); - if (node instanceof IASTStandardFunctionDeclarator) { - if (preferences.insert_new_line_before_identifier_in_function_declaration) { - scribe.startNewLine(); - } else { - // Preserve newline if not explicitly requested - if (scribe.printCommentPreservingNewLines()) { - scribe.space(); - } + // Common to all declarators + final IASTPointerOperator[] pointerOperators= node.getPointerOperators(); + formatPointers(pointerOperators); + if (node instanceof IASTStandardFunctionDeclarator) { + if (preferences.insert_new_line_before_identifier_in_function_declaration) { + scribe.startNewLine(); + } else { + // Preserve newline if not explicitly requested + if (scribe.printCommentPreservingNewLines()) { + scribe.space(); } } - IASTName name= node.getName(); - IASTDeclarator nestedDecl= node.getNestedDeclarator(); - if (name != null && name.getSimpleID().length != 0 || nestedDecl != null) { - if (node.getPropertyInParent() != IASTDeclarator.NESTED_DECLARATOR && - isFirstDeclarator(node)) { - // Preserve non-space between pointer operator and name or nested declarator. - if (pointerOperators.length == 0 || scribe.printComment()) { - scribe.space(); - } + } + IASTName name= node.getName(); + IASTDeclarator nestedDecl= node.getNestedDeclarator(); + if (name != null && name.getSimpleID().length != 0 || nestedDecl != null) { + if (node.getPropertyInParent() != IASTDeclarator.NESTED_DECLARATOR && + isFirstDeclarator(node)) { + // Preserve non-space between pointer operator and name or nested declarator. + if (pointerOperators.length == 0 || scribe.printComment()) { + scribe.space(); } - if (name != null) - name.accept(this); - } - if (nestedDecl != null) { - scribe.printNextToken(Token.tLPAREN, false); - nestedDecl.accept(this); - scribe.printNextToken(Token.tRPAREN, false); } + if (name != null) + name.accept(this); + } + if (nestedDecl != null) { + scribe.printNextToken(Token.tLPAREN, false); + nestedDecl.accept(this); + scribe.printNextToken(Token.tRPAREN, false); + } - if (node instanceof ICPPASTFunctionDeclarator) { - return visit((ICPPASTFunctionDeclarator) node); - } else if (node instanceof IASTStandardFunctionDeclarator) { - visit((IASTStandardFunctionDeclarator) node); - } else if (node instanceof ICASTKnRFunctionDeclarator) { - visit((ICASTKnRFunctionDeclarator) node); - } else if (node instanceof IASTFieldDeclarator) { - visit((IASTFieldDeclarator) node); - } else if (node instanceof IASTArrayDeclarator) { - visit((IASTArrayDeclarator) node); - } + if (node instanceof ICPPASTFunctionDeclarator) { + return visit((ICPPASTFunctionDeclarator) node); + } else if (node instanceof IASTStandardFunctionDeclarator) { + visit((IASTStandardFunctionDeclarator) node); + } else if (node instanceof ICASTKnRFunctionDeclarator) { + visit((ICASTKnRFunctionDeclarator) node); + } else if (node instanceof IASTFieldDeclarator) { + visit((IASTFieldDeclarator) node); + } else if (node instanceof IASTArrayDeclarator) { + visit((IASTArrayDeclarator) node); + } - IASTInitializer initializer= node.getInitializer(); - if (initializer != null) { - initializer.accept(this); - } - } finally { - exitNode(node); + IASTInitializer initializer= node.getInitializer(); + if (initializer != null) { + initializer.accept(this); } + exitNode(node); return PROCESS_SKIP; } @@ -860,25 +846,22 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, @Override public int visit(IASTDeclSpecifier node) { if (!enterNode(node)) { return PROCESS_SKIP; } - try { - if (node instanceof ICPPASTCompositeTypeSpecifier) { - visit((ICPPASTCompositeTypeSpecifier) node); - } else if (node instanceof ICASTCompositeTypeSpecifier) { - visit((ICASTCompositeTypeSpecifier) node); - } else if (node instanceof IASTElaboratedTypeSpecifier) { - visit((IASTElaboratedTypeSpecifier) node); - } else if (node instanceof IASTEnumerationSpecifier) { - visit((IASTEnumerationSpecifier) node); - } else if (node instanceof IASTSimpleDeclSpecifier) { - visit((IASTSimpleDeclSpecifier) node); - } else if (node instanceof IASTNamedTypeSpecifier) { - visit((IASTNamedTypeSpecifier) node); - } else { - formatRaw(node); - } - } finally { - exitNode(node); + if (node instanceof ICPPASTCompositeTypeSpecifier) { + visit((ICPPASTCompositeTypeSpecifier) node); + } else if (node instanceof ICASTCompositeTypeSpecifier) { + visit((ICASTCompositeTypeSpecifier) node); + } else if (node instanceof IASTElaboratedTypeSpecifier) { + visit((IASTElaboratedTypeSpecifier) node); + } else if (node instanceof IASTEnumerationSpecifier) { + visit((IASTEnumerationSpecifier) node); + } else if (node instanceof IASTSimpleDeclSpecifier) { + visit((IASTSimpleDeclSpecifier) node); + } else if (node instanceof IASTNamedTypeSpecifier) { + visit((IASTNamedTypeSpecifier) node); + } else { + formatRaw(node); } + exitNode(node); return PROCESS_SKIP; } @@ -888,45 +871,42 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, @Override public int visit(IASTExpression node) { if (!enterNode(node)) { return PROCESS_SKIP; } - try { - if (node instanceof IASTArraySubscriptExpression) { - visit((IASTArraySubscriptExpression) node); - } else if (node instanceof IASTConditionalExpression) { - visit((IASTConditionalExpression) node); - } else if (node instanceof IASTFunctionCallExpression) { - visit((IASTFunctionCallExpression) node); - } else if (node instanceof IASTExpressionList) { - visit((IASTExpressionList) node); - } else if (node instanceof IASTTypeIdExpression) { - visit((IASTTypeIdExpression) node); - } else if (node instanceof IASTBinaryExpression) { - visit((IASTBinaryExpression) node); - } else if (node instanceof IASTLiteralExpression) { - visit((IASTLiteralExpression) node); - } else if (node instanceof IASTIdExpression) { - visit((IASTIdExpression) node); - } else if (node instanceof IASTCastExpression) { - visit((IASTCastExpression) node); - } else if (node instanceof IASTUnaryExpression) { - visit((IASTUnaryExpression) node); - } else if (node instanceof IASTFieldReference) { - visit((IASTFieldReference) node); - } else if (node instanceof IASTTypeIdInitializerExpression) { - visit((IASTTypeIdInitializerExpression) node); - } else if (node instanceof ICPPASTNewExpression) { - visit((ICPPASTNewExpression) node); - } else if (node instanceof ICPPASTDeleteExpression) { - visit((ICPPASTDeleteExpression) node); - } else if (node instanceof ICPPASTSimpleTypeConstructorExpression) { - visit((ICPPASTSimpleTypeConstructorExpression) node); - } else if (node instanceof IASTProblemExpression) { - visit((IASTProblemExpression) node); - } else { - formatRaw(node); - } - } finally { - exitNode(node); + if (node instanceof IASTArraySubscriptExpression) { + visit((IASTArraySubscriptExpression) node); + } else if (node instanceof IASTConditionalExpression) { + visit((IASTConditionalExpression) node); + } else if (node instanceof IASTFunctionCallExpression) { + visit((IASTFunctionCallExpression) node); + } else if (node instanceof IASTExpressionList) { + visit((IASTExpressionList) node); + } else if (node instanceof IASTTypeIdExpression) { + visit((IASTTypeIdExpression) node); + } else if (node instanceof IASTBinaryExpression) { + visit((IASTBinaryExpression) node); + } else if (node instanceof IASTLiteralExpression) { + visit((IASTLiteralExpression) node); + } else if (node instanceof IASTIdExpression) { + visit((IASTIdExpression) node); + } else if (node instanceof IASTCastExpression) { + visit((IASTCastExpression) node); + } else if (node instanceof IASTUnaryExpression) { + visit((IASTUnaryExpression) node); + } else if (node instanceof IASTFieldReference) { + visit((IASTFieldReference) node); + } else if (node instanceof IASTTypeIdInitializerExpression) { + visit((IASTTypeIdInitializerExpression) node); + } else if (node instanceof ICPPASTNewExpression) { + visit((ICPPASTNewExpression) node); + } else if (node instanceof ICPPASTDeleteExpression) { + visit((ICPPASTDeleteExpression) node); + } else if (node instanceof ICPPASTSimpleTypeConstructorExpression) { + visit((ICPPASTSimpleTypeConstructorExpression) node); + } else if (node instanceof IASTProblemExpression) { + visit((IASTProblemExpression) node); + } else { + formatRaw(node); } + exitNode(node); return PROCESS_SKIP; } @@ -982,6 +962,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, } else { formatRaw(node); } + exitNode(node); } catch (ASTProblemException e) { if (node instanceof IASTProblemStatement) { throw e; @@ -991,7 +972,6 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, scribe.unIndent(); } } - } finally { exitNode(node); } return PROCESS_SKIP; @@ -1003,27 +983,24 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, @Override public int visit(IASTTypeId node) { if (!enterNode(node)) { return PROCESS_SKIP; } - try { - if (node instanceof IASTProblemHolder) { - throw new ASTProblemException(((IASTProblemHolder) node).getProblem()); - } - // decl-specifier - final IASTDeclSpecifier declSpec= node.getDeclSpecifier(); - if (declSpec != null) { - declSpec.accept(this); - } - // declarator - final IASTDeclarator declarator= node.getAbstractDeclarator(); - if (declarator != null) { - boolean needSpace= declarator.getPointerOperators().length > 0 && scribe.printComment(); - if (needSpace) { - scribe.space(); - } - declarator.accept(this); + if (node instanceof IASTProblemHolder) { + throw new ASTProblemException(((IASTProblemHolder) node).getProblem()); + } + // decl-specifier + final IASTDeclSpecifier declSpec= node.getDeclSpecifier(); + if (declSpec != null) { + declSpec.accept(this); + } + // declarator + final IASTDeclarator declarator= node.getAbstractDeclarator(); + if (declarator != null) { + boolean needSpace= declarator.getPointerOperators().length > 0 && scribe.printComment(); + if (needSpace) { + scribe.space(); } - } finally { - exitNode(node); + declarator.accept(this); } + exitNode(node); return PROCESS_SKIP; } @@ -1033,22 +1010,19 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, @Override public int visit(IASTEnumerator enumerator) { if (!enterNode(enumerator)) { return PROCESS_SKIP; } - try { - // name - enumerator.getName().accept(this); - - // optional value assignment - final IASTExpression value= enumerator.getValue(); - if (value != null) { - scribe.printNextToken(Token.tASSIGN, preferences.insert_space_before_assignment_operator); - if (preferences.insert_space_after_assignment_operator) { - scribe.space(); - } - value.accept(this); + // name + enumerator.getName().accept(this); + + // optional value assignment + final IASTExpression value= enumerator.getValue(); + if (value != null) { + scribe.printNextToken(Token.tASSIGN, preferences.insert_space_before_assignment_operator); + if (preferences.insert_space_after_assignment_operator) { + scribe.space(); } - } finally { - exitNode(enumerator); + value.accept(this); } + exitNode(enumerator); return PROCESS_SKIP; } @@ -1058,29 +1032,26 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, @Override public int visit(ICPPASTBaseSpecifier specifier) { if (!enterNode(specifier)) { return PROCESS_SKIP; } - try { - boolean needSpace= false; - loop: while (true) { - int token= peekNextToken(); - switch (token) { - case Token.t_public: - case Token.t_protected: - case Token.t_private: - case Token.t_virtual: - scribe.printNextToken(token, needSpace); - needSpace= true; - break; - default: - break loop; - } - } - if (needSpace) { - scribe.space(); + boolean needSpace= false; + loop: while (true) { + int token= peekNextToken(); + switch (token) { + case Token.t_public: + case Token.t_protected: + case Token.t_private: + case Token.t_virtual: + scribe.printNextToken(token, needSpace); + needSpace= true; + break; + default: + break loop; } - specifier.getName().accept(this); - } finally { - exitNode(specifier); } + if (needSpace) { + scribe.space(); + } + specifier.getName().accept(this); + exitNode(specifier); return PROCESS_SKIP; } @@ -1090,29 +1061,26 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, @Override public int visit(ICPPASTNamespaceDefinition node) { if (!enterNode(node)) { return PROCESS_SKIP; } - try { - final int line= scribe.line; - // namespace <name> - scribe.printNextToken(Token.t_namespace, false); - scribe.space(); - node.getName().accept(this); + final int line= scribe.line; + // namespace <name> + scribe.printNextToken(Token.t_namespace, false); + scribe.space(); + node.getName().accept(this); - // member declarations - IASTDeclaration[] memberDecls= node.getDeclarations(); - formatLeftCurlyBrace(line, preferences.brace_position_for_namespace_declaration); - formatOpeningBrace(preferences.brace_position_for_namespace_declaration, preferences.insert_space_before_opening_brace_in_namespace_declaration); - if (preferences.indent_body_declarations_compare_to_namespace_header) { - scribe.indent(); - } - scribe.startNewLine(); - formatDeclarations(memberDecls, scribe.indentationLevel); - if (preferences.indent_body_declarations_compare_to_namespace_header) { - scribe.unIndent(); - } - formatClosingBrace(preferences.brace_position_for_namespace_declaration); - } finally { - exitNode(node); + // member declarations + IASTDeclaration[] memberDecls= node.getDeclarations(); + formatLeftCurlyBrace(line, preferences.brace_position_for_namespace_declaration); + formatOpeningBrace(preferences.brace_position_for_namespace_declaration, preferences.insert_space_before_opening_brace_in_namespace_declaration); + if (preferences.indent_body_declarations_compare_to_namespace_header) { + scribe.indent(); } + scribe.startNewLine(); + formatDeclarations(memberDecls, scribe.indentationLevel); + if (preferences.indent_body_declarations_compare_to_namespace_header) { + scribe.unIndent(); + } + formatClosingBrace(preferences.brace_position_for_namespace_declaration); + exitNode(node); return PROCESS_SKIP; } @@ -1222,9 +1190,9 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, } else { visit((IASTParameterDeclaration) node); } + exitNode(node); } catch (ASTProblemException e) { skipNode(node); - } finally { exitNode(node); } return PROCESS_SKIP; @@ -1292,12 +1260,9 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, private int visit(ICPPASTConstructorInitializer node) { if (!enterNode(node)) { return PROCESS_SKIP; } - try { - // Format like a function call - formatFunctionCallArguments(node.getArguments()); - } finally { - exitNode(node); - } + // Format like a function call + formatFunctionCallArguments(node.getArguments()); + exitNode(node); return PROCESS_SKIP; } @@ -1399,17 +1364,14 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, // Body if (bodyStmt instanceof IASTCompoundStatement) { if (enterNode(bodyStmt)) { - try { - if (getCurrentPosition() <= nodeOffset(bodyStmt)) { - formatLeftCurlyBrace(line, preferences.brace_position_for_method_declaration); - } - formatBlock((IASTCompoundStatement) bodyStmt, - preferences.brace_position_for_method_declaration, - preferences.insert_space_before_opening_brace_in_method_declaration, - preferences.indent_statements_compare_to_body); - } finally { - exitNode(bodyStmt); + if (getCurrentPosition() <= nodeOffset(bodyStmt)) { + formatLeftCurlyBrace(line, preferences.brace_position_for_method_declaration); } + formatBlock((IASTCompoundStatement) bodyStmt, + preferences.brace_position_for_method_declaration, + preferences.insert_space_before_opening_brace_in_method_declaration, + preferences.indent_statements_compare_to_body); + exitNode(bodyStmt); } } else if (bodyStmt != null) { bodyStmt.accept(this); @@ -1934,23 +1896,17 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, scribe.unIndent(); } if (enterNode(declaration)) { - try { - scribe.startNewLine(); - visit((ICPPASTVisibilityLabel) declaration); - scribe.startNewLine(); - } finally { - exitNode(declaration); - } + scribe.startNewLine(); + visit((ICPPASTVisibilityLabel) declaration); + scribe.startNewLine(); + exitNode(declaration); } } else { if (enterNode(declaration)) { - try { - if (getCurrentPosition() <= nodeOffset(declaration)) - scribe.startNewLine(); - formatDeclaration(declaration); - } finally { - exitNode(declaration); - } + if (getCurrentPosition() <= nodeOffset(declaration)) + scribe.startNewLine(); + formatDeclaration(declaration); + exitNode(declaration); } else { skipNode(declaration); } @@ -3262,17 +3218,14 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, if (body instanceof IASTCompoundStatement && !startsWithMacroExpansion(body)) { if (enterNode(body)) { - try { - if (getCurrentPosition() <= nodeOffset(body)) { - formatLeftCurlyBrace(line, preferences.brace_position_for_block); - } - formatBlock((IASTCompoundStatement) body, - preferences.brace_position_for_block, - preferences.insert_space_before_opening_brace_in_block, - preferences.indent_statements_compare_to_block); - } finally { - exitNode(body); + if (getCurrentPosition() <= nodeOffset(body)) { + formatLeftCurlyBrace(line, preferences.brace_position_for_block); } + formatBlock((IASTCompoundStatement) body, + preferences.brace_position_for_block, + preferences.insert_space_before_opening_brace_in_block, + preferences.indent_statements_compare_to_block); + exitNode(body); } } else { formatAction(line, body, preferences.brace_position_for_block); @@ -3618,132 +3571,129 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, statements= Collections.singletonList(bodyStmt); } if (!enterNode(bodyStmt)) { return PROCESS_SKIP; } - try { - final int statementsLength = statements.size(); - if (statementsLength != 0) { - boolean wasACase = false; - boolean wasAStatement = false; - for (int i = 0; i < statementsLength; i++) { - final IASTStatement statement = statements.get(i); - if (doNodeLocationsOverlap(controllerExpression, statement)) { - statement.accept(this); - continue; + final int statementsLength = statements.size(); + if (statementsLength != 0) { + boolean wasACase = false; + boolean wasAStatement = false; + for (int i = 0; i < statementsLength; i++) { + final IASTStatement statement = statements.get(i); + if (doNodeLocationsOverlap(controllerExpression, statement)) { + statement.accept(this); + continue; + } + if (statement instanceof IASTCaseStatement || statement instanceof IASTDefaultStatement) { + if (wasACase) { + scribe.startNewLine(); + } + if ((wasACase || wasAStatement) && preferences.indent_switchstatements_compare_to_cases) { + scribe.unIndent(); + } + statement.accept(this); + scribe.printTrailingComment(); + wasACase = true; + wasAStatement = false; + if (preferences.indent_switchstatements_compare_to_cases) { + scribe.indent(); } - if (statement instanceof IASTCaseStatement || statement instanceof IASTDefaultStatement) { - if (wasACase) { - scribe.startNewLine(); + } else if (statement instanceof IASTBreakStatement) { + if (preferences.indent_breaks_compare_to_cases) { + if (!preferences.indent_switchstatements_compare_to_cases) { + scribe.indent(); } + } else { if ((wasACase || wasAStatement) && preferences.indent_switchstatements_compare_to_cases) { scribe.unIndent(); } - statement.accept(this); - scribe.printTrailingComment(); - wasACase = true; - wasAStatement = false; + } + if (wasACase) { + scribe.startNewLine(); + } + statement.accept(this); + if (preferences.indent_breaks_compare_to_cases) { + if (!preferences.indent_switchstatements_compare_to_cases) { + scribe.unIndent(); + } + } else if (preferences.indent_switchstatements_compare_to_cases) { + scribe.indent(); + } + wasACase = false; + wasAStatement = true; + } else if (statement instanceof IASTCompoundStatement && !startsWithMacroExpansion(statement)) { + String bracePosition; + if (wasACase) { if (preferences.indent_switchstatements_compare_to_cases) { - scribe.indent(); + scribe.unIndent(); } - } else if (statement instanceof IASTBreakStatement) { - if (preferences.indent_breaks_compare_to_cases) { - if (!preferences.indent_switchstatements_compare_to_cases) { - scribe.indent(); - } - } else { - if ((wasACase || wasAStatement) && preferences.indent_switchstatements_compare_to_cases) { - scribe.unIndent(); + bracePosition = preferences.brace_position_for_block_in_case; + try { + enterNode(statement); + formatBlock((IASTCompoundStatement) statement, bracePosition, + preferences.insert_space_after_colon_in_case, + preferences.indent_statements_compare_to_block); + exitNode(statement); + } catch (ASTProblemException e) { + if (i < statementsLength - 1) { + final IASTStatement nextStatement= statements.get(i + 1); + skipToNode(nextStatement); } + exitNode(statement); } - if (wasACase) { - scribe.startNewLine(); - } - statement.accept(this); - if (preferences.indent_breaks_compare_to_cases) { - if (!preferences.indent_switchstatements_compare_to_cases) { - scribe.unIndent(); - } - } else if (preferences.indent_switchstatements_compare_to_cases) { + if (preferences.indent_switchstatements_compare_to_cases) { scribe.indent(); } - wasACase = false; - wasAStatement = true; - } else if (statement instanceof IASTCompoundStatement && !startsWithMacroExpansion(statement)) { - String bracePosition; - if (wasACase) { - if (preferences.indent_switchstatements_compare_to_cases) { - scribe.unIndent(); - } - bracePosition = preferences.brace_position_for_block_in_case; - try { - enterNode(statement); - formatBlock((IASTCompoundStatement) statement, bracePosition, - preferences.insert_space_after_colon_in_case, - preferences.indent_statements_compare_to_block); - } catch (ASTProblemException e) { - if (i < statementsLength - 1) { - final IASTStatement nextStatement= statements.get(i + 1); - skipToNode(nextStatement); - } - } finally { - exitNode(statement); - } - if (preferences.indent_switchstatements_compare_to_cases) { - scribe.indent(); - } - } else { - bracePosition = preferences.brace_position_for_block; - try { - enterNode(statement); - formatBlock((IASTCompoundStatement) statement, bracePosition, - preferences.insert_space_before_opening_brace_in_block, - preferences.indent_statements_compare_to_block); - } catch (ASTProblemException e) { - if (i < statementsLength - 1) { - final IASTStatement nextStatement= statements.get(i + 1); - skipToNode(nextStatement); - } - } finally { - exitNode(statement); - } - } - wasAStatement = true; - wasACase = false; } else { - scribe.startNewLine(); + bracePosition = preferences.brace_position_for_block; try { - statement.accept(this); + enterNode(statement); + formatBlock((IASTCompoundStatement) statement, bracePosition, + preferences.insert_space_before_opening_brace_in_block, + preferences.indent_statements_compare_to_block); + exitNode(statement); } catch (ASTProblemException e) { if (i < statementsLength - 1) { final IASTStatement nextStatement= statements.get(i + 1); skipToNode(nextStatement); } + exitNode(statement); } - wasAStatement = true; - wasACase = false; } - if (!wasACase) { - scribe.startNewLine(); + wasAStatement = true; + wasACase = false; + } else { + scribe.startNewLine(); + try { + statement.accept(this); + } catch (ASTProblemException e) { + if (i < statementsLength - 1) { + final IASTStatement nextStatement= statements.get(i + 1); + skipToNode(nextStatement); + } } - scribe.printComment(); + wasAStatement = true; + wasACase = false; } - if ((wasACase || wasAStatement) && preferences.indent_switchstatements_compare_to_cases) { - scribe.unIndent(); + if (!wasACase) { + scribe.startNewLine(); } + scribe.printComment(); } + if ((wasACase || wasAStatement) && preferences.indent_switchstatements_compare_to_cases) { + scribe.unIndent(); + } + } - if (!startsWithMacroExpansion(bodyStmt)) { - if (preferences.indent_switchstatements_compare_to_switch) { - scribe.unIndent(); - } - if (scribe.numberOfIndentations < braceIndent) { - scribe.indent(); - } - scribe.startNewLine(); - - formatClosingBrace(brace_position); + if (!startsWithMacroExpansion(bodyStmt)) { + if (preferences.indent_switchstatements_compare_to_switch) { + scribe.unIndent(); } - } finally { - exitNode(bodyStmt); + if (scribe.numberOfIndentations < braceIndent) { + scribe.indent(); + } + scribe.startNewLine(); + + formatClosingBrace(brace_position); } + exitNode(bodyStmt); return PROCESS_SKIP; } @@ -3816,14 +3766,16 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, return false; IASTNodeLocation[] locations= node.getNodeLocations(); if (locations.length == 0) { + return true; } else if (!fInsideMacroArguments && locations[0] instanceof IASTMacroExpansionLocation) { IASTMacroExpansionLocation location = (IASTMacroExpansionLocation) locations[0]; if (locations.length <= 2 && node instanceof IASTStatement) { IASTPreprocessorMacroExpansion macroExpansion = location.getExpansion(); IASTFileLocation macroLocation = macroExpansion.getFileLocation(); - if (macroLocation.getNodeOffset() >= currentPosition && - !scribe.shouldSkip(macroLocation.getNodeOffset()) && - (nodeEndOffset == macroLocation.getNodeOffset() + macroLocation.getNodeLength() || + int macroOffset = macroLocation.getNodeOffset(); + if (macroOffset >= currentPosition && + !scribe.shouldSkip(macroOffset) && + (nodeEndOffset == macroOffset + macroLocation.getNodeLength() || locations.length == 2 && isSemicolonLocation(locations[1])) && isFunctionStyleMacroExpansion(macroExpansion)) { if (locations.length == 2 && isSemicolonLocation(locations[1])) { @@ -3844,7 +3796,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, continueNode(node.getParent()); return false; } - } else { + } else if (nodeLocation != null) { scribe.restartAtOffset(nodeLocation.getNodeOffset()); } return true; @@ -3995,13 +3947,10 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, if (stmt instanceof IASTCompoundStatement && !startsWithMacroExpansion(stmt)) { formatLeftCurlyBrace(line, brace_position); if (enterNode(stmt)) { - try { - formatBlock((IASTCompoundStatement) stmt, brace_position, - preferences.insert_space_before_opening_brace_in_block, - preferences.indent_statements_compare_to_block); - } finally { - exitNode(stmt); - } + formatBlock((IASTCompoundStatement) stmt, brace_position, + preferences.insert_space_before_opening_brace_in_block, + preferences.indent_statements_compare_to_block); + exitNode(stmt); } } else if (stmt instanceof IASTNullStatement) { scribe.indent(); |