From 3551e443fc0a2a587911ee88ed905501cad8e59b Mon Sep 17 00:00:00 2001 From: Jonathan Nieder Date: Fri, 22 Mar 2019 09:07:03 -0700 Subject: [PATCH] Introduce a checkNotNull helper When using @NonNull annotations in new code, if I write public void setFrobber(@NonNull frobber) { this.frobber = frobber; } then consumers of the JGit library that do not have nullness checking enabled can easily pass in null by mistake. On the other hand, if I write public void setFrobber(@NonNull frobber) { if (frobber == null) { throw new NullPointerException(); } this.frobber = frobber; } then Eclipse JDT complains: Null comparison always yields false: The variable frobber is specified as @NonNull Add a checkNotNull helper that offers the best of both worlds: public void setFrobber(@NonNull frobber) { this.frobber = checkNotNull(frobber); } Briefer code, null check is intact, and no warning. Inspired by Guava's com.google.common.base.Preconditions.checkNotNull. Change-Id: If59588d13a1119e899657ed2296931ea18ed0e2a --- .../src/org/eclipse/jgit/api/Git.java | 6 ++--- .../src/org/eclipse/jgit/lib/Constants.java | 26 ++++++++++++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java index 400a7dfe4..604cf1ee1 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java @@ -43,6 +43,8 @@ */ package org.eclipse.jgit.api; +import static org.eclipse.jgit.lib.Constants.checkNotNull; + import java.io.File; import java.io.IOException; @@ -220,9 +222,7 @@ public class Git implements AutoCloseable { } Git(Repository repo, boolean closeRepo) { - if (repo == null) - throw new NullPointerException(); - this.repo = repo; + this.repo = checkNotNull(repo); this.closeRepo = closeRepo; } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java index 4c5519696..e724c1525 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java @@ -58,7 +58,7 @@ import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.util.MutableInteger; /** - * Misc. constants used throughout JGit. + * Misc. constants and helpers used throughout JGit. */ @SuppressWarnings("nls") public final class Constants { @@ -465,6 +465,30 @@ public final class Constants { */ public static final String ATTR_BUILTIN_BINARY_MERGER = "binary"; //$NON-NLS-1$ + /** + * Null checker for a {@code @NonNull} parameter. + * + *

This is a briefer equivalent to + *

+	 * if (arg == null) {
+	 *   throw new NullPointerException();
+	 * }
+	 * 
+ * with the added benefit that it does not trigger nullness warnings when + * {@code arg} is declared as {@code @NonNull}. + * + * @param arg a non-null object reference + * @return arg + * @throws NullPointerException if {@code arg} is null + * @since 5.4 + */ + public static T checkNotNull(T arg) { + if (arg == null) { + throw new NullPointerException(); + } + return arg; + } + /** * Create a new digest function for objects. *