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(); }