Skip to content

Commit 9251db0

Browse files
committed
Made ConsoleApplicationResolver lazier
1 parent ce417c1 commit 9251db0

File tree

1 file changed

+30
-7
lines changed

1 file changed

+30
-7
lines changed

src/Symfony/ConsoleApplicationResolver.php

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,23 @@
55
use PHPStan\Reflection\ClassReflection;
66
use PHPStan\ShouldNotHappenException;
77
use PHPStan\Type\ObjectType;
8+
use Symfony\Component\Console\Application;
89
use function file_exists;
910
use function get_class;
1011
use function is_readable;
1112

1213
final class ConsoleApplicationResolver
1314
{
1415

15-
/** @var \Symfony\Component\Console\Application|null */
16+
/** @var string|null */
17+
private $consoleApplicationLoader;
18+
19+
/** @var \Symfony\Component\Console\Application|false|null */
1620
private $consoleApplication;
1721

1822
public function __construct(?string $consoleApplicationLoader)
1923
{
20-
if ($consoleApplicationLoader === null) {
21-
return;
22-
}
23-
$this->consoleApplication = $this->loadConsoleApplication($consoleApplicationLoader);
24+
$this->consoleApplicationLoader = $consoleApplicationLoader;
2425
}
2526

2627
/**
@@ -38,12 +39,34 @@ private function loadConsoleApplication(string $consoleApplicationLoader)
3839
return require $consoleApplicationLoader;
3940
}
4041

42+
public function getConsoleApplication(): ?Application
43+
{
44+
if ($this->consoleApplication === false) {
45+
return null;
46+
}
47+
48+
if ($this->consoleApplication !== null) {
49+
return $this->consoleApplication;
50+
}
51+
52+
if ($this->consoleApplicationLoader === null) {
53+
$this->consoleApplication = false;
54+
55+
return null;
56+
}
57+
58+
$this->consoleApplication = $this->loadConsoleApplication($this->consoleApplicationLoader);
59+
60+
return $this->consoleApplication;
61+
}
62+
4163
/**
4264
* @return \Symfony\Component\Console\Command\Command[]
4365
*/
4466
public function findCommands(ClassReflection $classReflection): array
4567
{
46-
if ($this->consoleApplication === null) {
68+
$consoleApplication = $this->getConsoleApplication();
69+
if ($consoleApplication === null) {
4770
return [];
4871
}
4972

@@ -53,7 +76,7 @@ public function findCommands(ClassReflection $classReflection): array
5376
}
5477

5578
$commands = [];
56-
foreach ($this->consoleApplication->all() as $name => $command) {
79+
foreach ($consoleApplication->all() as $name => $command) {
5780
if (!$classType->isSuperTypeOf(new ObjectType(get_class($command)))->yes()) {
5881
continue;
5982
}

0 commit comments

Comments
 (0)