// На основе множества статусов вычисляет один. // (Для группы равноправных элементов, например, всех предыдущих элементов) private VariableDisposeStatus UniteStatus(JetHashSet<VariableDisposeStatus> statusSet, bool hasCrossroads) { var disposedAndInvocationSet = new List<VariableDisposeStatus> { VariableDisposeStatus.Disposed, VariableDisposeStatus.DependsOnInvocation }; if (statusSet.IsSupersetOf(disposedAndInvocationSet)) return VariableDisposeStatus.Disposed; if (statusSet.Contains(VariableDisposeStatus.DependsOnInvocation)) return VariableDisposeStatus.DependsOnInvocation; var bothSet = new List<VariableDisposeStatus> { VariableDisposeStatus.Disposed, VariableDisposeStatus.NotDisposed }; if (statusSet.Contains(VariableDisposeStatus.Both) || statusSet.IsSupersetOf(bothSet)) return VariableDisposeStatus.Both; if (!hasCrossroads) { if (statusSet.Contains(VariableDisposeStatus.Disposed)) return VariableDisposeStatus.Disposed; if (statusSet.Contains(VariableDisposeStatus.NotDisposed)) return VariableDisposeStatus.NotDisposed; Assertion.Fail("Unknown status"); return VariableDisposeStatus.Unknown; } if (statusSet.Contains(VariableDisposeStatus.Unknown)) return VariableDisposeStatus.Unknown; if (statusSet.Contains(VariableDisposeStatus.Disposed)) return VariableDisposeStatus.Disposed; return VariableDisposeStatus.NotDisposed; }