diff options
author | Hansruedi Patzen | 2018-05-30 11:23:56 +0000 |
---|---|---|
committer | Thomas Corbat | 2018-06-15 06:53:27 +0000 |
commit | a9988957f653cf75d24b12180658f266d6dd9f16 (patch) | |
tree | 79679954f7557fa8c12d8c2a9313980e0c272db4 | |
parent | 3f98811f7326e0eb94c745489985183e4bec2d7a (diff) | |
download | org.eclipse.cdt-a9988957f653cf75d24b12180658f266d6dd9f16.tar.gz org.eclipse.cdt-a9988957f653cf75d24b12180658f266d6dd9f16.tar.xz org.eclipse.cdt-a9988957f653cf75d24b12180658f266d6dd9f16.zip |
Bug 535331: Rewriting sizeof...() drops the parenthesis
Fix and test.
Change-Id: If54f24d833724f3c51ae0b6e7f325493e5110719
Signed-off-by: Hansruedi Patzen <hansruedi.patzen@hsr.ch>
Signed-off-by: Thomas Corbat <tcorbat@hsr.ch>
4 files changed, 29 insertions, 5 deletions
diff --git a/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterExpressionTestSource.awts b/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterExpressionTestSource.awts index 0ca5a850e6a..03e210bec9e 100644 --- a/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterExpressionTestSource.awts +++ b/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterExpressionTestSource.awts @@ -241,3 +241,12 @@ struct S ; } }; + +//!Operator sizeofParameterPack +//%CPP +template<typename... T> +void f(T... a) +{ + if (sizeof...(a)){ + } +}
\ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java index eec6ecfe326..26748d7efc0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java @@ -71,7 +71,7 @@ public class ExpressionWriter extends NodeWriter{ private static final String TYPEID_OP = "typeid ("; //$NON-NLS-1$ private static final String OPEN_BRACKET_OP = "("; //$NON-NLS-1$ private static final String SIZEOF_OP = "sizeof "; //$NON-NLS-1$ - private static final String SIZEOF_PARAMETER_PACK_OP = "sizeof..."; //$NON-NLS-1$ + private static final String SIZEOF_PARAMETER_PACK_OP = "sizeof...("; //$NON-NLS-1$ private static final String NOEXCEPT_OP = "noexcept ("; //$NON-NLS-1$ private static final String NOT_OP = "!"; //$NON-NLS-1$ private static final String TILDE_OP = "~"; //$NON-NLS-1$ @@ -274,6 +274,7 @@ public class ExpressionWriter extends NodeWriter{ case ICPPASTUnaryExpression.op_typeid: case ICPPASTUnaryExpression.op_noexcept: case IASTUnaryExpression.op_alignOf: + case IASTUnaryExpression.op_sizeofParameterPack: return true; default: @@ -333,6 +334,7 @@ public class ExpressionWriter extends NodeWriter{ case ICPPASTUnaryExpression.op_noexcept: case IASTUnaryExpression.op_bracketedPrimary: case IASTUnaryExpression.op_alignOf: + case IASTUnaryExpression.op_sizeofParameterPack: return CLOSING_BRACKET_OP; default: System.err.println("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$ @@ -519,7 +521,7 @@ public class ExpressionWriter extends NodeWriter{ case IASTTypeIdExpression.op_typeof: return TYPEOF_OP; case IASTTypeIdExpression.op_sizeofParameterPack: - return SIZEOF_PARAMETER_PACK_OP + "("; //$NON-NLS-1$ + return SIZEOF_PARAMETER_PACK_OP; } throw new IllegalArgumentException("Unknown TypeId Type"); //$NON-NLS-1$ } 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 f5947591368..a38417f8b11 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 @@ -2669,9 +2669,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor, case IASTUnaryExpression.op_sizeofParameterPack: scribe.printNextToken(Token.t_sizeof, scribe.printComment()); scribe.printNextToken(Token.tELIPSE, scribe.printComment()); - if (peekNextToken() != Token.tLPAREN) { - scribe.space(); - } + scribe.printNextToken(Token.tLPAREN); operand.accept(this); break; case IASTUnaryExpression.op_throw: 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 f98eecadcda..405575896c0 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 @@ -3405,4 +3405,19 @@ public class CodeFormatterTest extends BaseUITestCase { public void testFormatAttributedLabelStatements_Bug535266() throws Exception { assertFormatterResult(); } + + //template<typename ... T> + //void f(T ... a) { + // if (sizeof...(a)) { + // } + //} + + //template<typename ... T> + //void f(T ... a) { + // if (sizeof...(a)) { + // } + //} + public void testIndendtionSizeofParampack_535331() throws Exception { + assertFormatterResult(); + } } |