@Override
  public void setVarValue(@NotNull DfaVariableValue var, @NotNull DfaValue value) {
    assert value.getFactory() == myFactory;
    assert var.getFactory() == myFactory;
    if (var == value) return;

    value = handleStackValueOnVariableFlush(value, var, null);
    flushVariable(var, var.getDfType().isMergeable(var.getInherentType()));
    flushQualifiedMethods(var);

    DfType dfType = filterDfTypeOnAssignment(var, getDfType(value)).meet(var.getDfType());
    if (dfType == DfType.BOTTOM) return; // likely uncompilable code or bad CFG
    DfaVariableValue qualifier = var.getQualifier();
    if (qualifier != null && !var.getDescriptor().isStable()) {
      flushFields(new QualifierStatusMap(Set.of(qualifier), var.getDescriptor(), dfType));
    }
    if (value instanceof DfaVariableValue varValue && !ControlFlow.isTempVariable(var) &&
        !ControlFlow.isTempVariable(varValue) &&
        (qualifier == null || !ControlFlow.isTempVariable(qualifier))) {
      // assigning a = b when b is known to be null: could be ephemeral
      checkEphemeral(var, value);
    }
    recordVariableType(var, dfType);
    applyBinOpRelations(value, RelationType.EQ, var);
    applyRelation(var, value, false);
    if (value instanceof DfaWrappedValue wrappedValue) {
      if (wrappedValue.getSpecialField().createValue(getFactory(), var) instanceof DfaVariableValue derivedVar) {
        setVarValue(derivedVar, wrappedValue.getWrappedValue());
      }
    }
    else if (!(value instanceof DfaVariableValue)) {
      for (Map.Entry<DerivedVariableDescriptor, DfType> entry : value.getDfType().getDerivedValues().entrySet()) {
        DerivedVariableDescriptor desc = entry.getKey();
        if (desc.createValue(getFactory(), var) instanceof DfaVariableValue derivedVar) {
          setVarValue(derivedVar, getFactory().fromDfType(entry.getValue().meet(desc.getDefaultValue())));
        }
      }
    }
    else if (isUnstableValue(value)) {
      applyDerivedVariablesEquivalence(var, value);
    }
  }
@Override
  public void setVarValue(@NotNull DfaVariableValue var, @NotNull DfaValue value)