RepoContext & PackageContext for Label constructors
RepoContext = RepositoryName + RepositoryMapping
PackageContext = PackageIdentifier + RepositoryMapping
= RepositoryName + PathFragment + RepositoryMapping
= RepoContext + PathFragment
Making these one object stresses the fact that they often need to be used together for correctness.
Work towards https://github.com/bazelbuild/bazel/issues/14852
PiperOrigin-RevId: 458437385
Change-Id: I68c0f61ebfcfbb2f5ff929d985bdfa0ac45a912a
diff --git a/src/main/java/com/google/devtools/build/lib/packages/LabelConverter.java b/src/main/java/com/google/devtools/build/lib/packages/LabelConverter.java
index cf3b7d7..1fef168 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/LabelConverter.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/LabelConverter.java
@@ -38,23 +38,24 @@
public static LabelConverter forBzlEvaluatingThread(StarlarkThread thread) {
BazelModuleContext moduleContext =
BazelModuleContext.of(Module.ofInnermostEnclosingStarlarkFunction(thread));
- return new LabelConverter(
- moduleContext.label().getPackageIdentifier(), moduleContext.repoMapping());
+ return new LabelConverter(moduleContext.packageContext());
}
- private final PackageIdentifier base;
- private final RepositoryMapping repositoryMapping;
+ private final Label.PackageContext packageContext;
private final Map<String, Label> labelCache = new HashMap<>();
+ public LabelConverter(Label.PackageContext packageContext) {
+ this.packageContext = packageContext;
+ }
+
/** Creates a label converter using the given base package and repo mapping. */
public LabelConverter(PackageIdentifier base, RepositoryMapping repositoryMapping) {
- this.base = base;
- this.repositoryMapping = repositoryMapping;
+ this(Label.PackageContext.of(base, repositoryMapping));
}
/** Returns the base package identifier that relative labels will be resolved against. */
PackageIdentifier getBasePackage() {
- return base;
+ return packageContext.packageIdentifier();
}
/** Returns the Label corresponding to the input, using the current conversion context. */
@@ -65,7 +66,7 @@
// label-strings across all their attribute values.
Label converted = labelCache.get(input);
if (converted == null) {
- converted = Label.parseWithPackageContext(input, base, repositoryMapping);
+ converted = Label.parseWithPackageContext(input, packageContext);
labelCache.put(input, converted);
}
return converted;
@@ -73,6 +74,6 @@
@Override
public String toString() {
- return base.toString();
+ return getBasePackage().toString();
}
}