diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java
index 9c32f95..401a34a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java
@@ -17,14 +17,12 @@
 import static java.util.stream.Collectors.joining;
 
 import com.google.auto.value.AutoValue;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
 import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
 import com.google.devtools.build.lib.analysis.platform.ToolchainTypeInfo;
-import com.google.devtools.build.lib.analysis.skylark.BazelStarlarkContext;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -135,8 +133,7 @@
     printer.append(">");
   }
 
-  private Label transformKey(Object key, Location loc, BazelStarlarkContext context)
-      throws EvalException {
+  private Label transformKey(Object key, Location loc) throws EvalException {
     if (key instanceof Label) {
       return (Label) key;
     } else if (key instanceof ToolchainTypeInfo) {
@@ -145,7 +142,7 @@
       Label toolchainType;
       String rawLabel = (String) key;
       try {
-        toolchainType = Label.parseAbsolute(rawLabel, context.getRepoMapping());
+        toolchainType = Label.parseAbsolute(rawLabel, ImmutableMap.of());
       } catch (LabelSyntaxException e) {
         throw new EvalException(
             loc, String.format("Unable to parse toolchain %s: %s", rawLabel, e.getMessage()), e);
@@ -163,8 +160,7 @@
   @Override
   public ToolchainInfo getIndex(Object key, Location loc, StarlarkContext context)
       throws EvalException {
-    Preconditions.checkArgument(context instanceof BazelStarlarkContext);
-    Label toolchainTypeLabel = transformKey(key, loc, (BazelStarlarkContext) context);
+    Label toolchainTypeLabel = transformKey(key, loc);
 
     if (!containsKey(key, loc, context)) {
       throw new EvalException(
@@ -184,8 +180,7 @@
   @Override
   public boolean containsKey(Object key, Location loc, StarlarkContext context)
       throws EvalException {
-    Preconditions.checkArgument(context instanceof BazelStarlarkContext);
-    Label toolchainTypeLabel = transformKey(key, loc, (BazelStarlarkContext) context);
+    Label toolchainTypeLabel = transformKey(key, loc);
     Optional<Label> matching =
         toolchains().keySet().stream()
             .map(ToolchainTypeInfo::typeLabel)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
index c1a1f4b..0c358e2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
@@ -43,7 +43,6 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.cmdline.LabelValidator;
-import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.AttributeMap;
@@ -290,7 +289,6 @@
       throws EvalException, ConversionException {
     SkylarkUtils.checkLoadingOrWorkspacePhase(funcallEnv, "rule", ast.getLocation());
 
-    Preconditions.checkArgument(context instanceof BazelStarlarkContext);
     BazelStarlarkContext bazelContext = (BazelStarlarkContext) context;
     // analysis_test=true implies test=true.
     test |= Boolean.TRUE.equals(analysisTest);
@@ -357,9 +355,7 @@
         funcallEnv.getGlobals().getLabel(), funcallEnv.getTransitiveContentHashCode());
     builder.addRequiredToolchains(
         collectToolchainLabels(
-            toolchains.getContents(String.class, "toolchains"),
-            bazelContext.getRepoMapping(),
-            ast.getLocation()));
+            toolchains.getContents(String.class, "toolchains"), ast.getLocation()));
 
     if (!buildSetting.equals(Runtime.NONE) && !cfg.equals(Runtime.NONE)) {
       throw new EvalException(
@@ -435,14 +431,11 @@
   }
 
   private static ImmutableList<Label> collectToolchainLabels(
-      Iterable<String> rawLabels,
-      ImmutableMap<RepositoryName, RepositoryName> repoMapping,
-      Location loc)
-      throws EvalException {
+      Iterable<String> rawLabels, Location loc) throws EvalException {
     ImmutableList.Builder<Label> requiredToolchains = new ImmutableList.Builder<>();
     for (String rawLabel : rawLabels) {
       try {
-        Label toolchainLabel = Label.parseAbsolute(rawLabel, repoMapping);
+        Label toolchainLabel = Label.parseAbsolute(rawLabel, ImmutableMap.of());
         requiredToolchains.add(toolchainLabel);
       } catch (LabelSyntaxException e) {
         throw new EvalException(
@@ -481,10 +474,8 @@
       SkylarkList<?> toolchains,
       String doc,
       FuncallExpression ast,
-      Environment funcallEnv,
-      StarlarkContext context)
+      Environment funcallEnv)
       throws EvalException {
-    Preconditions.checkArgument(context instanceof BazelStarlarkContext);
     Location location = ast.getLocation();
     ImmutableList.Builder<String> attrAspects = ImmutableList.builder();
     for (Object attributeAspect : attributeAspects) {
@@ -572,9 +563,7 @@
         HostTransition.INSTANCE,
         ImmutableSet.copyOf(hostFragments.getContents(String.class, "host_fragments")),
         collectToolchainLabels(
-            toolchains.getContents(String.class, "toolchains"),
-            ((BazelStarlarkContext) context).getRepoMapping(),
-            ast.getLocation()));
+            toolchains.getContents(String.class, "toolchains"), ast.getLocation()));
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java
index 4a20d69..c2b82d1 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java
@@ -374,104 +374,110 @@
               + "Please see the <a href=\"../aspects.md\">introduction to Aspects</a> for more "
               + "details.",
       parameters = {
-        @Param(
-            name = "implementation",
-            type = BaseFunction.class,
-            legacyNamed = true,
-            doc =
-                "the function implementing this aspect. Must have two parameters: "
-                    + "<a href=\"Target.html\">Target</a> (the target to which the aspect is "
-                    + "applied) and <a href=\"ctx.html\">ctx</a>. Attributes of the target are "
-                    + "available via ctx.rule field. The function is called during the analysis "
-                    + "phase for each application of an aspect to a target."),
-        @Param(
-            name = "attr_aspects",
-            type = SkylarkList.class,
-            legacyNamed = true,
-            generic1 = String.class,
-            defaultValue = "[]",
-            doc =
-                "List of attribute names.  The aspect propagates along dependencies specified by"
-                    + " attributes of a target with this name. The list can also contain a single "
-                    + "string '*': in that case aspect propagates along all dependencies of a"
-                    + " target."),
-        @Param(
-            name = "attrs",
-            type = SkylarkDict.class,
-            legacyNamed = true,
-            noneable = true,
-            defaultValue = "None",
-            doc =
-                "dictionary to declare all the attributes of the aspect.  It maps from an"
-                    + " attribute name to an attribute object (see <a href=\"attr.html\">attr</a>"
-                    + " module). Aspect attributes are available to implementation function as"
-                    + " fields of ctx parameter. Implicit attributes starting with <code>_</code>"
-                    + " must have default values, and have type <code>label</code> or"
-                    + " <code>label_list</code>. Explicit attributes must have type"
-                    + " <code>string</code>, and must use the <code>values</code> restriction. If"
-                    + " explicit attributes are present, the aspect can only be used with rules"
-                    + " that have attributes of the same name and type, with valid values."),
-        @Param(
-            name = "required_aspect_providers",
-            type = SkylarkList.class,
-            legacyNamed = true,
-            defaultValue = "[]",
-            doc =
-                "Allow the aspect to inspect other aspects. If the aspect propagates along a"
-                    + " dependency, and the underlying rule sends a different aspect along that "
-                    + "dependency, and that aspect provides one of the providers listed here, this"
-                    + " aspect will see the providers provided by that aspect. <p>The value should"
-                    + " be either a list of providers, or a list of lists of providers. This"
-                    + " aspect will 'see'  the underlying aspects that provide  ALL providers from"
-                    + " at least ONE of these lists. A single list of providers will be"
-                    + " automatically converted to a list containing one list of providers."),
-        @Param(
-            name = "provides",
-            type = SkylarkList.class,
-            legacyNamed = true,
-            defaultValue = "[]",
-            doc = PROVIDES_DOC),
-        @Param(
-            name = "fragments",
-            type = SkylarkList.class,
-            legacyNamed = true,
-            generic1 = String.class,
-            defaultValue = "[]",
-            doc =
-                "List of names of configuration fragments that the aspect requires "
-                    + "in target configuration."),
-        @Param(
-            name = "host_fragments",
-            type = SkylarkList.class,
-            legacyNamed = true,
-            generic1 = String.class,
-            defaultValue = "[]",
-            doc =
-                "List of names of configuration fragments that the aspect requires "
-                    + "in host configuration."),
-        @Param(
-            name = "toolchains",
-            type = SkylarkList.class,
-            legacyNamed = true,
-            generic1 = String.class,
-            defaultValue = "[]",
-            doc =
-                "<i>(Experimental)</i><br/><br/>"
-                    + "If set, the set of toolchains this rule requires. Toolchains will be "
-                    + "found by checking the current platform, and provided to the rule "
-                    + "implementation via <code>ctx.toolchain</code>."),
-        @Param(
-            name = "doc",
-            type = String.class,
-            legacyNamed = true,
-            defaultValue = "''",
-            doc =
-                "A description of the aspect that can be extracted by documentation generating "
-                    + "tools.")
+          @Param(
+              name = "implementation",
+              type = BaseFunction.class,
+              legacyNamed = true,
+              doc =
+                  "the function implementing this aspect. Must have two parameters: "
+                      + "<a href=\"Target.html\">Target</a> (the target to which the aspect is "
+                      + "applied) and <a href=\"ctx.html\">ctx</a>. Attributes of the target are "
+                      + "available via ctx.rule field. The function is called during the analysis "
+                      + "phase for each application of an aspect to a target."
+          ),
+          @Param(
+              name = "attr_aspects",
+              type = SkylarkList.class,
+              legacyNamed = true,
+              generic1 = String.class,
+              defaultValue = "[]",
+              doc = "List of attribute names.  The aspect propagates along dependencies specified "
+                  + "by attributes of a target with this name. The list can also contain a single "
+                  + "string '*': in that case aspect propagates along all dependencies of a target."
+          ),
+          @Param(
+              name = "attrs",
+              type = SkylarkDict.class,
+              legacyNamed = true,
+              noneable = true,
+              defaultValue = "None",
+              doc = "dictionary to declare all the attributes of the aspect.  "
+                  + "It maps from an attribute name to an attribute object "
+                  + "(see <a href=\"attr.html\">attr</a> module). "
+                  + "Aspect attributes are available to implementation function as fields of ctx "
+                  + "parameter. Implicit attributes starting with <code>_</code> must have default "
+                  + "values, and have type <code>label</code> or <code>label_list</code>. "
+                  + "Explicit attributes must have type <code>string</code>, and must use the "
+                  + "<code>values</code> restriction. If explicit attributes are present, the "
+                  + "aspect can only be used with rules that have attributes of the same name and "
+                  + "type, with valid values."
+          ),
+          @Param(
+              name = "required_aspect_providers",
+              type = SkylarkList.class,
+              legacyNamed = true,
+              defaultValue = "[]",
+              doc = "Allow the aspect to inspect other aspects. If the aspect propagates along "
+                  + "a dependency, and the underlying rule sends a different aspect along that "
+                  + "dependency, and that aspect provides one of the providers listed here, this "
+                  + "aspect will see the providers provided by that aspect. "
+                  + "<p>The value should be either a list of providers, or a "
+                  + "list of lists of providers. This aspect will 'see'  the underlying aspects "
+                  + "that provide  ALL providers from at least ONE of these lists. A single list "
+                  + "of providers will be automatically converted to a list containing one list of "
+                  + "providers."
+          ),
+          @Param(
+              name = "provides",
+              type = SkylarkList.class,
+              legacyNamed = true,
+              defaultValue = "[]",
+              doc = PROVIDES_DOC
+          ),
+          @Param(
+              name = "fragments",
+              type = SkylarkList.class,
+              legacyNamed = true,
+              generic1 = String.class,
+              defaultValue = "[]",
+              doc =
+                  "List of names of configuration fragments that the aspect requires "
+                      + "in target configuration."
+          ),
+          @Param(
+              name = "host_fragments",
+              type = SkylarkList.class,
+              legacyNamed = true,
+              generic1 = String.class,
+              defaultValue = "[]",
+              doc =
+                  "List of names of configuration fragments that the aspect requires "
+                      + "in host configuration."
+          ),
+          @Param(
+              name = "toolchains",
+              type = SkylarkList.class,
+              legacyNamed = true,
+              generic1 = String.class,
+              defaultValue = "[]",
+              doc =
+                  "<i>(Experimental)</i><br/><br/>"
+                      + "If set, the set of toolchains this rule requires. Toolchains will be "
+                      + "found by checking the current platform, and provided to the rule "
+                      + "implementation via <code>ctx.toolchain</code>."
+          ),
+          @Param(
+              name = "doc",
+              type = String.class,
+              legacyNamed = true,
+              defaultValue = "''",
+              doc = "A description of the aspect that can be extracted by documentation generating "
+                  + "tools."
+          )
       },
       useEnvironment = true,
-      useAst = true,
-      useContext = true)
+      useAst = true
+  )
   public SkylarkAspectApi aspect(
       BaseFunction implementation,
       SkylarkList<?> attributeAspects,
@@ -483,8 +489,7 @@
       SkylarkList<?> toolchains,
       String doc,
       FuncallExpression ast,
-      Environment funcallEnv,
-      StarlarkContext context)
+      Environment funcallEnv)
       throws EvalException;
 
   @SkylarkCallable(
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
index 283535e..9690686 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
@@ -173,20 +173,10 @@
   }
 
   @Override
-  public SkylarkAspectApi aspect(
-      BaseFunction implementation,
-      SkylarkList<?> attributeAspects,
-      Object attrs,
-      SkylarkList<?> requiredAspectProvidersArg,
-      SkylarkList<?> providesArg,
-      SkylarkList<?> fragments,
-      SkylarkList<?> hostFragments,
-      SkylarkList<?> toolchains,
-      String doc,
-      FuncallExpression ast,
-      Environment funcallEnv,
-      StarlarkContext context)
-      throws EvalException {
+  public SkylarkAspectApi aspect(BaseFunction implementation, SkylarkList<?> attributeAspects,
+      Object attrs, SkylarkList<?> requiredAspectProvidersArg, SkylarkList<?> providesArg,
+      SkylarkList<?> fragments, SkylarkList<?> hostFragments, SkylarkList<?> toolchains, String doc,
+      FuncallExpression ast, Environment funcallEnv) throws EvalException {
     return new FakeSkylarkAspect();
   }
 
diff --git a/src/test/shell/bazel/toolchain_test.sh b/src/test/shell/bazel/toolchain_test.sh
index a4e5d6b..7eedb4e 100755
--- a/src/test/shell/bazel/toolchain_test.sh
+++ b/src/test/shell/bazel/toolchain_test.sh
@@ -144,49 +144,6 @@
 EOF
 }
 
-function test_toolchain_with_repository_remapping() {
-  write_test_toolchain
-  write_register_toolchain
-
-  # NOTE: fully qualified label "@main//toolchain:test_toolchain"
-  # is used here, but "//toolchain:test_toolchain" is used in
-  # the toolchain registration in the WORKSPACE file and the
-  # toolchain declaration. Bazel should treat those two labels
-  # as the same
-  rule_name="use_toolchain"
-  toolchain_name="test_toolchain"
-  mkdir -p toolchain
-  cat >> toolchain/rule_${rule_name}.bzl <<EOF
-def _impl(ctx):
-  toolchain = ctx.toolchains['@main//toolchain:${toolchain_name}']
-  message = ctx.attr.message
-  print(
-      'Using toolchain: rule message: "%s", toolchain extra_str: "%s"' %
-         (message, toolchain.extra_str))
-  return []
-
-${rule_name} = rule(
-    implementation = _impl,
-    attrs = {
-        'message': attr.string(),
-    },
-    toolchains = ['@main//toolchain:${toolchain_name}'],
-)
-EOF
-
-  mkdir -p demo
-  cat >> demo/BUILD <<EOF
-load('//toolchain:rule_use_toolchain.bzl', 'use_toolchain')
-use_toolchain(
-    name = 'use',
-    message = 'this is the rule')
-EOF
-
-  bazel build //demo:use --incompatible_remap_main_repo &> $TEST_log \
-      || fail "Build failed"
-  expect_log 'Using toolchain: rule message: "this is the rule", toolchain extra_str: "foo from test_toolchain"'
-}
-
 function test_toolchain_provider() {
   write_test_toolchain
 
