查找由 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