Change RepositoryMapping's key type to String

An instance of RepositoryName should always represent a post-repo-mapping, canonical repo name (as it already does except when used with the RepositoryMapping class). Well, also except when ownerRepo() is non-null :)

PiperOrigin-RevId: 454141003
Change-Id: Ie79a9c0d6ead773f9b3f7633e1a7d260a0c49970
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionValue.java
index f1f348a..9c7e811 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionValue.java
@@ -100,7 +100,7 @@
    * module deps and module extensions.
    */
   public final RepositoryMapping getFullRepoMapping(ModuleKey key) {
-    ImmutableMap.Builder<RepositoryName, RepositoryName> mapping = ImmutableMap.builder();
+    ImmutableMap.Builder<String, RepositoryName> mapping = ImmutableMap.builder();
     for (Map.Entry<ModuleExtensionId, ModuleExtensionUsage> e :
         getExtensionUsagesTable().column(key).entrySet()) {
       ModuleExtensionId extensionId = e.getKey();
@@ -108,9 +108,7 @@
       for (Map.Entry<String, String> entry : usage.getImports().entrySet()) {
         String canonicalRepoName =
             getExtensionUniqueNames().get(extensionId) + "." + entry.getValue();
-        mapping.put(
-            RepositoryName.createUnvalidated(entry.getKey()),
-            RepositoryName.createUnvalidated(canonicalRepoName));
+        mapping.put(entry.getKey(), RepositoryName.createUnvalidated(canonicalRepoName));
       }
     }
     return getDepGraph()
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/Module.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/Module.java
index 5bc8980..c561612 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/Module.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/Module.java
@@ -106,24 +106,21 @@
    * extensions. For the full mapping, see {@link BazelModuleResolutionValue#getFullRepoMapping}.
    */
   public final RepositoryMapping getRepoMappingWithBazelDepsOnly() {
-    ImmutableMap.Builder<RepositoryName, RepositoryName> mapping = ImmutableMap.builder();
+    ImmutableMap.Builder<String, RepositoryName> mapping = ImmutableMap.builder();
     // If this is the root module, then the main repository should be visible as `@`.
     if (getKey().equals(ModuleKey.ROOT)) {
-      mapping.put(RepositoryName.MAIN, RepositoryName.MAIN);
+      mapping.put("", RepositoryName.MAIN);
     }
     // Every module should be able to reference itself as @<module name>.
     // If this is the root module, this perfectly falls into @<module name> => @
     if (!getName().isEmpty()) {
-      mapping.put(
-          RepositoryName.createUnvalidated(getName()),
-          RepositoryName.createUnvalidated(getCanonicalRepoName()));
+      mapping.put(getName(), RepositoryName.createUnvalidated(getCanonicalRepoName()));
     }
     for (Map.Entry<String, ModuleKey> dep : getDeps().entrySet()) {
       // Special note: if `dep` is actually the root module, its ModuleKey would be ROOT whose
       // canonicalRepoName is the empty string. This perfectly maps to the main repo ("@").
       mapping.put(
-          RepositoryName.createUnvalidated(dep.getKey()),
-          RepositoryName.createUnvalidated(dep.getValue().getCanonicalRepoName()));
+          dep.getKey(), RepositoryName.createUnvalidated(dep.getValue().getCanonicalRepoName()));
     }
     return RepositoryMapping.create(mapping.buildOrThrow(), getCanonicalRepoName());
   }
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 210c618..ebd9799 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
@@ -102,8 +102,7 @@
       // disregarding the current repo and repo mappings.
       return ABSOLUTE_PACKAGE_NAMES.contains(parts.pkg) ? RepositoryName.MAIN : currentRepo;
     }
-    // TODO(b/200024947): Make repo mapping take a string and return a RepositoryName.
-    return repoMapping.get(RepositoryName.createUnvalidated(parts.repo));
+    return repoMapping.get(parts.repo);
   }
 
   /**
@@ -174,7 +173,7 @@
 
   // TODO(b/200024947): Remove this.
   public static Label parseAbsolute(
-      String absName, ImmutableMap<RepositoryName, RepositoryName> repositoryMapping)
+      String absName, ImmutableMap<String, RepositoryName> repositoryMapping)
       throws LabelSyntaxException {
     return parseAbsolute(absName, RepositoryMapping.createAllowingFallback(repositoryMapping));
   }
@@ -486,7 +485,7 @@
 
   // TODO(b/200024947): Remove this.
   public Label getRelativeWithRemapping(
-      String relName, ImmutableMap<RepositoryName, RepositoryName> repositoryMapping)
+      String relName, ImmutableMap<String, RepositoryName> repositoryMapping)
       throws LabelSyntaxException {
     return getRelativeWithRemapping(
         relName, RepositoryMapping.createAllowingFallback(repositoryMapping));
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java
index 0a640ae..7d841d4 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryMapping.java
@@ -35,7 +35,7 @@
   // Always fallback to the requested name
   public static final RepositoryMapping ALWAYS_FALLBACK = createAllowingFallback(ImmutableMap.of());
 
-  abstract ImmutableMap<RepositoryName, RepositoryName> repositoryMapping();
+  abstract ImmutableMap<String, RepositoryName> repositoryMapping();
 
   /**
    * The owner repo of this repository mapping. It is for providing useful debug information when
@@ -46,14 +46,14 @@
   abstract String ownerRepo();
 
   public static RepositoryMapping create(
-      Map<RepositoryName, RepositoryName> repositoryMapping, String ownerRepo) {
+      Map<String, RepositoryName> repositoryMapping, String ownerRepo) {
     return new AutoValue_RepositoryMapping(
         ImmutableMap.copyOf(Preconditions.checkNotNull(repositoryMapping)),
         Preconditions.checkNotNull(ownerRepo));
   }
 
   public static RepositoryMapping createAllowingFallback(
-      Map<RepositoryName, RepositoryName> repositoryMapping) {
+      Map<String, RepositoryName> repositoryMapping) {
     return new AutoValue_RepositoryMapping(
         ImmutableMap.copyOf(Preconditions.checkNotNull(repositoryMapping)), null);
   }
@@ -62,9 +62,8 @@
    * Create a new {@link RepositoryMapping} instance based on existing repo mappings and given
    * additional mappings. If there are conflicts, existing mappings will take precedence.
    */
-  public RepositoryMapping withAdditionalMappings(
-      Map<RepositoryName, RepositoryName> additionalMappings) {
-    HashMap<RepositoryName, RepositoryName> allMappings = new HashMap<>(additionalMappings);
+  public RepositoryMapping withAdditionalMappings(Map<String, RepositoryName> additionalMappings) {
+    HashMap<String, RepositoryName> allMappings = new HashMap<>(additionalMappings);
     allMappings.putAll(repositoryMapping());
     return new AutoValue_RepositoryMapping(ImmutableMap.copyOf(allMappings), ownerRepo());
   }
@@ -78,13 +77,20 @@
     return withAdditionalMappings(additionalMappings.repositoryMapping());
   }
 
-  public RepositoryName get(RepositoryName repositoryName) {
-    // If the owner repo is not present, that means we should fallback to the requested repo name.
+  /**
+   * Returns the canonical repository name associated with the given apparent repo name. The
+   * provided apparent repo name is assumed to be valid.
+   */
+  public RepositoryName get(String apparentRepoName) {
+    RepositoryName canonicalRepoName = repositoryMapping().get(apparentRepoName);
+    if (canonicalRepoName != null) {
+      return canonicalRepoName;
+    }
+    // If the owner repo is not present, that means we should fall back to the requested repo name.
     if (ownerRepo() == null) {
-      return repositoryMapping().getOrDefault(repositoryName, repositoryName);
+      return RepositoryName.createUnvalidated(apparentRepoName);
     } else {
-      return repositoryMapping()
-          .getOrDefault(repositoryName, repositoryName.toNonVisible(ownerRepo()));
+      return RepositoryName.createUnvalidated(apparentRepoName).toNonVisible(ownerRepo());
     }
   }
 }
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 a647563..46409aa 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
@@ -29,7 +29,7 @@
 import java.util.regex.Pattern;
 import javax.annotation.Nullable;
 
-/** The name of an external repository. */
+/** The canonical name of an external repository. */
 public final class RepositoryName {
 
   @SerializationConstant
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 e9a77a6..78f001a 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
@@ -909,11 +909,13 @@
           throw new TargetParsingException(
               "Couldn't find package in target " + pattern, TargetPatterns.Code.PACKAGE_NOT_FOUND);
         }
+        String repoPart = pattern.substring(1, pkgStart);
         try {
-          repository = repoMapping.get(RepositoryName.create(pattern.substring(1, pkgStart)));
+          RepositoryName.validate(repoPart);
         } catch (LabelSyntaxException e) {
           throw new TargetParsingException(e.getMessage(), TargetPatterns.Code.LABEL_SYNTAX_ERROR);
         }
+        repository = repoMapping.get(repoPart);
         if (!repository.isVisible()) {
           throw new TargetParsingException(
               String.format(
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 cfb0214..4682436 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
@@ -221,12 +221,11 @@
   private Set<License.DistributionType> defaultDistributionSet;
 
   /**
-   * The map from each repository to that repository's remappings map.
-   * This is only used in the //external package, it is an empty map for all other packages.
-   * For example, an entry of {"@foo" : {"@x", "@y"}} indicates that, within repository foo,
-   * "@x" should be remapped to "@y".
+   * The map from each repository to that repository's remappings map. This is only used in the
+   * //external package, it is an empty map for all other packages. For example, an entry of {"@foo"
+   * : {"@x", "@y"}} indicates that, within repository foo, "@x" should be remapped to "@y".
    */
-  private ImmutableMap<RepositoryName, ImmutableMap<RepositoryName, RepositoryName>>
+  private ImmutableMap<RepositoryName, ImmutableMap<String, RepositoryName>>
       externalPackageRepositoryMappings;
 
   /**
@@ -287,25 +286,15 @@
   /**
    * Returns the repository mapping for the requested external repository.
    *
-   * @throws UnsupportedOperationException if called from a package other than
-   *     the //external package
+   * @throws UnsupportedOperationException if called from a package other than the //external
+   *     package
    */
-  public ImmutableMap<RepositoryName, RepositoryName> getRepositoryMapping(
-      RepositoryName repository) {
+  public ImmutableMap<String, RepositoryName> getRepositoryMapping(RepositoryName repository) {
     if (!packageIdentifier.equals(LabelConstants.EXTERNAL_PACKAGE_IDENTIFIER)) {
       throw new UnsupportedOperationException("Can only access the external package repository"
           + "mappings from the //external package");
     }
-
-    // We are passed a repository name as seen from the main repository, not necessarily
-    // a canonical repository name. So, we first have to find the canonical name for the
-    // repository in question before we can look up the mapping for it.
-    RepositoryName actualRepositoryName =
-        externalPackageRepositoryMappings
-            .getOrDefault(RepositoryName.MAIN, ImmutableMap.of())
-            .getOrDefault(repository, repository);
-
-    return externalPackageRepositoryMappings.getOrDefault(actualRepositoryName, ImmutableMap.of());
+    return externalPackageRepositoryMappings.getOrDefault(repository, ImmutableMap.of());
   }
 
   /** Get the repository mapping for this package. */
@@ -319,7 +308,7 @@
    * @throws UnsupportedOperationException if called from a package other than the //external
    *     package
    */
-  ImmutableMap<RepositoryName, ImmutableMap<RepositoryName, RepositoryName>>
+  ImmutableMap<RepositoryName, ImmutableMap<String, RepositoryName>>
       getExternalPackageRepositoryMappings() {
     if (!packageIdentifier.equals(LabelConstants.EXTERNAL_PACKAGE_IDENTIFIER)) {
       throw new UnsupportedOperationException(
@@ -467,7 +456,7 @@
     this.registeredExecutionPlatforms = ImmutableList.copyOf(builder.registeredExecutionPlatforms);
     this.registeredToolchains = ImmutableList.copyOf(builder.registeredToolchains);
     this.repositoryMapping = Preconditions.checkNotNull(builder.repositoryMapping);
-    ImmutableMap.Builder<RepositoryName, ImmutableMap<RepositoryName, RepositoryName>>
+    ImmutableMap.Builder<RepositoryName, ImmutableMap<String, RepositoryName>>
         repositoryMappingsBuilder = ImmutableMap.builder();
     if (!builder.externalPackageRepositoryMappings.isEmpty() && !builder.isWorkspace()) {
       // 'repo_mapping' should only be used in the //external package, i.e. should only appear
@@ -935,7 +924,7 @@
 
     // The map from each repository to that repository's remappings map.
     // This is only used in the //external package, it is an empty map for all other packages.
-    private final HashMap<RepositoryName, HashMap<RepositoryName, RepositoryName>>
+    private final HashMap<RepositoryName, HashMap<String, RepositoryName>>
         externalPackageRepositoryMappings = new HashMap<>();
     /**
      * The map of repository reassignments for BUILD packages loaded within external repositories.
@@ -1092,30 +1081,30 @@
     }
 
     /**
-     * Updates the externalPackageRepositoryMappings entry for {@code repoWithin}. Adds new
-     * entry from {@code localName} to {@code mappedName} in {@code repoWithin}'s map.
+     * Updates the externalPackageRepositoryMappings entry for {@code repoWithin}. Adds new entry
+     * from {@code localName} to {@code mappedName} in {@code repoWithin}'s map.
      *
      * @param repoWithin the RepositoryName within which the mapping should apply
-     * @param localName the RepositoryName that actually appears in the WORKSPACE and BUILD files
-     *    in the {@code repoWithin} repository
+     * @param localName the name that actually appears in the WORKSPACE and BUILD files in the
+     *     {@code repoWithin} repository
      * @param mappedName the RepositoryName by which localName should be referenced
      */
     Builder addRepositoryMappingEntry(
-        RepositoryName repoWithin, RepositoryName localName, RepositoryName mappedName) {
-      HashMap<RepositoryName, RepositoryName> mapping =
-          externalPackageRepositoryMappings
-              .computeIfAbsent(repoWithin, (RepositoryName k) -> new HashMap<>());
+        RepositoryName repoWithin, String localName, RepositoryName mappedName) {
+      HashMap<String, RepositoryName> mapping =
+          externalPackageRepositoryMappings.computeIfAbsent(
+              repoWithin, (RepositoryName k) -> new HashMap<>());
       mapping.put(localName, mappedName);
       return this;
     }
 
     /** Adds all the mappings from a given {@link Package}. */
     Builder addRepositoryMappings(Package aPackage) {
-      ImmutableMap<RepositoryName, ImmutableMap<RepositoryName, RepositoryName>>
-          repositoryMappings = aPackage.externalPackageRepositoryMappings;
-      for (Map.Entry<RepositoryName, ImmutableMap<RepositoryName, RepositoryName>> repositoryName :
+      ImmutableMap<RepositoryName, ImmutableMap<String, RepositoryName>> repositoryMappings =
+          aPackage.externalPackageRepositoryMappings;
+      for (Map.Entry<RepositoryName, ImmutableMap<String, RepositoryName>> repositoryName :
           repositoryMappings.entrySet()) {
-        for (Map.Entry<RepositoryName, RepositoryName> repositoryNameRepositoryNameEntry :
+        for (Map.Entry<String, RepositoryName> repositoryNameRepositoryNameEntry :
             repositoryName.getValue().entrySet()) {
           addRepositoryMappingEntry(
               repositoryName.getKey(),
@@ -1163,7 +1152,7 @@
      * the main workspace to the canonical main name '@').
      */
     RepositoryMapping getRepositoryMappingFor(RepositoryName name) {
-      Map<RepositoryName, RepositoryName> mapping = externalPackageRepositoryMappings.get(name);
+      Map<String, RepositoryName> mapping = externalPackageRepositoryMappings.get(name);
       if (mapping == null) {
         return RepositoryMapping.ALWAYS_FALLBACK;
       } else {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java
index 7f0d951..7a28962 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactoryHelper.java
@@ -105,7 +105,7 @@
       // is not valid.
       builder.addRepositoryMappingEntry(
           RepositoryName.create(externalRepoName),
-          RepositoryName.create(builder.getPackageWorkspaceName()),
+          builder.getPackageWorkspaceName(),
           RepositoryName.MAIN);
     }
   }
@@ -128,15 +128,26 @@
         // prefixed with an @.
         if (!e.getKey().startsWith("@")) {
           throw new LabelSyntaxException(
-              "invalid repository name '" + e.getKey() + "': repo names must start with '@'");
+              "invalid repository name '"
+                  + e.getKey()
+                  + "': repo names used in the repo_mapping attribute must start with '@'");
         }
         if (!e.getValue().startsWith("@")) {
           throw new LabelSyntaxException(
-              "invalid repository name '" + e.getValue() + "': repo names must start with '@'");
+              "invalid repository name '"
+                  + e.getValue()
+                  + "': repo names used in the repo_mapping attribute must start with '@'");
+        }
+        if (!WorkspaceGlobals.isLegalWorkspaceName(e.getKey().substring(1))) {
+          throw new LabelSyntaxException(
+              "invalid repository name '"
+                  + e.getKey().substring(1)
+                  + "': must start with a letter and contain only letters, digits, '.', '-', or"
+                  + " '_'");
         }
         builder.addRepositoryMappingEntry(
             RepositoryName.create(externalRepoName),
-            RepositoryName.create(e.getKey().substring(1)),
+            e.getKey().substring(1),
             RepositoryName.create(e.getValue().substring(1)));
       }
     }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
index fa1061a..8f15a74 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
@@ -102,7 +102,7 @@
   private final ImmutableMap<String, Object> bindings;
   private final ImmutableMap<String, Module> loadedModules;
   private final ImmutableMap<String, Integer> loadToChunkMap;
-  private final ImmutableMap<RepositoryName, ImmutableMap<RepositoryName, RepositoryName>>
+  private final ImmutableMap<RepositoryName, ImmutableMap<String, RepositoryName>>
       repositoryMapping;
   // Mapping of the relative paths of the incrementally updated managed directories
   // to the managing external repositories
@@ -221,8 +221,7 @@
     return loadToChunkMap;
   }
 
-  public ImmutableMap<RepositoryName, ImmutableMap<RepositoryName, RepositoryName>>
-      getRepositoryMapping() {
+  public ImmutableMap<RepositoryName, ImmutableMap<String, RepositoryName>> getRepositoryMapping() {
     return repositoryMapping;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
index 63ddfd8..f277bde 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
@@ -100,8 +100,7 @@
     }
     // Add entry in repository map from "@name" --> "@" to avoid issue where bazel
     // treats references to @name as a separate external repo
-    builder.addRepositoryMappingEntry(
-        RepositoryName.MAIN, RepositoryName.createUnvalidated(name), RepositoryName.MAIN);
+    builder.addRepositoryMappingEntry(RepositoryName.MAIN, name, RepositoryName.MAIN);
     parseManagedDirectories(
         thread.getSemantics().getBool(BuildLanguageOptions.INCOMPATIBLE_DISABLE_MANAGE_DIRECTORIES),
         Dict.cast(managedDirectories, String.class, Object.class, "managed_directories"));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java
index 58512bc..b5bc8b8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java
@@ -35,6 +35,7 @@
 import com.google.devtools.build.skyframe.SkyValue;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
@@ -63,7 +64,7 @@
         return RepositoryMappingValue.withMapping(
             RepositoryMapping.create(
                     ImmutableMap.of(
-                        StarlarkBuiltinsValue.BUILTINS_REPO, StarlarkBuiltinsValue.BUILTINS_REPO),
+                        StarlarkBuiltinsValue.BUILTINS_NAME, StarlarkBuiltinsValue.BUILTINS_REPO),
                     StarlarkBuiltinsValue.BUILTINS_NAME)
                 .withAdditionalMappings(bazelToolsMapping.getRepositoryMapping()));
       }
@@ -83,7 +84,7 @@
         if (env.valuesMissing()) {
           return null;
         }
-        Map<RepositoryName, RepositoryName> additionalMappings =
+        Map<String, RepositoryName> additionalMappings =
             externalPackageValue.getPackage().getTargets().entrySet().stream()
                 // We need to filter out the non repository rule targets in the //external package.
                 .filter(
@@ -92,8 +93,7 @@
                             && !entry.getValue().getAssociatedRule().getRuleClass().equals("bind"))
                 .collect(
                     Collectors.toMap(
-                        entry -> RepositoryName.createUnvalidated(entry.getKey()),
-                        entry -> RepositoryName.createUnvalidated(entry.getKey())));
+                        Entry::getKey, entry -> RepositoryName.createUnvalidated(entry.getKey())));
         return RepositoryMappingValue.withMapping(
             computeForBazelModuleRepo(repositoryName, bazelModuleResolutionValue)
                 .get()
@@ -171,11 +171,11 @@
         bazelModuleResolutionValue.getExtensionUniqueNames().get(extensionId);
     // Compute the "internal mappings", containing the mappings from the "internal" names to
     // canonical names of all repos generated by this extension.
-    ImmutableMap<RepositoryName, RepositoryName> internalMapping =
+    ImmutableMap<String, RepositoryName> internalMapping =
         moduleExtensionResolutionValue.getExtensionIdToRepoInternalNames().get(extensionId).stream()
             .collect(
                 toImmutableMap(
-                    RepositoryName::createUnvalidated,
+                    internalName -> internalName,
                     internalName ->
                         RepositoryName.createUnvalidated(
                             extensionUniqueName + "." + internalName)));
@@ -213,7 +213,7 @@
     // there is a module called "foo" in the dep graph and its version is 1.3, that is).
     ImmutableMap<String, ModuleKey> moduleNameLookup =
         bazelModuleResolutionValue.getModuleNameLookup();
-    HashMap<RepositoryName, RepositoryName> mapping = new HashMap<>();
+    HashMap<String, RepositoryName> mapping = new HashMap<>();
     mapping.putAll(
         Maps.transformValues(
             externalPackage.getRepositoryMapping(repositoryName),
@@ -230,7 +230,7 @@
     // anyways.
     for (Map.Entry<String, ModuleKey> entry : moduleNameLookup.entrySet()) {
       mapping.putIfAbsent(
-          RepositoryName.createUnvalidated(entry.getKey()),
+          entry.getKey(),
           RepositoryName.createUnvalidated(entry.getValue().getCanonicalRepoName()));
     }
     return RepositoryMappingValue.withMapping(
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/LocationExpanderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/LocationExpanderTest.java
index dfe77aa..abdeb1e 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/LocationExpanderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/LocationExpanderTest.java
@@ -130,8 +130,8 @@
         .add("@bar//a", "/exec/src/a")
         .build();
 
-    ImmutableMap<RepositoryName, RepositoryName> repositoryMapping =
-        ImmutableMap.of(RepositoryName.create("foo"), RepositoryName.create("bar"));
+    ImmutableMap<String, RepositoryName> repositoryMapping =
+        ImmutableMap.of("foo", RepositoryName.create("bar"));
 
     LocationExpander locationExpander =
         new LocationExpander(
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/LocationFunctionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/LocationFunctionTest.java
index 9f9b390..021c236 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/LocationFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/LocationFunctionTest.java
@@ -154,9 +154,8 @@
 
   @Test
   public void locationFunctionWithMappingReplace() throws Exception {
-    RepositoryName a = RepositoryName.create("a");
     RepositoryName b = RepositoryName.create("b");
-    ImmutableMap<RepositoryName, RepositoryName> repositoryMapping = ImmutableMap.of(a, b);
+    ImmutableMap<String, RepositoryName> repositoryMapping = ImmutableMap.of("a", b);
     LocationFunction func =
         new LocationFunctionBuilder("//foo", false).add("@b//foo", "/exec/src/bar").build();
     assertThat(func.apply("@a//foo", RepositoryMapping.createAllowingFallback(repositoryMapping)))
@@ -165,9 +164,8 @@
 
   @Test
   public void locationFunctionWithMappingIgnoreRepo() throws Exception {
-    RepositoryName a = RepositoryName.create("a");
     RepositoryName b = RepositoryName.create("b");
-    ImmutableMap<RepositoryName, RepositoryName> repositoryMapping = ImmutableMap.of(a, b);
+    ImmutableMap<String, RepositoryName> repositoryMapping = ImmutableMap.of("a", b);
     LocationFunction func =
         new LocationFunctionBuilder("//foo", false).add("@potato//foo", "/exec/src/bar").build();
     assertThat(
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodTestUtil.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodTestUtil.java
index 31c9920..a7eb90b 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodTestUtil.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BzlmodTestUtil.java
@@ -133,11 +133,9 @@
   }
 
   public static RepositoryMapping createRepositoryMapping(ModuleKey key, String... names) {
-    ImmutableMap.Builder<RepositoryName, RepositoryName> mappingBuilder = ImmutableMap.builder();
+    ImmutableMap.Builder<String, RepositoryName> mappingBuilder = ImmutableMap.builder();
     for (int i = 0; i < names.length; i += 2) {
-      mappingBuilder.put(
-          RepositoryName.createUnvalidated(names[i]),
-          RepositoryName.createUnvalidated(names[i + 1]));
+      mappingBuilder.put(names[i], RepositoryName.createUnvalidated(names[i + 1]));
     }
     return RepositoryMapping.create(mappingBuilder.buildOrThrow(), key.getCanonicalRepoName());
   }
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java
index f338a44..c426702 100644
--- a/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java
+++ b/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java
@@ -119,8 +119,8 @@
   public void testGetRelativeWithoutRemappingBaseLabel() throws Exception {
     PackageIdentifier packageId = PackageIdentifier.create("a", PathFragment.create("foo"));
     Label base = Label.create(packageId, "bar");
-    ImmutableMap<RepositoryName, RepositoryName> repoMapping =
-        ImmutableMap.of(RepositoryName.create("a"), RepositoryName.create("b"));
+    ImmutableMap<String, RepositoryName> repoMapping =
+        ImmutableMap.of("a", RepositoryName.create("b"));
     Label relative = base.getRelativeWithRemapping(":y", repoMapping);
 
     // getRelative should only remap repositories passed in the string arg and not
@@ -133,8 +133,8 @@
   public void testGetRelativeWithDifferentRepoAndRemapping() throws Exception {
     PackageIdentifier packageId = PackageIdentifier.create("repo", PathFragment.create("foo"));
     Label base = Label.create(packageId, "bar");
-    ImmutableMap<RepositoryName, RepositoryName> repoMapping =
-        ImmutableMap.of(RepositoryName.create("a"), RepositoryName.create("b"));
+    ImmutableMap<String, RepositoryName> repoMapping =
+        ImmutableMap.of("a", RepositoryName.create("b"));
     Label relative = base.getRelativeWithRemapping("@a//x:y", repoMapping);
 
     Label actual = Label.parseAbsoluteUnchecked("@b//x:y");
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/RepositoryMappingTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/RepositoryMappingTest.java
index 7108649..4f23021 100644
--- a/src/test/java/com/google/devtools/build/lib/cmdline/RepositoryMappingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/cmdline/RepositoryMappingTest.java
@@ -21,7 +21,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-/** Tests for @{link RepositoryMapping}. */
+/** Tests for {@link RepositoryMapping}. */
 @RunWith(JUnit4.class)
 public final class RepositoryMappingTest {
 
@@ -29,21 +29,18 @@
   public void maybeFallback() throws Exception {
     RepositoryMapping mapping =
         RepositoryMapping.createAllowingFallback(
-            ImmutableMap.of(RepositoryName.create("A"), RepositoryName.create("com_foo_bar_a")));
-    assertThat(mapping.get(RepositoryName.create("A")))
-        .isEqualTo(RepositoryName.create("com_foo_bar_a"));
-    assertThat(mapping.get(RepositoryName.create("B"))).isEqualTo(RepositoryName.create("B"));
+            ImmutableMap.of("A", RepositoryName.create("com_foo_bar_a")));
+    assertThat(mapping.get("A")).isEqualTo(RepositoryName.create("com_foo_bar_a"));
+    assertThat(mapping.get("B")).isEqualTo(RepositoryName.create("B"));
   }
 
   @Test
   public void neverFallback() throws Exception {
     RepositoryMapping mapping =
         RepositoryMapping.create(
-            ImmutableMap.of(RepositoryName.create("A"), RepositoryName.create("com_foo_bar_a")),
-            "fake_owner_repo");
-    assertThat(mapping.get(RepositoryName.create("A")))
-        .isEqualTo(RepositoryName.create("com_foo_bar_a"));
-    assertThat(mapping.get(RepositoryName.create("B")))
+            ImmutableMap.of("A", RepositoryName.create("com_foo_bar_a")), "fake_owner_repo");
+    assertThat(mapping.get("A")).isEqualTo(RepositoryName.create("com_foo_bar_a"));
+    assertThat(mapping.get("B"))
         .isEqualTo(RepositoryName.create("B").toNonVisible("fake_owner_repo"));
   }
 
@@ -51,16 +48,11 @@
   public void additionalMappings() throws Exception {
     RepositoryMapping mapping =
         RepositoryMapping.create(
-                ImmutableMap.of(RepositoryName.create("A"), RepositoryName.create("com_foo_bar_a")),
-                "fake_owner_repo")
-            .withAdditionalMappings(
-                ImmutableMap.of(
-                    RepositoryName.create("B"), RepositoryName.create("com_foo_bar_b")));
-    assertThat(mapping.get(RepositoryName.create("A")))
-        .isEqualTo(RepositoryName.create("com_foo_bar_a"));
-    assertThat(mapping.get(RepositoryName.create("B")))
-        .isEqualTo(RepositoryName.create("com_foo_bar_b"));
-    assertThat(mapping.get(RepositoryName.create("C")))
+                ImmutableMap.of("A", RepositoryName.create("com_foo_bar_a")), "fake_owner_repo")
+            .withAdditionalMappings(ImmutableMap.of("B", RepositoryName.create("com_foo_bar_b")));
+    assertThat(mapping.get("A")).isEqualTo(RepositoryName.create("com_foo_bar_a"));
+    assertThat(mapping.get("B")).isEqualTo(RepositoryName.create("com_foo_bar_b"));
+    assertThat(mapping.get("C"))
         .isEqualTo(RepositoryName.create("C").toNonVisible("fake_owner_repo"));
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/TargetPatternTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/TargetPatternTest.java
index 64963ba..f5d253e 100644
--- a/src/test/java/com/google/devtools/build/lib/cmdline/TargetPatternTest.java
+++ b/src/test/java/com/google/devtools/build/lib/cmdline/TargetPatternTest.java
@@ -170,8 +170,8 @@
     RepositoryMapping renaming =
         RepositoryMapping.createAllowingFallback(
             ImmutableMap.of(
-                RepositoryName.create("foo"), RepositoryName.create("bar"),
-                RepositoryName.create("myworkspace"), RepositoryName.create("")));
+                "foo", RepositoryName.create("bar"),
+                "myworkspace", RepositoryName.create("")));
     TargetPattern.Parser parser =
         new TargetPattern.Parser(
             PathFragment.EMPTY_FRAGMENT, RepositoryName.createUnvalidated("myrepo"), renaming);
diff --git a/src/test/java/com/google/devtools/build/lib/packages/LabelConverterTest.java b/src/test/java/com/google/devtools/build/lib/packages/LabelConverterTest.java
index 2e3494a..576663e 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/LabelConverterTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/LabelConverterTest.java
@@ -36,8 +36,7 @@
         new LabelConverter(
             currentRule,
             RepositoryMapping.createAllowingFallback(
-                ImmutableMap.of(
-                    RepositoryName.create("orig_repo"), RepositoryName.create("new_repo"))),
+                ImmutableMap.of("orig_repo", RepositoryName.create("new_repo"))),
             /* labelCache= */ new HashMap<>());
     Label label = BuildType.LABEL.convert("@orig_repo//foo:bar", null, context);
     assertThat(label)
diff --git a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTest.java
index 4754764..b258c17 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTest.java
@@ -225,10 +225,8 @@
   private void assertMapping(
       WorkspaceFactoryTestHelper helper, String repo, String local, String global)
       throws Exception {
-    RepositoryName localRepoName = RepositoryName.create(local);
-    RepositoryName globalRepoName = RepositoryName.create(global);
     assertThat(helper.getPackage().getRepositoryMapping(RepositoryName.create(repo)))
-        .containsEntry(localRepoName, globalRepoName);
+        .containsEntry(local, RepositoryName.create(global));
   }
 
 }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java
index 2ba7271..e196fa8 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java
@@ -104,24 +104,23 @@
   }
 
   public static RepositoryMappingValue withMappingAllowingFallback(
-      ImmutableMap<RepositoryName, RepositoryName> repositoryMapping) {
+      ImmutableMap<String, RepositoryName> repositoryMapping) {
     return RepositoryMappingValue.withMapping(
         RepositoryMapping.createAllowingFallback(repositoryMapping));
   }
 
   public static RepositoryMappingValue withMapping(
-      ImmutableMap<RepositoryName, RepositoryName> repositoryMapping, RepositoryName ownerRepo) {
+      ImmutableMap<String, RepositoryName> repositoryMapping, RepositoryName ownerRepo) {
     return RepositoryMappingValue.withMapping(
         RepositoryMapping.create(repositoryMapping, ownerRepo.getName()));
   }
 
   public RepositoryMappingValue withMappingForRootModule(
-      ImmutableMap<RepositoryName, RepositoryName> repositoryMapping, RepositoryName ownerRepo) {
-    ImmutableMap.Builder<RepositoryName, RepositoryName> allMappings = ImmutableMap.builder();
+      ImmutableMap<String, RepositoryName> repositoryMapping, RepositoryName ownerRepo) {
+    ImmutableMap.Builder<String, RepositoryName> allMappings = ImmutableMap.builder();
     allMappings.putAll(repositoryMapping);
     for (String name : analysisMock.getWorkspaceRepos()) {
-      RepositoryName repoName = RepositoryName.createUnvalidated(name);
-      allMappings.put(repoName, repoName);
+      allMappings.put(name, RepositoryName.createUnvalidated(name));
     }
     return RepositoryMappingValue.withMapping(
         RepositoryMapping.create(allMappings.buildOrThrow(), ownerRepo.getName()));
@@ -146,10 +145,7 @@
         .isEqualTo(
             withMappingAllowingFallback(
                 ImmutableMap.of(
-                    RepositoryName.create("a"),
-                    RepositoryName.create("b"),
-                    RepositoryName.create("good"),
-                    RepositoryName.create(""))));
+                    "a", RepositoryName.create("b"), "good", RepositoryName.create(""))));
   }
 
   @Test
@@ -170,12 +166,9 @@
         .isEqualTo(
             withMappingForRootModule(
                 ImmutableMap.of(
-                    RepositoryName.create(""),
-                    RepositoryName.create(""),
-                    RepositoryName.create("A"),
-                    RepositoryName.create(""),
-                    RepositoryName.create("com_foo_bar_b"),
-                    RepositoryName.create("B.1.0")),
+                    "", RepositoryName.create(""),
+                    "A", RepositoryName.create(""),
+                    "com_foo_bar_b", RepositoryName.create("B.1.0")),
                 name));
   }
 
@@ -203,10 +196,8 @@
         .isEqualTo(
             withMapping(
                 ImmutableMap.of(
-                    RepositoryName.create("C"),
-                    RepositoryName.create("C.1.0"),
-                    RepositoryName.create("com_foo_bar_b"),
-                    RepositoryName.create("B.1.0")),
+                    "C", RepositoryName.create("C.1.0"),
+                    "com_foo_bar_b", RepositoryName.create("B.1.0")),
                 name));
   }
 
@@ -229,10 +220,7 @@
         .isEqualTo(
             withMapping(
                 ImmutableMap.of(
-                    RepositoryName.create("B"),
-                    RepositoryName.create("B.1.0"),
-                    RepositoryName.create("A"),
-                    RepositoryName.create("")),
+                    "B", RepositoryName.create("B.1.0"), "A", RepositoryName.create("")),
                 name));
   }
 
@@ -260,14 +248,10 @@
         .isEqualTo(
             withMappingForRootModule(
                 ImmutableMap.of(
-                    RepositoryName.create(""),
-                    RepositoryName.create(""),
-                    RepositoryName.create("A"),
-                    RepositoryName.create(""),
-                    RepositoryName.create("B1"),
-                    RepositoryName.create("B.1.0"),
-                    RepositoryName.create("B2"),
-                    RepositoryName.create("B.2.0")),
+                    "", RepositoryName.create(""),
+                    "A", RepositoryName.create(""),
+                    "B1", RepositoryName.create("B.1.0"),
+                    "B2", RepositoryName.create("B.2.0")),
                 name));
   }
 
@@ -301,8 +285,8 @@
         .isEqualTo(
             withMapping(
                 ImmutableMap.of(
-                    RepositoryName.create("B"), RepositoryName.create("B.1.0"),
-                    RepositoryName.create("D"), RepositoryName.create("D.1.0")),
+                    "B", RepositoryName.create("B.1.0"),
+                    "D", RepositoryName.create("D.1.0")),
                 name));
   }
 
@@ -334,8 +318,8 @@
         .isEqualTo(
             withMapping(
                 ImmutableMap.of(
-                    RepositoryName.create("B"), RepositoryName.create("B.1.0"),
-                    RepositoryName.create("com_foo_bar_c"), RepositoryName.create("C.1.0")),
+                    "B", RepositoryName.create("B.1.0"),
+                    "com_foo_bar_c", RepositoryName.create("C.1.0")),
                 name));
   }
 
@@ -363,19 +347,15 @@
         .isEqualTo(
             withMappingAllowingFallback(
                 ImmutableMap.of(
-                    RepositoryName.create("a"),
-                    RepositoryName.create("b"),
-                    RepositoryName.create("good"),
-                    RepositoryName.create(""))));
+                    "a", RepositoryName.create("b"),
+                    "good", RepositoryName.create(""))));
     assertThatEvaluationResult(eval(skyKey2))
         .hasEntryThat(skyKey2)
         .isEqualTo(
             withMappingAllowingFallback(
                 ImmutableMap.of(
-                    RepositoryName.create("x"),
-                    RepositoryName.create("y"),
-                    RepositoryName.create("good"),
-                    RepositoryName.create(""))));
+                    "x", RepositoryName.create("y"),
+                    "good", RepositoryName.create(""))));
   }
 
   @Test
@@ -395,12 +375,9 @@
         .isEqualTo(
             withMappingAllowingFallback(
                 ImmutableMap.of(
-                    RepositoryName.create("a"),
-                    RepositoryName.create("b"),
-                    RepositoryName.create("x"),
-                    RepositoryName.create("y"),
-                    RepositoryName.create("good"),
-                    RepositoryName.create(""))));
+                    "a", RepositoryName.create("b"),
+                    "x", RepositoryName.create("y"),
+                    "good", RepositoryName.create(""))));
   }
 
   @Test
@@ -439,20 +416,20 @@
         .hasEntryThat(skyKey)
         .isEqualTo(
             withMappingAllowingFallback(
-                ImmutableMap.<RepositoryName, RepositoryName>builder()
-                    .put(RepositoryName.create("root"), RepositoryName.MAIN)
+                ImmutableMap.<String, RepositoryName>builder()
+                    .put("root", RepositoryName.MAIN)
                     // mappings to @B get remapped to @B.1.0 because of module B@1.0
-                    .put(RepositoryName.create("B_alias"), RepositoryName.create("B.1.0"))
-                    .put(RepositoryName.create("B_alias2"), RepositoryName.create("B.1.0"))
+                    .put("B_alias", RepositoryName.create("B.1.0"))
+                    .put("B_alias2", RepositoryName.create("B.1.0"))
                     // mapping from @B to @B.1.0 is also created
-                    .put(RepositoryName.create("B"), RepositoryName.create("B.1.0"))
+                    .put("B", RepositoryName.create("B.1.0"))
                     // mapping from @C to @C.2.0 is created despite not being mentioned
-                    .put(RepositoryName.create("C"), RepositoryName.create("C.2.0"))
+                    .put("C", RepositoryName.create("C.2.0"))
                     // mapping to @D is untouched because D has a multiple-version override
-                    .put(RepositoryName.create("D_alias"), RepositoryName.create("D"))
+                    .put("D_alias", RepositoryName.create("D"))
                     // mapping to @E is untouched because E is not a module
-                    .put(RepositoryName.create("E_alias"), RepositoryName.create("E"))
-                    .build()));
+                    .put("E_alias", RepositoryName.create("E"))
+                    .buildOrThrow()));
   }
 
   @Test
@@ -477,16 +454,11 @@
         .isEqualTo(
             withMappingForRootModule(
                 ImmutableMap.of(
-                    RepositoryName.MAIN,
-                    RepositoryName.MAIN,
-                    RepositoryName.create("A"),
-                    RepositoryName.MAIN,
-                    RepositoryName.create("B"),
-                    RepositoryName.create("B.1.0"),
-                    RepositoryName.create("root"),
-                    RepositoryName.create("root"),
-                    RepositoryName.create("ws_repo"),
-                    RepositoryName.create("ws_repo")),
+                    "", RepositoryName.MAIN,
+                    "A", RepositoryName.MAIN,
+                    "B", RepositoryName.create("B.1.0"),
+                    "root", RepositoryName.create("root"),
+                    "ws_repo", RepositoryName.create("ws_repo")),
                 RepositoryName.MAIN));
   }
 
@@ -512,12 +484,9 @@
         .isEqualTo(
             withMapping(
                 ImmutableMap.of(
-                    RepositoryName.MAIN,
-                    RepositoryName.MAIN,
-                    RepositoryName.create("A"),
-                    RepositoryName.MAIN,
-                    RepositoryName.create("B"),
-                    RepositoryName.create("B.1.0")),
+                    "", RepositoryName.MAIN,
+                    "A", RepositoryName.MAIN,
+                    "B", RepositoryName.create("B.1.0")),
                 RepositoryName.MAIN));
   }
 
@@ -539,7 +508,9 @@
         .hasErrorEntryForKeyThat(skyKey)
         .hasExceptionThat()
         .isInstanceOf(NoSuchPackageException.class);
-    assertContainsEvent("invalid repository name 'x': repo names must start with '@'");
+    assertContainsEvent(
+        "invalid repository name 'x': repo names used in the repo_mapping attribute must start with"
+            + " '@'");
   }
 
   @Test
@@ -558,9 +529,7 @@
         .hasEntryThat(skyKey)
         .isEqualTo(
             withMappingAllowingFallback(
-                ImmutableMap.of(
-                    RepositoryName.createUnvalidated(TestConstants.WORKSPACE_NAME),
-                    RepositoryName.MAIN)));
+                ImmutableMap.of(TestConstants.WORKSPACE_NAME, RepositoryName.MAIN)));
   }
 
   @Test
@@ -577,9 +546,7 @@
 
     assertThatEvaluationResult(eval(skyKey))
         .hasEntryThat(skyKey)
-        .isEqualTo(
-            withMappingAllowingFallback(
-                ImmutableMap.of(RepositoryName.create("good"), RepositoryName.MAIN)));
+        .isEqualTo(withMappingAllowingFallback(ImmutableMap.of("good", RepositoryName.MAIN)));
   }
 
   @Test
@@ -606,12 +573,9 @@
         .isEqualTo(
             withMapping(
                 ImmutableMap.of(
-                    RepositoryName.create("bazel_tools"),
-                    RepositoryName.create("bazel_tools"), // bazel_tools is a well-known module
-                    RepositoryName.create("foo"),
-                    RepositoryName.create("foo.1.0"),
-                    RepositoryName.create("_builtins"),
-                    RepositoryName.create("_builtins")),
+                    "bazel_tools", RepositoryName.BAZEL_TOOLS, // bazel_tools is a well-known module
+                    "foo", RepositoryName.create("foo.1.0"),
+                    "_builtins", RepositoryName.create("_builtins")),
                 name));
   }
 
@@ -619,15 +583,11 @@
   public void testEqualsAndHashCode() throws Exception {
     new EqualsTester()
         .addEqualityGroup(
-            withMappingAllowingFallback(
-                ImmutableMap.of(RepositoryName.create("foo"), RepositoryName.create("bar"))),
-            withMappingAllowingFallback(
-                ImmutableMap.of(RepositoryName.create("foo"), RepositoryName.create("bar"))))
+            withMappingAllowingFallback(ImmutableMap.of("foo", RepositoryName.create("bar"))),
+            withMappingAllowingFallback(ImmutableMap.of("foo", RepositoryName.create("bar"))))
         .addEqualityGroup(
-            withMappingAllowingFallback(
-                ImmutableMap.of(RepositoryName.create("fizz"), RepositoryName.create("buzz"))),
-            withMappingAllowingFallback(
-                ImmutableMap.of(RepositoryName.create("fizz"), RepositoryName.create("buzz"))))
+            withMappingAllowingFallback(ImmutableMap.of("fizz", RepositoryName.create("buzz"))),
+            withMappingAllowingFallback(ImmutableMap.of("fizz", RepositoryName.create("buzz"))))
         .testEquals();
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
index 80d7997..e689bf9 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
@@ -180,21 +180,22 @@
             "local_repository(name = 'b', path = '../b', repo_mapping = {'@x' : '@y'})");
     RepositoryName a = RepositoryName.create("a");
     RepositoryName b = RepositoryName.create("b");
-    RepositoryName x = RepositoryName.create("x");
     RepositoryName y = RepositoryName.create("y");
-    RepositoryName good = RepositoryName.create("good");
     RepositoryName main = RepositoryName.create("");
 
     SkyKey key0 = WorkspaceFileValue.key(workspace, 0);
     EvaluationResult<WorkspaceFileValue> result0 = eval(key0);
     WorkspaceFileValue value0 = result0.get(key0);
-    assertThat(value0.getRepositoryMapping()).containsEntry(a, ImmutableMap.of(x, y, good, main));
+    assertThat(value0.getRepositoryMapping())
+        .containsEntry(a, ImmutableMap.of("x", y, "good", main));
 
     SkyKey key1 = WorkspaceFileValue.key(workspace, 1);
     EvaluationResult<WorkspaceFileValue> result1 = eval(key1);
     WorkspaceFileValue value1 = result1.get(key1);
-    assertThat(value1.getRepositoryMapping()).containsEntry(a, ImmutableMap.of(x, y, good, main));
-    assertThat(value1.getRepositoryMapping()).containsEntry(b, ImmutableMap.of(x, y, good, main));
+    assertThat(value1.getRepositoryMapping())
+        .containsEntry(a, ImmutableMap.of("x", y, "good", main));
+    assertThat(value1.getRepositoryMapping())
+        .containsEntry(b, ImmutableMap.of("x", y, "good", main));
   }
 
   @Test
@@ -498,10 +499,10 @@
     SkyKey key1 = WorkspaceFileValue.key(workspace, 1);
     EvaluationResult<WorkspaceFileValue> result1 = eval(key1);
     WorkspaceFileValue value1 = result1.get(key1);
-    RepositoryName good = RepositoryName.create("good");
     RepositoryName main = RepositoryName.create("");
     RepositoryName secondary = RepositoryName.create("secondary");
-    assertThat(value1.getRepositoryMapping()).containsEntry(secondary, ImmutableMap.of(good, main));
+    assertThat(value1.getRepositoryMapping())
+        .containsEntry(secondary, ImmutableMap.of("good", main));
     assertNoEvents();
   }