5
5
use PHPStan \Reflection \ClassReflection ;
6
6
use PHPStan \ShouldNotHappenException ;
7
7
use PHPStan \Type \ObjectType ;
8
+ use Symfony \Bundle \FrameworkBundle \Console \Application ;
8
9
use function file_exists ;
9
10
use function get_class ;
10
11
use function is_readable ;
@@ -15,12 +16,16 @@ final class ConsoleApplicationResolver
15
16
/** @var \Symfony\Component\Console\Application|null */
16
17
private $ consoleApplication ;
17
18
18
- public function __construct (?string $ consoleApplicationLoader )
19
+ /**
20
+ * @phpcsSuppress SlevomatCodingStandard.ControlStructures.EarlyExit.EarlyExitNotUsed
21
+ */
22
+ public function __construct (?string $ consoleApplicationLoader , ?string $ consoleApplicationKernelClass )
19
23
{
20
- if ($ consoleApplicationLoader === null ) {
21
- return ;
24
+ if ($ consoleApplicationLoader !== null ) {
25
+ $ this ->consoleApplication = $ this ->loadConsoleApplication ($ consoleApplicationLoader );
26
+ } elseif ($ consoleApplicationKernelClass !== null ) {
27
+ $ this ->consoleApplication = $ this ->createConsoleApplication ($ consoleApplicationKernelClass );
22
28
}
23
- $ this ->consoleApplication = $ this ->loadConsoleApplication ($ consoleApplicationLoader );
24
29
}
25
30
26
31
/**
@@ -38,6 +43,22 @@ private function loadConsoleApplication(string $consoleApplicationLoader)
38
43
return require $ consoleApplicationLoader ;
39
44
}
40
45
46
+ /**
47
+ * @return \Symfony\Component\Console\Application|null
48
+ * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
49
+ */
50
+ private function createConsoleApplication (string $ consoleApplicationKernelClass )
51
+ {
52
+ if (!class_exists ($ consoleApplicationKernelClass )
53
+ || !is_a ($ consoleApplicationKernelClass , 'Symfony\Component\HttpKernel\KernelInterface ' )
54
+ ) {
55
+ throw new ShouldNotHappenException ();
56
+ }
57
+ $ kernel = new $ consoleApplicationKernelClass ($ _SERVER ['APP_ENV ' ] ?? 'dev ' , (bool ) $ _SERVER ['APP_DEBUG ' ] ?? true );
58
+
59
+ return new Application ($ kernel );
60
+ }
61
+
41
62
/**
42
63
* @return \Symfony\Component\Console\Command\Command[]
43
64
*/
0 commit comments