Minor refactoring.

--
MOS_MIGRATED_REVID=139173954
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
index 1ba369d..6a10513 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
@@ -31,6 +31,7 @@
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.flags.InvocationPolicyEnforcer;
+import com.google.devtools.build.lib.runtime.commands.ProjectFileSupport;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.AnsiStrippingOutputStream;
 import com.google.devtools.build.lib.util.BlazeClock;
@@ -217,9 +218,9 @@
     return ExitCode.SUCCESS;
   }
 
-  private void parseArgsAndConfigs(OptionsParser optionsParser, Command commandAnnotation,
-      List<String> args, List<String> rcfileNotes, OutErr outErr)
-          throws OptionsParsingException {
+  private void parseArgsAndConfigs(CommandEnvironment env, OptionsParser optionsParser,
+      Command commandAnnotation, List<String> args, List<String> rcfileNotes, OutErr outErr)
+      throws OptionsParsingException {
 
     Function<String, String> commandOptionSourceFunction = new Function<String, String>() {
       @Override
@@ -245,6 +246,9 @@
             runtime.getCommandMap().keySet());
 
     parseOptionsForCommand(rcfileNotes, commandAnnotation, optionsParser, optionsMap, null, null);
+    if (commandAnnotation.builds()) {
+      ProjectFileSupport.handleProjectFiles(env, optionsParser, commandAnnotation.name());
+    }
 
     // Fix-point iteration until all configs are loaded.
     List<String> configsLoaded = ImmutableList.of();
@@ -397,7 +401,7 @@
     List<String> rcfileNotes = new ArrayList<>();
     try {
       optionsParser = createOptionsParser(command);
-      parseArgsAndConfigs(optionsParser, commandAnnotation, args, rcfileNotes, outErr);
+      parseArgsAndConfigs(env, optionsParser, commandAnnotation, args, rcfileNotes, outErr);
 
       InvocationPolicyEnforcer optionsPolicyEnforcer =
           new InvocationPolicyEnforcer(runtime.getInvocationPolicy());
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/ProjectFile.java b/src/main/java/com/google/devtools/build/lib/runtime/ProjectFile.java
index 63505e9..59c0a23 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/ProjectFile.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/ProjectFile.java
@@ -14,10 +14,9 @@
 
 package com.google.devtools.build.lib.runtime;
 
-import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
-
+import com.google.devtools.common.options.OptionsParsingException;
 import java.util.List;
 
 /**
@@ -40,7 +39,7 @@
      * file cannot be parsed, then it throws an exception.
      */
     ProjectFile getProjectFile(Path workingDirectory, List<Path> packagePath, PathFragment path)
-        throws AbruptExitException;
+        throws OptionsParsingException;
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/BuildCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/BuildCommand.java
index 7a647cb4..9aed4a7 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/BuildCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/BuildCommand.java
@@ -24,11 +24,9 @@
 import com.google.devtools.build.lib.runtime.BlazeRuntime;
 import com.google.devtools.build.lib.runtime.Command;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
-import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.common.options.OptionsParser;
 import com.google.devtools.common.options.OptionsProvider;
-
 import java.util.List;
 
 /**
@@ -51,9 +49,7 @@
 public final class BuildCommand implements BlazeCommand {
 
   @Override
-  public void editOptions(CommandEnvironment env, OptionsParser optionsParser)
-      throws AbruptExitException {
-    ProjectFileSupport.handleProjectFiles(env, optionsParser, "build");
+  public void editOptions(CommandEnvironment env, OptionsParser optionsParser) {
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java
index cfdabe6..3d3a9b0 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java
@@ -21,15 +21,12 @@
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
 import com.google.devtools.build.lib.runtime.CommonCommandOptions;
 import com.google.devtools.build.lib.runtime.ProjectFile;
-import com.google.devtools.build.lib.util.AbruptExitException;
-import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.common.options.OptionPriority;
 import com.google.devtools.common.options.OptionsParser;
 import com.google.devtools.common.options.OptionsParsingException;
 import com.google.devtools.common.options.OptionsProvider;
-
 import java.util.List;
 
 /**
@@ -46,19 +43,17 @@
    * are not enabled, then it throws an exception instead.
    */
   public static void handleProjectFiles(CommandEnvironment env, OptionsParser optionsParser,
-      String command) throws AbruptExitException {
+      String command) throws OptionsParsingException {
     BlazeRuntime runtime = env.getRuntime();
     List<String> targets = optionsParser.getResidue();
     ProjectFile.Provider projectFileProvider = runtime.getProjectFileProvider();
     if (projectFileProvider != null && !targets.isEmpty()
         && targets.get(0).startsWith(PROJECT_FILE_PREFIX)) {
       if (targets.size() > 1) {
-        throw new AbruptExitException("Cannot handle more than one +<file> argument yet",
-            ExitCode.COMMAND_LINE_ERROR);
+        throw new OptionsParsingException("Cannot handle more than one +<file> argument yet");
       }
       if (!optionsParser.getOptions(CommonCommandOptions.class).allowProjectFiles) {
-        throw new AbruptExitException("project file support is not enabled",
-            ExitCode.COMMAND_LINE_ERROR);
+        throw new OptionsParsingException("project file support is not enabled");
       }
       // TODO(bazel-team): This is currently treated as a path relative to the workspace - if the
       // cwd is a subdirectory of the workspace, that will be surprising, and we should interpret it
@@ -74,12 +69,8 @@
           env.getWorkingDirectory(), packagePath, projectFilePath);
       env.getReporter().handle(Event.info("Using " + projectFile.getName()));
 
-      try {
-        optionsParser.parse(
-            OptionPriority.RC_FILE, projectFile.getName(), projectFile.getCommandLineFor(command));
-      } catch (OptionsParsingException e) {
-        throw new AbruptExitException(e.getMessage(), ExitCode.COMMAND_LINE_ERROR);
-      }
+      optionsParser.parse(
+          OptionPriority.RC_FILE, projectFile.getName(), projectFile.getCommandLineFor(command));
       env.getEventBus().post(new GotProjectFileEvent(projectFile.getName()));
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java
index 7a802d1..7dfd144 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java
@@ -67,8 +67,6 @@
   @Override
   public void editOptions(CommandEnvironment env, OptionsParser optionsParser)
       throws AbruptExitException {
-    ProjectFileSupport.handleProjectFiles(env, optionsParser, commandName());
-
     TestOutputFormat testOutput = optionsParser.getOptions(ExecutionOptions.class).testOutput;
 
     try {