diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelFilegroupRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelFilegroupRule.java
index d13ec9f..ca19869 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelFilegroupRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelFilegroupRule.java
@@ -65,10 +65,7 @@
           <code>data</code></a> for more information about how to depend on and use data files.
         </p>
         <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
-        .add(
-            attr("data", LABEL_LIST)
-                .allowedFileTypes(FileTypeSet.ANY_FILE)
-                .dontCheckConstraints())
+        .add(attr("data", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE).dontCheckConstraints())
         .add(attr("output_licenses", LICENSE))
         /*<!-- #BLAZE_RULE(filegroup).ATTRIBUTE(path) -->
         An optional string to set a path to the files in the group, relative to the package path.
@@ -81,7 +78,7 @@
             attr("path", STRING)
                 .undocumented(
                     "only used to expose FilegroupPathProvider, which is not currently used"))
-        .supportsPlatforms(false)
+        .useToolchainResolution(false)
         .build();
   }
 
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 4528501..e8017c27 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
@@ -725,7 +725,7 @@
 
     private final Map<String, Attribute> attributes = new LinkedHashMap<>();
     private final Set<Label> requiredToolchains = new HashSet<>();
-    private boolean supportsPlatforms = true;
+    private boolean useToolchainResolution = true;
     private ExecutionPlatformConstraintsAllowed executionPlatformConstraintsAllowed =
         ExecutionPlatformConstraintsAllowed.PER_RULE;
     private Set<Label> executionPlatformConstraints = new HashSet<>();
@@ -761,7 +761,7 @@
         supportsConstraintChecking = parent.supportsConstraintChecking;
 
         addRequiredToolchains(parent.getRequiredToolchains());
-        supportsPlatforms = parent.supportsPlatforms;
+        useToolchainResolution = parent.useToolchainResolution;
 
         // Make sure we use the highest priority value from all parents.
         executionPlatformConstraintsAllowed(
@@ -885,7 +885,7 @@
           supportsConstraintChecking,
           thirdPartyLicenseExistencePolicy,
           requiredToolchains,
-          supportsPlatforms,
+          useToolchainResolution,
           executionPlatformConstraintsAllowed,
           executionPlatformConstraints,
           outputFileKind,
@@ -1387,11 +1387,11 @@
     }
 
     /**
-     * Rules that support platforms can use toolchains and execution platforms. Rules that are part
-     * of configuring toolchains and platforms should set this to {@code false}.
+     * Causes rules to use toolchain resolution to determine the execution platform and toolchains.
+     * Rules that are part of configuring toolchains and platforms should set this to {@code false}.
      */
-    public Builder supportsPlatforms(boolean flag) {
-      this.supportsPlatforms = flag;
+    public Builder useToolchainResolution(boolean flag) {
+      this.useToolchainResolution = flag;
       return this;
     }
 
@@ -1556,7 +1556,7 @@
   private final ThirdPartyLicenseExistencePolicy thirdPartyLicenseExistencePolicy;
 
   private final ImmutableSet<Label> requiredToolchains;
-  private final boolean supportsPlatforms;
+  private final boolean useToolchainResolution;
   private final ExecutionPlatformConstraintsAllowed executionPlatformConstraintsAllowed;
   private final ImmutableSet<Label> executionPlatformConstraints;
 
@@ -1611,7 +1611,7 @@
       boolean supportsConstraintChecking,
       ThirdPartyLicenseExistencePolicy thirdPartyLicenseExistencePolicy,
       Set<Label> requiredToolchains,
-      boolean supportsPlatforms,
+      boolean useToolchainResolution,
       ExecutionPlatformConstraintsAllowed executionPlatformConstraintsAllowed,
       Set<Label> executionPlatformConstraints,
       OutputFile.Kind outputFileKind,
@@ -1650,7 +1650,7 @@
     this.supportsConstraintChecking = supportsConstraintChecking;
     this.thirdPartyLicenseExistencePolicy = thirdPartyLicenseExistencePolicy;
     this.requiredToolchains = ImmutableSet.copyOf(requiredToolchains);
-    this.supportsPlatforms = supportsPlatforms;
+    this.useToolchainResolution = useToolchainResolution;
     this.executionPlatformConstraintsAllowed = executionPlatformConstraintsAllowed;
     this.executionPlatformConstraints = ImmutableSet.copyOf(executionPlatformConstraints);
     this.buildSetting = buildSetting;
@@ -2559,8 +2559,8 @@
     return requiredToolchains;
   }
 
-  public boolean supportsPlatforms() {
-    return supportsPlatforms;
+  public boolean useToolchainResolution() {
+    return useToolchainResolution;
   }
 
   public ExecutionPlatformConstraintsAllowed executionPlatformConstraintsAllowed() {
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
index 8787b59..b296515 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
@@ -216,7 +216,7 @@
     }
 
     Rule rule = ((Rule) target);
-    if (!rule.getRuleClassObject().supportsPlatforms()) {
+    if (!rule.getRuleClassObject().useToolchainResolution()) {
       return null;
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/Alias.java b/src/main/java/com/google/devtools/build/lib/rules/Alias.java
index 1567b7c..5348588 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/Alias.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/Alias.java
@@ -74,9 +74,9 @@
                   .mandatory())
           .canHaveAnyProvider()
           // Aliases themselves do not need toolchains or an execution platform, so this is fine.
-          // The actual target
-          // will resolve platforms and toolchains with no issues regardless of this setting.
-          .supportsPlatforms(false)
+          // The actual target will resolve platforms and toolchains with no issues regardless of
+          // this setting.
+          .useToolchainResolution(false)
           .build();
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/LabelBuildSettings.java b/src/main/java/com/google/devtools/build/lib/rules/LabelBuildSettings.java
index a816c53..a09c943 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/LabelBuildSettings.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/LabelBuildSettings.java
@@ -70,7 +70,7 @@
         .add(attr(":alias", LABEL).value(ACTUAL))
         .setBuildSetting(new BuildSetting(flag, LABEL))
         .canHaveAnyProvider()
-        .supportsPlatforms(false)
+        .useToolchainResolution(false)
         .build();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java b/src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java
index edb1552..597a8cd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java
@@ -50,7 +50,7 @@
     @Override
     public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) {
       return builder
-          .supportsPlatforms(false)
+          .useToolchainResolution(false)
           .removeAttribute("licenses")
           .removeAttribute("distribs")
           .build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformBaseRule.java
index 424d537..2ee2827 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/PlatformBaseRule.java
@@ -41,7 +41,7 @@
                 .value(ImmutableList.of("manual"))
                 .nonconfigurable("low-level attribute, used in platform configuration"))
         .exemptFromConstraintChecking("this rule helps *define* a constraint")
-        .supportsPlatforms(false)
+        .useToolchainResolution(false)
         .removeAttribute("deps")
         .removeAttribute("data")
         .build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/ToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/platform/ToolchainRule.java
index 5fedc80..c1aa78b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/ToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/ToolchainRule.java
@@ -47,7 +47,7 @@
         .removeAttribute("deps")
         .removeAttribute("data")
         .exemptFromConstraintChecking("this rule *defines* a constraint")
-        .supportsPlatforms(false)
+        .useToolchainResolution(false)
 
         /* <!-- #BLAZE_RULE(toolchain).ATTRIBUTE(toolchain_type) -->
         The label of a <code>toolchain_type</code> target that represents the role that this
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 94231f6..d674b5c 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
@@ -448,7 +448,7 @@
       return null;
     }
     Rule rule = ((Rule) targetAndConfig.getTarget());
-    if (!rule.getRuleClassObject().supportsPlatforms()) {
+    if (!rule.getRuleClassObject().useToolchainResolution()) {
       return null;
     }
     BuildConfiguration configuration = targetAndConfig.getConfiguration();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
index 0351338..634072e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
@@ -112,7 +112,7 @@
     try {
       if (configuredTargetAndData.getTarget() instanceof Rule) {
         Rule rule = ((Rule) configuredTargetAndData.getTarget());
-        if (rule.getRuleClassObject().supportsPlatforms()) {
+        if (rule.getRuleClassObject().useToolchainResolution()) {
           ImmutableSet<Label> requiredToolchains =
               rule.getRuleClassObject().getRequiredToolchains();
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java
index 255fe0e..d6b64bd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java
@@ -235,13 +235,9 @@
         return true;
       }
 
-      // If the rule requires platforms, it can't be used as a platform.
+      // If the rule requires platforms or toolchain resolution, it can't be used as a platform.
       RuleClass ruleClass = target.getAssociatedRule().getRuleClassObject();
-      if (ruleClass == null) {
-        return false;
-      }
-
-      if (ruleClass.supportsPlatforms()) {
+      if (ruleClass == null || ruleClass.useToolchainResolution()) {
         return false;
       }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
index 95479d3..26777af 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
@@ -918,7 +918,7 @@
         supportsConstraintChecking,
         ThirdPartyLicenseExistencePolicy.USER_CONTROLLABLE,
         /*requiredToolchains=*/ ImmutableSet.of(),
-        /*supportsPlatforms=*/ true,
+        /*useToolchainResolution=*/ true,
         ExecutionPlatformConstraintsAllowed.PER_RULE,
         /* executionPlatformConstraints= */ ImmutableSet.of(),
         OutputFile.Kind.FILE,
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java b/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
index cfbba7d..296435d 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
@@ -343,7 +343,7 @@
                           .add(
                               attr("deps", BuildType.LABEL_LIST)
                                   .allowedFileTypes(FileTypeSet.ANY_FILE))
-                          .supportsPlatforms(false)
+                          .useToolchainResolution(false)
                           .setImplicitOutputsFunction(
                               ImplicitOutputsFunction.fromTemplates("%{name}.np"));
                     });
@@ -359,7 +359,7 @@
                           .add(
                               attr("deps", BuildType.LABEL_LIST)
                                   .allowedFileTypes(FileTypeSet.ANY_FILE))
-                          .supportsPlatforms(true)
+                          .useToolchainResolution(true)
                           .setImplicitOutputsFunction(
                               ImplicitOutputsFunction.fromTemplates("%{name}.p"));
                     });
@@ -391,7 +391,7 @@
                             .add(
                                 attr("deps", BuildType.LABEL_LIST)
                                     .allowedFileTypes(FileTypeSet.ANY_FILE))
-                            .supportsPlatforms(true)
+                            .useToolchainResolution(true)
                             .addRequiredToolchains(toolchainTypeLabel)
                             .setImplicitOutputsFunction(
                                 ImplicitOutputsFunction.fromTemplates("%{name}.u"));
