int (GrExpression expression) { if (expression == null) { return 0; } if (!isArithmetic(expression)) { return 1; } if (expression instanceof GrBinaryExpression binaryExpression) { final GrExpression lhs = binaryExpression.getLeftOperand(); final GrExpression rhs = binaryExpression.getRightOperand(); return countTerms(lhs) + countTerms(rhs); } else if (expression instanceof GrUnaryExpression unaryExpression) { final GrExpression operand = unaryExpression.getOperand(); return countTerms(operand); } else if (expression instanceof GrParenthesizedExpression parenthesizedExpression) { final GrExpression contents = parenthesizedExpression.getOperand(); return countTerms(contents); } return 1; }