@Override
  public @NotNull DfaValue eval(@NotNull DfaValueFactory factory,
                                @NotNull DfaMemoryState state,
                                @NotNull DfaValue @NotNull ... arguments) {
    DfaValue value = arguments[0];
    if (value instanceof DfaBinOpValue) {
      value = tryReduceOnCast(((DfaBinOpValue)value), state, myTargetType);
    }

    DfType dfType = state.getDfType(value);
    if (value instanceof DfaVariableValue && dfType instanceof DfIntType) {
      LongRangeSet set = JvmPsiRangeSetUtil.typeRange(myTargetType);
      if (set != null && !LongRangeSet.all().equals(set) && ((DfIntType)dfType).meetRange(set).equals(dfType)) {
        return value;
      }
    }
    if (dfType instanceof DfPrimitiveType) {
      return factory.fromDfType(((DfPrimitiveType)dfType).castTo(myTargetType));
    }
    return factory.getUnknown();
  }
@Override
  public @NotNull DfaValue eval(@NotNull DfaValueFactory factory,
                                @NotNull DfaMemoryState state,
                                @NotNull DfaValue @NotNull ... arguments)