private void flushFields(@NotNull DfaMemoryStateImpl.QualifierStatusMap qualifierStatusMap) {
    Set<DfaVariableValue> vars = new LinkedHashSet<>();
    for (DfaVariableValue value : myVariableTypes.keySet()) {
      if (qualifierStatusMap.shouldFlush(value)) {
        vars.add(value);
      }
    }
    for (EqClass aClass : myEqClasses) {
      if (aClass != null) {
        for (DfaVariableValue value : aClass) {
          if (qualifierStatusMap.shouldFlush(value)) {
            vars.add(value);
          }
        }
      }
    }
    for (DfaVariableValue value : vars) {
      DfType oldValue = getDfType(value);
      doFlush(value, true);
      if (qualifierStatusMap.myFieldToFlush != null && qualifierStatusMap.myFieldToFlush.equals(value.getDescriptor())) {
        recordVariableType(value, oldValue.join(qualifierStatusMap.myFieldValue));
      }
    }
    myStack.replaceAll(val -> {
      DfType type = getDfType(val);
      for (Map.Entry<DerivedVariableDescriptor, DfType> entry : type.getDerivedValues().entrySet()) {
        DerivedVariableDescriptor descriptor = entry.getKey();
        DfType derivedType = entry.getValue();
        if (derivedType != DfType.TOP && !descriptor.isStable() && qualifierStatusMap.shouldFlush(val, descriptor.isCall())) {
          return myFactory.fromDfType(type.getBasicType());
        }
      }
      if (val instanceof DfaVariableValue && qualifierStatusMap.shouldFlush((DfaVariableValue)val)) {
        return myFactory.fromDfType(type);
      }
      return val;
    });
  }
private void flushFields(@NotNull DfaMemoryStateImpl.QualifierStatusMap qualifierStatusMap)