1515namespace Humbug \PhpScoper ;
1616
1717use JetBrains \PHPStormStub \PhpStormStubsMap ;
18+ use function array_diff ;
1819use function array_fill_keys ;
20+ use function array_filter ;
1921use function array_keys ;
2022use function array_merge ;
2123use function strtolower ;
24+ use const PHP_VERSION_ID ;
2225
2326/**
2427 * @private
@@ -27,55 +30,55 @@ final class Reflector
2730{
2831 private const MISSING_CLASSES = [
2932 // https://github.com/JetBrains/phpstorm-stubs/pull/594
30- 'parallel\Channel ' ,
31- 'parallel\Channel\Error ' ,
32- 'parallel\Channel\Error\Closed ' ,
33- 'parallel\Channel\Error\Existence ' ,
34- 'parallel\Channel\Error\IllegalValue ' ,
35- 'parallel\Error ' ,
36- 'parallel\Events ' ,
37- 'parallel\Events\Error ' ,
38- 'parallel\Events\Error\Existence ' ,
39- 'parallel\Events\Error\Timeout ' ,
40- 'parallel\Events\Event ' ,
41- 'parallel\Events\Event\Type ' ,
42- 'parallel\Events\Input ' ,
43- 'parallel\Events\Input\Error ' ,
44- 'parallel\Events\Input\Error\Existence ' ,
45- 'parallel\Events\Input\Error\IllegalValue ' ,
46- 'parallel\Future ' ,
47- 'parallel\Future\Error ' ,
48- 'parallel\Future\Error\Cancelled ' ,
49- 'parallel\Future\Error\Foreign ' ,
50- 'parallel\Future\Error\Killed ' ,
51- 'parallel\Runtime ' ,
52- 'parallel\Runtime\Bootstrap ' ,
53- 'parallel\Runtime\Error ' ,
54- 'parallel\Runtime\Error\Bootstrap ' ,
55- 'parallel\Runtime\Error\Closed ' ,
56- 'parallel\Runtime\Error\IllegalFunction ' ,
57- 'parallel\Runtime\Error\IllegalInstruction ' ,
58- 'parallel\Runtime\Error\IllegalParameter ' ,
59- 'parallel\Runtime\Error\IllegalReturn ' ,
33+ 'parallel\Channel ' => 0 ,
34+ 'parallel\Channel\Error ' => 0 ,
35+ 'parallel\Channel\Error\Closed ' => 0 ,
36+ 'parallel\Channel\Error\Existence ' => 0 ,
37+ 'parallel\Channel\Error\IllegalValue ' => 0 ,
38+ 'parallel\Error ' => 0 ,
39+ 'parallel\Events ' => 0 ,
40+ 'parallel\Events\Error ' => 0 ,
41+ 'parallel\Events\Error\Existence ' => 0 ,
42+ 'parallel\Events\Error\Timeout ' => 0 ,
43+ 'parallel\Events\Event ' => 0 ,
44+ 'parallel\Events\Event\Type ' => 0 ,
45+ 'parallel\Events\Input ' => 0 ,
46+ 'parallel\Events\Input\Error ' => 0 ,
47+ 'parallel\Events\Input\Error\Existence ' => 0 ,
48+ 'parallel\Events\Input\Error\IllegalValue ' => 0 ,
49+ 'parallel\Future ' => 0 ,
50+ 'parallel\Future\Error ' => 0 ,
51+ 'parallel\Future\Error\Cancelled ' => 0 ,
52+ 'parallel\Future\Error\Foreign ' => 0 ,
53+ 'parallel\Future\Error\Killed ' => 0 ,
54+ 'parallel\Runtime ' => 0 ,
55+ 'parallel\Runtime\Bootstrap ' => 0 ,
56+ 'parallel\Runtime\Error ' => 0 ,
57+ 'parallel\Runtime\Error\Bootstrap ' => 0 ,
58+ 'parallel\Runtime\Error\Closed ' => 0 ,
59+ 'parallel\Runtime\Error\IllegalFunction ' => 0 ,
60+ 'parallel\Runtime\Error\IllegalInstruction ' => 0 ,
61+ 'parallel\Runtime\Error\IllegalParameter ' => 0 ,
62+ 'parallel\Runtime\Error\IllegalReturn ' => 0 ,
6063 ];
6164
6265 private const MISSING_FUNCTIONS = [];
6366
6467 private const MISSING_CONSTANTS = [
65- 'STDIN ' ,
66- 'STDOUT ' ,
67- 'STDERR ' ,
68+ 'STDIN ' => 0 ,
69+ 'STDOUT ' => 0 ,
70+ 'STDERR ' => 0 ,
6871 // Added in PHP 7.4
69- 'T_BAD_CHARACTER ' ,
70- 'T_FN ' ,
71- 'T_COALESCE_EQUAL ' ,
72+ 'T_BAD_CHARACTER ' => 70400 ,
73+ 'T_FN ' => 70400 ,
74+ 'T_COALESCE_EQUAL ' => 70400 ,
7275 // Added in PHP 8.0
73- 'T_NAME_QUALIFIED ' ,
74- 'T_NAME_FULLY_QUALIFIED ' ,
75- 'T_NAME_RELATIVE ' ,
76- 'T_MATCH ' ,
77- 'T_NULLSAFE_OBJECT_OPERATOR ' ,
78- 'T_ATTRIBUTE ' ,
76+ 'T_NAME_QUALIFIED ' => 80000 ,
77+ 'T_NAME_FULLY_QUALIFIED ' => 80000 ,
78+ 'T_NAME_RELATIVE ' => 80000 ,
79+ 'T_MATCH ' => 80000 ,
80+ 'T_NULLSAFE_OBJECT_OPERATOR ' => 80000 ,
81+ 'T_ATTRIBUTE ' => 80000 ,
7982 ];
8083
8184 private static $ CLASSES ;
@@ -87,18 +90,30 @@ final class Reflector
8790 /**
8891 * @param array<string,string>|null $symbols
8992 * @param array<string,string> $source
90- * @param string[] $missingSymbols
93+ * @param array< string, int> $missingSymbols
9194 */
9295 private static function initSymbolList (?array &$ symbols , array $ source , array $ missingSymbols ): void
9396 {
9497 if (null !== $ symbols ) {
9598 return ;
9699 }
97100
101+ $ excludingSymbols = array_keys (
102+ array_filter (
103+ $ missingSymbols ,
104+ static function ($ version ) {
105+ return PHP_VERSION_ID < $ version ;
106+ }
107+ )
108+ );
109+
98110 $ symbols = array_fill_keys (
99- array_merge (
100- array_keys ($ source ),
101- $ missingSymbols
111+ array_diff (
112+ array_merge (
113+ array_keys ($ source ),
114+ array_keys ($ missingSymbols )
115+ ),
116+ $ excludingSymbols
102117 ),
103118 true
104119 );
0 commit comments