[python] Fix nullability annotations (PyAstNumericLiteralExpression)

GitOrigin-RevId: d5db0add83ac134aab91198b1a931c026829d216
This commit is contained in:
Petr
2024-07-28 14:26:09 +02:00
committed by intellij-monorepo-bot
parent 38ee9327a6
commit 7f22ee443e
4 changed files with 15 additions and 30 deletions

View File

@@ -35,43 +35,32 @@ public interface PyAstNumericLiteralExpression extends PyAstLiteralExpression {
@Nullable
default Long getLongValue() {
final BigInteger value = getBigIntegerValue();
return Optional
.ofNullable(value)
.map(BigInteger::longValue)
.filter(longValue -> BigInteger.valueOf(longValue).equals(value))
.orElse(null);
long longValue = value.longValue();
return BigInteger.valueOf(longValue).equals(value) ? longValue : null;
}
/**
* Returns the value of this literal as a {@code BigInteger} (with any
* fraction truncated).
*/
@Nullable
@NotNull
default BigInteger getBigIntegerValue() {
if (isIntegerLiteral()) {
return getBigIntegerValue(getNode().getText());
}
final BigDecimal bigDecimal = getBigDecimalValue();
return bigDecimal == null ? null : bigDecimal.toBigInteger();
return bigDecimal.toBigInteger();
}
/**
* Returns the exact value of this literal.
*/
@Nullable
@NotNull
default BigDecimal getBigDecimalValue() {
final String text = getNode().getText();
if (isIntegerLiteral()) {
return Optional
.ofNullable(getBigIntegerValue(text))
.map(BigDecimal::new)
.orElse(null);
}
return new BigDecimal(prepareLiteralForJava(text, 0));
return isIntegerLiteral() ? new BigDecimal(getBigIntegerValue(text))
: new BigDecimal(prepareLiteralForJava(text, 0));
}
default boolean isIntegerLiteral() {
@@ -88,7 +77,7 @@ public interface PyAstNumericLiteralExpression extends PyAstLiteralExpression {
return isIntegerLiteral() ? StringUtil.nullize(retrieveSuffix(getText())) : null;
}
@Nullable
@NotNull
private static BigInteger getBigIntegerValue(@NotNull String text) {
if (text.equalsIgnoreCase("0" + retrieveSuffix(text))) {
return BigInteger.ZERO;

View File

@@ -73,7 +73,7 @@ data class PyVersionCheck(val version: Version, val isLessThan: Boolean) {
private fun evaluateNumber(expression: PyAstExpression?): Int? {
if (expression !is PyAstNumericLiteralExpression) return null
if (!expression.isIntegerLiteral) return null
val value = expression.bigIntegerValue ?: return null
val value = expression.bigIntegerValue
val intValue = value.toInt()
return if (BigInteger.valueOf(intValue.toLong()) == value) intValue else null
}

View File

@@ -115,13 +115,11 @@ public final class PyDictDuplicateKeysInspection extends PyInspection {
if (node instanceof PyNumericLiteralExpression) {
final BigDecimal value = ((PyNumericLiteralExpression)node).getBigDecimalValue();
if (value != null) {
final String keyValue = value.toPlainString();
return !value.equals(BigDecimal.ZERO) &&
myTypeEvalContext.getType((PyNumericLiteralExpression)node) == PyBuiltinCache.getInstance(node).getComplexType()
? keyValue + "j"
: keyValue;
}
final String keyValue = value.toPlainString();
return !value.equals(BigDecimal.ZERO) &&
myTypeEvalContext.getType((PyNumericLiteralExpression)node) == PyBuiltinCache.getInstance(node).getComplexType()
? keyValue + "j"
: keyValue;
}
return node instanceof PyLiteralExpression || node instanceof PyReferenceExpression ? node.getText() : null;

View File

@@ -128,9 +128,7 @@ public class PyEvaluator {
private static Object evaluateNumeric(@NotNull PyNumericLiteralExpression expression) {
if (expression.isIntegerLiteral()) {
final BigInteger value = expression.getBigIntegerValue();
if (value != null) {
return fromBigInteger(value);
}
return fromBigInteger(value);
}
return null;