static <T extends PsiElement> DfaValue dereference(@NotNull DataFlowInterpreter interpreter,
                                                     @NotNull DfaMemoryState memState,
                                                     @NotNull DfaValue value,
                                                     @Nullable NullabilityProblemKind.NullabilityProblem<T> problem) {
    checkNotNullable(interpreter, memState, value, problem);
    if (value instanceof DfaTypeValue) {
      DfType dfType = value.getDfType().meet(NOT_NULL_OBJECT);
      return value.getFactory().fromDfType(dfType == DfType.BOTTOM ? NOT_NULL_OBJECT : dfType);
    }
    DfType dfType = memState.getDfType(value);
    if (dfType == NULL) {
      if (problem != null && problem.getKind() == NullabilityProblemKind.nullableFunctionReturn) {
        return value.getFactory().fromDfType(NOT_NULL_OBJECT);
      }
      memState.setDfType(value, NOT_NULL_OBJECT);
    }
    else if (value instanceof DfaVariableValue) {
      memState.meetDfType(value, NOT_NULL_OBJECT);
    }
    return value;
  }
static <T extends PsiElement> DfaValue dereference(@NotNull DataFlowInterpreter interpreter,
                                                     @NotNull DfaMemoryState memState,
                                                     @NotNull DfaValue value,
                                                     @Nullable NullabilityProblemKind.NullabilityProblem<T> problem)