private ExpressionSyntax DeconstructionToMethod(ExpressionSyntax tuple, ExpressionSyntax obj, DeconstructionInfo deconstructionInfo)
        {
            List <ArgumentSyntax> arguments = new List <ArgumentSyntax>();

            if (tuple is TupleExpressionSyntax te)
            {
                foreach (var arg in te.Arguments)
                {
                    if (arg.Expression is DeclarationExpressionSyntax de)
                    {
                        if (de.Designation is SingleVariableDesignationSyntax sv)
                        {
                            arguments.Add(SyntaxFactory.Argument(SyntaxFactory.IdentifierName(sv.Identifier)).WithRefKindKeyword(SyntaxFactory.Token(SyntaxKind.OutKeyword)).WithRefOrOutKeyword(
                                              SyntaxFactory.Token(SyntaxKind.OutKeyword)));
                        }
                    }
                    else
                    {
                        arguments.Add(arg.WithRefKindKeyword(SyntaxFactory.Token(SyntaxKind.OutKeyword)).WithRefOrOutKeyword(
                                          SyntaxFactory.Token(SyntaxKind.OutKeyword)));
                    }
                }
            }
            else
            {
                var variables = ((ParenthesizedVariableDesignationSyntax)((DeclarationExpressionSyntax)tuple).Designation).Variables;
                foreach (var variable in variables)
                {
                    if (variable is SingleVariableDesignationSyntax sv)
                    {
                        arguments.Add(SyntaxFactory.Argument(SyntaxFactory.IdentifierName(sv.Identifier)).WithRefKindKeyword(SyntaxFactory.Token(SyntaxKind.OutKeyword)).WithRefOrOutKeyword(
                                          SyntaxFactory.Token(SyntaxKind.OutKeyword)));
                    }
                }
            }

            if (deconstructionInfo.Method != null)
            {
                if (deconstructionInfo.Method.IsExtensionMethod)
                {
                    arguments.Insert(0, SyntaxFactory.Argument(obj));
                    return(SyntaxHelper.GenerateInvocation(deconstructionInfo.Method.Name, deconstructionInfo.Method.ContainingType.FullyQualifiedName(), arguments.ToArray()).NormalizeWhitespace());
                }
                else
                {
                    return(SyntaxHelper.GenerateInvocation(deconstructionInfo.Method.Name, obj, arguments.ToArray()).NormalizeWhitespace());
                }
            }
            else
            {
                arguments.Insert(0, SyntaxFactory.Argument(obj));
                return(SyntaxHelper.GenerateInvocation("Deconstruct", "Bridge.Script", arguments.ToArray()).NormalizeWhitespace());
            }
        }