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 e874c69da42..835361b9bff 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 @@ -3384,15 +3384,13 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, } int nextToken= peekNextToken(); if (node.getPropertyInParent() != ICPPASTQualifiedName.SEGMENT_NAME || nextToken == Token.tGT) { - if (node.getParent().getPropertyInParent() == IASTFunctionCallExpression.FUNCTION_NAME && - preferences.insert_space_before_opening_paren_in_method_invocation) { - scribe.space(); - } else if (node.getParent().getPropertyInParent() != IASTFunctionCallExpression.FUNCTION_NAME && - preferences.insert_space_after_closing_angle_bracket_in_template_arguments) { - // Avoid explicit space if followed by '*' or '&'. - if (nextToken != Token.tSTAR && nextToken != Token.tAMPER) { + if (nextToken == Token.tLPAREN) { + if (preferences.insert_space_before_opening_paren_in_method_invocation) + scribe.space(); + } else if (preferences.insert_space_after_closing_angle_bracket_in_template_arguments) { + // Avoid explicit space if followed by '*' or '&'. + if (nextToken != Token.tSTAR && nextToken != Token.tAMPER) scribe.space(); - } } else { scribe.printComment(); scribe.needSpace= false; 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 c325333225d..51a7db485e2 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 @@ -1244,6 +1244,24 @@ public class CodeFormatterTest extends BaseUITestCase { assertFormatterResult(); } + //template + //class A { + //}; + // + //A a = new A (); + //A b = A (); + + //template + //class A { + //}; + // + //A a = new A(); + //A b = A(); + public void testTemplateConstructorCall() throws Exception { + fOptions.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, CCorePlugin.SPACE); + assertFormatterResult(); + } + //#define MY_MACRO int a; \ // int b; \ // int c();