Rename some PackageId and RepositoryName fields/methods in prep for deep execroot change

This is in prep for making the execution root path for external repositories
../repo_name (instead of external/repo_name). Right now, the getRunfilesPath() returns that path, so that is renamed getExecRoot() (since the runfiles are really just a reflection of the execRoot structure).  getSourceRoot() replaces getPathFragment, which has always been a confusing name (it's not clear from the name
what the difference is between it and getPackageFragment()). It returns the relative path to source files for external repositories (external/repo_name).

Also renamed/moved to more sensible class a few static RepositoryName fields.

--
MOS_MIGRATED_REVID=128594419
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
index 2642687..1606c0e 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
@@ -342,7 +342,7 @@
       return null;
     }
 
-    RepositoryName repoName = PackageIdentifier.MAIN_REPOSITORY_NAME;
+    RepositoryName repoName = RepositoryName.MAIN;
 
     Pair<RepositoryName, PathFragment> repo = RepositoryName.fromPathFragment(dir);
     if (repo != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
index 3c137f9..495d5eb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
@@ -123,7 +123,7 @@
    * <p>For example "//pkg:target" -> "pkg/&lt;fragment&gt;/target.
    */
   public static PathFragment getUniqueDirectory(Label label, PathFragment fragment) {
-    return label.getPackageIdentifier().getPathFragment().getRelative(fragment)
+    return label.getPackageIdentifier().getSourceRoot().getRelative(fragment)
         .getRelative(label.getName());
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
index c6a0f4f..dc91ecb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
@@ -144,7 +144,7 @@
     ArtifactOwner owner =
         new ConfiguredTargetKey(rule.getLabel(), configuration.getArtifactOwnerConfiguration());
     PathFragment rootRelativePath =
-        outputFile.getLabel().getPackageIdentifier().getPathFragment().getRelative(
+        outputFile.getLabel().getPackageIdentifier().getSourceRoot().getRelative(
             outputFile.getLabel().getName());
     Artifact result = isFileset
         ? artifactFactory.getFilesetArtifact(rootRelativePath, root, owner)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 48e7f98..8965cb5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -582,7 +582,7 @@
    * {@link #getUniqueDirectoryArtifact(String, PathFragment, Root)}) ensures that this is the case.
    */
   public PathFragment getPackageDirectory() {
-    return getLabel().getPackageIdentifier().getPathFragment();
+    return getLabel().getPackageIdentifier().getSourceRoot();
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRule.java
index e906c11..418130b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/GenRule.java
@@ -38,7 +38,6 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
-import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
 import com.google.devtools.build.lib.packages.TargetUtils;
 import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
 import com.google.devtools.build.lib.syntax.Type;
@@ -204,7 +203,7 @@
                   dir = ruleContext.getConfiguration().getGenfilesFragment();
                 }
                 PathFragment relPath =
-                    ruleContext.getRule().getLabel().getPackageIdentifier().getPathFragment();
+                    ruleContext.getRule().getLabel().getPackageIdentifier().getSourceRoot();
                 return dir.getRelative(relPath).getPathString();
               }
             } else {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java
index f82c9fe..1e48a66 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java
@@ -72,7 +72,8 @@
   @Override
   public List<PathFragment> getImports(RuleContext ruleContext) {
     List<PathFragment> result = new ArrayList<>();
-    PathFragment packageFragment = ruleContext.getLabel().getPackageIdentifier().getRunfilesPath();
+    PathFragment packageFragment = ruleContext.getLabel().getPackageIdentifier()
+        .getPathUnderExecRoot();
     // Python scripts start with x.runfiles/ as the module space, so everything must be manually
     // adjusted to be relative to the workspace name.
     packageFragment = new PathFragment(ruleContext.getWorkspaceName())
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
index 9d57a44..a1050ae 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
@@ -134,13 +134,13 @@
       PackageIdentifier dir = entry.getKey();
       if (!dir.getRepository().isMain()) {
         FileSystemUtils.createDirectoryAndParents(
-            workspace.getRelative(dir.getRepository().getPathFragment()));
+            workspace.getRelative(dir.getRepository().getSourceRoot()));
       }
       if (entry.getValue().size() > 1) {
         if (LOG_FINER) {
-          LOG.finer("mkdir " + workspace.getRelative(dir.getPathFragment()));
+          LOG.finer("mkdir " + workspace.getRelative(dir.getSourceRoot()));
         }
-        FileSystemUtils.createDirectoryAndParents(workspace.getRelative(dir.getPathFragment()));
+        FileSystemUtils.createDirectoryAndParents(workspace.getRelative(dir.getSourceRoot()));
       }
     }
 
@@ -157,11 +157,11 @@
         // This is the top-most dir that can be linked to a single root. Make it so.
         Path root = roots.iterator().next();  // lone root in set
         if (LOG_FINER) {
-          LOG.finer("ln -s " + root.getRelative(dir.getPathFragment()) + " "
-              + workspace.getRelative(dir.getPathFragment()));
+          LOG.finer("ln -s " + root.getRelative(dir.getSourceRoot()) + " "
+              + workspace.getRelative(dir.getSourceRoot()));
         }
-        workspace.getRelative(dir.getPathFragment())
-            .createSymbolicLink(root.getRelative(dir.getPathFragment()));
+        workspace.getRelative(dir.getSourceRoot())
+            .createSymbolicLink(root.getRelative(dir.getSourceRoot()));
       }
     }
     // Make links for dirs within packages, skip parent-only dirs.
@@ -173,11 +173,11 @@
         if (pkgId != null) {
           Path root = packageRoots.get(pkgId);
           try {
-            Path absdir = root.getRelative(dir.getPathFragment());
+            Path absdir = root.getRelative(dir.getSourceRoot());
             if (absdir.isDirectory()) {
               if (LOG_FINER) {
                 LOG.finer("ln -s " + absdir + "/* "
-                    + workspace.getRelative(dir.getPathFragment()) + "/");
+                    + workspace.getRelative(dir.getSourceRoot()) + "/");
               }
               for (Path target : absdir.getDirectoryEntries()) {
                 PathFragment p = target.relativeTo(root);
@@ -202,14 +202,14 @@
       if (!pkgId.getPackageFragment().equals(PathFragment.EMPTY_FRAGMENT)) {
         continue;
       }
-      Path execrootDirectory = workspace.getRelative(pkgId.getPathFragment());
+      Path execrootDirectory = workspace.getRelative(pkgId.getSourceRoot());
       // If there were no subpackages, this directory might not exist yet.
       if (!execrootDirectory.exists()) {
         FileSystemUtils.createDirectoryAndParents(execrootDirectory);
       }
       // For the top-level directory, generate symlinks to everything in the directory instead of
       // the directory itself.
-      Path sourceDirectory = entry.getValue().getRelative(pkgId.getPathFragment());
+      Path sourceDirectory = entry.getValue().getRelative(pkgId.getSourceRoot());
       for (Path target : sourceDirectory.getDirectoryEntries()) {
         String baseName = target.getBaseName();
         Path execPath = execrootDirectory.getRelative(baseName);
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
index 65f0ce8..b5a6990 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
@@ -105,7 +105,7 @@
    */
   public static Label parseAbsolute(String absName, boolean defaultToMain)
       throws LabelSyntaxException {
-    String repo = defaultToMain ? "@" : PackageIdentifier.DEFAULT_REPOSITORY;
+    String repo = defaultToMain ? "@" : RepositoryName.DEFAULT_REPOSITORY;
     int packageStartPos = absName.indexOf("//");
     if (packageStartPos > 0) {
       repo = absName.substring(0, packageStartPos);
@@ -336,7 +336,7 @@
       + "<pre class=language-python>Label(\"@repo//pkg/foo:abc\").workspace_root =="
       + " \"external/repo\"</pre>")
   public String getWorkspaceRoot() {
-    return packageIdentifier.getRepository().getPathFragment().toString();
+    return packageIdentifier.getRepository().getSourceRoot().toString();
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java
index 6445f48..a20ea18 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java
@@ -47,27 +47,15 @@
     return INTERNER.intern(new PackageIdentifier(repository, pkgName));
   }
 
-  public static final String DEFAULT_REPOSITORY = "";
-  public static final RepositoryName DEFAULT_REPOSITORY_NAME;
-  public static final RepositoryName MAIN_REPOSITORY_NAME;
-  public static final PackageIdentifier EMPTY_PACKAGE_ID;
-
-  static {
-    try {
-      DEFAULT_REPOSITORY_NAME = RepositoryName.create(DEFAULT_REPOSITORY);
-      MAIN_REPOSITORY_NAME = RepositoryName.create("@");
-      EMPTY_PACKAGE_ID = createInMainRepo(PathFragment.EMPTY_FRAGMENT);
-    } catch (LabelSyntaxException e) {
-      throw new IllegalStateException(e);
-    }
-  }
+  public static final PackageIdentifier EMPTY_PACKAGE_ID = createInMainRepo(
+      PathFragment.EMPTY_FRAGMENT);
 
   public static PackageIdentifier createInMainRepo(String name) {
     return createInMainRepo(new PathFragment(name));
   }
 
   public static PackageIdentifier createInMainRepo(PathFragment name) {
-    return create(MAIN_REPOSITORY_NAME, name);
+    return create(RepositoryName.MAIN, name);
   }
 
   /**
@@ -99,10 +87,10 @@
     } else if (input.startsWith("@")) {
       throw new LabelSyntaxException("starts with a '@' but does not contain '//'");
     } else if (packageStartPos == 0) {
-      repo = PackageIdentifier.DEFAULT_REPOSITORY;
+      repo = RepositoryName.DEFAULT_REPOSITORY;
       packageName = input.substring(2);
     } else {
-      repo = PackageIdentifier.DEFAULT_REPOSITORY;
+      repo = RepositoryName.DEFAULT_REPOSITORY;
       packageName = input;
     }
 
@@ -128,19 +116,19 @@
   }
 
   /**
-   * Returns a relative path that should be unique across all remote and packages, based on the
-   * repository and package names.
+   * Returns a relative path to the source code for this package. Returns pkgName if this is in the
+   * main repository or external/[repository name]/[pkgName] if not.
    */
-  public PathFragment getPathFragment() {
-    return repository.getPathFragment().getRelative(pkgName);
+  public PathFragment getSourceRoot() {
+    return repository.getSourceRoot().getRelative(pkgName);
   }
 
   /**
-   * Returns the runfiles path for this repository (relative to the x.runfiles/main-repo/
+   * Returns the runfiles/execRoot path for this repository (relative to the x.runfiles/main-repo/
    * directory).
    */
-  public PathFragment getRunfilesPath() {
-    return getRepository().getRunfilesPath().getRelative(getPackageFragment());
+  public PathFragment getPathUnderExecRoot() {
+    return getRepository().getPathUnderExecRoot().getRelative(getPackageFragment());
   }
 
   public PackageIdentifier makeAbsolute() {
@@ -148,7 +136,7 @@
       return this;
     }
 
-    return create(MAIN_REPOSITORY_NAME, pkgName);
+    return create(RepositoryName.MAIN, pkgName);
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
index 6b89a6e..25332b3 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
@@ -35,6 +35,9 @@
  * A human-readable name for the repository.
  */
 public final class RepositoryName implements Serializable {
+  public static final String DEFAULT_REPOSITORY = "";
+  public static final RepositoryName DEFAULT;
+  public static final RepositoryName MAIN;
   private static final Pattern VALID_REPO_NAME = Pattern.compile("@[\\w\\-.]*");
 
   /** Helper for serializing {@link RepositoryName}. */
@@ -92,6 +95,15 @@
               }
             });
 
+  static {
+    try {
+      DEFAULT = RepositoryName.create(RepositoryName.DEFAULT_REPOSITORY);
+      MAIN = RepositoryName.create("@");
+    } catch (LabelSyntaxException e) {
+      throw new IllegalStateException(e);
+    }
+  }
+
   /**
    * Makes sure that name is a valid repository name and creates a new RepositoryName using it.
    *
@@ -108,7 +120,7 @@
 
   /**
    * Extracts the repository name from a PathFragment that was created with
-   * {@code PackageIdentifier.getPathFragment}.
+   * {@code PackageIdentifier.getSourceRoot}.
    *
    * @return a {@code Pair} of the extracted repository name and the path fragment with stripped
    * of "external/"-prefix and repository name, or null if none was found or the repository name
@@ -193,20 +205,21 @@
   }
 
   /**
-   * Returns the path at which this repository is mapped within the exec root.
+   * Returns the relative path to the repository source. Returns "" for the main repository and
+   * external/[repository name] for external repositories.
    */
-  public PathFragment getPathFragment() {
+  public PathFragment getSourceRoot() {
     return isDefault() || isMain()
         ? PathFragment.EMPTY_FRAGMENT
         : new PathFragment(Label.EXTERNAL_PATH_PREFIX).getRelative(strippedName());
   }
 
   /**
-   * Returns the runfiles path for this repository (relative to the x.runfiles/main-repo/
+   * Returns the runfiles/execRoot path for this repository (relative to the x.runfiles/main-repo/
    * directory). If we don't know the name of this repo (i.e., it is in the main repository),
    * return an empty path fragment.
    */
-  public PathFragment getRunfilesPath() {
+  public PathFragment getPathUnderExecRoot() {
     return isDefault() || isMain()
         ? PathFragment.EMPTY_FRAGMENT : new PathFragment("..").getRelative(strippedName());
   }
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
index 610a27e..13e5578 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
@@ -644,7 +644,7 @@
       }
 
       if (repository == null) {
-        repository = PackageIdentifier.MAIN_REPOSITORY_NAME;
+        repository = RepositoryName.MAIN;
       }
 
       if (packagePart.endsWith("/...")) {
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
index a7161f8..8f29d09 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
@@ -815,7 +815,7 @@
   private static PathFragment getOutputFilePath(ConfiguredTarget base, RuleContext ruleContext,
       String suffix) {
     PathFragment packagePathFragment =
-        ruleContext.getLabel().getPackageIdentifier().getPathFragment();
+        ruleContext.getLabel().getPackageIdentifier().getSourceRoot();
     String name = base.getLabel().getName();
     return new PathFragment(packagePathFragment, new PathFragment(name + suffix));
   }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/InputFile.java b/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
index 228af69..6f2fe22 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/InputFile.java
@@ -104,7 +104,7 @@
    * Returns the exec path of the file, i.e. the path relative to the package source root.
    */
   public PathFragment getExecPath() {
-    return label.getPackageIdentifier().getPathFragment().getRelative(label.getName());
+    return label.getPackageIdentifier().getSourceRoot().getRelative(label.getName());
   }
 
   @Override
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 3a01bc3..b05e6ae 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
@@ -103,7 +103,7 @@
 
   /**
    * The root of the source tree in which this package was found. It is an invariant that
-   * {@code sourceRoot.getRelative(packageId.getPathFragment()).equals(packageDirectory)}.
+   * {@code sourceRoot.getRelative(packageId.getSourceRoot()).equals(packageDirectory)}.
    */
   private Path sourceRoot;
 
@@ -292,9 +292,9 @@
     this.filename = builder.getFilename();
     this.packageDirectory = filename.getParentDirectory();
 
-    this.sourceRoot = getSourceRoot(filename, packageIdentifier.getPathFragment());
+    this.sourceRoot = getSourceRoot(filename, packageIdentifier.getSourceRoot());
     if ((sourceRoot == null
-        || !sourceRoot.getRelative(packageIdentifier.getPathFragment()).equals(packageDirectory))
+        || !sourceRoot.getRelative(packageIdentifier.getSourceRoot()).equals(packageDirectory))
         && !filename.getBaseName().equals("WORKSPACE")) {
       throw new IllegalArgumentException(
           "Invalid BUILD file name for package '" + packageIdentifier + "': " + filename);
@@ -345,7 +345,7 @@
    * Returns the source root (a directory) beneath which this package's BUILD file was found.
    *
    * <p> Assumes invariant:
-   * {@code getSourceRoot().getRelative(packageId.getPathFragment()).equals(getPackageDirectory())}
+   * {@code getSourceRoot().getRelative(packageId.getSourceRoot()).equals(getPackageDirectory())}
    */
   public Path getSourceRoot() {
     return sourceRoot;
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
index f00606d..4383505 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
@@ -111,7 +111,7 @@
       // is true for the invocation in GlobCache, but not for the locator.getBuildFileForPackage()
       // invocation in Parser#include().
       Path buildFile = outputBase.getRelative(
-          packageIdentifier.getPathFragment()).getRelative("BUILD");
+          packageIdentifier.getSourceRoot()).getRelative("BUILD");
       FileStatus stat = cache.get().statNullable(buildFile, Symlinks.FOLLOW);
       if (stat != null && stat.isFile()) {
         return buildFile;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index f9c5d52..30eac97 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -479,7 +479,7 @@
     // ones included in the binary, the path of the artifact has to be unique
     // per binary and per library (not only per library).
     Artifact artifact = ruleContext.getUniqueDirectoryArtifact("resource_jars",
-        container.getLabel().getPackageIdentifier().getPathFragment().getRelative(artifactName),
+        container.getLabel().getPackageIdentifier().getSourceRoot().getRelative(artifactName),
         ruleContext.getBinOrGenfilesDirectory());
     return artifact;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/LocalResourceContainer.java b/src/main/java/com/google/devtools/build/lib/rules/android/LocalResourceContainer.java
index 971ccf7..29d9a99 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/LocalResourceContainer.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/LocalResourceContainer.java
@@ -164,7 +164,7 @@
       for (TransitiveInfoCollection target : targets) {
         for (Artifact file : target.getProvider(FileProvider.class).getFilesToBuild()) {
           PathFragment packageFragment = file.getArtifactOwner().getLabel()
-              .getPackageIdentifier().getPathFragment();
+              .getPackageIdentifier().getSourceRoot();
           PathFragment packageRelativePath =
               file.getRootRelativePath().relativeTo(packageFragment);
           if (packageRelativePath.startsWith(assetsDir)) {
@@ -193,7 +193,7 @@
       for (FileProvider target : targets) {
         for (Artifact file : target.getFilesToBuild()) {
           PathFragment packageFragment = file.getArtifactOwner().getLabel()
-              .getPackageIdentifier().getPathFragment();
+              .getPackageIdentifier().getSourceRoot();
           PathFragment packageRelativePath =
               file.getRootRelativePath().relativeTo(packageFragment);
           PathFragment resourceDir = findResourceDir(file);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 51c2b52..a428ad3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -359,14 +359,14 @@
     List<PathFragment> result = new ArrayList<>();
     // The package directory of the rule contributes includes. Note that this also covers all
     // non-subpackage sub-directories.
-    PathFragment rulePackage = ruleContext.getLabel().getPackageIdentifier().getPathFragment();
+    PathFragment rulePackage = ruleContext.getLabel().getPackageIdentifier().getSourceRoot();
     result.add(rulePackage);
 
     // Gather up all the dirs from the rule's srcs as well as any of the srcs outputs.
     if (hasAttribute("srcs", BuildType.LABEL_LIST)) {
       for (TransitiveInfoCollection src :
           ruleContext.getPrerequisitesIf("srcs", Mode.TARGET, FileProvider.class)) {
-        PathFragment packageDir = src.getLabel().getPackageIdentifier().getPathFragment();
+        PathFragment packageDir = src.getLabel().getPackageIdentifier().getSourceRoot();
         for (Artifact a : src.getProvider(FileProvider.class).getFilesToBuild()) {
           result.add(packageDir);
           // Attempt to gather subdirectories that might contain include files.
@@ -378,7 +378,7 @@
     // Add in any 'includes' attribute values as relative path fragments
     if (ruleContext.getRule().isAttributeValueExplicitlySpecified("includes")) {
       PathFragment packageFragment = ruleContext.getLabel().getPackageIdentifier()
-          .getPathFragment();
+          .getSourceRoot();
       // For now, anything with an 'includes' needs a blanket declaration
       result.add(packageFragment.getRelative("**"));
     }
@@ -388,7 +388,7 @@
   List<PathFragment> getSystemIncludeDirs() {
     List<PathFragment> result = new ArrayList<>();
     PackageIdentifier packageIdentifier = ruleContext.getLabel().getPackageIdentifier();
-    PathFragment packageFragment = packageIdentifier.getPathFragment();
+    PathFragment packageFragment = packageIdentifier.getSourceRoot();
     for (String includesAttr : ruleContext.attributes().get("includes", Type.STRING_LIST)) {
       includesAttr = ruleContext.expandMakeVariables("includes", includesAttr);
       if (includesAttr.startsWith("/")) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
index 40b1b8b..f5c579d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
@@ -1095,7 +1095,7 @@
     // before the genfilesFragment to preferably pick up source files. Otherwise
     // we might pick up stale generated files.
     PathFragment repositoryPath =
-        ruleContext.getLabel().getPackageIdentifier().getRepository().getPathFragment();
+        ruleContext.getLabel().getPackageIdentifier().getRepository().getSourceRoot();
     contextBuilder.addQuoteIncludeDir(repositoryPath);
     contextBuilder.addQuoteIncludeDir(
         ruleContext.getConfiguration().getGenfilesFragment().getRelative(repositoryPath));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index aa138ff..59ec2d5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -355,7 +355,7 @@
     this.lipoContextCollector = cppOptions.lipoCollector;
 
 
-    this.crosstoolTopPathFragment = crosstoolTop.getPackageIdentifier().getPathFragment();
+    this.crosstoolTopPathFragment = crosstoolTop.getPackageIdentifier().getSourceRoot();
 
     try {
       this.staticRuntimeLibsLabel =
@@ -1009,7 +1009,7 @@
     if (packageEndIndex != -1 && s.startsWith(PACKAGE_START)) {
       String packageString = s.substring(PACKAGE_START.length(), packageEndIndex);
       try {
-        pathPrefix = PackageIdentifier.parse(packageString).getPathFragment();
+        pathPrefix = PackageIdentifier.parse(packageString).getSourceRoot();
       } catch (LabelSyntaxException e) {
         throw new InvalidConfigurationException("The package '" + packageString + "' is not valid");
       }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 6700f3b..9233bd4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -91,7 +91,7 @@
       if (stl != null) {
         // TODO(bazel-team): Clean this up.
         contextBuilder.addSystemIncludeDir(
-            stl.getLabel().getPackageIdentifier().getPathFragment().getRelative("gcc3"));
+            stl.getLabel().getPackageIdentifier().getSourceRoot().getRelative("gcc3"));
         contextBuilder.mergeDependentContext(stl.getProvider(CppCompilationContext.class));
       }
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java
index 36e2794..e8115e8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraActionSpec.java
@@ -195,7 +195,7 @@
   }
 
   private Artifact getRootRelativePath(String template, RuleContext ruleContext) {
-    PathFragment extraActionPackageFragment = label.getPackageIdentifier().getPathFragment();
+    PathFragment extraActionPackageFragment = label.getPackageIdentifier().getSourceRoot();
     PathFragment extraActionPrefix = extraActionPackageFragment.getRelative(label.getName());
     PathFragment rootRelativePath = new PathFragment("extra_actions")
         .getRelative(extraActionPrefix)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/filegroup/Filegroup.java b/src/main/java/com/google/devtools/build/lib/rules/filegroup/Filegroup.java
index 92aac6f..c2ad7d9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/filegroup/Filegroup.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/filegroup/Filegroup.java
@@ -121,7 +121,7 @@
     if (attr.isEmpty()) {
       return PathFragment.EMPTY_FRAGMENT;
     } else {
-      return ruleContext.getLabel().getPackageIdentifier().getPathFragment().getRelative(attr);
+      return ruleContext.getLabel().getPackageIdentifier().getSourceRoot().getRelative(attr);
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java b/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java
index 37271b8..3331115 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java
@@ -111,7 +111,7 @@
     if (jvmLabel == null || jvmLabel.getPackageIdentifier().getRepository().isMain()) {
       return getJavaExecutable();
     }
-    return jvmLabel.getPackageIdentifier().getRepository().getRunfilesPath().getRelative(BIN_JAVA);
+    return jvmLabel.getPackageIdentifier().getRepository().getPathUnderExecRoot().getRelative(BIN_JAVA);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
index 89104f9..c127140 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
@@ -129,7 +129,7 @@
             if (jvmTarget.getLabel().getPackageIdentifier().getRepository().isDefault()) {
               javaHomePath = jvmLabel.getPackageFragment();
             } else {
-              javaHomePath = jvmTarget.getLabel().getPackageIdentifier().getPathFragment();
+              javaHomePath = jvmTarget.getLabel().getPackageIdentifier().getSourceRoot();
             }
 
             if ((jvmTarget instanceof Rule) &&
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
index f41b101..3e15538 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
@@ -315,7 +315,7 @@
       builder.addModuleMapsForDirectDeps(moduleMaps.build());
 
       PathFragment packageFragment =
-          ruleContext.getLabel().getPackageIdentifier().getPathFragment();
+          ruleContext.getLabel().getPackageIdentifier().getSourceRoot();
       if (packageFragment != null) {
         builder.setPackageFragment(packageFragment);
       }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index ad2f501..00d0300 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -845,8 +845,8 @@
       // The label does not cross a subpackage boundary.
       return false;
     }
-    if (!containingPkg.getPathFragment().startsWith(
-        label.getPackageIdentifier().getPathFragment())) {
+    if (!containingPkg.getSourceRoot().startsWith(
+        label.getPackageIdentifier().getSourceRoot())) {
       // This label is referencing an imaginary package, because the containing package should
       // extend the label's package: if the label is //a/b:c/d, the containing package could be
       // //a/b/c or //a/b, but should never be //a. Usually such errors will be caught earlier, but
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java
index 604ef07..7ebb7b0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageLoaderWithValueEnvironment.java
@@ -74,7 +74,7 @@
   @Override
   public void addDependency(Package pkg, String fileName) throws LabelSyntaxException, IOException {
     RootedPath fileRootedPath = RootedPath.toRootedPath(pkg.getSourceRoot(),
-        pkg.getPackageIdentifier().getPathFragment().getRelative(fileName));
+        pkg.getPackageIdentifier().getSourceRoot().getRelative(fileName));
     FileValue result = (FileValue) env.getValue(FileValue.key(fileRootedPath));
     if (result != null && !result.exists()) {
       throw new IOException();