/// <summary>
        /// Creates a <see cref="UsingCSharpStatement"/> that represents a using or an await using statement.
        /// </summary>
        /// <param name="awaitInfo">The information required to await the DisposeAsync operation, or null if not asynchronous.</param>
        /// <param name="variables">The variables introduced by the statement.</param>
        /// <param name="declarations">The resources managed by the statement.</param>
        /// <param name="body">The body of the statement.</param>
        /// <param name="patternDispose">The (optional) lambda expression representing how to call the dispose method.</param>
        /// <returns>The created <see cref="UsingCSharpStatement"/>.</returns>
        public static UsingCSharpStatement Using(AwaitInfo awaitInfo, IEnumerable <ParameterExpression> variables, IEnumerable <LocalDeclaration> declarations, Expression body, LambdaExpression patternDispose)
        {
            RequiresNotNull(declarations, nameof(declarations));

            return(UsingCSharpStatement.Make(variables, resource: null, declarations, body, awaitInfo, patternDispose));
        }
        // NB: The Roslyn compiler binds to the overloads below.

        /// <summary>
        /// Creates a <see cref="UsingCSharpStatement"/> that represents a using or an await using statement.
        /// </summary>
        /// <param name="awaitInfo">The information required to await the DisposeAsync operation, or null if not asynchronous.</param>
        /// <param name="variables">The variables introduced by the statement.</param>
        /// <param name="resource">The resource managed by the statement.</param>
        /// <param name="body">The body of the statement.</param>
        /// <param name="patternDispose">The (optional) lambda expression representing how to call the dispose method.</param>
        /// <returns>The created <see cref="UsingCSharpStatement"/>.</returns>
        public static UsingCSharpStatement Using(AwaitInfo awaitInfo, IEnumerable <ParameterExpression> variables, Expression resource, Expression body, LambdaExpression patternDispose)
        {
            RequiresNotNull(resource, nameof(resource));

            return(UsingCSharpStatement.Make(variables, resource, resources: null, body, awaitInfo, patternDispose));
        }