private ArgumentListSyntax FormatThenArguments(List <InvocationExpressionSyntax> checks)
        {
            var lambda  = TypeAssertionGenerator.WrapIntoLambda(checks, "c");
            var arglist = ArgumentList(SingletonSeparatedList(Argument(lambda))).WithAdditionalAnnotations(Annotations.ThenArgument);

            return(arglist);
        }
        private void Visit(CommandBase command)
        {
            if (command is End)
            {
                TheEnd();
            }
            else
            {
                var validatedProperties = GetValidatedProperties(command);
                if (validatedProperties.Length == 0)
                {
                    Then(command); //needed to do not overwhelm braces
                }
                else
                {
                    var invokations = new List <InvocationExpressionSyntax>();
                    foreach (var validatedProperty in validatedProperties)
                    {
                        if (_optOuts.Contains(validatedProperty.Item1.OptOutFlag))
                        {
                            continue;
                        }

                        var commandDescription = string.IsNullOrEmpty(command.Annotation)? command.GetType().Name:$"'{command.Annotation}'";

                        var meaning = validatedProperty.Item1.Meaning ?? $"property {validatedProperty.Item2.Name}";

                        var propMeaning =
                            validatedProperty.Item1.Meaning ??
                            $"{meaning} of command {commandDescription}";

                        var instance = new AssertInstanceReference
                                       (
                            validatedProperty.Item2.GetValue(command),
                            validatedProperty.Item2.PropertyType,
                            MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression,
                                                   IdentifierName("c"),
                                                   IdentifierName(validatedProperty.Item2.Name)),
                            propMeaning,
                            _usings
                                       );
                        var assertions = TypeAssertionGenerator.AssertionFor(instance)
                                         .ToArray();
                        invokations.AddRange(assertions);
                        invokations.Add(null);
                    }
                    Then(command, invokations);
                }
            }
        }