diff --git a/nullaway/src/main/java/com/uber/nullaway/NullAway.java b/nullaway/src/main/java/com/uber/nullaway/NullAway.java index 6bb3f4ab28..4104da418d 100644 --- a/nullaway/src/main/java/com/uber/nullaway/NullAway.java +++ b/nullaway/src/main/java/com/uber/nullaway/NullAway.java @@ -1889,6 +1889,7 @@ private boolean mayBeNullExpr(VisitorState state, ExpressionTree expr) { case XOR: case LEFT_SHIFT: case RIGHT_SHIFT: + case UNSIGNED_RIGHT_SHIFT: // clearly not null exprMayBeNull = false; break; diff --git a/nullaway/src/test/resources/com/uber/nullaway/testdata/NullAwayNegativeCases.java b/nullaway/src/test/resources/com/uber/nullaway/testdata/NullAwayNegativeCases.java index 6757e75512..fe81e52f67 100644 --- a/nullaway/src/test/resources/com/uber/nullaway/testdata/NullAwayNegativeCases.java +++ b/nullaway/src/test/resources/com/uber/nullaway/testdata/NullAwayNegativeCases.java @@ -809,4 +809,19 @@ static void testTwoParamIter() { s.hashCode(); } } + + static String boxAndDeref(Integer boxed) { + return boxed.toString(); + } + + static String testNoCrashOnUnboxedShifts(int n) { + Integer m = n << 2; + String s = ""; + s += boxAndDeref(m); + s += boxAndDeref(m <<= 2); + s += boxAndDeref(n >>= 1); + s += boxAndDeref(m >>>= 4); + s += boxAndDeref(n >>> 3); + return s; + } }