@Override
  public @NotNull DfType getDfType(@NotNull DfaValue value) {
    if (value instanceof DfaBinOpValue binOpValue) {
      return getBinOpRange(binOpValue);
    }
    if (value instanceof DfaVariableValue variableValue) {
      DfType type = getRecordedType(variableValue);
      return type != null ? type : variableValue.getInherentType();
    }
    if (value instanceof DfaWrappedValue wrappedValue) {
      DfType wrappedValueType = getDfType(wrappedValue.getWrappedValue());
      return wrappedValue.getSpecialField().asDfType(value.getDfType(), wrappedValueType);
    }
    return value.getDfType();
  }
@Override
  public @NotNull DfType getDfType(@NotNull DfaValue value)