Passed
Push — master ( 8feb2a...cb2398 )
by Théo
01:57
created

Reflector::createConstantSymbolList()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
/** @noinspection ClassConstantCanBeUsedInspection */
4
5
declare(strict_types=1);
6
7
/*
8
 * This file is part of the humbug/php-scoper package.
9
 *
10
 * Copyright (c) 2017 Théo FIDRY <[email protected]>,
11
 *                    Pádraic Brady <[email protected]>
12
 *
13
 * For the full copyright and license information, please view the LICENSE
14
 * file that was distributed with this source code.
15
 */
16
17
namespace Humbug\PhpScoper\Symbol;
18
19
use JetBrains\PHPStormStub\PhpStormStubsMap;
20
use function array_keys;
21
use function array_merge;
22
23
/**
24
 * @private
25
 */
26
final class Reflector
27
{
28
    private const MISSING_CLASSES = [
29
        // https://github.com/JetBrains/phpstorm-stubs/commit/18a771fcdff1af5b5e2d2f815f886316447bacc9
30
        'Swoole\Atomic' ,
31
        'Swoole\Atomic\Long' ,
32
        'Swoole\Client' ,
33
        'Swoole\Client\Exception' ,
34
        'Swoole\Connection\Iterator' ,
35
        'Swoole\Coroutine' ,
36
        'Swoole\Coroutine\Channel' ,
37
        'Swoole\Coroutine\Client' ,
38
        'Swoole\Coroutine\Context' ,
39
        'Swoole\Coroutine\Curl\Exception' ,
40
        'Swoole\Coroutine\Http2\Client' ,
41
        'Swoole\Coroutine\Http2\Client\Exception' ,
42
        'Swoole\Coroutine\Http\Client' ,
43
        'Swoole\Coroutine\Http\Client\Exception' ,
44
        'Swoole\Coroutine\Http\Server' ,
45
        'Swoole\Coroutine\Iterator' ,
46
        'Swoole\Coroutine\MySQL' ,
47
        'Swoole\Coroutine\MySQL\Exception' ,
48
        'Swoole\Coroutine\MySQL\Statement' ,
49
        'Swoole\Coroutine\Redis' ,
50
        'Swoole\Coroutine\Scheduler' ,
51
        'Swoole\Coroutine\Socket' ,
52
        'Swoole\Coroutine\Socket\Exception' ,
53
        'Swoole\Coroutine\System' ,
54
        'Swoole\Error' ,
55
        'Swoole\Event' ,
56
        'Swoole\Exception' ,
57
        'Swoole\ExitException' ,
58
        'Swoole\Http2\Request' ,
59
        'Swoole\Http2\Response' ,
60
        'Swoole\Http\Request' ,
61
        'Swoole\Http\Response' ,
62
        'Swoole\Http\Server' ,
63
        'Swoole\Lock' ,
64
        'Swoole\Process' ,
65
        'Swoole\Process\Pool' ,
66
        'Swoole\Redis\Server' ,
67
        'Swoole\Runtime' ,
68
        'Swoole\Server' ,
69
        'Swoole\Server\Event' ,
70
        'Swoole\Server\Packet' ,
71
        'Swoole\Server\PipeMessage' ,
72
        'Swoole\Server\Port' ,
73
        'Swoole\Server\StatusInfo' ,
74
        'Swoole\Server\Task' ,
75
        'Swoole\Server\TaskResult' ,
76
        'Swoole\Table' ,
77
        'Swoole\Timer' ,
78
        'Swoole\Timer\Iterator' ,
79
        'Swoole\WebSocket\CloseFrame' ,
80
        'Swoole\WebSocket\Frame' ,
81
        'Swoole\WebSocket\Server' ,
82
83
        // https://youtrack.jetbrains.com/issue/WI-29503
84
        'MongoInsertBatch',
85
        'MongoDeleteBatch',
86
    ];
87
88
    private const MISSING_FUNCTIONS = [
89
        // https://youtrack.jetbrains.com/issue/WI-53323
90
        'tideways_xhprof_enable',
91
        'tideways_xhprof_disable',
92
93
        // https://github.com/JetBrains/phpstorm-stubs/commit/18a771fcdff1af5b5e2d2f815f886316447bacc9
94
        'defer',
95
        'go',
96
        'swoole_async_dns_lookup_coro',
97
        'swoole_async_set',
98
        'swoole_clear_dns_cache',
99
        'swoole_clear_error',
100
        'swoole_client_select',
101
        'swoole_coroutine_create',
102
        'swoole_coroutine_defer',
103
        'swoole_coroutine_socketpair',
104
        'swoole_cpu_num',
105
        'swoole_errno',
106
        'swoole_error_log',
107
        'swoole_error_log_ex',
108
        'swoole_event_add',
109
        'swoole_event_cycle',
110
        'swoole_event_defer',
111
        'swoole_event_del',
112
        'swoole_event_dispatch',
113
        'swoole_event_exit',
114
        'swoole_event_isset',
115
        'swoole_event_set',
116
        'swoole_event_wait',
117
        'swoole_event_write',
118
        'swoole_get_local_ip',
119
        'swoole_get_local_mac',
120
        'swoole_get_mime_type',
121
        'swoole_get_object_by_handle',
122
        'swoole_get_objects',
123
        'swoole_get_vm_status',
124
        'swoole_hashcode',
125
        'swoole_ignore_error',
126
        'swoole_internal_call_user_shutdown_begin',
127
        'swoole_last_error',
128
        'swoole_mime_type_add',
129
        'swoole_mime_type_delete',
130
        'swoole_mime_type_exists',
131
        'swoole_mime_type_get',
132
        'swoole_mime_type_list',
133
        'swoole_mime_type_set',
134
        'swoole_select',
135
        'swoole_set_process_name',
136
        'swoole_strerror',
137
        'swoole_substr_json_decode',
138
        'swoole_substr_unserialize',
139
        'swoole_test_kernel_coroutine',
140
        'swoole_timer_after',
141
        'swoole_timer_clear',
142
        'swoole_timer_clear_all',
143
        'swoole_timer_exists',
144
        'swoole_timer_info',
145
        'swoole_timer_list',
146
        'swoole_timer_set',
147
        'swoole_timer_stats',
148
        'swoole_timer_tick',
149
        'swoole_version',
150
151
        // https://youtrack.jetbrains.com/issue/WI-29503
152
        'bson_encode',
153
        'bson_decode',
154
    ];
155
156
    /**
157
     * Basically mirrors https://github.com/nikic/PHP-Parser/blob/9aebf377fcdf205b2156cb78c0bd6e7b2003f106/lib/PhpParser/Lexer.php#L430
158
     */
159
    private const MISSING_CONSTANTS = [
160
        'STDIN',
161
        'STDOUT',
162
        'STDERR',
163
164
        // https://github.com/humbug/php-scoper/issues/618
165
        'true',
166
        'TRUE',
167
        'false',
168
        'FALSE',
169
        'null',
170
        'NULL',
171
172
        // Added in PHP 8.0
173
        'T_NAME_QUALIFIED',
174
        'T_NAME_FULLY_QUALIFIED',
175
        'T_NAME_RELATIVE',
176
        'T_MATCH',
177
        'T_NULLSAFE_OBJECT_OPERATOR',
178
        'T_ATTRIBUTE',
179
180
        // Added in PHP 8.1
181
        'T_ENUM',
182
        'T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG',
183
        'T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG',
184
        'T_READONLY',
185
186
        // https://youtrack.jetbrains.com/issue/WI-53323
187
        'TIDEWAYS_XHPROF_FLAGS_MEMORY',
188
        'TIDEWAYS_XHPROF_FLAGS_MEMORY_MU',
189
        'TIDEWAYS_XHPROF_FLAGS_MEMORY_PMU',
190
        'TIDEWAYS_XHPROF_FLAGS_CPU',
191
        'TIDEWAYS_XHPROF_FLAGS_NO_BUILTINS',
192
        'TIDEWAYS_XHPROF_FLAGS_MEMORY_ALLOC',
193
        'TIDEWAYS_XHPROF_FLAGS_MEMORY_ALLOC_AS_MU',
194
195
        // https://github.com/JetBrains/phpstorm-stubs/commit/18a771fcdff1af5b5e2d2f815f886316447bacc9
196
        'SOCKET_ECANCELED',
197
        'SWOOLE_ASYNC',
198
        'SWOOLE_BASE',
199
        'SWOOLE_CHANNEL_CANCELED',
200
        'SWOOLE_CHANNEL_CLOSED',
201
        'SWOOLE_CHANNEL_OK',
202
        'SWOOLE_CHANNEL_TIMEOUT',
203
        'SWOOLE_CORO_END',
204
        'SWOOLE_CORO_INIT',
205
        'SWOOLE_CORO_MAX_NUM_LIMIT',
206
        'SWOOLE_CORO_RUNNING',
207
        'SWOOLE_CORO_WAITING',
208
        'SWOOLE_DEBUG',
209
        'SWOOLE_DEFAULT_MAX_CORO_NUM',
210
        'SWOOLE_DISPATCH_CO_CONN_LB',
211
        'SWOOLE_DISPATCH_CO_REQ_LB',
212
        'SWOOLE_DISPATCH_FDMOD',
213
        'SWOOLE_DISPATCH_IDLE_WORKER',
214
        'SWOOLE_DISPATCH_IPMOD',
215
        'SWOOLE_DISPATCH_RESULT_CLOSE_CONNECTION',
216
        'SWOOLE_DISPATCH_RESULT_DISCARD_PACKET',
217
        'SWOOLE_DISPATCH_RESULT_USERFUNC_FALLBACK',
218
        'SWOOLE_DISPATCH_ROUND',
219
        'SWOOLE_DISPATCH_STREAM',
220
        'SWOOLE_DISPATCH_UIDMOD',
221
        'SWOOLE_DISPATCH_USERFUNC',
222
        'SWOOLE_DTLS_CLIENT_METHOD',
223
        'SWOOLE_DTLS_SERVER_METHOD',
224
        'SWOOLE_ERROR_AIO_BAD_REQUEST',
225
        'SWOOLE_ERROR_AIO_CANCELED',
226
        'SWOOLE_ERROR_AIO_TIMEOUT',
227
        'SWOOLE_ERROR_BAD_IPV6_ADDRESS',
228
        'SWOOLE_ERROR_CLIENT_NO_CONNECTION',
229
        'SWOOLE_ERROR_CO_BLOCK_OBJECT_LOCKED',
230
        'SWOOLE_ERROR_CO_BLOCK_OBJECT_WAITING',
231
        'SWOOLE_ERROR_CO_CANCELED',
232
        'SWOOLE_ERROR_CO_CANNOT_CANCEL',
233
        'SWOOLE_ERROR_CO_DISABLED_MULTI_THREAD',
234
        'SWOOLE_ERROR_CO_GETCONTEXT_FAILED',
235
        'SWOOLE_ERROR_CO_HAS_BEEN_BOUND',
236
        'SWOOLE_ERROR_CO_HAS_BEEN_DISCARDED',
237
        'SWOOLE_ERROR_CO_IOCPINIT_FAILED',
238
        'SWOOLE_ERROR_CO_MAKECONTEXT_FAILED',
239
        'SWOOLE_ERROR_CO_MUTEX_DOUBLE_UNLOCK',
240
        'SWOOLE_ERROR_CO_NOT_EXISTS',
241
        'SWOOLE_ERROR_CO_OUT_OF_COROUTINE',
242
        'SWOOLE_ERROR_CO_PROTECT_STACK_FAILED',
243
        'SWOOLE_ERROR_CO_STD_THREAD_LINK_ERROR',
244
        'SWOOLE_ERROR_CO_SWAPCONTEXT_FAILED',
245
        'SWOOLE_ERROR_CO_TIMEDOUT',
246
        'SWOOLE_ERROR_CO_YIELD_FAILED',
247
        'SWOOLE_ERROR_DATA_LENGTH_TOO_LARGE',
248
        'SWOOLE_ERROR_DNSLOOKUP_DUPLICATE_REQUEST',
249
        'SWOOLE_ERROR_DNSLOOKUP_NO_SERVER',
250
        'SWOOLE_ERROR_DNSLOOKUP_RESOLVE_FAILED',
251
        'SWOOLE_ERROR_DNSLOOKUP_RESOLVE_TIMEOUT',
252
        'SWOOLE_ERROR_DNSLOOKUP_UNSUPPORTED',
253
        'SWOOLE_ERROR_EVENT_SOCKET_REMOVED',
254
        'SWOOLE_ERROR_FILE_EMPTY',
255
        'SWOOLE_ERROR_FILE_NOT_EXIST',
256
        'SWOOLE_ERROR_FILE_TOO_LARGE',
257
        'SWOOLE_ERROR_HTTP2_STREAM_ID_TOO_BIG',
258
        'SWOOLE_ERROR_HTTP2_STREAM_IGNORE',
259
        'SWOOLE_ERROR_HTTP2_STREAM_NOT_FOUND',
260
        'SWOOLE_ERROR_HTTP2_STREAM_NO_HEADER',
261
        'SWOOLE_ERROR_HTTP_INVALID_PROTOCOL',
262
        'SWOOLE_ERROR_HTTP_PROXY_BAD_RESPONSE',
263
        'SWOOLE_ERROR_HTTP_PROXY_HANDSHAKE_ERROR',
264
        'SWOOLE_ERROR_HTTP_PROXY_HANDSHAKE_FAILED',
265
        'SWOOLE_ERROR_INVALID_PARAMS',
266
        'SWOOLE_ERROR_MALLOC_FAIL',
267
        'SWOOLE_ERROR_NAME_TOO_LONG',
268
        'SWOOLE_ERROR_OPERATION_NOT_SUPPORT',
269
        'SWOOLE_ERROR_OUTPUT_BUFFER_OVERFLOW',
270
        'SWOOLE_ERROR_OUTPUT_SEND_YIELD',
271
        'SWOOLE_ERROR_PACKAGE_LENGTH_NOT_FOUND',
272
        'SWOOLE_ERROR_PACKAGE_LENGTH_TOO_LARGE',
273
        'SWOOLE_ERROR_PACKAGE_MALFORMED_DATA',
274
        'SWOOLE_ERROR_PHP_FATAL_ERROR',
275
        'SWOOLE_ERROR_PROTOCOL_ERROR',
276
        'SWOOLE_ERROR_QUEUE_FULL',
277
        'SWOOLE_ERROR_SERVER_CONNECT_FAIL',
278
        'SWOOLE_ERROR_SERVER_INVALID_COMMAND',
279
        'SWOOLE_ERROR_SERVER_INVALID_LISTEN_PORT',
280
        'SWOOLE_ERROR_SERVER_INVALID_REQUEST',
281
        'SWOOLE_ERROR_SERVER_MUST_CREATED_BEFORE_CLIENT',
282
        'SWOOLE_ERROR_SERVER_NO_IDLE_WORKER',
283
        'SWOOLE_ERROR_SERVER_ONLY_START_ONE',
284
        'SWOOLE_ERROR_SERVER_PIPE_BUFFER_FULL',
285
        'SWOOLE_ERROR_SERVER_SEND_IN_MASTER',
286
        'SWOOLE_ERROR_SERVER_TOO_MANY_LISTEN_PORT',
287
        'SWOOLE_ERROR_SERVER_TOO_MANY_SOCKET',
288
        'SWOOLE_ERROR_SERVER_WORKER_ABNORMAL_PIPE_DATA',
289
        'SWOOLE_ERROR_SERVER_WORKER_EXIT_TIMEOUT',
290
        'SWOOLE_ERROR_SERVER_WORKER_TERMINATED',
291
        'SWOOLE_ERROR_SERVER_WORKER_UNPROCESSED_DATA',
292
        'SWOOLE_ERROR_SESSION_CLOSED',
293
        'SWOOLE_ERROR_SESSION_CLOSED_BY_CLIENT',
294
        'SWOOLE_ERROR_SESSION_CLOSED_BY_SERVER',
295
        'SWOOLE_ERROR_SESSION_CLOSING',
296
        'SWOOLE_ERROR_SESSION_DISCARD_DATA',
297
        'SWOOLE_ERROR_SESSION_DISCARD_TIMEOUT_DATA',
298
        'SWOOLE_ERROR_SESSION_INVALID_ID',
299
        'SWOOLE_ERROR_SESSION_NOT_EXIST',
300
        'SWOOLE_ERROR_SOCKET_CLOSED',
301
        'SWOOLE_ERROR_SOCKET_POLL_TIMEOUT',
302
        'SWOOLE_ERROR_SOCKS5_AUTH_FAILED',
303
        'SWOOLE_ERROR_SOCKS5_HANDSHAKE_FAILED',
304
        'SWOOLE_ERROR_SOCKS5_SERVER_ERROR',
305
        'SWOOLE_ERROR_SOCKS5_UNSUPPORT_METHOD',
306
        'SWOOLE_ERROR_SOCKS5_UNSUPPORT_VERSION',
307
        'SWOOLE_ERROR_SSL_BAD_CLIENT',
308
        'SWOOLE_ERROR_SSL_BAD_PROTOCOL',
309
        'SWOOLE_ERROR_SSL_CANNOT_USE_SENFILE',
310
        'SWOOLE_ERROR_SSL_EMPTY_PEER_CERTIFICATE',
311
        'SWOOLE_ERROR_SSL_HANDSHAKE_FAILED',
312
        'SWOOLE_ERROR_SSL_NOT_READY',
313
        'SWOOLE_ERROR_SSL_RESET',
314
        'SWOOLE_ERROR_SSL_VERIFY_FAILED',
315
        'SWOOLE_ERROR_SYSTEM_CALL_FAIL',
316
        'SWOOLE_ERROR_TASK_DISPATCH_FAIL',
317
        'SWOOLE_ERROR_TASK_PACKAGE_TOO_BIG',
318
        'SWOOLE_ERROR_TASK_TIMEOUT',
319
        'SWOOLE_ERROR_UNREGISTERED_SIGNAL',
320
        'SWOOLE_ERROR_WEBSOCKET_BAD_CLIENT',
321
        'SWOOLE_ERROR_WEBSOCKET_BAD_OPCODE',
322
        'SWOOLE_ERROR_WEBSOCKET_HANDSHAKE_FAILED',
323
        'SWOOLE_ERROR_WEBSOCKET_INCOMPLETE_PACKET',
324
        'SWOOLE_ERROR_WEBSOCKET_PACK_FAILED',
325
        'SWOOLE_ERROR_WEBSOCKET_UNCONNECTED',
326
        'SWOOLE_ERROR_WEBSOCKET_UNPACK_FAILED',
327
        'SWOOLE_ERROR_WRONG_OPERATION',
328
        'SWOOLE_EVENT_READ',
329
        'SWOOLE_EVENT_WRITE',
330
        'SWOOLE_EXIT_IN_COROUTINE',
331
        'SWOOLE_EXIT_IN_SERVER',
332
        'SWOOLE_EXTRA_VERSION',
333
        'SWOOLE_FILELOCK',
334
        'SWOOLE_HAVE_BROTLI',
335
        'SWOOLE_HAVE_COMPRESSION',
336
        'SWOOLE_HAVE_ZLIB',
337
        'SWOOLE_HOOK_ALL',
338
        'SWOOLE_HOOK_BLOCKING_FUNCTION',
339
        'SWOOLE_HOOK_CURL',
340
        'SWOOLE_HOOK_FILE',
341
        'SWOOLE_HOOK_NATIVE_CURL',
342
        'SWOOLE_HOOK_PROC',
343
        'SWOOLE_HOOK_SLEEP',
344
        'SWOOLE_HOOK_SOCKETS',
345
        'SWOOLE_HOOK_SSL',
346
        'SWOOLE_HOOK_STDIO',
347
        'SWOOLE_HOOK_STREAM_FUNCTION',
348
        'SWOOLE_HOOK_STREAM_SELECT',
349
        'SWOOLE_HOOK_TCP',
350
        'SWOOLE_HOOK_TLS',
351
        'SWOOLE_HOOK_UDG',
352
        'SWOOLE_HOOK_UDP',
353
        'SWOOLE_HOOK_UNIX',
354
        'SWOOLE_HTTP2_ERROR_CANCEL',
355
        'SWOOLE_HTTP2_ERROR_COMPRESSION_ERROR',
356
        'SWOOLE_HTTP2_ERROR_CONNECT_ERROR',
357
        'SWOOLE_HTTP2_ERROR_ENHANCE_YOUR_CALM',
358
        'SWOOLE_HTTP2_ERROR_FLOW_CONTROL_ERROR',
359
        'SWOOLE_HTTP2_ERROR_FRAME_SIZE_ERROR',
360
        'SWOOLE_HTTP2_ERROR_INADEQUATE_SECURITY',
361
        'SWOOLE_HTTP2_ERROR_INTERNAL_ERROR',
362
        'SWOOLE_HTTP2_ERROR_NO_ERROR',
363
        'SWOOLE_HTTP2_ERROR_PROTOCOL_ERROR',
364
        'SWOOLE_HTTP2_ERROR_REFUSED_STREAM',
365
        'SWOOLE_HTTP2_ERROR_SETTINGS_TIMEOUT',
366
        'SWOOLE_HTTP2_ERROR_STREAM_CLOSED',
367
        'SWOOLE_HTTP2_TYPE_CONTINUATION',
368
        'SWOOLE_HTTP2_TYPE_DATA',
369
        'SWOOLE_HTTP2_TYPE_GOAWAY',
370
        'SWOOLE_HTTP2_TYPE_HEADERS',
371
        'SWOOLE_HTTP2_TYPE_PING',
372
        'SWOOLE_HTTP2_TYPE_PRIORITY',
373
        'SWOOLE_HTTP2_TYPE_PUSH_PROMISE',
374
        'SWOOLE_HTTP2_TYPE_RST_STREAM',
375
        'SWOOLE_HTTP2_TYPE_SETTINGS',
376
        'SWOOLE_HTTP2_TYPE_WINDOW_UPDATE',
377
        'SWOOLE_HTTP_CLIENT_ESTATUS_CONNECT_FAILED',
378
        'SWOOLE_HTTP_CLIENT_ESTATUS_REQUEST_TIMEOUT',
379
        'SWOOLE_HTTP_CLIENT_ESTATUS_SEND_FAILED',
380
        'SWOOLE_HTTP_CLIENT_ESTATUS_SERVER_RESET',
381
        'SWOOLE_IOV_MAX',
382
        'SWOOLE_IPC_MSGQUEUE',
383
        'SWOOLE_IPC_NONE',
384
        'SWOOLE_IPC_PREEMPTIVE',
385
        'SWOOLE_IPC_SOCKET',
386
        'SWOOLE_IPC_UNIXSOCK',
387
        'SWOOLE_IPC_UNSOCK',
388
        'SWOOLE_KEEP',
389
        'SWOOLE_LOG_DEBUG',
390
        'SWOOLE_LOG_ERROR',
391
        'SWOOLE_LOG_INFO',
392
        'SWOOLE_LOG_NONE',
393
        'SWOOLE_LOG_NOTICE',
394
        'SWOOLE_LOG_ROTATION_DAILY',
395
        'SWOOLE_LOG_ROTATION_EVERY_MINUTE',
396
        'SWOOLE_LOG_ROTATION_HOURLY',
397
        'SWOOLE_LOG_ROTATION_MONTHLY',
398
        'SWOOLE_LOG_ROTATION_SINGLE',
399
        'SWOOLE_LOG_TRACE',
400
        'SWOOLE_LOG_WARNING',
401
        'SWOOLE_MAJOR_VERSION',
402
        'SWOOLE_MINOR_VERSION',
403
        'SWOOLE_MUTEX',
404
        'SWOOLE_MYSQLND_CR_CANT_FIND_CHARSET',
405
        'SWOOLE_MYSQLND_CR_COMMANDS_OUT_OF_SYNC',
406
        'SWOOLE_MYSQLND_CR_CONNECTION_ERROR',
407
        'SWOOLE_MYSQLND_CR_INVALID_BUFFER_USE',
408
        'SWOOLE_MYSQLND_CR_INVALID_PARAMETER_NO',
409
        'SWOOLE_MYSQLND_CR_MALFORMED_PACKET',
410
        'SWOOLE_MYSQLND_CR_NOT_IMPLEMENTED',
411
        'SWOOLE_MYSQLND_CR_NO_PREPARE_STMT',
412
        'SWOOLE_MYSQLND_CR_OUT_OF_MEMORY',
413
        'SWOOLE_MYSQLND_CR_PARAMS_NOT_BOUND',
414
        'SWOOLE_MYSQLND_CR_SERVER_GONE_ERROR',
415
        'SWOOLE_MYSQLND_CR_SERVER_LOST',
416
        'SWOOLE_MYSQLND_CR_UNKNOWN_ERROR',
417
        'SWOOLE_PROCESS',
418
        'SWOOLE_REDIS_ERR_ALLOC',
419
        'SWOOLE_REDIS_ERR_CLOSED',
420
        'SWOOLE_REDIS_ERR_EOF',
421
        'SWOOLE_REDIS_ERR_IO',
422
        'SWOOLE_REDIS_ERR_NOAUTH',
423
        'SWOOLE_REDIS_ERR_OOM',
424
        'SWOOLE_REDIS_ERR_OTHER',
425
        'SWOOLE_REDIS_ERR_PROTOCOL',
426
        'SWOOLE_REDIS_MODE_MULTI',
427
        'SWOOLE_REDIS_MODE_PIPELINE',
428
        'SWOOLE_REDIS_TYPE_HASH',
429
        'SWOOLE_REDIS_TYPE_LIST',
430
        'SWOOLE_REDIS_TYPE_NOT_FOUND',
431
        'SWOOLE_REDIS_TYPE_SET',
432
        'SWOOLE_REDIS_TYPE_STRING',
433
        'SWOOLE_REDIS_TYPE_ZSET',
434
        'SWOOLE_RELEASE_VERSION',
435
        'SWOOLE_RWLOCK',
436
        'SWOOLE_SEM',
437
        'SWOOLE_SERVER_COMMAND_EVENT_WORKER',
438
        'SWOOLE_SERVER_COMMAND_MANAGER',
439
        'SWOOLE_SERVER_COMMAND_MASTER',
440
        'SWOOLE_SERVER_COMMAND_REACTOR_THREAD',
441
        'SWOOLE_SERVER_COMMAND_TASK_WORKER',
442
        'SWOOLE_SERVER_COMMAND_WORKER',
443
        'SWOOLE_SOCK_ASYNC',
444
        'SWOOLE_SOCK_SYNC',
445
        'SWOOLE_SOCK_TCP',
446
        'SWOOLE_SOCK_TCP6',
447
        'SWOOLE_SOCK_UDP',
448
        'SWOOLE_SOCK_UDP6',
449
        'SWOOLE_SOCK_UNIX_DGRAM',
450
        'SWOOLE_SOCK_UNIX_STREAM',
451
        'SWOOLE_SPINLOCK',
452
        'SWOOLE_SSL',
453
        'SWOOLE_SSL_DTLS',
454
        'SWOOLE_SSL_SSLv2',
455
        'SWOOLE_SSL_TLSv1',
456
        'SWOOLE_SSL_TLSv1_1',
457
        'SWOOLE_SSL_TLSv1_2',
458
        'SWOOLE_SSL_TLSv1_3',
459
        'SWOOLE_SSLv23_CLIENT_METHOD',
460
        'SWOOLE_SSLv23_METHOD',
461
        'SWOOLE_SSLv23_SERVER_METHOD',
462
        'SWOOLE_SSLv3_CLIENT_METHOD',
463
        'SWOOLE_SSLv3_METHOD',
464
        'SWOOLE_SSLv3_SERVER_METHOD',
465
        'SWOOLE_STRERROR_DNS',
466
        'SWOOLE_STRERROR_GAI',
467
        'SWOOLE_STRERROR_SWOOLE',
468
        'SWOOLE_STRERROR_SYSTEM',
469
        'SWOOLE_SYNC',
470
        'SWOOLE_TASK_CALLBACK',
471
        'SWOOLE_TASK_COROUTINE',
472
        'SWOOLE_TASK_NONBLOCK',
473
        'SWOOLE_TASK_NOREPLY',
474
        'SWOOLE_TASK_PEEK',
475
        'SWOOLE_TASK_SERIALIZE',
476
        'SWOOLE_TASK_TMPFILE',
477
        'SWOOLE_TASK_WAITALL',
478
        'SWOOLE_TCP',
479
        'SWOOLE_TCP6',
480
        'SWOOLE_TIMER_MAX_MS',
481
        'SWOOLE_TIMER_MAX_SEC',
482
        'SWOOLE_TIMER_MIN_MS',
483
        'SWOOLE_TIMER_MIN_SEC',
484
        'SWOOLE_TLS_CLIENT_METHOD',
485
        'SWOOLE_TLS_METHOD',
486
        'SWOOLE_TLS_SERVER_METHOD',
487
        'SWOOLE_TLSv1_1_CLIENT_METHOD',
488
        'SWOOLE_TLSv1_1_METHOD',
489
        'SWOOLE_TLSv1_1_SERVER_METHOD',
490
        'SWOOLE_TLSv1_2_CLIENT_METHOD',
491
        'SWOOLE_TLSv1_2_METHOD',
492
        'SWOOLE_TLSv1_2_SERVER_METHOD',
493
        'SWOOLE_TLSv1_CLIENT_METHOD',
494
        'SWOOLE_TLSv1_METHOD',
495
        'SWOOLE_TLSv1_SERVER_METHOD',
496
        'SWOOLE_TRACE_AIO',
497
        'SWOOLE_TRACE_ALL',
498
        'SWOOLE_TRACE_BUFFER',
499
        'SWOOLE_TRACE_CARES',
500
        'SWOOLE_TRACE_CHANNEL',
501
        'SWOOLE_TRACE_CLIENT',
502
        'SWOOLE_TRACE_CLOSE',
503
        'SWOOLE_TRACE_CONN',
504
        'SWOOLE_TRACE_CONTEXT',
505
        'SWOOLE_TRACE_COROUTINE',
506
        'SWOOLE_TRACE_CO_CURL',
507
        'SWOOLE_TRACE_CO_HTTP_SERVER',
508
        'SWOOLE_TRACE_EOF_PROTOCOL',
509
        'SWOOLE_TRACE_EVENT',
510
        'SWOOLE_TRACE_HTTP',
511
        'SWOOLE_TRACE_HTTP2',
512
        'SWOOLE_TRACE_HTTP_CLIENT',
513
        'SWOOLE_TRACE_LENGTH_PROTOCOL',
514
        'SWOOLE_TRACE_MEMORY',
515
        'SWOOLE_TRACE_MYSQL_CLIENT',
516
        'SWOOLE_TRACE_NORMAL',
517
        'SWOOLE_TRACE_PHP',
518
        'SWOOLE_TRACE_REACTOR',
519
        'SWOOLE_TRACE_REDIS_CLIENT',
520
        'SWOOLE_TRACE_SERVER',
521
        'SWOOLE_TRACE_SOCKET',
522
        'SWOOLE_TRACE_SSL',
523
        'SWOOLE_TRACE_TABLE',
524
        'SWOOLE_TRACE_TIMER',
525
        'SWOOLE_TRACE_WEBSOCKET',
526
        'SWOOLE_TRACE_WORKER',
527
        'SWOOLE_UDP',
528
        'SWOOLE_UDP6',
529
        'SWOOLE_UNIX_DGRAM',
530
        'SWOOLE_UNIX_STREAM',
531
        'SWOOLE_USE_HTTP2',
532
        'SWOOLE_USE_SHORTNAME',
533
        'SWOOLE_VERSION',
534
        'SWOOLE_VERSION_ID',
535
        'SWOOLE_WEBSOCKET_CLOSE_ABNORMAL',
536
        'SWOOLE_WEBSOCKET_CLOSE_DATA_ERROR',
537
        'SWOOLE_WEBSOCKET_CLOSE_EXTENSION_MISSING',
538
        'SWOOLE_WEBSOCKET_CLOSE_GOING_AWAY',
539
        'SWOOLE_WEBSOCKET_CLOSE_MESSAGE_ERROR',
540
        'SWOOLE_WEBSOCKET_CLOSE_MESSAGE_TOO_BIG',
541
        'SWOOLE_WEBSOCKET_CLOSE_NORMAL',
542
        'SWOOLE_WEBSOCKET_CLOSE_POLICY_ERROR',
543
        'SWOOLE_WEBSOCKET_CLOSE_PROTOCOL_ERROR',
544
        'SWOOLE_WEBSOCKET_CLOSE_SERVER_ERROR',
545
        'SWOOLE_WEBSOCKET_CLOSE_STATUS_ERROR',
546
        'SWOOLE_WEBSOCKET_CLOSE_TLS',
547
        'SWOOLE_WEBSOCKET_FLAG_COMPRESS',
548
        'SWOOLE_WEBSOCKET_FLAG_FIN',
549
        'SWOOLE_WEBSOCKET_FLAG_MASK',
550
        'SWOOLE_WEBSOCKET_FLAG_RSV1',
551
        'SWOOLE_WEBSOCKET_FLAG_RSV2',
552
        'SWOOLE_WEBSOCKET_FLAG_RSV3',
553
        'SWOOLE_WEBSOCKET_OPCODE_BINARY',
554
        'SWOOLE_WEBSOCKET_OPCODE_CLOSE',
555
        'SWOOLE_WEBSOCKET_OPCODE_CONTINUATION',
556
        'SWOOLE_WEBSOCKET_OPCODE_PING',
557
        'SWOOLE_WEBSOCKET_OPCODE_PONG',
558
        'SWOOLE_WEBSOCKET_OPCODE_TEXT',
559
        'SWOOLE_WEBSOCKET_STATUS_ACTIVE',
560
        'SWOOLE_WEBSOCKET_STATUS_CLOSING',
561
        'SWOOLE_WEBSOCKET_STATUS_CONNECTION',
562
        'SWOOLE_WEBSOCKET_STATUS_HANDSHAKE',
563
        'SWOOLE_WORKER_BUSY',
564
        'SWOOLE_WORKER_EXIT',
565
        'SWOOLE_WORKER_IDLE',
566
        'WEBSOCKET_CLOSE_ABNORMAL',
567
        'WEBSOCKET_CLOSE_DATA_ERROR',
568
        'WEBSOCKET_CLOSE_EXTENSION_MISSING',
569
        'WEBSOCKET_CLOSE_GOING_AWAY',
570
        'WEBSOCKET_CLOSE_MESSAGE_ERROR',
571
        'WEBSOCKET_CLOSE_MESSAGE_TOO_BIG',
572
        'WEBSOCKET_CLOSE_NORMAL',
573
        'WEBSOCKET_CLOSE_POLICY_ERROR',
574
        'WEBSOCKET_CLOSE_PROTOCOL_ERROR',
575
        'WEBSOCKET_CLOSE_SERVER_ERROR',
576
        'WEBSOCKET_CLOSE_STATUS_ERROR',
577
        'WEBSOCKET_CLOSE_TLS',
578
        'WEBSOCKET_OPCODE_BINARY',
579
        'WEBSOCKET_OPCODE_CLOSE',
580
        'WEBSOCKET_OPCODE_CONTINUATION',
581
        'WEBSOCKET_OPCODE_PING',
582
        'WEBSOCKET_OPCODE_PONG',
583
        'WEBSOCKET_OPCODE_TEXT',
584
        'WEBSOCKET_STATUS_ACTIVE',
585
        'WEBSOCKET_STATUS_CLOSING',
586
        'WEBSOCKET_STATUS_CONNECTION',
587
        'WEBSOCKET_STATUS_FRAME',
588
        'WEBSOCKET_STATUS_HANDSHAKE',
589
590
        // https://youtrack.jetbrains.com/issue/WI-29503
591
        'MONGODB_VERSION',
592
        'MONGODB_STABILITY',
593
    ];
594
595
    private SymbolRegistry $classes;
596
    private SymbolRegistry $functions;
597
    private SymbolRegistry $constants;
598
599
    public static function createWithPhpStormStubs(): self
600
    {
601
        return new self(
602
            self::createSymbolList(
603
                array_keys(PhpStormStubsMap::CLASSES),
604
                self::MISSING_CLASSES,
605
            ),
606
            self::createSymbolList(
607
                array_keys(PhpStormStubsMap::FUNCTIONS),
608
                self::MISSING_FUNCTIONS,
609
            ),
610
            self::createConstantSymbolList(
611
                array_keys(PhpStormStubsMap::CONSTANTS),
612
                self::MISSING_CONSTANTS,
613
            ),
614
        );
615
    }
616
617
    public static function createEmpty(): self
618
    {
619
        return new self(
620
            SymbolRegistry::create(),
621
            SymbolRegistry::create(),
622
            SymbolRegistry::createForConstants(),
623
        );
624
    }
625
626
    private function __construct(
627
        SymbolRegistry $classes,
628
        SymbolRegistry $functions,
629
        SymbolRegistry $constants
630
    ) {
631
        $this->classes = $classes;
632
        $this->functions = $functions;
633
        $this->constants = $constants;
634
    }
635
636
    public function withAdditionalSymbols(
637
        SymbolRegistry $classNames,
638
        SymbolRegistry $functionNames,
639
        SymbolRegistry $constantNames
640
    ): self
641
    {
642
        return new self(
643
            $this->classes->merge($classNames),
644
            $this->functions->merge($functionNames),
645
            $this->constants->merge($constantNames),
646
        );
647
    }
648
649
    public function isClassInternal(string $name): bool
650
    {
651
        return $this->classes->matches($name);
652
    }
653
654
    public function isFunctionInternal(string $name): bool
655
    {
656
        return $this->functions->matches($name);
657
    }
658
659
    public function isConstantInternal(string $name): bool
660
    {
661
        return $this->constants->matches($name);
662
    }
663
664
    /**
665
     * @param string[] $sources
666
     */
667
    private static function createSymbolList(array ...$sources): SymbolRegistry
668
    {
669
        return SymbolRegistry::create(
670
            array_merge(...$sources),
671
        );
672
    }
673
674
    /**
675
     * @param string[] $sources
676
     */
677
    private static function createConstantSymbolList(array ...$sources): SymbolRegistry
678
    {
679
        return SymbolRegistry::createForConstants(
680
            array_merge(...$sources),
681
        );
682
    }
683
}
684