@Override
  public DfaInstructionState[] accept(@NotNull DataFlowInterpreter interpreter, @NotNull DfaMemoryState stateBefore) {
    NullabilityProblemKind.NullabilityProblem<?> problem = getProblem();
    if (problem.thrownException() == null) {
      checkNotNullable(interpreter, stateBefore, stateBefore.peek(), problem);
    } else {
      DfaValue value = stateBefore.pop();
      boolean isNull = interpreter instanceof StandardDataFlowInterpreter standard &&
                       standard.stopOnNull() &&
                       stateBefore.getDfType(value) == NULL;
      if (myTransferValue == null) {
        stateBefore.push(dereference(interpreter, stateBefore, value, problem));
        if (isNull) {
          return DfaInstructionState.EMPTY_ARRAY;
        }
      } else {
        List<DfaInstructionState> result = new ArrayList<>();
        DfaMemoryState nullState = stateBefore.createCopy();
        stateBefore.push(dereference(interpreter, stateBefore, value, problem));
        if (!isNull) {
          result.add(nextState(interpreter, stateBefore));
        }
        if (nullState.applyCondition(value.eq(NULL))) {
          List<DfaInstructionState> dispatched = myTransferValue.dispatch(nullState, interpreter);
          for (DfaInstructionState npeState : dispatched) {
            npeState.getMemoryState().markEphemeral();
          }
          result.addAll(dispatched);
        }
        return result.toArray(DfaInstructionState.EMPTY_ARRAY);
      }
    }
    return nextStates(interpreter, stateBefore);
  }
@Override
  public DfaInstructionState[] accept(@NotNull DataFlowInterpreter interpreter, @NotNull DfaMemoryState stateBefore)