Rationalize null-ness checks in Runfiles

This now also checks symlink maps for null pointers, which it previously did
not. Unfortunately, there's still one case where we add a null target to
Runfiles (to represent an empty file) - this happens in Runfiles itself, and
this change prevents any callers from doing so.

--
PiperOrigin-RevId: 150634481
MOS_MIGRATED_REVID=150634481
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
index b311ebb..2ef4c2c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
@@ -134,8 +134,8 @@
     private final Artifact artifact;
 
     private SymlinkEntry(PathFragment path, Artifact artifact) {
-      this.path = path;
-      this.artifact = artifact;
+      this.path = Preconditions.checkNotNull(path);
+      this.artifact = Preconditions.checkNotNull(artifact);
     }
 
     public PathFragment getPath() {
@@ -146,10 +146,12 @@
       return artifact;
     }
 
+    @Override
     public boolean isImmutable() {
       return true;
     }
 
+    @Override
     public void write(Appendable buffer, char quotationMark) {
       Printer.append(buffer, "SymlinkEntry(path = ");
       Printer.write(buffer, getPath().toString(), quotationMark);
@@ -851,13 +853,11 @@
      * Adds a symlink.
      */
     public Builder addSymlink(PathFragment link, Artifact target) {
-      Preconditions.checkNotNull(link);
-      Preconditions.checkNotNull(target);
       symlinksBuilder.add(new SymlinkEntry(link, target));
       return this;
     }
 
-    /** Adds several symlinks. */
+    /** Adds several symlinks. Neither keys nor values may be null. */
     public Builder addSymlinks(Map<PathFragment, Artifact> symlinks) {
       for (Map.Entry<PathFragment, Artifact> symlink : symlinks.entrySet()) {
         symlinksBuilder.add(new SymlinkEntry(symlink.getKey(), symlink.getValue()));
@@ -877,13 +877,11 @@
      * Adds a root symlink.
      */
     public Builder addRootSymlink(PathFragment link, Artifact target) {
-      Preconditions.checkNotNull(link);
-      Preconditions.checkNotNull(target);
       rootSymlinksBuilder.add(new SymlinkEntry(link, target));
       return this;
     }
 
-    /** Adds several root symlinks. */
+    /** Adds several root symlinks. Neither keys nor values may be null. */
     public Builder addRootSymlinks(Map<PathFragment, Artifact> symlinks) {
       for (Map.Entry<PathFragment, Artifact> symlink : symlinks.entrySet()) {
         rootSymlinksBuilder.add(new SymlinkEntry(symlink.getKey(), symlink.getValue()));