Remove AbruptException(ExitCode exitCode) constructor.

This constructor was creating an Exception with a null message leading to possible
NullPointerExceptions in a few places in our codebase. The call sites have
been replaced with calls to AbruptException(String message, ExitCode exitCode) with
a meaningful message.

PiperOrigin-RevId: 196973540
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/SpawnLogModule.java b/src/main/java/com/google/devtools/build/lib/bazel/SpawnLogModule.java
index 86ab87e..ca6d3a3 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/SpawnLogModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/SpawnLogModule.java
@@ -54,7 +54,8 @@
             new AsynchronousFileOutputStream(executionOptions.executionLogFile));
       } catch (IOException e) {
         env.getReporter().handle(Event.error(e.getMessage()));
-        env.getBlazeModuleEnvironment().exit(new AbruptExitException(ExitCode.COMMAND_LINE_ERROR));
+        env.getBlazeModuleEnvironment().exit(new AbruptExitException(
+            "Error found creating SpawnLogContext", ExitCode.COMMAND_LINE_ERROR));
       }
       builder.addActionContext(spawnLogContext);
       builder.addActionContextConsumer(new SpawnLogContextConsumer());
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java
index 2127293..a3cafc2 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java
@@ -341,7 +341,8 @@
     String message = errorMessageFromException(t);
 
     report(ERROR, message);
-    moduleEnvironment.exit(new AbruptExitException(ExitCode.PUBLISH_ERROR));
+    moduleEnvironment.exit(new AbruptExitException(
+        "BuildEventServiceTransport internal error", ExitCode.PUBLISH_ERROR));
   }
 
   private void maybeReportUploadError() {
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
index 5453a98..36521f9 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
@@ -189,7 +189,8 @@
           new RemoteActionContextProvider(env, cache, executor, digestUtil, logDir);
     } catch (IOException e) {
       env.getReporter().handle(Event.error(e.getMessage()));
-      env.getBlazeModuleEnvironment().exit(new AbruptExitException(ExitCode.COMMAND_LINE_ERROR));
+      env.getBlazeModuleEnvironment().exit(new AbruptExitException(
+          "Error initializing RemoteModule", ExitCode.COMMAND_LINE_ERROR));
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
index 3e6343b..22ef333 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
@@ -464,7 +464,7 @@
   private ExitCode finalizeExitCode() {
     // Set the pending exception so that further calls to exit(AbruptExitException) don't lead to
     // unwanted thread interrupts.
-    if (pendingException.compareAndSet(null, new AbruptExitException(null))) {
+    if (pendingException.compareAndSet(null, new AbruptExitException("", null))) {
       return null;
     }
     if (Thread.currentThread() == commandThread) {
diff --git a/src/main/java/com/google/devtools/build/lib/util/AbruptExitException.java b/src/main/java/com/google/devtools/build/lib/util/AbruptExitException.java
index bb45bb4..3dabdfc 100644
--- a/src/main/java/com/google/devtools/build/lib/util/AbruptExitException.java
+++ b/src/main/java/com/google/devtools/build/lib/util/AbruptExitException.java
@@ -42,10 +42,6 @@
     this.exitCode = exitCode;
   }
 
-  public AbruptExitException(ExitCode exitCode) {
-    this.exitCode = exitCode;
-  }
-
   public ExitCode getExitCode() {
     return exitCode;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
index 80fc134..30d41ca 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
@@ -447,7 +447,7 @@
   public void exitForbidsNullExitCode() throws Exception {
     CommandState command = snooze.runIn(executor, dispatcher, /*expectInterruption=*/ false);
     try {
-      command.getModuleEnvironment().exit(new AbruptExitException(null));
+      command.getModuleEnvironment().exit(new AbruptExitException("", null));
       throw new AssertionError(
           "It shouldn't be allowed to pass an AbruptExitException with null ExitCode to exit()!");
     } catch (NullPointerException expected) {
@@ -460,16 +460,16 @@
   @Test
   public void callingExitOnceInterruptsAndOverridesExitCode() throws Exception {
     CommandState command = snooze.runIn(executor, dispatcher, /*expectInterruption=*/ false);
-    command.getModuleEnvironment().exit(new AbruptExitException(ExitCode.NO_TESTS_FOUND));
+    command.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.NO_TESTS_FOUND));
     command.assertFinishedWith(ExitCode.NO_TESTS_FOUND);
   }
 
   @Test
   public void callingExitSecondTimeNeitherInterruptsNorReOverridesExitCode() throws Exception {
     CommandState command = snooze.runIn(executor, dispatcher, /*expectInterruption=*/ true);
-    command.getModuleEnvironment().exit(new AbruptExitException(ExitCode.NO_TESTS_FOUND));
+    command.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.NO_TESTS_FOUND));
     command.assertNotFinishedYet();
-    command.getModuleEnvironment().exit(new AbruptExitException(ExitCode.ANALYSIS_FAILURE));
+    command.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.ANALYSIS_FAILURE));
     command.assertNotFinishedYet();
     command.requestExitWith(ExitCode.SUCCESS);
     command.assertFinishedWith(ExitCode.NO_TESTS_FOUND);
@@ -478,7 +478,7 @@
   @Test
   public void abruptExitCodesDontOverrideInfrastructureFailures() throws Exception {
     CommandState command = snooze.runIn(executor, dispatcher, /*expectInterruption=*/ true);
-    command.getModuleEnvironment().exit(new AbruptExitException(ExitCode.NO_TESTS_FOUND));
+    command.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.NO_TESTS_FOUND));
     command.assertNotFinishedYet();
     command.requestExitWith(ExitCode.BLAZE_INTERNAL_ERROR);
     command.assertFinishedWith(ExitCode.BLAZE_INTERNAL_ERROR);
@@ -492,7 +492,7 @@
     CommandState newCommandOnSameThread =
         snooze.runIn(executor, dispatcher, /*expectInterruption=*/ false);
     firstCommand.assertOnSameThreadAs(newCommandOnSameThread);
-    firstCommand.getModuleEnvironment().exit(new AbruptExitException(ExitCode.RUN_FAILURE));
+    firstCommand.getModuleEnvironment().exit(new AbruptExitException("", ExitCode.RUN_FAILURE));
     newCommandOnSameThread.assertNotFinishedYet();
     newCommandOnSameThread.requestExitWith(ExitCode.SUCCESS);
   }