Skip to content

Commit 82a2168

Browse files
cpovirkError Prone Team
authored andcommitted
Recognize that Runtime.halt and exit never return.
PiperOrigin-RevId: 686917388
1 parent 1d04094 commit 82a2168

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

core/src/main/java/com/google/errorprone/bugpatterns/nullness/ReturnMissingNullable.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import static com.google.errorprone.matchers.Matchers.anyMethod;
3232
import static com.google.errorprone.matchers.Matchers.anyOf;
3333
import static com.google.errorprone.matchers.Matchers.expressionStatement;
34+
import static com.google.errorprone.matchers.Matchers.instanceMethod;
3435
import static com.google.errorprone.matchers.Matchers.staticMethod;
3536
import static com.google.errorprone.util.ASTHelpers.constValue;
3637
import static com.google.errorprone.util.ASTHelpers.findEnclosingMethod;
@@ -107,6 +108,7 @@ public class ReturnMissingNullable extends BugChecker implements CompilationUnit
107108
*/
108109
.onDescendantOfAny("org.junit.Assert", "junit.framework.Assert")
109110
.named("fail"),
111+
instanceMethod().onDescendantOf("java.lang.Runtime").namedAnyOf("exit", "halt"),
110112
staticMethod().onClass("java.lang.System").named("exit")));
111113

112114
private static final Matcher<StatementTree> FAILS_IF_PASSED_FALSE =

core/src/test/java/com/google/errorprone/bugpatterns/nullness/ReturnMissingNullableTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,6 +1498,40 @@ public String getMessage() {
14981498
.doTest();
14991499
}
15001500

1501+
@Test
1502+
public void negativeCases_unreachableRuntimeExit() {
1503+
createCompilationTestHelper()
1504+
.addSourceLines(
1505+
"com/google/errorprone/bugpatterns/nullness/LiteralNullReturnTest.java",
1506+
"""
1507+
package com.google.errorprone.bugpatterns.nullness;
1508+
class LiteralNullReturnTest {
1509+
public String getMessage() {
1510+
Runtime.getRuntime().exit(1);
1511+
return null;
1512+
}
1513+
}
1514+
""")
1515+
.doTest();
1516+
}
1517+
1518+
@Test
1519+
public void negativeCases_unreachableRuntimeHalt() {
1520+
createCompilationTestHelper()
1521+
.addSourceLines(
1522+
"com/google/errorprone/bugpatterns/nullness/LiteralNullReturnTest.java",
1523+
"""
1524+
package com.google.errorprone.bugpatterns.nullness;
1525+
class LiteralNullReturnTest {
1526+
public String getMessage() {
1527+
Runtime.getRuntime().halt(1);
1528+
return null;
1529+
}
1530+
}
1531+
""")
1532+
.doTest();
1533+
}
1534+
15011535
@Test
15021536
public void negativeCases_unreachableAssertFail() {
15031537
createCompilationTestHelper()

0 commit comments

Comments
 (0)