public void flush(@NotNull DfaMemoryState state, @NotNull DfaValueFactory factory, @Nullable PsiMethod method) {
    SideEffectHandlers.SideEffectHandler handler = SideEffectHandlers.getHandler(method);
    if (handler != null) {
      handler.handleSideEffect(factory, state, this);
      return;
    }
    if (myMutation.isPure()) {
      if (myQualifier instanceof DfaVariableValue) {
        DfaValue qualifier;
        if (method != null && method.isConstructor()) {
          qualifier = ThisDescriptor.createThisValue(factory, method.getContainingClass());
        } else {
          qualifier = myQualifier;
        }
        // We assume that even pure call may modify private fields (e.g., to cache something)
        state.flushVariables(v -> v.getQualifier() == qualifier &&
                                  v.getPsiVariable() instanceof PsiMember member &&
                                  member != method &&
                                  member.hasModifierProperty(PsiModifier.PRIVATE));
      }
      return;
    }
    if (myMutation == MutationSignature.UNKNOWN || myArguments == null) {
      state.flushFields();
      return;
    }
    Set<DfaValue> qualifiers = new HashSet<>();
    if (myQualifier != null && myMutation.mutatesThis()) {
      qualifiers.add(myQualifier);
    }
    for (int i = 0; i < myArguments.length; i++) {
      if (myMutation.mutatesArg(i)) {
        qualifiers.add(myArguments[i]);
      }
    }
    state.flushFieldsQualifiedBy(qualifiers);
  }
public void flush(@NotNull DfaMemoryState state, @NotNull DfaValueFactory factory, @Nullable PsiMethod method)