Merge AbsoluteLabelImport and RelativeLabelImport classes.
RELNOTES: None.
PiperOrigin-RevId: 243623858
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java
index 27aa931..bba4459 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java
@@ -23,6 +23,7 @@
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
+import javax.annotation.Nullable;
/**
* Factory class for creating appropriate instances of {@link SkylarkImports}.
@@ -37,38 +38,27 @@
@VisibleForSerialization
@AutoCodec
- static final class AbsoluteLabelImport extends SkylarkImport {
- private final Label importLabel;
+ static final class LabelImport extends SkylarkImport {
+ @Nullable private final Label importLabel;
@VisibleForSerialization
- AbsoluteLabelImport(String importString, Label importLabel) {
+ LabelImport(String importString, @Nullable Label importLabel) {
super(importString);
this.importLabel = importLabel;
}
@Override
public Label getLabel(Label containingFileLabel) {
- // When the import label contains no explicit repository identifier, we resolve it relative
- // to the repo of the containing file.
- return containingFileLabel.resolveRepositoryRelative(importLabel);
- }
- }
+ if (importLabel != null) {
+ // When the import label contains no explicit repository identifier, we resolve it relative
+ // to the repo of the containing file.
+ return containingFileLabel.resolveRepositoryRelative(importLabel);
+ }
- @VisibleForSerialization
- @AutoCodec
- static final class RelativeLabelImport extends SkylarkImport {
- @VisibleForSerialization
- RelativeLabelImport(String importString) {
- super(importString);
- }
-
- @Override
- public Label getLabel(Label containingFileLabel) {
- // Unlike a relative path import, the import target is relative to the containing package,
- // not the containing directory within the package.
+ // The import target is relative to the containing package, not the containing directory
+ // within the package.
try {
- // This is for imports relative to the current repository, so repositoryMapping can be
- // empty
+ // This is for imports relative to the current repository, so repositoryMapping can be empty
return containingFileLabel.getRelativeWithRemapping(getImportString(), ImmutableMap.of());
} catch (LabelSyntaxException e) {
// shouldn't happen because the parent label is assumed validated and the target string is
@@ -147,7 +137,7 @@
if (packageId.equals(LabelConstants.EXTERNAL_PACKAGE_IDENTIFIER)) {
throw new SkylarkImportSyntaxException(EXTERNAL_PKG_NOT_ALLOWED_MSG);
}
- return new AbsoluteLabelImport(importString, importLabel);
+ return new LabelImport(importString, importLabel);
} else if (importString.startsWith(":")) {
// Relative label. We require that relative labels use an explicit ':' prefix.
String importTarget = importString.substring(1);
@@ -156,7 +146,7 @@
// Null indicates successful target validation.
throw new SkylarkImportSyntaxException(INVALID_TARGET_PREFIX + maybeErrMsg);
}
- return new RelativeLabelImport(importString);
+ return new LabelImport(importString, null);
}
throw new SkylarkImportSyntaxException(INVALID_PATH_SYNTAX);