added 'label_kind' to '--output' for  cquery

https://github.com/bazelbuild/bazel/issues/10574

Closes #10632.

PiperOrigin-RevId: 292228081
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
index 61ce4d8..ae05a70 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
@@ -219,7 +219,9 @@
         cqueryOptions.aspectDeps.createResolver(packageManager, eventHandler);
     return ImmutableList.of(
         new LabelAndConfigurationOutputFormatterCallback(
-            eventHandler, cqueryOptions, out, skyframeExecutor, accessor),
+            eventHandler, cqueryOptions, out, skyframeExecutor, accessor, true),
+        new LabelAndConfigurationOutputFormatterCallback(
+            eventHandler, cqueryOptions, out, skyframeExecutor, accessor, false),
         new TransitionsOutputFormatterCallback(
             eventHandler,
             cqueryOptions,
@@ -486,4 +488,3 @@
         SkyQueryEnvironment.DEFAULT_THREAD_COUNT);
   }
 }
-
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryOptions.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryOptions.java
index 2de9e3a..14aea6c 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/CqueryOptions.java
@@ -45,7 +45,7 @@
       effectTags = {OptionEffectTag.TERMINAL_OUTPUT},
       help =
           "The format in which the cquery results should be printed. Allowed values for cquery "
-              + "are: label, textproto, transitions, proto, jsonproto. If you select "
+              + "are: label, label_kind, textproto, transitions, proto, jsonproto. If you select "
               + "'transitions', you also have to specify the --transitions=(lite|full) option.")
   public String outputFormat;
 
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java
index 0f6bc91..39c0fd2 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/LabelAndConfigurationOutputFormatterCallback.java
@@ -18,25 +18,29 @@
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.CoreOptions.IncludeConfigFragmentsEnum;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
+import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
 import java.io.OutputStream;
 
 /** Default Output callback for cquery. Prints a label and configuration pair per result. */
 public class LabelAndConfigurationOutputFormatterCallback extends CqueryThreadsafeCallback {
+  private final boolean showKind;
 
   public LabelAndConfigurationOutputFormatterCallback(
       ExtendedEventHandler eventHandler,
       CqueryOptions options,
       OutputStream out,
       SkyframeExecutor skyframeExecutor,
-      TargetAccessor<ConfiguredTarget> accessor) {
+      TargetAccessor<ConfiguredTarget> accessor,
+      boolean showKind) {
     super(eventHandler, options, out, skyframeExecutor, accessor);
+    this.showKind = showKind;
   }
 
   @Override
   public String getName() {
-    return "label";
+    return this.showKind ? "label_kind" : "label";
   }
 
   @Override
@@ -44,9 +48,13 @@
     for (ConfiguredTarget configuredTarget : partialResult) {
       BuildConfiguration config =
           skyframeExecutor.getConfiguration(eventHandler, configuredTarget.getConfigurationKey());
-
-      StringBuilder output =
-          new StringBuilder()
+      StringBuilder output = new StringBuilder();
+      if (showKind) {
+        Target actualTarget = accessor.getTargetFromConfiguredTarget(configuredTarget);
+        output = output.append(actualTarget.getTargetKind()).append(" ");
+      }
+      output =
+          output
               .append(configuredTarget.getLabel())
               .append(" (")
               .append(config != null && config.isHostConfiguration() ? "HOST" : config)
@@ -66,4 +74,4 @@
       addResult(output.toString());
     }
   }
-}
\ No newline at end of file
+}
diff --git a/src/test/shell/integration/configured_query_test.sh b/src/test/shell/integration/configured_query_test.sh
index e3019fd..da3294a 100755
--- a/src/test/shell/integration/configured_query_test.sh
+++ b/src/test/shell/integration/configured_query_test.sh
@@ -90,6 +90,22 @@
  assert_contains "name: \"//$pkg:japanese\"" output
 }
 
+function test_basic_query_output_labelkind() {
+  local -r pkg=$FUNCNAME
+  mkdir -p $pkg
+  cat > $pkg/BUILD <<EOF
+sh_library(name='maple', data=[':japanese'])
+cc_binary(name='japanese', srcs = ['japanese.cc'])
+EOF
+
+ bazel cquery --output=label_kind "deps(//$pkg:maple)" > output 2>"$TEST_log" ||
+ --noimplicit_deps --nohost_deps fail "Expected success"
+
+ assert_contains "sh_library rule //$pkg:maple" output
+ assert_contains "cc_binary rule //$pkg:japanese" output
+ assert_contains "source file //$pkg:japanese.cc" output
+}
+
 function test_respects_selects() {
   local -r pkg=$FUNCNAME
   mkdir -p $pkg