From 13bbcc3b0db97b4de27751f6dbdc24b0752c321e Mon Sep 17 00:00:00 2001 From: Lazaro Clapp Date: Thu, 4 Aug 2022 22:25:58 -0400 Subject: [PATCH] Add library model for Guava's Closer.register --- .../NullAwayGuavaParametricNullnessTests.java | 31 ++++++++++++++++++- .../handlers/LibraryModelsHandler.java | 1 + 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/guava-recent-unit-tests/src/test/java/com/uber/nullaway/guava/NullAwayGuavaParametricNullnessTests.java b/guava-recent-unit-tests/src/test/java/com/uber/nullaway/guava/NullAwayGuavaParametricNullnessTests.java index 9dc64e6c4c..b2334936d5 100644 --- a/guava-recent-unit-tests/src/test/java/com/uber/nullaway/guava/NullAwayGuavaParametricNullnessTests.java +++ b/guava-recent-unit-tests/src/test/java/com/uber/nullaway/guava/NullAwayGuavaParametricNullnessTests.java @@ -41,7 +41,8 @@ public void setup() { Arrays.asList( "-d", temporaryFolder.getRoot().getAbsolutePath(), - "-XepOpt:NullAway:AnnotatedPackages=com.uber,com.google.common")); + "-XepOpt:NullAway:AnnotatedPackages=com.uber,com.google.common", + "-XepOpt:NullAway:AcknowledgeLibraryModelsOfAnnotatedCode=true")); } @Test @@ -89,4 +90,32 @@ public void testIterableParametricNullness() { "}") .doTest(); } + + @Test + public void testCloserParametricNullness() { + defaultCompilationHelper + .addSourceLines( + "Test.java", + "package com.uber;", + "import com.google.common.io.Closer;", + "import java.io.Closeable;", + "import java.io.FileInputStream;", + "import javax.annotation.Nullable;", + "class Test {", + " public static FileInputStream test1(Closer closer, FileInputStream fis1) {", + " // safe: non-null arg to non-null return", + " return closer.register(fis1);", + " }", + " @Nullable", + " public static FileInputStream test2(Closer closer, @Nullable FileInputStream fis2) {", + " // safe: nullable arg to nullable return", + " return closer.register(fis2);", + " }", + " public static FileInputStream test3(Closer closer, @Nullable FileInputStream fis3) {", + " // BUG: Diagnostic contains: returning @Nullable expression", + " return closer.register(fis3);", + " }", + "}") + .doTest(); + } } diff --git a/nullaway/src/main/java/com/uber/nullaway/handlers/LibraryModelsHandler.java b/nullaway/src/main/java/com/uber/nullaway/handlers/LibraryModelsHandler.java index 3252e4f3d2..e62957d2b2 100644 --- a/nullaway/src/main/java/com/uber/nullaway/handlers/LibraryModelsHandler.java +++ b/nullaway/src/main/java/com/uber/nullaway/handlers/LibraryModelsHandler.java @@ -583,6 +583,7 @@ private static class DefaultLibraryModels implements LibraryModels { private static final ImmutableSetMultimap NULL_IMPLIES_NULL_PARAMETERS = new ImmutableSetMultimap.Builder() .put(methodRef("java.util.Optional", "orElse(T)"), 0) + .put(methodRef("com.google.common.io.Closer", "register(C)"), 0) .build(); private static final ImmutableSet NULLABLE_RETURNS =