Fix cquery errors to not show full stack trace when `--keep_going` is present.

PiperOrigin-RevId: 420039198
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryProcessor.java b/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryProcessor.java
index 6d71415..f0882c6 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/PostAnalysisQueryProcessor.java
@@ -94,18 +94,18 @@
         if (!request.getKeepGoing()) {
           throw new ViewCreationFailedException(errorMessage, e.getFailureDetail(), e);
         }
-        env.getReporter().error(null, errorMessage, e);
+        env.getReporter().error(null, errorMessage + ": " + e.getFailureDetail().getMessage());
       } catch (IOException e) {
         String errorMessage = "I/O error doing post analysis query";
+        FailureDetail failureDetail =
+            FailureDetail.newBuilder()
+                .setMessage(errorMessage + ": " + e.getMessage())
+                .setQuery(Query.newBuilder().setCode(Query.Code.OUTPUT_FORMATTER_IO_EXCEPTION))
+                .build();
         if (!request.getKeepGoing()) {
-          FailureDetail failureDetail =
-              FailureDetail.newBuilder()
-                  .setMessage(errorMessage + ": " + e.getMessage())
-                  .setQuery(Query.newBuilder().setCode(Query.Code.OUTPUT_FORMATTER_IO_EXCEPTION))
-                  .build();
           throw new ViewCreationFailedException(errorMessage, failureDetail, e);
         }
-        env.getReporter().error(null, errorMessage, e);
+        env.getReporter().error(null, failureDetail.getMessage());
       } catch (QueryRuntimeHelperException e) {
         throw new ExitException(DetailedExitCode.of(e.getFailureDetail()));
       } catch (OptionsParsingException e) {
diff --git a/src/main/java/com/google/devtools/build/lib/events/Reporter.java b/src/main/java/com/google/devtools/build/lib/events/Reporter.java
index c9e5190..7898542 100644
--- a/src/main/java/com/google/devtools/build/lib/events/Reporter.java
+++ b/src/main/java/com/google/devtools/build/lib/events/Reporter.java
@@ -19,6 +19,7 @@
 import com.google.devtools.build.lib.util.io.OutErr;
 import java.io.PrintStream;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import javax.annotation.Nullable;
 import net.starlark.java.syntax.Location;
 
 /**
@@ -170,9 +171,15 @@
     handle(Event.of(EventKind.FINISH, location, message));
   }
 
-  public void error(Location location, String message, Throwable error) {
+  public void error(Location location, String message) {
+    error(location, message, /*error=*/ null);
+  }
+
+  public void error(Location location, String message, @Nullable Throwable error) {
     handle(Event.error(location, message));
-    error.printStackTrace(new PrintStream(getOutErr().getErrorStream()));
+    if (error != null) {
+      error.printStackTrace(new PrintStream(getOutErr().getErrorStream()));
+    }
   }
 
   /**
diff --git a/src/test/shell/integration/configured_query_test.sh b/src/test/shell/integration/configured_query_test.sh
index 0f5e02f..2d5ec9c 100755
--- a/src/test/shell/integration/configured_query_test.sh
+++ b/src/test/shell/integration/configured_query_test.sh
@@ -1381,4 +1381,18 @@
   expect_log "Unknown configuration ID 'notaconfighash'"
 }
 
+function test_error_keep_going() {
+  local -r pkg=$FUNCNAME
+  mkdir -p $pkg
+  cat > $pkg/BUILD <<'EOF'
+sh_library(name='maple', deps=[':japanese'])
+sh_library(name='japanese')
+EOF
+
+  # This causes a failure in the cquery function, which should produce an
+  # actionable error, not a stack trace.
+  bazel cquery --keep_going "config(//$pkg:oak, notaconfighash)" > output 2>"$TEST_log" && fail "Expected error"
+  expect_not_log "QueryException"
+}
+
 run_suite "${PRODUCT_NAME} configured query tests"