| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\Console\Command;use Symfony\Component\Console\Application;use Symfony\Component\Console\Completion\CompletionInput;use Symfony\Component\Console\Completion\CompletionSuggestions;use Symfony\Component\Console\Helper\HelperSet;use Symfony\Component\Console\Input\InputDefinition;use Symfony\Component\Console\Input\InputInterface;use Symfony\Component\Console\Output\OutputInterface;/** * @author Nicolas Grekas <p@tchwork.com> */final class LazyCommand extends Command{    private $command;    private $isEnabled;    public function __construct(string $name, array $aliases, string $description, bool $isHidden, \Closure $commandFactory, ?bool $isEnabled = true)    {        $this->setName($name)            ->setAliases($aliases)            ->setHidden($isHidden)            ->setDescription($description);        $this->command = $commandFactory;        $this->isEnabled = $isEnabled;    }    public function ignoreValidationErrors(): void    {        $this->getCommand()->ignoreValidationErrors();    }    public function setApplication(Application $application = null): void    {        if ($this->command instanceof parent) {            $this->command->setApplication($application);        }        parent::setApplication($application);    }    public function setHelperSet(HelperSet $helperSet): void    {        if ($this->command instanceof parent) {            $this->command->setHelperSet($helperSet);        }        parent::setHelperSet($helperSet);    }    public function isEnabled(): bool    {        return $this->isEnabled ?? $this->getCommand()->isEnabled();    }    public function run(InputInterface $input, OutputInterface $output): int    {        return $this->getCommand()->run($input, $output);    }    public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void    {        $this->getCommand()->complete($input, $suggestions);    }    /**     * @return $this     */    public function setCode(callable $code): self    {        $this->getCommand()->setCode($code);        return $this;    }    /**     * @internal     */    public function mergeApplicationDefinition(bool $mergeArgs = true): void    {        $this->getCommand()->mergeApplicationDefinition($mergeArgs);    }    /**     * @return $this     */    public function setDefinition($definition): self    {        $this->getCommand()->setDefinition($definition);        return $this;    }    public function getDefinition(): InputDefinition    {        return $this->getCommand()->getDefinition();    }    public function getNativeDefinition(): InputDefinition    {        return $this->getCommand()->getNativeDefinition();    }    /**     * @return $this     */    public function addArgument(string $name, int $mode = null, string $description = '', $default = null): self    {        $this->getCommand()->addArgument($name, $mode, $description, $default);        return $this;    }    /**     * @return $this     */    public function addOption(string $name, $shortcut = null, int $mode = null, string $description = '', $default = null): self    {        $this->getCommand()->addOption($name, $shortcut, $mode, $description, $default);        return $this;    }    /**     * @return $this     */    public function setProcessTitle(string $title): self    {        $this->getCommand()->setProcessTitle($title);        return $this;    }    /**     * @return $this     */    public function setHelp(string $help): self    {        $this->getCommand()->setHelp($help);        return $this;    }    public function getHelp(): string    {        return $this->getCommand()->getHelp();    }    public function getProcessedHelp(): string    {        return $this->getCommand()->getProcessedHelp();    }    public function getSynopsis(bool $short = false): string    {        return $this->getCommand()->getSynopsis($short);    }    /**     * @return $this     */    public function addUsage(string $usage): self    {        $this->getCommand()->addUsage($usage);        return $this;    }    public function getUsages(): array    {        return $this->getCommand()->getUsages();    }    /**     * @return mixed     */    public function getHelper(string $name)    {        return $this->getCommand()->getHelper($name);    }    public function getCommand(): parent    {        if (!$this->command instanceof \Closure) {            return $this->command;        }        $command = $this->command = ($this->command)();        $command->setApplication($this->getApplication());        if (null !== $this->getHelperSet()) {            $command->setHelperSet($this->getHelperSet());        }        $command->setName($this->getName())            ->setAliases($this->getAliases())            ->setHidden($this->isHidden())            ->setDescription($this->getDescription());        // Will throw if the command is not correctly initialized.        $command->getDefinition();        return $command;    }}
 |