From 518b582cd06a63d61f24c09d878e4773436a1cf7 Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Mon, 5 May 2008 14:39:04 +0000 Subject: [PATCH] Fix for 229774: Code Formatter makes invalid code for throw --- .../formatter/CodeFormatterVisitor.java | 28 ++++++++++++++++--- .../cdt/ui/tests/text/CodeFormatterTest.java | 10 +++++++ 2 files changed, 34 insertions(+), 4 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 13b98329e20..2394d93c9e9 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 @@ -129,7 +129,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; import org.eclipse.cdt.core.formatter.DefaultCodeFormatterConstants; -import org.eclipse.cdt.core.parser.IToken; import org.eclipse.cdt.internal.formatter.align.Alignment; import org.eclipse.cdt.internal.formatter.align.AlignmentException; import org.eclipse.cdt.internal.formatter.scanner.Scanner; @@ -1983,10 +1982,29 @@ public class CodeFormatterVisitor extends CPPASTVisitor { } operand.accept(this); break; + case IASTUnaryExpression.op_throw: + scribe.printNextToken(Token.t_throw, scribe.printComment()); + if (peekNextToken() != Token.tLPAREN) { + scribe.space(); + } + operand.accept(this); + break; + case IASTUnaryExpression.op_typeid: + scribe.printNextToken(Token.t_typeid, scribe.printComment()); + if (peekNextToken() != Token.tLPAREN) { + scribe.space(); + } + operand.accept(this); + break; + case IASTUnaryExpression.op_typeof: + case IASTUnaryExpression.op_alignOf: default: - scribe.printNextToken(peekNextToken(), preferences.insert_space_before_unary_operator); + int operatorToken= peekNextToken(); + scribe.printNextToken(operatorToken, preferences.insert_space_before_unary_operator); if (preferences.insert_space_after_unary_operator) { scribe.space(); + } else if (operatorToken == Token.tIDENTIFIER && peekNextToken() != Token.tLPAREN) { + scribe.space(); } operand.accept(this); break; @@ -2493,7 +2511,7 @@ public class CodeFormatterVisitor extends CPPASTVisitor { if (preferences.insert_space_after_closing_angle_bracket_in_template_arguments) { // avoid explicit space if followed by pointer operator int nextToken= peekNextToken(); - if (nextToken != IToken.tSTAR && nextToken != IToken.tAMPER) { + if (nextToken != Token.tSTAR && nextToken != Token.tAMPER) { scribe.space(); } } else { @@ -2509,7 +2527,9 @@ public class CodeFormatterVisitor extends CPPASTVisitor { scribe.printNextToken(Token.t_return); final IASTExpression expression = node.getReturnValue(); if (expression != null) { - scribe.space(); +// if (peekNextToken() != Token.tLPAREN) { + scribe.space(); +// } expression.accept(this); } // sometimes the return expression is null, when it should not 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 fe14f0012b9..7ec005fe15b 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 @@ -636,4 +636,14 @@ public class CodeFormatterTest extends BaseUITestCase { public void testPreserveWhitespaceInParameterDecl_Bug228997() throws Exception { assertFormatterResult(); } + + //void f() { throw 42; } + + //void f() { + // throw 42; + //} + public void testSpaceAfterThrowKeyword_Bug229774() throws Exception { + assertFormatterResult(); + } + }