Remove the $resolved_toolchains_internal attribute.

Closes #8002.

PiperOrigin-RevId: 243290817
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
index 0660ed5..d866edc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
@@ -232,7 +232,7 @@
    * Share common attributes across both base and Skylark base rules.
    */
   public static RuleClass.Builder commonCoreAndSkylarkAttributes(RuleClass.Builder builder) {
-    return PlatformSemantics.platformAttributes(builder)
+    return builder
         // The visibility attribute is special: it is a nodep label, and loading the
         // necessary package groups is handled by {@link LabelVisitor#visitTargetVisibility}.
         // Package groups always have the null configuration so that they are not duplicated
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
index 4764352..d8096c6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
@@ -449,12 +449,10 @@
       OrderedSetMultimap<DependencyKind, ConfiguredTargetAndData> map, Target target) {
     OrderedSetMultimap<Attribute, ConfiguredTargetAndData> result = OrderedSetMultimap.create();
     for (Map.Entry<DependencyKind, ConfiguredTargetAndData> entry : map.entries()) {
-      Attribute attribute =
-          entry.getKey() == DependencyResolver.TOOLCHAIN_DEPENDENCY
-              ? ((Rule) target)
-                  .getRuleClassObject()
-                  .getAttributeByName(PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR)
-              : entry.getKey().getAttribute();
+      if (entry.getKey() == DependencyResolver.TOOLCHAIN_DEPENDENCY) {
+        continue;
+      }
+      Attribute attribute = entry.getKey().getAttribute();
       result.put(attribute, entry.getValue());
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PlatformSemantics.java b/src/main/java/com/google/devtools/build/lib/analysis/PlatformSemantics.java
deleted file mode 100644
index facedb7..0000000
--- a/src/main/java/com/google/devtools/build/lib/analysis/PlatformSemantics.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.analysis;
-
-import static com.google.devtools.build.lib.packages.Attribute.attr;
-import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
-
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.packages.RuleClass;
-
-/** Helper class to manage rules' use of platforms. */
-public class PlatformSemantics {
-
-  public static final String RESOLVED_TOOLCHAINS_ATTR = "$resolved_toolchains_internal";
-  public static final String EXEC_COMPATIBLE_WITH_ATTR = "exec_compatible_with";
-
-  public static RuleClass.Builder platformAttributes(RuleClass.Builder builder) {
-    return builder.add(
-        attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
-            .nonconfigurable("Used in toolchain resolution")
-            .value(ImmutableList.of()));
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 4b3eb4f..f0be11c 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -124,6 +124,7 @@
 @Immutable
 @AutoCodec
 public class RuleClass {
+
   @AutoCodec
   static final Function<? super Rule, Map<String, Label>> NO_EXTERNAL_BINDINGS =
       Functions.<Map<String, Label>>constant(ImmutableMap.<String, Label>of());
@@ -133,6 +134,7 @@
       Functions.<Set<String>>constant(ImmutableSet.<String>of());
 
   public static final PathFragment THIRD_PARTY_PREFIX = PathFragment.create("third_party");
+  public static final String EXEC_COMPATIBLE_WITH_ATTR = "exec_compatible_with";
 
   /**
    * A constraint for the package name of the Rule instances.
@@ -818,9 +820,9 @@
         Preconditions.checkNotNull(ruleDefinitionEnvironmentHashCode, this.name);
       }
       if (executionPlatformConstraintsAllowed == ExecutionPlatformConstraintsAllowed.PER_TARGET
-          && !this.contains("exec_compatible_with")) {
+          && !this.contains(EXEC_COMPATIBLE_WITH_ATTR)) {
         this.add(
-            attr("exec_compatible_with", BuildType.LABEL_LIST)
+            attr(EXEC_COMPATIBLE_WITH_ATTR, BuildType.LABEL_LIST)
                 .allowedFileTypes()
                 .nonconfigurable("Used in toolchain resolution")
                 .value(ImmutableList.of()));
diff --git a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
index 5c642cf..848a1cf 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
@@ -22,7 +22,6 @@
 import com.google.devtools.build.lib.analysis.DependencyResolver;
 import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind;
 import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAspectOrderException;
-import com.google.devtools.build.lib.analysis.PlatformSemantics;
 import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
@@ -38,8 +37,6 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.packages.BuildType;
-import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.packages.TargetUtils;
@@ -121,9 +118,7 @@
       ImmutableMap<Label, ConfigMatchingProvider> configConditions =
           ((RuleConfiguredTarget) configuredTarget).getConfigConditions();
       try {
-        // Note: Being able to pull the $resolved_toolchain_internal attr unconditionally from the
-        // mapper relies on the fact that {@link PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR} exists
-        // in every rule. Also, we don't actually use fromOptions in our implementation of
+        // We don't actually use fromOptions in our implementation of
         // DependencyResolver but passing to avoid passing a null and since we have the information
         // anyway.
         deps =
@@ -133,9 +128,7 @@
                     hostConfiguration,
                     /*aspect=*/ null,
                     configConditions,
-                    ImmutableSet.copyOf(
-                        ConfiguredAttributeMapper.of(target.getAssociatedRule(), configConditions)
-                            .get(PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR, BuildType.LABEL_LIST)),
+                    /*toolchainLabels=*/ ImmutableSet.of(),
                     trimmingTransitionFactory);
       } catch (EvalException | InconsistentAspectOrderException e) {
         throw new InterruptedException(e.getMessage());
@@ -152,10 +145,12 @@
         BuildOptions fromOptions = config.getOptions();
         List<BuildOptions> toOptions = dep.getTransition().apply(fromOptions);
         String hostConfigurationChecksum = hostConfiguration.checksum();
-        String dependencyName =
-            attributeAndDep.getKey() == DependencyResolver.TOOLCHAIN_DEPENDENCY
-                ? PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR
-                : attributeAndDep.getKey().getAttribute().getName();
+        String dependencyName;
+        if (attributeAndDep.getKey() == DependencyResolver.TOOLCHAIN_DEPENDENCY) {
+          dependencyName = "[toolchain dependency]";
+        } else {
+          dependencyName = attributeAndDep.getKey().getAttribute().getName();
+        }
         addResult(
             "  "
                 .concat(dependencyName)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index a933c8e..82785eb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -34,7 +34,6 @@
 import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind;
 import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAspectOrderException;
 import com.google.devtools.build.lib.analysis.EmptyConfiguredTarget;
-import com.google.devtools.build.lib.analysis.PlatformSemantics;
 import com.google.devtools.build.lib.analysis.ResolvedToolchainContext;
 import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
 import com.google.devtools.build.lib.analysis.ToolchainResolver;
@@ -451,7 +450,7 @@
     if (rule.getRuleClassObject().executionPlatformConstraintsAllowed()
         == ExecutionPlatformConstraintsAllowed.PER_TARGET) {
       execConstraintLabels.addAll(
-          mapper.get(PlatformSemantics.EXEC_COMPATIBLE_WITH_ATTR, BuildType.LABEL_LIST));
+          mapper.get(RuleClass.EXEC_COMPATIBLE_WITH_ATTR, BuildType.LABEL_LIST));
     }
 
     return execConstraintLabels.build();
diff --git a/src/test/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallbackTest.java b/src/test/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallbackTest.java
index a8461b1..0c9059d 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallbackTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallbackTest.java
@@ -14,11 +14,9 @@
 package com.google.devtools.build.lib.query2;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.analysis.PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR;
 import static com.google.devtools.build.lib.packages.Attribute.attr;
 import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
 
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.eventbus.EventBus;
 import com.google.devtools.build.lib.analysis.AnalysisProtos;
@@ -75,10 +73,6 @@
                 "my_rule",
                 (builder, env) ->
                     builder
-                        .add(
-                            attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
-                                .nonconfigurable("Used in toolchain resolution")
-                                .value(ImmutableList.of()))
                         .add(attr("deps", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE)));
     helper.useRuleClassProvider(setRuleClassProviders(depsRule).build());
 
@@ -130,15 +124,10 @@
             MockRule.define(
                 "my_rule",
                 (builder, env) ->
-                    builder
-                        .add(
-                            attr("deps", LABEL_LIST)
-                                .allowedFileTypes(FileTypeSet.ANY_FILE)
-                                .cfg(TransitionFactories.of(attributePatchTransition)))
-                        .add(
-                            attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
-                                .nonconfigurable("Used in toolchain resolution")
-                                .value(ImmutableList.of())));
+                    builder.add(
+                        attr("deps", LABEL_LIST)
+                            .allowedFileTypes(FileTypeSet.ANY_FILE)
+                            .cfg(TransitionFactories.of(attributePatchTransition))));
 
     helper.useRuleClassProvider(setRuleClassProviders(ruleWithPatch, getSimpleRule()).build());
 
@@ -216,14 +205,7 @@
   }
 
   private MockRule getSimpleRule() {
-    return () ->
-        MockRule.define(
-            "simple_rule",
-            (builder, unusedEnv) ->
-                builder.add(
-                    attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
-                        .nonconfigurable("Used in toolchain resolution")
-                        .value(ImmutableList.of())));
+    return () -> MockRule.define("simple_rule");
   }
 
   private AnalysisProtos.CqueryResult getOutput(String queryExpression) throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/query2/engine/PostAnalysisQueryTest.java b/src/test/java/com/google/devtools/build/lib/query2/engine/PostAnalysisQueryTest.java
index 6814dc6..6ee27c6 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/engine/PostAnalysisQueryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/engine/PostAnalysisQueryTest.java
@@ -14,14 +14,11 @@
 package com.google.devtools.build.lib.query2.engine;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.analysis.PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR;
 import static com.google.devtools.build.lib.packages.Attribute.attr;
 import static com.google.devtools.build.lib.packages.BuildType.LABEL;
-import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
 import static com.google.devtools.build.lib.testutil.TestConstants.GENRULE_SETUP;
 import static com.google.devtools.build.lib.testutil.TestConstants.PLATFORM_LABEL;
 
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -222,13 +219,8 @@
             MockRule.define(
                 "implicit_toolchain_deps_rule",
                 (builder, env) ->
-                    builder
-                        .addRequiredToolchains(
-                            Label.parseAbsoluteUnchecked("//test:toolchain_type"))
-                        .add(
-                            attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
-                                .nonconfigurable("Used in toolchain resolution")
-                                .value(ImmutableList.of())));
+                    builder.addRequiredToolchains(
+                        Label.parseAbsoluteUnchecked("//test:toolchain_type")));
     helper.useRuleClassProvider(setRuleClassProviders(ruleWithImplicitDeps).build());
 
     writeFile(