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,14 @@ final class ConsoleApplicationResolver
15
16
/** @var \Symfony\Component\Console\Application|null */
16
17
private $ consoleApplication ;
17
18
18
- public function __construct (?string $ consoleApplicationLoader )
19
+ public function __construct (?string $ consoleApplicationLoader, ? string $ consoleApplicationKernelClass )
19
20
{
20
- if ($ consoleApplicationLoader === null ) {
21
- return ;
21
+ if ($ consoleApplicationLoader !== null ) {
22
+ $ this ->consoleApplication = $ this ->loadConsoleApplication ($ consoleApplicationLoader );
23
+ }
24
+ if ($ consoleApplicationKernelClass !== null ) {
25
+ $ this ->consoleApplication = $ this ->createConsoleApplication ($ consoleApplicationKernelClass );
22
26
}
23
- $ this ->consoleApplication = $ this ->loadConsoleApplication ($ consoleApplicationLoader );
24
27
}
25
28
26
29
/**
@@ -38,6 +41,22 @@ private function loadConsoleApplication(string $consoleApplicationLoader)
38
41
return require $ consoleApplicationLoader ;
39
42
}
40
43
44
+ /**
45
+ * @return \Symfony\Component\Console\Application|null
46
+ * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingReturnTypeHint
47
+ */
48
+ private function createConsoleApplication (string $ consoleApplicationKernelClass )
49
+ {
50
+ if (!class_exists ($ consoleApplicationKernelClass )
51
+ || !is_a ($ consoleApplicationKernelClass , 'Symfony\Component\HttpKernel\KernelInterface ' )
52
+ ) {
53
+ throw new ShouldNotHappenException ();
54
+ }
55
+ $ kernel = new $ consoleApplicationKernelClass ($ _SERVER ['APP_ENV ' ] ?? 'dev ' , (bool ) $ _SERVER ['APP_DEBUG ' ] ?? true );
56
+
57
+ return new Application ($ kernel );
58
+ }
59
+
41
60
/**
42
61
* @return \Symfony\Component\Console\Command\Command[]
43
62
*/
0 commit comments