picocli

## Class CommandLine.RunLast

- java.lang.Object
- - picocli.CommandLine.AbstractHandler<R,CommandLine.AbstractParseResultHandler<R>>
  - - picocli.CommandLine.AbstractParseResultHandler<List<Object>>
    - - picocli.CommandLine.RunLast

All Implemented Interfaces:
  CommandLine.IExecutionStrategy, CommandLine.IParseResultHandler, CommandLine.IParseResultHandler2<List<Object>>

Enclosing class:
  CommandLine

    public static class CommandLine.RunLast
    extends CommandLine.AbstractParseResultHandler<List<Object>>
    implements CommandLine.IParseResultHandler

Command line execution strategy that prints help if requested, and otherwise executes the most specific `Runnable` or `Callable` subcommand. For use by the `execute` method.

Something like this:

         // RunLast implementation: print help if requested, otherwise execute the most specific subcommand
         List<CommandLine> parsedCommands = parseResult.asCommandLineList();
         if (CommandLine.printHelpIfRequested(parsedCommands, out(), err(), ansi())) {
             return emptyList();
         }
         CommandLine last = parsedCommands.get(parsedCommands.size() - 1);
         Object command = last.getCommand();
         Object result = null;
         if (command instanceof Runnable) {
             try {
                 ((Runnable) command).run();
             } catch (Exception ex) {
                 throw new ExecutionException(last, "Error in runnable " + command, ex);
             }
         } else if (command instanceof Callable) {
             try {
                 result = ((Callable) command).call();
             } catch (Exception ex) {
                 throw new ExecutionException(last, "Error in callable " + command, ex);
             }
         } else {
             throw new ExecutionException(last, "Parsed command (" + command + ") is not Runnable or Callable");
         }
         last.setExecutionResult(result);
         return Arrays.asList(result);

From picocli v2.0, `RunLast` is used to implement the `run` and `call` convenience methods.

Since:
  2.0

### Constructor Summary

Constructors
Constructor and Description
`RunLast()`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected List<CommandLine.IExitCodeGenerator>` `extractExitCodeGenerators(CommandLine.ParseResult parseResult)`
`protected List<Object>` `handle(CommandLine.ParseResult parseResult)` Executes the most specific `Runnable` or `Callable` subcommand.
`List<Object>` `handleParseResult(List<CommandLine> parsedCommands, PrintStream out, CommandLine.Help.Ansi ansi)` Prints help if requested, and otherwise executes the most specific `Runnable` or `Callable` subcommand.
`protected CommandLine.RunLast` `self()` Returns `this` to allow method chaining when calling the setters for a fluent API.

### Methods inherited from class picocli.CommandLine.AbstractParseResultHandler

`execute, handleParseResult`

### Methods inherited from class picocli.CommandLine.AbstractHandler

`andExit, ansi, colorScheme, err, exit, exitCode, hasExitCode, out, returnResultOrExit, throwOrExit, useAnsi, useErr, useOut`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### RunLast

    public RunLast()

### Method Detail

#### handleParseResult

    public List<Object> handleParseResult(List<CommandLine> parsedCommands,
                                          PrintStream out,
                                          CommandLine.Help.Ansi ansi)

Prints help if requested, and otherwise executes the most specific `Runnable` or `Callable` subcommand. Finally, either a list of result objects is returned, or the JVM is terminated if an exit code was set. If the last (sub)command does not implement either `Runnable` or `Callable`, an `ExecutionException` is thrown detailing the problem and capturing the offending `CommandLine` object.

Specified by:
  `handleParseResult` in interface `CommandLine.IParseResultHandler`
Parameters:
  `parsedCommands` - the `CommandLine` objects that resulted from successfully parsing the command line arguments
  `out` - the `PrintStream` to print help to if requested
  `ansi` - for printing help messages using ANSI styles and colors
Returns:
  an empty list if help was requested, or a list containing a single element: the result of calling the `Callable`, or a `null` element if the last (sub)command was a `Runnable`
Throws:
  `CommandLine.ParameterException` - if the `HelpCommand` was invoked for an unknown subcommand. Any `ParameterExceptions` thrown from this method are treated as if this exception was thrown during parsing and passed to the `CommandLine.IExceptionHandler`
  `CommandLine.ExecutionException` - if a problem occurred while processing the parse results; use `CommandLine.ExecutionException.getCommandLine()` to get the command or subcommand where processing failed

#### handle

    protected List<Object> handle(CommandLine.ParseResult parseResult)
                           throws CommandLine.ExecutionException

Executes the most specific `Runnable` or `Callable` subcommand. If the last (sub)command does not implement either `Runnable` or `Callable` and is not a `Method`, an `ExecutionException` is thrown detailing the problem and capturing the offending `CommandLine` object.

Specified by:
  `handle` in class `CommandLine.AbstractParseResultHandler<List<Object>>`
Parameters:
  `parseResult` - the `ParseResult` that resulted from successfully parsing the command line arguments
Returns:
  an empty list if help was requested, or a list containing a single element: the result of calling the `Callable`, or a `null` element if the last (sub)command was a `Runnable`
Throws:
  `CommandLine.ExecutionException` - if a problem occurred while processing the parse results; use `CommandLine.ExecutionException.getCommandLine()` to get the command or subcommand where processing failed
Since:
  3.0

#### extractExitCodeGenerators

    protected List<CommandLine.IExitCodeGenerator> extractExitCodeGenerators(CommandLine.ParseResult parseResult)

Overrides:
  `extractExitCodeGenerators` in class `CommandLine.AbstractParseResultHandler<List<Object>>`

#### self

    protected CommandLine.RunLast self()

Description copied from class: `CommandLine.AbstractHandler`
Returns `this` to allow method chaining when calling the setters for a fluent API.

Specified by:
  `self` in class `CommandLine.AbstractHandler<List<Object>,CommandLine.AbstractParseResultHandler<List<Object>>>`