Mark configurations as tool or non-tool in cquery/aquery proto output

1. Add a field to the Configuration message in the BES indicating if a
Configuration is a tool configuration.

2. In cquery and aquery proto output, add a field to the Configuration message
indicating if it's a tool configuration.

RELNOTES: In aquery and cquery proto output, indicate if a configuration is a
tool or non-tool configuration.
PiperOrigin-RevId: 429567132
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
index f604ceb..b2f673c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
@@ -861,6 +861,7 @@
                 .setPlatformName(getCpu())
                 .putAllMakeVariable(getMakeEnvironment())
                 .setCpu(getCpu())
+                .setIsTool(isToolConfiguration())
                 .build());
     return new BuildConfigurationEvent(eventId, builder.build());
   }
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
index 52204a3..379645b 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
@@ -410,6 +410,8 @@
   string platform_name = 2;
   string cpu = 3;
   map<string, string> make_variable = 4;
+  // Whether this configuration is used for building tools.
+  bool is_tool = 5;
 }
 
 // Payload of the event indicating the expansion of a target pattern.
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java
index ee74222..6844693 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java
@@ -89,6 +89,7 @@
                     .setMnemonic(configProto.getMnemonic())
                     .setPlatformName(configProto.getPlatformName())
                     .setId(entry.getValue())
+                    .setIsTool(configProto.getIsTool())
                     .build();
               })
           .collect(toImmutableList());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java
index fae3610..1158ac8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java
@@ -33,6 +33,7 @@
         .setChecksum(config.getEventId().getConfiguration().getId())
         .setMnemonic(configProto.getMnemonic())
         .setPlatformName(configProto.getPlatformName())
+        .setIsTool(configProto.getIsTool())
         .setId(id)
         .build();
   }
diff --git a/src/main/protobuf/analysis_v2.proto b/src/main/protobuf/analysis_v2.proto
index 28d72f0..d04916b 100644
--- a/src/main/protobuf/analysis_v2.proto
+++ b/src/main/protobuf/analysis_v2.proto
@@ -179,6 +179,9 @@
 
   // The checksum representation of the configuration options;
   string checksum = 4;
+
+  // Whether this configuration is used for building tools.
+  bool is_tool = 5;
 }
 
 message KeyValuePair {
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD b/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD
index 9048195..53d584a 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD
@@ -122,7 +122,7 @@
     deps = [
         ":configured_target_query_helper",
         ":configured_target_query_test",
-        "//src/main/java/com/google/devtools/build/lib/analysis:config/transition_factories",
+        "//src/main/java/com/google/devtools/build/lib/analysis:config/execution_transition_factory",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/query2",
@@ -132,7 +132,6 @@
         "//src/main/protobuf:analysis_v2_java_proto",
         "//src/main/protobuf:build_java_proto",
         "//src/test/java/com/google/devtools/build/lib/analysis/util",
-        "//src/test/java/com/google/devtools/build/lib/query2/testutil",
         "//third_party:guava",
         "//third_party:junit4",
         "//third_party:truth",
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java
index ca9ab11..3cfc52d 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java
@@ -23,7 +23,7 @@
 import com.google.devtools.build.lib.analysis.AnalysisProtosV2;
 import com.google.devtools.build.lib.analysis.AnalysisProtosV2.Configuration;
 import com.google.devtools.build.lib.analysis.AnalysisProtosV2.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.config.TransitionFactories;
+import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory;
 import com.google.devtools.build.lib.analysis.util.MockRule;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.NullEventHandler;
@@ -122,8 +122,6 @@
 
   @Test
   public void testConfigurations() throws Exception {
-    FooPatchTransition attributePatchTransition = new FooPatchTransition("SET BY PATCH");
-
     MockRule ruleWithPatch =
         () ->
             MockRule.define(
@@ -132,7 +130,7 @@
                     builder.add(
                         attr("deps", LABEL_LIST)
                             .allowedFileTypes(FileTypeSet.ANY_FILE)
-                            .cfg(TransitionFactories.of(attributePatchTransition))));
+                            .cfg(ExecutionTransitionFactory.create())));
     MockRule parentRuleClass =
         () ->
             MockRule.define(
@@ -157,14 +155,6 @@
     List<Configuration> configurations = cqueryResult.getConfigurationsList();
     assertThat(configurations).hasSize(2);
 
-    assertThat(configurations)
-        .ignoringFieldDescriptors(
-            Configuration.getDescriptor().findFieldByName("checksum"),
-            Configuration.getDescriptor().findFieldByName("id"))
-        .containsExactly(
-            Configuration.newBuilder().setMnemonic("k8-fastbuild").setPlatformName("k8").build(),
-            Configuration.newBuilder().setMnemonic("k8-fastbuild").setPlatformName("k8").build());
-
     List<ConfiguredTarget> resultsList = cqueryResult.getResultsList();
 
     ConfiguredTarget parentRuleProto = getRuleProtoByName(resultsList, "//test:parent_rule");
@@ -177,6 +167,16 @@
     Configuration parentConfiguration =
         getConfigurationForId(configurations, parentRuleProto.getConfigurationId());
     assertThat(parentConfiguration.getChecksum()).isEqualTo(parentRule.getConfigurationChecksum());
+    assertThat(parentConfiguration)
+        .ignoringFieldDescriptors(
+            Configuration.getDescriptor().findFieldByName("checksum"),
+            Configuration.getDescriptor().findFieldByName("id"))
+        .isEqualTo(
+            Configuration.newBuilder()
+                .setMnemonic("k8-fastbuild")
+                .setPlatformName("k8")
+                .setIsTool(false)
+                .build());
 
     ConfiguredTarget transitionRuleProto =
         getRuleProtoByName(resultsList, "//test:transition_rule");
@@ -193,6 +193,10 @@
     ConfiguredTarget depRuleProto = getRuleProtoByName(resultsList, "//test:dep");
     Configuration depRuleConfiguration =
         getConfigurationForId(configurations, depRuleProto.getConfigurationId());
+    assertThat(depRuleConfiguration.getPlatformName()).isEqualTo("k8");
+    assertThat(depRuleConfiguration.getMnemonic()).matches("k8-opt-exec-.*");
+    assertThat(depRuleConfiguration.getIsTool()).isTrue();
+
     KeyedConfiguredTarget depRule = getKeyedTargetByLabel(keyedTargets, "//test:dep");
 
     assertThat(depRuleProto.getConfiguration().getChecksum())