private IList<MethodArgumentStatus> CalculateArgumentStatuses()
        {
            var argumentStatuses = new List<MethodArgumentStatus>();
            var allInvokedExpressions = new OneToSetMap<IVariableDeclaration, InvokedExpressionData>();
            var allStatuses = new OneToSetMap<IVariableDeclaration, VariableDisposeStatus>();
            DoForEachExit(data =>
            {
                data.InvokedExpressions.ForEach(kvp => allInvokedExpressions.AddRange(kvp.Key, kvp.Value));
                data.Status.ForEach(kvp => allStatuses.Add(kvp.Key, kvp.Value));
            });
            var generalStatuses = new Dictionary<IVariableDeclaration, VariableDisposeStatus>();
            allStatuses.ForEach(kvp => generalStatuses[kvp.Key] = GetGeneralStatus(kvp.Value));
            if (_disposableArguments == null)
                return null;
            _disposableArguments.ForEach(
                kvp => argumentStatuses.Add(new MethodArgumentStatus(kvp.Value, generalStatuses[kvp.Key],
                    allInvokedExpressions[kvp.Key].OrderBy(im => im.Offset).ToList(), _psiSourceFile)));

            if (_processThis)
            {
                var allThisInvokedExpressions = new HashSet<InvokedExpressionData>();
                var allThisStatuses = new HashSet<VariableDisposeStatus>();
                DoForEachExit(data =>
                {
                    allThisInvokedExpressions.UnionWith(data.ThisInvokedExpressions);
                    if (data.ThisStatus.HasValue)
                        allThisStatuses.Add(data.ThisStatus.Value);
                });
                argumentStatuses.Add(new MethodArgumentStatus(0, GetGeneralStatus(allThisStatuses),
                    allThisInvokedExpressions.OrderBy(im => im.Offset).ToList(), _psiSourceFile));
            }

            return argumentStatuses.OrderBy(mas => mas.Number).ToList();
        }