@Override
  public void flushVariable(@NotNull DfaVariableValue variable, boolean canonicalize) {
    DfaVariableValue canonical = canonicalize ? canonicalize(variable) : variable;
    EqClass eqClass = canonical.getDependentVariables().isEmpty() ? null : getEqClass(canonical);
    DfaVariableValue newCanonical =
      eqClass == null ? null : StreamEx.of(eqClass.iterator()).without(canonical).min(EqClassImpl.CANONICAL_VARIABLE_COMPARATOR)
        .filter(candidate -> !candidate.dependsOn(canonical))
        .orElse(null);
    myStack.replaceAll(value -> handleStackValueOnVariableFlush(value, canonical, newCanonical));

    doFlush(canonical, false);
    flushDependencies(canonical);
    myCachedHash = null;
  }
@Override
  public void flushVariable(@NotNull DfaVariableValue variable, boolean canonicalize)