Skip to content

Commit cb72c5a

Browse files
authored
Support java.util.Objects.toString() (#1283)
Add support for java.util.Objects.toString(). Closes #1282 When passing `null` as a nullDefault String, the Object is not guaranteed nonNull. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved nullability analysis for java.util.Objects.toString(Object, String). The return value is now considered nullable when the default string argument may be null, preventing unsafe dereferences. Calls with a non-null default string remain treated as non-null. * **Tests** * Added a test validating the updated behavior for Objects.toString with both non-null and null default string arguments. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: gulikoza <[email protected]>
1 parent 8f40500 commit cb72c5a

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

nullaway/src/main/java/com/uber/nullaway/handlers/LibraryModelsHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,7 @@ private static class DefaultLibraryModels implements LibraryModels {
812812
methodRef(
813813
"com.google.common.collect.ImmutableMap", "getOrDefault(java.lang.Object,V)"),
814814
1)
815+
.put(methodRef("java.util.Objects", "toString(java.lang.Object,java.lang.String)"), 1)
815816
.build();
816817

817818
private static final ImmutableSet<MethodRef> NULLABLE_RETURNS =

nullaway/src/test/java/com/uber/nullaway/FrameworkTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,6 +1154,26 @@ public void amazonAwsStringUtilsIsEmptyOrIsBlank() {
11541154
.doTest();
11551155
}
11561156

1157+
@Test
1158+
public void defaultLibraryModelsObjectToString() {
1159+
defaultCompilationHelper
1160+
.addSourceLines(
1161+
"Test.java",
1162+
"package com.uber;",
1163+
"import java.util.Objects;",
1164+
"import javax.annotation.Nullable;",
1165+
"public class Test {",
1166+
" void objectsToString(@Nullable Object o) {",
1167+
" String p = Objects.toString(o, \"foo\");",
1168+
" String n = Objects.toString(o, null);",
1169+
" p.hashCode();",
1170+
" // BUG: Diagnostic contains: dereferenced",
1171+
" n.hashCode();",
1172+
" }",
1173+
"}")
1174+
.doTest();
1175+
}
1176+
11571177
@Test
11581178
public void filesIsDirectory() {
11591179
defaultCompilationHelper

0 commit comments

Comments
 (0)