/**
  * @param Application       $application
  * @param RawArgs           $args
  * @param InputStream|null  $inputStream
  * @param OutputStream|null $outputStream
  * @param OutputStream|null $errorStream
  *
  * @return ConsoleIO
  */
 public function createIO(Application $application, RawArgs $args, InputStream $inputStream = null, OutputStream $outputStream = null, OutputStream $errorStream = null)
 {
     $inputStream = $inputStream ?: new StandardInputStream();
     $outputStream = $outputStream ?: new StandardOutputStream();
     $errorStream = $errorStream ?: new ErrorOutputStream();
     $styleSet = $application->getConfig()->getStyleSet();
     if ($args->hasToken('--no-ansi')) {
         $outputFormatter = $errorFormatter = new PlainFormatter($styleSet);
     } elseif ($args->hasToken('--ansi')) {
         $outputFormatter = $errorFormatter = new AnsiFormatter($styleSet);
     } else {
         $outputFormatter = $outputStream->supportsAnsi() ? new AnsiFormatter($styleSet) : new PlainFormatter($styleSet);
         $errorFormatter = $errorStream->supportsAnsi() ? new AnsiFormatter($styleSet) : new PlainFormatter($styleSet);
     }
     $io = new ConsoleIO(new Input($inputStream), new Output($outputStream, $outputFormatter), new Output($errorStream, $errorFormatter));
     if ($args->hasToken('-vvv') || $this->isDebug()) {
         $io->setVerbosity(IO::DEBUG);
     } elseif ($args->hasToken('-vv')) {
         $io->setVerbosity(IO::VERY_VERBOSE);
     } elseif ($args->hasToken('-v')) {
         $io->setVerbosity(IO::VERBOSE);
     }
     if ($args->hasToken('--quiet') || $args->hasToken('-q')) {
         $io->setQuiet(true);
     }
     if ($args->hasToken('--no-interaction') || $args->hasToken('-n')) {
         $io->setInteractive(false);
     }
     return $io;
 }