diff options
Diffstat (limited to 'src/main/java/com/google')
28 files changed, 78 insertions, 77 deletions
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 2642687713..1606c0e783 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 @@ public class ArtifactFactory implements ArtifactResolver, ArtifactSerializer, Ar 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 3c137f915e..495d5ebdd4 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 @@ public final class AnalysisUtils { * <p>For example "//pkg:target" -> "pkg/<fragment>/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 c6a0f4f980..dc91ecb06b 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 @@ public final class ConfiguredTargetFactory { 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 48e7f98d6d..8965cb596a 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 @@ public final class RuleContext extends TargetContext * {@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 e906c11e17..418130b9eb 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.cmdline.Label; 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 @@ public class GenRule implements RuleConfiguredTargetFactory { 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 f82c9fef76..1e48a66bc5 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 @@ public class BazelPythonSemantics implements PythonSemantics { @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 9d57a44466..a1050ae3b3 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 @@ class SymlinkForest { 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 @@ class SymlinkForest { // 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 @@ class SymlinkForest { 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 @@ class SymlinkForest { 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 65f0ce867d..b5a699023e 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 final class Label implements Comparable<Label>, Serializable, SkylarkPrin */ 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 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin + "<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 6445f48b32..a20ea18883 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 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S 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 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S } 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 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S } /** - * 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 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S 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 6b89a6ee7a..25332b3dcb 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 @@ import java.util.regex.Pattern; * 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 @@ public final class RepositoryName implements Serializable { } }); + 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 @@ public final class RepositoryName implements Serializable { /** * 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 @@ public final class RepositoryName implements Serializable { } /** - * 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 610a27e014..13e5578044 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 @@ public abstract class TargetPattern implements Serializable { } 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 a7161f811a..8f29d09ae8 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 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config 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 228af69ee3..6f2fe22809 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 @@ public final class InputFile extends FileTarget { * 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 3a01bc3bf8..b05e6ae846 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 @@ public class Package { /** * 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 @@ public class Package { 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 @@ public class Package { * 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 f00606daf4..4383505f3b 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 @@ public class PathPackageLocator implements Serializable { // 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 f9c5d52a5c..30eac977bd 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 @@ public class AndroidCommon { // 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 971ccf7dfb..29d9a99369 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 @@ public final class LocalResourceContainer { 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 @@ public final class LocalResourceContainer { 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 51c2b52c4a..a428ad3a6a 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 @@ public final class CcCommon { 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 @@ public final class CcCommon { // 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 @@ public final class CcCommon { 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 40b1b8b7df..f5c579d1b8 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 @@ public final class CcLibraryHelper { // 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 aa138ffa24..59ec2d5374 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 @@ public class CppConfiguration extends BuildConfiguration.Fragment { this.lipoContextCollector = cppOptions.lipoCollector; - this.crosstoolTopPathFragment = crosstoolTop.getPackageIdentifier().getPathFragment(); + this.crosstoolTopPathFragment = crosstoolTop.getPackageIdentifier().getSourceRoot(); try { this.staticRuntimeLibsLabel = @@ -1009,7 +1009,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment { 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 6700f3ba54..9233bd4d3e 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 @@ public class CppHelper { 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 36e2794613..e8115e813d 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 @@ public final class ExtraActionSpec implements TransitiveInfoProvider { } 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 92aac6f623..c2ad7d91d8 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 @@ public class Filegroup implements RuleConfiguredTargetFactory { 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 37271b8b48..3331115052 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 @@ public final class Jvm extends BuildConfiguration.Fragment { 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 89104f9d0e..c127140e1e 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 @@ public final class JvmConfigurationLoader implements ConfigurationFragmentFactor 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 f41b101c2f..3e15538b79 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 @@ final class CompilationAttributes { 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 ad2f501612..00d0300336 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 @@ public class PackageFunction implements SkyFunction { // 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 604ef07b0c..7ebb7b0018 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 @@ class SkyframePackageLoaderWithValueEnvironment implements PackageProviderForCon @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(); |