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);