Always inject the runfiles prefix into the Runfiles.Builder.

The other constructor is now private.

--
MOS_MIGRATED_REVID=102252544
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 bdef891..2c44a32 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
@@ -19,7 +19,6 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.Constants;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -221,7 +220,7 @@
       NestedSet<SymlinkEntry> rootSymlinks,
       NestedSet<PruningManifest> pruningManifests,
       EmptyFilesSupplier emptyFilesSupplier) {
-    this.suffix = suffix.isEmpty() ? Constants.DEFAULT_RUNFILES_PREFIX : suffix;
+    this.suffix = suffix;
     this.unconditionalArtifacts = Preconditions.checkNotNull(artifacts);
     this.symlinks = Preconditions.checkNotNull(symlinks);
     this.rootSymlinks = Preconditions.checkNotNull(rootSymlinks);
@@ -505,7 +504,7 @@
     /**
      * Only used for Runfiles.EMPTY.
      */
-    public Builder() {
+    private Builder() {
       this.suffix = "";
     }
 
@@ -769,12 +768,15 @@
      * pruning manifests in the merge.
      */
     private Builder merge(Runfiles runfiles, boolean includePruningManifests) {
+      if (runfiles.isEmpty()) {
+        return this;
+      }
+      // The suffix should be the same within any blaze build, except for the EMPTY runfiles, which
+      // may have an empty suffix, but that is covered above.
+      Preconditions.checkArgument(suffix.equals(runfiles.suffix));
       artifactsBuilder.addTransitive(runfiles.getUnconditionalArtifacts());
       symlinksBuilder.addTransitive(runfiles.getSymlinks());
       rootSymlinksBuilder.addTransitive(runfiles.getRootSymlinks());
-      if (suffix.isEmpty()) {
-        suffix = runfiles.suffix;
-      }
       if (includePruningManifests) {
         pruningManifestsBuilder.addTransitive(runfiles.getPruningManifests());
       }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
index 5d573e5..c026793 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
@@ -289,16 +289,18 @@
     private final ManifestWriter manifestWriter;
     private final ActionOwner owner;
     private final Artifact output;
-    private final Runfiles.Builder runfilesBuilder = new Runfiles.Builder();
+    private final Runfiles.Builder runfilesBuilder;
 
-    public Builder(ManifestType manifestType, ActionOwner owner, Artifact output) {
+    public Builder(String prefix, ManifestType manifestType, ActionOwner owner, Artifact output) {
+      this.runfilesBuilder = new Runfiles.Builder(prefix);
       manifestWriter = manifestType;
       this.owner = owner;
       this.output = output;
     }
 
     @VisibleForTesting
-    Builder(ManifestWriter manifestWriter, ActionOwner owner, Artifact output) {
+    Builder(String prefix, ManifestWriter manifestWriter, ActionOwner owner, Artifact output) {
+      this.runfilesBuilder = new Runfiles.Builder(prefix);
       this.manifestWriter = manifestWriter;
       this.owner = owner;
       this.output = output;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index c6156ac..28681d4 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -761,6 +761,10 @@
   }
 
   static class Builder {
+    protected static Package newPackage(PackageIdentifier packageId) {
+      return new Package(packageId);
+    }
+
     /**
      * The output instance for this builder. Needs to be instantiated and
      * available with name info throughout initialization. All other settings
@@ -822,10 +826,9 @@
       }
     }
 
-    protected static Package newPackage(PackageIdentifier packageId) {
-      return new Package(packageId);
+    Builder(PackageIdentifier id) {
+      this(newPackage(id));
     }
-    Builder(PackageIdentifier id) { this(newPackage(id)); }
 
     protected PackageIdentifier getPackageIdentifier() {
       return pkg.getPackageIdentifier();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
index 35ae4b8..b1f2233 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
@@ -146,9 +146,10 @@
 
     Artifact inputManifest = AndroidBinary.getDxArtifact(ruleContext, "native_symlinks.manifest");
     ruleContext.registerAction(new SourceManifestAction.Builder(
-        ManifestType.SOURCE_SYMLINKS, ruleContext.getActionOwner(), inputManifest)
-        .addRootSymlinks(symlinks)
-        .build());
+        ruleContext.getWorkspaceName(), ManifestType.SOURCE_SYMLINKS, ruleContext.getActionOwner(),
+        inputManifest)
+            .addRootSymlinks(symlinks)
+            .build());
     Artifact outputManifest = AndroidBinary.getDxArtifact(ruleContext, "native_symlinks/MANIFEST");
     ruleContext.registerAction(new SymlinkTreeAction(
         ruleContext.getActionOwner(), inputManifest, outputManifest, false));