diff --git a/src/main/java/com/google/api/generator/engine/ast/ExprStatement.java b/src/main/java/com/google/api/generator/engine/ast/ExprStatement.java index 9aeec6003e..7749da18cc 100644 --- a/src/main/java/com/google/api/generator/engine/ast/ExprStatement.java +++ b/src/main/java/com/google/api/generator/engine/ast/ExprStatement.java @@ -53,9 +53,11 @@ public ExprStatement build() { || (expr instanceof ReferenceConstructorExpr) || (expr instanceof AssignmentExpr) || (expr instanceof ThrowExpr) - || (expr instanceof ReturnExpr), + || (expr instanceof ReturnExpr) + || (expr instanceof UnaryOperationExpr + && ((UnaryOperationExpr) expr).isPostfixIncrement()), "Expression statements must be either a method invocation, assignment, throw, " - + "this/super constructor, or return expression"); + + "this/super constructor, return, or unary post-fix operation expression"); } return exprStatement; } diff --git a/src/main/java/com/google/api/generator/engine/ast/UnaryOperationExpr.java b/src/main/java/com/google/api/generator/engine/ast/UnaryOperationExpr.java index 23af8c220c..f7d65af381 100644 --- a/src/main/java/com/google/api/generator/engine/ast/UnaryOperationExpr.java +++ b/src/main/java/com/google/api/generator/engine/ast/UnaryOperationExpr.java @@ -30,6 +30,10 @@ public void accept(AstNodeVisitor visitor) { visitor.visit(this); } + public boolean isPostfixIncrement() { + return operatorKind().equals(OperatorKind.UNARY_POST_INCREMENT); + } + public static UnaryOperationExpr postfixIncrementWithExpr(Expr expr) { return builder() .setExpr(expr) diff --git a/src/test/java/com/google/api/generator/engine/ast/ExprStatementTest.java b/src/test/java/com/google/api/generator/engine/ast/ExprStatementTest.java index 32a55fe8ad..b43adb5a3d 100644 --- a/src/test/java/com/google/api/generator/engine/ast/ExprStatementTest.java +++ b/src/test/java/com/google/api/generator/engine/ast/ExprStatementTest.java @@ -71,6 +71,14 @@ public void validExprStatement_return() { ReturnExpr.withExpr(ValueExpr.withValue(StringObjectValue.withValue("asdf")))); } + @Test + public void validExprStatement_unaryOperation() { + assertValidExprStatement( + UnaryOperationExpr.postfixIncrementWithExpr( + VariableExpr.withVariable( + Variable.builder().setType(TypeNode.INT).setName("i").build()))); + } + @Test public void invalidExprStatement_variable() { Variable variable = Variable.builder().setType(TypeNode.INT).setName("libraryClient").build(); @@ -85,6 +93,15 @@ public void invalidExprStatement_value() { assertInvalidExprStatement(valueExpr); } + @Test + public void invalidExprStatement_logicalNotUnaryOperator() { + Expr logicalNotExpr = + UnaryOperationExpr.logicalNotWithExpr( + VariableExpr.withVariable( + Variable.builder().setType(TypeNode.BOOLEAN).setName("foo").build())); + assertInvalidExprStatement(logicalNotExpr); + } + private static void assertInvalidExprStatement(Expr expr) { assertThrows( IllegalStateException.class,