anchor.diff:  }
   ----
   
  +CAUTION: Make sure any nested classes are `static`, or picocli will not be able to instantiate them without a <<Custom Factory>>.
  +
   [[IParameterPreprocessor_Parser_Plugin]]
   ==== `IParameterPreprocessor` Parser Plugin
   
  
positive.code: and all subcommands (and nested sub-subcommands) that were added _before_ the converter was registered.
  Subcommands added later will not have the converter added automatically.
  To ensure a custom type converter is available to all subcommands, register the type converter last, after adding subcommands.
  
  === Handling Invalid Input
  
  
negative.code: }
  ----
  
  CAUTION: Make sure any nested classes are `static`, or picocli will not be able to instantiate them without a <<Custom Factory>>.
  
  With this preprocessor in place the user can now specify his editor of choice (e.g. `--open=idea`). If no editor is given, the default editor is used:
  
  // We don't want to use a HTML table here: it suggests readers need to pay more attention to this than is really called for; while this is just an example.
  
  ----
  # User input # Command State
  # --------------------------
  --open A B   # editor: defaultEditor, file: A,    unmatched: [B]
  --open A     # editor: defaultEditor, file: A,    unmatched: []
  --open=A B   # editor: A,             file: B,    unmatched: []
  --open=A     # editor: A,             file: null, unmatched: []
  ----
  
  ==== Parser Plugin Comparison
  
  .Comparison of `IParameterPreprocessor` and `IParameterConsumer` parser plugins.
  [grid=cols,cols=3*,options="header"]
  |===
  | | *`IParameterPreprocessor`* | *`IParameterConsumer`*
  | *Summary* | Either augment (return `false`) or replace (return `true`) picocli parsing logic for the matched element. | Replaces picocli parsing logic for the matched element.
  | *Scope* | Commands as well as options and positional parameters. | Options and positional parameters only.
  | *Read parser state* | Yes, information may received via the `info` Map | No
  | *Modify parser state* | Yes, via modifying the `info` Map | No
  |===
  
  
  