From 6b8ab6ec809be186d6542b3201084b167907ffec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20St=C3=A5ldal?= Date: Wed, 30 Dec 2020 15:06:13 +0100 Subject: [PATCH 1/5] Declare CompletableFuture.completedStage(value) to accept null values Fixes #484 --- .../java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spotbugs/src/main/java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java b/spotbugs/src/main/java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java index a1da51ef986..a1eb48347b0 100644 --- a/spotbugs/src/main/java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java +++ b/spotbugs/src/main/java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java @@ -232,6 +232,8 @@ public static void addDefaultNullnessAnnotations(INullnessAnnotationDatabase dat "(Ljava/lang/Object;)Z", false, 0, NullnessAnnotation.NULLABLE); database.addMethodParameterAnnotation("java.util.concurrent.CompletableFuture", "completedFuture", "(Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture;", true, 0, NullnessAnnotation.NULLABLE); + database.addMethodParameterAnnotation("java.util.concurrent.CompletableFuture", "completedStage", + "(Ljava/lang/Object;)Ljava/util/concurrent/CompletionStage;", true, 0, NullnessAnnotation.NULLABLE); database.addMethodParameterAnnotation("java.util.concurrent.ExecutionException", "", "(Ljava/lang/String;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL); From f7ea45ec567ac6312d2fa881163e05f21d0d4dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20St=C3=A5ldal?= Date: Wed, 30 Dec 2020 15:10:53 +0100 Subject: [PATCH 2/5] Remove redundant whitespace --- .../java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spotbugs/src/main/java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java b/spotbugs/src/main/java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java index a1eb48347b0..c9e563f2f55 100644 --- a/spotbugs/src/main/java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java +++ b/spotbugs/src/main/java/edu/umd/cs/findbugs/ba/DefaultNullnessAnnotations.java @@ -233,7 +233,7 @@ public static void addDefaultNullnessAnnotations(INullnessAnnotationDatabase dat database.addMethodParameterAnnotation("java.util.concurrent.CompletableFuture", "completedFuture", "(Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture;", true, 0, NullnessAnnotation.NULLABLE); database.addMethodParameterAnnotation("java.util.concurrent.CompletableFuture", "completedStage", - "(Ljava/lang/Object;)Ljava/util/concurrent/CompletionStage;", true, 0, NullnessAnnotation.NULLABLE); + "(Ljava/lang/Object;)Ljava/util/concurrent/CompletionStage;", true, 0, NullnessAnnotation.NULLABLE); database.addMethodParameterAnnotation("java.util.concurrent.ExecutionException", "", "(Ljava/lang/String;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL); From bc15815c4747692a21108a205e06a1c8e72dc6a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20St=C3=A5ldal?= Date: Sun, 3 Jan 2021 13:14:08 +0100 Subject: [PATCH 3/5] Add unit test for issue 1397 --- .../src/java/ghIssues/Issue1397.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 spotbugsTestCases/src/java/ghIssues/Issue1397.java diff --git a/spotbugsTestCases/src/java/ghIssues/Issue1397.java b/spotbugsTestCases/src/java/ghIssues/Issue1397.java new file mode 100644 index 00000000000..1a9d15906f5 --- /dev/null +++ b/spotbugsTestCases/src/java/ghIssues/Issue1397.java @@ -0,0 +1,32 @@ +/* + * Contributions to SpotBugs + * Copyright (C) 2021 Mikael Ståldal + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package ghIssues; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; + +/** + * @see GitHub issue + */ +public class Issue1397 { + CompletionStage completedFuture() { + // 1st argument of CompletableFuture#completedStage(U) should be nullable + return CompletableFuture.completedStage(null); + } +} From b6e59fa186cf8ad939d333d6185648e217dec4f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20St=C3=A5ldal?= Date: Sun, 3 Jan 2021 13:17:44 +0100 Subject: [PATCH 4/5] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d9370358f7..dfb68bc2647 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Currently the versioning policy of this project follows [Semantic Versioning v2. ### Fixed * Invalid HTML in the description of `LI_LAZY_INIT_UPDATE_STATIC` bug pattern ([#1383](https://github.com/spotbugs/spotbugs/pull/1383)) +* NP_NONNULL_PARAM_VIOLATION false-positive in CompletableFuture.completedStage(value) ([#1397](https://github.com/spotbugs/spotbugs/issues/1397)) ## 4.2.0 - 2020-11-28 ### Fixed From fc3da6219954de356a14660b8b83141a9aa7bbc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20St=C3=A5ldal?= Date: Sun, 3 Jan 2021 13:31:06 +0100 Subject: [PATCH 5/5] Move unit test to Java 11 --- spotbugsTestCases/src/{java/ghIssues => java11}/Issue1397.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spotbugsTestCases/src/{java/ghIssues => java11}/Issue1397.java (100%) diff --git a/spotbugsTestCases/src/java/ghIssues/Issue1397.java b/spotbugsTestCases/src/java11/Issue1397.java similarity index 100% rename from spotbugsTestCases/src/java/ghIssues/Issue1397.java rename to spotbugsTestCases/src/java11/Issue1397.java