查找由 Java 的无意隐式收缩转换引起的整数溢出
Find integer overflows caused by Java's unintentional implicit narrowing conversions
我的代码如下所示:
public class Foo {
public static void doStuff() {
int x;
/* snip */
x += Bar.getY();
/* snip */
}
}
public class Bar {
public static int getY() {
/* snip */
}
}
我需要将 Bar.getY()
更改为 return long
而不是 int
。由于 Java 与 +=
的隐式转换,doStuff
将继续编译而不会出现错误或警告,但现在将包含一个整数溢出错误。有没有办法在 Java 代码库中找到这种隐式转换的所有实例,以避免无意中导致这种错误?
Google 的代码分析器 Error Prone 有一个缩小复合赋值的规则:https://github.com/google/error-prone/blob/master/docs/bugpattern/NarrowingCompoundAssignment.md
我的代码如下所示:
public class Foo {
public static void doStuff() {
int x;
/* snip */
x += Bar.getY();
/* snip */
}
}
public class Bar {
public static int getY() {
/* snip */
}
}
我需要将 Bar.getY()
更改为 return long
而不是 int
。由于 Java 与 +=
的隐式转换,doStuff
将继续编译而不会出现错误或警告,但现在将包含一个整数溢出错误。有没有办法在 Java 代码库中找到这种隐式转换的所有实例,以避免无意中导致这种错误?
Google 的代码分析器 Error Prone 有一个缩小复合赋值的规则:https://github.com/google/error-prone/blob/master/docs/bugpattern/NarrowingCompoundAssignment.md