// На основе множества статусов вычисляет один.
 // (Для группы равноправных элементов, например, всех предыдущих элементов)
 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;
 }