From 9ed5fa982e80fcc494c5d69f700d60ba17c7d33c Mon Sep 17 00:00:00 2001 From: Toon Verwerft Date: Tue, 21 Oct 2025 09:36:19 +0200 Subject: [PATCH] feat: Upgrade to PHP 8.5, remove PHP 8.2 support This commit upgrades the project to support PHP 8.5 while maintaining compatibility with PHP 8.3 and 8.4. Changes made: - Remove PHP 8.2 support, add PHP 8.5 support in composer.json - Update `azjezz/psl` to support both ^3.1 and ^4.0 ranges for forward compatibility - Add `phpunit/phpunit` ~12.4, `vimeo/psalm` ~6.13, and `php-cs-fixer/shim` ~3.88 - Update `phpro/grumphp-shim` to ^2.17 - Remove `phive.xml`, `.phive` and `tools` folder (switched to vendor/bin) - Update GitHub workflow to test PHP 8.3, 8.4, 8.5 (with continue-on-error for 8.5) - Update workflow to use vendor/bin executables instead of .phar files - Upgrade test suite to PHPUnit 12 using `@dataProvider` annotations to DataProvider attributes - Replace `@test` annotations with Test attributes - Update phpunit.xml to use vendor schema and add new configuration options - Update psalm.xml with `findUnusedCode="false"` and `ensureOverrideAttribute="false"` - Fix missing return type in closure for Psalm compatibility All tests passing (100 tests, 204 assertions). Changed by GitHub Copilot CLI agent. --- .github/workflows/grumphp.yaml | 7 +- composer.json | 13 +- phive.xml | 6 - phpunit.xml | 6 +- psalm.xml | 1 + src/Test/UseMockClient.php | 2 +- .../Client/Factory/FactoriesTest.php | 9 +- .../Client/Factory/LazyClientLoaderTest.php | 5 +- .../Encoding/Binary/BinaryFileDecoderTest.php | 9 +- tests/Unit/Encoding/Binary/BinaryFileTest.php | 3 +- .../Extractor/ExtensionExtractorTest.php | 9 +- .../Extractor/FilenameExtractorTest.php | 9 +- .../Binary/Extractor/HashExtractorTest.php | 9 +- .../Extractor/MimeTypeExtractorTest.php | 9 +- .../Binary/Extractor/SizeExtractorTest.php | 8 +- .../FormUrlencodedDecoderTest.php | 5 +- .../FormUrlencodedEncoderTest.php | 5 +- tests/Unit/Encoding/Json/JsonDecoderTest.php | 5 +- tests/Unit/Encoding/Json/JsonEncoderTest.php | 5 +- .../Encoding/Mime/MultiPartEncoderTest.php | 3 +- .../Encoding/Psr7/ResponseDecoderTest.php | 3 +- .../Encoding/Raw/EmptyBodyEncoderTest.php | 3 +- tests/Unit/Encoding/Raw/RawDecoderTest.php | 3 +- tests/Unit/Encoding/Raw/RawEncoderTest.php | 3 +- .../Encoding/Stream/StreamDecoderTest.php | 3 +- .../Encoding/Stream/StreamEncoderTest.php | 3 +- .../Factory/BasicFormatterFactoryTest.php | 5 +- ...RemoveSensitiveHeaderKeysFormatterTest.php | 30 +- .../RemoveSensitiveJsonKeysFormatterTest.php | 30 +- ...moveSensitiveQueryStringsFormatterTest.php | 25 +- .../Unit/Plugin/AcceptLanguagePluginTest.php | 3 +- tests/Unit/Plugin/CallbackPluginTest.php | 3 +- tests/Unit/Request/RequestTest.php | 5 +- tests/Unit/Sdk/Rest/CreateTest.php | 3 +- tests/Unit/Sdk/Rest/DeleteTest.php | 3 +- tests/Unit/Sdk/Rest/FindTest.php | 3 +- tests/Unit/Sdk/Rest/GetTest.php | 5 +- tests/Unit/Sdk/Rest/PatchTest.php | 3 +- tests/Unit/Sdk/Rest/UpdateTest.php | 3 +- .../Serializer/SerializerExceptionTest.php | 3 +- .../Unit/Serializer/SymfonySerializerTest.php | 7 +- .../Unit/Transport/CallbackTransportTest.php | 3 +- tests/Unit/Transport/EncodedTransportTest.php | 5 +- .../IO/Input/EncodingRequestConverterTest.php | 3 +- .../Presets/BinaryDownloadPresetTest.php | 11 +- .../Presets/FormUrlencodedPresetTest.php | 2 +- .../Unit/Transport/Presets/JsonPresetTest.php | 3 +- .../Unit/Transport/Presets/PsrPresetTest.php | 3 +- .../Unit/Transport/Presets/RawPresetTest.php | 3 +- .../Serializer/SerializerTransportTest.php | 7 +- tests/Unit/Uri/RawUriBuilderTest.php | 5 +- tests/Unit/Uri/TemplatedUriBuilderTest.php | 5 +- tools/php-cs-fixer.phar | Bin 3248666 -> 0 bytes tools/phpunit.phar | 118466 --------------- tools/psalm.phar | Bin 47410363 -> 0 bytes 55 files changed, 163 insertions(+), 118630 deletions(-) delete mode 100644 phive.xml delete mode 100755 tools/php-cs-fixer.phar delete mode 100755 tools/phpunit.phar delete mode 100755 tools/psalm.phar diff --git a/.github/workflows/grumphp.yaml b/.github/workflows/grumphp.yaml index 08afacf..9e5dccf 100644 --- a/.github/workflows/grumphp.yaml +++ b/.github/workflows/grumphp.yaml @@ -7,7 +7,7 @@ jobs: strategy: matrix: operating-system: [ubuntu-latest] - php-versions: ['8.2', '8.3'] + php-versions: ['8.3', '8.4', '8.5'] composer-options: ['', '--prefer-lowest'] fail-fast: false name: PHP ${{ matrix.php-versions }} @ ${{ matrix.operating-system }} with ${{ matrix.composer-options }} @@ -36,12 +36,15 @@ jobs: restore-keys: ${{ runner.os }}-composer- - name: Install dependencies run: composer update --prefer-dist --no-progress --no-suggest ${{ matrix.composer-options }} + env: + COMPOSER_IGNORE_PLATFORM_REQ: php+ - name: Set git variables run: | git config --global user.email "you@example.com" git config --global user.name "Your Name" - name: Run the tests - run: php vendor/bin/grumphp run --no-interaction + run: ./vendor/bin/grumphp run --no-interaction + continue-on-error: ${{ matrix.php-versions == '8.5' }} env: PHP_CS_FIXER_IGNORE_ENV: 1 BOX_REQUIREMENT_CHECKER: 0 diff --git a/composer.json b/composer.json index 71519c8..773b45c 100644 --- a/composer.json +++ b/composer.json @@ -15,9 +15,9 @@ } ], "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "php": "~8.3.0 || ~8.4.0 || ~8.5.0", "ext-json": "*", - "azjezz/psl": "^3.1", + "azjezz/psl": "^3.1 || ^4.0", "cardinalby/content-disposition": "^1.1", "league/uri": "^7.3", "php-http/client-common": "^2.7", @@ -36,15 +36,18 @@ "require-dev": { "guzzlehttp/guzzle": "^7.8", "nyholm/psr7": "^1.8", + "php-cs-fixer/shim": "~3.88", "php-http/message-factory": "1.1.0", "php-http/mock-client": "^1.6", "php-http/vcr-plugin": "^1.2", - "phpro/grumphp-shim": "^2.1", + "phpro/grumphp-shim": "^2.17", + "phpunit/phpunit": "~12.4", "symfony/http-client": "^5.4.26 || ^6.0 || ^7.0", "symfony/mime": "^6.0 || ^7.0", - "symfony/property-access": "^5.4 || ^6.0 || ^7.0", "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", - "symfony/serializer": "^5.4 || ^6.0 || ^7.0" + "symfony/property-access": "^5.4 || ^6.0 || ^7.0", + "symfony/serializer": "^5.4 || ^6.0 || ^7.0", + "vimeo/psalm": "~6.13" }, "suggest": { "symfony/http-client": "If you want to use the built-in symfony/http-client tools.", diff --git a/phive.xml b/phive.xml deleted file mode 100644 index 0a83be5..0000000 --- a/phive.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/phpunit.xml b/phpunit.xml index 6443460..1948ab7 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,11 +1,13 @@ @@ -19,7 +21,7 @@ - + diff --git a/psalm.xml b/psalm.xml index 36f800f..953123f 100644 --- a/psalm.xml +++ b/psalm.xml @@ -7,6 +7,7 @@ xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" findUnusedBaselineEntry="true" findUnusedCode="false" + ensureOverrideAttribute="false" > diff --git a/src/Test/UseMockClient.php b/src/Test/UseMockClient.php index 7c984ed..7d37c9c 100644 --- a/src/Test/UseMockClient.php +++ b/src/Test/UseMockClient.php @@ -17,7 +17,7 @@ trait UseMockClient private function mockClient(?callable $configurator = null): Client { MockClientDependency::guard(); - $configurator ??= fn (Client $client) => $client; + $configurator ??= fn (Client $client): Client => $client; return $configurator(new Client()); } diff --git a/tests/Functional/Client/Factory/FactoriesTest.php b/tests/Functional/Client/Factory/FactoriesTest.php index 2e82bed..ba08a7a 100644 --- a/tests/Functional/Client/Factory/FactoriesTest.php +++ b/tests/Functional/Client/Factory/FactoriesTest.php @@ -12,6 +12,8 @@ use Phpro\HttpTools\Client\Factory\SymfonyClientFactory; use Phpro\HttpTools\Test\UseVcrClient; use Phpro\HttpTools\Tests\Helper\Vcr\FactoryAwareNamingStrategy; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; use Psr\Http\Message\RequestInterface; @@ -20,11 +22,8 @@ final class FactoriesTest extends TestCase { use UseVcrClient; - /** - * @test - * - * @dataProvider provideFactories - */ + #[DataProvider('provideFactories')] + #[Test] public function it_can_use_http_factories(string $factoryName, callable $factory): void { $client = PluginsConfigurator::configure($factory(), [ diff --git a/tests/Unit/Client/Factory/LazyClientLoaderTest.php b/tests/Unit/Client/Factory/LazyClientLoaderTest.php index 3d42d00..12e8a04 100644 --- a/tests/Unit/Client/Factory/LazyClientLoaderTest.php +++ b/tests/Unit/Client/Factory/LazyClientLoaderTest.php @@ -8,12 +8,13 @@ use Phpro\HttpTools\Client\Factory\AutoDiscoveredClientFactory; use Phpro\HttpTools\Client\Factory\FactoryInterface; use Phpro\HttpTools\Client\Factory\LazyClientLoader; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use stdClass; final class LazyClientLoaderTest extends TestCase { - /** @test */ + #[Test] public function it_can_not_load_invalid_class(): void { $this->expectException(InvalidArgumentException::class); @@ -23,7 +24,7 @@ public function it_can_not_load_invalid_class(): void $loader->load(); } - /** @test */ + #[Test] public function it_only_loads_the_client_once(): void { $loader = new LazyClientLoader(AutoDiscoveredClientFactory::class, [], []); diff --git a/tests/Unit/Encoding/Binary/BinaryFileDecoderTest.php b/tests/Unit/Encoding/Binary/BinaryFileDecoderTest.php index 03ad696..2ac7aaf 100644 --- a/tests/Unit/Encoding/Binary/BinaryFileDecoderTest.php +++ b/tests/Unit/Encoding/Binary/BinaryFileDecoderTest.php @@ -7,6 +7,8 @@ use Phpro\HttpTools\Encoding\Binary\BinaryFile; use Phpro\HttpTools\Encoding\Binary\BinaryFileDecoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ResponseInterface; @@ -14,11 +16,8 @@ final class BinaryFileDecoderTest extends TestCase { use UseHttpFactories; - /** - * @test - * - * @dataProvider provideCases - */ + #[DataProvider('provideCases')] + #[Test] public function it_can_decode_binary_files( BinaryFileDecoder $decoder, ResponseInterface $response, diff --git a/tests/Unit/Encoding/Binary/BinaryFileTest.php b/tests/Unit/Encoding/Binary/BinaryFileTest.php index 4a90cfe..27ca8fd 100644 --- a/tests/Unit/Encoding/Binary/BinaryFileTest.php +++ b/tests/Unit/Encoding/Binary/BinaryFileTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\Binary\BinaryFile; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class BinaryFileTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_is_a_dto(): void { $dto = new BinaryFile( diff --git a/tests/Unit/Encoding/Binary/Extractor/ExtensionExtractorTest.php b/tests/Unit/Encoding/Binary/Extractor/ExtensionExtractorTest.php index 937be12..117c70e 100644 --- a/tests/Unit/Encoding/Binary/Extractor/ExtensionExtractorTest.php +++ b/tests/Unit/Encoding/Binary/Extractor/ExtensionExtractorTest.php @@ -6,6 +6,8 @@ use Phpro\HttpTools\Encoding\Binary\Extractor\ExtensionExtractor; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ResponseInterface; @@ -13,11 +15,8 @@ final class ExtensionExtractorTest extends TestCase { use UseHttpFactories; - /** - * @test - * - * @dataProvider provideCases - */ + #[DataProvider('provideCases')] + #[Test] public function it_can_extract_extension(ResponseInterface $response, ?string $expected): void { $extractor = new ExtensionExtractor(); diff --git a/tests/Unit/Encoding/Binary/Extractor/FilenameExtractorTest.php b/tests/Unit/Encoding/Binary/Extractor/FilenameExtractorTest.php index 9844f15..b68dfa3 100644 --- a/tests/Unit/Encoding/Binary/Extractor/FilenameExtractorTest.php +++ b/tests/Unit/Encoding/Binary/Extractor/FilenameExtractorTest.php @@ -6,6 +6,8 @@ use Phpro\HttpTools\Encoding\Binary\Extractor\FilenameExtractor; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ResponseInterface; @@ -13,11 +15,8 @@ final class FilenameExtractorTest extends TestCase { use UseHttpFactories; - /** - * @test - * - * @dataProvider provideCases - */ + #[DataProvider('provideCases')] + #[Test] public function it_can_extract_filenames(ResponseInterface $response, ?string $expected): void { $extractor = new FilenameExtractor(); diff --git a/tests/Unit/Encoding/Binary/Extractor/HashExtractorTest.php b/tests/Unit/Encoding/Binary/Extractor/HashExtractorTest.php index 9f6f635..2c8c563 100644 --- a/tests/Unit/Encoding/Binary/Extractor/HashExtractorTest.php +++ b/tests/Unit/Encoding/Binary/Extractor/HashExtractorTest.php @@ -6,6 +6,8 @@ use Phpro\HttpTools\Encoding\Binary\Extractor\HashExtractor; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Hash\Algorithm; @@ -17,11 +19,8 @@ final class HashExtractorTest extends TestCase { use UseHttpFactories; - /** - * @test - * - * @dataProvider provideCases - */ + #[DataProvider('provideCases')] + #[Test] public function it_can_extract_hash(ResponseInterface $response, string $expected, int $endPosition = 0): void { $extractor = new HashExtractor(Algorithm::Md5); diff --git a/tests/Unit/Encoding/Binary/Extractor/MimeTypeExtractorTest.php b/tests/Unit/Encoding/Binary/Extractor/MimeTypeExtractorTest.php index e952fde..d5ac357 100644 --- a/tests/Unit/Encoding/Binary/Extractor/MimeTypeExtractorTest.php +++ b/tests/Unit/Encoding/Binary/Extractor/MimeTypeExtractorTest.php @@ -6,6 +6,8 @@ use Phpro\HttpTools\Encoding\Binary\Extractor\MimeTypeExtractor; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ResponseInterface; @@ -13,11 +15,8 @@ final class MimeTypeExtractorTest extends TestCase { use UseHttpFactories; - /** - * @test - * - * @dataProvider provideCases - */ + #[DataProvider('provideCases')] + #[Test] public function it_can_extract_mime_type(ResponseInterface $response, ?string $expected): void { $extractor = new MimeTypeExtractor(); diff --git a/tests/Unit/Encoding/Binary/Extractor/SizeExtractorTest.php b/tests/Unit/Encoding/Binary/Extractor/SizeExtractorTest.php index b80a3e5..5cb9e42 100644 --- a/tests/Unit/Encoding/Binary/Extractor/SizeExtractorTest.php +++ b/tests/Unit/Encoding/Binary/Extractor/SizeExtractorTest.php @@ -6,6 +6,8 @@ use Phpro\HttpTools\Encoding\Binary\Extractor\SizeExtractor; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ResponseInterface; @@ -16,12 +18,10 @@ final class SizeExtractorTest extends TestCase use UseHttpFactories; /** - * @test - * * @param callable $response - * - * @dataProvider provideCases */ + #[DataProvider('provideCases')] + #[Test] public function it_can_extract_size(callable $response, ?int $expected): void { $extractor = new SizeExtractor(); diff --git a/tests/Unit/Encoding/FormUrlencoded/FormUrlencodedDecoderTest.php b/tests/Unit/Encoding/FormUrlencoded/FormUrlencodedDecoderTest.php index 3a10746..43662c5 100644 --- a/tests/Unit/Encoding/FormUrlencoded/FormUrlencodedDecoderTest.php +++ b/tests/Unit/Encoding/FormUrlencoded/FormUrlencodedDecoderTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\FormUrlencoded\FormUrlencodedDecoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class FormUrlencodedDecoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_decode_form_url_encoded_to_array(): void { $decoder = FormUrlencodedDecoder::createWithAutodiscoveredPsrFactories(); @@ -23,7 +24,7 @@ public function it_can_decode_form_url_encoded_to_array(): void self::assertSame(['hello' => 'world', 'foo' => 'bar'], $decoded); } - /** @test */ + #[Test] public function it_can_decode_empty_body_to_empty_array(): void { $decoder = FormUrlencodedDecoder::createWithAutodiscoveredPsrFactories(); diff --git a/tests/Unit/Encoding/FormUrlencoded/FormUrlencodedEncoderTest.php b/tests/Unit/Encoding/FormUrlencoded/FormUrlencodedEncoderTest.php index d270aa1..e3574f8 100644 --- a/tests/Unit/Encoding/FormUrlencoded/FormUrlencodedEncoderTest.php +++ b/tests/Unit/Encoding/FormUrlencoded/FormUrlencodedEncoderTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\FormUrlencoded\FormUrlencodedEncoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class FormUrlencodedEncoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_encode_array_to_url_encoded(): void { $data = ['hello' => 'world']; @@ -27,7 +28,7 @@ public function it_can_encode_array_to_url_encoded(): void self::assertSame(['application/x-www-form-urlencoded'], $actual->getHeader('Content-Type')); } - /** @test */ + #[Test] public function it_can_encode_null_to_empty_body(): void { $data = null; diff --git a/tests/Unit/Encoding/Json/JsonDecoderTest.php b/tests/Unit/Encoding/Json/JsonDecoderTest.php index 518e86d..b3e7650 100644 --- a/tests/Unit/Encoding/Json/JsonDecoderTest.php +++ b/tests/Unit/Encoding/Json/JsonDecoderTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\Json\JsonDecoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class JsonDecoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_decode_json_to_array(): void { $decoder = JsonDecoder::createWithAutodiscoveredPsrFactories(); @@ -23,7 +24,7 @@ public function it_can_decode_json_to_array(): void self::assertSame(['hello' => 'world'], $decoded); } - /** @test */ + #[Test] public function it_can_decode_empty_body_to_empty_array(): void { $decoder = JsonDecoder::createWithAutodiscoveredPsrFactories(); diff --git a/tests/Unit/Encoding/Json/JsonEncoderTest.php b/tests/Unit/Encoding/Json/JsonEncoderTest.php index c400629..f2ca73f 100644 --- a/tests/Unit/Encoding/Json/JsonEncoderTest.php +++ b/tests/Unit/Encoding/Json/JsonEncoderTest.php @@ -6,6 +6,7 @@ use Phpro\HttpTools\Encoding\Json\JsonEncoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; @@ -13,7 +14,7 @@ final class JsonEncoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_encode_array_to_json(): void { $data = ['hello' => 'world']; @@ -29,7 +30,7 @@ public function it_can_encode_array_to_json(): void self::assertSame(['application/json'], $actual->getHeader('Content-Type')); } - /** @test */ + #[Test] public function it_can_encode_null_to_empty_body(): void { $data = null; diff --git a/tests/Unit/Encoding/Mime/MultiPartEncoderTest.php b/tests/Unit/Encoding/Mime/MultiPartEncoderTest.php index c618d20..4ef8fdd 100644 --- a/tests/Unit/Encoding/Mime/MultiPartEncoderTest.php +++ b/tests/Unit/Encoding/Mime/MultiPartEncoderTest.php @@ -6,6 +6,7 @@ use Phpro\HttpTools\Encoding\Mime\MultiPartEncoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Symfony\Component\Mime\Part\DataPart; use Symfony\Component\Mime\Part\Multipart\FormDataPart; @@ -14,7 +15,7 @@ final class MultiPartEncoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_encode_multi_part(): void { $data = new FormDataPart([ diff --git a/tests/Unit/Encoding/Psr7/ResponseDecoderTest.php b/tests/Unit/Encoding/Psr7/ResponseDecoderTest.php index c64a766..6a231bb 100644 --- a/tests/Unit/Encoding/Psr7/ResponseDecoderTest.php +++ b/tests/Unit/Encoding/Psr7/ResponseDecoderTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\Psr7\ResponseDecoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class ResponseDecoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_decode_response(): void { $decoder = ResponseDecoder::createWithAutodiscoveredPsrFactories(); diff --git a/tests/Unit/Encoding/Raw/EmptyBodyEncoderTest.php b/tests/Unit/Encoding/Raw/EmptyBodyEncoderTest.php index 19409eb..08eb6f8 100644 --- a/tests/Unit/Encoding/Raw/EmptyBodyEncoderTest.php +++ b/tests/Unit/Encoding/Raw/EmptyBodyEncoderTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\Raw\EmptyBodyEncoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class EmptyBodyEncoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_encode_raw_string(): void { $data = null; diff --git a/tests/Unit/Encoding/Raw/RawDecoderTest.php b/tests/Unit/Encoding/Raw/RawDecoderTest.php index d6019ae..912cc61 100644 --- a/tests/Unit/Encoding/Raw/RawDecoderTest.php +++ b/tests/Unit/Encoding/Raw/RawDecoderTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\Raw\RawDecoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class RawDecoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_decode_raw_string(): void { $decoder = RawDecoder::createWithAutodiscoveredPsrFactories(); diff --git a/tests/Unit/Encoding/Raw/RawEncoderTest.php b/tests/Unit/Encoding/Raw/RawEncoderTest.php index 2624980..f5281fc 100644 --- a/tests/Unit/Encoding/Raw/RawEncoderTest.php +++ b/tests/Unit/Encoding/Raw/RawEncoderTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\Raw\RawEncoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class RawEncoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_encode_raw_string(): void { $data = 'Hello world'; diff --git a/tests/Unit/Encoding/Stream/StreamDecoderTest.php b/tests/Unit/Encoding/Stream/StreamDecoderTest.php index 59aaff8..a6d4cae 100644 --- a/tests/Unit/Encoding/Stream/StreamDecoderTest.php +++ b/tests/Unit/Encoding/Stream/StreamDecoderTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\Stream\StreamDecoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class StreamDecoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_decode_stream_string(): void { $decoder = StreamDecoder::createWithAutodiscoveredPsrFactories(); diff --git a/tests/Unit/Encoding/Stream/StreamEncoderTest.php b/tests/Unit/Encoding/Stream/StreamEncoderTest.php index 1cde6a7..c62da58 100644 --- a/tests/Unit/Encoding/Stream/StreamEncoderTest.php +++ b/tests/Unit/Encoding/Stream/StreamEncoderTest.php @@ -6,13 +6,14 @@ use Phpro\HttpTools\Encoding\Stream\StreamEncoder; use Phpro\HttpTools\Test\UseHttpFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class StreamEncoderTest extends TestCase { use UseHttpFactories; - /** @test */ + #[Test] public function it_can_encode_stream_string(): void { $data = $this->createStream($content = 'Hello world'); diff --git a/tests/Unit/Formatter/Factory/BasicFormatterFactoryTest.php b/tests/Unit/Formatter/Factory/BasicFormatterFactoryTest.php index 82be51c..890cfe9 100644 --- a/tests/Unit/Formatter/Factory/BasicFormatterFactoryTest.php +++ b/tests/Unit/Formatter/Factory/BasicFormatterFactoryTest.php @@ -7,18 +7,19 @@ use Http\Message\Formatter\FullHttpMessageFormatter; use Http\Message\Formatter\SimpleFormatter; use Phpro\HttpTools\Formatter\Factory\BasicFormatterFactory; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class BasicFormatterFactoryTest extends TestCase { - /** @test */ + #[Test] public function it_creates_a_simple_formatter_when_not_in_debug_mode(): void { $formatter = BasicFormatterFactory::create(false); self::assertInstanceOf(SimpleFormatter::class, $formatter); } - /** @test */ + #[Test] public function it_creates_a_full_formatter_when_in_debug_mode(): void { $formatter = BasicFormatterFactory::create(true, 2000); diff --git a/tests/Unit/Formatter/RemoveSensitiveHeaderKeysFormatterTest.php b/tests/Unit/Formatter/RemoveSensitiveHeaderKeysFormatterTest.php index 3330ed7..d3937cc 100644 --- a/tests/Unit/Formatter/RemoveSensitiveHeaderKeysFormatterTest.php +++ b/tests/Unit/Formatter/RemoveSensitiveHeaderKeysFormatterTest.php @@ -8,6 +8,8 @@ use Phpro\HttpTools\Formatter\RemoveSensitiveHeadersFormatter; use Phpro\HttpTools\Test\UseHttpFactories; use Phpro\HttpTools\Tests\Helper\Formatter\CallbackFormatter; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Message\MessageInterface; @@ -27,11 +29,8 @@ protected function setUp(): void ); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[DataProvider('provideJsonExpectations')] + #[Test] public function it_can_remove_sensitive_keys_from_request(array $headers, array $expected): void { $request = $this->createRequest('GET', 'something'); @@ -45,11 +44,8 @@ public function it_can_remove_sensitive_keys_from_request(array $headers, array self::assertSame($this->formatHeaders($expected), $formatted); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[DataProvider('provideJsonExpectations')] + #[Test] public function it_can_remove_sensitive_keys_from_response(array $headers, array $expected): void { $response = $this->createResponse(200); @@ -63,11 +59,8 @@ public function it_can_remove_sensitive_keys_from_response(array $headers, array self::assertSame($this->formatHeaders($expected), $formatted); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[DataProvider('provideJsonExpectations')] + #[Test] public function it_can_remove_sensitive_keys_from_response_with_request_context( array $headers, array $expected, @@ -89,11 +82,8 @@ public function it_can_remove_sensitive_keys_from_response_with_request_context( self::assertSame($this->formatHeaders($expected), $formatted); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[DataProvider('provideJsonExpectations')] + #[Test] public function it_can_remove_sensitive_keys_from_response_with_request_context_even_if_base_method_does_not_exist( array $headers, array $expected, diff --git a/tests/Unit/Formatter/RemoveSensitiveJsonKeysFormatterTest.php b/tests/Unit/Formatter/RemoveSensitiveJsonKeysFormatterTest.php index 180da1e..7d7e6a5 100644 --- a/tests/Unit/Formatter/RemoveSensitiveJsonKeysFormatterTest.php +++ b/tests/Unit/Formatter/RemoveSensitiveJsonKeysFormatterTest.php @@ -8,6 +8,8 @@ use Phpro\HttpTools\Formatter\RemoveSensitiveJsonKeysFormatter; use Phpro\HttpTools\Test\UseHttpFactories; use Phpro\HttpTools\Tests\Helper\Formatter\CallbackFormatter; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; use Psr\Http\Message\MessageInterface; @@ -26,11 +28,8 @@ protected function setUp(): void ); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[DataProvider('provideJsonExpectations')] + #[Test] public function it_can_remove_sensitive_json_keys_from_request(array $content, array $expected): void { $request = $this->createRequest('GET', 'something') @@ -43,11 +42,8 @@ public function it_can_remove_sensitive_json_keys_from_request(array $content, a self::assertSame($expected, Json\decode($formatted, true)); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[DataProvider('provideJsonExpectations')] + #[Test] public function it_can_remove_sensitive_json_keys_from_response(array $content, array $expected): void { $response = $this->createResponse(200) @@ -60,11 +56,8 @@ public function it_can_remove_sensitive_json_keys_from_response(array $content, self::assertSame($expected, Json\decode($formatted, true)); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[DataProvider('provideJsonExpectations')] + #[Test] public function it_can_remove_sensitive_json_keys_from_response_with_request_context( array $content, array $expected, @@ -84,11 +77,8 @@ public function it_can_remove_sensitive_json_keys_from_response_with_request_con self::assertSame($expected, Json\decode($formatted, true)); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[DataProvider('provideJsonExpectations')] + #[Test] public function it_can_remove_sensitive_json_keys_from_response_with_request_context_if_base_method_does_not_exist( array $content, array $expected, diff --git a/tests/Unit/Formatter/RemoveSensitiveQueryStringsFormatterTest.php b/tests/Unit/Formatter/RemoveSensitiveQueryStringsFormatterTest.php index 0f859c7..e1c6699 100644 --- a/tests/Unit/Formatter/RemoveSensitiveQueryStringsFormatterTest.php +++ b/tests/Unit/Formatter/RemoveSensitiveQueryStringsFormatterTest.php @@ -8,6 +8,8 @@ use Phpro\HttpTools\Formatter\RemoveSensitiveQueryStringsFormatter; use Phpro\HttpTools\Test\UseHttpFactories; use Phpro\HttpTools\Tests\Helper\Formatter\SimpleFormatter; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class RemoveSensitiveQueryStringsFormatterTest extends TestCase @@ -24,11 +26,8 @@ protected function setUp(): void ); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[DataProvider('provideJsonExpectations')] + #[Test] public function it_can_remove_sensitive_query_strings_from_request( string $actual, string $expected, @@ -42,9 +41,7 @@ public function it_can_remove_sensitive_query_strings_from_request( ); } - /** - * @test - */ + #[Test] public function it_can_format_a_response(): void { $response = $this->createResponse(); @@ -54,11 +51,7 @@ public function it_can_format_a_response(): void ); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[Test] public function it_can_format_a_response_with_request_context(): void { $request = $this->createRequest('GET', '/something'); @@ -69,11 +62,7 @@ public function it_can_format_a_response_with_request_context(): void ); } - /** - * @test - * - * @dataProvider provideJsonExpectations - */ + #[Test] public function it_can_format_a_response_with_request_context_if_base_method_does_not_exist(): void { $request = $this->createRequest('GET', '/something'); diff --git a/tests/Unit/Plugin/AcceptLanguagePluginTest.php b/tests/Unit/Plugin/AcceptLanguagePluginTest.php index 38db7b9..31e9666 100644 --- a/tests/Unit/Plugin/AcceptLanguagePluginTest.php +++ b/tests/Unit/Plugin/AcceptLanguagePluginTest.php @@ -8,6 +8,7 @@ use Phpro\HttpTools\Client\Configurator\PluginsConfigurator; use Phpro\HttpTools\Plugin\AcceptLanguagePlugin; use Phpro\HttpTools\Test\UseMockClient; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Client\ClientInterface; @@ -30,7 +31,7 @@ protected function setUp(): void ); } - /** @test */ + #[Test] public function it_can_set_the_accept_language(): void { $response = $this->client->sendRequest($this->createRequest('GET', '/something')); diff --git a/tests/Unit/Plugin/CallbackPluginTest.php b/tests/Unit/Plugin/CallbackPluginTest.php index b5e6e92..196f428 100644 --- a/tests/Unit/Plugin/CallbackPluginTest.php +++ b/tests/Unit/Plugin/CallbackPluginTest.php @@ -9,6 +9,7 @@ use Phpro\HttpTools\Client\Configurator\PluginsConfigurator; use Phpro\HttpTools\Plugin\CallbackPlugin; use Phpro\HttpTools\Test\UseMockClient; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Client\ClientInterface; use Psr\Http\Message\RequestInterface; @@ -38,7 +39,7 @@ static function (RequestInterface $request, callable $next, callable $first): Pr ); } - /** @test */ + #[Test] public function it_can_run_a_callback_as_plugin(): void { $response = $this->client->sendRequest($this->createRequest('GET', '/something')); diff --git a/tests/Unit/Request/RequestTest.php b/tests/Unit/Request/RequestTest.php index 7049537..3ceeb8f 100644 --- a/tests/Unit/Request/RequestTest.php +++ b/tests/Unit/Request/RequestTest.php @@ -7,13 +7,14 @@ use Phpro\HttpTools\Request\Request; use Phpro\HttpTools\Request\RequestInterface; use Phpro\HttpTools\Test\UseHttpToolsFactories; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class RequestTest extends TestCase { use UseHttpToolsFactories; - /** @test */ + #[Test] public function it_can_implement_requests(): void { $request = $this->createToolsRequest('GET', '/endpoint', ['param' => 'value'], 'body'); @@ -25,7 +26,7 @@ public function it_can_implement_requests(): void self::assertSame('body', $request->body()); } - /** @test */ + #[Test] public function it_can_use_a_preset_value_object(): void { $request = new Request('GET', '/endpoint', ['param' => 'value'], 'body'); diff --git a/tests/Unit/Sdk/Rest/CreateTest.php b/tests/Unit/Sdk/Rest/CreateTest.php index 6959c80..29d81b4 100644 --- a/tests/Unit/Sdk/Rest/CreateTest.php +++ b/tests/Unit/Sdk/Rest/CreateTest.php @@ -11,6 +11,7 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\JsonPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; use Psr\Http\Message\RequestInterface; @@ -36,7 +37,7 @@ protected function path(): string }; } - /** @test */ + #[Test] public function it_can_create_a_resource(): void { $requestData = ['user' => 'aa']; diff --git a/tests/Unit/Sdk/Rest/DeleteTest.php b/tests/Unit/Sdk/Rest/DeleteTest.php index 7234bf5..df22ede 100644 --- a/tests/Unit/Sdk/Rest/DeleteTest.php +++ b/tests/Unit/Sdk/Rest/DeleteTest.php @@ -11,6 +11,7 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\JsonPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Message\RequestInterface; @@ -35,7 +36,7 @@ protected function path(): string }; } - /** @test */ + #[Test] public function it_can_delete_a_resource(): void { $responseData = []; diff --git a/tests/Unit/Sdk/Rest/FindTest.php b/tests/Unit/Sdk/Rest/FindTest.php index 4963967..8ca7e66 100644 --- a/tests/Unit/Sdk/Rest/FindTest.php +++ b/tests/Unit/Sdk/Rest/FindTest.php @@ -11,6 +11,7 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\JsonPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; use Psr\Http\Message\RequestInterface; @@ -36,7 +37,7 @@ protected function path(): string }; } - /** @test */ + #[Test] public function it_can_find_a_resource(): void { $responseData = ['id' => 1]; diff --git a/tests/Unit/Sdk/Rest/GetTest.php b/tests/Unit/Sdk/Rest/GetTest.php index 056677d..080fb3d 100644 --- a/tests/Unit/Sdk/Rest/GetTest.php +++ b/tests/Unit/Sdk/Rest/GetTest.php @@ -11,6 +11,7 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\JsonPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; use Psr\Http\Message\RequestInterface; @@ -36,7 +37,7 @@ protected function path(): string }; } - /** @test */ + #[Test] public function it_can_get_a_resource(): void { $responseData = [['id' => 1], ['id' => 2]]; @@ -58,7 +59,7 @@ public function it_can_get_a_resource(): void self::assertSame($responseData, $actual); } - /** @test */ + #[Test] public function it_can_get_a_resource_with_query_params(): void { $responseData = [['id' => 1], ['id' => 2]]; diff --git a/tests/Unit/Sdk/Rest/PatchTest.php b/tests/Unit/Sdk/Rest/PatchTest.php index 619f41e..551ba3d 100644 --- a/tests/Unit/Sdk/Rest/PatchTest.php +++ b/tests/Unit/Sdk/Rest/PatchTest.php @@ -11,6 +11,7 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\JsonPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; use Psr\Http\Message\RequestInterface; @@ -36,7 +37,7 @@ protected function path(): string }; } - /** @test */ + #[Test] public function it_can_patch_a_resource(): void { $requestData = ['user' => 'a']; diff --git a/tests/Unit/Sdk/Rest/UpdateTest.php b/tests/Unit/Sdk/Rest/UpdateTest.php index 43acda1..ebab23d 100644 --- a/tests/Unit/Sdk/Rest/UpdateTest.php +++ b/tests/Unit/Sdk/Rest/UpdateTest.php @@ -11,6 +11,7 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\JsonPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; use Psr\Http\Message\RequestInterface; @@ -36,7 +37,7 @@ protected function path(): string }; } - /** @test */ + #[Test] public function it_can_patch_a_resource(): void { $requestData = ['user' => 'a']; diff --git a/tests/Unit/Serializer/SerializerExceptionTest.php b/tests/Unit/Serializer/SerializerExceptionTest.php index e0d7946..6e0ed32 100644 --- a/tests/Unit/Serializer/SerializerExceptionTest.php +++ b/tests/Unit/Serializer/SerializerExceptionTest.php @@ -6,11 +6,12 @@ use Phpro\HttpTools\Exception\RuntimeException; use Phpro\HttpTools\Serializer\SerializerException; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class SerializerExceptionTest extends TestCase { - /** @test */ + #[Test] public function it_can_throw_exception_on_unkown_type(): void { $exception = SerializerException::noDeserializeTypeSpecified(); diff --git a/tests/Unit/Serializer/SymfonySerializerTest.php b/tests/Unit/Serializer/SymfonySerializerTest.php index de54b15..6662591 100644 --- a/tests/Unit/Serializer/SymfonySerializerTest.php +++ b/tests/Unit/Serializer/SymfonySerializerTest.php @@ -7,6 +7,7 @@ use Phpro\HttpTools\Serializer\SerializerInterface; use Phpro\HttpTools\Serializer\SymfonySerializer; use Phpro\HttpTools\Tests\Helper\Model\SomeValueObject; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; use Symfony\Component\Serializer\Encoder\JsonEncoder; @@ -28,13 +29,13 @@ protected function setUp(): void ); } - /** @test */ + #[Test] public function it_is_a_serializer(): void { self::assertInstanceOf(SerializerInterface::class, $this->serializer); } - /** @test */ + #[Test] public function it_can_serialize_value_object_to_string(): void { $valueObject = new SomeValueObject('Hello', 'World'); @@ -45,7 +46,7 @@ public function it_can_serialize_value_object_to_string(): void ); } - /** @test */ + #[Test] public function it_can_deserialize_string_to_value_object(): void { $data = Json\encode(['x' => 'Hello', 'y' => 'World']); diff --git a/tests/Unit/Transport/CallbackTransportTest.php b/tests/Unit/Transport/CallbackTransportTest.php index 8bdbc22..392c30a 100644 --- a/tests/Unit/Transport/CallbackTransportTest.php +++ b/tests/Unit/Transport/CallbackTransportTest.php @@ -7,6 +7,7 @@ use Phpro\HttpTools\Test\UseHttpFactories; use Phpro\HttpTools\Test\UseHttpToolsFactories; use Phpro\HttpTools\Transport\CallbackTransport; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class CallbackTransportTest extends TestCase @@ -14,7 +15,7 @@ final class CallbackTransportTest extends TestCase use UseHttpFactories; use UseHttpToolsFactories; - /** @test */ + #[Test] public function it_can_send_requests(): void { $request = $this->createToolsRequest('GET', '/users'); diff --git a/tests/Unit/Transport/EncodedTransportTest.php b/tests/Unit/Transport/EncodedTransportTest.php index 1ab7f9e..9c0dfb0 100644 --- a/tests/Unit/Transport/EncodedTransportTest.php +++ b/tests/Unit/Transport/EncodedTransportTest.php @@ -12,6 +12,7 @@ use Phpro\HttpTools\Transport\EncodedTransportFactory; use Phpro\HttpTools\Transport\TransportInterface; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Client\ClientExceptionInterface; @@ -27,7 +28,7 @@ protected function setUp(): void $this->client = $this->mockClient(); } - /** @test */ + #[Test] public function it_can_send_and_receive_encoded(): void { $transport = $this->createTransport(); @@ -46,7 +47,7 @@ public function it_can_send_and_receive_encoded(): void self::assertSame((string) $request->body(), (string) $sentRequest->getBody()); } - /** @test */ + #[Test] public function it_can_handle_failure(): void { $transport = $this->createTransport(); diff --git a/tests/Unit/Transport/IO/Input/EncodingRequestConverterTest.php b/tests/Unit/Transport/IO/Input/EncodingRequestConverterTest.php index 1290745..d752144 100644 --- a/tests/Unit/Transport/IO/Input/EncodingRequestConverterTest.php +++ b/tests/Unit/Transport/IO/Input/EncodingRequestConverterTest.php @@ -8,6 +8,7 @@ use Phpro\HttpTools\Test\UseHttpToolsFactories; use Phpro\HttpTools\Transport\IO\Input\EncodingRequestConverter; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Message\RequestInterface; @@ -15,7 +16,7 @@ final class EncodingRequestConverterTest extends TestCase { use UseHttpToolsFactories; - /** @test */ + #[Test] public function it_can_convert_a_request_to_a_psr_request(): void { $converter = EncodingRequestConverter::createWithAutodiscoveredPsrFactories( diff --git a/tests/Unit/Transport/Presets/BinaryDownloadPresetTest.php b/tests/Unit/Transport/Presets/BinaryDownloadPresetTest.php index bf05848..7bbfeeb 100644 --- a/tests/Unit/Transport/Presets/BinaryDownloadPresetTest.php +++ b/tests/Unit/Transport/Presets/BinaryDownloadPresetTest.php @@ -9,6 +9,8 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\BinaryDownloadPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Symfony\Component\Mime\Part\Multipart\FormDataPart; @@ -17,11 +19,8 @@ final class BinaryDownloadPresetTest extends TestCase use UseHttpToolsFactories; use UseMockClient; - /** - * @test - * - * @dataProvider provideAliasFactoryMethods - */ + #[DataProvider('provideAliasFactoryMethods')] + #[Test] public function it_can_create_a_default_transport(string $factoryMethod): void { $transport = BinaryDownloadPreset::{$factoryMethod}( @@ -51,7 +50,7 @@ public function it_can_create_a_default_transport(string $factoryMethod): void self::assertSame(md5($content), $actualResponse->hash()); } - /** @test */ + #[Test] public function it_can_create_from_from_data_transport(): void { $transport = BinaryDownloadPreset::withMultiPartRequest( diff --git a/tests/Unit/Transport/Presets/FormUrlencodedPresetTest.php b/tests/Unit/Transport/Presets/FormUrlencodedPresetTest.php index e690caf..258ee8a 100644 --- a/tests/Unit/Transport/Presets/FormUrlencodedPresetTest.php +++ b/tests/Unit/Transport/Presets/FormUrlencodedPresetTest.php @@ -18,7 +18,7 @@ final class FormUrlencodedPresetTest extends TestCase use UseHttpToolsFactories; use UseMockClient; - /** @test */ + #[Test] public function it_can_create_transport(): void { $transport = FormUrlencodedPreset::create( diff --git a/tests/Unit/Transport/Presets/JsonPresetTest.php b/tests/Unit/Transport/Presets/JsonPresetTest.php index 56b7cd8..554ede1 100644 --- a/tests/Unit/Transport/Presets/JsonPresetTest.php +++ b/tests/Unit/Transport/Presets/JsonPresetTest.php @@ -8,6 +8,7 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\JsonPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; @@ -16,7 +17,7 @@ final class JsonPresetTest extends TestCase use UseHttpToolsFactories; use UseMockClient; - /** @test */ + #[Test] public function it_can_create_transport(): void { $transport = JsonPreset::create( diff --git a/tests/Unit/Transport/Presets/PsrPresetTest.php b/tests/Unit/Transport/Presets/PsrPresetTest.php index 1ed97e2..5792aa4 100644 --- a/tests/Unit/Transport/Presets/PsrPresetTest.php +++ b/tests/Unit/Transport/Presets/PsrPresetTest.php @@ -8,6 +8,7 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\PsrPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class PsrPresetTest extends TestCase @@ -15,7 +16,7 @@ final class PsrPresetTest extends TestCase use UseHttpToolsFactories; use UseMockClient; - /** @test */ + #[Test] public function it_can_create_sync_transport(): void { $transport = PsrPreset::create( diff --git a/tests/Unit/Transport/Presets/RawPresetTest.php b/tests/Unit/Transport/Presets/RawPresetTest.php index 3a48edf..741af7a 100644 --- a/tests/Unit/Transport/Presets/RawPresetTest.php +++ b/tests/Unit/Transport/Presets/RawPresetTest.php @@ -8,6 +8,7 @@ use Phpro\HttpTools\Test\UseMockClient; use Phpro\HttpTools\Transport\Presets\RawPreset; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; final class RawPresetTest extends TestCase @@ -15,7 +16,7 @@ final class RawPresetTest extends TestCase use UseHttpToolsFactories; use UseMockClient; - /** @test */ + #[Test] public function it_can_create_sync_transport(): void { $transport = RawPreset::create( diff --git a/tests/Unit/Transport/Serializer/SerializerTransportTest.php b/tests/Unit/Transport/Serializer/SerializerTransportTest.php index 1be142d..07aa402 100644 --- a/tests/Unit/Transport/Serializer/SerializerTransportTest.php +++ b/tests/Unit/Transport/Serializer/SerializerTransportTest.php @@ -13,6 +13,7 @@ use Phpro\HttpTools\Transport\Presets\RawPreset; use Phpro\HttpTools\Transport\Serializer\SerializerTransport; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psl\Json; use Psr\Http\Message\RequestInterface; @@ -46,7 +47,7 @@ protected function setUp(): void ); } - /** @test */ + #[Test] public function it_can_serialize_request_and_deserialize_response_body_and_transport_it(): void { $valueObject = new SomeValueObject('Hello', 'World'); @@ -66,7 +67,7 @@ public function it_can_serialize_request_and_deserialize_response_body_and_trans self::assertEquals($valueObject, $result); } - /** @test */ + #[Test] public function it_can_handle_requests_without_request_object(): void { $valueObject = new SomeValueObject('Hello', 'World'); @@ -86,7 +87,7 @@ public function it_can_handle_requests_without_request_object(): void self::assertEquals($valueObject, $result); } - /** @test */ + #[Test] public function it_can_handle_requests_without_response_type(): void { $valueObject = new SomeValueObject('Hello', 'World'); diff --git a/tests/Unit/Uri/RawUriBuilderTest.php b/tests/Unit/Uri/RawUriBuilderTest.php index ab14079..7d0c6e4 100644 --- a/tests/Unit/Uri/RawUriBuilderTest.php +++ b/tests/Unit/Uri/RawUriBuilderTest.php @@ -6,6 +6,7 @@ use Phpro\HttpTools\Test\UseHttpToolsFactories; use Phpro\HttpTools\Uri\RawUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Message\UriInterface; @@ -20,7 +21,7 @@ protected function setUp(): void $this->uriBuilder = RawUriBuilder::createWithAutodiscoveredPsrFactories(); } - /** @test */ + #[Test] public function it_can_build_a_raw_uri(): void { $request = $this->createToolsRequest('GET', '/hello/world', []); @@ -30,7 +31,7 @@ public function it_can_build_a_raw_uri(): void self::assertSame($request->uri(), $uri->__toString()); } - /** @test */ + #[Test] public function it_can_build_a_raw_uri_with_query_params(): void { $request = $this->createToolsRequest('GET', '/hello/world', ['param1' => 'value1']); diff --git a/tests/Unit/Uri/TemplatedUriBuilderTest.php b/tests/Unit/Uri/TemplatedUriBuilderTest.php index 77f9922..9804b7d 100644 --- a/tests/Unit/Uri/TemplatedUriBuilderTest.php +++ b/tests/Unit/Uri/TemplatedUriBuilderTest.php @@ -6,6 +6,7 @@ use Phpro\HttpTools\Test\UseHttpToolsFactories; use Phpro\HttpTools\Uri\TemplatedUriBuilder; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Http\Message\UriInterface; @@ -20,7 +21,7 @@ protected function setUp(): void $this->uriBuilder = new TemplatedUriBuilder(['default' => 'yes']); } - /** @test */ + #[Test] public function it_can_build_a_templated_uri(): void { $request = $this->createToolsRequest('GET', '/hello/{name}', ['name' => 'world']); @@ -30,7 +31,7 @@ public function it_can_build_a_templated_uri(): void self::assertSame('/hello/world', $uri->__toString()); } - /** @test */ + #[Test] public function it_can_build_a_templated_uri_with_default_params(): void { $request = $this->createToolsRequest('GET', '/hello/{default}', ['name' => 'world']); diff --git a/tools/php-cs-fixer.phar b/tools/php-cs-fixer.phar deleted file mode 100755 index 2d60bdf3fe1da07df921e9cbe5b09db17e72ba88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3248666 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%0Dt#c!GVf>UhZ*iYa3Maqi<1auQr{}Njk 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%0A(ik; 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�Diz zwM-1~+)y8t0;2dVZ$3A?SLFoQmgbGBB-Y>BehSW~ zBmLf;;_dqD*Y*}-G%frav)G`ArrF^lwW=EwboGUTvU+6<(N0S$0U!f}hACHyk=Xds zkn!9))KmaN7k|gX`RUnHSzJv%PWE6X>_N7j$yx>+BEDJ8l8e=s-}MPJPY@3Ls709j z`orA*kVvPKBRhWbyWAQ^qkdm+o5dc<4e1bnsLbpo_Z~g!eDMV`xj__Up{V2Ma*@Ae zcZ91K7V@QFaw&c`+1;HS?w!HL-uvv{ga23-FRu+5unq8ksqC_7fh!O-a-^~4?lQ@Z zHpd4If2PPHary$QC?*03ZafJR>pURuPL=c7I;_2ti`~@@Ct)=1;jAw^>)_(&lLPp& z&lxgB8w^2HxN28avG|rbL^vBeaO}f2$9@Q|dVqso&?}NoMC~C5v$$}K0B4+T_!E}< z3{sV!o8Pnm&q~#%V&Xl-&jbG|sI6U9K7l{2jCc2D6QHo|(H6Ca-C2Zrfg^`rg z<w(O($&Lg6$AfZ>${VnYoA&#-1g4c`$hB{=67mM49QPk1Jw zLC5{?a_N6`xwQG_IVH%aEtH^L-R2J~2U%m~<&O1KErR0Psp|!Z{%4@6wnauHL6RE( z)vHpf-d}gQkyabB$nYhH*pSKKrxu{lTEKb%$46$a5|S#MvNE6`N_m|E3e5Ik2N&v9 zUyul7Ao{pAm$-OO~iK~Ysxl3+&>`^&i~PW{|Z3xQ-1 zWusT{6YX;|wrzxU4JIm2o58811_60)O@MR zsYNdkAy_c0qPk3pNMSTr$l=@(WT-V~11?0gR~DD6v73x`8rfGST+^htUaE4_nwz>Z zux8Zw!J@~W!?>n3smmc6qOJw(4KSV#oL)kRx*Dz~RbOJk9VXNY{^FB~)TT`kL3s^g zfoh~9;(>L7k)hG!{x9I{J19f1ItM^ zdB#T#{7xi5?~VG_m>-0bpotf}Sr{)+aqx_Zo2!GBBGxC!gaijLnBNS7=7^F5(J1Gp z0cSKxbSg~J#^tzA>im4qJ$&xLq7c&4^d)%)qLVplZ6Xv>afT6A@oY7c~*^TRjtayROTX8-qiX_k0oiT`69KN(?H2=6%(^# zDZcdBB9+hv=cpBDQqr)MtfZU8Sfz+^qmNkNY-jZR33S!NPO4NF0P<3Kn!H_1OMW?a z^l{KXLFBL|aJ|5a`LILHF5yD()FAjxqT#SJiJlNOhV4onBw~+Lu;Jwx@nyPQrqTN} zxDNVnFOK%umdA-HloEeXd^PBWEYrlcNF<}PfU7hQiJ9dikH`Ed=QLAu%Gf!aQ_7*b zy(eSBeU52$V_DqzFn}Zi)=80?MQAL0*Jm5f?l0#7qtsV0CO+s+|M|gS=o0fXx>z9Z zz?22Bhss7cv5xx5kPY|&N?VcU8^?j0mH5zzHIJ$!v&*0{zHC91*oACD=YYdAf4JOh zjz@Q}n}1#4PLVIs!7lV}khm9}?WG011KolXx5Ir!U|Z&VoHp3lMJxKu!S7mP%HRpL zI^1Ps!k&VUfc2?TD)yVnIn!@!BT}(oU1n~kfT0$yD~_FL%B z#ydTy$?ogfv*s3`(Bfq1EG|APdI;2>KX@6^yZx&hHdUjd%lBqh6zD@I1k0(;&cR%croPqv10E0$kGAdWL9zrp$7D`0#0mTIO{32 zQNKtajW!v=9`)POV+qn0ZiF0I&|=vlmlv9AtO~uwp3w0bV{>ajw8_=+(FM|^!bhw` zLJ8JIjf1yLkjqGJrrg+CeYGK@p+gZP;PxXnMi-lV!f*w!Dqv*MJxHO-3k^tg3Qz>9 zfhTXqdz0gf^Mlcc;hyggFJd#<&IX8g*v70e?Q9u1&}M7`MAWzkGtN7Qk3KQW#KG`= z>K{LBR?)bs0HYrjyV;x~H*YaO6*-(4y9&ViDPG>F+Y~qQ9WLC`<$i@S^PciUQOIbBGBP^*|*^(QRgADQtA^;KN93(g@kD2;Y-s2D{ z;vDj+FYK|(2RRSQh&Mrs$Tvj;Rc}6^k^~>mEbN~QWQ!K*zG; zjUY6-EPcvwrp$pJNnvdkxLHU26I*`d01^N2Xih_NjlOC9t*^e`qg2PJ^USw)3xo(f zZTH*0}r;$kFH&MVyK&+)MvG9+%Lj0vyA wjY$m|8ASz_cV{sW`-PV`W!2iR`m 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

}AZ17^i}PKt8p$@P`(%u>nbt{d;FTJgoI} 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

beb@o$7I&d;|96&xGvUtT-WG45eH5P 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%0A(;ErX{~gR$VP>5=DstH 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

t=~QJQNBOyE^3Zdg7h2p^>5 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

x;LLl`N7+g}_R<}v0IuNEg* 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

{J!$*eLCBfQ+ezb$P*x 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 Uwg2w_`EUO2@BZ$)hfg2=e~!5=egFUf diff --git a/tools/phpunit.phar b/tools/phpunit.phar deleted file mode 100755 index d6dfa0d..0000000 --- a/tools/phpunit.phar +++ /dev/null @@ -1,118466 +0,0 @@ -#!/usr/bin/env php -')) { - fwrite( - STDERR, - sprintf( - 'PHPUnit 11.5.6 by Sebastian Bergmann and contributors.' . PHP_EOL . PHP_EOL . - 'This version of PHPUnit requires PHP >= 8.2.' . PHP_EOL . - 'You are using PHP %s (%s).' . PHP_EOL, - PHP_VERSION, - PHP_BINARY - ) - ); - - die(1); -} - -$requiredExtensions = ['ctype', 'dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter']; - -$unavailableExtensions = array_filter( - $requiredExtensions, - static function ($extension) { - return !extension_loaded($extension); - } -); - -if ([] !== $unavailableExtensions) { - fwrite( - STDERR, - sprintf( - 'PHPUnit requires the "%s" extensions, but the "%s" %s not available.' . PHP_EOL, - implode('", "', $requiredExtensions), - implode('", "', $unavailableExtensions), - count($unavailableExtensions) === 1 ? 'extension is' : 'extensions are' - ) - ); - - die(1); -} - -unset($requiredExtensions, $unavailableExtensions); - -if (__FILE__ === realpath($_SERVER['SCRIPT_NAME'])) { - $execute = true; -} else { - $execute = false; -} - -$options = getopt('', array('composer-lock', 'manifest', 'sbom')); - -if (isset($options['composer-lock'])) { - $printComposerLock = true; -} elseif (isset($options['manifest'])) { - $printManifest = true; -} elseif (isset($options['sbom'])) { - $printSbom = true; -} - -unset($options); - -define('__PHPUNIT_PHAR__', str_replace(DIRECTORY_SEPARATOR, '/', __FILE__)); -define('__PHPUNIT_PHAR_ROOT__', 'phar://phpunit-11.5.6.phar'); - -Phar::mapPhar('phpunit-11.5.6.phar'); - -spl_autoload_register( - function ($class) { - static $classes = null; - - if ($classes === null) { - $classes = ['PHPUnitPHAR\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy.php', - 'PHPUnitPHAR\\DeepCopy\\Exception\\CloneException' => '/myclabs-deep-copy/DeepCopy/Exception/CloneException.php', - 'PHPUnitPHAR\\DeepCopy\\Exception\\PropertyException' => '/myclabs-deep-copy/DeepCopy/Exception/PropertyException.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\ChainableFilter' => '/myclabs-deep-copy/DeepCopy/Filter/ChainableFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => '/myclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => '/myclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => '/myclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\Filter' => '/myclabs-deep-copy/DeepCopy/Filter/Filter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\KeepFilter' => '/myclabs-deep-copy/DeepCopy/Filter/KeepFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\ReplaceFilter' => '/myclabs-deep-copy/DeepCopy/Filter/ReplaceFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\SetNullFilter' => '/myclabs-deep-copy/DeepCopy/Filter/SetNullFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => '/myclabs-deep-copy/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\Matcher' => '/myclabs-deep-copy/DeepCopy/Matcher/Matcher.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\PropertyMatcher' => '/myclabs-deep-copy/DeepCopy/Matcher/PropertyMatcher.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\PropertyNameMatcher' => '/myclabs-deep-copy/DeepCopy/Matcher/PropertyNameMatcher.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\PropertyTypeMatcher' => '/myclabs-deep-copy/DeepCopy/Matcher/PropertyTypeMatcher.php', - 'PHPUnitPHAR\\DeepCopy\\Reflection\\ReflectionHelper' => '/myclabs-deep-copy/DeepCopy/Reflection/ReflectionHelper.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Date/DateIntervalFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Date\\DatePeriodFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Date/DatePeriodFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\ReplaceFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/ReplaceFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\ShallowCopyFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/ShallowCopyFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\TypeFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/TypeFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeMatcher\\TypeMatcher' => '/myclabs-deep-copy/DeepCopy/TypeMatcher/TypeMatcher.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Application' => '/phar-io-manifest/values/Application.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ApplicationName' => '/phar-io-manifest/values/ApplicationName.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Author' => '/phar-io-manifest/values/Author.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\AuthorCollection' => '/phar-io-manifest/values/AuthorCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\AuthorCollectionIterator' => '/phar-io-manifest/values/AuthorCollectionIterator.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\AuthorElement' => '/phar-io-manifest/xml/AuthorElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\AuthorElementCollection' => '/phar-io-manifest/xml/AuthorElementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\BundledComponent' => '/phar-io-manifest/values/BundledComponent.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\BundledComponentCollection' => '/phar-io-manifest/values/BundledComponentCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\BundledComponentCollectionIterator' => '/phar-io-manifest/values/BundledComponentCollectionIterator.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\BundlesElement' => '/phar-io-manifest/xml/BundlesElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ComponentElement' => '/phar-io-manifest/xml/ComponentElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ComponentElementCollection' => '/phar-io-manifest/xml/ComponentElementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ContainsElement' => '/phar-io-manifest/xml/ContainsElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\CopyrightElement' => '/phar-io-manifest/xml/CopyrightElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\CopyrightInformation' => '/phar-io-manifest/values/CopyrightInformation.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ElementCollection' => '/phar-io-manifest/xml/ElementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ElementCollectionException' => '/phar-io-manifest/exceptions/ElementCollectionException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Email' => '/phar-io-manifest/values/Email.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Exception' => '/phar-io-manifest/exceptions/Exception.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ExtElement' => '/phar-io-manifest/xml/ExtElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ExtElementCollection' => '/phar-io-manifest/xml/ExtElementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Extension' => '/phar-io-manifest/values/Extension.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ExtensionElement' => '/phar-io-manifest/xml/ExtensionElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\InvalidApplicationNameException' => '/phar-io-manifest/exceptions/InvalidApplicationNameException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\InvalidEmailException' => '/phar-io-manifest/exceptions/InvalidEmailException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\InvalidUrlException' => '/phar-io-manifest/exceptions/InvalidUrlException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Library' => '/phar-io-manifest/values/Library.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\License' => '/phar-io-manifest/values/License.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\LicenseElement' => '/phar-io-manifest/xml/LicenseElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Manifest' => '/phar-io-manifest/values/Manifest.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocument' => '/phar-io-manifest/xml/ManifestDocument.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocumentException' => '/phar-io-manifest/exceptions/ManifestDocumentException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocumentLoadingException' => '/phar-io-manifest/exceptions/ManifestDocumentLoadingException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocumentMapper' => '/phar-io-manifest/ManifestDocumentMapper.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocumentMapperException' => '/phar-io-manifest/exceptions/ManifestDocumentMapperException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestElement' => '/phar-io-manifest/xml/ManifestElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestElementException' => '/phar-io-manifest/exceptions/ManifestElementException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestLoader' => '/phar-io-manifest/ManifestLoader.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestLoaderException' => '/phar-io-manifest/exceptions/ManifestLoaderException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestSerializer' => '/phar-io-manifest/ManifestSerializer.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\NoEmailAddressException' => '/phar-io-manifest/exceptions/NoEmailAddressException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\PhpElement' => '/phar-io-manifest/xml/PhpElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\PhpExtensionRequirement' => '/phar-io-manifest/values/PhpExtensionRequirement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\PhpVersionRequirement' => '/phar-io-manifest/values/PhpVersionRequirement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Requirement' => '/phar-io-manifest/values/Requirement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\RequirementCollection' => '/phar-io-manifest/values/RequirementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\RequirementCollectionIterator' => '/phar-io-manifest/values/RequirementCollectionIterator.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\RequiresElement' => '/phar-io-manifest/xml/RequiresElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Type' => '/phar-io-manifest/values/Type.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Url' => '/phar-io-manifest/values/Url.php', - 'PHPUnitPHAR\\PharIo\\Version\\AbstractVersionConstraint' => '/phar-io-version/constraints/AbstractVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\AndVersionConstraintGroup' => '/phar-io-version/constraints/AndVersionConstraintGroup.php', - 'PHPUnitPHAR\\PharIo\\Version\\AnyVersionConstraint' => '/phar-io-version/constraints/AnyVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\BuildMetaData' => '/phar-io-version/BuildMetaData.php', - 'PHPUnitPHAR\\PharIo\\Version\\ExactVersionConstraint' => '/phar-io-version/constraints/ExactVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\Exception' => '/phar-io-version/exceptions/Exception.php', - 'PHPUnitPHAR\\PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => '/phar-io-version/constraints/GreaterThanOrEqualToVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\InvalidPreReleaseSuffixException' => '/phar-io-version/exceptions/InvalidPreReleaseSuffixException.php', - 'PHPUnitPHAR\\PharIo\\Version\\InvalidVersionException' => '/phar-io-version/exceptions/InvalidVersionException.php', - 'PHPUnitPHAR\\PharIo\\Version\\NoBuildMetaDataException' => '/phar-io-version/exceptions/NoBuildMetaDataException.php', - 'PHPUnitPHAR\\PharIo\\Version\\NoPreReleaseSuffixException' => '/phar-io-version/exceptions/NoPreReleaseSuffixException.php', - 'PHPUnitPHAR\\PharIo\\Version\\OrVersionConstraintGroup' => '/phar-io-version/constraints/OrVersionConstraintGroup.php', - 'PHPUnitPHAR\\PharIo\\Version\\PreReleaseSuffix' => '/phar-io-version/PreReleaseSuffix.php', - 'PHPUnitPHAR\\PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => '/phar-io-version/constraints/SpecificMajorAndMinorVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\SpecificMajorVersionConstraint' => '/phar-io-version/constraints/SpecificMajorVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\UnsupportedVersionConstraintException' => '/phar-io-version/exceptions/UnsupportedVersionConstraintException.php', - 'PHPUnitPHAR\\PharIo\\Version\\Version' => '/phar-io-version/Version.php', - 'PHPUnitPHAR\\PharIo\\Version\\VersionConstraint' => '/phar-io-version/constraints/VersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\VersionConstraintParser' => '/phar-io-version/VersionConstraintParser.php', - 'PHPUnitPHAR\\PharIo\\Version\\VersionConstraintValue' => '/phar-io-version/VersionConstraintValue.php', - 'PHPUnitPHAR\\PharIo\\Version\\VersionNumber' => '/phar-io-version/VersionNumber.php', - 'PHPUnitPHAR\\PhpParser\\Builder' => '/nikic-php-parser/PhpParser/Builder.php', - 'PHPUnitPHAR\\PhpParser\\BuilderFactory' => '/nikic-php-parser/PhpParser/BuilderFactory.php', - 'PHPUnitPHAR\\PhpParser\\BuilderHelpers' => '/nikic-php-parser/PhpParser/BuilderHelpers.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\ClassConst' => '/nikic-php-parser/PhpParser/Builder/ClassConst.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Class_' => '/nikic-php-parser/PhpParser/Builder/Class_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Declaration' => '/nikic-php-parser/PhpParser/Builder/Declaration.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\EnumCase' => '/nikic-php-parser/PhpParser/Builder/EnumCase.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Enum_' => '/nikic-php-parser/PhpParser/Builder/Enum_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\FunctionLike' => '/nikic-php-parser/PhpParser/Builder/FunctionLike.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Function_' => '/nikic-php-parser/PhpParser/Builder/Function_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Interface_' => '/nikic-php-parser/PhpParser/Builder/Interface_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Method' => '/nikic-php-parser/PhpParser/Builder/Method.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Namespace_' => '/nikic-php-parser/PhpParser/Builder/Namespace_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Param' => '/nikic-php-parser/PhpParser/Builder/Param.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Property' => '/nikic-php-parser/PhpParser/Builder/Property.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\TraitUse' => '/nikic-php-parser/PhpParser/Builder/TraitUse.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\TraitUseAdaptation' => '/nikic-php-parser/PhpParser/Builder/TraitUseAdaptation.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Trait_' => '/nikic-php-parser/PhpParser/Builder/Trait_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Use_' => '/nikic-php-parser/PhpParser/Builder/Use_.php', - 'PHPUnitPHAR\\PhpParser\\Comment' => '/nikic-php-parser/PhpParser/Comment.php', - 'PHPUnitPHAR\\PhpParser\\Comment\\Doc' => '/nikic-php-parser/PhpParser/Comment/Doc.php', - 'PHPUnitPHAR\\PhpParser\\ConstExprEvaluationException' => '/nikic-php-parser/PhpParser/ConstExprEvaluationException.php', - 'PHPUnitPHAR\\PhpParser\\ConstExprEvaluator' => '/nikic-php-parser/PhpParser/ConstExprEvaluator.php', - 'PHPUnitPHAR\\PhpParser\\Error' => '/nikic-php-parser/PhpParser/Error.php', - 'PHPUnitPHAR\\PhpParser\\ErrorHandler' => '/nikic-php-parser/PhpParser/ErrorHandler.php', - 'PHPUnitPHAR\\PhpParser\\ErrorHandler\\Collecting' => '/nikic-php-parser/PhpParser/ErrorHandler/Collecting.php', - 'PHPUnitPHAR\\PhpParser\\ErrorHandler\\Throwing' => '/nikic-php-parser/PhpParser/ErrorHandler/Throwing.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\DiffElem' => '/nikic-php-parser/PhpParser/Internal/DiffElem.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\Differ' => '/nikic-php-parser/PhpParser/Internal/Differ.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\PrintableNewAnonClassNode' => '/nikic-php-parser/PhpParser/Internal/PrintableNewAnonClassNode.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\TokenPolyfill' => '/nikic-php-parser/PhpParser/Internal/TokenPolyfill.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\TokenStream' => '/nikic-php-parser/PhpParser/Internal/TokenStream.php', - 'PHPUnitPHAR\\PhpParser\\JsonDecoder' => '/nikic-php-parser/PhpParser/JsonDecoder.php', - 'PHPUnitPHAR\\PhpParser\\Lexer' => '/nikic-php-parser/PhpParser/Lexer.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\Emulative' => '/nikic-php-parser/PhpParser/Lexer/Emulative.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\AsymmetricVisibilityTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\PropertyTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\ReadonlyFunctionTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Modifiers' => '/nikic-php-parser/PhpParser/Modifiers.php', - 'PHPUnitPHAR\\PhpParser\\NameContext' => '/nikic-php-parser/PhpParser/NameContext.php', - 'PHPUnitPHAR\\PhpParser\\Node' => '/nikic-php-parser/PhpParser/Node.php', - 'PHPUnitPHAR\\PhpParser\\NodeAbstract' => '/nikic-php-parser/PhpParser/NodeAbstract.php', - 'PHPUnitPHAR\\PhpParser\\NodeDumper' => '/nikic-php-parser/PhpParser/NodeDumper.php', - 'PHPUnitPHAR\\PhpParser\\NodeFinder' => '/nikic-php-parser/PhpParser/NodeFinder.php', - 'PHPUnitPHAR\\PhpParser\\NodeTraverser' => '/nikic-php-parser/PhpParser/NodeTraverser.php', - 'PHPUnitPHAR\\PhpParser\\NodeTraverserInterface' => '/nikic-php-parser/PhpParser/NodeTraverserInterface.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitorAbstract' => '/nikic-php-parser/PhpParser/NodeVisitorAbstract.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\CloningVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/CloningVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\CommentAnnotatingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\FindingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/FindingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\FirstFindingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/FirstFindingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\NameResolver' => '/nikic-php-parser/PhpParser/NodeVisitor/NameResolver.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\NodeConnectingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/NodeConnectingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\ParentConnectingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/ParentConnectingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Arg' => '/nikic-php-parser/PhpParser/Node/Arg.php', - 'PHPUnitPHAR\\PhpParser\\Node\\ArrayItem' => '/nikic-php-parser/PhpParser/Node/ArrayItem.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Attribute' => '/nikic-php-parser/PhpParser/Node/Attribute.php', - 'PHPUnitPHAR\\PhpParser\\Node\\AttributeGroup' => '/nikic-php-parser/PhpParser/Node/AttributeGroup.php', - 'PHPUnitPHAR\\PhpParser\\Node\\ClosureUse' => '/nikic-php-parser/PhpParser/Node/ClosureUse.php', - 'PHPUnitPHAR\\PhpParser\\Node\\ComplexType' => '/nikic-php-parser/PhpParser/Node/ComplexType.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Const_' => '/nikic-php-parser/PhpParser/Node/Const_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\DeclareItem' => '/nikic-php-parser/PhpParser/Node/DeclareItem.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr' => '/nikic-php-parser/PhpParser/Node/Expr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ArrayDimFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ArrayDimFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Array_' => '/nikic-php-parser/PhpParser/Node/Expr/Array_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ArrowFunction' => '/nikic-php-parser/PhpParser/Node/Expr/ArrowFunction.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Assign' => '/nikic-php-parser/PhpParser/Node/Expr/Assign.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Coalesce.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Concat' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Concat.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Div' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Div.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Minus' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Minus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Mod' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mod.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Mul' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mul.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Plus' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Plus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Pow' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Pow.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftRight.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignRef' => '/nikic-php-parser/PhpParser/Node/Expr/AssignRef.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Coalesce.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Concat' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Concat.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Div' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Div.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Equal' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Equal.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Greater' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Greater.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Identical' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Identical.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Minus' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Minus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Mod' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mod.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Mul' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mul.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotEqual.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Plus' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Plus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Pow' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Pow.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Smaller.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Spaceship.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BitwiseNot' => '/nikic-php-parser/PhpParser/Node/Expr/BitwiseNot.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BooleanNot' => '/nikic-php-parser/PhpParser/Node/Expr/BooleanNot.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\CallLike' => '/nikic-php-parser/PhpParser/Node/Expr/CallLike.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast' => '/nikic-php-parser/PhpParser/Node/Expr/Cast.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Array_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Array_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Bool_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Bool_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Double' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Double.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Int_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Int_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Object_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Object_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\String_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/String_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Unset_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Unset_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ClassConstFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ClassConstFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Clone_' => '/nikic-php-parser/PhpParser/Node/Expr/Clone_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Closure' => '/nikic-php-parser/PhpParser/Node/Expr/Closure.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ConstFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ConstFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Empty_' => '/nikic-php-parser/PhpParser/Node/Expr/Empty_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Error' => '/nikic-php-parser/PhpParser/Node/Expr/Error.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ErrorSuppress' => '/nikic-php-parser/PhpParser/Node/Expr/ErrorSuppress.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Eval_' => '/nikic-php-parser/PhpParser/Node/Expr/Eval_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Exit_' => '/nikic-php-parser/PhpParser/Node/Expr/Exit_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\FuncCall' => '/nikic-php-parser/PhpParser/Node/Expr/FuncCall.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Include_' => '/nikic-php-parser/PhpParser/Node/Expr/Include_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Instanceof_' => '/nikic-php-parser/PhpParser/Node/Expr/Instanceof_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Isset_' => '/nikic-php-parser/PhpParser/Node/Expr/Isset_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\List_' => '/nikic-php-parser/PhpParser/Node/Expr/List_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Match_' => '/nikic-php-parser/PhpParser/Node/Expr/Match_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\MethodCall' => '/nikic-php-parser/PhpParser/Node/Expr/MethodCall.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\New_' => '/nikic-php-parser/PhpParser/Node/Expr/New_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\NullsafeMethodCall' => '/nikic-php-parser/PhpParser/Node/Expr/NullsafeMethodCall.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\NullsafePropertyFetch' => '/nikic-php-parser/PhpParser/Node/Expr/NullsafePropertyFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PostDec' => '/nikic-php-parser/PhpParser/Node/Expr/PostDec.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PostInc' => '/nikic-php-parser/PhpParser/Node/Expr/PostInc.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PreDec' => '/nikic-php-parser/PhpParser/Node/Expr/PreDec.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PreInc' => '/nikic-php-parser/PhpParser/Node/Expr/PreInc.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Print_' => '/nikic-php-parser/PhpParser/Node/Expr/Print_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PropertyFetch' => '/nikic-php-parser/PhpParser/Node/Expr/PropertyFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ShellExec' => '/nikic-php-parser/PhpParser/Node/Expr/ShellExec.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\StaticCall' => '/nikic-php-parser/PhpParser/Node/Expr/StaticCall.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\StaticPropertyFetch' => '/nikic-php-parser/PhpParser/Node/Expr/StaticPropertyFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Ternary' => '/nikic-php-parser/PhpParser/Node/Expr/Ternary.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Throw_' => '/nikic-php-parser/PhpParser/Node/Expr/Throw_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\UnaryMinus' => '/nikic-php-parser/PhpParser/Node/Expr/UnaryMinus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\UnaryPlus' => '/nikic-php-parser/PhpParser/Node/Expr/UnaryPlus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Variable' => '/nikic-php-parser/PhpParser/Node/Expr/Variable.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\YieldFrom' => '/nikic-php-parser/PhpParser/Node/Expr/YieldFrom.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Yield_' => '/nikic-php-parser/PhpParser/Node/Expr/Yield_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\FunctionLike' => '/nikic-php-parser/PhpParser/Node/FunctionLike.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Identifier' => '/nikic-php-parser/PhpParser/Node/Identifier.php', - 'PHPUnitPHAR\\PhpParser\\Node\\InterpolatedStringPart' => '/nikic-php-parser/PhpParser/Node/InterpolatedStringPart.php', - 'PHPUnitPHAR\\PhpParser\\Node\\IntersectionType' => '/nikic-php-parser/PhpParser/Node/IntersectionType.php', - 'PHPUnitPHAR\\PhpParser\\Node\\MatchArm' => '/nikic-php-parser/PhpParser/Node/MatchArm.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Name' => '/nikic-php-parser/PhpParser/Node/Name.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Name\\FullyQualified' => '/nikic-php-parser/PhpParser/Node/Name/FullyQualified.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Name\\Relative' => '/nikic-php-parser/PhpParser/Node/Name/Relative.php', - 'PHPUnitPHAR\\PhpParser\\Node\\NullableType' => '/nikic-php-parser/PhpParser/Node/NullableType.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Param' => '/nikic-php-parser/PhpParser/Node/Param.php', - 'PHPUnitPHAR\\PhpParser\\Node\\PropertyHook' => '/nikic-php-parser/PhpParser/Node/PropertyHook.php', - 'PHPUnitPHAR\\PhpParser\\Node\\PropertyItem' => '/nikic-php-parser/PhpParser/Node/PropertyItem.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar' => '/nikic-php-parser/PhpParser/Node/Scalar.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\Float_' => '/nikic-php-parser/PhpParser/Node/Scalar/Float_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\Int_' => '/nikic-php-parser/PhpParser/Node/Scalar/Int_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\InterpolatedString' => '/nikic-php-parser/PhpParser/Node/Scalar/InterpolatedString.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Class_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Class_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Dir' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Dir.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\File' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/File.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Function_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Function_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Line' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Line.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Method' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Method.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Namespace_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Property' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Property.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Trait_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\String_' => '/nikic-php-parser/PhpParser/Node/Scalar/String_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\StaticVar' => '/nikic-php-parser/PhpParser/Node/StaticVar.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt' => '/nikic-php-parser/PhpParser/Node/Stmt.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Block' => '/nikic-php-parser/PhpParser/Node/Stmt/Block.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Break_' => '/nikic-php-parser/PhpParser/Node/Stmt/Break_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Case_' => '/nikic-php-parser/PhpParser/Node/Stmt/Case_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Catch_' => '/nikic-php-parser/PhpParser/Node/Stmt/Catch_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\ClassConst' => '/nikic-php-parser/PhpParser/Node/Stmt/ClassConst.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\ClassLike' => '/nikic-php-parser/PhpParser/Node/Stmt/ClassLike.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\ClassMethod' => '/nikic-php-parser/PhpParser/Node/Stmt/ClassMethod.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Class_' => '/nikic-php-parser/PhpParser/Node/Stmt/Class_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Const_' => '/nikic-php-parser/PhpParser/Node/Stmt/Const_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Continue_' => '/nikic-php-parser/PhpParser/Node/Stmt/Continue_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Declare_' => '/nikic-php-parser/PhpParser/Node/Stmt/Declare_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Do_' => '/nikic-php-parser/PhpParser/Node/Stmt/Do_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Echo_' => '/nikic-php-parser/PhpParser/Node/Stmt/Echo_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\ElseIf_' => '/nikic-php-parser/PhpParser/Node/Stmt/ElseIf_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Else_' => '/nikic-php-parser/PhpParser/Node/Stmt/Else_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\EnumCase' => '/nikic-php-parser/PhpParser/Node/Stmt/EnumCase.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Enum_' => '/nikic-php-parser/PhpParser/Node/Stmt/Enum_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Expression' => '/nikic-php-parser/PhpParser/Node/Stmt/Expression.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Finally_' => '/nikic-php-parser/PhpParser/Node/Stmt/Finally_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\For_' => '/nikic-php-parser/PhpParser/Node/Stmt/For_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Foreach_' => '/nikic-php-parser/PhpParser/Node/Stmt/Foreach_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Function_' => '/nikic-php-parser/PhpParser/Node/Stmt/Function_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Global_' => '/nikic-php-parser/PhpParser/Node/Stmt/Global_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Goto_' => '/nikic-php-parser/PhpParser/Node/Stmt/Goto_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\GroupUse' => '/nikic-php-parser/PhpParser/Node/Stmt/GroupUse.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\HaltCompiler' => '/nikic-php-parser/PhpParser/Node/Stmt/HaltCompiler.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\If_' => '/nikic-php-parser/PhpParser/Node/Stmt/If_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\InlineHTML' => '/nikic-php-parser/PhpParser/Node/Stmt/InlineHTML.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Interface_' => '/nikic-php-parser/PhpParser/Node/Stmt/Interface_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Label' => '/nikic-php-parser/PhpParser/Node/Stmt/Label.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Namespace_' => '/nikic-php-parser/PhpParser/Node/Stmt/Namespace_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Nop' => '/nikic-php-parser/PhpParser/Node/Stmt/Nop.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Property' => '/nikic-php-parser/PhpParser/Node/Stmt/Property.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Return_' => '/nikic-php-parser/PhpParser/Node/Stmt/Return_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Static_' => '/nikic-php-parser/PhpParser/Node/Stmt/Static_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Switch_' => '/nikic-php-parser/PhpParser/Node/Stmt/Switch_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TraitUse' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUse.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TraitUseAdaptation' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Trait_' => '/nikic-php-parser/PhpParser/Node/Stmt/Trait_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TryCatch' => '/nikic-php-parser/PhpParser/Node/Stmt/TryCatch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Unset_' => '/nikic-php-parser/PhpParser/Node/Stmt/Unset_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Use_' => '/nikic-php-parser/PhpParser/Node/Stmt/Use_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\While_' => '/nikic-php-parser/PhpParser/Node/Stmt/While_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\UnionType' => '/nikic-php-parser/PhpParser/Node/UnionType.php', - 'PHPUnitPHAR\\PhpParser\\Node\\UseItem' => '/nikic-php-parser/PhpParser/Node/UseItem.php', - 'PHPUnitPHAR\\PhpParser\\Node\\VarLikeIdentifier' => '/nikic-php-parser/PhpParser/Node/VarLikeIdentifier.php', - 'PHPUnitPHAR\\PhpParser\\Node\\VariadicPlaceholder' => '/nikic-php-parser/PhpParser/Node/VariadicPlaceholder.php', - 'PHPUnitPHAR\\PhpParser\\Parser' => '/nikic-php-parser/PhpParser/Parser.php', - 'PHPUnitPHAR\\PhpParser\\ParserAbstract' => '/nikic-php-parser/PhpParser/ParserAbstract.php', - 'PHPUnitPHAR\\PhpParser\\ParserFactory' => '/nikic-php-parser/PhpParser/ParserFactory.php', - 'PHPUnitPHAR\\PhpParser\\Parser\\Php7' => '/nikic-php-parser/PhpParser/Parser/Php7.php', - 'PHPUnitPHAR\\PhpParser\\Parser\\Php8' => '/nikic-php-parser/PhpParser/Parser/Php8.php', - 'PHPUnitPHAR\\PhpParser\\PhpVersion' => '/nikic-php-parser/PhpParser/PhpVersion.php', - 'PHPUnitPHAR\\PhpParser\\PrettyPrinter' => '/nikic-php-parser/PhpParser/PrettyPrinter.php', - 'PHPUnitPHAR\\PhpParser\\PrettyPrinterAbstract' => '/nikic-php-parser/PhpParser/PrettyPrinterAbstract.php', - 'PHPUnitPHAR\\PhpParser\\PrettyPrinter\\Standard' => '/nikic-php-parser/PhpParser/PrettyPrinter/Standard.php', - 'PHPUnitPHAR\\PhpParser\\Token' => '/nikic-php-parser/PhpParser/Token.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\AmbiguousOptionException' => '/sebastian-cli-parser/exceptions/AmbiguousOptionException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\Exception' => '/sebastian-cli-parser/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => '/sebastian-cli-parser/exceptions/OptionDoesNotAllowArgumentException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\Parser' => '/sebastian-cli-parser/Parser.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => '/sebastian-cli-parser/exceptions/RequiredOptionArgumentMissingException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\UnknownOptionException' => '/sebastian-cli-parser/exceptions/UnknownOptionException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => '/php-code-coverage/Exception/BranchAndPathCoverageNotSupportedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\CodeCoverage' => '/php-code-coverage/CodeCoverage.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Data\\ProcessedCodeCoverageData' => '/php-code-coverage/Data/ProcessedCodeCoverageData.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Data\\RawCodeCoverageData' => '/php-code-coverage/Data/RawCodeCoverageData.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => '/php-code-coverage/Exception/DeadCodeDetectionNotSupportedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\Driver' => '/php-code-coverage/Driver/Driver.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => '/php-code-coverage/Exception/PathExistsButIsNotDirectoryException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => '/php-code-coverage/Driver/PcovDriver.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => '/php-code-coverage/Exception/PcovNotAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\Selector' => '/php-code-coverage/Driver/Selector.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => '/php-code-coverage/Exception/WriteOperationFailedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugDriver' => '/php-code-coverage/Driver/XdebugDriver.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => '/php-code-coverage/Exception/XdebugNotAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotEnabledException' => '/php-code-coverage/Exception/XdebugNotEnabledException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Exception' => '/php-code-coverage/Exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\FileCouldNotBeWrittenException' => '/php-code-coverage/Exception/FileCouldNotBeWrittenException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Filter' => '/php-code-coverage/Filter.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => '/php-code-coverage/Exception/InvalidArgumentException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => '/php-code-coverage/Exception/NoCodeCoverageDriverAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => '/php-code-coverage/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => '/php-code-coverage/Node/AbstractNode.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\Builder' => '/php-code-coverage/Node/Builder.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => '/php-code-coverage/Node/CrapIndex.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\Directory' => '/php-code-coverage/Node/Directory.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\File' => '/php-code-coverage/Node/File.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\Iterator' => '/php-code-coverage/Node/Iterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\ParserException' => '/php-code-coverage/Exception/ParserException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\ReflectionException' => '/php-code-coverage/Exception/ReflectionException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => '/php-code-coverage/Exception/ReportAlreadyFinalizedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Clover' => '/php-code-coverage/Report/Clover.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => '/php-code-coverage/Report/Cobertura.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => '/php-code-coverage/Report/Crap4j.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Colors' => '/php-code-coverage/Report/Html/Colors.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\CustomCssFile' => '/php-code-coverage/Report/Html/CustomCssFile.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => '/php-code-coverage/Report/Html/Renderer/Dashboard.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => '/php-code-coverage/Report/Html/Renderer/Directory.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => '/php-code-coverage/Report/Html/Facade.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => '/php-code-coverage/Report/Html/Renderer/File.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => '/php-code-coverage/Report/Html/Renderer.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\PHP' => '/php-code-coverage/Report/PHP.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Text' => '/php-code-coverage/Report/Text.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Thresholds' => '/php-code-coverage/Report/Thresholds.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => '/php-code-coverage/Report/Xml/BuildInformation.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => '/php-code-coverage/Report/Xml/Coverage.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => '/php-code-coverage/Report/Xml/Directory.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => '/php-code-coverage/Report/Xml/Facade.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => '/php-code-coverage/Report/Xml/File.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => '/php-code-coverage/Report/Xml/Method.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => '/php-code-coverage/Report/Xml/Node.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => '/php-code-coverage/Report/Xml/Project.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => '/php-code-coverage/Report/Xml/Report.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => '/php-code-coverage/Report/Xml/Source.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => '/php-code-coverage/Report/Xml/Tests.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => '/php-code-coverage/Report/Xml/Totals.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => '/php-code-coverage/Report/Xml/Unit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => '/php-code-coverage/Exception/StaticAnalysisCacheNotConfiguredException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => '/php-code-coverage/StaticAnalysis/CacheWarmer.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => '/php-code-coverage/StaticAnalysis/CachingFileAnalyser.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => '/php-code-coverage/StaticAnalysis/CodeUnitFindingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => '/php-code-coverage/StaticAnalysis/ExecutableLinesFindingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => '/php-code-coverage/StaticAnalysis/FileAnalyser.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => '/php-code-coverage/StaticAnalysis/IgnoredLinesFindingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => '/php-code-coverage/StaticAnalysis/ParsingFileAnalyser.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\TestIdMissingException' => '/php-code-coverage/Exception/TestIdMissingException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Known' => '/php-code-coverage/TestSize/Known.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Large' => '/php-code-coverage/TestSize/Large.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Medium' => '/php-code-coverage/TestSize/Medium.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Small' => '/php-code-coverage/TestSize/Small.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\TestSize' => '/php-code-coverage/TestSize/TestSize.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Unknown' => '/php-code-coverage/TestSize/Unknown.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Failure' => '/php-code-coverage/TestStatus/Failure.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Known' => '/php-code-coverage/TestStatus/Known.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Success' => '/php-code-coverage/TestStatus/Success.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\TestStatus' => '/php-code-coverage/TestStatus/TestStatus.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Unknown' => '/php-code-coverage/TestStatus/Unknown.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => '/php-code-coverage/Exception/UnintentionallyCoveredCodeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => '/php-code-coverage/Exception/DirectoryCouldNotBeCreatedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => '/php-code-coverage/Util/Filesystem.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Util\\Percentage' => '/php-code-coverage/Util/Percentage.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Version' => '/php-code-coverage/Version.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\XmlException' => '/php-code-coverage/Exception/XmlException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => '/sebastian-code-unit-reverse-lookup/Wizard.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\ClassMethodUnit' => '/sebastian-code-unit/ClassMethodUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\ClassUnit' => '/sebastian-code-unit/ClassUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\CodeUnit' => '/sebastian-code-unit/CodeUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\CodeUnitCollection' => '/sebastian-code-unit/CodeUnitCollection.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\CodeUnitCollectionIterator' => '/sebastian-code-unit/CodeUnitCollectionIterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\Exception' => '/sebastian-code-unit/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\FileUnit' => '/sebastian-code-unit/FileUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\FunctionUnit' => '/sebastian-code-unit/FunctionUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\InterfaceMethodUnit' => '/sebastian-code-unit/InterfaceMethodUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\InterfaceUnit' => '/sebastian-code-unit/InterfaceUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\InvalidCodeUnitException' => '/sebastian-code-unit/exceptions/InvalidCodeUnitException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\Mapper' => '/sebastian-code-unit/Mapper.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\NoTraitException' => '/sebastian-code-unit/exceptions/NoTraitException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\ReflectionException' => '/sebastian-code-unit/exceptions/ReflectionException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\TraitMethodUnit' => '/sebastian-code-unit/TraitMethodUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\TraitUnit' => '/sebastian-code-unit/TraitUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ArrayComparator' => '/sebastian-comparator/ArrayComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\Comparator' => '/sebastian-comparator/Comparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ComparisonFailure' => '/sebastian-comparator/ComparisonFailure.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\DOMNodeComparator' => '/sebastian-comparator/DOMNodeComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\DateTimeComparator' => '/sebastian-comparator/DateTimeComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\EnumerationComparator' => '/sebastian-comparator/EnumerationComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\Exception' => '/sebastian-comparator/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ExceptionComparator' => '/sebastian-comparator/ExceptionComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\Factory' => '/sebastian-comparator/Factory.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\MockObjectComparator' => '/sebastian-comparator/MockObjectComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\NumberComparator' => '/sebastian-comparator/NumberComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\NumericComparator' => '/sebastian-comparator/NumericComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ObjectComparator' => '/sebastian-comparator/ObjectComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ResourceComparator' => '/sebastian-comparator/ResourceComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\RuntimeException' => '/sebastian-comparator/exceptions/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ScalarComparator' => '/sebastian-comparator/ScalarComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\SplObjectStorageComparator' => '/sebastian-comparator/SplObjectStorageComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\TypeComparator' => '/sebastian-comparator/TypeComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\Calculator' => '/sebastian-complexity/Calculator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\Complexity' => '/sebastian-complexity/Complexity/Complexity.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\ComplexityCalculatingVisitor' => '/sebastian-complexity/Visitor/ComplexityCalculatingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\ComplexityCollection' => '/sebastian-complexity/Complexity/ComplexityCollection.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\ComplexityCollectionIterator' => '/sebastian-complexity/Complexity/ComplexityCollectionIterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\CyclomaticComplexityCalculatingVisitor' => '/sebastian-complexity/Visitor/CyclomaticComplexityCalculatingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\Exception' => '/sebastian-complexity/Exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\RuntimeException' => '/sebastian-complexity/Exception/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Chunk' => '/sebastian-diff/Chunk.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\ConfigurationException' => '/sebastian-diff/Exception/ConfigurationException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Diff' => '/sebastian-diff/Diff.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Differ' => '/sebastian-diff/Differ.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Exception' => '/sebastian-diff/Exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\InvalidArgumentException' => '/sebastian-diff/Exception/InvalidArgumentException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Line' => '/sebastian-diff/Line.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => '/sebastian-diff/LongestCommonSubsequenceCalculator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => '/sebastian-diff/MemoryEfficientLongestCommonSubsequenceCalculator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => '/sebastian-diff/Output/AbstractChunkOutputBuilder.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => '/sebastian-diff/Output/DiffOnlyOutputBuilder.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => '/sebastian-diff/Output/DiffOutputBuilderInterface.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => '/sebastian-diff/Output/StrictUnifiedDiffOutputBuilder.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => '/sebastian-diff/Output/UnifiedDiffOutputBuilder.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Parser' => '/sebastian-diff/Parser.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => '/sebastian-diff/TimeEfficientLongestCommonSubsequenceCalculator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Environment\\Console' => '/sebastian-environment/Console.php', - 'PHPUnitPHAR\\SebastianBergmann\\Environment\\Runtime' => '/sebastian-environment/Runtime.php', - 'PHPUnitPHAR\\SebastianBergmann\\Exporter\\Exporter' => '/sebastian-exporter/Exporter.php', - 'PHPUnitPHAR\\SebastianBergmann\\FileIterator\\ExcludeIterator' => '/php-file-iterator/ExcludeIterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\FileIterator\\Facade' => '/php-file-iterator/Facade.php', - 'PHPUnitPHAR\\SebastianBergmann\\FileIterator\\Factory' => '/php-file-iterator/Factory.php', - 'PHPUnitPHAR\\SebastianBergmann\\FileIterator\\Iterator' => '/php-file-iterator/Iterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\CodeExporter' => '/sebastian-global-state/CodeExporter.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\Exception' => '/sebastian-global-state/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\ExcludeList' => '/sebastian-global-state/ExcludeList.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\Restorer' => '/sebastian-global-state/Restorer.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\RuntimeException' => '/sebastian-global-state/exceptions/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\Snapshot' => '/sebastian-global-state/Snapshot.php', - 'PHPUnitPHAR\\SebastianBergmann\\Invoker\\Exception' => '/php-invoker/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Invoker\\Invoker' => '/php-invoker/Invoker.php', - 'PHPUnitPHAR\\SebastianBergmann\\Invoker\\ProcessControlExtensionNotLoadedException' => '/php-invoker/exceptions/ProcessControlExtensionNotLoadedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Invoker\\TimeoutException' => '/php-invoker/exceptions/TimeoutException.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\Counter' => '/sebastian-lines-of-code/Counter.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\Exception' => '/sebastian-lines-of-code/Exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\IllogicalValuesException' => '/sebastian-lines-of-code/Exception/IllogicalValuesException.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\LineCountingVisitor' => '/sebastian-lines-of-code/LineCountingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\LinesOfCode' => '/sebastian-lines-of-code/LinesOfCode.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\NegativeValueException' => '/sebastian-lines-of-code/Exception/NegativeValueException.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\RuntimeException' => '/sebastian-lines-of-code/Exception/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\ObjectEnumerator\\Enumerator' => '/sebastian-object-enumerator/Enumerator.php', - 'PHPUnitPHAR\\SebastianBergmann\\ObjectReflector\\ObjectReflector' => '/sebastian-object-reflector/ObjectReflector.php', - 'PHPUnitPHAR\\SebastianBergmann\\RecursionContext\\Context' => '/sebastian-recursion-context/Context.php', - 'PHPUnitPHAR\\SebastianBergmann\\Template\\Exception' => '/php-text-template/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Template\\InvalidArgumentException' => '/php-text-template/exceptions/InvalidArgumentException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Template\\RuntimeException' => '/php-text-template/exceptions/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Template\\Template' => '/php-text-template/Template.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\Duration' => '/php-timer/Duration.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\Exception' => '/php-timer/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\NoActiveTimerException' => '/php-timer/exceptions/NoActiveTimerException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\ResourceUsageFormatter' => '/php-timer/ResourceUsageFormatter.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\TimeSinceStartOfRequestNotAvailableException' => '/php-timer/exceptions/TimeSinceStartOfRequestNotAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\Timer' => '/php-timer/Timer.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\CallableType' => '/sebastian-type/type/CallableType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\Exception' => '/sebastian-type/exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\FalseType' => '/sebastian-type/type/FalseType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\GenericObjectType' => '/sebastian-type/type/GenericObjectType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\IntersectionType' => '/sebastian-type/type/IntersectionType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\IterableType' => '/sebastian-type/type/IterableType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\MixedType' => '/sebastian-type/type/MixedType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\NeverType' => '/sebastian-type/type/NeverType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\NullType' => '/sebastian-type/type/NullType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\ObjectType' => '/sebastian-type/type/ObjectType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\Parameter' => '/sebastian-type/Parameter.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\ReflectionMapper' => '/sebastian-type/ReflectionMapper.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\RuntimeException' => '/sebastian-type/exception/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\SimpleType' => '/sebastian-type/type/SimpleType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\StaticType' => '/sebastian-type/type/StaticType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\TrueType' => '/sebastian-type/type/TrueType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\Type' => '/sebastian-type/type/Type.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\TypeName' => '/sebastian-type/TypeName.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\UnionType' => '/sebastian-type/type/UnionType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\UnknownType' => '/sebastian-type/type/UnknownType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\VoidType' => '/sebastian-type/type/VoidType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Version' => '/sebastian-version/Version.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\Exception' => '/theseer-tokenizer/Exception.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\NamespaceUri' => '/theseer-tokenizer/NamespaceUri.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\NamespaceUriException' => '/theseer-tokenizer/NamespaceUriException.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\Token' => '/theseer-tokenizer/Token.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\TokenCollection' => '/theseer-tokenizer/TokenCollection.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\TokenCollectionException' => '/theseer-tokenizer/TokenCollectionException.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\Tokenizer' => '/theseer-tokenizer/Tokenizer.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\XMLSerializer' => '/theseer-tokenizer/XMLSerializer.php', - 'PHPUnitPHAR\\staabm\\SideEffectsDetector\\SideEffect' => '/staabm-side-effects-detector/SideEffect.php', - 'PHPUnitPHAR\\staabm\\SideEffectsDetector\\SideEffectsDetector' => '/staabm-side-effects-detector/SideEffectsDetector.php', - 'PHPUnit\\Event\\Application\\Finished' => '/phpunit/Event/Events/Application/Finished.php', - 'PHPUnit\\Event\\Application\\FinishedSubscriber' => '/phpunit/Event/Events/Application/FinishedSubscriber.php', - 'PHPUnit\\Event\\Application\\Started' => '/phpunit/Event/Events/Application/Started.php', - 'PHPUnit\\Event\\Application\\StartedSubscriber' => '/phpunit/Event/Events/Application/StartedSubscriber.php', - 'PHPUnit\\Event\\Code\\ClassMethod' => '/phpunit/Event/Value/ClassMethod.php', - 'PHPUnit\\Event\\Code\\ComparisonFailure' => '/phpunit/Event/Value/ComparisonFailure.php', - 'PHPUnit\\Event\\Code\\ComparisonFailureBuilder' => '/phpunit/Event/Value/ComparisonFailureBuilder.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\DirectTrigger' => '/phpunit/Event/Value/Test/Issue/DirectTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\IndirectTrigger' => '/phpunit/Event/Value/Test/Issue/IndirectTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\IssueTrigger' => '/phpunit/Event/Value/Test/Issue/IssueTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\SelfTrigger' => '/phpunit/Event/Value/Test/Issue/SelfTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\TestTrigger' => '/phpunit/Event/Value/Test/Issue/TestTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\UnknownTrigger' => '/phpunit/Event/Value/Test/Issue/UnknownTrigger.php', - 'PHPUnit\\Event\\Code\\NoTestCaseObjectOnCallStackException' => '/phpunit/Event/Exception/NoTestCaseObjectOnCallStackException.php', - 'PHPUnit\\Event\\Code\\Phpt' => '/phpunit/Event/Value/Test/Phpt.php', - 'PHPUnit\\Event\\Code\\Test' => '/phpunit/Event/Value/Test/Test.php', - 'PHPUnit\\Event\\Code\\TestCollection' => '/phpunit/Event/Value/Test/TestCollection.php', - 'PHPUnit\\Event\\Code\\TestCollectionIterator' => '/phpunit/Event/Value/Test/TestCollectionIterator.php', - 'PHPUnit\\Event\\Code\\TestDox' => '/phpunit/Event/Value/Test/TestDox.php', - 'PHPUnit\\Event\\Code\\TestDoxBuilder' => '/phpunit/Event/Value/Test/TestDoxBuilder.php', - 'PHPUnit\\Event\\Code\\TestMethod' => '/phpunit/Event/Value/Test/TestMethod.php', - 'PHPUnit\\Event\\Code\\TestMethodBuilder' => '/phpunit/Event/Value/Test/TestMethodBuilder.php', - 'PHPUnit\\Event\\Code\\Throwable' => '/phpunit/Event/Value/Throwable.php', - 'PHPUnit\\Event\\Code\\ThrowableBuilder' => '/phpunit/Event/Value/ThrowableBuilder.php', - 'PHPUnit\\Event\\CollectingDispatcher' => '/phpunit/Event/Dispatcher/CollectingDispatcher.php', - 'PHPUnit\\Event\\DeferringDispatcher' => '/phpunit/Event/Dispatcher/DeferringDispatcher.php', - 'PHPUnit\\Event\\DirectDispatcher' => '/phpunit/Event/Dispatcher/DirectDispatcher.php', - 'PHPUnit\\Event\\Dispatcher' => '/phpunit/Event/Dispatcher/Dispatcher.php', - 'PHPUnit\\Event\\DispatchingEmitter' => '/phpunit/Event/Emitter/DispatchingEmitter.php', - 'PHPUnit\\Event\\Emitter' => '/phpunit/Event/Emitter/Emitter.php', - 'PHPUnit\\Event\\Event' => '/phpunit/Event/Events/Event.php', - 'PHPUnit\\Event\\EventAlreadyAssignedException' => '/phpunit/Event/Exception/EventAlreadyAssignedException.php', - 'PHPUnit\\Event\\EventCollection' => '/phpunit/Event/Events/EventCollection.php', - 'PHPUnit\\Event\\EventCollectionIterator' => '/phpunit/Event/Events/EventCollectionIterator.php', - 'PHPUnit\\Event\\EventFacadeIsSealedException' => '/phpunit/Event/Exception/EventFacadeIsSealedException.php', - 'PHPUnit\\Event\\Exception' => '/phpunit/Event/Exception/Exception.php', - 'PHPUnit\\Event\\Facade' => '/phpunit/Event/Facade.php', - 'PHPUnit\\Event\\InvalidArgumentException' => '/phpunit/Event/Exception/InvalidArgumentException.php', - 'PHPUnit\\Event\\InvalidEventException' => '/phpunit/Event/Exception/InvalidEventException.php', - 'PHPUnit\\Event\\InvalidSubscriberException' => '/phpunit/Event/Exception/InvalidSubscriberException.php', - 'PHPUnit\\Event\\MapError' => '/phpunit/Event/Exception/MapError.php', - 'PHPUnit\\Event\\NoPreviousThrowableException' => '/phpunit/Event/Exception/NoPreviousThrowableException.php', - 'PHPUnit\\Event\\RuntimeException' => '/phpunit/Event/Exception/RuntimeException.php', - 'PHPUnit\\Event\\Runtime\\OperatingSystem' => '/phpunit/Event/Value/Runtime/OperatingSystem.php', - 'PHPUnit\\Event\\Runtime\\PHP' => '/phpunit/Event/Value/Runtime/PHP.php', - 'PHPUnit\\Event\\Runtime\\PHPUnit' => '/phpunit/Event/Value/Runtime/PHPUnit.php', - 'PHPUnit\\Event\\Runtime\\Runtime' => '/phpunit/Event/Value/Runtime/Runtime.php', - 'PHPUnit\\Event\\SubscribableDispatcher' => '/phpunit/Event/Dispatcher/SubscribableDispatcher.php', - 'PHPUnit\\Event\\Subscriber' => '/phpunit/Event/Subscriber.php', - 'PHPUnit\\Event\\SubscriberTypeAlreadyRegisteredException' => '/phpunit/Event/Exception/SubscriberTypeAlreadyRegisteredException.php', - 'PHPUnit\\Event\\Telemetry\\Duration' => '/phpunit/Event/Value/Telemetry/Duration.php', - 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatus' => '/phpunit/Event/Value/Telemetry/GarbageCollectorStatus.php', - 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/GarbageCollectorStatusProvider.php', - 'PHPUnit\\Event\\Telemetry\\HRTime' => '/phpunit/Event/Value/Telemetry/HRTime.php', - 'PHPUnit\\Event\\Telemetry\\Info' => '/phpunit/Event/Value/Telemetry/Info.php', - 'PHPUnit\\Event\\Telemetry\\MemoryMeter' => '/phpunit/Event/Value/Telemetry/MemoryMeter.php', - 'PHPUnit\\Event\\Telemetry\\MemoryUsage' => '/phpunit/Event/Value/Telemetry/MemoryUsage.php', - 'PHPUnit\\Event\\Telemetry\\Php81GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/Php81GarbageCollectorStatusProvider.php', - 'PHPUnit\\Event\\Telemetry\\Php83GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/Php83GarbageCollectorStatusProvider.php', - 'PHPUnit\\Event\\Telemetry\\Snapshot' => '/phpunit/Event/Value/Telemetry/Snapshot.php', - 'PHPUnit\\Event\\Telemetry\\StopWatch' => '/phpunit/Event/Value/Telemetry/StopWatch.php', - 'PHPUnit\\Event\\Telemetry\\System' => '/phpunit/Event/Value/Telemetry/System.php', - 'PHPUnit\\Event\\Telemetry\\SystemMemoryMeter' => '/phpunit/Event/Value/Telemetry/SystemMemoryMeter.php', - 'PHPUnit\\Event\\Telemetry\\SystemStopWatch' => '/phpunit/Event/Value/Telemetry/SystemStopWatch.php', - 'PHPUnit\\Event\\Telemetry\\SystemStopWatchWithOffset' => '/phpunit/Event/Value/Telemetry/SystemStopWatchWithOffset.php', - 'PHPUnit\\Event\\TestData\\DataFromDataProvider' => '/phpunit/Event/Value/Test/TestData/DataFromDataProvider.php', - 'PHPUnit\\Event\\TestData\\DataFromTestDependency' => '/phpunit/Event/Value/Test/TestData/DataFromTestDependency.php', - 'PHPUnit\\Event\\TestData\\NoDataSetFromDataProviderException' => '/phpunit/Event/Exception/NoDataSetFromDataProviderException.php', - 'PHPUnit\\Event\\TestData\\TestData' => '/phpunit/Event/Value/Test/TestData/TestData.php', - 'PHPUnit\\Event\\TestData\\TestDataCollection' => '/phpunit/Event/Value/Test/TestData/TestDataCollection.php', - 'PHPUnit\\Event\\TestData\\TestDataCollectionIterator' => '/phpunit/Event/Value/Test/TestData/TestDataCollectionIterator.php', - 'PHPUnit\\Event\\TestRunner\\BootstrapFinished' => '/phpunit/Event/Events/TestRunner/BootstrapFinished.php', - 'PHPUnit\\Event\\TestRunner\\BootstrapFinishedSubscriber' => '/phpunit/Event/Events/TestRunner/BootstrapFinishedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ChildProcessFinished' => '/phpunit/Event/Events/TestRunner/ChildProcessFinished.php', - 'PHPUnit\\Event\\TestRunner\\ChildProcessFinishedSubscriber' => '/phpunit/Event/Events/TestRunner/ChildProcessFinishedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ChildProcessStarted' => '/phpunit/Event/Events/TestRunner/ChildProcessStarted.php', - 'PHPUnit\\Event\\TestRunner\\ChildProcessStartedSubscriber' => '/phpunit/Event/Events/TestRunner/ChildProcessStartedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\Configured' => '/phpunit/Event/Events/TestRunner/Configured.php', - 'PHPUnit\\Event\\TestRunner\\ConfiguredSubscriber' => '/phpunit/Event/Events/TestRunner/ConfiguredSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\DeprecationTriggered' => '/phpunit/Event/Events/TestRunner/DeprecationTriggered.php', - 'PHPUnit\\Event\\TestRunner\\DeprecationTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/DeprecationTriggeredSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\EventFacadeSealed' => '/phpunit/Event/Events/TestRunner/EventFacadeSealed.php', - 'PHPUnit\\Event\\TestRunner\\EventFacadeSealedSubscriber' => '/phpunit/Event/Events/TestRunner/EventFacadeSealedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionAborted' => '/phpunit/Event/Events/TestRunner/ExecutionAborted.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionAbortedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionAbortedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionFinished' => '/phpunit/Event/Events/TestRunner/ExecutionFinished.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionFinishedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionFinishedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionStarted' => '/phpunit/Event/Events/TestRunner/ExecutionStarted.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionStartedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionStartedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExtensionBootstrapped' => '/phpunit/Event/Events/TestRunner/ExtensionBootstrapped.php', - 'PHPUnit\\Event\\TestRunner\\ExtensionBootstrappedSubscriber' => '/phpunit/Event/Events/TestRunner/ExtensionBootstrappedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPhar' => '/phpunit/Event/Events/TestRunner/ExtensionLoadedFromPhar.php', - 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPharSubscriber' => '/phpunit/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\Finished' => '/phpunit/Event/Events/TestRunner/Finished.php', - 'PHPUnit\\Event\\TestRunner\\FinishedSubscriber' => '/phpunit/Event/Events/TestRunner/FinishedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabled' => '/phpunit/Event/Events/TestRunner/GarbageCollectionDisabled.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabledSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabled' => '/phpunit/Event/Events/TestRunner/GarbageCollectionEnabled.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabledSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggered' => '/phpunit/Event/Events/TestRunner/GarbageCollectionTriggered.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\Started' => '/phpunit/Event/Events/TestRunner/Started.php', - 'PHPUnit\\Event\\TestRunner\\StartedSubscriber' => '/phpunit/Event/Events/TestRunner/StartedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\WarningTriggered' => '/phpunit/Event/Events/TestRunner/WarningTriggered.php', - 'PHPUnit\\Event\\TestRunner\\WarningTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/WarningTriggeredSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Filtered' => '/phpunit/Event/Events/TestSuite/Filtered.php', - 'PHPUnit\\Event\\TestSuite\\FilteredSubscriber' => '/phpunit/Event/Events/TestSuite/FilteredSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Finished' => '/phpunit/Event/Events/TestSuite/Finished.php', - 'PHPUnit\\Event\\TestSuite\\FinishedSubscriber' => '/phpunit/Event/Events/TestSuite/FinishedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Loaded' => '/phpunit/Event/Events/TestSuite/Loaded.php', - 'PHPUnit\\Event\\TestSuite\\LoadedSubscriber' => '/phpunit/Event/Events/TestSuite/LoadedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Skipped' => '/phpunit/Event/Events/TestSuite/Skipped.php', - 'PHPUnit\\Event\\TestSuite\\SkippedSubscriber' => '/phpunit/Event/Events/TestSuite/SkippedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Sorted' => '/phpunit/Event/Events/TestSuite/Sorted.php', - 'PHPUnit\\Event\\TestSuite\\SortedSubscriber' => '/phpunit/Event/Events/TestSuite/SortedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Started' => '/phpunit/Event/Events/TestSuite/Started.php', - 'PHPUnit\\Event\\TestSuite\\StartedSubscriber' => '/phpunit/Event/Events/TestSuite/StartedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\TestSuite' => '/phpunit/Event/Value/TestSuite/TestSuite.php', - 'PHPUnit\\Event\\TestSuite\\TestSuiteBuilder' => '/phpunit/Event/Value/TestSuite/TestSuiteBuilder.php', - 'PHPUnit\\Event\\TestSuite\\TestSuiteForTestClass' => '/phpunit/Event/Value/TestSuite/TestSuiteForTestClass.php', - 'PHPUnit\\Event\\TestSuite\\TestSuiteForTestMethodWithDataProvider' => '/phpunit/Event/Value/TestSuite/TestSuiteForTestMethodWithDataProvider.php', - 'PHPUnit\\Event\\TestSuite\\TestSuiteWithName' => '/phpunit/Event/Value/TestSuite/TestSuiteWithName.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodCalled' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalled.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodErrored' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodErrored.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodFinished' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinished.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodCalled' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodCalled.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodErrored' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodErrored.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodFinished' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodFinished.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodCalled' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalled.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodErrored' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErrored.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodFinished' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinished.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodCalled' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalled.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodErrored' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodErrored.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodFinished' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodFinished.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\ComparatorRegistered' => '/phpunit/Event/Events/Test/ComparatorRegistered.php', - 'PHPUnit\\Event\\Test\\ComparatorRegisteredSubscriber' => '/phpunit/Event/Events/Test/ComparatorRegisteredSubscriber.php', - 'PHPUnit\\Event\\Test\\ConsideredRisky' => '/phpunit/Event/Events/Test/Issue/ConsideredRisky.php', - 'PHPUnit\\Event\\Test\\ConsideredRiskySubscriber' => '/phpunit/Event/Events/Test/Issue/ConsideredRiskySubscriber.php', - 'PHPUnit\\Event\\Test\\DataProviderMethodCalled' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalled.php', - 'PHPUnit\\Event\\Test\\DataProviderMethodCalledSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\DataProviderMethodFinished' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinished.php', - 'PHPUnit\\Event\\Test\\DataProviderMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\DeprecationTriggered' => '/phpunit/Event/Events/Test/Issue/DeprecationTriggered.php', - 'PHPUnit\\Event\\Test\\DeprecationTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\ErrorTriggered' => '/phpunit/Event/Events/Test/Issue/ErrorTriggered.php', - 'PHPUnit\\Event\\Test\\ErrorTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/ErrorTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\Errored' => '/phpunit/Event/Events/Test/Outcome/Errored.php', - 'PHPUnit\\Event\\Test\\ErroredSubscriber' => '/phpunit/Event/Events/Test/Outcome/ErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\Failed' => '/phpunit/Event/Events/Test/Outcome/Failed.php', - 'PHPUnit\\Event\\Test\\FailedSubscriber' => '/phpunit/Event/Events/Test/Outcome/FailedSubscriber.php', - 'PHPUnit\\Event\\Test\\Finished' => '/phpunit/Event/Events/Test/Lifecycle/Finished.php', - 'PHPUnit\\Event\\Test\\FinishedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/FinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\MarkedIncomplete' => '/phpunit/Event/Events/Test/Outcome/MarkedIncomplete.php', - 'PHPUnit\\Event\\Test\\MarkedIncompleteSubscriber' => '/phpunit/Event/Events/Test/Outcome/MarkedIncompleteSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectForAbstractClassCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectForAbstractClassCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectForIntersectionOfInterfacesCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectForIntersectionOfInterfacesCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectForTraitCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectForTraitCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectFromWsdlCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectFromWsdlCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\NoComparisonFailureException' => '/phpunit/Event/Exception/NoComparisonFailureException.php', - 'PHPUnit\\Event\\Test\\NoticeTriggered' => '/phpunit/Event/Events/Test/Issue/NoticeTriggered.php', - 'PHPUnit\\Event\\Test\\NoticeTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/NoticeTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PartialMockObjectCreated' => '/phpunit/Event/Events/Test/TestDouble/PartialMockObjectCreated.php', - 'PHPUnit\\Event\\Test\\PartialMockObjectCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/PartialMockObjectCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\Passed' => '/phpunit/Event/Events/Test/Outcome/Passed.php', - 'PHPUnit\\Event\\Test\\PassedSubscriber' => '/phpunit/Event/Events/Test/Outcome/PassedSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpDeprecationTriggered' => '/phpunit/Event/Events/Test/Issue/PhpDeprecationTriggered.php', - 'PHPUnit\\Event\\Test\\PhpDeprecationTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpDeprecationTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpNoticeTriggered' => '/phpunit/Event/Events/Test/Issue/PhpNoticeTriggered.php', - 'PHPUnit\\Event\\Test\\PhpNoticeTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpNoticeTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpWarningTriggered' => '/phpunit/Event/Events/Test/Issue/PhpWarningTriggered.php', - 'PHPUnit\\Event\\Test\\PhpWarningTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpWarningTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpunitDeprecationTriggered' => '/phpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggered.php', - 'PHPUnit\\Event\\Test\\PhpunitDeprecationTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpunitErrorTriggered' => '/phpunit/Event/Events/Test/Issue/PhpunitErrorTriggered.php', - 'PHPUnit\\Event\\Test\\PhpunitErrorTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpunitErrorTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpunitWarningTriggered' => '/phpunit/Event/Events/Test/Issue/PhpunitWarningTriggered.php', - 'PHPUnit\\Event\\Test\\PhpunitWarningTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpunitWarningTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PostConditionCalled' => '/phpunit/Event/Events/Test/HookMethod/PostConditionCalled.php', - 'PHPUnit\\Event\\Test\\PostConditionCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PostConditionCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\PostConditionErrored' => '/phpunit/Event/Events/Test/HookMethod/PostConditionErrored.php', - 'PHPUnit\\Event\\Test\\PostConditionErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PostConditionErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\PostConditionFinished' => '/phpunit/Event/Events/Test/HookMethod/PostConditionFinished.php', - 'PHPUnit\\Event\\Test\\PostConditionFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PostConditionFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\PreConditionCalled' => '/phpunit/Event/Events/Test/HookMethod/PreConditionCalled.php', - 'PHPUnit\\Event\\Test\\PreConditionCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\PreConditionErrored' => '/phpunit/Event/Events/Test/HookMethod/PreConditionErrored.php', - 'PHPUnit\\Event\\Test\\PreConditionErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\PreConditionFinished' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php', - 'PHPUnit\\Event\\Test\\PreConditionFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\PreparationFailed' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailed.php', - 'PHPUnit\\Event\\Test\\PreparationFailedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php', - 'PHPUnit\\Event\\Test\\PreparationStarted' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStarted.php', - 'PHPUnit\\Event\\Test\\PreparationStartedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php', - 'PHPUnit\\Event\\Test\\Prepared' => '/phpunit/Event/Events/Test/Lifecycle/Prepared.php', - 'PHPUnit\\Event\\Test\\PreparedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparedSubscriber.php', - 'PHPUnit\\Event\\Test\\PrintedUnexpectedOutput' => '/phpunit/Event/Events/Test/PrintedUnexpectedOutput.php', - 'PHPUnit\\Event\\Test\\PrintedUnexpectedOutputSubscriber' => '/phpunit/Event/Events/Test/PrintedUnexpectedOutputSubscriber.php', - 'PHPUnit\\Event\\Test\\Skipped' => '/phpunit/Event/Events/Test/Outcome/Skipped.php', - 'PHPUnit\\Event\\Test\\SkippedSubscriber' => '/phpunit/Event/Events/Test/Outcome/SkippedSubscriber.php', - 'PHPUnit\\Event\\Test\\TestProxyCreated' => '/phpunit/Event/Events/Test/TestDouble/TestProxyCreated.php', - 'PHPUnit\\Event\\Test\\TestProxyCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/TestProxyCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\TestStubCreated' => '/phpunit/Event/Events/Test/TestDouble/TestStubCreated.php', - 'PHPUnit\\Event\\Test\\TestStubCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/TestStubCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\TestStubForIntersectionOfInterfacesCreated' => '/phpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreated.php', - 'PHPUnit\\Event\\Test\\TestStubForIntersectionOfInterfacesCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\WarningTriggered' => '/phpunit/Event/Events/Test/Issue/WarningTriggered.php', - 'PHPUnit\\Event\\Test\\WarningTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/WarningTriggeredSubscriber.php', - 'PHPUnit\\Event\\Tracer\\Tracer' => '/phpunit/Event/Tracer.php', - 'PHPUnit\\Event\\TypeMap' => '/phpunit/Event/TypeMap.php', - 'PHPUnit\\Event\\UnknownEventException' => '/phpunit/Event/Exception/UnknownEventException.php', - 'PHPUnit\\Event\\UnknownEventTypeException' => '/phpunit/Event/Exception/UnknownEventTypeException.php', - 'PHPUnit\\Event\\UnknownSubscriberException' => '/phpunit/Event/Exception/UnknownSubscriberException.php', - 'PHPUnit\\Event\\UnknownSubscriberTypeException' => '/phpunit/Event/Exception/UnknownSubscriberTypeException.php', - 'PHPUnit\\Exception' => '/phpunit/Exception.php', - 'PHPUnit\\Framework\\ActualValueIsNotAnObjectException' => '/phpunit/Framework/Exception/ObjectEquals/ActualValueIsNotAnObjectException.php', - 'PHPUnit\\Framework\\Assert' => '/phpunit/Framework/Assert.php', - 'PHPUnit\\Framework\\AssertionFailedError' => '/phpunit/Framework/Exception/AssertionFailedError.php', - 'PHPUnit\\Framework\\Attributes\\After' => '/phpunit/Framework/Attributes/After.php', - 'PHPUnit\\Framework\\Attributes\\AfterClass' => '/phpunit/Framework/Attributes/AfterClass.php', - 'PHPUnit\\Framework\\Attributes\\BackupGlobals' => '/phpunit/Framework/Attributes/BackupGlobals.php', - 'PHPUnit\\Framework\\Attributes\\BackupStaticProperties' => '/phpunit/Framework/Attributes/BackupStaticProperties.php', - 'PHPUnit\\Framework\\Attributes\\Before' => '/phpunit/Framework/Attributes/Before.php', - 'PHPUnit\\Framework\\Attributes\\BeforeClass' => '/phpunit/Framework/Attributes/BeforeClass.php', - 'PHPUnit\\Framework\\Attributes\\CoversClass' => '/phpunit/Framework/Attributes/CoversClass.php', - 'PHPUnit\\Framework\\Attributes\\CoversFunction' => '/phpunit/Framework/Attributes/CoversFunction.php', - 'PHPUnit\\Framework\\Attributes\\CoversMethod' => '/phpunit/Framework/Attributes/CoversMethod.php', - 'PHPUnit\\Framework\\Attributes\\CoversNothing' => '/phpunit/Framework/Attributes/CoversNothing.php', - 'PHPUnit\\Framework\\Attributes\\CoversTrait' => '/phpunit/Framework/Attributes/CoversTrait.php', - 'PHPUnit\\Framework\\Attributes\\DataProvider' => '/phpunit/Framework/Attributes/DataProvider.php', - 'PHPUnit\\Framework\\Attributes\\DataProviderExternal' => '/phpunit/Framework/Attributes/DataProviderExternal.php', - 'PHPUnit\\Framework\\Attributes\\Depends' => '/phpunit/Framework/Attributes/Depends.php', - 'PHPUnit\\Framework\\Attributes\\DependsExternal' => '/phpunit/Framework/Attributes/DependsExternal.php', - 'PHPUnit\\Framework\\Attributes\\DependsExternalUsingDeepClone' => '/phpunit/Framework/Attributes/DependsExternalUsingDeepClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsExternalUsingShallowClone' => '/phpunit/Framework/Attributes/DependsExternalUsingShallowClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsOnClass' => '/phpunit/Framework/Attributes/DependsOnClass.php', - 'PHPUnit\\Framework\\Attributes\\DependsOnClassUsingDeepClone' => '/phpunit/Framework/Attributes/DependsOnClassUsingDeepClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsOnClassUsingShallowClone' => '/phpunit/Framework/Attributes/DependsOnClassUsingShallowClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsUsingDeepClone' => '/phpunit/Framework/Attributes/DependsUsingDeepClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsUsingShallowClone' => '/phpunit/Framework/Attributes/DependsUsingShallowClone.php', - 'PHPUnit\\Framework\\Attributes\\DisableReturnValueGenerationForTestDoubles' => '/phpunit/Framework/Attributes/DisableReturnValueGenerationForTestDoubles.php', - 'PHPUnit\\Framework\\Attributes\\DoesNotPerformAssertions' => '/phpunit/Framework/Attributes/DoesNotPerformAssertions.php', - 'PHPUnit\\Framework\\Attributes\\ExcludeGlobalVariableFromBackup' => '/phpunit/Framework/Attributes/ExcludeGlobalVariableFromBackup.php', - 'PHPUnit\\Framework\\Attributes\\ExcludeStaticPropertyFromBackup' => '/phpunit/Framework/Attributes/ExcludeStaticPropertyFromBackup.php', - 'PHPUnit\\Framework\\Attributes\\Group' => '/phpunit/Framework/Attributes/Group.php', - 'PHPUnit\\Framework\\Attributes\\IgnoreDeprecations' => '/phpunit/Framework/Attributes/IgnoreDeprecations.php', - 'PHPUnit\\Framework\\Attributes\\IgnorePhpunitDeprecations' => '/phpunit/Framework/Attributes/IgnorePhpunitDeprecations.php', - 'PHPUnit\\Framework\\Attributes\\Large' => '/phpunit/Framework/Attributes/Large.php', - 'PHPUnit\\Framework\\Attributes\\Medium' => '/phpunit/Framework/Attributes/Medium.php', - 'PHPUnit\\Framework\\Attributes\\PostCondition' => '/phpunit/Framework/Attributes/PostCondition.php', - 'PHPUnit\\Framework\\Attributes\\PreCondition' => '/phpunit/Framework/Attributes/PreCondition.php', - 'PHPUnit\\Framework\\Attributes\\PreserveGlobalState' => '/phpunit/Framework/Attributes/PreserveGlobalState.php', - 'PHPUnit\\Framework\\Attributes\\RequiresFunction' => '/phpunit/Framework/Attributes/RequiresFunction.php', - 'PHPUnit\\Framework\\Attributes\\RequiresMethod' => '/phpunit/Framework/Attributes/RequiresMethod.php', - 'PHPUnit\\Framework\\Attributes\\RequiresOperatingSystem' => '/phpunit/Framework/Attributes/RequiresOperatingSystem.php', - 'PHPUnit\\Framework\\Attributes\\RequiresOperatingSystemFamily' => '/phpunit/Framework/Attributes/RequiresOperatingSystemFamily.php', - 'PHPUnit\\Framework\\Attributes\\RequiresPhp' => '/phpunit/Framework/Attributes/RequiresPhp.php', - 'PHPUnit\\Framework\\Attributes\\RequiresPhpExtension' => '/phpunit/Framework/Attributes/RequiresPhpExtension.php', - 'PHPUnit\\Framework\\Attributes\\RequiresPhpunit' => '/phpunit/Framework/Attributes/RequiresPhpunit.php', - 'PHPUnit\\Framework\\Attributes\\RequiresPhpunitExtension' => '/phpunit/Framework/Attributes/RequiresPhpunitExtension.php', - 'PHPUnit\\Framework\\Attributes\\RequiresSetting' => '/phpunit/Framework/Attributes/RequiresSetting.php', - 'PHPUnit\\Framework\\Attributes\\RunClassInSeparateProcess' => '/phpunit/Framework/Attributes/RunClassInSeparateProcess.php', - 'PHPUnit\\Framework\\Attributes\\RunInSeparateProcess' => '/phpunit/Framework/Attributes/RunInSeparateProcess.php', - 'PHPUnit\\Framework\\Attributes\\RunTestsInSeparateProcesses' => '/phpunit/Framework/Attributes/RunTestsInSeparateProcesses.php', - 'PHPUnit\\Framework\\Attributes\\Small' => '/phpunit/Framework/Attributes/Small.php', - 'PHPUnit\\Framework\\Attributes\\Test' => '/phpunit/Framework/Attributes/Test.php', - 'PHPUnit\\Framework\\Attributes\\TestDox' => '/phpunit/Framework/Attributes/TestDox.php', - 'PHPUnit\\Framework\\Attributes\\TestWith' => '/phpunit/Framework/Attributes/TestWith.php', - 'PHPUnit\\Framework\\Attributes\\TestWithJson' => '/phpunit/Framework/Attributes/TestWithJson.php', - 'PHPUnit\\Framework\\Attributes\\Ticket' => '/phpunit/Framework/Attributes/Ticket.php', - 'PHPUnit\\Framework\\Attributes\\UsesClass' => '/phpunit/Framework/Attributes/UsesClass.php', - 'PHPUnit\\Framework\\Attributes\\UsesFunction' => '/phpunit/Framework/Attributes/UsesFunction.php', - 'PHPUnit\\Framework\\Attributes\\UsesMethod' => '/phpunit/Framework/Attributes/UsesMethod.php', - 'PHPUnit\\Framework\\Attributes\\UsesTrait' => '/phpunit/Framework/Attributes/UsesTrait.php', - 'PHPUnit\\Framework\\Attributes\\WithoutErrorHandler' => '/phpunit/Framework/Attributes/WithoutErrorHandler.php', - 'PHPUnit\\Framework\\CodeCoverageException' => '/phpunit/Framework/Exception/CodeCoverageException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareExactlyOneParameterException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareParameterTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotExistException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotExistException.php', - 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => '/phpunit/Framework/Constraint/Traversable/ArrayHasKey.php', - 'PHPUnit\\Framework\\Constraint\\BinaryOperator' => '/phpunit/Framework/Constraint/Operator/BinaryOperator.php', - 'PHPUnit\\Framework\\Constraint\\Callback' => '/phpunit/Framework/Constraint/Callback.php', - 'PHPUnit\\Framework\\Constraint\\Constraint' => '/phpunit/Framework/Constraint/Constraint.php', - 'PHPUnit\\Framework\\Constraint\\Count' => '/phpunit/Framework/Constraint/Cardinality/Count.php', - 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => '/phpunit/Framework/Constraint/Filesystem/DirectoryExists.php', - 'PHPUnit\\Framework\\Constraint\\Exception' => '/phpunit/Framework/Constraint/Exception/Exception.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => '/phpunit/Framework/Constraint/Exception/ExceptionCode.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessageIsOrContains' => '/phpunit/Framework/Constraint/Exception/ExceptionMessageIsOrContains.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessageMatchesRegularExpression' => '/phpunit/Framework/Constraint/Exception/ExceptionMessageMatchesRegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\FileExists' => '/phpunit/Framework/Constraint/Filesystem/FileExists.php', - 'PHPUnit\\Framework\\Constraint\\GreaterThan' => '/phpunit/Framework/Constraint/Cardinality/GreaterThan.php', - 'PHPUnit\\Framework\\Constraint\\IsAnything' => '/phpunit/Framework/Constraint/IsAnything.php', - 'PHPUnit\\Framework\\Constraint\\IsEmpty' => '/phpunit/Framework/Constraint/Cardinality/IsEmpty.php', - 'PHPUnit\\Framework\\Constraint\\IsEqual' => '/phpunit/Framework/Constraint/Equality/IsEqual.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualCanonicalizing' => '/phpunit/Framework/Constraint/Equality/IsEqualCanonicalizing.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualIgnoringCase' => '/phpunit/Framework/Constraint/Equality/IsEqualIgnoringCase.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualWithDelta' => '/phpunit/Framework/Constraint/Equality/IsEqualWithDelta.php', - 'PHPUnit\\Framework\\Constraint\\IsFalse' => '/phpunit/Framework/Constraint/Boolean/IsFalse.php', - 'PHPUnit\\Framework\\Constraint\\IsFinite' => '/phpunit/Framework/Constraint/Math/IsFinite.php', - 'PHPUnit\\Framework\\Constraint\\IsIdentical' => '/phpunit/Framework/Constraint/IsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\IsInfinite' => '/phpunit/Framework/Constraint/Math/IsInfinite.php', - 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => '/phpunit/Framework/Constraint/Type/IsInstanceOf.php', - 'PHPUnit\\Framework\\Constraint\\IsJson' => '/phpunit/Framework/Constraint/String/IsJson.php', - 'PHPUnit\\Framework\\Constraint\\IsList' => '/phpunit/Framework/Constraint/Traversable/IsList.php', - 'PHPUnit\\Framework\\Constraint\\IsNan' => '/phpunit/Framework/Constraint/Math/IsNan.php', - 'PHPUnit\\Framework\\Constraint\\IsNull' => '/phpunit/Framework/Constraint/Type/IsNull.php', - 'PHPUnit\\Framework\\Constraint\\IsReadable' => '/phpunit/Framework/Constraint/Filesystem/IsReadable.php', - 'PHPUnit\\Framework\\Constraint\\IsTrue' => '/phpunit/Framework/Constraint/Boolean/IsTrue.php', - 'PHPUnit\\Framework\\Constraint\\IsType' => '/phpunit/Framework/Constraint/Type/IsType.php', - 'PHPUnit\\Framework\\Constraint\\IsWritable' => '/phpunit/Framework/Constraint/Filesystem/IsWritable.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatches' => '/phpunit/Framework/Constraint/JsonMatches.php', - 'PHPUnit\\Framework\\Constraint\\LessThan' => '/phpunit/Framework/Constraint/Cardinality/LessThan.php', - 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => '/phpunit/Framework/Constraint/Operator/LogicalAnd.php', - 'PHPUnit\\Framework\\Constraint\\LogicalNot' => '/phpunit/Framework/Constraint/Operator/LogicalNot.php', - 'PHPUnit\\Framework\\Constraint\\LogicalOr' => '/phpunit/Framework/Constraint/Operator/LogicalOr.php', - 'PHPUnit\\Framework\\Constraint\\LogicalXor' => '/phpunit/Framework/Constraint/Operator/LogicalXor.php', - 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => '/phpunit/Framework/Constraint/Object/ObjectEquals.php', - 'PHPUnit\\Framework\\Constraint\\ObjectHasProperty' => '/phpunit/Framework/Constraint/Object/ObjectHasProperty.php', - 'PHPUnit\\Framework\\Constraint\\Operator' => '/phpunit/Framework/Constraint/Operator/Operator.php', - 'PHPUnit\\Framework\\Constraint\\RegularExpression' => '/phpunit/Framework/Constraint/String/RegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\SameSize' => '/phpunit/Framework/Constraint/Cardinality/SameSize.php', - 'PHPUnit\\Framework\\Constraint\\StringContains' => '/phpunit/Framework/Constraint/String/StringContains.php', - 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => '/phpunit/Framework/Constraint/String/StringEndsWith.php', - 'PHPUnit\\Framework\\Constraint\\StringEqualsStringIgnoringLineEndings' => '/phpunit/Framework/Constraint/String/StringEqualsStringIgnoringLineEndings.php', - 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => '/phpunit/Framework/Constraint/String/StringMatchesFormatDescription.php', - 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => '/phpunit/Framework/Constraint/String/StringStartsWith.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContains' => '/phpunit/Framework/Constraint/Traversable/TraversableContains.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => '/phpunit/Framework/Constraint/Traversable/TraversableContainsEqual.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => '/phpunit/Framework/Constraint/Traversable/TraversableContainsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => '/phpunit/Framework/Constraint/Traversable/TraversableContainsOnly.php', - 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => '/phpunit/Framework/Constraint/Operator/UnaryOperator.php', - 'PHPUnit\\Framework\\DataProviderTestSuite' => '/phpunit/Framework/DataProviderTestSuite.php', - 'PHPUnit\\Framework\\EmptyStringException' => '/phpunit/Framework/Exception/EmptyStringException.php', - 'PHPUnit\\Framework\\Exception' => '/phpunit/Framework/Exception/Exception.php', - 'PHPUnit\\Framework\\ExecutionOrderDependency' => '/phpunit/Framework/ExecutionOrderDependency.php', - 'PHPUnit\\Framework\\ExpectationFailedException' => '/phpunit/Framework/Exception/ExpectationFailedException.php', - 'PHPUnit\\Framework\\GeneratorNotSupportedException' => '/phpunit/Framework/Exception/GeneratorNotSupportedException.php', - 'PHPUnit\\Framework\\IncompleteTest' => '/phpunit/Framework/Exception/Incomplete/IncompleteTest.php', - 'PHPUnit\\Framework\\IncompleteTestError' => '/phpunit/Framework/Exception/Incomplete/IncompleteTestError.php', - 'PHPUnit\\Framework\\InvalidArgumentException' => '/phpunit/Framework/Exception/InvalidArgumentException.php', - 'PHPUnit\\Framework\\InvalidCoversTargetException' => '/phpunit/Framework/Exception/InvalidCoversTargetException.php', - 'PHPUnit\\Framework\\InvalidDataProviderException' => '/phpunit/Framework/Exception/InvalidDataProviderException.php', - 'PHPUnit\\Framework\\InvalidDependencyException' => '/phpunit/Framework/Exception/InvalidDependencyException.php', - 'PHPUnit\\Framework\\IsolatedTestRunner' => '/phpunit/Framework/TestRunner/IsolatedTestRunner.php', - 'PHPUnit\\Framework\\IsolatedTestRunnerRegistry' => '/phpunit/Framework/TestRunner/IsolatedTestRunnerRegistry.php', - 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => '/phpunit/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => '/phpunit/Framework/MockObject/Runtime/Builder/Identity.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => '/phpunit/Framework/MockObject/Runtime/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => '/phpunit/Framework/MockObject/Runtime/Builder/InvocationStubber.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => '/phpunit/Framework/MockObject/Runtime/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => '/phpunit/Framework/MockObject/Runtime/Builder/ParametersMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => '/phpunit/Framework/MockObject/Runtime/Builder/Stub.php', - 'PHPUnit\\Framework\\MockObject\\CannotCloneTestDoubleForReadonlyClassException' => '/phpunit/Framework/MockObject/Exception/CannotCloneTestDoubleForReadonlyClassException.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => '/phpunit/Framework/MockObject/ConfigurableMethod.php', - 'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\ErrorCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/ErrorCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\Exception' => '/phpunit/Framework/MockObject/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\GeneratedAsMockObject' => '/phpunit/Framework/MockObject/Runtime/Api/GeneratedAsMockObject.php', - 'PHPUnit\\Framework\\MockObject\\GeneratedAsTestStub' => '/phpunit/Framework/MockObject/Runtime/Api/GeneratedAsTestStub.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\CannotUseAddMethodsException' => '/phpunit/Framework/MockObject/Generator/Exception/CannotUseAddMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsFinalException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsFinalException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\DuplicateMethodException' => '/phpunit/Framework/MockObject/Generator/Exception/DuplicateMethodException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\Exception' => '/phpunit/Framework/MockObject/Generator/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\Generator' => '/phpunit/Framework/MockObject/Generator/Generator.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\HookedProperty' => '/phpunit/Framework/MockObject/Generator/HookedProperty.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\HookedPropertyGenerator' => '/phpunit/Framework/MockObject/Generator/HookedPropertyGenerator.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\InvalidMethodNameException' => '/phpunit/Framework/MockObject/Generator/Exception/InvalidMethodNameException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockClass' => '/phpunit/Framework/MockObject/Generator/MockClass.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockMethod' => '/phpunit/Framework/MockObject/Generator/MockMethod.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockMethodSet' => '/phpunit/Framework/MockObject/Generator/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockTrait' => '/phpunit/Framework/MockObject/Generator/MockTrait.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockType' => '/phpunit/Framework/MockObject/Generator/MockType.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\NameAlreadyInUseException' => '/phpunit/Framework/MockObject/Generator/Exception/NameAlreadyInUseException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\OriginalConstructorInvocationRequiredException' => '/phpunit/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\ReflectionException' => '/phpunit/Framework/MockObject/Generator/Exception/ReflectionException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\RuntimeException' => '/phpunit/Framework/MockObject/Generator/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\SoapExtensionNotAvailableException' => '/phpunit/Framework/MockObject/Generator/Exception/SoapExtensionNotAvailableException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\TemplateLoader' => '/phpunit/Framework/MockObject/Generator/TemplateLoader.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownClassException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownClassException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTraitException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownTraitException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTypeException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownTypeException.php', - 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => '/phpunit/Framework/MockObject/Exception/IncompatibleReturnValueException.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => '/phpunit/Framework/MockObject/Runtime/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => '/phpunit/Framework/MockObject/Runtime/InvocationHandler.php', - 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => '/phpunit/Framework/MockObject/Exception/MatchBuilderNotFoundException.php', - 'PHPUnit\\Framework\\MockObject\\Matcher' => '/phpunit/Framework/MockObject/Runtime/Matcher.php', - 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => '/phpunit/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php', - 'PHPUnit\\Framework\\MockObject\\Method' => '/phpunit/Framework/MockObject/Runtime/Api/Method.php', - 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => '/phpunit/Framework/MockObject/Runtime/MethodNameConstraint.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodNameNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MockBuilder' => '/phpunit/Framework/MockObject/MockBuilder.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObject.php', - 'PHPUnit\\Framework\\MockObject\\MockObjectApi' => '/phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php', - 'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.php', - 'PHPUnit\\Framework\\MockObject\\MutableStubApi' => '/phpunit/Framework/MockObject/Runtime/Api/MutableStubApi.php', - 'PHPUnit\\Framework\\MockObject\\NeverReturningMethodException' => '/phpunit/Framework/MockObject/Exception/NeverReturningMethodException.php', - 'PHPUnit\\Framework\\MockObject\\NoMoreReturnValuesConfiguredException' => '/phpunit/Framework/MockObject/Exception/NoMoreReturnValuesConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => '/phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.php', - 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => '/phpunit/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => '/phpunit/Framework/MockObject/Runtime/Rule/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => '/phpunit/Framework/MockObject/Runtime/Rule/InvocationOrder.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => '/phpunit/Framework/MockObject/Runtime/Rule/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => '/phpunit/Framework/MockObject/Runtime/Rule/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => '/phpunit/Framework/MockObject/Runtime/Rule/ParametersRule.php', - 'PHPUnit\\Framework\\MockObject\\RuntimeException' => '/phpunit/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertyGetHook' => '/phpunit/Framework/MockObject/Runtime/PropertyHook/PropertyGetHook.php', - 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertyHook' => '/phpunit/Framework/MockObject/Runtime/PropertyHook/PropertyHook.php', - 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertySetHook' => '/phpunit/Framework/MockObject/Runtime/PropertyHook/PropertySetHook.php', - 'PHPUnit\\Framework\\MockObject\\Stub' => '/phpunit/Framework/MockObject/Runtime/Interface/Stub.php', - 'PHPUnit\\Framework\\MockObject\\StubApi' => '/phpunit/Framework/MockObject/Runtime/Api/StubApi.php', - 'PHPUnit\\Framework\\MockObject\\StubInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/StubInternal.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => '/phpunit/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => '/phpunit/Framework/MockObject/Runtime/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnArgument.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnCallback.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnReference.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnSelf.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => '/phpunit/Framework/MockObject/Runtime/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\TestDoubleState' => '/phpunit/Framework/MockObject/Runtime/Api/TestDoubleState.php', - 'PHPUnit\\Framework\\NativeType' => '/phpunit/Framework/NativeType.php', - 'PHPUnit\\Framework\\NoChildTestSuiteException' => '/phpunit/Framework/Exception/NoChildTestSuiteException.php', - 'PHPUnit\\Framework\\PhptAssertionFailedError' => '/phpunit/Framework/Exception/PhptAssertionFailedError.php', - 'PHPUnit\\Framework\\ProcessIsolationException' => '/phpunit/Framework/Exception/ProcessIsolationException.php', - 'PHPUnit\\Framework\\Reorderable' => '/phpunit/Framework/Reorderable.php', - 'PHPUnit\\Framework\\SelfDescribing' => '/phpunit/Framework/SelfDescribing.php', - 'PHPUnit\\Framework\\SeparateProcessTestRunner' => '/phpunit/Framework/TestRunner/SeparateProcessTestRunner.php', - 'PHPUnit\\Framework\\SkippedTest' => '/phpunit/Framework/Exception/Skipped/SkippedTest.php', - 'PHPUnit\\Framework\\SkippedTestSuiteError' => '/phpunit/Framework/Exception/Skipped/SkippedTestSuiteError.php', - 'PHPUnit\\Framework\\SkippedWithMessageException' => '/phpunit/Framework/Exception/Skipped/SkippedWithMessageException.php', - 'PHPUnit\\Framework\\Test' => '/phpunit/Framework/Test.php', - 'PHPUnit\\Framework\\TestBuilder' => '/phpunit/Framework/TestBuilder.php', - 'PHPUnit\\Framework\\TestCase' => '/phpunit/Framework/TestCase.php', - 'PHPUnit\\Framework\\TestRunner' => '/phpunit/Framework/TestRunner/TestRunner.php', - 'PHPUnit\\Framework\\TestSize\\Known' => '/phpunit/Framework/TestSize/Known.php', - 'PHPUnit\\Framework\\TestSize\\Large' => '/phpunit/Framework/TestSize/Large.php', - 'PHPUnit\\Framework\\TestSize\\Medium' => '/phpunit/Framework/TestSize/Medium.php', - 'PHPUnit\\Framework\\TestSize\\Small' => '/phpunit/Framework/TestSize/Small.php', - 'PHPUnit\\Framework\\TestSize\\TestSize' => '/phpunit/Framework/TestSize/TestSize.php', - 'PHPUnit\\Framework\\TestSize\\Unknown' => '/phpunit/Framework/TestSize/Unknown.php', - 'PHPUnit\\Framework\\TestStatus\\Deprecation' => '/phpunit/Framework/TestStatus/Deprecation.php', - 'PHPUnit\\Framework\\TestStatus\\Error' => '/phpunit/Framework/TestStatus/Error.php', - 'PHPUnit\\Framework\\TestStatus\\Failure' => '/phpunit/Framework/TestStatus/Failure.php', - 'PHPUnit\\Framework\\TestStatus\\Incomplete' => '/phpunit/Framework/TestStatus/Incomplete.php', - 'PHPUnit\\Framework\\TestStatus\\Known' => '/phpunit/Framework/TestStatus/Known.php', - 'PHPUnit\\Framework\\TestStatus\\Notice' => '/phpunit/Framework/TestStatus/Notice.php', - 'PHPUnit\\Framework\\TestStatus\\Risky' => '/phpunit/Framework/TestStatus/Risky.php', - 'PHPUnit\\Framework\\TestStatus\\Skipped' => '/phpunit/Framework/TestStatus/Skipped.php', - 'PHPUnit\\Framework\\TestStatus\\Success' => '/phpunit/Framework/TestStatus/Success.php', - 'PHPUnit\\Framework\\TestStatus\\TestStatus' => '/phpunit/Framework/TestStatus/TestStatus.php', - 'PHPUnit\\Framework\\TestStatus\\Unknown' => '/phpunit/Framework/TestStatus/Unknown.php', - 'PHPUnit\\Framework\\TestStatus\\Warning' => '/phpunit/Framework/TestStatus/Warning.php', - 'PHPUnit\\Framework\\TestSuite' => '/phpunit/Framework/TestSuite.php', - 'PHPUnit\\Framework\\TestSuiteIterator' => '/phpunit/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnknownClassOrInterfaceException' => '/phpunit/Framework/Exception/UnknownClassOrInterfaceException.php', - 'PHPUnit\\Framework\\UnknownTypeException' => '/phpunit/Framework/Exception/UnknownTypeException.php', - 'PHPUnit\\Logging\\EventLogger' => '/phpunit/Logging/EventLogger.php', - 'PHPUnit\\Logging\\JUnit\\JunitXmlLogger' => '/phpunit/Logging/JUnit/JunitXmlLogger.php', - 'PHPUnit\\Logging\\JUnit\\Subscriber' => '/phpunit/Logging/JUnit/Subscriber/Subscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestErroredSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestFailedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestPreparationFailedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparationFailedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestPreparationStartedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparationStartedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestPreparedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestPrintedUnexpectedOutputSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPrintedUnexpectedOutputSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestRunnerExecutionFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestSkippedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestSuiteFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestSuiteFinishedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestSuiteStartedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestSuiteStartedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\Subscriber' => '/phpunit/Logging/TeamCity/Subscriber/Subscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TeamCityLogger' => '/phpunit/Logging/TeamCity/TeamCityLogger.php', - 'PHPUnit\\Logging\\TeamCity\\TestConsideredRiskySubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestErroredSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestFailedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestFinishedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestPreparedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestRunnerExecutionFinishedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestRunnerExecutionFinishedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSkippedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSuiteBeforeFirstTestMethodErroredSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSuiteBeforeFirstTestMethodErroredSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSuiteFinishedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSuiteFinishedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSuiteSkippedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSuiteSkippedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSuiteStartedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSuiteStartedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\HtmlRenderer' => '/phpunit/Logging/TestDox/HtmlRenderer.php', - 'PHPUnit\\Logging\\TestDox\\NamePrettifier' => '/phpunit/Logging/TestDox/NamePrettifier.php', - 'PHPUnit\\Logging\\TestDox\\PlainTextRenderer' => '/phpunit/Logging/TestDox/PlainTextRenderer.php', - 'PHPUnit\\Logging\\TestDox\\Subscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/Subscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestConsideredRiskySubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestErroredSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestFailedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestFinishedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestPassedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestPassedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestPreparedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestResult' => '/phpunit/Logging/TestDox/TestResult/TestResult.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollection' => '/phpunit/Logging/TestDox/TestResult/TestResultCollection.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollectionIterator' => '/phpunit/Logging/TestDox/TestResult/TestResultCollectionIterator.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollector' => '/phpunit/Logging/TestDox/TestResult/TestResultCollector.php', - 'PHPUnit\\Logging\\TestDox\\TestSkippedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredNoticeSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitErrorSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredWarningSubscriber.php', - 'PHPUnit\\Metadata\\After' => '/phpunit/Metadata/After.php', - 'PHPUnit\\Metadata\\AfterClass' => '/phpunit/Metadata/AfterClass.php', - 'PHPUnit\\Metadata\\Annotation\\Parser\\DocBlock' => '/phpunit/Metadata/Parser/Annotation/DocBlock.php', - 'PHPUnit\\Metadata\\Annotation\\Parser\\Registry' => '/phpunit/Metadata/Parser/Annotation/Registry.php', - 'PHPUnit\\Metadata\\AnnotationsAreNotSupportedForInternalClassesException' => '/phpunit/Metadata/Exception/AnnotationsAreNotSupportedForInternalClassesException.php', - 'PHPUnit\\Metadata\\Api\\CodeCoverage' => '/phpunit/Metadata/Api/CodeCoverage.php', - 'PHPUnit\\Metadata\\Api\\DataProvider' => '/phpunit/Metadata/Api/DataProvider.php', - 'PHPUnit\\Metadata\\Api\\Dependencies' => '/phpunit/Metadata/Api/Dependencies.php', - 'PHPUnit\\Metadata\\Api\\Groups' => '/phpunit/Metadata/Api/Groups.php', - 'PHPUnit\\Metadata\\Api\\HookMethods' => '/phpunit/Metadata/Api/HookMethods.php', - 'PHPUnit\\Metadata\\Api\\Requirements' => '/phpunit/Metadata/Api/Requirements.php', - 'PHPUnit\\Metadata\\BackupGlobals' => '/phpunit/Metadata/BackupGlobals.php', - 'PHPUnit\\Metadata\\BackupStaticProperties' => '/phpunit/Metadata/BackupStaticProperties.php', - 'PHPUnit\\Metadata\\Before' => '/phpunit/Metadata/Before.php', - 'PHPUnit\\Metadata\\BeforeClass' => '/phpunit/Metadata/BeforeClass.php', - 'PHPUnit\\Metadata\\Covers' => '/phpunit/Metadata/Covers.php', - 'PHPUnit\\Metadata\\CoversClass' => '/phpunit/Metadata/CoversClass.php', - 'PHPUnit\\Metadata\\CoversDefaultClass' => '/phpunit/Metadata/CoversDefaultClass.php', - 'PHPUnit\\Metadata\\CoversFunction' => '/phpunit/Metadata/CoversFunction.php', - 'PHPUnit\\Metadata\\CoversMethod' => '/phpunit/Metadata/CoversMethod.php', - 'PHPUnit\\Metadata\\CoversNothing' => '/phpunit/Metadata/CoversNothing.php', - 'PHPUnit\\Metadata\\CoversTrait' => '/phpunit/Metadata/CoversTrait.php', - 'PHPUnit\\Metadata\\DataProvider' => '/phpunit/Metadata/DataProvider.php', - 'PHPUnit\\Metadata\\DependsOnClass' => '/phpunit/Metadata/DependsOnClass.php', - 'PHPUnit\\Metadata\\DependsOnMethod' => '/phpunit/Metadata/DependsOnMethod.php', - 'PHPUnit\\Metadata\\DisableReturnValueGenerationForTestDoubles' => '/phpunit/Metadata/DisableReturnValueGenerationForTestDoubles.php', - 'PHPUnit\\Metadata\\DoesNotPerformAssertions' => '/phpunit/Metadata/DoesNotPerformAssertions.php', - 'PHPUnit\\Metadata\\Exception' => '/phpunit/Metadata/Exception/Exception.php', - 'PHPUnit\\Metadata\\ExcludeGlobalVariableFromBackup' => '/phpunit/Metadata/ExcludeGlobalVariableFromBackup.php', - 'PHPUnit\\Metadata\\ExcludeStaticPropertyFromBackup' => '/phpunit/Metadata/ExcludeStaticPropertyFromBackup.php', - 'PHPUnit\\Metadata\\Group' => '/phpunit/Metadata/Group.php', - 'PHPUnit\\Metadata\\IgnoreDeprecations' => '/phpunit/Metadata/IgnoreDeprecations.php', - 'PHPUnit\\Metadata\\IgnorePhpunitDeprecations' => '/phpunit/Metadata/IgnorePhpunitDeprecations.php', - 'PHPUnit\\Metadata\\InvalidVersionRequirementException' => '/phpunit/Metadata/Exception/InvalidVersionRequirementException.php', - 'PHPUnit\\Metadata\\Metadata' => '/phpunit/Metadata/Metadata.php', - 'PHPUnit\\Metadata\\MetadataCollection' => '/phpunit/Metadata/MetadataCollection.php', - 'PHPUnit\\Metadata\\MetadataCollectionIterator' => '/phpunit/Metadata/MetadataCollectionIterator.php', - 'PHPUnit\\Metadata\\NoVersionRequirementException' => '/phpunit/Metadata/Exception/NoVersionRequirementException.php', - 'PHPUnit\\Metadata\\Parser\\AnnotationParser' => '/phpunit/Metadata/Parser/AnnotationParser.php', - 'PHPUnit\\Metadata\\Parser\\AttributeParser' => '/phpunit/Metadata/Parser/AttributeParser.php', - 'PHPUnit\\Metadata\\Parser\\CachingParser' => '/phpunit/Metadata/Parser/CachingParser.php', - 'PHPUnit\\Metadata\\Parser\\Parser' => '/phpunit/Metadata/Parser/Parser.php', - 'PHPUnit\\Metadata\\Parser\\ParserChain' => '/phpunit/Metadata/Parser/ParserChain.php', - 'PHPUnit\\Metadata\\Parser\\Registry' => '/phpunit/Metadata/Parser/Registry.php', - 'PHPUnit\\Metadata\\PostCondition' => '/phpunit/Metadata/PostCondition.php', - 'PHPUnit\\Metadata\\PreCondition' => '/phpunit/Metadata/PreCondition.php', - 'PHPUnit\\Metadata\\PreserveGlobalState' => '/phpunit/Metadata/PreserveGlobalState.php', - 'PHPUnit\\Metadata\\ReflectionException' => '/phpunit/Metadata/Exception/ReflectionException.php', - 'PHPUnit\\Metadata\\RequiresFunction' => '/phpunit/Metadata/RequiresFunction.php', - 'PHPUnit\\Metadata\\RequiresMethod' => '/phpunit/Metadata/RequiresMethod.php', - 'PHPUnit\\Metadata\\RequiresOperatingSystem' => '/phpunit/Metadata/RequiresOperatingSystem.php', - 'PHPUnit\\Metadata\\RequiresOperatingSystemFamily' => '/phpunit/Metadata/RequiresOperatingSystemFamily.php', - 'PHPUnit\\Metadata\\RequiresPhp' => '/phpunit/Metadata/RequiresPhp.php', - 'PHPUnit\\Metadata\\RequiresPhpExtension' => '/phpunit/Metadata/RequiresPhpExtension.php', - 'PHPUnit\\Metadata\\RequiresPhpunit' => '/phpunit/Metadata/RequiresPhpunit.php', - 'PHPUnit\\Metadata\\RequiresPhpunitExtension' => '/phpunit/Metadata/RequiresPhpunitExtension.php', - 'PHPUnit\\Metadata\\RequiresSetting' => '/phpunit/Metadata/RequiresSetting.php', - 'PHPUnit\\Metadata\\RunClassInSeparateProcess' => '/phpunit/Metadata/RunClassInSeparateProcess.php', - 'PHPUnit\\Metadata\\RunInSeparateProcess' => '/phpunit/Metadata/RunInSeparateProcess.php', - 'PHPUnit\\Metadata\\RunTestsInSeparateProcesses' => '/phpunit/Metadata/RunTestsInSeparateProcesses.php', - 'PHPUnit\\Metadata\\Test' => '/phpunit/Metadata/Test.php', - 'PHPUnit\\Metadata\\TestDox' => '/phpunit/Metadata/TestDox.php', - 'PHPUnit\\Metadata\\TestWith' => '/phpunit/Metadata/TestWith.php', - 'PHPUnit\\Metadata\\Uses' => '/phpunit/Metadata/Uses.php', - 'PHPUnit\\Metadata\\UsesClass' => '/phpunit/Metadata/UsesClass.php', - 'PHPUnit\\Metadata\\UsesDefaultClass' => '/phpunit/Metadata/UsesDefaultClass.php', - 'PHPUnit\\Metadata\\UsesFunction' => '/phpunit/Metadata/UsesFunction.php', - 'PHPUnit\\Metadata\\UsesMethod' => '/phpunit/Metadata/UsesMethod.php', - 'PHPUnit\\Metadata\\UsesTrait' => '/phpunit/Metadata/UsesTrait.php', - 'PHPUnit\\Metadata\\Version\\ComparisonRequirement' => '/phpunit/Metadata/Version/ComparisonRequirement.php', - 'PHPUnit\\Metadata\\Version\\ConstraintRequirement' => '/phpunit/Metadata/Version/ConstraintRequirement.php', - 'PHPUnit\\Metadata\\Version\\Requirement' => '/phpunit/Metadata/Version/Requirement.php', - 'PHPUnit\\Metadata\\WithoutErrorHandler' => '/phpunit/Metadata/WithoutErrorHandler.php', - 'PHPUnit\\Runner\\Baseline\\Baseline' => '/phpunit/Runner/Baseline/Baseline.php', - 'PHPUnit\\Runner\\Baseline\\CannotLoadBaselineException' => '/phpunit/Runner/Baseline/Exception/CannotLoadBaselineException.php', - 'PHPUnit\\Runner\\Baseline\\FileDoesNotHaveLineException' => '/phpunit/Runner/Baseline/Exception/FileDoesNotHaveLineException.php', - 'PHPUnit\\Runner\\Baseline\\Generator' => '/phpunit/Runner/Baseline/Generator.php', - 'PHPUnit\\Runner\\Baseline\\Issue' => '/phpunit/Runner/Baseline/Issue.php', - 'PHPUnit\\Runner\\Baseline\\Reader' => '/phpunit/Runner/Baseline/Reader.php', - 'PHPUnit\\Runner\\Baseline\\RelativePathCalculator' => '/phpunit/Runner/Baseline/RelativePathCalculator.php', - 'PHPUnit\\Runner\\Baseline\\Subscriber' => '/phpunit/Runner/Baseline/Subscriber/Subscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\Writer' => '/phpunit/Runner/Baseline/Writer.php', - 'PHPUnit\\Runner\\ClassCannotBeFoundException' => '/phpunit/Runner/Exception/ClassCannotBeFoundException.php', - 'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => '/phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.php', - 'PHPUnit\\Runner\\ClassIsAbstractException' => '/phpunit/Runner/Exception/ClassIsAbstractException.php', - 'PHPUnit\\Runner\\CodeCoverage' => '/phpunit/Runner/CodeCoverage.php', - 'PHPUnit\\Runner\\DeprecationCollector\\Collector' => '/phpunit/Runner/DeprecationCollector/Collector.php', - 'PHPUnit\\Runner\\DeprecationCollector\\Facade' => '/phpunit/Runner/DeprecationCollector/Facade.php', - 'PHPUnit\\Runner\\DeprecationCollector\\Subscriber' => '/phpunit/Runner/DeprecationCollector/Subscriber/Subscriber.php', - 'PHPUnit\\Runner\\DeprecationCollector\\TestPreparedSubscriber' => '/phpunit/Runner/DeprecationCollector/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Runner\\DeprecationCollector\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/DeprecationCollector/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\Runner\\DirectoryDoesNotExistException' => '/phpunit/Runner/Exception/DirectoryDoesNotExistException.php', - 'PHPUnit\\Runner\\ErrorException' => '/phpunit/Runner/Exception/ErrorException.php', - 'PHPUnit\\Runner\\ErrorHandler' => '/phpunit/Runner/ErrorHandler.php', - 'PHPUnit\\Runner\\Exception' => '/phpunit/Runner/Exception/Exception.php', - 'PHPUnit\\Runner\\Extension\\Extension' => '/phpunit/Runner/Extension/Extension.php', - 'PHPUnit\\Runner\\Extension\\ExtensionBootstrapper' => '/phpunit/Runner/Extension/ExtensionBootstrapper.php', - 'PHPUnit\\Runner\\Extension\\Facade' => '/phpunit/Runner/Extension/Facade.php', - 'PHPUnit\\Runner\\Extension\\ParameterCollection' => '/phpunit/Runner/Extension/ParameterCollection.php', - 'PHPUnit\\Runner\\Extension\\PharLoader' => '/phpunit/Runner/Extension/PharLoader.php', - 'PHPUnit\\Runner\\FileDoesNotExistException' => '/phpunit/Runner/Exception/FileDoesNotExistException.php', - 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => '/phpunit/Runner/Filter/ExcludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\ExcludeNameFilterIterator' => '/phpunit/Runner/Filter/ExcludeNameFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\Factory' => '/phpunit/Runner/Filter/Factory.php', - 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => '/phpunit/Runner/Filter/GroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => '/phpunit/Runner/Filter/IncludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\IncludeNameFilterIterator' => '/phpunit/Runner/Filter/IncludeNameFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => '/phpunit/Runner/Filter/NameFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\TestIdFilterIterator' => '/phpunit/Runner/Filter/TestIdFilterIterator.php', - 'PHPUnit\\Runner\\GarbageCollection\\ExecutionFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php', - 'PHPUnit\\Runner\\GarbageCollection\\ExecutionStartedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php', - 'PHPUnit\\Runner\\GarbageCollection\\GarbageCollectionHandler' => '/phpunit/Runner/GarbageCollection/GarbageCollectionHandler.php', - 'PHPUnit\\Runner\\GarbageCollection\\Subscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/Subscriber.php', - 'PHPUnit\\Runner\\GarbageCollection\\TestFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Runner\\HookMethod' => '/phpunit/Runner/HookMethod/HookMethod.php', - 'PHPUnit\\Runner\\HookMethodCollection' => '/phpunit/Runner/HookMethod/HookMethodCollection.php', - 'PHPUnit\\Runner\\InvalidOrderException' => '/phpunit/Runner/Exception/InvalidOrderException.php', - 'PHPUnit\\Runner\\InvalidPhptFileException' => '/phpunit/Runner/Exception/InvalidPhptFileException.php', - 'PHPUnit\\Runner\\ParameterDoesNotExistException' => '/phpunit/Runner/Exception/ParameterDoesNotExistException.php', - 'PHPUnit\\Runner\\PhptExternalFileCannotBeLoadedException' => '/phpunit/Runner/Exception/PhptExternalFileCannotBeLoadedException.php', - 'PHPUnit\\Runner\\PhptTestCase' => '/phpunit/Runner/PHPT/PhptTestCase.php', - 'PHPUnit\\Runner\\ResultCache\\DefaultResultCache' => '/phpunit/Runner/ResultCache/DefaultResultCache.php', - 'PHPUnit\\Runner\\ResultCache\\NullResultCache' => '/phpunit/Runner/ResultCache/NullResultCache.php', - 'PHPUnit\\Runner\\ResultCache\\ResultCache' => '/phpunit/Runner/ResultCache/ResultCache.php', - 'PHPUnit\\Runner\\ResultCache\\ResultCacheHandler' => '/phpunit/Runner/ResultCache/ResultCacheHandler.php', - 'PHPUnit\\Runner\\ResultCache\\Subscriber' => '/phpunit/Runner/ResultCache/Subscriber/Subscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestConsideredRiskySubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestErroredSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestFailedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestFinishedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestMarkedIncompleteSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestPreparedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestSkippedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestSuiteFinishedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestSuiteFinishedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestSuiteStartedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestSuiteStartedSubscriber.php', - 'PHPUnit\\Runner\\TestSuiteLoader' => '/phpunit/Runner/TestSuiteLoader.php', - 'PHPUnit\\Runner\\TestSuiteSorter' => '/phpunit/Runner/TestSuiteSorter.php', - 'PHPUnit\\Runner\\UnsupportedPhptSectionException' => '/phpunit/Runner/Exception/UnsupportedPhptSectionException.php', - 'PHPUnit\\Runner\\Version' => '/phpunit/Runner/Version.php', - 'PHPUnit\\TestRunner\\IssueFilter' => '/phpunit/Runner/IssueFilter.php', - 'PHPUnit\\TestRunner\\TestResult\\AfterTestClassMethodErroredSubscriber' => '/phpunit/Runner/TestResult/Subscriber/AfterTestClassMethodErroredSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\BeforeTestClassMethodErroredSubscriber' => '/phpunit/Runner/TestResult/Subscriber/BeforeTestClassMethodErroredSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\Collector' => '/phpunit/Runner/TestResult/Collector.php', - 'PHPUnit\\TestRunner\\TestResult\\ExecutionStartedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\Facade' => '/phpunit/Runner/TestResult/Facade.php', - 'PHPUnit\\TestRunner\\TestResult\\Issues\\Issue' => '/phpunit/Runner/TestResult/Issue.php', - 'PHPUnit\\TestRunner\\TestResult\\PassedTests' => '/phpunit/Runner/TestResult/PassedTests.php', - 'PHPUnit\\TestRunner\\TestResult\\Subscriber' => '/phpunit/Runner/TestResult/Subscriber/Subscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestConsideredRiskySubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestErroredSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestFailedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestFinishedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestMarkedIncompleteSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestPreparedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestResult' => '/phpunit/Runner/TestResult/TestResult.php', - 'PHPUnit\\TestRunner\\TestResult\\TestRunnerTriggeredDeprecationSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredDeprecationSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestRunnerTriggeredWarningSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredWarningSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestSkippedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestSuiteFinishedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestSuiteFinishedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestSuiteSkippedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestSuiteSkippedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestSuiteStartedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestSuiteStartedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredErrorSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredErrorSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredNoticeSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitDeprecationSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitErrorSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredWarningSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.php', - 'PHPUnit\\TextUI\\Application' => '/phpunit/TextUI/Application.php', - 'PHPUnit\\TextUI\\CannotOpenSocketException' => '/phpunit/TextUI/Exception/CannotOpenSocketException.php', - 'PHPUnit\\TextUI\\CliArguments\\Builder' => '/phpunit/TextUI/Configuration/Cli/Builder.php', - 'PHPUnit\\TextUI\\CliArguments\\Configuration' => '/phpunit/TextUI/Configuration/Cli/Configuration.php', - 'PHPUnit\\TextUI\\CliArguments\\Exception' => '/phpunit/TextUI/Configuration/Cli/Exception.php', - 'PHPUnit\\TextUI\\CliArguments\\XmlConfigurationFileFinder' => '/phpunit/TextUI/Configuration/Cli/XmlConfigurationFileFinder.php', - 'PHPUnit\\TextUI\\Command\\AtLeastVersionCommand' => '/phpunit/TextUI/Command/Commands/AtLeastVersionCommand.php', - 'PHPUnit\\TextUI\\Command\\Command' => '/phpunit/TextUI/Command/Command.php', - 'PHPUnit\\TextUI\\Command\\GenerateConfigurationCommand' => '/phpunit/TextUI/Command/Commands/GenerateConfigurationCommand.php', - 'PHPUnit\\TextUI\\Command\\ListGroupsCommand' => '/phpunit/TextUI/Command/Commands/ListGroupsCommand.php', - 'PHPUnit\\TextUI\\Command\\ListTestFilesCommand' => '/phpunit/TextUI/Command/Commands/ListTestFilesCommand.php', - 'PHPUnit\\TextUI\\Command\\ListTestSuitesCommand' => '/phpunit/TextUI/Command/Commands/ListTestSuitesCommand.php', - 'PHPUnit\\TextUI\\Command\\ListTestsAsTextCommand' => '/phpunit/TextUI/Command/Commands/ListTestsAsTextCommand.php', - 'PHPUnit\\TextUI\\Command\\ListTestsAsXmlCommand' => '/phpunit/TextUI/Command/Commands/ListTestsAsXmlCommand.php', - 'PHPUnit\\TextUI\\Command\\MigrateConfigurationCommand' => '/phpunit/TextUI/Command/Commands/MigrateConfigurationCommand.php', - 'PHPUnit\\TextUI\\Command\\Result' => '/phpunit/TextUI/Command/Result.php', - 'PHPUnit\\TextUI\\Command\\ShowHelpCommand' => '/phpunit/TextUI/Command/Commands/ShowHelpCommand.php', - 'PHPUnit\\TextUI\\Command\\ShowVersionCommand' => '/phpunit/TextUI/Command/Commands/ShowVersionCommand.php', - 'PHPUnit\\TextUI\\Command\\VersionCheckCommand' => '/phpunit/TextUI/Command/Commands/VersionCheckCommand.php', - 'PHPUnit\\TextUI\\Command\\WarmCodeCoverageCacheCommand' => '/phpunit/TextUI/Command/Commands/WarmCodeCoverageCacheCommand.php', - 'PHPUnit\\TextUI\\Configuration\\Builder' => '/phpunit/TextUI/Configuration/Builder.php', - 'PHPUnit\\TextUI\\Configuration\\CodeCoverageFilterRegistry' => '/phpunit/TextUI/Configuration/CodeCoverageFilterRegistry.php', - 'PHPUnit\\TextUI\\Configuration\\CodeCoverageReportNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/CodeCoverageReportNotConfiguredException.php', - 'PHPUnit\\TextUI\\Configuration\\Configuration' => '/phpunit/TextUI/Configuration/Configuration.php', - 'PHPUnit\\TextUI\\Configuration\\ConfigurationCannotBeBuiltException' => '/phpunit/TextUI/Configuration/Exception/ConfigurationCannotBeBuiltException.php', - 'PHPUnit\\TextUI\\Configuration\\Constant' => '/phpunit/TextUI/Configuration/Value/Constant.php', - 'PHPUnit\\TextUI\\Configuration\\ConstantCollection' => '/phpunit/TextUI/Configuration/Value/ConstantCollection.php', - 'PHPUnit\\TextUI\\Configuration\\ConstantCollectionIterator' => '/phpunit/TextUI/Configuration/Value/ConstantCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\Directory' => '/phpunit/TextUI/Configuration/Value/Directory.php', - 'PHPUnit\\TextUI\\Configuration\\DirectoryCollection' => '/phpunit/TextUI/Configuration/Value/DirectoryCollection.php', - 'PHPUnit\\TextUI\\Configuration\\DirectoryCollectionIterator' => '/phpunit/TextUI/Configuration/Value/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\Exception' => '/phpunit/TextUI/Configuration/Exception/Exception.php', - 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrap' => '/phpunit/TextUI/Configuration/Value/ExtensionBootstrap.php', - 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrapCollection' => '/phpunit/TextUI/Configuration/Value/ExtensionBootstrapCollection.php', - 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrapCollectionIterator' => '/phpunit/TextUI/Configuration/Value/ExtensionBootstrapCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\File' => '/phpunit/TextUI/Configuration/Value/File.php', - 'PHPUnit\\TextUI\\Configuration\\FileCollection' => '/phpunit/TextUI/Configuration/Value/FileCollection.php', - 'PHPUnit\\TextUI\\Configuration\\FileCollectionIterator' => '/phpunit/TextUI/Configuration/Value/FileCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\FilterDirectory' => '/phpunit/TextUI/Configuration/Value/FilterDirectory.php', - 'PHPUnit\\TextUI\\Configuration\\FilterDirectoryCollection' => '/phpunit/TextUI/Configuration/Value/FilterDirectoryCollection.php', - 'PHPUnit\\TextUI\\Configuration\\FilterDirectoryCollectionIterator' => '/phpunit/TextUI/Configuration/Value/FilterDirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\FilterNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/FilterNotConfiguredException.php', - 'PHPUnit\\TextUI\\Configuration\\Group' => '/phpunit/TextUI/Configuration/Value/Group.php', - 'PHPUnit\\TextUI\\Configuration\\GroupCollection' => '/phpunit/TextUI/Configuration/Value/GroupCollection.php', - 'PHPUnit\\TextUI\\Configuration\\GroupCollectionIterator' => '/phpunit/TextUI/Configuration/Value/GroupCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\IniSetting' => '/phpunit/TextUI/Configuration/Value/IniSetting.php', - 'PHPUnit\\TextUI\\Configuration\\IniSettingCollection' => '/phpunit/TextUI/Configuration/Value/IniSettingCollection.php', - 'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => '/phpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\LoggingNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.php', - 'PHPUnit\\TextUI\\Configuration\\Merger' => '/phpunit/TextUI/Configuration/Merger.php', - 'PHPUnit\\TextUI\\Configuration\\NoBaselineException' => '/phpunit/TextUI/Configuration/Exception/NoBaselineException.php', - 'PHPUnit\\TextUI\\Configuration\\NoBootstrapException' => '/phpunit/TextUI/Configuration/Exception/NoBootstrapException.php', - 'PHPUnit\\TextUI\\Configuration\\NoCacheDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.php', - 'PHPUnit\\TextUI\\Configuration\\NoConfigurationFileException' => '/phpunit/TextUI/Configuration/Exception/NoConfigurationFileException.php', - 'PHPUnit\\TextUI\\Configuration\\NoCoverageCacheDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoCoverageCacheDirectoryException.php', - 'PHPUnit\\TextUI\\Configuration\\NoCustomCssFileException' => '/phpunit/TextUI/Configuration/Exception/NoCustomCssFileException.php', - 'PHPUnit\\TextUI\\Configuration\\NoDefaultTestSuiteException' => '/phpunit/TextUI/Configuration/Exception/NoDefaultTestSuiteException.php', - 'PHPUnit\\TextUI\\Configuration\\NoPharExtensionDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoPharExtensionDirectoryException.php', - 'PHPUnit\\TextUI\\Configuration\\Php' => '/phpunit/TextUI/Configuration/Value/Php.php', - 'PHPUnit\\TextUI\\Configuration\\PhpHandler' => '/phpunit/TextUI/Configuration/PhpHandler.php', - 'PHPUnit\\TextUI\\Configuration\\Registry' => '/phpunit/TextUI/Configuration/Registry.php', - 'PHPUnit\\TextUI\\Configuration\\Source' => '/phpunit/TextUI/Configuration/Value/Source.php', - 'PHPUnit\\TextUI\\Configuration\\SourceFilter' => '/phpunit/TextUI/Configuration/SourceFilter.php', - 'PHPUnit\\TextUI\\Configuration\\SourceMapper' => '/phpunit/TextUI/Configuration/SourceMapper.php', - 'PHPUnit\\TextUI\\Configuration\\SpecificDeprecationToStopOnNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/SpecificDeprecationToStopOnNotConfiguredException.php', - 'PHPUnit\\TextUI\\Configuration\\TestDirectory' => '/phpunit/TextUI/Configuration/Value/TestDirectory.php', - 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollection' => '/phpunit/TextUI/Configuration/Value/TestDirectoryCollection.php', - 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollectionIterator' => '/phpunit/TextUI/Configuration/Value/TestDirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\TestFile' => '/phpunit/TextUI/Configuration/Value/TestFile.php', - 'PHPUnit\\TextUI\\Configuration\\TestFileCollection' => '/phpunit/TextUI/Configuration/Value/TestFileCollection.php', - 'PHPUnit\\TextUI\\Configuration\\TestFileCollectionIterator' => '/phpunit/TextUI/Configuration/Value/TestFileCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\TestSuite' => '/phpunit/TextUI/Configuration/Value/TestSuite.php', - 'PHPUnit\\TextUI\\Configuration\\TestSuiteBuilder' => '/phpunit/TextUI/Configuration/TestSuiteBuilder.php', - 'PHPUnit\\TextUI\\Configuration\\TestSuiteCollection' => '/phpunit/TextUI/Configuration/Value/TestSuiteCollection.php', - 'PHPUnit\\TextUI\\Configuration\\TestSuiteCollectionIterator' => '/phpunit/TextUI/Configuration/Value/TestSuiteCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\Variable' => '/phpunit/TextUI/Configuration/Value/Variable.php', - 'PHPUnit\\TextUI\\Configuration\\VariableCollection' => '/phpunit/TextUI/Configuration/Value/VariableCollection.php', - 'PHPUnit\\TextUI\\Configuration\\VariableCollectionIterator' => '/phpunit/TextUI/Configuration/Value/VariableCollectionIterator.php', - 'PHPUnit\\TextUI\\Exception' => '/phpunit/TextUI/Exception/Exception.php', - 'PHPUnit\\TextUI\\Help' => '/phpunit/TextUI/Help.php', - 'PHPUnit\\TextUI\\InvalidSocketException' => '/phpunit/TextUI/Exception/InvalidSocketException.php', - 'PHPUnit\\TextUI\\Output\\DefaultPrinter' => '/phpunit/TextUI/Output/Printer/DefaultPrinter.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\BeforeTestClassMethodErroredSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\ProgressPrinter' => '/phpunit/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\Subscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/Subscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestConsideredRiskySubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestErroredSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFailedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFinishedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestMarkedIncompleteSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestPreparedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestRunnerExecutionStartedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestRunnerExecutionStartedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestSkippedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredErrorSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredErrorSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredNoticeSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredNoticeSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpNoticeSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpWarningSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredWarningSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ResultPrinter' => '/phpunit/TextUI/Output/Default/ResultPrinter.php', - 'PHPUnit\\TextUI\\Output\\Default\\UnexpectedOutputPrinter' => '/phpunit/TextUI/Output/Default/UnexpectedOutputPrinter.php', - 'PHPUnit\\TextUI\\Output\\Facade' => '/phpunit/TextUI/Output/Facade.php', - 'PHPUnit\\TextUI\\Output\\NullPrinter' => '/phpunit/TextUI/Output/Printer/NullPrinter.php', - 'PHPUnit\\TextUI\\Output\\Printer' => '/phpunit/TextUI/Output/Printer/Printer.php', - 'PHPUnit\\TextUI\\Output\\SummaryPrinter' => '/phpunit/TextUI/Output/SummaryPrinter.php', - 'PHPUnit\\TextUI\\Output\\TestDox\\ResultPrinter' => '/phpunit/TextUI/Output/TestDox/ResultPrinter.php', - 'PHPUnit\\TextUI\\RuntimeException' => '/phpunit/TextUI/Exception/RuntimeException.php', - 'PHPUnit\\TextUI\\ShellExitCodeCalculator' => '/phpunit/TextUI/ShellExitCodeCalculator.php', - 'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => '/phpunit/TextUI/Exception/TestDirectoryNotFoundException.php', - 'PHPUnit\\TextUI\\TestFileNotFoundException' => '/phpunit/TextUI/Exception/TestFileNotFoundException.php', - 'PHPUnit\\TextUI\\TestRunner' => '/phpunit/TextUI/TestRunner.php', - 'PHPUnit\\TextUI\\TestSuiteFilterProcessor' => '/phpunit/TextUI/TestSuiteFilterProcessor.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CannotFindSchemaException' => '/phpunit/TextUI/Configuration/Exception/CannotFindSchemaException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Crap4j' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Crap4j.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Html' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Php' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Text' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Xml' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Configuration' => '/phpunit/TextUI/Configuration/Xml/Configuration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConvertLogTypes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/ConvertLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCloverToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCloverToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCrap4jToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCrap4jToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageHtmlToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageHtmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoveragePhpToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoveragePhpToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageTextToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageTextToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DefaultConfiguration' => '/phpunit/TextUI/Configuration/Xml/DefaultConfiguration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => '/phpunit/TextUI/Configuration/Xml/Exception.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FailedSchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => '/phpunit/TextUI/Configuration/Xml/Generator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => '/phpunit/TextUI/Configuration/Xml/Groups.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCacheDirectoryAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCoverageElement' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCoverageElement.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\LoadedFromFileConfiguration' => '/phpunit/TextUI/Configuration/Xml/LoadedFromFileConfiguration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Loader' => '/phpunit/TextUI/Configuration/Xml/Loader.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\LogToReportMigration' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/LogToReportMigration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Junit' => '/phpunit/TextUI/Configuration/Xml/Logging/Junit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Logging' => '/phpunit/TextUI/Configuration/Xml/Logging/Logging.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TeamCity' => '/phpunit/TextUI/Configuration/Xml/Logging/TeamCity.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Html' => '/phpunit/TextUI/Configuration/Xml/Logging/TestDox/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => '/phpunit/TextUI/Configuration/Xml/Logging/TestDox/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/Migration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => '/phpunit/TextUI/Configuration/Xml/Migration/MigrationBuilder.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => '/phpunit/TextUI/Configuration/Xml/Migration/MigrationException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveCoverageDirectoriesToSource' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveCoverageDirectoriesToSource.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistIncludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => '/phpunit/TextUI/Configuration/Xml/PHPUnit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutTodoAnnotatedTestsAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheResultFileAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheResultFileAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheTokensAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheTokensAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveConversionToExceptionsAttributes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveConversionToExceptionsAttributes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementCacheDirectoryAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementCacheDirectoryAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementIncludeUncoveredFilesAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementIncludeUncoveredFilesAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementProcessUncoveredFilesAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementProcessUncoveredFilesAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveEmptyFilter' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveEmptyFilter.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveListeners' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveListeners.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLogTypes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLoggingElements' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLoggingElements.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveNoInteractionAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveNoInteractionAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemovePrinterAttributes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemovePrinterAttributes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveRegisterMockObjectsFromTestArgumentsRecursivelyAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveRegisterMockObjectsFromTestArgumentsRecursivelyAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveTestDoxGroupsElement' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestDoxGroupsElement.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveTestSuiteLoaderAttributes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestSuiteLoaderAttributes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveVerboseAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveVerboseAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBackupStaticAttributesAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBeStrictAboutCoversAnnotationAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RenameForceCoversAnnotationAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ReplaceRestrictDeprecationsWithIgnoreDeprecations' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/ReplaceRestrictDeprecationsWithIgnoreDeprecations.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetector' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaFinder' => '/phpunit/TextUI/Configuration/Xml/SchemaFinder.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SnapshotNodeList' => '/phpunit/TextUI/Configuration/Xml/Migration/SnapshotNodeList.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SuccessfulSchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteMapper' => '/phpunit/TextUI/Configuration/Xml/TestSuiteMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocation' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ValidationResult' => '/phpunit/TextUI/Configuration/Xml/Validator/ValidationResult.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Validator' => '/phpunit/TextUI/Configuration/Xml/Validator/Validator.php', - 'PHPUnit\\Util\\Cloner' => '/phpunit/Util/Cloner.php', - 'PHPUnit\\Util\\Color' => '/phpunit/Util/Color.php', - 'PHPUnit\\Util\\Exception' => '/phpunit/Util/Exception/Exception.php', - 'PHPUnit\\Util\\ExcludeList' => '/phpunit/Util/ExcludeList.php', - 'PHPUnit\\Util\\Exporter' => '/phpunit/Util/Exporter.php', - 'PHPUnit\\Util\\Filesystem' => '/phpunit/Util/Filesystem.php', - 'PHPUnit\\Util\\Filter' => '/phpunit/Util/Filter.php', - 'PHPUnit\\Util\\GlobalState' => '/phpunit/Util/GlobalState.php', - 'PHPUnit\\Util\\Http\\Downloader' => '/phpunit/Util/Http/Downloader.php', - 'PHPUnit\\Util\\Http\\PhpDownloader' => '/phpunit/Util/Http/PhpDownloader.php', - 'PHPUnit\\Util\\InvalidDirectoryException' => '/phpunit/Util/Exception/InvalidDirectoryException.php', - 'PHPUnit\\Util\\InvalidJsonException' => '/phpunit/Util/Exception/InvalidJsonException.php', - 'PHPUnit\\Util\\InvalidVersionOperatorException' => '/phpunit/Util/Exception/InvalidVersionOperatorException.php', - 'PHPUnit\\Util\\Json' => '/phpunit/Util/Json.php', - 'PHPUnit\\Util\\PHP\\DefaultJobRunner' => '/phpunit/Util/PHP/DefaultJobRunner.php', - 'PHPUnit\\Util\\PHP\\Job' => '/phpunit/Util/PHP/Job.php', - 'PHPUnit\\Util\\PHP\\JobRunner' => '/phpunit/Util/PHP/JobRunner.php', - 'PHPUnit\\Util\\PHP\\JobRunnerRegistry' => '/phpunit/Util/PHP/JobRunnerRegistry.php', - 'PHPUnit\\Util\\PHP\\PhpProcessException' => '/phpunit/Util/Exception/PhpProcessException.php', - 'PHPUnit\\Util\\PHP\\Result' => '/phpunit/Util/PHP/Result.php', - 'PHPUnit\\Util\\Reflection' => '/phpunit/Util/Reflection.php', - 'PHPUnit\\Util\\Test' => '/phpunit/Util/Test.php', - 'PHPUnit\\Util\\ThrowableToStringMapper' => '/phpunit/Util/ThrowableToStringMapper.php', - 'PHPUnit\\Util\\VersionComparisonOperator' => '/phpunit/Util/VersionComparisonOperator.php', - 'PHPUnit\\Util\\Xml' => '/phpunit/Util/Xml/Xml.php', - 'PHPUnit\\Util\\Xml\\Loader' => '/phpunit/Util/Xml/Loader.php', - 'PHPUnit\\Util\\Xml\\XmlException' => '/phpunit/Util/Exception/XmlException.php']; - } - - if (isset($classes[$class])) { - require_once 'phar://phpunit-11.5.6.phar' . $classes[$class]; - } - }, - true, - false -); - -foreach (['PHPUnitPHAR\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy.php', - 'PHPUnitPHAR\\DeepCopy\\Exception\\CloneException' => '/myclabs-deep-copy/DeepCopy/Exception/CloneException.php', - 'PHPUnitPHAR\\DeepCopy\\Exception\\PropertyException' => '/myclabs-deep-copy/DeepCopy/Exception/PropertyException.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\ChainableFilter' => '/myclabs-deep-copy/DeepCopy/Filter/ChainableFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => '/myclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => '/myclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => '/myclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\Filter' => '/myclabs-deep-copy/DeepCopy/Filter/Filter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\KeepFilter' => '/myclabs-deep-copy/DeepCopy/Filter/KeepFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\ReplaceFilter' => '/myclabs-deep-copy/DeepCopy/Filter/ReplaceFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Filter\\SetNullFilter' => '/myclabs-deep-copy/DeepCopy/Filter/SetNullFilter.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => '/myclabs-deep-copy/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\Matcher' => '/myclabs-deep-copy/DeepCopy/Matcher/Matcher.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\PropertyMatcher' => '/myclabs-deep-copy/DeepCopy/Matcher/PropertyMatcher.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\PropertyNameMatcher' => '/myclabs-deep-copy/DeepCopy/Matcher/PropertyNameMatcher.php', - 'PHPUnitPHAR\\DeepCopy\\Matcher\\PropertyTypeMatcher' => '/myclabs-deep-copy/DeepCopy/Matcher/PropertyTypeMatcher.php', - 'PHPUnitPHAR\\DeepCopy\\Reflection\\ReflectionHelper' => '/myclabs-deep-copy/DeepCopy/Reflection/ReflectionHelper.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Date/DateIntervalFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Date\\DatePeriodFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Date/DatePeriodFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\ReplaceFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/ReplaceFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\ShallowCopyFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/ShallowCopyFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeFilter\\TypeFilter' => '/myclabs-deep-copy/DeepCopy/TypeFilter/TypeFilter.php', - 'PHPUnitPHAR\\DeepCopy\\TypeMatcher\\TypeMatcher' => '/myclabs-deep-copy/DeepCopy/TypeMatcher/TypeMatcher.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Application' => '/phar-io-manifest/values/Application.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ApplicationName' => '/phar-io-manifest/values/ApplicationName.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Author' => '/phar-io-manifest/values/Author.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\AuthorCollection' => '/phar-io-manifest/values/AuthorCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\AuthorCollectionIterator' => '/phar-io-manifest/values/AuthorCollectionIterator.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\AuthorElement' => '/phar-io-manifest/xml/AuthorElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\AuthorElementCollection' => '/phar-io-manifest/xml/AuthorElementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\BundledComponent' => '/phar-io-manifest/values/BundledComponent.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\BundledComponentCollection' => '/phar-io-manifest/values/BundledComponentCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\BundledComponentCollectionIterator' => '/phar-io-manifest/values/BundledComponentCollectionIterator.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\BundlesElement' => '/phar-io-manifest/xml/BundlesElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ComponentElement' => '/phar-io-manifest/xml/ComponentElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ComponentElementCollection' => '/phar-io-manifest/xml/ComponentElementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ContainsElement' => '/phar-io-manifest/xml/ContainsElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\CopyrightElement' => '/phar-io-manifest/xml/CopyrightElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\CopyrightInformation' => '/phar-io-manifest/values/CopyrightInformation.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ElementCollection' => '/phar-io-manifest/xml/ElementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ElementCollectionException' => '/phar-io-manifest/exceptions/ElementCollectionException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Email' => '/phar-io-manifest/values/Email.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Exception' => '/phar-io-manifest/exceptions/Exception.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ExtElement' => '/phar-io-manifest/xml/ExtElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ExtElementCollection' => '/phar-io-manifest/xml/ExtElementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Extension' => '/phar-io-manifest/values/Extension.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ExtensionElement' => '/phar-io-manifest/xml/ExtensionElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\InvalidApplicationNameException' => '/phar-io-manifest/exceptions/InvalidApplicationNameException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\InvalidEmailException' => '/phar-io-manifest/exceptions/InvalidEmailException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\InvalidUrlException' => '/phar-io-manifest/exceptions/InvalidUrlException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Library' => '/phar-io-manifest/values/Library.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\License' => '/phar-io-manifest/values/License.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\LicenseElement' => '/phar-io-manifest/xml/LicenseElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Manifest' => '/phar-io-manifest/values/Manifest.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocument' => '/phar-io-manifest/xml/ManifestDocument.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocumentException' => '/phar-io-manifest/exceptions/ManifestDocumentException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocumentLoadingException' => '/phar-io-manifest/exceptions/ManifestDocumentLoadingException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocumentMapper' => '/phar-io-manifest/ManifestDocumentMapper.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestDocumentMapperException' => '/phar-io-manifest/exceptions/ManifestDocumentMapperException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestElement' => '/phar-io-manifest/xml/ManifestElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestElementException' => '/phar-io-manifest/exceptions/ManifestElementException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestLoader' => '/phar-io-manifest/ManifestLoader.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestLoaderException' => '/phar-io-manifest/exceptions/ManifestLoaderException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\ManifestSerializer' => '/phar-io-manifest/ManifestSerializer.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\NoEmailAddressException' => '/phar-io-manifest/exceptions/NoEmailAddressException.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\PhpElement' => '/phar-io-manifest/xml/PhpElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\PhpExtensionRequirement' => '/phar-io-manifest/values/PhpExtensionRequirement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\PhpVersionRequirement' => '/phar-io-manifest/values/PhpVersionRequirement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Requirement' => '/phar-io-manifest/values/Requirement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\RequirementCollection' => '/phar-io-manifest/values/RequirementCollection.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\RequirementCollectionIterator' => '/phar-io-manifest/values/RequirementCollectionIterator.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\RequiresElement' => '/phar-io-manifest/xml/RequiresElement.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Type' => '/phar-io-manifest/values/Type.php', - 'PHPUnitPHAR\\PharIo\\Manifest\\Url' => '/phar-io-manifest/values/Url.php', - 'PHPUnitPHAR\\PharIo\\Version\\AbstractVersionConstraint' => '/phar-io-version/constraints/AbstractVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\AndVersionConstraintGroup' => '/phar-io-version/constraints/AndVersionConstraintGroup.php', - 'PHPUnitPHAR\\PharIo\\Version\\AnyVersionConstraint' => '/phar-io-version/constraints/AnyVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\BuildMetaData' => '/phar-io-version/BuildMetaData.php', - 'PHPUnitPHAR\\PharIo\\Version\\ExactVersionConstraint' => '/phar-io-version/constraints/ExactVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\Exception' => '/phar-io-version/exceptions/Exception.php', - 'PHPUnitPHAR\\PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => '/phar-io-version/constraints/GreaterThanOrEqualToVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\InvalidPreReleaseSuffixException' => '/phar-io-version/exceptions/InvalidPreReleaseSuffixException.php', - 'PHPUnitPHAR\\PharIo\\Version\\InvalidVersionException' => '/phar-io-version/exceptions/InvalidVersionException.php', - 'PHPUnitPHAR\\PharIo\\Version\\NoBuildMetaDataException' => '/phar-io-version/exceptions/NoBuildMetaDataException.php', - 'PHPUnitPHAR\\PharIo\\Version\\NoPreReleaseSuffixException' => '/phar-io-version/exceptions/NoPreReleaseSuffixException.php', - 'PHPUnitPHAR\\PharIo\\Version\\OrVersionConstraintGroup' => '/phar-io-version/constraints/OrVersionConstraintGroup.php', - 'PHPUnitPHAR\\PharIo\\Version\\PreReleaseSuffix' => '/phar-io-version/PreReleaseSuffix.php', - 'PHPUnitPHAR\\PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => '/phar-io-version/constraints/SpecificMajorAndMinorVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\SpecificMajorVersionConstraint' => '/phar-io-version/constraints/SpecificMajorVersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\UnsupportedVersionConstraintException' => '/phar-io-version/exceptions/UnsupportedVersionConstraintException.php', - 'PHPUnitPHAR\\PharIo\\Version\\Version' => '/phar-io-version/Version.php', - 'PHPUnitPHAR\\PharIo\\Version\\VersionConstraint' => '/phar-io-version/constraints/VersionConstraint.php', - 'PHPUnitPHAR\\PharIo\\Version\\VersionConstraintParser' => '/phar-io-version/VersionConstraintParser.php', - 'PHPUnitPHAR\\PharIo\\Version\\VersionConstraintValue' => '/phar-io-version/VersionConstraintValue.php', - 'PHPUnitPHAR\\PharIo\\Version\\VersionNumber' => '/phar-io-version/VersionNumber.php', - 'PHPUnitPHAR\\PhpParser\\Builder' => '/nikic-php-parser/PhpParser/Builder.php', - 'PHPUnitPHAR\\PhpParser\\BuilderFactory' => '/nikic-php-parser/PhpParser/BuilderFactory.php', - 'PHPUnitPHAR\\PhpParser\\BuilderHelpers' => '/nikic-php-parser/PhpParser/BuilderHelpers.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\ClassConst' => '/nikic-php-parser/PhpParser/Builder/ClassConst.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Class_' => '/nikic-php-parser/PhpParser/Builder/Class_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Declaration' => '/nikic-php-parser/PhpParser/Builder/Declaration.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\EnumCase' => '/nikic-php-parser/PhpParser/Builder/EnumCase.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Enum_' => '/nikic-php-parser/PhpParser/Builder/Enum_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\FunctionLike' => '/nikic-php-parser/PhpParser/Builder/FunctionLike.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Function_' => '/nikic-php-parser/PhpParser/Builder/Function_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Interface_' => '/nikic-php-parser/PhpParser/Builder/Interface_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Method' => '/nikic-php-parser/PhpParser/Builder/Method.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Namespace_' => '/nikic-php-parser/PhpParser/Builder/Namespace_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Param' => '/nikic-php-parser/PhpParser/Builder/Param.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Property' => '/nikic-php-parser/PhpParser/Builder/Property.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\TraitUse' => '/nikic-php-parser/PhpParser/Builder/TraitUse.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\TraitUseAdaptation' => '/nikic-php-parser/PhpParser/Builder/TraitUseAdaptation.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Trait_' => '/nikic-php-parser/PhpParser/Builder/Trait_.php', - 'PHPUnitPHAR\\PhpParser\\Builder\\Use_' => '/nikic-php-parser/PhpParser/Builder/Use_.php', - 'PHPUnitPHAR\\PhpParser\\Comment' => '/nikic-php-parser/PhpParser/Comment.php', - 'PHPUnitPHAR\\PhpParser\\Comment\\Doc' => '/nikic-php-parser/PhpParser/Comment/Doc.php', - 'PHPUnitPHAR\\PhpParser\\ConstExprEvaluationException' => '/nikic-php-parser/PhpParser/ConstExprEvaluationException.php', - 'PHPUnitPHAR\\PhpParser\\ConstExprEvaluator' => '/nikic-php-parser/PhpParser/ConstExprEvaluator.php', - 'PHPUnitPHAR\\PhpParser\\Error' => '/nikic-php-parser/PhpParser/Error.php', - 'PHPUnitPHAR\\PhpParser\\ErrorHandler' => '/nikic-php-parser/PhpParser/ErrorHandler.php', - 'PHPUnitPHAR\\PhpParser\\ErrorHandler\\Collecting' => '/nikic-php-parser/PhpParser/ErrorHandler/Collecting.php', - 'PHPUnitPHAR\\PhpParser\\ErrorHandler\\Throwing' => '/nikic-php-parser/PhpParser/ErrorHandler/Throwing.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\DiffElem' => '/nikic-php-parser/PhpParser/Internal/DiffElem.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\Differ' => '/nikic-php-parser/PhpParser/Internal/Differ.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\PrintableNewAnonClassNode' => '/nikic-php-parser/PhpParser/Internal/PrintableNewAnonClassNode.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\TokenPolyfill' => '/nikic-php-parser/PhpParser/Internal/TokenPolyfill.php', - 'PHPUnitPHAR\\PhpParser\\Internal\\TokenStream' => '/nikic-php-parser/PhpParser/Internal/TokenStream.php', - 'PHPUnitPHAR\\PhpParser\\JsonDecoder' => '/nikic-php-parser/PhpParser/JsonDecoder.php', - 'PHPUnitPHAR\\PhpParser\\Lexer' => '/nikic-php-parser/PhpParser/Lexer.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\Emulative' => '/nikic-php-parser/PhpParser/Lexer/Emulative.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\AsymmetricVisibilityTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\PropertyTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\ReadonlyFunctionTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', - 'PHPUnitPHAR\\PhpParser\\Modifiers' => '/nikic-php-parser/PhpParser/Modifiers.php', - 'PHPUnitPHAR\\PhpParser\\NameContext' => '/nikic-php-parser/PhpParser/NameContext.php', - 'PHPUnitPHAR\\PhpParser\\Node' => '/nikic-php-parser/PhpParser/Node.php', - 'PHPUnitPHAR\\PhpParser\\NodeAbstract' => '/nikic-php-parser/PhpParser/NodeAbstract.php', - 'PHPUnitPHAR\\PhpParser\\NodeDumper' => '/nikic-php-parser/PhpParser/NodeDumper.php', - 'PHPUnitPHAR\\PhpParser\\NodeFinder' => '/nikic-php-parser/PhpParser/NodeFinder.php', - 'PHPUnitPHAR\\PhpParser\\NodeTraverser' => '/nikic-php-parser/PhpParser/NodeTraverser.php', - 'PHPUnitPHAR\\PhpParser\\NodeTraverserInterface' => '/nikic-php-parser/PhpParser/NodeTraverserInterface.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitorAbstract' => '/nikic-php-parser/PhpParser/NodeVisitorAbstract.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\CloningVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/CloningVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\CommentAnnotatingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\FindingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/FindingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\FirstFindingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/FirstFindingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\NameResolver' => '/nikic-php-parser/PhpParser/NodeVisitor/NameResolver.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\NodeConnectingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/NodeConnectingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\NodeVisitor\\ParentConnectingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/ParentConnectingVisitor.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Arg' => '/nikic-php-parser/PhpParser/Node/Arg.php', - 'PHPUnitPHAR\\PhpParser\\Node\\ArrayItem' => '/nikic-php-parser/PhpParser/Node/ArrayItem.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Attribute' => '/nikic-php-parser/PhpParser/Node/Attribute.php', - 'PHPUnitPHAR\\PhpParser\\Node\\AttributeGroup' => '/nikic-php-parser/PhpParser/Node/AttributeGroup.php', - 'PHPUnitPHAR\\PhpParser\\Node\\ClosureUse' => '/nikic-php-parser/PhpParser/Node/ClosureUse.php', - 'PHPUnitPHAR\\PhpParser\\Node\\ComplexType' => '/nikic-php-parser/PhpParser/Node/ComplexType.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Const_' => '/nikic-php-parser/PhpParser/Node/Const_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\DeclareItem' => '/nikic-php-parser/PhpParser/Node/DeclareItem.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr' => '/nikic-php-parser/PhpParser/Node/Expr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ArrayDimFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ArrayDimFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Array_' => '/nikic-php-parser/PhpParser/Node/Expr/Array_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ArrowFunction' => '/nikic-php-parser/PhpParser/Node/Expr/ArrowFunction.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Assign' => '/nikic-php-parser/PhpParser/Node/Expr/Assign.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Coalesce.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Concat' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Concat.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Div' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Div.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Minus' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Minus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Mod' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mod.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Mul' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mul.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Plus' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Plus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\Pow' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/Pow.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => '/nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftRight.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\AssignRef' => '/nikic-php-parser/PhpParser/Node/Expr/AssignRef.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Coalesce.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Concat' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Concat.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Div' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Div.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Equal' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Equal.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Greater' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Greater.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Identical' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Identical.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Minus' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Minus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Mod' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mod.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Mul' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mul.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotEqual.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Plus' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Plus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Pow' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Pow.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Smaller.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => '/nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Spaceship.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BitwiseNot' => '/nikic-php-parser/PhpParser/Node/Expr/BitwiseNot.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\BooleanNot' => '/nikic-php-parser/PhpParser/Node/Expr/BooleanNot.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\CallLike' => '/nikic-php-parser/PhpParser/Node/Expr/CallLike.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast' => '/nikic-php-parser/PhpParser/Node/Expr/Cast.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Array_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Array_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Bool_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Bool_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Double' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Double.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Int_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Int_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Object_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Object_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\String_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/String_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Cast\\Unset_' => '/nikic-php-parser/PhpParser/Node/Expr/Cast/Unset_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ClassConstFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ClassConstFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Clone_' => '/nikic-php-parser/PhpParser/Node/Expr/Clone_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Closure' => '/nikic-php-parser/PhpParser/Node/Expr/Closure.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ConstFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ConstFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Empty_' => '/nikic-php-parser/PhpParser/Node/Expr/Empty_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Error' => '/nikic-php-parser/PhpParser/Node/Expr/Error.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ErrorSuppress' => '/nikic-php-parser/PhpParser/Node/Expr/ErrorSuppress.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Eval_' => '/nikic-php-parser/PhpParser/Node/Expr/Eval_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Exit_' => '/nikic-php-parser/PhpParser/Node/Expr/Exit_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\FuncCall' => '/nikic-php-parser/PhpParser/Node/Expr/FuncCall.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Include_' => '/nikic-php-parser/PhpParser/Node/Expr/Include_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Instanceof_' => '/nikic-php-parser/PhpParser/Node/Expr/Instanceof_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Isset_' => '/nikic-php-parser/PhpParser/Node/Expr/Isset_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\List_' => '/nikic-php-parser/PhpParser/Node/Expr/List_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Match_' => '/nikic-php-parser/PhpParser/Node/Expr/Match_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\MethodCall' => '/nikic-php-parser/PhpParser/Node/Expr/MethodCall.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\New_' => '/nikic-php-parser/PhpParser/Node/Expr/New_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\NullsafeMethodCall' => '/nikic-php-parser/PhpParser/Node/Expr/NullsafeMethodCall.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\NullsafePropertyFetch' => '/nikic-php-parser/PhpParser/Node/Expr/NullsafePropertyFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PostDec' => '/nikic-php-parser/PhpParser/Node/Expr/PostDec.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PostInc' => '/nikic-php-parser/PhpParser/Node/Expr/PostInc.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PreDec' => '/nikic-php-parser/PhpParser/Node/Expr/PreDec.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PreInc' => '/nikic-php-parser/PhpParser/Node/Expr/PreInc.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Print_' => '/nikic-php-parser/PhpParser/Node/Expr/Print_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\PropertyFetch' => '/nikic-php-parser/PhpParser/Node/Expr/PropertyFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\ShellExec' => '/nikic-php-parser/PhpParser/Node/Expr/ShellExec.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\StaticCall' => '/nikic-php-parser/PhpParser/Node/Expr/StaticCall.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\StaticPropertyFetch' => '/nikic-php-parser/PhpParser/Node/Expr/StaticPropertyFetch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Ternary' => '/nikic-php-parser/PhpParser/Node/Expr/Ternary.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Throw_' => '/nikic-php-parser/PhpParser/Node/Expr/Throw_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\UnaryMinus' => '/nikic-php-parser/PhpParser/Node/Expr/UnaryMinus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\UnaryPlus' => '/nikic-php-parser/PhpParser/Node/Expr/UnaryPlus.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Variable' => '/nikic-php-parser/PhpParser/Node/Expr/Variable.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\YieldFrom' => '/nikic-php-parser/PhpParser/Node/Expr/YieldFrom.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Expr\\Yield_' => '/nikic-php-parser/PhpParser/Node/Expr/Yield_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\FunctionLike' => '/nikic-php-parser/PhpParser/Node/FunctionLike.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Identifier' => '/nikic-php-parser/PhpParser/Node/Identifier.php', - 'PHPUnitPHAR\\PhpParser\\Node\\InterpolatedStringPart' => '/nikic-php-parser/PhpParser/Node/InterpolatedStringPart.php', - 'PHPUnitPHAR\\PhpParser\\Node\\IntersectionType' => '/nikic-php-parser/PhpParser/Node/IntersectionType.php', - 'PHPUnitPHAR\\PhpParser\\Node\\MatchArm' => '/nikic-php-parser/PhpParser/Node/MatchArm.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Name' => '/nikic-php-parser/PhpParser/Node/Name.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Name\\FullyQualified' => '/nikic-php-parser/PhpParser/Node/Name/FullyQualified.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Name\\Relative' => '/nikic-php-parser/PhpParser/Node/Name/Relative.php', - 'PHPUnitPHAR\\PhpParser\\Node\\NullableType' => '/nikic-php-parser/PhpParser/Node/NullableType.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Param' => '/nikic-php-parser/PhpParser/Node/Param.php', - 'PHPUnitPHAR\\PhpParser\\Node\\PropertyHook' => '/nikic-php-parser/PhpParser/Node/PropertyHook.php', - 'PHPUnitPHAR\\PhpParser\\Node\\PropertyItem' => '/nikic-php-parser/PhpParser/Node/PropertyItem.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar' => '/nikic-php-parser/PhpParser/Node/Scalar.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\Float_' => '/nikic-php-parser/PhpParser/Node/Scalar/Float_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\Int_' => '/nikic-php-parser/PhpParser/Node/Scalar/Int_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\InterpolatedString' => '/nikic-php-parser/PhpParser/Node/Scalar/InterpolatedString.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Class_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Class_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Dir' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Dir.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\File' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/File.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Function_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Function_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Line' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Line.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Method' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Method.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Namespace_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Property' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Property.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Trait_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Scalar\\String_' => '/nikic-php-parser/PhpParser/Node/Scalar/String_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\StaticVar' => '/nikic-php-parser/PhpParser/Node/StaticVar.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt' => '/nikic-php-parser/PhpParser/Node/Stmt.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Block' => '/nikic-php-parser/PhpParser/Node/Stmt/Block.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Break_' => '/nikic-php-parser/PhpParser/Node/Stmt/Break_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Case_' => '/nikic-php-parser/PhpParser/Node/Stmt/Case_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Catch_' => '/nikic-php-parser/PhpParser/Node/Stmt/Catch_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\ClassConst' => '/nikic-php-parser/PhpParser/Node/Stmt/ClassConst.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\ClassLike' => '/nikic-php-parser/PhpParser/Node/Stmt/ClassLike.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\ClassMethod' => '/nikic-php-parser/PhpParser/Node/Stmt/ClassMethod.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Class_' => '/nikic-php-parser/PhpParser/Node/Stmt/Class_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Const_' => '/nikic-php-parser/PhpParser/Node/Stmt/Const_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Continue_' => '/nikic-php-parser/PhpParser/Node/Stmt/Continue_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Declare_' => '/nikic-php-parser/PhpParser/Node/Stmt/Declare_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Do_' => '/nikic-php-parser/PhpParser/Node/Stmt/Do_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Echo_' => '/nikic-php-parser/PhpParser/Node/Stmt/Echo_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\ElseIf_' => '/nikic-php-parser/PhpParser/Node/Stmt/ElseIf_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Else_' => '/nikic-php-parser/PhpParser/Node/Stmt/Else_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\EnumCase' => '/nikic-php-parser/PhpParser/Node/Stmt/EnumCase.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Enum_' => '/nikic-php-parser/PhpParser/Node/Stmt/Enum_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Expression' => '/nikic-php-parser/PhpParser/Node/Stmt/Expression.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Finally_' => '/nikic-php-parser/PhpParser/Node/Stmt/Finally_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\For_' => '/nikic-php-parser/PhpParser/Node/Stmt/For_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Foreach_' => '/nikic-php-parser/PhpParser/Node/Stmt/Foreach_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Function_' => '/nikic-php-parser/PhpParser/Node/Stmt/Function_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Global_' => '/nikic-php-parser/PhpParser/Node/Stmt/Global_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Goto_' => '/nikic-php-parser/PhpParser/Node/Stmt/Goto_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\GroupUse' => '/nikic-php-parser/PhpParser/Node/Stmt/GroupUse.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\HaltCompiler' => '/nikic-php-parser/PhpParser/Node/Stmt/HaltCompiler.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\If_' => '/nikic-php-parser/PhpParser/Node/Stmt/If_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\InlineHTML' => '/nikic-php-parser/PhpParser/Node/Stmt/InlineHTML.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Interface_' => '/nikic-php-parser/PhpParser/Node/Stmt/Interface_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Label' => '/nikic-php-parser/PhpParser/Node/Stmt/Label.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Namespace_' => '/nikic-php-parser/PhpParser/Node/Stmt/Namespace_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Nop' => '/nikic-php-parser/PhpParser/Node/Stmt/Nop.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Property' => '/nikic-php-parser/PhpParser/Node/Stmt/Property.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Return_' => '/nikic-php-parser/PhpParser/Node/Stmt/Return_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Static_' => '/nikic-php-parser/PhpParser/Node/Stmt/Static_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Switch_' => '/nikic-php-parser/PhpParser/Node/Stmt/Switch_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TraitUse' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUse.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TraitUseAdaptation' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Trait_' => '/nikic-php-parser/PhpParser/Node/Stmt/Trait_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\TryCatch' => '/nikic-php-parser/PhpParser/Node/Stmt/TryCatch.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Unset_' => '/nikic-php-parser/PhpParser/Node/Stmt/Unset_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\Use_' => '/nikic-php-parser/PhpParser/Node/Stmt/Use_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\Stmt\\While_' => '/nikic-php-parser/PhpParser/Node/Stmt/While_.php', - 'PHPUnitPHAR\\PhpParser\\Node\\UnionType' => '/nikic-php-parser/PhpParser/Node/UnionType.php', - 'PHPUnitPHAR\\PhpParser\\Node\\UseItem' => '/nikic-php-parser/PhpParser/Node/UseItem.php', - 'PHPUnitPHAR\\PhpParser\\Node\\VarLikeIdentifier' => '/nikic-php-parser/PhpParser/Node/VarLikeIdentifier.php', - 'PHPUnitPHAR\\PhpParser\\Node\\VariadicPlaceholder' => '/nikic-php-parser/PhpParser/Node/VariadicPlaceholder.php', - 'PHPUnitPHAR\\PhpParser\\Parser' => '/nikic-php-parser/PhpParser/Parser.php', - 'PHPUnitPHAR\\PhpParser\\ParserAbstract' => '/nikic-php-parser/PhpParser/ParserAbstract.php', - 'PHPUnitPHAR\\PhpParser\\ParserFactory' => '/nikic-php-parser/PhpParser/ParserFactory.php', - 'PHPUnitPHAR\\PhpParser\\Parser\\Php7' => '/nikic-php-parser/PhpParser/Parser/Php7.php', - 'PHPUnitPHAR\\PhpParser\\Parser\\Php8' => '/nikic-php-parser/PhpParser/Parser/Php8.php', - 'PHPUnitPHAR\\PhpParser\\PhpVersion' => '/nikic-php-parser/PhpParser/PhpVersion.php', - 'PHPUnitPHAR\\PhpParser\\PrettyPrinter' => '/nikic-php-parser/PhpParser/PrettyPrinter.php', - 'PHPUnitPHAR\\PhpParser\\PrettyPrinterAbstract' => '/nikic-php-parser/PhpParser/PrettyPrinterAbstract.php', - 'PHPUnitPHAR\\PhpParser\\PrettyPrinter\\Standard' => '/nikic-php-parser/PhpParser/PrettyPrinter/Standard.php', - 'PHPUnitPHAR\\PhpParser\\Token' => '/nikic-php-parser/PhpParser/Token.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\AmbiguousOptionException' => '/sebastian-cli-parser/exceptions/AmbiguousOptionException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\Exception' => '/sebastian-cli-parser/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => '/sebastian-cli-parser/exceptions/OptionDoesNotAllowArgumentException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\Parser' => '/sebastian-cli-parser/Parser.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => '/sebastian-cli-parser/exceptions/RequiredOptionArgumentMissingException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CliParser\\UnknownOptionException' => '/sebastian-cli-parser/exceptions/UnknownOptionException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => '/php-code-coverage/Exception/BranchAndPathCoverageNotSupportedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\CodeCoverage' => '/php-code-coverage/CodeCoverage.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Data\\ProcessedCodeCoverageData' => '/php-code-coverage/Data/ProcessedCodeCoverageData.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Data\\RawCodeCoverageData' => '/php-code-coverage/Data/RawCodeCoverageData.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => '/php-code-coverage/Exception/DeadCodeDetectionNotSupportedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\Driver' => '/php-code-coverage/Driver/Driver.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => '/php-code-coverage/Exception/PathExistsButIsNotDirectoryException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => '/php-code-coverage/Driver/PcovDriver.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => '/php-code-coverage/Exception/PcovNotAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\Selector' => '/php-code-coverage/Driver/Selector.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => '/php-code-coverage/Exception/WriteOperationFailedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugDriver' => '/php-code-coverage/Driver/XdebugDriver.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => '/php-code-coverage/Exception/XdebugNotAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotEnabledException' => '/php-code-coverage/Exception/XdebugNotEnabledException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Exception' => '/php-code-coverage/Exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\FileCouldNotBeWrittenException' => '/php-code-coverage/Exception/FileCouldNotBeWrittenException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Filter' => '/php-code-coverage/Filter.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => '/php-code-coverage/Exception/InvalidArgumentException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => '/php-code-coverage/Exception/NoCodeCoverageDriverAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => '/php-code-coverage/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => '/php-code-coverage/Node/AbstractNode.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\Builder' => '/php-code-coverage/Node/Builder.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => '/php-code-coverage/Node/CrapIndex.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\Directory' => '/php-code-coverage/Node/Directory.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\File' => '/php-code-coverage/Node/File.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Node\\Iterator' => '/php-code-coverage/Node/Iterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\ParserException' => '/php-code-coverage/Exception/ParserException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\ReflectionException' => '/php-code-coverage/Exception/ReflectionException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => '/php-code-coverage/Exception/ReportAlreadyFinalizedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Clover' => '/php-code-coverage/Report/Clover.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => '/php-code-coverage/Report/Cobertura.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => '/php-code-coverage/Report/Crap4j.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Colors' => '/php-code-coverage/Report/Html/Colors.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\CustomCssFile' => '/php-code-coverage/Report/Html/CustomCssFile.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => '/php-code-coverage/Report/Html/Renderer/Dashboard.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => '/php-code-coverage/Report/Html/Renderer/Directory.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => '/php-code-coverage/Report/Html/Facade.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => '/php-code-coverage/Report/Html/Renderer/File.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => '/php-code-coverage/Report/Html/Renderer.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\PHP' => '/php-code-coverage/Report/PHP.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Text' => '/php-code-coverage/Report/Text.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Thresholds' => '/php-code-coverage/Report/Thresholds.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => '/php-code-coverage/Report/Xml/BuildInformation.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => '/php-code-coverage/Report/Xml/Coverage.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => '/php-code-coverage/Report/Xml/Directory.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => '/php-code-coverage/Report/Xml/Facade.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => '/php-code-coverage/Report/Xml/File.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => '/php-code-coverage/Report/Xml/Method.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => '/php-code-coverage/Report/Xml/Node.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => '/php-code-coverage/Report/Xml/Project.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => '/php-code-coverage/Report/Xml/Report.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => '/php-code-coverage/Report/Xml/Source.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => '/php-code-coverage/Report/Xml/Tests.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => '/php-code-coverage/Report/Xml/Totals.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => '/php-code-coverage/Report/Xml/Unit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => '/php-code-coverage/Exception/StaticAnalysisCacheNotConfiguredException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => '/php-code-coverage/StaticAnalysis/CacheWarmer.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => '/php-code-coverage/StaticAnalysis/CachingFileAnalyser.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => '/php-code-coverage/StaticAnalysis/CodeUnitFindingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => '/php-code-coverage/StaticAnalysis/ExecutableLinesFindingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => '/php-code-coverage/StaticAnalysis/FileAnalyser.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => '/php-code-coverage/StaticAnalysis/IgnoredLinesFindingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => '/php-code-coverage/StaticAnalysis/ParsingFileAnalyser.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\TestIdMissingException' => '/php-code-coverage/Exception/TestIdMissingException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Known' => '/php-code-coverage/TestSize/Known.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Large' => '/php-code-coverage/TestSize/Large.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Medium' => '/php-code-coverage/TestSize/Medium.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Small' => '/php-code-coverage/TestSize/Small.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\TestSize' => '/php-code-coverage/TestSize/TestSize.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Unknown' => '/php-code-coverage/TestSize/Unknown.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Failure' => '/php-code-coverage/TestStatus/Failure.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Known' => '/php-code-coverage/TestStatus/Known.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Success' => '/php-code-coverage/TestStatus/Success.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\TestStatus' => '/php-code-coverage/TestStatus/TestStatus.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Unknown' => '/php-code-coverage/TestStatus/Unknown.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => '/php-code-coverage/Exception/UnintentionallyCoveredCodeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => '/php-code-coverage/Exception/DirectoryCouldNotBeCreatedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => '/php-code-coverage/Util/Filesystem.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Util\\Percentage' => '/php-code-coverage/Util/Percentage.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\Version' => '/php-code-coverage/Version.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeCoverage\\XmlException' => '/php-code-coverage/Exception/XmlException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => '/sebastian-code-unit-reverse-lookup/Wizard.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\ClassMethodUnit' => '/sebastian-code-unit/ClassMethodUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\ClassUnit' => '/sebastian-code-unit/ClassUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\CodeUnit' => '/sebastian-code-unit/CodeUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\CodeUnitCollection' => '/sebastian-code-unit/CodeUnitCollection.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\CodeUnitCollectionIterator' => '/sebastian-code-unit/CodeUnitCollectionIterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\Exception' => '/sebastian-code-unit/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\FileUnit' => '/sebastian-code-unit/FileUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\FunctionUnit' => '/sebastian-code-unit/FunctionUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\InterfaceMethodUnit' => '/sebastian-code-unit/InterfaceMethodUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\InterfaceUnit' => '/sebastian-code-unit/InterfaceUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\InvalidCodeUnitException' => '/sebastian-code-unit/exceptions/InvalidCodeUnitException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\Mapper' => '/sebastian-code-unit/Mapper.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\NoTraitException' => '/sebastian-code-unit/exceptions/NoTraitException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\ReflectionException' => '/sebastian-code-unit/exceptions/ReflectionException.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\TraitMethodUnit' => '/sebastian-code-unit/TraitMethodUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\CodeUnit\\TraitUnit' => '/sebastian-code-unit/TraitUnit.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ArrayComparator' => '/sebastian-comparator/ArrayComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\Comparator' => '/sebastian-comparator/Comparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ComparisonFailure' => '/sebastian-comparator/ComparisonFailure.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\DOMNodeComparator' => '/sebastian-comparator/DOMNodeComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\DateTimeComparator' => '/sebastian-comparator/DateTimeComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\EnumerationComparator' => '/sebastian-comparator/EnumerationComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\Exception' => '/sebastian-comparator/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ExceptionComparator' => '/sebastian-comparator/ExceptionComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\Factory' => '/sebastian-comparator/Factory.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\MockObjectComparator' => '/sebastian-comparator/MockObjectComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\NumberComparator' => '/sebastian-comparator/NumberComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\NumericComparator' => '/sebastian-comparator/NumericComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ObjectComparator' => '/sebastian-comparator/ObjectComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ResourceComparator' => '/sebastian-comparator/ResourceComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\RuntimeException' => '/sebastian-comparator/exceptions/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\ScalarComparator' => '/sebastian-comparator/ScalarComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\SplObjectStorageComparator' => '/sebastian-comparator/SplObjectStorageComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Comparator\\TypeComparator' => '/sebastian-comparator/TypeComparator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\Calculator' => '/sebastian-complexity/Calculator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\Complexity' => '/sebastian-complexity/Complexity/Complexity.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\ComplexityCalculatingVisitor' => '/sebastian-complexity/Visitor/ComplexityCalculatingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\ComplexityCollection' => '/sebastian-complexity/Complexity/ComplexityCollection.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\ComplexityCollectionIterator' => '/sebastian-complexity/Complexity/ComplexityCollectionIterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\CyclomaticComplexityCalculatingVisitor' => '/sebastian-complexity/Visitor/CyclomaticComplexityCalculatingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\Exception' => '/sebastian-complexity/Exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Complexity\\RuntimeException' => '/sebastian-complexity/Exception/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Chunk' => '/sebastian-diff/Chunk.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\ConfigurationException' => '/sebastian-diff/Exception/ConfigurationException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Diff' => '/sebastian-diff/Diff.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Differ' => '/sebastian-diff/Differ.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Exception' => '/sebastian-diff/Exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\InvalidArgumentException' => '/sebastian-diff/Exception/InvalidArgumentException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Line' => '/sebastian-diff/Line.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => '/sebastian-diff/LongestCommonSubsequenceCalculator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => '/sebastian-diff/MemoryEfficientLongestCommonSubsequenceCalculator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => '/sebastian-diff/Output/AbstractChunkOutputBuilder.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => '/sebastian-diff/Output/DiffOnlyOutputBuilder.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => '/sebastian-diff/Output/DiffOutputBuilderInterface.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => '/sebastian-diff/Output/StrictUnifiedDiffOutputBuilder.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => '/sebastian-diff/Output/UnifiedDiffOutputBuilder.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\Parser' => '/sebastian-diff/Parser.php', - 'PHPUnitPHAR\\SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => '/sebastian-diff/TimeEfficientLongestCommonSubsequenceCalculator.php', - 'PHPUnitPHAR\\SebastianBergmann\\Environment\\Console' => '/sebastian-environment/Console.php', - 'PHPUnitPHAR\\SebastianBergmann\\Environment\\Runtime' => '/sebastian-environment/Runtime.php', - 'PHPUnitPHAR\\SebastianBergmann\\Exporter\\Exporter' => '/sebastian-exporter/Exporter.php', - 'PHPUnitPHAR\\SebastianBergmann\\FileIterator\\ExcludeIterator' => '/php-file-iterator/ExcludeIterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\FileIterator\\Facade' => '/php-file-iterator/Facade.php', - 'PHPUnitPHAR\\SebastianBergmann\\FileIterator\\Factory' => '/php-file-iterator/Factory.php', - 'PHPUnitPHAR\\SebastianBergmann\\FileIterator\\Iterator' => '/php-file-iterator/Iterator.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\CodeExporter' => '/sebastian-global-state/CodeExporter.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\Exception' => '/sebastian-global-state/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\ExcludeList' => '/sebastian-global-state/ExcludeList.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\Restorer' => '/sebastian-global-state/Restorer.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\RuntimeException' => '/sebastian-global-state/exceptions/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\GlobalState\\Snapshot' => '/sebastian-global-state/Snapshot.php', - 'PHPUnitPHAR\\SebastianBergmann\\Invoker\\Exception' => '/php-invoker/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Invoker\\Invoker' => '/php-invoker/Invoker.php', - 'PHPUnitPHAR\\SebastianBergmann\\Invoker\\ProcessControlExtensionNotLoadedException' => '/php-invoker/exceptions/ProcessControlExtensionNotLoadedException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Invoker\\TimeoutException' => '/php-invoker/exceptions/TimeoutException.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\Counter' => '/sebastian-lines-of-code/Counter.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\Exception' => '/sebastian-lines-of-code/Exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\IllogicalValuesException' => '/sebastian-lines-of-code/Exception/IllogicalValuesException.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\LineCountingVisitor' => '/sebastian-lines-of-code/LineCountingVisitor.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\LinesOfCode' => '/sebastian-lines-of-code/LinesOfCode.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\NegativeValueException' => '/sebastian-lines-of-code/Exception/NegativeValueException.php', - 'PHPUnitPHAR\\SebastianBergmann\\LinesOfCode\\RuntimeException' => '/sebastian-lines-of-code/Exception/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\ObjectEnumerator\\Enumerator' => '/sebastian-object-enumerator/Enumerator.php', - 'PHPUnitPHAR\\SebastianBergmann\\ObjectReflector\\ObjectReflector' => '/sebastian-object-reflector/ObjectReflector.php', - 'PHPUnitPHAR\\SebastianBergmann\\RecursionContext\\Context' => '/sebastian-recursion-context/Context.php', - 'PHPUnitPHAR\\SebastianBergmann\\Template\\Exception' => '/php-text-template/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Template\\InvalidArgumentException' => '/php-text-template/exceptions/InvalidArgumentException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Template\\RuntimeException' => '/php-text-template/exceptions/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Template\\Template' => '/php-text-template/Template.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\Duration' => '/php-timer/Duration.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\Exception' => '/php-timer/exceptions/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\NoActiveTimerException' => '/php-timer/exceptions/NoActiveTimerException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\ResourceUsageFormatter' => '/php-timer/ResourceUsageFormatter.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\TimeSinceStartOfRequestNotAvailableException' => '/php-timer/exceptions/TimeSinceStartOfRequestNotAvailableException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Timer\\Timer' => '/php-timer/Timer.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\CallableType' => '/sebastian-type/type/CallableType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\Exception' => '/sebastian-type/exception/Exception.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\FalseType' => '/sebastian-type/type/FalseType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\GenericObjectType' => '/sebastian-type/type/GenericObjectType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\IntersectionType' => '/sebastian-type/type/IntersectionType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\IterableType' => '/sebastian-type/type/IterableType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\MixedType' => '/sebastian-type/type/MixedType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\NeverType' => '/sebastian-type/type/NeverType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\NullType' => '/sebastian-type/type/NullType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\ObjectType' => '/sebastian-type/type/ObjectType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\Parameter' => '/sebastian-type/Parameter.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\ReflectionMapper' => '/sebastian-type/ReflectionMapper.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\RuntimeException' => '/sebastian-type/exception/RuntimeException.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\SimpleType' => '/sebastian-type/type/SimpleType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\StaticType' => '/sebastian-type/type/StaticType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\TrueType' => '/sebastian-type/type/TrueType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\Type' => '/sebastian-type/type/Type.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\TypeName' => '/sebastian-type/TypeName.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\UnionType' => '/sebastian-type/type/UnionType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\UnknownType' => '/sebastian-type/type/UnknownType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Type\\VoidType' => '/sebastian-type/type/VoidType.php', - 'PHPUnitPHAR\\SebastianBergmann\\Version' => '/sebastian-version/Version.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\Exception' => '/theseer-tokenizer/Exception.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\NamespaceUri' => '/theseer-tokenizer/NamespaceUri.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\NamespaceUriException' => '/theseer-tokenizer/NamespaceUriException.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\Token' => '/theseer-tokenizer/Token.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\TokenCollection' => '/theseer-tokenizer/TokenCollection.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\TokenCollectionException' => '/theseer-tokenizer/TokenCollectionException.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\Tokenizer' => '/theseer-tokenizer/Tokenizer.php', - 'PHPUnitPHAR\\TheSeer\\Tokenizer\\XMLSerializer' => '/theseer-tokenizer/XMLSerializer.php', - 'PHPUnitPHAR\\staabm\\SideEffectsDetector\\SideEffect' => '/staabm-side-effects-detector/SideEffect.php', - 'PHPUnitPHAR\\staabm\\SideEffectsDetector\\SideEffectsDetector' => '/staabm-side-effects-detector/SideEffectsDetector.php', - 'PHPUnit\\Event\\Application\\Finished' => '/phpunit/Event/Events/Application/Finished.php', - 'PHPUnit\\Event\\Application\\FinishedSubscriber' => '/phpunit/Event/Events/Application/FinishedSubscriber.php', - 'PHPUnit\\Event\\Application\\Started' => '/phpunit/Event/Events/Application/Started.php', - 'PHPUnit\\Event\\Application\\StartedSubscriber' => '/phpunit/Event/Events/Application/StartedSubscriber.php', - 'PHPUnit\\Event\\Code\\ClassMethod' => '/phpunit/Event/Value/ClassMethod.php', - 'PHPUnit\\Event\\Code\\ComparisonFailure' => '/phpunit/Event/Value/ComparisonFailure.php', - 'PHPUnit\\Event\\Code\\ComparisonFailureBuilder' => '/phpunit/Event/Value/ComparisonFailureBuilder.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\DirectTrigger' => '/phpunit/Event/Value/Test/Issue/DirectTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\IndirectTrigger' => '/phpunit/Event/Value/Test/Issue/IndirectTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\IssueTrigger' => '/phpunit/Event/Value/Test/Issue/IssueTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\SelfTrigger' => '/phpunit/Event/Value/Test/Issue/SelfTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\TestTrigger' => '/phpunit/Event/Value/Test/Issue/TestTrigger.php', - 'PHPUnit\\Event\\Code\\IssueTrigger\\UnknownTrigger' => '/phpunit/Event/Value/Test/Issue/UnknownTrigger.php', - 'PHPUnit\\Event\\Code\\NoTestCaseObjectOnCallStackException' => '/phpunit/Event/Exception/NoTestCaseObjectOnCallStackException.php', - 'PHPUnit\\Event\\Code\\Phpt' => '/phpunit/Event/Value/Test/Phpt.php', - 'PHPUnit\\Event\\Code\\Test' => '/phpunit/Event/Value/Test/Test.php', - 'PHPUnit\\Event\\Code\\TestCollection' => '/phpunit/Event/Value/Test/TestCollection.php', - 'PHPUnit\\Event\\Code\\TestCollectionIterator' => '/phpunit/Event/Value/Test/TestCollectionIterator.php', - 'PHPUnit\\Event\\Code\\TestDox' => '/phpunit/Event/Value/Test/TestDox.php', - 'PHPUnit\\Event\\Code\\TestDoxBuilder' => '/phpunit/Event/Value/Test/TestDoxBuilder.php', - 'PHPUnit\\Event\\Code\\TestMethod' => '/phpunit/Event/Value/Test/TestMethod.php', - 'PHPUnit\\Event\\Code\\TestMethodBuilder' => '/phpunit/Event/Value/Test/TestMethodBuilder.php', - 'PHPUnit\\Event\\Code\\Throwable' => '/phpunit/Event/Value/Throwable.php', - 'PHPUnit\\Event\\Code\\ThrowableBuilder' => '/phpunit/Event/Value/ThrowableBuilder.php', - 'PHPUnit\\Event\\CollectingDispatcher' => '/phpunit/Event/Dispatcher/CollectingDispatcher.php', - 'PHPUnit\\Event\\DeferringDispatcher' => '/phpunit/Event/Dispatcher/DeferringDispatcher.php', - 'PHPUnit\\Event\\DirectDispatcher' => '/phpunit/Event/Dispatcher/DirectDispatcher.php', - 'PHPUnit\\Event\\Dispatcher' => '/phpunit/Event/Dispatcher/Dispatcher.php', - 'PHPUnit\\Event\\DispatchingEmitter' => '/phpunit/Event/Emitter/DispatchingEmitter.php', - 'PHPUnit\\Event\\Emitter' => '/phpunit/Event/Emitter/Emitter.php', - 'PHPUnit\\Event\\Event' => '/phpunit/Event/Events/Event.php', - 'PHPUnit\\Event\\EventAlreadyAssignedException' => '/phpunit/Event/Exception/EventAlreadyAssignedException.php', - 'PHPUnit\\Event\\EventCollection' => '/phpunit/Event/Events/EventCollection.php', - 'PHPUnit\\Event\\EventCollectionIterator' => '/phpunit/Event/Events/EventCollectionIterator.php', - 'PHPUnit\\Event\\EventFacadeIsSealedException' => '/phpunit/Event/Exception/EventFacadeIsSealedException.php', - 'PHPUnit\\Event\\Exception' => '/phpunit/Event/Exception/Exception.php', - 'PHPUnit\\Event\\Facade' => '/phpunit/Event/Facade.php', - 'PHPUnit\\Event\\InvalidArgumentException' => '/phpunit/Event/Exception/InvalidArgumentException.php', - 'PHPUnit\\Event\\InvalidEventException' => '/phpunit/Event/Exception/InvalidEventException.php', - 'PHPUnit\\Event\\InvalidSubscriberException' => '/phpunit/Event/Exception/InvalidSubscriberException.php', - 'PHPUnit\\Event\\MapError' => '/phpunit/Event/Exception/MapError.php', - 'PHPUnit\\Event\\NoPreviousThrowableException' => '/phpunit/Event/Exception/NoPreviousThrowableException.php', - 'PHPUnit\\Event\\RuntimeException' => '/phpunit/Event/Exception/RuntimeException.php', - 'PHPUnit\\Event\\Runtime\\OperatingSystem' => '/phpunit/Event/Value/Runtime/OperatingSystem.php', - 'PHPUnit\\Event\\Runtime\\PHP' => '/phpunit/Event/Value/Runtime/PHP.php', - 'PHPUnit\\Event\\Runtime\\PHPUnit' => '/phpunit/Event/Value/Runtime/PHPUnit.php', - 'PHPUnit\\Event\\Runtime\\Runtime' => '/phpunit/Event/Value/Runtime/Runtime.php', - 'PHPUnit\\Event\\SubscribableDispatcher' => '/phpunit/Event/Dispatcher/SubscribableDispatcher.php', - 'PHPUnit\\Event\\Subscriber' => '/phpunit/Event/Subscriber.php', - 'PHPUnit\\Event\\SubscriberTypeAlreadyRegisteredException' => '/phpunit/Event/Exception/SubscriberTypeAlreadyRegisteredException.php', - 'PHPUnit\\Event\\Telemetry\\Duration' => '/phpunit/Event/Value/Telemetry/Duration.php', - 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatus' => '/phpunit/Event/Value/Telemetry/GarbageCollectorStatus.php', - 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/GarbageCollectorStatusProvider.php', - 'PHPUnit\\Event\\Telemetry\\HRTime' => '/phpunit/Event/Value/Telemetry/HRTime.php', - 'PHPUnit\\Event\\Telemetry\\Info' => '/phpunit/Event/Value/Telemetry/Info.php', - 'PHPUnit\\Event\\Telemetry\\MemoryMeter' => '/phpunit/Event/Value/Telemetry/MemoryMeter.php', - 'PHPUnit\\Event\\Telemetry\\MemoryUsage' => '/phpunit/Event/Value/Telemetry/MemoryUsage.php', - 'PHPUnit\\Event\\Telemetry\\Php81GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/Php81GarbageCollectorStatusProvider.php', - 'PHPUnit\\Event\\Telemetry\\Php83GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/Php83GarbageCollectorStatusProvider.php', - 'PHPUnit\\Event\\Telemetry\\Snapshot' => '/phpunit/Event/Value/Telemetry/Snapshot.php', - 'PHPUnit\\Event\\Telemetry\\StopWatch' => '/phpunit/Event/Value/Telemetry/StopWatch.php', - 'PHPUnit\\Event\\Telemetry\\System' => '/phpunit/Event/Value/Telemetry/System.php', - 'PHPUnit\\Event\\Telemetry\\SystemMemoryMeter' => '/phpunit/Event/Value/Telemetry/SystemMemoryMeter.php', - 'PHPUnit\\Event\\Telemetry\\SystemStopWatch' => '/phpunit/Event/Value/Telemetry/SystemStopWatch.php', - 'PHPUnit\\Event\\Telemetry\\SystemStopWatchWithOffset' => '/phpunit/Event/Value/Telemetry/SystemStopWatchWithOffset.php', - 'PHPUnit\\Event\\TestData\\DataFromDataProvider' => '/phpunit/Event/Value/Test/TestData/DataFromDataProvider.php', - 'PHPUnit\\Event\\TestData\\DataFromTestDependency' => '/phpunit/Event/Value/Test/TestData/DataFromTestDependency.php', - 'PHPUnit\\Event\\TestData\\NoDataSetFromDataProviderException' => '/phpunit/Event/Exception/NoDataSetFromDataProviderException.php', - 'PHPUnit\\Event\\TestData\\TestData' => '/phpunit/Event/Value/Test/TestData/TestData.php', - 'PHPUnit\\Event\\TestData\\TestDataCollection' => '/phpunit/Event/Value/Test/TestData/TestDataCollection.php', - 'PHPUnit\\Event\\TestData\\TestDataCollectionIterator' => '/phpunit/Event/Value/Test/TestData/TestDataCollectionIterator.php', - 'PHPUnit\\Event\\TestRunner\\BootstrapFinished' => '/phpunit/Event/Events/TestRunner/BootstrapFinished.php', - 'PHPUnit\\Event\\TestRunner\\BootstrapFinishedSubscriber' => '/phpunit/Event/Events/TestRunner/BootstrapFinishedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ChildProcessFinished' => '/phpunit/Event/Events/TestRunner/ChildProcessFinished.php', - 'PHPUnit\\Event\\TestRunner\\ChildProcessFinishedSubscriber' => '/phpunit/Event/Events/TestRunner/ChildProcessFinishedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ChildProcessStarted' => '/phpunit/Event/Events/TestRunner/ChildProcessStarted.php', - 'PHPUnit\\Event\\TestRunner\\ChildProcessStartedSubscriber' => '/phpunit/Event/Events/TestRunner/ChildProcessStartedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\Configured' => '/phpunit/Event/Events/TestRunner/Configured.php', - 'PHPUnit\\Event\\TestRunner\\ConfiguredSubscriber' => '/phpunit/Event/Events/TestRunner/ConfiguredSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\DeprecationTriggered' => '/phpunit/Event/Events/TestRunner/DeprecationTriggered.php', - 'PHPUnit\\Event\\TestRunner\\DeprecationTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/DeprecationTriggeredSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\EventFacadeSealed' => '/phpunit/Event/Events/TestRunner/EventFacadeSealed.php', - 'PHPUnit\\Event\\TestRunner\\EventFacadeSealedSubscriber' => '/phpunit/Event/Events/TestRunner/EventFacadeSealedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionAborted' => '/phpunit/Event/Events/TestRunner/ExecutionAborted.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionAbortedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionAbortedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionFinished' => '/phpunit/Event/Events/TestRunner/ExecutionFinished.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionFinishedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionFinishedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionStarted' => '/phpunit/Event/Events/TestRunner/ExecutionStarted.php', - 'PHPUnit\\Event\\TestRunner\\ExecutionStartedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionStartedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExtensionBootstrapped' => '/phpunit/Event/Events/TestRunner/ExtensionBootstrapped.php', - 'PHPUnit\\Event\\TestRunner\\ExtensionBootstrappedSubscriber' => '/phpunit/Event/Events/TestRunner/ExtensionBootstrappedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPhar' => '/phpunit/Event/Events/TestRunner/ExtensionLoadedFromPhar.php', - 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPharSubscriber' => '/phpunit/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\Finished' => '/phpunit/Event/Events/TestRunner/Finished.php', - 'PHPUnit\\Event\\TestRunner\\FinishedSubscriber' => '/phpunit/Event/Events/TestRunner/FinishedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabled' => '/phpunit/Event/Events/TestRunner/GarbageCollectionDisabled.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabledSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabled' => '/phpunit/Event/Events/TestRunner/GarbageCollectionEnabled.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabledSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggered' => '/phpunit/Event/Events/TestRunner/GarbageCollectionTriggered.php', - 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\Started' => '/phpunit/Event/Events/TestRunner/Started.php', - 'PHPUnit\\Event\\TestRunner\\StartedSubscriber' => '/phpunit/Event/Events/TestRunner/StartedSubscriber.php', - 'PHPUnit\\Event\\TestRunner\\WarningTriggered' => '/phpunit/Event/Events/TestRunner/WarningTriggered.php', - 'PHPUnit\\Event\\TestRunner\\WarningTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/WarningTriggeredSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Filtered' => '/phpunit/Event/Events/TestSuite/Filtered.php', - 'PHPUnit\\Event\\TestSuite\\FilteredSubscriber' => '/phpunit/Event/Events/TestSuite/FilteredSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Finished' => '/phpunit/Event/Events/TestSuite/Finished.php', - 'PHPUnit\\Event\\TestSuite\\FinishedSubscriber' => '/phpunit/Event/Events/TestSuite/FinishedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Loaded' => '/phpunit/Event/Events/TestSuite/Loaded.php', - 'PHPUnit\\Event\\TestSuite\\LoadedSubscriber' => '/phpunit/Event/Events/TestSuite/LoadedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Skipped' => '/phpunit/Event/Events/TestSuite/Skipped.php', - 'PHPUnit\\Event\\TestSuite\\SkippedSubscriber' => '/phpunit/Event/Events/TestSuite/SkippedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Sorted' => '/phpunit/Event/Events/TestSuite/Sorted.php', - 'PHPUnit\\Event\\TestSuite\\SortedSubscriber' => '/phpunit/Event/Events/TestSuite/SortedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\Started' => '/phpunit/Event/Events/TestSuite/Started.php', - 'PHPUnit\\Event\\TestSuite\\StartedSubscriber' => '/phpunit/Event/Events/TestSuite/StartedSubscriber.php', - 'PHPUnit\\Event\\TestSuite\\TestSuite' => '/phpunit/Event/Value/TestSuite/TestSuite.php', - 'PHPUnit\\Event\\TestSuite\\TestSuiteBuilder' => '/phpunit/Event/Value/TestSuite/TestSuiteBuilder.php', - 'PHPUnit\\Event\\TestSuite\\TestSuiteForTestClass' => '/phpunit/Event/Value/TestSuite/TestSuiteForTestClass.php', - 'PHPUnit\\Event\\TestSuite\\TestSuiteForTestMethodWithDataProvider' => '/phpunit/Event/Value/TestSuite/TestSuiteForTestMethodWithDataProvider.php', - 'PHPUnit\\Event\\TestSuite\\TestSuiteWithName' => '/phpunit/Event/Value/TestSuite/TestSuiteWithName.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodCalled' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalled.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodErrored' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodErrored.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodFinished' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinished.php', - 'PHPUnit\\Event\\Test\\AfterLastTestMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodCalled' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodCalled.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodErrored' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodErrored.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodFinished' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodFinished.php', - 'PHPUnit\\Event\\Test\\AfterTestMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/AfterTestMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodCalled' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalled.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodErrored' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErrored.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodFinished' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinished.php', - 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodCalled' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalled.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodErrored' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodErrored.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodFinished' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodFinished.php', - 'PHPUnit\\Event\\Test\\BeforeTestMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/BeforeTestMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\ComparatorRegistered' => '/phpunit/Event/Events/Test/ComparatorRegistered.php', - 'PHPUnit\\Event\\Test\\ComparatorRegisteredSubscriber' => '/phpunit/Event/Events/Test/ComparatorRegisteredSubscriber.php', - 'PHPUnit\\Event\\Test\\ConsideredRisky' => '/phpunit/Event/Events/Test/Issue/ConsideredRisky.php', - 'PHPUnit\\Event\\Test\\ConsideredRiskySubscriber' => '/phpunit/Event/Events/Test/Issue/ConsideredRiskySubscriber.php', - 'PHPUnit\\Event\\Test\\DataProviderMethodCalled' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalled.php', - 'PHPUnit\\Event\\Test\\DataProviderMethodCalledSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\DataProviderMethodFinished' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinished.php', - 'PHPUnit\\Event\\Test\\DataProviderMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\DeprecationTriggered' => '/phpunit/Event/Events/Test/Issue/DeprecationTriggered.php', - 'PHPUnit\\Event\\Test\\DeprecationTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\ErrorTriggered' => '/phpunit/Event/Events/Test/Issue/ErrorTriggered.php', - 'PHPUnit\\Event\\Test\\ErrorTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/ErrorTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\Errored' => '/phpunit/Event/Events/Test/Outcome/Errored.php', - 'PHPUnit\\Event\\Test\\ErroredSubscriber' => '/phpunit/Event/Events/Test/Outcome/ErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\Failed' => '/phpunit/Event/Events/Test/Outcome/Failed.php', - 'PHPUnit\\Event\\Test\\FailedSubscriber' => '/phpunit/Event/Events/Test/Outcome/FailedSubscriber.php', - 'PHPUnit\\Event\\Test\\Finished' => '/phpunit/Event/Events/Test/Lifecycle/Finished.php', - 'PHPUnit\\Event\\Test\\FinishedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/FinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\MarkedIncomplete' => '/phpunit/Event/Events/Test/Outcome/MarkedIncomplete.php', - 'PHPUnit\\Event\\Test\\MarkedIncompleteSubscriber' => '/phpunit/Event/Events/Test/Outcome/MarkedIncompleteSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectForAbstractClassCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectForAbstractClassCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectForIntersectionOfInterfacesCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectForIntersectionOfInterfacesCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectForTraitCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectForTraitCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\MockObjectFromWsdlCreated' => '/phpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreated.php', - 'PHPUnit\\Event\\Test\\MockObjectFromWsdlCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\NoComparisonFailureException' => '/phpunit/Event/Exception/NoComparisonFailureException.php', - 'PHPUnit\\Event\\Test\\NoticeTriggered' => '/phpunit/Event/Events/Test/Issue/NoticeTriggered.php', - 'PHPUnit\\Event\\Test\\NoticeTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/NoticeTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PartialMockObjectCreated' => '/phpunit/Event/Events/Test/TestDouble/PartialMockObjectCreated.php', - 'PHPUnit\\Event\\Test\\PartialMockObjectCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/PartialMockObjectCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\Passed' => '/phpunit/Event/Events/Test/Outcome/Passed.php', - 'PHPUnit\\Event\\Test\\PassedSubscriber' => '/phpunit/Event/Events/Test/Outcome/PassedSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpDeprecationTriggered' => '/phpunit/Event/Events/Test/Issue/PhpDeprecationTriggered.php', - 'PHPUnit\\Event\\Test\\PhpDeprecationTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpDeprecationTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpNoticeTriggered' => '/phpunit/Event/Events/Test/Issue/PhpNoticeTriggered.php', - 'PHPUnit\\Event\\Test\\PhpNoticeTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpNoticeTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpWarningTriggered' => '/phpunit/Event/Events/Test/Issue/PhpWarningTriggered.php', - 'PHPUnit\\Event\\Test\\PhpWarningTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpWarningTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpunitDeprecationTriggered' => '/phpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggered.php', - 'PHPUnit\\Event\\Test\\PhpunitDeprecationTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpunitErrorTriggered' => '/phpunit/Event/Events/Test/Issue/PhpunitErrorTriggered.php', - 'PHPUnit\\Event\\Test\\PhpunitErrorTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpunitErrorTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PhpunitWarningTriggered' => '/phpunit/Event/Events/Test/Issue/PhpunitWarningTriggered.php', - 'PHPUnit\\Event\\Test\\PhpunitWarningTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/PhpunitWarningTriggeredSubscriber.php', - 'PHPUnit\\Event\\Test\\PostConditionCalled' => '/phpunit/Event/Events/Test/HookMethod/PostConditionCalled.php', - 'PHPUnit\\Event\\Test\\PostConditionCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PostConditionCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\PostConditionErrored' => '/phpunit/Event/Events/Test/HookMethod/PostConditionErrored.php', - 'PHPUnit\\Event\\Test\\PostConditionErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PostConditionErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\PostConditionFinished' => '/phpunit/Event/Events/Test/HookMethod/PostConditionFinished.php', - 'PHPUnit\\Event\\Test\\PostConditionFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PostConditionFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\PreConditionCalled' => '/phpunit/Event/Events/Test/HookMethod/PreConditionCalled.php', - 'PHPUnit\\Event\\Test\\PreConditionCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php', - 'PHPUnit\\Event\\Test\\PreConditionErrored' => '/phpunit/Event/Events/Test/HookMethod/PreConditionErrored.php', - 'PHPUnit\\Event\\Test\\PreConditionErroredSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionErroredSubscriber.php', - 'PHPUnit\\Event\\Test\\PreConditionFinished' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php', - 'PHPUnit\\Event\\Test\\PreConditionFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.php', - 'PHPUnit\\Event\\Test\\PreparationFailed' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailed.php', - 'PHPUnit\\Event\\Test\\PreparationFailedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php', - 'PHPUnit\\Event\\Test\\PreparationStarted' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStarted.php', - 'PHPUnit\\Event\\Test\\PreparationStartedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php', - 'PHPUnit\\Event\\Test\\Prepared' => '/phpunit/Event/Events/Test/Lifecycle/Prepared.php', - 'PHPUnit\\Event\\Test\\PreparedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparedSubscriber.php', - 'PHPUnit\\Event\\Test\\PrintedUnexpectedOutput' => '/phpunit/Event/Events/Test/PrintedUnexpectedOutput.php', - 'PHPUnit\\Event\\Test\\PrintedUnexpectedOutputSubscriber' => '/phpunit/Event/Events/Test/PrintedUnexpectedOutputSubscriber.php', - 'PHPUnit\\Event\\Test\\Skipped' => '/phpunit/Event/Events/Test/Outcome/Skipped.php', - 'PHPUnit\\Event\\Test\\SkippedSubscriber' => '/phpunit/Event/Events/Test/Outcome/SkippedSubscriber.php', - 'PHPUnit\\Event\\Test\\TestProxyCreated' => '/phpunit/Event/Events/Test/TestDouble/TestProxyCreated.php', - 'PHPUnit\\Event\\Test\\TestProxyCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/TestProxyCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\TestStubCreated' => '/phpunit/Event/Events/Test/TestDouble/TestStubCreated.php', - 'PHPUnit\\Event\\Test\\TestStubCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/TestStubCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\TestStubForIntersectionOfInterfacesCreated' => '/phpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreated.php', - 'PHPUnit\\Event\\Test\\TestStubForIntersectionOfInterfacesCreatedSubscriber' => '/phpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreatedSubscriber.php', - 'PHPUnit\\Event\\Test\\WarningTriggered' => '/phpunit/Event/Events/Test/Issue/WarningTriggered.php', - 'PHPUnit\\Event\\Test\\WarningTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/WarningTriggeredSubscriber.php', - 'PHPUnit\\Event\\Tracer\\Tracer' => '/phpunit/Event/Tracer.php', - 'PHPUnit\\Event\\TypeMap' => '/phpunit/Event/TypeMap.php', - 'PHPUnit\\Event\\UnknownEventException' => '/phpunit/Event/Exception/UnknownEventException.php', - 'PHPUnit\\Event\\UnknownEventTypeException' => '/phpunit/Event/Exception/UnknownEventTypeException.php', - 'PHPUnit\\Event\\UnknownSubscriberException' => '/phpunit/Event/Exception/UnknownSubscriberException.php', - 'PHPUnit\\Event\\UnknownSubscriberTypeException' => '/phpunit/Event/Exception/UnknownSubscriberTypeException.php', - 'PHPUnit\\Exception' => '/phpunit/Exception.php', - 'PHPUnit\\Framework\\ActualValueIsNotAnObjectException' => '/phpunit/Framework/Exception/ObjectEquals/ActualValueIsNotAnObjectException.php', - 'PHPUnit\\Framework\\Assert' => '/phpunit/Framework/Assert.php', - 'PHPUnit\\Framework\\AssertionFailedError' => '/phpunit/Framework/Exception/AssertionFailedError.php', - 'PHPUnit\\Framework\\Attributes\\After' => '/phpunit/Framework/Attributes/After.php', - 'PHPUnit\\Framework\\Attributes\\AfterClass' => '/phpunit/Framework/Attributes/AfterClass.php', - 'PHPUnit\\Framework\\Attributes\\BackupGlobals' => '/phpunit/Framework/Attributes/BackupGlobals.php', - 'PHPUnit\\Framework\\Attributes\\BackupStaticProperties' => '/phpunit/Framework/Attributes/BackupStaticProperties.php', - 'PHPUnit\\Framework\\Attributes\\Before' => '/phpunit/Framework/Attributes/Before.php', - 'PHPUnit\\Framework\\Attributes\\BeforeClass' => '/phpunit/Framework/Attributes/BeforeClass.php', - 'PHPUnit\\Framework\\Attributes\\CoversClass' => '/phpunit/Framework/Attributes/CoversClass.php', - 'PHPUnit\\Framework\\Attributes\\CoversFunction' => '/phpunit/Framework/Attributes/CoversFunction.php', - 'PHPUnit\\Framework\\Attributes\\CoversMethod' => '/phpunit/Framework/Attributes/CoversMethod.php', - 'PHPUnit\\Framework\\Attributes\\CoversNothing' => '/phpunit/Framework/Attributes/CoversNothing.php', - 'PHPUnit\\Framework\\Attributes\\CoversTrait' => '/phpunit/Framework/Attributes/CoversTrait.php', - 'PHPUnit\\Framework\\Attributes\\DataProvider' => '/phpunit/Framework/Attributes/DataProvider.php', - 'PHPUnit\\Framework\\Attributes\\DataProviderExternal' => '/phpunit/Framework/Attributes/DataProviderExternal.php', - 'PHPUnit\\Framework\\Attributes\\Depends' => '/phpunit/Framework/Attributes/Depends.php', - 'PHPUnit\\Framework\\Attributes\\DependsExternal' => '/phpunit/Framework/Attributes/DependsExternal.php', - 'PHPUnit\\Framework\\Attributes\\DependsExternalUsingDeepClone' => '/phpunit/Framework/Attributes/DependsExternalUsingDeepClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsExternalUsingShallowClone' => '/phpunit/Framework/Attributes/DependsExternalUsingShallowClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsOnClass' => '/phpunit/Framework/Attributes/DependsOnClass.php', - 'PHPUnit\\Framework\\Attributes\\DependsOnClassUsingDeepClone' => '/phpunit/Framework/Attributes/DependsOnClassUsingDeepClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsOnClassUsingShallowClone' => '/phpunit/Framework/Attributes/DependsOnClassUsingShallowClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsUsingDeepClone' => '/phpunit/Framework/Attributes/DependsUsingDeepClone.php', - 'PHPUnit\\Framework\\Attributes\\DependsUsingShallowClone' => '/phpunit/Framework/Attributes/DependsUsingShallowClone.php', - 'PHPUnit\\Framework\\Attributes\\DisableReturnValueGenerationForTestDoubles' => '/phpunit/Framework/Attributes/DisableReturnValueGenerationForTestDoubles.php', - 'PHPUnit\\Framework\\Attributes\\DoesNotPerformAssertions' => '/phpunit/Framework/Attributes/DoesNotPerformAssertions.php', - 'PHPUnit\\Framework\\Attributes\\ExcludeGlobalVariableFromBackup' => '/phpunit/Framework/Attributes/ExcludeGlobalVariableFromBackup.php', - 'PHPUnit\\Framework\\Attributes\\ExcludeStaticPropertyFromBackup' => '/phpunit/Framework/Attributes/ExcludeStaticPropertyFromBackup.php', - 'PHPUnit\\Framework\\Attributes\\Group' => '/phpunit/Framework/Attributes/Group.php', - 'PHPUnit\\Framework\\Attributes\\IgnoreDeprecations' => '/phpunit/Framework/Attributes/IgnoreDeprecations.php', - 'PHPUnit\\Framework\\Attributes\\IgnorePhpunitDeprecations' => '/phpunit/Framework/Attributes/IgnorePhpunitDeprecations.php', - 'PHPUnit\\Framework\\Attributes\\Large' => '/phpunit/Framework/Attributes/Large.php', - 'PHPUnit\\Framework\\Attributes\\Medium' => '/phpunit/Framework/Attributes/Medium.php', - 'PHPUnit\\Framework\\Attributes\\PostCondition' => '/phpunit/Framework/Attributes/PostCondition.php', - 'PHPUnit\\Framework\\Attributes\\PreCondition' => '/phpunit/Framework/Attributes/PreCondition.php', - 'PHPUnit\\Framework\\Attributes\\PreserveGlobalState' => '/phpunit/Framework/Attributes/PreserveGlobalState.php', - 'PHPUnit\\Framework\\Attributes\\RequiresFunction' => '/phpunit/Framework/Attributes/RequiresFunction.php', - 'PHPUnit\\Framework\\Attributes\\RequiresMethod' => '/phpunit/Framework/Attributes/RequiresMethod.php', - 'PHPUnit\\Framework\\Attributes\\RequiresOperatingSystem' => '/phpunit/Framework/Attributes/RequiresOperatingSystem.php', - 'PHPUnit\\Framework\\Attributes\\RequiresOperatingSystemFamily' => '/phpunit/Framework/Attributes/RequiresOperatingSystemFamily.php', - 'PHPUnit\\Framework\\Attributes\\RequiresPhp' => '/phpunit/Framework/Attributes/RequiresPhp.php', - 'PHPUnit\\Framework\\Attributes\\RequiresPhpExtension' => '/phpunit/Framework/Attributes/RequiresPhpExtension.php', - 'PHPUnit\\Framework\\Attributes\\RequiresPhpunit' => '/phpunit/Framework/Attributes/RequiresPhpunit.php', - 'PHPUnit\\Framework\\Attributes\\RequiresPhpunitExtension' => '/phpunit/Framework/Attributes/RequiresPhpunitExtension.php', - 'PHPUnit\\Framework\\Attributes\\RequiresSetting' => '/phpunit/Framework/Attributes/RequiresSetting.php', - 'PHPUnit\\Framework\\Attributes\\RunClassInSeparateProcess' => '/phpunit/Framework/Attributes/RunClassInSeparateProcess.php', - 'PHPUnit\\Framework\\Attributes\\RunInSeparateProcess' => '/phpunit/Framework/Attributes/RunInSeparateProcess.php', - 'PHPUnit\\Framework\\Attributes\\RunTestsInSeparateProcesses' => '/phpunit/Framework/Attributes/RunTestsInSeparateProcesses.php', - 'PHPUnit\\Framework\\Attributes\\Small' => '/phpunit/Framework/Attributes/Small.php', - 'PHPUnit\\Framework\\Attributes\\Test' => '/phpunit/Framework/Attributes/Test.php', - 'PHPUnit\\Framework\\Attributes\\TestDox' => '/phpunit/Framework/Attributes/TestDox.php', - 'PHPUnit\\Framework\\Attributes\\TestWith' => '/phpunit/Framework/Attributes/TestWith.php', - 'PHPUnit\\Framework\\Attributes\\TestWithJson' => '/phpunit/Framework/Attributes/TestWithJson.php', - 'PHPUnit\\Framework\\Attributes\\Ticket' => '/phpunit/Framework/Attributes/Ticket.php', - 'PHPUnit\\Framework\\Attributes\\UsesClass' => '/phpunit/Framework/Attributes/UsesClass.php', - 'PHPUnit\\Framework\\Attributes\\UsesFunction' => '/phpunit/Framework/Attributes/UsesFunction.php', - 'PHPUnit\\Framework\\Attributes\\UsesMethod' => '/phpunit/Framework/Attributes/UsesMethod.php', - 'PHPUnit\\Framework\\Attributes\\UsesTrait' => '/phpunit/Framework/Attributes/UsesTrait.php', - 'PHPUnit\\Framework\\Attributes\\WithoutErrorHandler' => '/phpunit/Framework/Attributes/WithoutErrorHandler.php', - 'PHPUnit\\Framework\\CodeCoverageException' => '/phpunit/Framework/Exception/CodeCoverageException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareExactlyOneParameterException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareParameterTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotExistException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotExistException.php', - 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => '/phpunit/Framework/Constraint/Traversable/ArrayHasKey.php', - 'PHPUnit\\Framework\\Constraint\\BinaryOperator' => '/phpunit/Framework/Constraint/Operator/BinaryOperator.php', - 'PHPUnit\\Framework\\Constraint\\Callback' => '/phpunit/Framework/Constraint/Callback.php', - 'PHPUnit\\Framework\\Constraint\\Constraint' => '/phpunit/Framework/Constraint/Constraint.php', - 'PHPUnit\\Framework\\Constraint\\Count' => '/phpunit/Framework/Constraint/Cardinality/Count.php', - 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => '/phpunit/Framework/Constraint/Filesystem/DirectoryExists.php', - 'PHPUnit\\Framework\\Constraint\\Exception' => '/phpunit/Framework/Constraint/Exception/Exception.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => '/phpunit/Framework/Constraint/Exception/ExceptionCode.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessageIsOrContains' => '/phpunit/Framework/Constraint/Exception/ExceptionMessageIsOrContains.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessageMatchesRegularExpression' => '/phpunit/Framework/Constraint/Exception/ExceptionMessageMatchesRegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\FileExists' => '/phpunit/Framework/Constraint/Filesystem/FileExists.php', - 'PHPUnit\\Framework\\Constraint\\GreaterThan' => '/phpunit/Framework/Constraint/Cardinality/GreaterThan.php', - 'PHPUnit\\Framework\\Constraint\\IsAnything' => '/phpunit/Framework/Constraint/IsAnything.php', - 'PHPUnit\\Framework\\Constraint\\IsEmpty' => '/phpunit/Framework/Constraint/Cardinality/IsEmpty.php', - 'PHPUnit\\Framework\\Constraint\\IsEqual' => '/phpunit/Framework/Constraint/Equality/IsEqual.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualCanonicalizing' => '/phpunit/Framework/Constraint/Equality/IsEqualCanonicalizing.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualIgnoringCase' => '/phpunit/Framework/Constraint/Equality/IsEqualIgnoringCase.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualWithDelta' => '/phpunit/Framework/Constraint/Equality/IsEqualWithDelta.php', - 'PHPUnit\\Framework\\Constraint\\IsFalse' => '/phpunit/Framework/Constraint/Boolean/IsFalse.php', - 'PHPUnit\\Framework\\Constraint\\IsFinite' => '/phpunit/Framework/Constraint/Math/IsFinite.php', - 'PHPUnit\\Framework\\Constraint\\IsIdentical' => '/phpunit/Framework/Constraint/IsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\IsInfinite' => '/phpunit/Framework/Constraint/Math/IsInfinite.php', - 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => '/phpunit/Framework/Constraint/Type/IsInstanceOf.php', - 'PHPUnit\\Framework\\Constraint\\IsJson' => '/phpunit/Framework/Constraint/String/IsJson.php', - 'PHPUnit\\Framework\\Constraint\\IsList' => '/phpunit/Framework/Constraint/Traversable/IsList.php', - 'PHPUnit\\Framework\\Constraint\\IsNan' => '/phpunit/Framework/Constraint/Math/IsNan.php', - 'PHPUnit\\Framework\\Constraint\\IsNull' => '/phpunit/Framework/Constraint/Type/IsNull.php', - 'PHPUnit\\Framework\\Constraint\\IsReadable' => '/phpunit/Framework/Constraint/Filesystem/IsReadable.php', - 'PHPUnit\\Framework\\Constraint\\IsTrue' => '/phpunit/Framework/Constraint/Boolean/IsTrue.php', - 'PHPUnit\\Framework\\Constraint\\IsType' => '/phpunit/Framework/Constraint/Type/IsType.php', - 'PHPUnit\\Framework\\Constraint\\IsWritable' => '/phpunit/Framework/Constraint/Filesystem/IsWritable.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatches' => '/phpunit/Framework/Constraint/JsonMatches.php', - 'PHPUnit\\Framework\\Constraint\\LessThan' => '/phpunit/Framework/Constraint/Cardinality/LessThan.php', - 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => '/phpunit/Framework/Constraint/Operator/LogicalAnd.php', - 'PHPUnit\\Framework\\Constraint\\LogicalNot' => '/phpunit/Framework/Constraint/Operator/LogicalNot.php', - 'PHPUnit\\Framework\\Constraint\\LogicalOr' => '/phpunit/Framework/Constraint/Operator/LogicalOr.php', - 'PHPUnit\\Framework\\Constraint\\LogicalXor' => '/phpunit/Framework/Constraint/Operator/LogicalXor.php', - 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => '/phpunit/Framework/Constraint/Object/ObjectEquals.php', - 'PHPUnit\\Framework\\Constraint\\ObjectHasProperty' => '/phpunit/Framework/Constraint/Object/ObjectHasProperty.php', - 'PHPUnit\\Framework\\Constraint\\Operator' => '/phpunit/Framework/Constraint/Operator/Operator.php', - 'PHPUnit\\Framework\\Constraint\\RegularExpression' => '/phpunit/Framework/Constraint/String/RegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\SameSize' => '/phpunit/Framework/Constraint/Cardinality/SameSize.php', - 'PHPUnit\\Framework\\Constraint\\StringContains' => '/phpunit/Framework/Constraint/String/StringContains.php', - 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => '/phpunit/Framework/Constraint/String/StringEndsWith.php', - 'PHPUnit\\Framework\\Constraint\\StringEqualsStringIgnoringLineEndings' => '/phpunit/Framework/Constraint/String/StringEqualsStringIgnoringLineEndings.php', - 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => '/phpunit/Framework/Constraint/String/StringMatchesFormatDescription.php', - 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => '/phpunit/Framework/Constraint/String/StringStartsWith.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContains' => '/phpunit/Framework/Constraint/Traversable/TraversableContains.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => '/phpunit/Framework/Constraint/Traversable/TraversableContainsEqual.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => '/phpunit/Framework/Constraint/Traversable/TraversableContainsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => '/phpunit/Framework/Constraint/Traversable/TraversableContainsOnly.php', - 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => '/phpunit/Framework/Constraint/Operator/UnaryOperator.php', - 'PHPUnit\\Framework\\DataProviderTestSuite' => '/phpunit/Framework/DataProviderTestSuite.php', - 'PHPUnit\\Framework\\EmptyStringException' => '/phpunit/Framework/Exception/EmptyStringException.php', - 'PHPUnit\\Framework\\Exception' => '/phpunit/Framework/Exception/Exception.php', - 'PHPUnit\\Framework\\ExecutionOrderDependency' => '/phpunit/Framework/ExecutionOrderDependency.php', - 'PHPUnit\\Framework\\ExpectationFailedException' => '/phpunit/Framework/Exception/ExpectationFailedException.php', - 'PHPUnit\\Framework\\GeneratorNotSupportedException' => '/phpunit/Framework/Exception/GeneratorNotSupportedException.php', - 'PHPUnit\\Framework\\IncompleteTest' => '/phpunit/Framework/Exception/Incomplete/IncompleteTest.php', - 'PHPUnit\\Framework\\IncompleteTestError' => '/phpunit/Framework/Exception/Incomplete/IncompleteTestError.php', - 'PHPUnit\\Framework\\InvalidArgumentException' => '/phpunit/Framework/Exception/InvalidArgumentException.php', - 'PHPUnit\\Framework\\InvalidCoversTargetException' => '/phpunit/Framework/Exception/InvalidCoversTargetException.php', - 'PHPUnit\\Framework\\InvalidDataProviderException' => '/phpunit/Framework/Exception/InvalidDataProviderException.php', - 'PHPUnit\\Framework\\InvalidDependencyException' => '/phpunit/Framework/Exception/InvalidDependencyException.php', - 'PHPUnit\\Framework\\IsolatedTestRunner' => '/phpunit/Framework/TestRunner/IsolatedTestRunner.php', - 'PHPUnit\\Framework\\IsolatedTestRunnerRegistry' => '/phpunit/Framework/TestRunner/IsolatedTestRunnerRegistry.php', - 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => '/phpunit/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => '/phpunit/Framework/MockObject/Runtime/Builder/Identity.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => '/phpunit/Framework/MockObject/Runtime/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => '/phpunit/Framework/MockObject/Runtime/Builder/InvocationStubber.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => '/phpunit/Framework/MockObject/Runtime/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => '/phpunit/Framework/MockObject/Runtime/Builder/ParametersMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => '/phpunit/Framework/MockObject/Runtime/Builder/Stub.php', - 'PHPUnit\\Framework\\MockObject\\CannotCloneTestDoubleForReadonlyClassException' => '/phpunit/Framework/MockObject/Exception/CannotCloneTestDoubleForReadonlyClassException.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => '/phpunit/Framework/MockObject/ConfigurableMethod.php', - 'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\ErrorCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/ErrorCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\Exception' => '/phpunit/Framework/MockObject/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\GeneratedAsMockObject' => '/phpunit/Framework/MockObject/Runtime/Api/GeneratedAsMockObject.php', - 'PHPUnit\\Framework\\MockObject\\GeneratedAsTestStub' => '/phpunit/Framework/MockObject/Runtime/Api/GeneratedAsTestStub.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\CannotUseAddMethodsException' => '/phpunit/Framework/MockObject/Generator/Exception/CannotUseAddMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsFinalException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsFinalException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\DuplicateMethodException' => '/phpunit/Framework/MockObject/Generator/Exception/DuplicateMethodException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\Exception' => '/phpunit/Framework/MockObject/Generator/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\Generator' => '/phpunit/Framework/MockObject/Generator/Generator.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\HookedProperty' => '/phpunit/Framework/MockObject/Generator/HookedProperty.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\HookedPropertyGenerator' => '/phpunit/Framework/MockObject/Generator/HookedPropertyGenerator.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\InvalidMethodNameException' => '/phpunit/Framework/MockObject/Generator/Exception/InvalidMethodNameException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockClass' => '/phpunit/Framework/MockObject/Generator/MockClass.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockMethod' => '/phpunit/Framework/MockObject/Generator/MockMethod.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockMethodSet' => '/phpunit/Framework/MockObject/Generator/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockTrait' => '/phpunit/Framework/MockObject/Generator/MockTrait.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\MockType' => '/phpunit/Framework/MockObject/Generator/MockType.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\NameAlreadyInUseException' => '/phpunit/Framework/MockObject/Generator/Exception/NameAlreadyInUseException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\OriginalConstructorInvocationRequiredException' => '/phpunit/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\ReflectionException' => '/phpunit/Framework/MockObject/Generator/Exception/ReflectionException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\RuntimeException' => '/phpunit/Framework/MockObject/Generator/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\SoapExtensionNotAvailableException' => '/phpunit/Framework/MockObject/Generator/Exception/SoapExtensionNotAvailableException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\TemplateLoader' => '/phpunit/Framework/MockObject/Generator/TemplateLoader.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownClassException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownClassException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTraitException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownTraitException.php', - 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTypeException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownTypeException.php', - 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => '/phpunit/Framework/MockObject/Exception/IncompatibleReturnValueException.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => '/phpunit/Framework/MockObject/Runtime/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => '/phpunit/Framework/MockObject/Runtime/InvocationHandler.php', - 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => '/phpunit/Framework/MockObject/Exception/MatchBuilderNotFoundException.php', - 'PHPUnit\\Framework\\MockObject\\Matcher' => '/phpunit/Framework/MockObject/Runtime/Matcher.php', - 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => '/phpunit/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php', - 'PHPUnit\\Framework\\MockObject\\Method' => '/phpunit/Framework/MockObject/Runtime/Api/Method.php', - 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => '/phpunit/Framework/MockObject/Runtime/MethodNameConstraint.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodNameNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MockBuilder' => '/phpunit/Framework/MockObject/MockBuilder.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObject.php', - 'PHPUnit\\Framework\\MockObject\\MockObjectApi' => '/phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php', - 'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.php', - 'PHPUnit\\Framework\\MockObject\\MutableStubApi' => '/phpunit/Framework/MockObject/Runtime/Api/MutableStubApi.php', - 'PHPUnit\\Framework\\MockObject\\NeverReturningMethodException' => '/phpunit/Framework/MockObject/Exception/NeverReturningMethodException.php', - 'PHPUnit\\Framework\\MockObject\\NoMoreReturnValuesConfiguredException' => '/phpunit/Framework/MockObject/Exception/NoMoreReturnValuesConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => '/phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.php', - 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => '/phpunit/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => '/phpunit/Framework/MockObject/Runtime/Rule/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => '/phpunit/Framework/MockObject/Runtime/Rule/InvocationOrder.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => '/phpunit/Framework/MockObject/Runtime/Rule/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => '/phpunit/Framework/MockObject/Runtime/Rule/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => '/phpunit/Framework/MockObject/Runtime/Rule/ParametersRule.php', - 'PHPUnit\\Framework\\MockObject\\RuntimeException' => '/phpunit/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertyGetHook' => '/phpunit/Framework/MockObject/Runtime/PropertyHook/PropertyGetHook.php', - 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertyHook' => '/phpunit/Framework/MockObject/Runtime/PropertyHook/PropertyHook.php', - 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertySetHook' => '/phpunit/Framework/MockObject/Runtime/PropertyHook/PropertySetHook.php', - 'PHPUnit\\Framework\\MockObject\\Stub' => '/phpunit/Framework/MockObject/Runtime/Interface/Stub.php', - 'PHPUnit\\Framework\\MockObject\\StubApi' => '/phpunit/Framework/MockObject/Runtime/Api/StubApi.php', - 'PHPUnit\\Framework\\MockObject\\StubInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/StubInternal.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => '/phpunit/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => '/phpunit/Framework/MockObject/Runtime/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnArgument.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnCallback.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnReference.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnSelf.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => '/phpunit/Framework/MockObject/Runtime/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\TestDoubleState' => '/phpunit/Framework/MockObject/Runtime/Api/TestDoubleState.php', - 'PHPUnit\\Framework\\NativeType' => '/phpunit/Framework/NativeType.php', - 'PHPUnit\\Framework\\NoChildTestSuiteException' => '/phpunit/Framework/Exception/NoChildTestSuiteException.php', - 'PHPUnit\\Framework\\PhptAssertionFailedError' => '/phpunit/Framework/Exception/PhptAssertionFailedError.php', - 'PHPUnit\\Framework\\ProcessIsolationException' => '/phpunit/Framework/Exception/ProcessIsolationException.php', - 'PHPUnit\\Framework\\Reorderable' => '/phpunit/Framework/Reorderable.php', - 'PHPUnit\\Framework\\SelfDescribing' => '/phpunit/Framework/SelfDescribing.php', - 'PHPUnit\\Framework\\SeparateProcessTestRunner' => '/phpunit/Framework/TestRunner/SeparateProcessTestRunner.php', - 'PHPUnit\\Framework\\SkippedTest' => '/phpunit/Framework/Exception/Skipped/SkippedTest.php', - 'PHPUnit\\Framework\\SkippedTestSuiteError' => '/phpunit/Framework/Exception/Skipped/SkippedTestSuiteError.php', - 'PHPUnit\\Framework\\SkippedWithMessageException' => '/phpunit/Framework/Exception/Skipped/SkippedWithMessageException.php', - 'PHPUnit\\Framework\\Test' => '/phpunit/Framework/Test.php', - 'PHPUnit\\Framework\\TestBuilder' => '/phpunit/Framework/TestBuilder.php', - 'PHPUnit\\Framework\\TestCase' => '/phpunit/Framework/TestCase.php', - 'PHPUnit\\Framework\\TestRunner' => '/phpunit/Framework/TestRunner/TestRunner.php', - 'PHPUnit\\Framework\\TestSize\\Known' => '/phpunit/Framework/TestSize/Known.php', - 'PHPUnit\\Framework\\TestSize\\Large' => '/phpunit/Framework/TestSize/Large.php', - 'PHPUnit\\Framework\\TestSize\\Medium' => '/phpunit/Framework/TestSize/Medium.php', - 'PHPUnit\\Framework\\TestSize\\Small' => '/phpunit/Framework/TestSize/Small.php', - 'PHPUnit\\Framework\\TestSize\\TestSize' => '/phpunit/Framework/TestSize/TestSize.php', - 'PHPUnit\\Framework\\TestSize\\Unknown' => '/phpunit/Framework/TestSize/Unknown.php', - 'PHPUnit\\Framework\\TestStatus\\Deprecation' => '/phpunit/Framework/TestStatus/Deprecation.php', - 'PHPUnit\\Framework\\TestStatus\\Error' => '/phpunit/Framework/TestStatus/Error.php', - 'PHPUnit\\Framework\\TestStatus\\Failure' => '/phpunit/Framework/TestStatus/Failure.php', - 'PHPUnit\\Framework\\TestStatus\\Incomplete' => '/phpunit/Framework/TestStatus/Incomplete.php', - 'PHPUnit\\Framework\\TestStatus\\Known' => '/phpunit/Framework/TestStatus/Known.php', - 'PHPUnit\\Framework\\TestStatus\\Notice' => '/phpunit/Framework/TestStatus/Notice.php', - 'PHPUnit\\Framework\\TestStatus\\Risky' => '/phpunit/Framework/TestStatus/Risky.php', - 'PHPUnit\\Framework\\TestStatus\\Skipped' => '/phpunit/Framework/TestStatus/Skipped.php', - 'PHPUnit\\Framework\\TestStatus\\Success' => '/phpunit/Framework/TestStatus/Success.php', - 'PHPUnit\\Framework\\TestStatus\\TestStatus' => '/phpunit/Framework/TestStatus/TestStatus.php', - 'PHPUnit\\Framework\\TestStatus\\Unknown' => '/phpunit/Framework/TestStatus/Unknown.php', - 'PHPUnit\\Framework\\TestStatus\\Warning' => '/phpunit/Framework/TestStatus/Warning.php', - 'PHPUnit\\Framework\\TestSuite' => '/phpunit/Framework/TestSuite.php', - 'PHPUnit\\Framework\\TestSuiteIterator' => '/phpunit/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnknownClassOrInterfaceException' => '/phpunit/Framework/Exception/UnknownClassOrInterfaceException.php', - 'PHPUnit\\Framework\\UnknownTypeException' => '/phpunit/Framework/Exception/UnknownTypeException.php', - 'PHPUnit\\Logging\\EventLogger' => '/phpunit/Logging/EventLogger.php', - 'PHPUnit\\Logging\\JUnit\\JunitXmlLogger' => '/phpunit/Logging/JUnit/JunitXmlLogger.php', - 'PHPUnit\\Logging\\JUnit\\Subscriber' => '/phpunit/Logging/JUnit/Subscriber/Subscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestErroredSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestFailedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestPreparationFailedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparationFailedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestPreparationStartedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparationStartedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestPreparedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestPrintedUnexpectedOutputSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPrintedUnexpectedOutputSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestRunnerExecutionFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestSkippedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestSuiteFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestSuiteFinishedSubscriber.php', - 'PHPUnit\\Logging\\JUnit\\TestSuiteStartedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestSuiteStartedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\Subscriber' => '/phpunit/Logging/TeamCity/Subscriber/Subscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TeamCityLogger' => '/phpunit/Logging/TeamCity/TeamCityLogger.php', - 'PHPUnit\\Logging\\TeamCity\\TestConsideredRiskySubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestErroredSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestFailedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestFinishedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestPreparedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestRunnerExecutionFinishedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestRunnerExecutionFinishedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSkippedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSuiteBeforeFirstTestMethodErroredSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSuiteBeforeFirstTestMethodErroredSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSuiteFinishedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSuiteFinishedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSuiteSkippedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSuiteSkippedSubscriber.php', - 'PHPUnit\\Logging\\TeamCity\\TestSuiteStartedSubscriber' => '/phpunit/Logging/TeamCity/Subscriber/TestSuiteStartedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\HtmlRenderer' => '/phpunit/Logging/TestDox/HtmlRenderer.php', - 'PHPUnit\\Logging\\TestDox\\NamePrettifier' => '/phpunit/Logging/TestDox/NamePrettifier.php', - 'PHPUnit\\Logging\\TestDox\\PlainTextRenderer' => '/phpunit/Logging/TestDox/PlainTextRenderer.php', - 'PHPUnit\\Logging\\TestDox\\Subscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/Subscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestConsideredRiskySubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestErroredSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestFailedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestFinishedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestPassedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestPassedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestPreparedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestResult' => '/phpunit/Logging/TestDox/TestResult/TestResult.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollection' => '/phpunit/Logging/TestDox/TestResult/TestResultCollection.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollectionIterator' => '/phpunit/Logging/TestDox/TestResult/TestResultCollectionIterator.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollector' => '/phpunit/Logging/TestDox/TestResult/TestResultCollector.php', - 'PHPUnit\\Logging\\TestDox\\TestSkippedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredNoticeSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitErrorSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestTriggeredWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredWarningSubscriber.php', - 'PHPUnit\\Metadata\\After' => '/phpunit/Metadata/After.php', - 'PHPUnit\\Metadata\\AfterClass' => '/phpunit/Metadata/AfterClass.php', - 'PHPUnit\\Metadata\\Annotation\\Parser\\DocBlock' => '/phpunit/Metadata/Parser/Annotation/DocBlock.php', - 'PHPUnit\\Metadata\\Annotation\\Parser\\Registry' => '/phpunit/Metadata/Parser/Annotation/Registry.php', - 'PHPUnit\\Metadata\\AnnotationsAreNotSupportedForInternalClassesException' => '/phpunit/Metadata/Exception/AnnotationsAreNotSupportedForInternalClassesException.php', - 'PHPUnit\\Metadata\\Api\\CodeCoverage' => '/phpunit/Metadata/Api/CodeCoverage.php', - 'PHPUnit\\Metadata\\Api\\DataProvider' => '/phpunit/Metadata/Api/DataProvider.php', - 'PHPUnit\\Metadata\\Api\\Dependencies' => '/phpunit/Metadata/Api/Dependencies.php', - 'PHPUnit\\Metadata\\Api\\Groups' => '/phpunit/Metadata/Api/Groups.php', - 'PHPUnit\\Metadata\\Api\\HookMethods' => '/phpunit/Metadata/Api/HookMethods.php', - 'PHPUnit\\Metadata\\Api\\Requirements' => '/phpunit/Metadata/Api/Requirements.php', - 'PHPUnit\\Metadata\\BackupGlobals' => '/phpunit/Metadata/BackupGlobals.php', - 'PHPUnit\\Metadata\\BackupStaticProperties' => '/phpunit/Metadata/BackupStaticProperties.php', - 'PHPUnit\\Metadata\\Before' => '/phpunit/Metadata/Before.php', - 'PHPUnit\\Metadata\\BeforeClass' => '/phpunit/Metadata/BeforeClass.php', - 'PHPUnit\\Metadata\\Covers' => '/phpunit/Metadata/Covers.php', - 'PHPUnit\\Metadata\\CoversClass' => '/phpunit/Metadata/CoversClass.php', - 'PHPUnit\\Metadata\\CoversDefaultClass' => '/phpunit/Metadata/CoversDefaultClass.php', - 'PHPUnit\\Metadata\\CoversFunction' => '/phpunit/Metadata/CoversFunction.php', - 'PHPUnit\\Metadata\\CoversMethod' => '/phpunit/Metadata/CoversMethod.php', - 'PHPUnit\\Metadata\\CoversNothing' => '/phpunit/Metadata/CoversNothing.php', - 'PHPUnit\\Metadata\\CoversTrait' => '/phpunit/Metadata/CoversTrait.php', - 'PHPUnit\\Metadata\\DataProvider' => '/phpunit/Metadata/DataProvider.php', - 'PHPUnit\\Metadata\\DependsOnClass' => '/phpunit/Metadata/DependsOnClass.php', - 'PHPUnit\\Metadata\\DependsOnMethod' => '/phpunit/Metadata/DependsOnMethod.php', - 'PHPUnit\\Metadata\\DisableReturnValueGenerationForTestDoubles' => '/phpunit/Metadata/DisableReturnValueGenerationForTestDoubles.php', - 'PHPUnit\\Metadata\\DoesNotPerformAssertions' => '/phpunit/Metadata/DoesNotPerformAssertions.php', - 'PHPUnit\\Metadata\\Exception' => '/phpunit/Metadata/Exception/Exception.php', - 'PHPUnit\\Metadata\\ExcludeGlobalVariableFromBackup' => '/phpunit/Metadata/ExcludeGlobalVariableFromBackup.php', - 'PHPUnit\\Metadata\\ExcludeStaticPropertyFromBackup' => '/phpunit/Metadata/ExcludeStaticPropertyFromBackup.php', - 'PHPUnit\\Metadata\\Group' => '/phpunit/Metadata/Group.php', - 'PHPUnit\\Metadata\\IgnoreDeprecations' => '/phpunit/Metadata/IgnoreDeprecations.php', - 'PHPUnit\\Metadata\\IgnorePhpunitDeprecations' => '/phpunit/Metadata/IgnorePhpunitDeprecations.php', - 'PHPUnit\\Metadata\\InvalidVersionRequirementException' => '/phpunit/Metadata/Exception/InvalidVersionRequirementException.php', - 'PHPUnit\\Metadata\\Metadata' => '/phpunit/Metadata/Metadata.php', - 'PHPUnit\\Metadata\\MetadataCollection' => '/phpunit/Metadata/MetadataCollection.php', - 'PHPUnit\\Metadata\\MetadataCollectionIterator' => '/phpunit/Metadata/MetadataCollectionIterator.php', - 'PHPUnit\\Metadata\\NoVersionRequirementException' => '/phpunit/Metadata/Exception/NoVersionRequirementException.php', - 'PHPUnit\\Metadata\\Parser\\AnnotationParser' => '/phpunit/Metadata/Parser/AnnotationParser.php', - 'PHPUnit\\Metadata\\Parser\\AttributeParser' => '/phpunit/Metadata/Parser/AttributeParser.php', - 'PHPUnit\\Metadata\\Parser\\CachingParser' => '/phpunit/Metadata/Parser/CachingParser.php', - 'PHPUnit\\Metadata\\Parser\\Parser' => '/phpunit/Metadata/Parser/Parser.php', - 'PHPUnit\\Metadata\\Parser\\ParserChain' => '/phpunit/Metadata/Parser/ParserChain.php', - 'PHPUnit\\Metadata\\Parser\\Registry' => '/phpunit/Metadata/Parser/Registry.php', - 'PHPUnit\\Metadata\\PostCondition' => '/phpunit/Metadata/PostCondition.php', - 'PHPUnit\\Metadata\\PreCondition' => '/phpunit/Metadata/PreCondition.php', - 'PHPUnit\\Metadata\\PreserveGlobalState' => '/phpunit/Metadata/PreserveGlobalState.php', - 'PHPUnit\\Metadata\\ReflectionException' => '/phpunit/Metadata/Exception/ReflectionException.php', - 'PHPUnit\\Metadata\\RequiresFunction' => '/phpunit/Metadata/RequiresFunction.php', - 'PHPUnit\\Metadata\\RequiresMethod' => '/phpunit/Metadata/RequiresMethod.php', - 'PHPUnit\\Metadata\\RequiresOperatingSystem' => '/phpunit/Metadata/RequiresOperatingSystem.php', - 'PHPUnit\\Metadata\\RequiresOperatingSystemFamily' => '/phpunit/Metadata/RequiresOperatingSystemFamily.php', - 'PHPUnit\\Metadata\\RequiresPhp' => '/phpunit/Metadata/RequiresPhp.php', - 'PHPUnit\\Metadata\\RequiresPhpExtension' => '/phpunit/Metadata/RequiresPhpExtension.php', - 'PHPUnit\\Metadata\\RequiresPhpunit' => '/phpunit/Metadata/RequiresPhpunit.php', - 'PHPUnit\\Metadata\\RequiresPhpunitExtension' => '/phpunit/Metadata/RequiresPhpunitExtension.php', - 'PHPUnit\\Metadata\\RequiresSetting' => '/phpunit/Metadata/RequiresSetting.php', - 'PHPUnit\\Metadata\\RunClassInSeparateProcess' => '/phpunit/Metadata/RunClassInSeparateProcess.php', - 'PHPUnit\\Metadata\\RunInSeparateProcess' => '/phpunit/Metadata/RunInSeparateProcess.php', - 'PHPUnit\\Metadata\\RunTestsInSeparateProcesses' => '/phpunit/Metadata/RunTestsInSeparateProcesses.php', - 'PHPUnit\\Metadata\\Test' => '/phpunit/Metadata/Test.php', - 'PHPUnit\\Metadata\\TestDox' => '/phpunit/Metadata/TestDox.php', - 'PHPUnit\\Metadata\\TestWith' => '/phpunit/Metadata/TestWith.php', - 'PHPUnit\\Metadata\\Uses' => '/phpunit/Metadata/Uses.php', - 'PHPUnit\\Metadata\\UsesClass' => '/phpunit/Metadata/UsesClass.php', - 'PHPUnit\\Metadata\\UsesDefaultClass' => '/phpunit/Metadata/UsesDefaultClass.php', - 'PHPUnit\\Metadata\\UsesFunction' => '/phpunit/Metadata/UsesFunction.php', - 'PHPUnit\\Metadata\\UsesMethod' => '/phpunit/Metadata/UsesMethod.php', - 'PHPUnit\\Metadata\\UsesTrait' => '/phpunit/Metadata/UsesTrait.php', - 'PHPUnit\\Metadata\\Version\\ComparisonRequirement' => '/phpunit/Metadata/Version/ComparisonRequirement.php', - 'PHPUnit\\Metadata\\Version\\ConstraintRequirement' => '/phpunit/Metadata/Version/ConstraintRequirement.php', - 'PHPUnit\\Metadata\\Version\\Requirement' => '/phpunit/Metadata/Version/Requirement.php', - 'PHPUnit\\Metadata\\WithoutErrorHandler' => '/phpunit/Metadata/WithoutErrorHandler.php', - 'PHPUnit\\Runner\\Baseline\\Baseline' => '/phpunit/Runner/Baseline/Baseline.php', - 'PHPUnit\\Runner\\Baseline\\CannotLoadBaselineException' => '/phpunit/Runner/Baseline/Exception/CannotLoadBaselineException.php', - 'PHPUnit\\Runner\\Baseline\\FileDoesNotHaveLineException' => '/phpunit/Runner/Baseline/Exception/FileDoesNotHaveLineException.php', - 'PHPUnit\\Runner\\Baseline\\Generator' => '/phpunit/Runner/Baseline/Generator.php', - 'PHPUnit\\Runner\\Baseline\\Issue' => '/phpunit/Runner/Baseline/Issue.php', - 'PHPUnit\\Runner\\Baseline\\Reader' => '/phpunit/Runner/Baseline/Reader.php', - 'PHPUnit\\Runner\\Baseline\\RelativePathCalculator' => '/phpunit/Runner/Baseline/RelativePathCalculator.php', - 'PHPUnit\\Runner\\Baseline\\Subscriber' => '/phpunit/Runner/Baseline/Subscriber/Subscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\TestTriggeredWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.php', - 'PHPUnit\\Runner\\Baseline\\Writer' => '/phpunit/Runner/Baseline/Writer.php', - 'PHPUnit\\Runner\\ClassCannotBeFoundException' => '/phpunit/Runner/Exception/ClassCannotBeFoundException.php', - 'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => '/phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.php', - 'PHPUnit\\Runner\\ClassIsAbstractException' => '/phpunit/Runner/Exception/ClassIsAbstractException.php', - 'PHPUnit\\Runner\\CodeCoverage' => '/phpunit/Runner/CodeCoverage.php', - 'PHPUnit\\Runner\\DeprecationCollector\\Collector' => '/phpunit/Runner/DeprecationCollector/Collector.php', - 'PHPUnit\\Runner\\DeprecationCollector\\Facade' => '/phpunit/Runner/DeprecationCollector/Facade.php', - 'PHPUnit\\Runner\\DeprecationCollector\\Subscriber' => '/phpunit/Runner/DeprecationCollector/Subscriber/Subscriber.php', - 'PHPUnit\\Runner\\DeprecationCollector\\TestPreparedSubscriber' => '/phpunit/Runner/DeprecationCollector/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Runner\\DeprecationCollector\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/DeprecationCollector/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\Runner\\DirectoryDoesNotExistException' => '/phpunit/Runner/Exception/DirectoryDoesNotExistException.php', - 'PHPUnit\\Runner\\ErrorException' => '/phpunit/Runner/Exception/ErrorException.php', - 'PHPUnit\\Runner\\ErrorHandler' => '/phpunit/Runner/ErrorHandler.php', - 'PHPUnit\\Runner\\Exception' => '/phpunit/Runner/Exception/Exception.php', - 'PHPUnit\\Runner\\Extension\\Extension' => '/phpunit/Runner/Extension/Extension.php', - 'PHPUnit\\Runner\\Extension\\ExtensionBootstrapper' => '/phpunit/Runner/Extension/ExtensionBootstrapper.php', - 'PHPUnit\\Runner\\Extension\\Facade' => '/phpunit/Runner/Extension/Facade.php', - 'PHPUnit\\Runner\\Extension\\ParameterCollection' => '/phpunit/Runner/Extension/ParameterCollection.php', - 'PHPUnit\\Runner\\Extension\\PharLoader' => '/phpunit/Runner/Extension/PharLoader.php', - 'PHPUnit\\Runner\\FileDoesNotExistException' => '/phpunit/Runner/Exception/FileDoesNotExistException.php', - 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => '/phpunit/Runner/Filter/ExcludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\ExcludeNameFilterIterator' => '/phpunit/Runner/Filter/ExcludeNameFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\Factory' => '/phpunit/Runner/Filter/Factory.php', - 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => '/phpunit/Runner/Filter/GroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => '/phpunit/Runner/Filter/IncludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\IncludeNameFilterIterator' => '/phpunit/Runner/Filter/IncludeNameFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => '/phpunit/Runner/Filter/NameFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\TestIdFilterIterator' => '/phpunit/Runner/Filter/TestIdFilterIterator.php', - 'PHPUnit\\Runner\\GarbageCollection\\ExecutionFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php', - 'PHPUnit\\Runner\\GarbageCollection\\ExecutionStartedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php', - 'PHPUnit\\Runner\\GarbageCollection\\GarbageCollectionHandler' => '/phpunit/Runner/GarbageCollection/GarbageCollectionHandler.php', - 'PHPUnit\\Runner\\GarbageCollection\\Subscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/Subscriber.php', - 'PHPUnit\\Runner\\GarbageCollection\\TestFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Runner\\HookMethod' => '/phpunit/Runner/HookMethod/HookMethod.php', - 'PHPUnit\\Runner\\HookMethodCollection' => '/phpunit/Runner/HookMethod/HookMethodCollection.php', - 'PHPUnit\\Runner\\InvalidOrderException' => '/phpunit/Runner/Exception/InvalidOrderException.php', - 'PHPUnit\\Runner\\InvalidPhptFileException' => '/phpunit/Runner/Exception/InvalidPhptFileException.php', - 'PHPUnit\\Runner\\ParameterDoesNotExistException' => '/phpunit/Runner/Exception/ParameterDoesNotExistException.php', - 'PHPUnit\\Runner\\PhptExternalFileCannotBeLoadedException' => '/phpunit/Runner/Exception/PhptExternalFileCannotBeLoadedException.php', - 'PHPUnit\\Runner\\PhptTestCase' => '/phpunit/Runner/PHPT/PhptTestCase.php', - 'PHPUnit\\Runner\\ResultCache\\DefaultResultCache' => '/phpunit/Runner/ResultCache/DefaultResultCache.php', - 'PHPUnit\\Runner\\ResultCache\\NullResultCache' => '/phpunit/Runner/ResultCache/NullResultCache.php', - 'PHPUnit\\Runner\\ResultCache\\ResultCache' => '/phpunit/Runner/ResultCache/ResultCache.php', - 'PHPUnit\\Runner\\ResultCache\\ResultCacheHandler' => '/phpunit/Runner/ResultCache/ResultCacheHandler.php', - 'PHPUnit\\Runner\\ResultCache\\Subscriber' => '/phpunit/Runner/ResultCache/Subscriber/Subscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestConsideredRiskySubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestErroredSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestFailedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestFinishedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestMarkedIncompleteSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestPreparedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestSkippedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestSuiteFinishedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestSuiteFinishedSubscriber.php', - 'PHPUnit\\Runner\\ResultCache\\TestSuiteStartedSubscriber' => '/phpunit/Runner/ResultCache/Subscriber/TestSuiteStartedSubscriber.php', - 'PHPUnit\\Runner\\TestSuiteLoader' => '/phpunit/Runner/TestSuiteLoader.php', - 'PHPUnit\\Runner\\TestSuiteSorter' => '/phpunit/Runner/TestSuiteSorter.php', - 'PHPUnit\\Runner\\UnsupportedPhptSectionException' => '/phpunit/Runner/Exception/UnsupportedPhptSectionException.php', - 'PHPUnit\\Runner\\Version' => '/phpunit/Runner/Version.php', - 'PHPUnit\\TestRunner\\IssueFilter' => '/phpunit/Runner/IssueFilter.php', - 'PHPUnit\\TestRunner\\TestResult\\AfterTestClassMethodErroredSubscriber' => '/phpunit/Runner/TestResult/Subscriber/AfterTestClassMethodErroredSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\BeforeTestClassMethodErroredSubscriber' => '/phpunit/Runner/TestResult/Subscriber/BeforeTestClassMethodErroredSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\Collector' => '/phpunit/Runner/TestResult/Collector.php', - 'PHPUnit\\TestRunner\\TestResult\\ExecutionStartedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\Facade' => '/phpunit/Runner/TestResult/Facade.php', - 'PHPUnit\\TestRunner\\TestResult\\Issues\\Issue' => '/phpunit/Runner/TestResult/Issue.php', - 'PHPUnit\\TestRunner\\TestResult\\PassedTests' => '/phpunit/Runner/TestResult/PassedTests.php', - 'PHPUnit\\TestRunner\\TestResult\\Subscriber' => '/phpunit/Runner/TestResult/Subscriber/Subscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestConsideredRiskySubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestErroredSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestFailedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestFinishedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestMarkedIncompleteSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestPreparedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestResult' => '/phpunit/Runner/TestResult/TestResult.php', - 'PHPUnit\\TestRunner\\TestResult\\TestRunnerTriggeredDeprecationSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredDeprecationSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestRunnerTriggeredWarningSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredWarningSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestSkippedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestSuiteFinishedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestSuiteFinishedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestSuiteSkippedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestSuiteSkippedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestSuiteStartedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestSuiteStartedSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredErrorSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredErrorSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredNoticeSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitDeprecationSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitErrorSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', - 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredWarningSubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.php', - 'PHPUnit\\TextUI\\Application' => '/phpunit/TextUI/Application.php', - 'PHPUnit\\TextUI\\CannotOpenSocketException' => '/phpunit/TextUI/Exception/CannotOpenSocketException.php', - 'PHPUnit\\TextUI\\CliArguments\\Builder' => '/phpunit/TextUI/Configuration/Cli/Builder.php', - 'PHPUnit\\TextUI\\CliArguments\\Configuration' => '/phpunit/TextUI/Configuration/Cli/Configuration.php', - 'PHPUnit\\TextUI\\CliArguments\\Exception' => '/phpunit/TextUI/Configuration/Cli/Exception.php', - 'PHPUnit\\TextUI\\CliArguments\\XmlConfigurationFileFinder' => '/phpunit/TextUI/Configuration/Cli/XmlConfigurationFileFinder.php', - 'PHPUnit\\TextUI\\Command\\AtLeastVersionCommand' => '/phpunit/TextUI/Command/Commands/AtLeastVersionCommand.php', - 'PHPUnit\\TextUI\\Command\\Command' => '/phpunit/TextUI/Command/Command.php', - 'PHPUnit\\TextUI\\Command\\GenerateConfigurationCommand' => '/phpunit/TextUI/Command/Commands/GenerateConfigurationCommand.php', - 'PHPUnit\\TextUI\\Command\\ListGroupsCommand' => '/phpunit/TextUI/Command/Commands/ListGroupsCommand.php', - 'PHPUnit\\TextUI\\Command\\ListTestFilesCommand' => '/phpunit/TextUI/Command/Commands/ListTestFilesCommand.php', - 'PHPUnit\\TextUI\\Command\\ListTestSuitesCommand' => '/phpunit/TextUI/Command/Commands/ListTestSuitesCommand.php', - 'PHPUnit\\TextUI\\Command\\ListTestsAsTextCommand' => '/phpunit/TextUI/Command/Commands/ListTestsAsTextCommand.php', - 'PHPUnit\\TextUI\\Command\\ListTestsAsXmlCommand' => '/phpunit/TextUI/Command/Commands/ListTestsAsXmlCommand.php', - 'PHPUnit\\TextUI\\Command\\MigrateConfigurationCommand' => '/phpunit/TextUI/Command/Commands/MigrateConfigurationCommand.php', - 'PHPUnit\\TextUI\\Command\\Result' => '/phpunit/TextUI/Command/Result.php', - 'PHPUnit\\TextUI\\Command\\ShowHelpCommand' => '/phpunit/TextUI/Command/Commands/ShowHelpCommand.php', - 'PHPUnit\\TextUI\\Command\\ShowVersionCommand' => '/phpunit/TextUI/Command/Commands/ShowVersionCommand.php', - 'PHPUnit\\TextUI\\Command\\VersionCheckCommand' => '/phpunit/TextUI/Command/Commands/VersionCheckCommand.php', - 'PHPUnit\\TextUI\\Command\\WarmCodeCoverageCacheCommand' => '/phpunit/TextUI/Command/Commands/WarmCodeCoverageCacheCommand.php', - 'PHPUnit\\TextUI\\Configuration\\Builder' => '/phpunit/TextUI/Configuration/Builder.php', - 'PHPUnit\\TextUI\\Configuration\\CodeCoverageFilterRegistry' => '/phpunit/TextUI/Configuration/CodeCoverageFilterRegistry.php', - 'PHPUnit\\TextUI\\Configuration\\CodeCoverageReportNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/CodeCoverageReportNotConfiguredException.php', - 'PHPUnit\\TextUI\\Configuration\\Configuration' => '/phpunit/TextUI/Configuration/Configuration.php', - 'PHPUnit\\TextUI\\Configuration\\ConfigurationCannotBeBuiltException' => '/phpunit/TextUI/Configuration/Exception/ConfigurationCannotBeBuiltException.php', - 'PHPUnit\\TextUI\\Configuration\\Constant' => '/phpunit/TextUI/Configuration/Value/Constant.php', - 'PHPUnit\\TextUI\\Configuration\\ConstantCollection' => '/phpunit/TextUI/Configuration/Value/ConstantCollection.php', - 'PHPUnit\\TextUI\\Configuration\\ConstantCollectionIterator' => '/phpunit/TextUI/Configuration/Value/ConstantCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\Directory' => '/phpunit/TextUI/Configuration/Value/Directory.php', - 'PHPUnit\\TextUI\\Configuration\\DirectoryCollection' => '/phpunit/TextUI/Configuration/Value/DirectoryCollection.php', - 'PHPUnit\\TextUI\\Configuration\\DirectoryCollectionIterator' => '/phpunit/TextUI/Configuration/Value/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\Exception' => '/phpunit/TextUI/Configuration/Exception/Exception.php', - 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrap' => '/phpunit/TextUI/Configuration/Value/ExtensionBootstrap.php', - 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrapCollection' => '/phpunit/TextUI/Configuration/Value/ExtensionBootstrapCollection.php', - 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrapCollectionIterator' => '/phpunit/TextUI/Configuration/Value/ExtensionBootstrapCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\File' => '/phpunit/TextUI/Configuration/Value/File.php', - 'PHPUnit\\TextUI\\Configuration\\FileCollection' => '/phpunit/TextUI/Configuration/Value/FileCollection.php', - 'PHPUnit\\TextUI\\Configuration\\FileCollectionIterator' => '/phpunit/TextUI/Configuration/Value/FileCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\FilterDirectory' => '/phpunit/TextUI/Configuration/Value/FilterDirectory.php', - 'PHPUnit\\TextUI\\Configuration\\FilterDirectoryCollection' => '/phpunit/TextUI/Configuration/Value/FilterDirectoryCollection.php', - 'PHPUnit\\TextUI\\Configuration\\FilterDirectoryCollectionIterator' => '/phpunit/TextUI/Configuration/Value/FilterDirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\FilterNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/FilterNotConfiguredException.php', - 'PHPUnit\\TextUI\\Configuration\\Group' => '/phpunit/TextUI/Configuration/Value/Group.php', - 'PHPUnit\\TextUI\\Configuration\\GroupCollection' => '/phpunit/TextUI/Configuration/Value/GroupCollection.php', - 'PHPUnit\\TextUI\\Configuration\\GroupCollectionIterator' => '/phpunit/TextUI/Configuration/Value/GroupCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\IniSetting' => '/phpunit/TextUI/Configuration/Value/IniSetting.php', - 'PHPUnit\\TextUI\\Configuration\\IniSettingCollection' => '/phpunit/TextUI/Configuration/Value/IniSettingCollection.php', - 'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => '/phpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\LoggingNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.php', - 'PHPUnit\\TextUI\\Configuration\\Merger' => '/phpunit/TextUI/Configuration/Merger.php', - 'PHPUnit\\TextUI\\Configuration\\NoBaselineException' => '/phpunit/TextUI/Configuration/Exception/NoBaselineException.php', - 'PHPUnit\\TextUI\\Configuration\\NoBootstrapException' => '/phpunit/TextUI/Configuration/Exception/NoBootstrapException.php', - 'PHPUnit\\TextUI\\Configuration\\NoCacheDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.php', - 'PHPUnit\\TextUI\\Configuration\\NoConfigurationFileException' => '/phpunit/TextUI/Configuration/Exception/NoConfigurationFileException.php', - 'PHPUnit\\TextUI\\Configuration\\NoCoverageCacheDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoCoverageCacheDirectoryException.php', - 'PHPUnit\\TextUI\\Configuration\\NoCustomCssFileException' => '/phpunit/TextUI/Configuration/Exception/NoCustomCssFileException.php', - 'PHPUnit\\TextUI\\Configuration\\NoDefaultTestSuiteException' => '/phpunit/TextUI/Configuration/Exception/NoDefaultTestSuiteException.php', - 'PHPUnit\\TextUI\\Configuration\\NoPharExtensionDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoPharExtensionDirectoryException.php', - 'PHPUnit\\TextUI\\Configuration\\Php' => '/phpunit/TextUI/Configuration/Value/Php.php', - 'PHPUnit\\TextUI\\Configuration\\PhpHandler' => '/phpunit/TextUI/Configuration/PhpHandler.php', - 'PHPUnit\\TextUI\\Configuration\\Registry' => '/phpunit/TextUI/Configuration/Registry.php', - 'PHPUnit\\TextUI\\Configuration\\Source' => '/phpunit/TextUI/Configuration/Value/Source.php', - 'PHPUnit\\TextUI\\Configuration\\SourceFilter' => '/phpunit/TextUI/Configuration/SourceFilter.php', - 'PHPUnit\\TextUI\\Configuration\\SourceMapper' => '/phpunit/TextUI/Configuration/SourceMapper.php', - 'PHPUnit\\TextUI\\Configuration\\SpecificDeprecationToStopOnNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/SpecificDeprecationToStopOnNotConfiguredException.php', - 'PHPUnit\\TextUI\\Configuration\\TestDirectory' => '/phpunit/TextUI/Configuration/Value/TestDirectory.php', - 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollection' => '/phpunit/TextUI/Configuration/Value/TestDirectoryCollection.php', - 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollectionIterator' => '/phpunit/TextUI/Configuration/Value/TestDirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\TestFile' => '/phpunit/TextUI/Configuration/Value/TestFile.php', - 'PHPUnit\\TextUI\\Configuration\\TestFileCollection' => '/phpunit/TextUI/Configuration/Value/TestFileCollection.php', - 'PHPUnit\\TextUI\\Configuration\\TestFileCollectionIterator' => '/phpunit/TextUI/Configuration/Value/TestFileCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\TestSuite' => '/phpunit/TextUI/Configuration/Value/TestSuite.php', - 'PHPUnit\\TextUI\\Configuration\\TestSuiteBuilder' => '/phpunit/TextUI/Configuration/TestSuiteBuilder.php', - 'PHPUnit\\TextUI\\Configuration\\TestSuiteCollection' => '/phpunit/TextUI/Configuration/Value/TestSuiteCollection.php', - 'PHPUnit\\TextUI\\Configuration\\TestSuiteCollectionIterator' => '/phpunit/TextUI/Configuration/Value/TestSuiteCollectionIterator.php', - 'PHPUnit\\TextUI\\Configuration\\Variable' => '/phpunit/TextUI/Configuration/Value/Variable.php', - 'PHPUnit\\TextUI\\Configuration\\VariableCollection' => '/phpunit/TextUI/Configuration/Value/VariableCollection.php', - 'PHPUnit\\TextUI\\Configuration\\VariableCollectionIterator' => '/phpunit/TextUI/Configuration/Value/VariableCollectionIterator.php', - 'PHPUnit\\TextUI\\Exception' => '/phpunit/TextUI/Exception/Exception.php', - 'PHPUnit\\TextUI\\Help' => '/phpunit/TextUI/Help.php', - 'PHPUnit\\TextUI\\InvalidSocketException' => '/phpunit/TextUI/Exception/InvalidSocketException.php', - 'PHPUnit\\TextUI\\Output\\DefaultPrinter' => '/phpunit/TextUI/Output/Printer/DefaultPrinter.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\BeforeTestClassMethodErroredSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\ProgressPrinter' => '/phpunit/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\Subscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/Subscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestConsideredRiskySubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestErroredSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFailedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFinishedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestMarkedIncompleteSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestPreparedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestRunnerExecutionStartedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestRunnerExecutionStartedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestSkippedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestSkippedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredDeprecationSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredErrorSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredErrorSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredNoticeSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredNoticeSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpNoticeSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpWarningSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredWarningSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ResultPrinter' => '/phpunit/TextUI/Output/Default/ResultPrinter.php', - 'PHPUnit\\TextUI\\Output\\Default\\UnexpectedOutputPrinter' => '/phpunit/TextUI/Output/Default/UnexpectedOutputPrinter.php', - 'PHPUnit\\TextUI\\Output\\Facade' => '/phpunit/TextUI/Output/Facade.php', - 'PHPUnit\\TextUI\\Output\\NullPrinter' => '/phpunit/TextUI/Output/Printer/NullPrinter.php', - 'PHPUnit\\TextUI\\Output\\Printer' => '/phpunit/TextUI/Output/Printer/Printer.php', - 'PHPUnit\\TextUI\\Output\\SummaryPrinter' => '/phpunit/TextUI/Output/SummaryPrinter.php', - 'PHPUnit\\TextUI\\Output\\TestDox\\ResultPrinter' => '/phpunit/TextUI/Output/TestDox/ResultPrinter.php', - 'PHPUnit\\TextUI\\RuntimeException' => '/phpunit/TextUI/Exception/RuntimeException.php', - 'PHPUnit\\TextUI\\ShellExitCodeCalculator' => '/phpunit/TextUI/ShellExitCodeCalculator.php', - 'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => '/phpunit/TextUI/Exception/TestDirectoryNotFoundException.php', - 'PHPUnit\\TextUI\\TestFileNotFoundException' => '/phpunit/TextUI/Exception/TestFileNotFoundException.php', - 'PHPUnit\\TextUI\\TestRunner' => '/phpunit/TextUI/TestRunner.php', - 'PHPUnit\\TextUI\\TestSuiteFilterProcessor' => '/phpunit/TextUI/TestSuiteFilterProcessor.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CannotFindSchemaException' => '/phpunit/TextUI/Configuration/Exception/CannotFindSchemaException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Crap4j' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Crap4j.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Html' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Php' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Text' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Xml' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Configuration' => '/phpunit/TextUI/Configuration/Xml/Configuration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConvertLogTypes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/ConvertLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCloverToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCloverToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCrap4jToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCrap4jToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageHtmlToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageHtmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoveragePhpToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoveragePhpToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageTextToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageTextToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DefaultConfiguration' => '/phpunit/TextUI/Configuration/Xml/DefaultConfiguration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => '/phpunit/TextUI/Configuration/Xml/Exception.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FailedSchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => '/phpunit/TextUI/Configuration/Xml/Generator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => '/phpunit/TextUI/Configuration/Xml/Groups.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCacheDirectoryAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCoverageElement' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCoverageElement.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\LoadedFromFileConfiguration' => '/phpunit/TextUI/Configuration/Xml/LoadedFromFileConfiguration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Loader' => '/phpunit/TextUI/Configuration/Xml/Loader.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\LogToReportMigration' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/LogToReportMigration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Junit' => '/phpunit/TextUI/Configuration/Xml/Logging/Junit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Logging' => '/phpunit/TextUI/Configuration/Xml/Logging/Logging.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TeamCity' => '/phpunit/TextUI/Configuration/Xml/Logging/TeamCity.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Html' => '/phpunit/TextUI/Configuration/Xml/Logging/TestDox/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => '/phpunit/TextUI/Configuration/Xml/Logging/TestDox/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/Migration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => '/phpunit/TextUI/Configuration/Xml/Migration/MigrationBuilder.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => '/phpunit/TextUI/Configuration/Xml/Migration/MigrationException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveCoverageDirectoriesToSource' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveCoverageDirectoriesToSource.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistIncludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => '/phpunit/TextUI/Configuration/Xml/PHPUnit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutTodoAnnotatedTestsAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheResultFileAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheResultFileAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheTokensAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheTokensAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveConversionToExceptionsAttributes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveConversionToExceptionsAttributes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementCacheDirectoryAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementCacheDirectoryAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementIncludeUncoveredFilesAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementIncludeUncoveredFilesAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementProcessUncoveredFilesAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementProcessUncoveredFilesAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveEmptyFilter' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveEmptyFilter.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveListeners' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveListeners.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLogTypes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLoggingElements' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLoggingElements.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveNoInteractionAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveNoInteractionAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemovePrinterAttributes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemovePrinterAttributes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveRegisterMockObjectsFromTestArgumentsRecursivelyAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveRegisterMockObjectsFromTestArgumentsRecursivelyAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveTestDoxGroupsElement' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestDoxGroupsElement.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveTestSuiteLoaderAttributes' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestSuiteLoaderAttributes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveVerboseAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveVerboseAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBackupStaticAttributesAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBeStrictAboutCoversAnnotationAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RenameForceCoversAnnotationAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ReplaceRestrictDeprecationsWithIgnoreDeprecations' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/ReplaceRestrictDeprecationsWithIgnoreDeprecations.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetector' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaFinder' => '/phpunit/TextUI/Configuration/Xml/SchemaFinder.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SnapshotNodeList' => '/phpunit/TextUI/Configuration/Xml/Migration/SnapshotNodeList.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\SuccessfulSchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteMapper' => '/phpunit/TextUI/Configuration/Xml/TestSuiteMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocation' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ValidationResult' => '/phpunit/TextUI/Configuration/Xml/Validator/ValidationResult.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Validator' => '/phpunit/TextUI/Configuration/Xml/Validator/Validator.php', - 'PHPUnit\\Util\\Cloner' => '/phpunit/Util/Cloner.php', - 'PHPUnit\\Util\\Color' => '/phpunit/Util/Color.php', - 'PHPUnit\\Util\\Exception' => '/phpunit/Util/Exception/Exception.php', - 'PHPUnit\\Util\\ExcludeList' => '/phpunit/Util/ExcludeList.php', - 'PHPUnit\\Util\\Exporter' => '/phpunit/Util/Exporter.php', - 'PHPUnit\\Util\\Filesystem' => '/phpunit/Util/Filesystem.php', - 'PHPUnit\\Util\\Filter' => '/phpunit/Util/Filter.php', - 'PHPUnit\\Util\\GlobalState' => '/phpunit/Util/GlobalState.php', - 'PHPUnit\\Util\\Http\\Downloader' => '/phpunit/Util/Http/Downloader.php', - 'PHPUnit\\Util\\Http\\PhpDownloader' => '/phpunit/Util/Http/PhpDownloader.php', - 'PHPUnit\\Util\\InvalidDirectoryException' => '/phpunit/Util/Exception/InvalidDirectoryException.php', - 'PHPUnit\\Util\\InvalidJsonException' => '/phpunit/Util/Exception/InvalidJsonException.php', - 'PHPUnit\\Util\\InvalidVersionOperatorException' => '/phpunit/Util/Exception/InvalidVersionOperatorException.php', - 'PHPUnit\\Util\\Json' => '/phpunit/Util/Json.php', - 'PHPUnit\\Util\\PHP\\DefaultJobRunner' => '/phpunit/Util/PHP/DefaultJobRunner.php', - 'PHPUnit\\Util\\PHP\\Job' => '/phpunit/Util/PHP/Job.php', - 'PHPUnit\\Util\\PHP\\JobRunner' => '/phpunit/Util/PHP/JobRunner.php', - 'PHPUnit\\Util\\PHP\\JobRunnerRegistry' => '/phpunit/Util/PHP/JobRunnerRegistry.php', - 'PHPUnit\\Util\\PHP\\PhpProcessException' => '/phpunit/Util/Exception/PhpProcessException.php', - 'PHPUnit\\Util\\PHP\\Result' => '/phpunit/Util/PHP/Result.php', - 'PHPUnit\\Util\\Reflection' => '/phpunit/Util/Reflection.php', - 'PHPUnit\\Util\\Test' => '/phpunit/Util/Test.php', - 'PHPUnit\\Util\\ThrowableToStringMapper' => '/phpunit/Util/ThrowableToStringMapper.php', - 'PHPUnit\\Util\\VersionComparisonOperator' => '/phpunit/Util/VersionComparisonOperator.php', - 'PHPUnit\\Util\\Xml' => '/phpunit/Util/Xml/Xml.php', - 'PHPUnit\\Util\\Xml\\Loader' => '/phpunit/Util/Xml/Loader.php', - 'PHPUnit\\Util\\Xml\\XmlException' => '/phpunit/Util/Exception/XmlException.php'] as $file) { - require_once 'phar://phpunit-11.5.6.phar' . $file; -} - -require __PHPUNIT_PHAR_ROOT__ . '/phpunit/Framework/Assert/Functions.php'; - -if ($execute) { - if (isset($printComposerLock)) { - print file_get_contents(__PHPUNIT_PHAR_ROOT__ . '/composer.lock'); - - exit; - } - - if (isset($printManifest)) { - print file_get_contents(__PHPUNIT_PHAR_ROOT__ . '/manifest.txt'); - - exit; - } - - if (isset($printSbom)) { - print file_get_contents(__PHPUNIT_PHAR_ROOT__ . '/sbom.xml'); - - exit; - } - - unset($execute); - - exit((new PHPUnit\TextUI\Application)->run($_SERVER['argv'])); -} - -__HALT_COMPILER(); ?> -¸ö9phpunit-11.5.6.phar composer.lock9æÂuœg9æú諤 manifest.txt Âuœg ˆ?Åð¤'myclabs-deep-copy/DeepCopy/DeepCopy.php2 Âuœg2 ¿Íˆ‹¤7myclabs-deep-copy/DeepCopy/Exception/CloneException.phpŠÂuœgŠJDéȤ:myclabs-deep-copy/DeepCopy/Exception/PropertyException.phpƒÂuœgƒo‘¼#¤5myclabs-deep-copy/DeepCopy/Filter/ChainableFilter.phpËÂuœgË–=(e¤Gmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.phpÂuœgJZEé¤Lmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.phpðÂuœgðŸï¡t¤Bmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.phpªÂuœgªfQc_¤,myclabs-deep-copy/DeepCopy/Filter/Filter.phphÂuœgh¸ß½¤0myclabs-deep-copy/DeepCopy/Filter/KeepFilter.phpÂuœgÿ7#¤3myclabs-deep-copy/DeepCopy/Filter/ReplaceFilter.php¤Âuœg¤ÉT:¤3myclabs-deep-copy/DeepCopy/Filter/SetNullFilter.phpùÂuœgùCôkì¤Dmyclabs-deep-copy/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php‹Âuœg‹ ‹3ä¤.myclabs-deep-copy/DeepCopy/Matcher/Matcher.phpáÂuœgáÈfËä6myclabs-deep-copy/DeepCopy/Matcher/PropertyMatcher.phpºÂuœgºÝÀA^¤:myclabs-deep-copy/DeepCopy/Matcher/PropertyNameMatcher.phpÂuœgÑì¡P¤:myclabs-deep-copy/DeepCopy/Matcher/PropertyTypeMatcher.php9Âuœg9Ge잤:myclabs-deep-copy/DeepCopy/Reflection/ReflectionHelper.php9Âuœg91•¦†¤Amyclabs-deep-copy/DeepCopy/TypeFilter/Date/DateIntervalFilter.php“Âuœg“[‚ã¤?myclabs-deep-copy/DeepCopy/TypeFilter/Date/DatePeriodFilter.php`Âuœg`m9£œ¤7myclabs-deep-copy/DeepCopy/TypeFilter/ReplaceFilter.phpÂuœg»8;¤;myclabs-deep-copy/DeepCopy/TypeFilter/ShallowCopyFilter.phpëÂuœgëF_e ¤?myclabs-deep-copy/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.phpðÂuœgð£Ø©¤Amyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php¼Âuœg¼K픤Gmyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php*Âuœg*L-Ø ¤4myclabs-deep-copy/DeepCopy/TypeFilter/TypeFilter.phpÎÂuœgÎÔŠ‡¤6myclabs-deep-copy/DeepCopy/TypeMatcher/TypeMatcher.phpÞÂuœgÞû×$¤(myclabs-deep-copy/DeepCopy/deep_copy.php¥Âuœg¥¢WÈ•¤myclabs-deep-copy/LICENSE5Âuœg5Ê­Ë„¤nikic-php-parser/LICENSEðÂuœgð¥ä”*¤&nikic-php-parser/PhpParser/Builder.php×Âuœg×’[ṳ1nikic-php-parser/PhpParser/Builder/ClassConst.php;Âuœg;(kïü¤-nikic-php-parser/PhpParser/Builder/Class_.phpkÂuœgkÓÞQ¤2nikic-php-parser/PhpParser/Builder/Declaration.phpþÂuœgþ`X:¤/nikic-php-parser/PhpParser/Builder/EnumCase.phpÖÂuœgÖȸÚ¤,nikic-php-parser/PhpParser/Builder/Enum_.phpà Âuœgà ÅUfƒ¤3nikic-php-parser/PhpParser/Builder/FunctionLike.php9Âuœg9B¹ã¤0nikic-php-parser/PhpParser/Builder/Function_.php‹Âuœg‹¥33A¤1nikic-php-parser/PhpParser/Builder/Interface_.phph -Âuœgh -£‹·|¤-nikic-php-parser/PhpParser/Builder/Method.php§Âuœg§Ú·t„¤1nikic-php-parser/PhpParser/Builder/Namespace_.phpuÂuœgu Öî¤,nikic-php-parser/PhpParser/Builder/Param.php¬Âuœg¬_먊¤/nikic-php-parser/PhpParser/Builder/Property.phpxÂuœgxVÆnâ¤/nikic-php-parser/PhpParser/Builder/TraitUse.php¼Âuœg¼!rѤ9nikic-php-parser/PhpParser/Builder/TraitUseAdaptation.phpúÂuœgúŒ0¤-nikic-php-parser/PhpParser/Builder/Trait_.php4 Âuœg4 ëѬZ¤+nikic-php-parser/PhpParser/Builder/Use_.php,Âuœg,K,g¤-nikic-php-parser/PhpParser/BuilderFactory.php)Âuœg) –Ò½¤-nikic-php-parser/PhpParser/BuilderHelpers.phpl%Âuœgl%‚^Š[¤&nikic-php-parser/PhpParser/Comment.phpÂuœgVUG¤*nikic-php-parser/PhpParser/Comment/Doc.php€Âuœg€Í袤;nikic-php-parser/PhpParser/ConstExprEvaluationException.php}Âuœg}ÍÞO¤1nikic-php-parser/PhpParser/ConstExprEvaluator.php&Âuœg&º´¶¤$nikic-php-parser/PhpParser/Error.php]Âuœg]×:¸¤+nikic-php-parser/PhpParser/ErrorHandler.php9Âuœg9–yo¤6nikic-php-parser/PhpParser/ErrorHandler/Collecting.php•Âuœg•HÏr(¤4nikic-php-parser/PhpParser/ErrorHandler/Throwing.php˜Âuœg˜Îr¾£¤0nikic-php-parser/PhpParser/Internal/DiffElem.php -Âuœg -à_P¤.nikic-php-parser/PhpParser/Internal/Differ.phpÇÂuœgÇd;v,¤Anikic-php-parser/PhpParser/Internal/PrintableNewAnonClassNode.phpe -Âuœge -²G×o¤5nikic-php-parser/PhpParser/Internal/TokenPolyfill.php·$Âuœg·$wdz®¤3nikic-php-parser/PhpParser/Internal/TokenStream.php£#Âuœg£#GzÙ¤*nikic-php-parser/PhpParser/JsonDecoder.php® Âuœg®  -øn¤$nikic-php-parser/PhpParser/Lexer.php(Âuœg(&Àì¤.nikic-php-parser/PhpParser/Lexer/Emulative.phpC ÂuœgC œšÞ¤Tnikic-php-parser/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php² Âuœg² ÑÆÍ¤Dnikic-php-parser/PhpParser/Lexer/TokenEmulator/AttributeEmulator.phpÏÂuœgÏæ g$¤Dnikic-php-parser/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php¾Âuœg¾¿¾¤Hnikic-php-parser/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.phpÂuœgHU¨j¤Bnikic-php-parser/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php2Âuœg2$ÐG­¤Enikic-php-parser/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.phpÈÂuœgÈÂ9æG¤Hnikic-php-parser/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php-Âuœg-[SŤHnikic-php-parser/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php×Âuœg×ü4"Ù¤Pnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.phpõÂuœgõÜP“ΤHnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.phpdÂuœgd/Cê¤Bnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReverseEmulator.phpÂuœgï—‚Ù¤@nikic-php-parser/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpWÂuœgW3˜ù¤(nikic-php-parser/PhpParser/Modifiers.phpF -ÂuœgF -`ؤ*nikic-php-parser/PhpParser/NameContext.php &Âuœg & 8ÄÕ¤#nikic-php-parser/PhpParser/Node.phpÂuœg¶h¦m¤'nikic-php-parser/PhpParser/Node/Arg.php Âuœg #Eªˆ¤-nikic-php-parser/PhpParser/Node/ArrayItem.phpÞÂuœgÞ¸ªÙݤ-nikic-php-parser/PhpParser/Node/Attribute.php`Âuœg`–v¤2nikic-php-parser/PhpParser/Node/AttributeGroup.php¨Âuœg¨Gãiʤ.nikic-php-parser/PhpParser/Node/ClosureUse.phpîÂuœgî\±jt¤/nikic-php-parser/PhpParser/Node/ComplexType.php[Âuœg[š0Us¤*nikic-php-parser/PhpParser/Node/Const_.phpëÂuœgëT¼=y¤/nikic-php-parser/PhpParser/Node/DeclareItem.php Âuœg ¸o#¤(nikic-php-parser/PhpParser/Node/Expr.phpÂuœg|Å)¬¤6nikic-php-parser/PhpParser/Node/Expr/ArrayDimFetch.phpWÂuœgWSé!¤/nikic-php-parser/PhpParser/Node/Expr/Array_.phprÂuœgr§sG¤6nikic-php-parser/PhpParser/Node/Expr/ArrowFunction.php> -Âuœg> -«ÚM¤/nikic-php-parser/PhpParser/Node/Expr/Assign.php'Âuœg'0)œ -¤1nikic-php-parser/PhpParser/Node/Expr/AssignOp.phpôÂuœgô¢Œb/¤<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpÂuœgÆ?Q¤;nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpÂuœg)Þñ¤<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpÂuœg&ÉTþ¤:nikic-php-parser/PhpParser/Node/Expr/AssignOp/Coalesce.phpÂuœg9˜·¤¤8nikic-php-parser/PhpParser/Node/Expr/AssignOp/Concat.phpÿÂuœgÿGÅ3¤5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Div.phpùÂuœgùÍÔ/¤7nikic-php-parser/PhpParser/Node/Expr/AssignOp/Minus.phpýÂuœgý¦„¶c¤5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mod.phpùÂuœgùÃjŒ¤5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mul.phpùÂuœgùY:Å;¤6nikic-php-parser/PhpParser/Node/Expr/AssignOp/Plus.phpûÂuœgûKÍã]¤5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Pow.phpùÂuœgùߊÍA¤;nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpÂuœg–(?¤<nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftRight.phpÂuœg®·íâ¤2nikic-php-parser/PhpParser/Node/Expr/AssignRef.phpXÂuœgX[—·¤1nikic-php-parser/PhpParser/Node/Expr/BinaryOp.phpdÂuœgdñ`˜­¤<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.phpVÂuœgVNVD¤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpTÂuœgTÝŸ¤<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseXor.phpVÂuœgVà3$¶¤<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpWÂuœgWú€Ýÿ¤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpUÂuœgU‰¡G¤:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Coalesce.phpSÂuœgS¯/à¤8nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Concat.phpNÂuœgN¶€¤5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Div.phpHÂuœgH¨A+¤7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Equal.phpMÂuœgMá$3¤9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Greater.phpPÂuœgPX‡Š¤@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php_Âuœg_³Âå ¤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Identical.phpVÂuœgV´Ðã¤<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpXÂuœgXFü—=¤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpUÂuœgU-”š3¤<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpXÂuœgXÞÁŠé¤7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Minus.phpLÂuœgL"7®æ¤5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mod.phpHÂuœgHÓ - -ñ¤5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mul.phpHÂuœgH œt¤:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotEqual.phpSÂuœgS¨½£Í¤>nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotIdentical.php\Âuœg\õc_¤6nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Plus.phpJÂuœgJcm¤5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Pow.phpIÂuœgI­Þ,ô¤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpUÂuœgUC”Xe¤<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpWÂuœgWü;‘¤9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Smaller.phpPÂuœgPT—å¤@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php_Âuœg_èJ³¤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Spaceship.phpVÂuœgVã”Ex¤3nikic-php-parser/PhpParser/Node/Expr/BitwiseNot.php­Âuœg­}lMˤ3nikic-php-parser/PhpParser/Node/Expr/BooleanNot.php­Âuœg­sÂ7Þ¤1nikic-php-parser/PhpParser/Node/Expr/CallLike.phpÂuœg#™š¤-nikic-php-parser/PhpParser/Node/Expr/Cast.phpUÂuœgU¼ö³ð¤4nikic-php-parser/PhpParser/Node/Expr/Cast/Array_.phpîÂuœgîȯ¾š¤3nikic-php-parser/PhpParser/Node/Expr/Cast/Bool_.phpìÂuœg쪡>¤4nikic-php-parser/PhpParser/Node/Expr/Cast/Double.php·Âuœg·S(Û¤2nikic-php-parser/PhpParser/Node/Expr/Cast/Int_.phpêÂuœgêó,Íœ¤5nikic-php-parser/PhpParser/Node/Expr/Cast/Object_.phpðÂuœgð\­‘°¤5nikic-php-parser/PhpParser/Node/Expr/Cast/String_.phpðÂuœgð*uÚ¤4nikic-php-parser/PhpParser/Node/Expr/Cast/Unset_.phpîÂuœgîÉ”™Ô¤8nikic-php-parser/PhpParser/Node/Expr/ClassConstFetch.phpÂuœg2å¤/nikic-php-parser/PhpParser/Node/Expr/Clone_.phpžÂuœgž™×¤0nikic-php-parser/PhpParser/Node/Expr/Closure.phpj Âuœgj òI¶¤3nikic-php-parser/PhpParser/Node/Expr/ConstFetch.phpØÂuœgØs>6¤/nikic-php-parser/PhpParser/Node/Expr/Empty_.php¡Âuœg¡¸¨Ý¤.nikic-php-parser/PhpParser/Node/Expr/Error.phpÂuœg$ŸLŒ¤6nikic-php-parser/PhpParser/Node/Expr/ErrorSuppress.php·Âuœg·Î &¤.nikic-php-parser/PhpParser/Node/Expr/Eval_.phpžÂuœgžA[¤.nikic-php-parser/PhpParser/Node/Expr/Exit_.phpÂuœggÝí¼¤1nikic-php-parser/PhpParser/Node/Expr/FuncCall.phpÂuœg@"]¤1nikic-php-parser/PhpParser/Node/Expr/Include_.phpÍÂuœgÍ—ÀÊ ¤4nikic-php-parser/PhpParser/Node/Expr/Instanceof_.php•Âuœg•.§B ¤/nikic-php-parser/PhpParser/Node/Expr/Isset_.php£Âuœg£ò>:¤.nikic-php-parser/PhpParser/Node/Expr/List_.php£Âuœg£2ò¿)¤/nikic-php-parser/PhpParser/Node/Expr/Match_.php;Âuœg;hü¤3nikic-php-parser/PhpParser/Node/Expr/MethodCall.phpQÂuœgQOD¥å¤-nikic-php-parser/PhpParser/Node/Expr/New_.php•Âuœg•<~h¤;nikic-php-parser/PhpParser/Node/Expr/NullsafeMethodCall.phphÂuœghk[˜S¤>nikic-php-parser/PhpParser/Node/Expr/NullsafePropertyFetch.phpÂuœgk*¢¤0nikic-php-parser/PhpParser/Node/Expr/PostDec.php Âuœg Ph@¤0nikic-php-parser/PhpParser/Node/Expr/PostInc.php Âuœg dÞ‡¤/nikic-php-parser/PhpParser/Node/Expr/PreDec.phpÂuœgÍmB'¤/nikic-php-parser/PhpParser/Node/Expr/PreInc.phpÂuœgÔ·$x¤/nikic-php-parser/PhpParser/Node/Expr/Print_.php¡Âuœg¡U¤óô¤6nikic-php-parser/PhpParser/Node/Expr/PropertyFetch.phpêÂuœgê:%g¤2nikic-php-parser/PhpParser/Node/Expr/ShellExec.phpHÂuœgHedü¤3nikic-php-parser/PhpParser/Node/Expr/StaticCall.php\Âuœg\©ÁP¼¤<nikic-php-parser/PhpParser/Node/Expr/StaticPropertyFetch.php;Âuœg;ç.½ ¤0nikic-php-parser/PhpParser/Node/Expr/Ternary.phpèÂuœgè:X(¤/nikic-php-parser/PhpParser/Node/Expr/Throw_.php½Âuœg½#‚6¢¤3nikic-php-parser/PhpParser/Node/Expr/UnaryMinus.php­Âuœg­¾*C‰¤2nikic-php-parser/PhpParser/Node/Expr/UnaryPlus.phpªÂuœgªF!Ĥ1nikic-php-parser/PhpParser/Node/Expr/Variable.phpžÂuœgžìEk¤2nikic-php-parser/PhpParser/Node/Expr/YieldFrom.php»Âuœg»ôBß ¤/nikic-php-parser/PhpParser/Node/Expr/Yield_.phpoÂuœgo‘Æ´¤0nikic-php-parser/PhpParser/Node/FunctionLike.phpïÂuœgïÊj¸¤.nikic-php-parser/PhpParser/Node/Identifier.phpRÂuœgR¦œú¤:nikic-php-parser/PhpParser/Node/InterpolatedStringPart.phprÂuœgrkGþn¤4nikic-php-parser/PhpParser/Node/IntersectionType.php¯Âuœg¯€”u«¤,nikic-php-parser/PhpParser/Node/MatchArm.phpÓÂuœgÓ'Ãb?¤(nikic-php-parser/PhpParser/Node/Name.phpÙ!ÂuœgÙ!ÿ6Vˤ7nikic-php-parser/PhpParser/Node/Name/FullyQualified.phpÂÂuœgÂø 2¤1nikic-php-parser/PhpParser/Node/Name/Relative.php¿Âuœg¿‰8½V¤0nikic-php-parser/PhpParser/Node/NullableType.phpÈÂuœgÈÕä¤)nikic-php-parser/PhpParser/Node/Param.phpÂuœgí*¤0nikic-php-parser/PhpParser/Node/PropertyHook.phpÉ ÂuœgÉ \üBA¤0nikic-php-parser/PhpParser/Node/PropertyItem.php\Âuœg\¦`º¤*nikic-php-parser/PhpParser/Node/Scalar.phpoÂuœgo­¦þ=¤1nikic-php-parser/PhpParser/Node/Scalar/Float_.phpWÂuœgWj©Æ¤/nikic-php-parser/PhpParser/Node/Scalar/Int_.phpø Âuœgø Ÿ‘¤=nikic-php-parser/PhpParser/Node/Scalar/InterpolatedString.phpÝÂuœgÝ?à Z¤5nikic-php-parser/PhpParser/Node/Scalar/MagicConst.phpxÂuœgx÷Ï®÷¤<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Class_.phpZÂuœgZÁÆÓ5¤9nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Dir.phpSÂuœgSrÙfɤ:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/File.phpVÂuœgV6›Q¤?nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Function_.phpcÂuœgc—5¤¤:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Line.phpVÂuœgVèDEš¤<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Method.php\Âuœg\Ë2 N¤@nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Namespace_.phpfÂuœgf‹Ãq¤>nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Property.phpbÂuœgb0º«¤<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Trait_.phpZÂuœgZ˵ݤ2nikic-php-parser/PhpParser/Node/Scalar/String_.phpºÂuœgºØz¤-nikic-php-parser/PhpParser/Node/StaticVar.phpÂuœgñT>¤(nikic-php-parser/PhpParser/Node/Stmt.phpÂuœg«yþ¤.nikic-php-parser/PhpParser/Node/Stmt/Block.php§Âuœg§×j¤/nikic-php-parser/PhpParser/Node/Stmt/Break_.phpÛÂuœgÛmj–¤.nikic-php-parser/PhpParser/Node/Stmt/Case_.php†Âuœg†ݸO/¤/nikic-php-parser/PhpParser/Node/Stmt/Catch_.phpyÂuœgy{é^}¤3nikic-php-parser/PhpParser/Node/Stmt/ClassConst.phpSÂuœgS/꾬¤2nikic-php-parser/PhpParser/Node/Stmt/ClassLike.php Âuœg 3Îq¦¤4nikic-php-parser/PhpParser/Node/Stmt/ClassMethod.php÷Âuœg÷ #c¤/nikic-php-parser/PhpParser/Node/Stmt/Class_.php¸ Âuœg¸ Æ1è?¤/nikic-php-parser/PhpParser/Node/Stmt/Const_.phpÙÂuœgÙ>9øù¤2nikic-php-parser/PhpParser/Node/Stmt/Continue_.phpêÂuœgêÇò¥€¤1nikic-php-parser/PhpParser/Node/Stmt/Declare_.php½Âuœg½5‹`ä¤,nikic-php-parser/PhpParser/Node/Stmt/Do_.phpTÂuœgT%ú0¤.nikic-php-parser/PhpParser/Node/Stmt/Echo_.php´Âuœg´±°`)¤0nikic-php-parser/PhpParser/Node/Stmt/ElseIf_.php[Âuœg[bE·Ñ¤.nikic-php-parser/PhpParser/Node/Stmt/Else_.php·Âuœg·&ô¡Á¤1nikic-php-parser/PhpParser/Node/Stmt/EnumCase.php»Âuœg»w4m¤.nikic-php-parser/PhpParser/Node/Stmt/Enum_.phpJÂuœgJ›Œï?¤3nikic-php-parser/PhpParser/Node/Stmt/Expression.php÷Âuœg÷ À¤1nikic-php-parser/PhpParser/Node/Stmt/Finally_.php¿Âuœg¿8ååå¤-nikic-php-parser/PhpParser/Node/Stmt/For_.php¼Âuœg¼€‚½+¤1nikic-php-parser/PhpParser/Node/Stmt/Foreach_.phpÐÂuœgе0–פ2nikic-php-parser/PhpParser/Node/Stmt/Function_.php¬ -Âuœg¬ -f*키0nikic-php-parser/PhpParser/Node/Stmt/Global_.phpÇÂuœgÇPo6¤.nikic-php-parser/PhpParser/Node/Stmt/Goto_.php"Âuœg"ÐX –¤1nikic-php-parser/PhpParser/Node/Stmt/GroupUse.php^Âuœg^€¦7Ѥ5nikic-php-parser/PhpParser/Node/Stmt/HaltCompiler.php!Âuœg!˜×y¤,nikic-php-parser/PhpParser/Node/Stmt/If_.php‘Âuœg‘4‡o¤3nikic-php-parser/PhpParser/Node/Stmt/InlineHTML.php´Âuœg´oûȇ¤3nikic-php-parser/PhpParser/Node/Stmt/Interface_.phpNÂuœgN™yáÆ¤.nikic-php-parser/PhpParser/Node/Stmt/Label.phpüÂuœgüŸäJ¤3nikic-php-parser/PhpParser/Node/Stmt/Namespace_.phpÝÂuœgÝSvEj¤,nikic-php-parser/PhpParser/Node/Stmt/Nop.phpFÂuœgF$6¿Ø¤1nikic-php-parser/PhpParser/Node/Stmt/Property.phpÑ ÂuœgÑ rݦ¥¤0nikic-php-parser/PhpParser/Node/Stmt/Return_.phpÈÂuœgÈ|M¤0nikic-php-parser/PhpParser/Node/Stmt/Static_.phpþÂuœgþ’ٜޤ0nikic-php-parser/PhpParser/Node/Stmt/Switch_.phpIÂuœgIiËÇü¤1nikic-php-parser/PhpParser/Node/Stmt/TraitUse.phpšÂuœgš?óô\¤;nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation.php=Âuœg={:ФAnikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php1Âuœg1b Ö¤Fnikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php>Âuœg>¶Ñÿ ¤/nikic-php-parser/PhpParser/Node/Stmt/Trait_.phpQÂuœgQËEøQ¤1nikic-php-parser/PhpParser/Node/Stmt/TryCatch.php6Âuœg6‚ã2.¤/nikic-php-parser/PhpParser/Node/Stmt/Unset_.php¿Âuœg¿:VÉɤ-nikic-php-parser/PhpParser/Node/Stmt/Use_.phpÔÂuœgÔ Ç|¤/nikic-php-parser/PhpParser/Node/Stmt/While_.phpWÂuœgWQ/£×¤-nikic-php-parser/PhpParser/Node/UnionType.php»Âuœg»’Hš­¤+nikic-php-parser/PhpParser/Node/UseItem.phpÇÂuœgÇ73Uƒ¤5nikic-php-parser/PhpParser/Node/VarLikeIdentifier.phpÂuœgy.¤7nikic-php-parser/PhpParser/Node/VariadicPlaceholder.php¯Âuœg¯mäWè¤+nikic-php-parser/PhpParser/NodeAbstract.php7Âuœg7ë¾i‚¤)nikic-php-parser/PhpParser/NodeDumper.php(Âuœg(¸°Q¤)nikic-php-parser/PhpParser/NodeFinder.phpW -ÂuœgW -¥¹^‘¤,nikic-php-parser/PhpParser/NodeTraverser.php©&Âuœg©&¤ˆ*3¤5nikic-php-parser/PhpParser/NodeTraverserInterface.phpaÂuœga½©ìð¤*nikic-php-parser/PhpParser/NodeVisitor.phpXÂuœgXÝp}ª¤9nikic-php-parser/PhpParser/NodeVisitor/CloningVisitor.phpÂuœgî"Û¤Cnikic-php-parser/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php¶ -Âuœg¶ -ªÉ^µ¤9nikic-php-parser/PhpParser/NodeVisitor/FindingVisitor.phpÂuœgQ¤ÜÛ¤>nikic-php-parser/PhpParser/NodeVisitor/FirstFindingVisitor.phpÂuœg~Ĭ*¤7nikic-php-parser/PhpParser/NodeVisitor/NameResolver.php(Âuœg(‡¥¤@nikic-php-parser/PhpParser/NodeVisitor/NodeConnectingVisitor.phpœÂuœgœg-‘o¤Bnikic-php-parser/PhpParser/NodeVisitor/ParentConnectingVisitor.php‡Âuœg‡ A¯ƒ¤2nikic-php-parser/PhpParser/NodeVisitorAbstract.phpÙÂuœgÙ¡¿é~¤%nikic-php-parser/PhpParser/Parser.php Âuœg œ0@¤*nikic-php-parser/PhpParser/Parser/Php7.phpÍtÂuœgÍtÒ]oœ¤*nikic-php-parser/PhpParser/Parser/Php8.php¨uÂuœg¨ul¢#¼¤-nikic-php-parser/PhpParser/ParserAbstract.phpð¿Âuœgð¿j'’D¤,nikic-php-parser/PhpParser/ParserFactory.phpÖÂuœgÖ(ŸÉc¤)nikic-php-parser/PhpParser/PhpVersion.php…Âuœg….ƒq¸¤,nikic-php-parser/PhpParser/PrettyPrinter.php¸Âuœg¸>¹—´¤5nikic-php-parser/PhpParser/PrettyPrinter/Standard.php%ÊÂuœg%ÊÈ¢=­¤4nikic-php-parser/PhpParser/PrettyPrinterAbstract.phpÂuœg¨)ÕÓ¤$nikic-php-parser/PhpParser/Token.phpûÂuœgûÇã ̤3nikic-php-parser/PhpParser/compatibility_tokens.phpéÂuœgéW¾ÿ¤object-enumerator/LICENSEûÂuœgûu·Ç¤object-reflector/LICENSEûÂuœgûA’Òó¤phar-io-manifest/LICENSE`Âuœg`÷þp¤+phar-io-manifest/ManifestDocumentMapper.phpëÂuœgë^DŒï¤#phar-io-manifest/ManifestLoader.phpÿÂuœgÿÙX©j¤'phar-io-manifest/ManifestSerializer.phpÏÂuœgÏ?jª'¤:phar-io-manifest/exceptions/ElementCollectionException.phpÂuœgIn‡¤)phar-io-manifest/exceptions/Exception.phpÓÂuœgÓֽФ?phar-io-manifest/exceptions/InvalidApplicationNameException.php<Âuœg<°°¯W¤5phar-io-manifest/exceptions/InvalidEmailException.phpÂuœg)Ϫ}¤3phar-io-manifest/exceptions/InvalidUrlException.php Âuœg x᳤9phar-io-manifest/exceptions/ManifestDocumentException.phpÂuœg/úï"¤@phar-io-manifest/exceptions/ManifestDocumentLoadingException.php~Âuœg~H}»¤?phar-io-manifest/exceptions/ManifestDocumentMapperException.phpÂuœgJ¯R1¤8phar-io-manifest/exceptions/ManifestElementException.phpÂuœgÌæ¤7phar-io-manifest/exceptions/ManifestLoaderException.phpäÂuœgäÍl -½¤7phar-io-manifest/exceptions/NoEmailAddressException.phpÂuœgáÁü¤'phar-io-manifest/values/Application.php Âuœg ;Äk¤+phar-io-manifest/values/ApplicationName.php…Âuœg…á”ù¤"phar-io-manifest/values/Author.phpÂuœg÷x•ü¤,phar-io-manifest/values/AuthorCollection.php-Âuœg-àÍá¤4phar-io-manifest/values/AuthorCollectionIterator.php¡Âuœg¡¨Ðªe¤,phar-io-manifest/values/BundledComponent.phpdÂuœgd7õõ¤6phar-io-manifest/values/BundledComponentCollection.php¹Âuœg¹·æߤ>phar-io-manifest/values/BundledComponentCollectionIterator.phpÂuœg _»¤0phar-io-manifest/values/CopyrightInformation.phppÂuœgp‚“æP¤!phar-io-manifest/values/Email.php¦Âuœg¦«S·¤%phar-io-manifest/values/Extension.phpÅÂuœgÅF {¤#phar-io-manifest/values/Library.phpÂuœg±ýžv¤#phar-io-manifest/values/License.phpÂuœg4Êýç¤$phar-io-manifest/values/Manifest.php& -Âuœg& -¾øüú¤3phar-io-manifest/values/PhpExtensionRequirement.php¼Âuœg¼²Pη¤1phar-io-manifest/values/PhpVersionRequirement.phpAÂuœgAÄñi‰¤'phar-io-manifest/values/Requirement.php´Âuœg´ ŸïU¤1phar-io-manifest/values/RequirementCollection.phpsÂuœgs6ý•M¤9phar-io-manifest/values/RequirementCollectionIterator.phpÝÂuœgÝUޤ phar-io-manifest/values/Type.phpÔÂuœgÔܲ3«¤phar-io-manifest/values/Url.phpÁÂuœgÁëO©ƒ¤&phar-io-manifest/xml/AuthorElement.phpðÂuœgðÎÊÂÚ¤0phar-io-manifest/xml/AuthorElementCollection.phpMÂuœgMj£·¤'phar-io-manifest/xml/BundlesElement.phptÂuœgt]Y´‹¤)phar-io-manifest/xml/ComponentElement.php™Âuœg™”na¤3phar-io-manifest/xml/ComponentElementCollection.phpVÂuœgVú¥?¤(phar-io-manifest/xml/ContainsElement.phpŒÂuœgŒl8è¤)phar-io-manifest/xml/CopyrightElement.phpóÂuœgó¹hDp¤*phar-io-manifest/xml/ElementCollection.phpÂÂuœgÂ<^ÉÞ¤#phar-io-manifest/xml/ExtElement.php*Âuœg*^º×¤-phar-io-manifest/xml/ExtElementCollection.phpDÂuœgDβSó¤)phar-io-manifest/xml/ExtensionElement.phpÂuœg€ JŒ¤'phar-io-manifest/xml/LicenseElement.phpÂuœgvâ/!¤)phar-io-manifest/xml/ManifestDocument.phpƒ Âuœgƒ ™Åi_¤(phar-io-manifest/xml/ManifestElement.phpÝÂuœgÝ#¨=¤#phar-io-manifest/xml/PhpElement.phpÂuœgYʤ(phar-io-manifest/xml/RequiresElement.phpEÂuœgEdwʤ!phar-io-version/BuildMetaData.phpãÂuœgã3A(*¤phar-io-version/LICENSE&Âuœg&Òª ¤$phar-io-version/PreReleaseSuffix.phpÂuœg8^æ¤phar-io-version/Version.phpñÂuœgñ‘¬¤+phar-io-version/VersionConstraintParser.phpN ÂuœgN n­%ˤ*phar-io-version/VersionConstraintValue.phpA -ÂuœgA -²fi™¤!phar-io-version/VersionNumber.phpµÂuœgµKp‘_¤9phar-io-version/constraints/AbstractVersionConstraint.phpÁÂuœgÁ42ƒo¤9phar-io-version/constraints/AndVersionConstraintGroup.phpéÂuœgékO•¤4phar-io-version/constraints/AnyVersionConstraint.phpTÂuœgT¸v¤6phar-io-version/constraints/ExactVersionConstraint.phpÖÂuœgÖgÉÐq¤Ephar-io-version/constraints/GreaterThanOrEqualToVersionConstraint.php‰Âuœg‰©ÞÚ_¤8phar-io-version/constraints/OrVersionConstraintGroup.phpÂuœg£¥ƒ6¤Fphar-io-version/constraints/SpecificMajorAndMinorVersionConstraint.phpÌÂuœgÌBº”,¤>phar-io-version/constraints/SpecificMajorVersionConstraint.php Âuœg êÒé¤1phar-io-version/constraints/VersionConstraint.phpøÂuœgøï¾dã¤(phar-io-version/exceptions/Exception.php³Âuœg³ôÓ<²¤?phar-io-version/exceptions/InvalidPreReleaseSuffixException.php›Âuœg›Ë[–¤6phar-io-version/exceptions/InvalidVersionException.php¡Âuœg¡·ðy¤7phar-io-version/exceptions/NoBuildMetaDataException.php“Âuœg“+${¡¤:phar-io-version/exceptions/NoPreReleaseSuffixException.php–Âuœg–º"Ï÷¤Dphar-io-version/exceptions/UnsupportedVersionConstraintException.phpßÂuœgߤ´æ¨¤"php-code-coverage/CodeCoverage.php9AÂuœg9Aìó<„¤4php-code-coverage/Data/ProcessedCodeCoverageData.phpD'ÂuœgD'LF± ¤.php-code-coverage/Data/RawCodeCoverageData.phpÊ#ÂuœgÊ#‰2php-code-coverage/Exception/FileCouldNotBeWrittenException.php»Âuœg»£ó’¤8php-code-coverage/Exception/InvalidArgumentException.php¨Âuœg¨lÕ~ФFphp-code-coverage/Exception/NoCodeCoverageDriverAvailableException.php3Âuœg35oYC¤]php-code-coverage/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.phpeÂuœge®X3Ÿ¤/php-code-coverage/Exception/ParserException.php¬Âuœg¬pÏêÚ¤Dphp-code-coverage/Exception/PathExistsButIsNotDirectoryException.php¥Âuœg¥ikd¤9php-code-coverage/Exception/PcovNotAvailableException.phpiÂuœgiÁq¤3php-code-coverage/Exception/ReflectionException.php°Âuœg°ö`¤?php-code-coverage/Exception/ReportAlreadyFinalizedException.php>Âuœg>ÒmU=¤Iphp-code-coverage/Exception/StaticAnalysisCacheNotConfiguredException.phpÆÂuœgÆÛpé¤6php-code-coverage/Exception/TestIdMissingException.phpÂuœg3ÄOê¤Cphp-code-coverage/Exception/UnintentionallyCoveredCodeException.php·Âuœg·{:¤=php-code-coverage/Exception/WriteOperationFailedException.phpÂuœgu䶤;php-code-coverage/Exception/XdebugNotAvailableException.phpmÂuœgmí{F¤9php-code-coverage/Exception/XdebugNotEnabledException.php³Âuœg³J]0¤,php-code-coverage/Exception/XmlException.php©Âuœg©0)ƒR¤php-code-coverage/Filter.phpˆÂuœgˆ)æ-­¤php-code-coverage/LICENSEûÂuœgû>öR¤'php-code-coverage/Node/AbstractNode.php[Âuœg['¢¤"php-code-coverage/Node/Builder.phpQÂuœgQHÄÊa¤$php-code-coverage/Node/CrapIndex.phpËÂuœg˲¤$php-code-coverage/Node/Directory.phpj$Âuœgj$¼MEà¤php-code-coverage/Node/File.phpÌWÂuœgÌW(ï±p¤#php-code-coverage/Node/Iterator.phpuÂuœguBì0»¤#php-code-coverage/Report/Clover.phpÁ%ÂuœgÁ%¢˜…¤&php-code-coverage/Report/Cobertura.phpÊ0ÂuœgÊ0Žžíƒ¤#php-code-coverage/Report/Crap4j.php;Âuœg;7½Â¤(php-code-coverage/Report/Html/Colors.php¾Âuœg¾_„[¤/php-code-coverage/Report/Html/CustomCssFile.php5Âuœg5…³/-¤(php-code-coverage/Report/Html/Facade.phptÂuœgtKÍû¡¤*php-code-coverage/Report/Html/Renderer.phpÅ ÂuœgÅ ¤ýÒ¤4php-code-coverage/Report/Html/Renderer/Dashboard.php¢!Âuœg¢!×Þôܤ4php-code-coverage/Report/Html/Renderer/Directory.phpKÂuœgK¹88a¤/php-code-coverage/Report/Html/Renderer/File.php]‹Âuœg]‹zŠž ¤Bphp-code-coverage/Report/Html/Renderer/Template/branches.html.distôÂuœgôh2+¤Fphp-code-coverage/Report/Html/Renderer/Template/coverage_bar.html.dist/Âuœg/ÕchÁ¤Mphp-code-coverage/Report/Html/Renderer/Template/coverage_bar_branch.html.dist/Âuœg/ÕchÁ¤Ephp-code-coverage/Report/Html/Renderer/Template/css/bootstrap.min.cssbÂuœgboÃŤ>php-code-coverage/Report/Html/Renderer/Template/css/custom.cssÂuœg¤Aphp-code-coverage/Report/Html/Renderer/Template/css/nv.d3.min.cssX%ÂuœgX%0,¤@php-code-coverage/Report/Html/Renderer/Template/css/octicons.cssXÂuœgX'#ï¤=php-code-coverage/Report/Html/Renderer/Template/css/style.css?Âuœg?…j,Z¤Cphp-code-coverage/Report/Html/Renderer/Template/dashboard.html.dist›Âuœg›×…D¤Jphp-code-coverage/Report/Html/Renderer/Template/dashboard_branch.html.dist›Âuœg›×…D¤Cphp-code-coverage/Report/Html/Renderer/Template/directory.html.distöÂuœgöÎÕ†á¤Jphp-code-coverage/Report/Html/Renderer/Template/directory_branch.html.dist”Âuœg”n2]¤Hphp-code-coverage/Report/Html/Renderer/Template/directory_item.html.distAÂuœgAds¤Ophp-code-coverage/Report/Html/Renderer/Template/directory_item_branch.html.dist;Âuœg;ªm½Û¤>php-code-coverage/Report/Html/Renderer/Template/file.html.distöÂuœgö9Á¤Ephp-code-coverage/Report/Html/Renderer/Template/file_branch.html.dist“ Âuœg“ ûu ¤Cphp-code-coverage/Report/Html/Renderer/Template/file_item.html.distrÂuœgréð/y¤Jphp-code-coverage/Report/Html/Renderer/Template/file_item_branch.html.distlÂuœgl¡-°÷¤Cphp-code-coverage/Report/Html/Renderer/Template/icons/file-code.svg0Âuœg0ÙQUU¤Hphp-code-coverage/Report/Html/Renderer/Template/icons/file-directory.svgêÂuœgêýÚZÿ¤Jphp-code-coverage/Report/Html/Renderer/Template/js/bootstrap.bundle.min.jsQ;ÂuœgQ;Ú¿‘!¤<php-code-coverage/Report/Html/Renderer/Template/js/d3.min.js­PÂuœg­PÅhéb¤:php-code-coverage/Report/Html/Renderer/Template/js/file.jsÈÂuœgÈ 5-¤@php-code-coverage/Report/Html/Renderer/Template/js/jquery.min.jsìUÂuœgìU¥ŸGœ¤?php-code-coverage/Report/Html/Renderer/Template/js/nv.d3.min.jsÚRÂuœgÚRphp-code-coverage/Report/Html/Renderer/Template/line.html.distÃÂuœg÷ä´_¤?php-code-coverage/Report/Html/Renderer/Template/lines.html.disteÂuœgedf ¤Ephp-code-coverage/Report/Html/Renderer/Template/method_item.html.dist«Âuœg«‹jפLphp-code-coverage/Report/Html/Renderer/Template/method_item_branch.html.dist¥Âuœg¥yÄŽk¤?php-code-coverage/Report/Html/Renderer/Template/paths.html.distòÂuœgòã*'ݤ php-code-coverage/Report/PHP.php7Âuœg7]|´Z¤!php-code-coverage/Report/Text.phpË&ÂuœgË&»+ßÒ¤'php-code-coverage/Report/Thresholds.phpQÂuœgQî¡ ¤1php-code-coverage/Report/Xml/BuildInformation.phpA ÂuœgA ÷ /y¤)php-code-coverage/Report/Xml/Coverage.phpïÂuœgï5 ¯,¤*php-code-coverage/Report/Xml/Directory.phpíÂuœgí ôFn¤'php-code-coverage/Report/Xml/Facade.phpÝ!ÂuœgÝ!ÐÖX§¤%php-code-coverage/Report/Xml/File.phpÂuœg¯îc¤'php-code-coverage/Report/Xml/Method.phpCÂuœgCGƒVŸ¤%php-code-coverage/Report/Xml/Node.phpùÂuœgù f!>¤(php-code-coverage/Report/Xml/Project.phpdÂuœgd—û ¨¤'php-code-coverage/Report/Xml/Report.php Âuœg ¹dúö¤'php-code-coverage/Report/Xml/Source.php‚Âuœg‚¥;‹ÿ¤&php-code-coverage/Report/Xml/Tests.phpÇÂuœgDzG«!¤'php-code-coverage/Report/Xml/Totals.php˜Âuœg˜å–ì­¤%php-code-coverage/Report/Xml/Unit.phpÏÂuœgÏŒû‰’¤0php-code-coverage/StaticAnalysis/CacheWarmer.phpgÂuœgg¹][7¤8php-code-coverage/StaticAnalysis/CachingFileAnalyser.php…Âuœg…„­Ÿ¤;php-code-coverage/StaticAnalysis/CodeUnitFindingVisitor.phpÁ%ÂuœgÁ%‡ªë¤Bphp-code-coverage/StaticAnalysis/ExecutableLinesFindingVisitor.php5+Âuœg5+²’éx¤1php-code-coverage/StaticAnalysis/FileAnalyser.php"Âuœg"e @¿¤?php-code-coverage/StaticAnalysis/IgnoredLinesFindingVisitor.php-Âuœg-–¨Æê¤8php-code-coverage/StaticAnalysis/ParsingFileAnalyser.php/Âuœg/Ùî^²¤$php-code-coverage/TestSize/Known.phpÂuœg”ñQ¤$php-code-coverage/TestSize/Large.php‰Âuœg‰88çq¤%php-code-coverage/TestSize/Medium.php‹Âuœg‹û›¤$php-code-coverage/TestSize/Small.php}Âuœg}O¾Dä¤'php-code-coverage/TestSize/TestSize.phpšÂuœgšfSúv¤&php-code-coverage/TestSize/Unknown.php*Âuœg*T4Uv¤(php-code-coverage/TestStatus/Failure.php)Âuœg)%$¤&php-code-coverage/TestStatus/Known.phpàÂuœgàsŒ¤(php-code-coverage/TestStatus/Success.php)Âuœg)ë²!¤+php-code-coverage/TestStatus/TestStatus.phpÐÂuœgÐÄñyå¤(php-code-coverage/TestStatus/Unknown.php.Âuœg.Xæl¤%php-code-coverage/Util/Filesystem.php­Âuœg­(У|¤%php-code-coverage/Util/Percentage.php^Âuœg^ê&×B¤php-code-coverage/Version.php¯Âuœg¯ýÛš¤%php-file-iterator/ExcludeIterator.php"Âuœg"椅¤php-file-iterator/Facade.php•Âuœg•Í…!Z¤php-file-iterator/Factory.phpÙÂuœgÙ/ßǤphp-file-iterator/Iterator.phpž Âuœgž Ž¡¢¯¤php-file-iterator/LICENSEûÂuœgû>öR¤php-invoker/Invoker.php7Âuœg7>(6ʤ$php-invoker/exceptions/Exception.phpvÂuœgv'P=¤Dphp-invoker/exceptions/ProcessControlExtensionNotLoadedException.php¿Âuœg¿£…ý_¤+php-invoker/exceptions/TimeoutException.php¢Âuœg¢—tJï¤php-text-template/LICENSEûÂuœgû>öR¤php-text-template/Template.php» Âuœg» Çëhª¤*php-text-template/exceptions/Exception.php}Âuœg}Áã`"¤9php-text-template/exceptions/InvalidArgumentException.php¤Âuœg¤ô¼¸Â¤1php-text-template/exceptions/RuntimeException.php¹Âuœg¹Ö]Mp¤php-timer/Duration.php Âuœg }h#¤php-timer/LICENSEûÂuœgûÍkê~¤$php-timer/ResourceUsageFormatter.php‰Âuœg‰ÕÂq¤php-timer/Timer.phpŠÂuœgŠÐôúʤ"php-timer/exceptions/Exception.phprÂuœgr˜›<¤/php-timer/exceptions/NoActiveTimerException.php Âuœg *®õ¤Ephp-timer/exceptions/TimeSinceStartOfRequestNotAvailableException.phpºÂuœgºÐ.ñ¤ phpunit.xsd#IÂuœg#Ip« ¼¤1phpunit/Event/Dispatcher/CollectingDispatcher.phpÿÂuœgÿ\´Ae¤0phpunit/Event/Dispatcher/DeferringDispatcher.php¢Âuœg¢MW°‰¤-phpunit/Event/Dispatcher/DirectDispatcher.phpý Âuœgý ГÂ,¤'phpunit/Event/Dispatcher/Dispatcher.php}Âuœg};G`œ¤3phpunit/Event/Dispatcher/SubscribableDispatcher.phpÂuœg»>òL¤,phpunit/Event/Emitter/DispatchingEmitter.phpöyÂuœgöyßsää!phpunit/Event/Emitter/Emitter.phpº,Âuœgº,¥Õ%¤-phpunit/Event/Events/Application/Finished.phpxÂuœgxvúK]¤7phpunit/Event/Events/Application/FinishedSubscriber.php6Âuœg6Íþ)÷¤,phpunit/Event/Events/Application/Started.phpvÂuœgvê¿Ft¤6phpunit/Event/Events/Application/StartedSubscriber.php4Âuœg4JÜ'¤phpunit/Event/Events/Event.php -Âuœg -íì· ¤(phpunit/Event/Events/EventCollection.php=Âuœg=]%„²¤0phpunit/Event/Events/EventCollectionIterator.php¶Âuœg¶[¤Ÿ¤2phpunit/Event/Events/Test/ComparatorRegistered.phpéÂuœgéN;¿Ô¤<phpunit/Event/Events/Test/ComparatorRegisteredSubscriber.php@Âuœg@Ú­êö¤Bphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalled.php?Âuœg?fddD¤Lphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalledSubscriber.phpJÂuœgJ‘Éü ¤Cphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodErrored.phpÙÂuœgÙoq%¤Mphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodErroredSubscriber.phpLÂuœgLø¿¤Dphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinished.php*Âuœg*ªœ™¤Nphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinishedSubscriber.phpNÂuœgNwœàK¤>phpunit/Event/Events/Test/HookMethod/AfterTestMethodCalled.php6Âuœg6肵ˆ¤Hphpunit/Event/Events/Test/HookMethod/AfterTestMethodCalledSubscriber.phpBÂuœgB£R‘ÿ¤?phpunit/Event/Events/Test/HookMethod/AfterTestMethodErrored.phpÐÂuœgÐ˳!Ú¤Iphpunit/Event/Events/Test/HookMethod/AfterTestMethodErroredSubscriber.phpDÂuœgD%?±ò¤@phpunit/Event/Events/Test/HookMethod/AfterTestMethodFinished.php!Âuœg!øU¤Jphpunit/Event/Events/Test/HookMethod/AfterTestMethodFinishedSubscriber.phpFÂuœgF–^‰_¤Dphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalled.phpCÂuœgC(vµ@¤Nphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalledSubscriber.phpNÂuœgNeÚäu¤Ephpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErrored.phpÂÂuœgÂDøó¤Ophpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErroredSubscriber.phpPÂuœgPñ¨¥²¤Fphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinished.php.Âuœg.Jo™¤Pphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinishedSubscriber.phpRÂuœgR½Á“\¤?phpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalled.php8Âuœg8;*Qz¤Iphpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalledSubscriber.phpDÂuœgD¿þƾ¤@phpunit/Event/Events/Test/HookMethod/BeforeTestMethodErrored.phpÒÂuœgÒiØ:L¤Jphpunit/Event/Events/Test/HookMethod/BeforeTestMethodErroredSubscriber.phpFÂuœgF¦ó„0¤Aphpunit/Event/Events/Test/HookMethod/BeforeTestMethodFinished.php#Âuœg#‚v/€¤Kphpunit/Event/Events/Test/HookMethod/BeforeTestMethodFinishedSubscriber.phpHÂuœgHx—ŠS¤<phpunit/Event/Events/Test/HookMethod/PostConditionCalled.php8Âuœg8Ò¸ÿޤFphpunit/Event/Events/Test/HookMethod/PostConditionCalledSubscriber.php>Âuœg>b*¤=phpunit/Event/Events/Test/HookMethod/PostConditionErrored.phpÒÂuœgÒ¨áq›¤Gphpunit/Event/Events/Test/HookMethod/PostConditionErroredSubscriber.php@Âuœg@qhÀ÷¤>phpunit/Event/Events/Test/HookMethod/PostConditionFinished.php#Âuœg#ÜR4:¤Hphpunit/Event/Events/Test/HookMethod/PostConditionFinishedSubscriber.phpBÂuœgBWXF“¤;phpunit/Event/Events/Test/HookMethod/PreConditionCalled.php6Âuœg6f°úÞ¤Ephpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php<Âuœg<u8O&¤<phpunit/Event/Events/Test/HookMethod/PreConditionErrored.phpÐÂuœgЫ§äñ¤Fphpunit/Event/Events/Test/HookMethod/PreConditionErroredSubscriber.php>Âuœg>‘§¤=phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php!Âuœg!Øcð¤Gphpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.php@Âuœg@¡µX¤3phpunit/Event/Events/Test/Issue/ConsideredRisky.phpÄÂuœgÄ,+œ5¤=phpunit/Event/Events/Test/Issue/ConsideredRiskySubscriber.php6Âuœg6S%LT¤8phpunit/Event/Events/Test/Issue/DeprecationTriggered.php&Âuœg&ZµÔ¤Bphpunit/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.php@Âuœg@ö†“¤2phpunit/Event/Events/Test/Issue/ErrorTriggered.phpˆ Âuœgˆ âtki¤<phpunit/Event/Events/Test/Issue/ErrorTriggeredSubscriber.php4Âuœg4R¹Â5¤3phpunit/Event/Events/Test/Issue/NoticeTriggered.phpÄ -ÂuœgÄ -_Y6¤=phpunit/Event/Events/Test/Issue/NoticeTriggeredSubscriber.php6Âuœg6'T$ž¤;phpunit/Event/Events/Test/Issue/PhpDeprecationTriggered.phpñ Âuœgñ ì -\,¤Ephpunit/Event/Events/Test/Issue/PhpDeprecationTriggeredSubscriber.phpFÂuœgFˆs†¤6phpunit/Event/Events/Test/Issue/PhpNoticeTriggered.phpË -ÂuœgË -·7DP¤@phpunit/Event/Events/Test/Issue/PhpNoticeTriggeredSubscriber.php<Âuœg<M¥s¤7phpunit/Event/Events/Test/Issue/PhpWarningTriggered.phpÍ -ÂuœgÍ -â%ϤAphpunit/Event/Events/Test/Issue/PhpWarningTriggeredSubscriber.php>Âuœg>« -d¤?phpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggered.php:Âuœg:H]Cð¤Iphpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggeredSubscriber.phpNÂuœgNlp®¤9phpunit/Event/Events/Test/Issue/PhpunitErrorTriggered.phpGÂuœgG³ªy¤Cphpunit/Event/Events/Test/Issue/PhpunitErrorTriggeredSubscriber.phpBÂuœgB°Ÿ³;¤;phpunit/Event/Events/Test/Issue/PhpunitWarningTriggered.php2Âuœg2ª(FL¤Ephpunit/Event/Events/Test/Issue/PhpunitWarningTriggeredSubscriber.phpFÂuœgF¶²â¤4phpunit/Event/Events/Test/Issue/WarningTriggered.phpÆ -ÂuœgÆ -(¬£¤>phpunit/Event/Events/Test/Issue/WarningTriggeredSubscriber.php8Âuœg8£®Z{¤@phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalled.phpÂuœgP7€n¤Jphpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.phpHÂuœgHë~-r¤Bphpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinished.phpçÂuœgçáêM:¤Lphpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.phpLÂuœgL Ç?¤0phpunit/Event/Events/Test/Lifecycle/Finished.php_Âuœg_57°a¤:phpunit/Event/Events/Test/Lifecycle/FinishedSubscriber.php(Âuœg(.͵P¤9phpunit/Event/Events/Test/Lifecycle/PreparationFailed.phpaÂuœga¿ÈÆ}¤Cphpunit/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php:Âuœg:ØÌ"»¤:phpunit/Event/Events/Test/Lifecycle/PreparationStarted.phpcÂuœgc”ÉꑤDphpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php<Âuœg<&Uep¤0phpunit/Event/Events/Test/Lifecycle/Prepared.phpNÂuœgN%€ %¤:phpunit/Event/Events/Test/Lifecycle/PreparedSubscriber.php(Âuœg(ħK”¤-phpunit/Event/Events/Test/Outcome/Errored.phpâÂuœgâÃAÕ¤7phpunit/Event/Events/Test/Outcome/ErroredSubscriber.php&Âuœg&èd3¤,phpunit/Event/Events/Test/Outcome/Failed.php‰Âuœg‰NŸÛ€¤6phpunit/Event/Events/Test/Outcome/FailedSubscriber.php$Âuœg$À\*¤6phpunit/Event/Events/Test/Outcome/MarkedIncomplete.phpõÂuœgõåÌî¤@phpunit/Event/Events/Test/Outcome/MarkedIncompleteSubscriber.php8Âuœg8 -6‹¤,phpunit/Event/Events/Test/Outcome/Passed.phpJÂuœgJ8x÷>¤6phpunit/Event/Events/Test/Outcome/PassedSubscriber.php$Âuœg$ÂÐ:y¤-phpunit/Event/Events/Test/Outcome/Skipped.php…Âuœg…¡~m£¤7phpunit/Event/Events/Test/Outcome/SkippedSubscriber.php&Âuœg&{ªdz¤5phpunit/Event/Events/Test/PrintedUnexpectedOutput.phpÂuœgÛܯ¤?phpunit/Event/Events/Test/PrintedUnexpectedOutputSubscriber.phpFÂuœgF¾4¾­¤:phpunit/Event/Events/Test/TestDouble/MockObjectCreated.phpäÂuœgä–Q•~¤Dphpunit/Event/Events/Test/TestDouble/MockObjectCreatedSubscriber.php:Âuœg:E¨'á¤Jphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreated.phpôÂuœgôm|¹¤Tphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreatedSubscriber.phpZÂuœgZÜ*¤Uphpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreated.php:Âuœg:PŸG$¤_phpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreatedSubscriber.phppÂuœgp-¤Bphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreated.phpìÂuœgìp¯H¤Lphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreatedSubscriber.phpJÂuœgJ~ÇH ¤Bphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreated.php: -Âuœg: -ûLIÒ¤Lphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreatedSubscriber.phpJÂuœgJ¬ŽöͤAphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreated.phpÂuœgSу¤Kphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreatedSubscriber.phpHÂuœgHøþ¡£¤9phpunit/Event/Events/Test/TestDouble/TestProxyCreated.phpÒÂuœgÒ׈t¤Cphpunit/Event/Events/Test/TestDouble/TestProxyCreatedSubscriber.php8Âuœg84ŒË¤8phpunit/Event/Events/Test/TestDouble/TestStubCreated.phpàÂuœgà§™!4¤Bphpunit/Event/Events/Test/TestDouble/TestStubCreatedSubscriber.php6Âuœg6íà ¤Sphpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreated.php6Âuœg6LÀû“¤]phpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreatedSubscriber.phplÂuœglŠªR¤5phpunit/Event/Events/TestRunner/BootstrapFinished.phpWÂuœgWË ©¤?phpunit/Event/Events/TestRunner/BootstrapFinishedSubscriber.phpFÂuœgF€2¸=¤8phpunit/Event/Events/TestRunner/ChildProcessFinished.php¹Âuœg¹­ü’¤Bphpunit/Event/Events/TestRunner/ChildProcessFinishedSubscriber.phpLÂuœgL`¨&¤7phpunit/Event/Events/TestRunner/ChildProcessStarted.phpÂuœgñ¿•¤Aphpunit/Event/Events/TestRunner/ChildProcessStartedSubscriber.phpJÂuœgJ"4¤.phpunit/Event/Events/TestRunner/Configured.phpqÂuœgqÇp²I¤8phpunit/Event/Events/TestRunner/ConfiguredSubscriber.php8Âuœg8ÍL¿Ï¤8phpunit/Event/Events/TestRunner/DeprecationTriggered.phpbÂuœgbß Ç»¤Bphpunit/Event/Events/TestRunner/DeprecationTriggeredSubscriber.phpLÂuœgLöñ`2¤5phpunit/Event/Events/TestRunner/EventFacadeSealed.php{Âuœg{Èy‹`¤?phpunit/Event/Events/TestRunner/EventFacadeSealedSubscriber.phpFÂuœgF$¬v^¤4phpunit/Event/Events/TestRunner/ExecutionAborted.php„Âuœg„ÛTv=¤>phpunit/Event/Events/TestRunner/ExecutionAbortedSubscriber.phpDÂuœgD²sl|¤5phpunit/Event/Events/TestRunner/ExecutionFinished.php†Âuœg†—ƒÌ¤?phpunit/Event/Events/TestRunner/ExecutionFinishedSubscriber.phpFÂuœgFÓ¾ñ¤4phpunit/Event/Events/TestRunner/ExecutionStarted.phpÔÂuœgÔQ¢;¤>phpunit/Event/Events/TestRunner/ExecutionStartedSubscriber.phpDÂuœgDÿ.¤9phpunit/Event/Events/TestRunner/ExtensionBootstrapped.phpBÂuœgBãûJ¤Cphpunit/Event/Events/TestRunner/ExtensionBootstrappedSubscriber.phpNÂuœgNÃ¥³¤;phpunit/Event/Events/TestRunner/ExtensionLoadedFromPhar.php¦Âuœg¦†§ȤEphpunit/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.phpRÂuœgRA‹Æ¾¤,phpunit/Event/Events/TestRunner/Finished.phpsÂuœgs¯ÑÁ™¤6phpunit/Event/Events/TestRunner/FinishedSubscriber.php4Âuœg4[Ixé¤=phpunit/Event/Events/TestRunner/GarbageCollectionDisabled.php—Âuœg—A2Y¤Gphpunit/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.phpVÂuœgVy ÃW¤<phpunit/Event/Events/TestRunner/GarbageCollectionEnabled.php•Âuœg•¹ÇïÁ¤Fphpunit/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.phpTÂuœgTyÄ -¤>phpunit/Event/Events/TestRunner/GarbageCollectionTriggered.php™Âuœg™±秤Hphpunit/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.phpXÂuœgX€Jz¤+phpunit/Event/Events/TestRunner/Started.phpqÂuœgqZM·¤5phpunit/Event/Events/TestRunner/StartedSubscriber.php2Âuœg2}ÃRp¤4phpunit/Event/Events/TestRunner/WarningTriggered.phpZÂuœgZC– õ¤>phpunit/Event/Events/TestRunner/WarningTriggeredSubscriber.phpDÂuœgDʉú±¤+phpunit/Event/Events/TestSuite/Filtered.phpåÂuœgåá5ܤ5phpunit/Event/Events/TestSuite/FilteredSubscriber.php2Âuœg2™?¾Ë¤+phpunit/Event/Events/TestSuite/Finished.phpÂuœgØ Jp¤5phpunit/Event/Events/TestSuite/FinishedSubscriber.php2Âuœg2JVˆ8¤)phpunit/Event/Events/TestSuite/Loaded.phpáÂuœgáË(N¤3phpunit/Event/Events/TestSuite/LoadedSubscriber.php.Âuœg.˜š)¤*phpunit/Event/Events/TestSuite/Skipped.phpeÂuœgeÃø¤4phpunit/Event/Events/TestSuite/SkippedSubscriber.php0Âuœg0èǤ)phpunit/Event/Events/TestSuite/Sorted.phpÂuœgT¼ˆâ¤3phpunit/Event/Events/TestSuite/SortedSubscriber.php.Âuœg.ÝIN"¤*phpunit/Event/Events/TestSuite/Started.phpÂuœg|íª¤4phpunit/Event/Events/TestSuite/StartedSubscriber.php0Âuœg0¿Ý.¤9phpunit/Event/Exception/EventAlreadyAssignedException.php Âuœg 0•ɤ8phpunit/Event/Exception/EventFacadeIsSealedException.php -Âuœg -J ؤ%phpunit/Event/Exception/Exception.phpLÂuœgLgxº¤4phpunit/Event/Exception/InvalidArgumentException.phpùÂuœgùÛ䀤1phpunit/Event/Exception/InvalidEventException.phpÂuœgE>¯¤6phpunit/Event/Exception/InvalidSubscriberException.phpÂuœgSÜg¤$phpunit/Event/Exception/MapError.phpöÂuœgöÕ÷äR¤8phpunit/Event/Exception/NoComparisonFailureException.phpÂuœgâ{k ¤>phpunit/Event/Exception/NoDataSetFromDataProviderException.php'Âuœg'@~à¤8phpunit/Event/Exception/NoPreviousThrowableException.php -Âuœg -Ùú¦~¤@phpunit/Event/Exception/NoTestCaseObjectOnCallStackException.phpùÂuœgùxs§Ù¤,phpunit/Event/Exception/RuntimeException.phpéÂuœgéLƤDphpunit/Event/Exception/SubscriberTypeAlreadyRegisteredException.phpÂuœgį¨K¤1phpunit/Event/Exception/UnknownEventException.phpÂuœgšÜ}ê¤5phpunit/Event/Exception/UnknownEventTypeException.phpÂuœg/<ˆ¡¤6phpunit/Event/Exception/UnknownSubscriberException.phpÂuœg ²Éˤ:phpunit/Event/Exception/UnknownSubscriberTypeException.php Âuœg &'ý*¤phpunit/Event/Facade.phpd#Âuœgd#7Ã~W¤phpunit/Event/Subscriber.php£Âuœg£dlkû¤phpunit/Event/Tracer.phpîÂuœgî€Úm¤phpunit/Event/TypeMap.php[Âuœg[%À;|¤#phpunit/Event/Value/ClassMethod.phpjÂuœgjý¢—¤)phpunit/Event/Value/ComparisonFailure.phpËÂuœgËŠ6IQ¤0phpunit/Event/Value/ComparisonFailureBuilder.phpVÂuœgVNQï¤/phpunit/Event/Value/Runtime/OperatingSystem.php¢Âuœg¢Âá—÷¤#phpunit/Event/Value/Runtime/PHP.phpÄÂuœgĆƒÖ½¤'phpunit/Event/Value/Runtime/PHPUnit.php^Âuœg^ 7:á¤'phpunit/Event/Value/Runtime/Runtime.php´Âuœg´Ë&TŒ¤*phpunit/Event/Value/Telemetry/Duration.php¿ Âuœg¿ ô’u¤8phpunit/Event/Value/Telemetry/GarbageCollectorStatus.phpñÂuœgñÆñÅä¤@phpunit/Event/Value/Telemetry/GarbageCollectorStatusProvider.phppÂuœgpr Ù¤(phpunit/Event/Value/Telemetry/HRTime.php Âuœg mÖž¥¤&phpunit/Event/Value/Telemetry/Info.php} -Âuœg} -•P6ͤ-phpunit/Event/Value/Telemetry/MemoryMeter.php¤Âuœg¤'ìä}¤-phpunit/Event/Value/Telemetry/MemoryUsage.php^Âuœg^Übi¤Ephpunit/Event/Value/Telemetry/Php81GarbageCollectorStatusProvider.phpÞÂuœgÞ˜D/¤Ephpunit/Event/Value/Telemetry/Php83GarbageCollectorStatusProvider.php³Âuœg³kOÓ¤*phpunit/Event/Value/Telemetry/Snapshot.php…Âuœg…âš‹ø¤+phpunit/Event/Value/Telemetry/StopWatch.phpLÂuœgLQØ¡6¤(phpunit/Event/Value/Telemetry/System.php•Âuœg•öȈɤ3phpunit/Event/Value/Telemetry/SystemMemoryMeter.phpñÂuœgñ×쇤1phpunit/Event/Value/Telemetry/SystemStopWatch.phpcÂuœgcý‚÷H¤;phpunit/Event/Value/Telemetry/SystemStopWatchWithOffset.php½Âuœg½‹'^L¤0phpunit/Event/Value/Test/Issue/DirectTrigger.phpÂuœg¦†±.¤2phpunit/Event/Value/Test/Issue/IndirectTrigger.phpÂuœgh[ÊŸ¤/phpunit/Event/Value/Test/Issue/IssueTrigger.php2 Âuœg2 *íÚ ¤.phpunit/Event/Value/Test/Issue/SelfTrigger.phpÂuœg#êaá¤.phpunit/Event/Value/Test/Issue/TestTrigger.phpßÂuœgßhq-µ¤1phpunit/Event/Value/Test/Issue/UnknownTrigger.phpÖÂuœgÖ³y¤!phpunit/Event/Value/Test/Phpt.phpÂuœg3{ÞY¤!phpunit/Event/Value/Test/Test.phpÓÂuœgÓÙ[U¼¤+phpunit/Event/Value/Test/TestCollection.phpÂuœgps¤3phpunit/Event/Value/Test/TestCollectionIterator.phpºÂuœgºáeûͤ:phpunit/Event/Value/Test/TestData/DataFromDataProvider.phpÅÂuœgÅöÆ¥¤<phpunit/Event/Value/Test/TestData/DataFromTestDependency.php°Âuœg°8åçˤ.phpunit/Event/Value/Test/TestData/TestData.phpÄÂuœgÄ æ·¤8phpunit/Event/Value/Test/TestData/TestDataCollection.phpƒÂuœgƒù-Iå¤@phpunit/Event/Value/Test/TestData/TestDataCollectionIterator.phpÔÂuœgÔ×!P¤$phpunit/Event/Value/Test/TestDox.phpòÂuœgòb°oФ+phpunit/Event/Value/Test/TestDoxBuilder.php°Âuœg°Œ}]¤'phpunit/Event/Value/Test/TestMethod.php: Âuœg: Œ&úe¤.phpunit/Event/Value/Test/TestMethodBuilder.phpµ -Âuœgµ -Ñ -vy¤+phpunit/Event/Value/TestSuite/TestSuite.php^Âuœg^Ó,[Ф2phpunit/Event/Value/TestSuite/TestSuiteBuilder.php Âuœg g:®¤7phpunit/Event/Value/TestSuite/TestSuiteForTestClass.php5Âuœg5ÞÞmP¤Hphpunit/Event/Value/TestSuite/TestSuiteForTestMethodWithDataProvider.phpÙÂuœgÙ.^¤3phpunit/Event/Value/TestSuite/TestSuiteWithName.phpDÂuœgDjW;¤!phpunit/Event/Value/Throwable.php Âuœg @¬*™¤(phpunit/Event/Value/ThrowableBuilder.php‹Âuœg‹CΓ¤phpunit/Exception.phpLÂuœgLù¨ßФphpunit/Framework/Assert.php[RÂuœg[R!hã/¤&phpunit/Framework/Assert/Functions.php×ÅÂuœg×Ųï¤&phpunit/Framework/Attributes/After.phpdÂuœgd¬µ%¤+phpunit/Framework/Attributes/AfterClass.phpiÂuœgiÂĤ.phpunit/Framework/Attributes/BackupGlobals.phpéÂuœgém4B·¤7phpunit/Framework/Attributes/BackupStaticProperties.phpòÂuœgòy !„¤'phpunit/Framework/Attributes/Before.phpeÂuœgeûê‘„¤,phpunit/Framework/Attributes/BeforeClass.phpjÂuœgjJ]“¤,phpunit/Framework/Attributes/CoversClass.php„Âuœg„T^ù§¤/phpunit/Framework/Attributes/CoversFunction.php¨Âuœg¨u®ôK¤-phpunit/Framework/Attributes/CoversMethod.phpÅÂuœgÅþ¨So¤.phpunit/Framework/Attributes/CoversNothing.php!Âuœg!z3Ф,phpunit/Framework/Attributes/CoversTrait.php„Âuœg„ã®¶¤-phpunit/Framework/Attributes/DataProvider.php™Âuœg™ç[ÈQ¤5phpunit/Framework/Attributes/DataProviderExternal.phpÎÂuœgÎG€`f¤(phpunit/Framework/Attributes/Depends.php”Âuœg”¶6"¤0phpunit/Framework/Attributes/DependsExternal.phpÉÂuœgÉ·¶Q¤>phpunit/Framework/Attributes/DependsExternalUsingDeepClone.php×Âuœg׌QU,¤Aphpunit/Framework/Attributes/DependsExternalUsingShallowClone.phpÚÂuœgÚÃuI¤/phpunit/Framework/Attributes/DependsOnClass.phpˆÂuœgˆ£‡Ó¤=phpunit/Framework/Attributes/DependsOnClassUsingDeepClone.php–Âuœg–•#kû¤@phpunit/Framework/Attributes/DependsOnClassUsingShallowClone.php™Âuœg™fùÕ¤6phpunit/Framework/Attributes/DependsUsingDeepClone.php¢Âuœg¢«&…á¤9phpunit/Framework/Attributes/DependsUsingShallowClone.php¥Âuœg¥r@P¤Kphpunit/Framework/Attributes/DisableReturnValueGenerationForTestDoubles.php#Âuœg#Y¿tE¤9phpunit/Framework/Attributes/DoesNotPerformAssertions.php,Âuœg,a¡¤@phpunit/Framework/Attributes/ExcludeGlobalVariableFromBackup.phpþÂuœgþ ¡ým¤@phpunit/Framework/Attributes/ExcludeStaticPropertyFromBackup.phpÂuœg…çðò¤&phpunit/Framework/Attributes/Group.php‚Âuœg‚à㟤3phpunit/Framework/Attributes/IgnoreDeprecations.php&Âuœg&™•<_¤:phpunit/Framework/Attributes/IgnorePhpunitDeprecations.php‰Âuœg‰Ç}±ý¤&phpunit/Framework/Attributes/Large.phpþÂuœgþ¤'phpunit/Framework/Attributes/Medium.phpÿÂuœgÿ`4à¤.phpunit/Framework/Attributes/PostCondition.phplÂuœglµõLt¤-phpunit/Framework/Attributes/PreCondition.phpkÂuœgkŸGìQ¤4phpunit/Framework/Attributes/PreserveGlobalState.phpïÂuœgïrm¿c¤1phpunit/Framework/Attributes/RequiresFunction.phpÅÂuœgÅžXê¤/phpunit/Framework/Attributes/RequiresMethod.phpâÂuœgâ0ÐÏš¤8phpunit/Framework/Attributes/RequiresOperatingSystem.phpÔÂuœgÔÑü’Ö¤>phpunit/Framework/Attributes/RequiresOperatingSystemFamily.phpöÂuœgöê?Á‡¤,phpunit/Framework/Attributes/RequiresPhp.phpÏÂuœgÏǯo¤5phpunit/Framework/Attributes/RequiresPhpExtension.phpFÂuœgF;9°£¤0phpunit/Framework/Attributes/RequiresPhpunit.phpÓÂuœgÓãïc“¤9phpunit/Framework/Attributes/RequiresPhpunitExtension.phpÂuœgrÙ㎤0phpunit/Framework/Attributes/RequiresSetting.phpºÂuœgºª_p¿¤:phpunit/Framework/Attributes/RunClassInSeparateProcess.phpÂuœgíe×Ѥ5phpunit/Framework/Attributes/RunInSeparateProcess.phpÂuœgÕ}³¤<phpunit/Framework/Attributes/RunTestsInSeparateProcesses.phpÂuœgú£Hz¤&phpunit/Framework/Attributes/Small.phpþÂuœgþ˜ -´w¤%phpunit/Framework/Attributes/Test.phpþÂuœgþ77d‹¤(phpunit/Framework/Attributes/TestDox.phpiÂuœgiéXL¤)phpunit/Framework/Attributes/TestWith.php€Âuœg€2Míw¤-phpunit/Framework/Attributes/TestWithJson.phpÂuœg– á¤'phpunit/Framework/Attributes/Ticket.phpƒÂuœgƒ„,D¤*phpunit/Framework/Attributes/UsesClass.php‚Âuœg‚Ä3­¤-phpunit/Framework/Attributes/UsesFunction.php¦Âuœg¦=Yï¤+phpunit/Framework/Attributes/UsesMethod.phpÃÂuœgÃ,Ap´¤*phpunit/Framework/Attributes/UsesTrait.php‚Âuœg‚²4K¼¤4phpunit/Framework/Attributes/WithoutErrorHandler.php Âuœg ñO½¤0phpunit/Framework/Constraint/Boolean/IsFalse.php`Âuœg`, µá¤/phpunit/Framework/Constraint/Boolean/IsTrue.php]Âuœg]?6þͤ)phpunit/Framework/Constraint/Callback.phpˆÂuœgˆ›Cƒ×¤2phpunit/Framework/Constraint/Cardinality/Count.php Âuœg Fº…¤8phpunit/Framework/Constraint/Cardinality/GreaterThan.php(Âuœg( ¥ ¯¤4phpunit/Framework/Constraint/Cardinality/IsEmpty.php\Âuœg\Ò6«¤5phpunit/Framework/Constraint/Cardinality/LessThan.php"Âuœg"¡°%¤5phpunit/Framework/Constraint/Cardinality/SameSize.phpûÂuœgû -™08¤+phpunit/Framework/Constraint/Constraint.phpŠ"ÂuœgŠ"}¹¬¤1phpunit/Framework/Constraint/Equality/IsEqual.phpc -Âuœgc - 3ÃÖ¤?phpunit/Framework/Constraint/Equality/IsEqualCanonicalizing.php^ -Âuœg^ -šðY‚¤=phpunit/Framework/Constraint/Equality/IsEqualIgnoringCase.phpd -Âuœgd -kîͤ:phpunit/Framework/Constraint/Equality/IsEqualWithDelta.php¸ Âuœg¸ ;y6ê¤4phpunit/Framework/Constraint/Exception/Exception.phpéÂuœgéX}íÿ¤8phpunit/Framework/Constraint/Exception/ExceptionCode.php0Âuœg0~ѤGphpunit/Framework/Constraint/Exception/ExceptionMessageIsOrContains.php$Âuœg$x›¤ñ¤Sphpunit/Framework/Constraint/Exception/ExceptionMessageMatchesRegularExpression.php·Âuœg·7Ë«F¤;phpunit/Framework/Constraint/Filesystem/DirectoryExists.phpùÂuœgù-pˆ¤6phpunit/Framework/Constraint/Filesystem/FileExists.phpôÂuœgôÿ+ð÷¤6phpunit/Framework/Constraint/Filesystem/IsReadable.phpôÂuœgô“A†¤6phpunit/Framework/Constraint/Filesystem/IsWritable.phpôÂuœgôöÆùB¤+phpunit/Framework/Constraint/IsAnything.php&Âuœg&ù;€¤,phpunit/Framework/Constraint/IsIdentical.phpæ Âuœgæ rÚª¤,phpunit/Framework/Constraint/JsonMatches.php -Âuœg -Ðä*Q¤.phpunit/Framework/Constraint/Math/IsFinite.phpzÂuœgzÔŠø¤0phpunit/Framework/Constraint/Math/IsInfinite.php‚Âuœg‚íC²¤+phpunit/Framework/Constraint/Math/IsNan.phpnÂuœgnÇx¤4phpunit/Framework/Constraint/Object/ObjectEquals.phplÂuœglëgƒ/¤9phpunit/Framework/Constraint/Object/ObjectHasProperty.phpuÂuœgu÷e¥¤8phpunit/Framework/Constraint/Operator/BinaryOperator.phpJ ÂuœgJ @yá¤4phpunit/Framework/Constraint/Operator/LogicalAnd.phpYÂuœgYÿ‡ý¤4phpunit/Framework/Constraint/Operator/LogicalNot.php8 Âuœg8 ôü/¾¤3phpunit/Framework/Constraint/Operator/LogicalOr.php=Âuœg="iN¤4phpunit/Framework/Constraint/Operator/LogicalXor.php™Âuœg™ø¿Þ¤2phpunit/Framework/Constraint/Operator/Operator.php'Âuœg'áJÂ%¤7phpunit/Framework/Constraint/Operator/UnaryOperator.phpÂuœg5D ¤.phpunit/Framework/Constraint/String/IsJson.phpÞ ÂuœgÞ ûQÐ]¤9phpunit/Framework/Constraint/String/RegularExpression.php^Âuœg^ŠË¬>¤6phpunit/Framework/Constraint/String/StringContains.phpNÂuœgNC–´D¤6phpunit/Framework/Constraint/String/StringEndsWith.phpðÂuœgð@%õ-¤Mphpunit/Framework/Constraint/String/StringEqualsStringIgnoringLineEndings.php7Âuœg7[…J¤Fphpunit/Framework/Constraint/String/StringMatchesFormatDescription.phpó Âuœgó µ'5a¤8phpunit/Framework/Constraint/String/StringStartsWith.phpøÂuœgø™.ÿ¤8phpunit/Framework/Constraint/Traversable/ArrayHasKey.phpyÂuœgy8ÓÆ£¤3phpunit/Framework/Constraint/Traversable/IsList.phpRÂuœgRì!„=¤@phpunit/Framework/Constraint/Traversable/TraversableContains.phpKÂuœgK#Ǧ¤Ephpunit/Framework/Constraint/Traversable/TraversableContainsEqual.php(Âuœg(alr¤Iphpunit/Framework/Constraint/Traversable/TraversableContainsIdentical.phpîÂuœgîËÁg¤Dphpunit/Framework/Constraint/Traversable/TraversableContainsOnly.php3 Âuœg3 ¡Æõ¤2phpunit/Framework/Constraint/Type/IsInstanceOf.phpÊÂuœgÊ9 ;>¤,phpunit/Framework/Constraint/Type/IsNull.php\Âuœg\a#‡ ¤,phpunit/Framework/Constraint/Type/IsType.phpoÂuœgohÁ÷0¤+phpunit/Framework/DataProviderTestSuite.phpñÂuœgñ .ë¤4phpunit/Framework/Exception/AssertionFailedError.phpþÂuœgþÏ5/¤5phpunit/Framework/Exception/CodeCoverageException.php/Âuœg/9}‚¤4phpunit/Framework/Exception/EmptyStringException.phpCÂuœgC‹ÖšÍ¤)phpunit/Framework/Exception/Exception.phpŸ -ÂuœgŸ -•ôâ¤:phpunit/Framework/Exception/ExpectationFailedException.php*Âuœg*ûˆáÞ¤>phpunit/Framework/Exception/GeneratorNotSupportedException.php:Âuœg:™ j{¤9phpunit/Framework/Exception/Incomplete/IncompleteTest.php(Âuœg(KÉ9¤>phpunit/Framework/Exception/Incomplete/IncompleteTestError.phpkÂuœgk÷›øè¤8phpunit/Framework/Exception/InvalidArgumentException.php;Âuœg;÷ñ‹)¤<phpunit/Framework/Exception/InvalidCoversTargetException.phpHÂuœgH„´›n¤<phpunit/Framework/Exception/InvalidDataProviderException.php<Âuœg<tõH,¤:phpunit/Framework/Exception/InvalidDependencyException.phpoÂuœgoi¾Ôí¤9phpunit/Framework/Exception/NoChildTestSuiteException.php9Âuœg94´Ý¤Nphpunit/Framework/Exception/ObjectEquals/ActualValueIsNotAnObjectException.php­Âuœg­·òW÷¤`phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.phpWÂuœgWŒ‹–½¤bphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php>Âuœg>{ý–¤gphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareExactlyOneParameterException.phpHÂuœgH°t ²¤aphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareParameterTypeException.phpFÂuœgFñ †9¤Rphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotExistException.phpÂuœgÝ/]¤8phpunit/Framework/Exception/PhptAssertionFailedError.phpÃÂuœgÃèèy¤9phpunit/Framework/Exception/ProcessIsolationException.php9Âuœg9,ÿä3phpunit/Framework/Exception/Skipped/SkippedTest.php%Âuœg%5há¤=phpunit/Framework/Exception/Skipped/SkippedTestSuiteError.phpjÂuœgjwÜŠ¤Cphpunit/Framework/Exception/Skipped/SkippedWithMessageException.phppÂuœgpX&º>¤@phpunit/Framework/Exception/UnknownClassOrInterfaceException.phpöÂuœgöH nw¤4phpunit/Framework/Exception/UnknownTypeException.phpÚÂuœgÚ‹4¤.phpunit/Framework/ExecutionOrderDependency.phpèÂuœgè©Kº¤3phpunit/Framework/MockObject/ConfigurableMethod.phpïÂuœgïÌ^ÉP¤Aphpunit/Framework/MockObject/Exception/BadMethodCallException.phpoÂuœgoäÛ!¤Yphpunit/Framework/MockObject/Exception/CannotCloneTestDoubleForReadonlyClassException.php:Âuœg:û!KL¤Hphpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.phptÂuœgt™¬ -¤4phpunit/Framework/MockObject/Exception/Exception.php.Âuœg.‹p‚¤Kphpunit/Framework/MockObject/Exception/IncompatibleReturnValueException.phpåÂuœgå2íK]¤Hphpunit/Framework/MockObject/Exception/MatchBuilderNotFoundException.php.Âuœg.ú¤´a¤Lphpunit/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php&Âuœg&æÝLphpunit/Framework/MockObject/Exception/MethodCannotBeConfiguredException.phpˆÂuœgˆ7À„3¤Ophpunit/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.phpòÂuœgò<Ú¬>¤Kphpunit/Framework/MockObject/Exception/MethodNameNotConfiguredException.phpêÂuœgêªYi¤Uphpunit/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.phpûÂuœgû¥s¤Hphpunit/Framework/MockObject/Exception/NeverReturningMethodException.phpeÂuœge]M6…¤Pphpunit/Framework/MockObject/Exception/NoMoreReturnValuesConfiguredException.php×Âuœg×H]²ò¤Lphpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php¨Âuœg¨2’×V¤;phpunit/Framework/MockObject/Exception/RuntimeException.phpcÂuœgcõ€= ¤Qphpunit/Framework/MockObject/Generator/Exception/CannotUseAddMethodsException.phpµÂuœgµ˜¬•¤Pphpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.phpJÂuœgJ `@ ¤Jphpunit/Framework/MockObject/Generator/Exception/ClassIsFinalException.phpFÂuœgFÔƒ¤Mphpunit/Framework/MockObject/Generator/Exception/DuplicateMethodException.phpFÂuœgFÂAé¤>phpunit/Framework/MockObject/Generator/Exception/Exception.phpnÂuœgn½q~•¤Ophpunit/Framework/MockObject/Generator/Exception/InvalidMethodNameException.php<Âuœg<×ÓªÙ¤Nphpunit/Framework/MockObject/Generator/Exception/NameAlreadyInUseException.phpiÂuœgiØ´¤cphpunit/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.php6Âuœg6@QbÖ¤Hphpunit/Framework/MockObject/Generator/Exception/ReflectionException.php…Âuœg…"è¤Ephpunit/Framework/MockObject/Generator/Exception/RuntimeException.php‚Âuœg‚„Ãø¤Wphpunit/Framework/MockObject/Generator/Exception/SoapExtensionNotAvailableException.php%Âuœg%NMé¤Jphpunit/Framework/MockObject/Generator/Exception/UnknownClassException.php+Âuœg+Àò»“¤Jphpunit/Framework/MockObject/Generator/Exception/UnknownTraitException.phpvÂuœgvKˆß¤Iphpunit/Framework/MockObject/Generator/Exception/UnknownTypeException.php-Âuœg-¨‰V¤4phpunit/Framework/MockObject/Generator/Generator.php—Âuœg—1¦ê¤9phpunit/Framework/MockObject/Generator/HookedProperty.php:Âuœg:-r<}¤Bphpunit/Framework/MockObject/Generator/HookedPropertyGenerator.phpxÂuœgxÀKD¤4phpunit/Framework/MockObject/Generator/MockClass.phpºÂuœgºb+­¸¤5phpunit/Framework/MockObject/Generator/MockMethod.php*Âuœg*s&ƒ¸¤8phpunit/Framework/MockObject/Generator/MockMethodSet.phpÎÂuœgÎq»¤4phpunit/Framework/MockObject/Generator/MockTrait.phpßÂuœg߆,—¤3phpunit/Framework/MockObject/Generator/MockType.phpjÂuœgj\t¾{¤9phpunit/Framework/MockObject/Generator/TemplateLoader.phpÙÂuœgÙˆHU!¤@phpunit/Framework/MockObject/Generator/templates/deprecation.tpl;Âuœg;O5øs¤Cphpunit/Framework/MockObject/Generator/templates/doubled_method.tplVÂuœgVšè%¤Jphpunit/Framework/MockObject/Generator/templates/doubled_static_method.tplîÂuœgî 4éR¤Aphpunit/Framework/MockObject/Generator/templates/intersection.tplLÂuœgL®Ž-X¤Cphpunit/Framework/MockObject/Generator/templates/proxied_method.tpl¢Âuœg¢åtC¤Fphpunit/Framework/MockObject/Generator/templates/test_double_class.tploÂuœgod"q4¤@phpunit/Framework/MockObject/Generator/templates/trait_class.tplQÂuœgQ÷<‹È¤?phpunit/Framework/MockObject/Generator/templates/wsdl_class.tplÍÂuœgÍô’±¤@phpunit/Framework/MockObject/Generator/templates/wsdl_method.tpl<Âuœg<¾Ði‰¤,phpunit/Framework/MockObject/MockBuilder.phpÿ;Âuœgÿ;yWz¤?phpunit/Framework/MockObject/Runtime/Api/DoubledCloneMethod.phpÂuœg¥•J%¤=phpunit/Framework/MockObject/Runtime/Api/ErrorCloneMethod.php¼Âuœg¼¦M$F¤Bphpunit/Framework/MockObject/Runtime/Api/GeneratedAsMockObject.phpvÂuœgv‘Ö3¤@phpunit/Framework/MockObject/Runtime/Api/GeneratedAsTestStub.phpvÂuœgv¢k¤3phpunit/Framework/MockObject/Runtime/Api/Method.php -Âuœg -•fØô¤:phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php" Âuœg" ­!ÑÆ¤;phpunit/Framework/MockObject/Runtime/Api/MutableStubApi.php Âuœg =Ü÷©¤?phpunit/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php7Âuœg7‰˜Â˜¤4phpunit/Framework/MockObject/Runtime/Api/StubApi.phpˆÂuœgˆE²é©¤<phpunit/Framework/MockObject/Runtime/Api/TestDoubleState.php1 Âuœg1 †»Ïޤ9phpunit/Framework/MockObject/Runtime/Builder/Identity.phpÆÂuœgÆõ ¤Aphpunit/Framework/MockObject/Runtime/Builder/InvocationMocker.phpÐ#ÂuœgÐ#ü÷d¡¤Bphpunit/Framework/MockObject/Runtime/Builder/InvocationStubber.phpœÂuœgœ©~Äͤ@phpunit/Framework/MockObject/Runtime/Builder/MethodNameMatch.phpMÂuœgMí¯Ù¤@phpunit/Framework/MockObject/Runtime/Builder/ParametersMatch.php·Âuœg·9ä"ï¤5phpunit/Framework/MockObject/Runtime/Builder/Stub.php|Âuœg|“õRµ¤=phpunit/Framework/MockObject/Runtime/Interface/MockObject.phpÒÂuœgÒmˆOé¤Ephpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.phpûÂuœgûêúý“¤7phpunit/Framework/MockObject/Runtime/Interface/Stub.phpÂuœg©liH¤?phpunit/Framework/MockObject/Runtime/Interface/StubInternal.phpyÂuœgyª£•¤3phpunit/Framework/MockObject/Runtime/Invocation.php-Âuœg-„M+¤:phpunit/Framework/MockObject/Runtime/InvocationHandler.phpÂuœg·J*¤0phpunit/Framework/MockObject/Runtime/Matcher.phpÂuœgD>F¤=phpunit/Framework/MockObject/Runtime/MethodNameConstraint.phpÂuœgý/ ƒ¤Ephpunit/Framework/MockObject/Runtime/PropertyHook/PropertyGetHook.phpÂuœg»Æ6̤Bphpunit/Framework/MockObject/Runtime/PropertyHook/PropertyHook.php5Âuœg5NE5Ò¤Ephpunit/Framework/MockObject/Runtime/PropertyHook/PropertySetHook.phpÂuœg`²>n¤=phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.php4Âuœg4M±¤=phpunit/Framework/MockObject/Runtime/Rule/AnyInvokedCount.phpƒÂuœgƒ/d²k¤;phpunit/Framework/MockObject/Runtime/Rule/AnyParameters.php Âuœg pìÛ"¤=phpunit/Framework/MockObject/Runtime/Rule/InvocationOrder.php7Âuœg7=€Ä˜¤Aphpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.php*Âuœg*䙆³¤@phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.phpGÂuœgGãfËs¤@phpunit/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.phpÂuœgyÃIޤ:phpunit/Framework/MockObject/Runtime/Rule/InvokedCount.phpÁ ÂuœgÁ  I¤8phpunit/Framework/MockObject/Runtime/Rule/MethodName.php{Âuœg{>Êh¤8phpunit/Framework/MockObject/Runtime/Rule/Parameters.php¼Âuœg¼åAB:¤<phpunit/Framework/MockObject/Runtime/Rule/ParametersRule.phpëÂuœgëv®Y¤>phpunit/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.php Âuœg ^\+©¤7phpunit/Framework/MockObject/Runtime/Stub/Exception.php¦Âuœg¦áëK¶¤<phpunit/Framework/MockObject/Runtime/Stub/ReturnArgument.phpŸÂuœgŸrjc¤<phpunit/Framework/MockObject/Runtime/Stub/ReturnCallback.phpÔÂuœgÔ2à¶Q¤=phpunit/Framework/MockObject/Runtime/Stub/ReturnReference.phpfÂuœgf¦ÿ¬Ó¤8phpunit/Framework/MockObject/Runtime/Stub/ReturnSelf.phpEÂuœgE“”DѤ8phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.phpTÂuœgTå{ÈŠ¤<phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.phplÂuœgl$}S¤2phpunit/Framework/MockObject/Runtime/Stub/Stub.phpåÂuœgåïÿ̶¤ phpunit/Framework/NativeType.php&Âuœg&|Ñgç¤!phpunit/Framework/Reorderable.phpôÂuœgôS»/±¤$phpunit/Framework/SelfDescribing.phpuÂuœguú¤phpunit/Framework/Test.phpãÂuœgã­ñ9¤!phpunit/Framework/TestBuilder.phps*Âuœgs*¹'ŠÐ¤phpunit/Framework/TestCase.php˜6Âuœg˜6ÈïD©¤3phpunit/Framework/TestRunner/IsolatedTestRunner.php‚Âuœg‚*OVܤ;phpunit/Framework/TestRunner/IsolatedTestRunnerRegistry.php/Âuœg/™à¤:phpunit/Framework/TestRunner/SeparateProcessTestRunner.php³!Âuœg³!0w³¤+phpunit/Framework/TestRunner/TestRunner.php,%Âuœg,%¼Ýis¤0phpunit/Framework/TestRunner/templates/class.tplúÂuœgú7Üz@¤1phpunit/Framework/TestRunner/templates/method.tplÂuœgżðĤ$phpunit/Framework/TestSize/Known.phpØÂuœgد½R¤$phpunit/Framework/TestSize/Large.phpbÂuœgb;qç¤%phpunit/Framework/TestSize/Medium.phpdÂuœgdTA¦Ñ¤$phpunit/Framework/TestSize/Small.phpVÂuœgVX♤'phpunit/Framework/TestSize/TestSize.php¤Âuœg¤ÅìHѤ&phpunit/Framework/TestSize/Unknown.phpçÂuœgçfÚœ¤,phpunit/Framework/TestStatus/Deprecation.php3Âuœg3‡mÐ|¤&phpunit/Framework/TestStatus/Error.php!Âuœg!ÊXP>¤(phpunit/Framework/TestStatus/Failure.php'Âuœg'µgö%¤+phpunit/Framework/TestStatus/Incomplete.php0Âuœg0Üqöq¤&phpunit/Framework/TestStatus/Known.phpŸÂuœgŸ‘–¤'phpunit/Framework/TestStatus/Notice.php$Âuœg$«¥!H¤&phpunit/Framework/TestStatus/Risky.php!Âuœg!t E¤(phpunit/Framework/TestStatus/Skipped.php'Âuœg'Ž<¤(phpunit/Framework/TestStatus/Success.php'Âuœg'Þa&¥¤+phpunit/Framework/TestStatus/TestStatus.phpÀÂuœgÀ+ u¤(phpunit/Framework/TestStatus/Unknown.php-Âuœg-FuXN¤(phpunit/Framework/TestStatus/Warning.php'Âuœg'Ž=â¤phpunit/Framework/TestSuite.phpGÂuœgGJzR¤'phpunit/Framework/TestSuiteIterator.php’Âuœg’Džu¤phpunit/Logging/EventLogger.phpÂuœg¤èp,¤(phpunit/Logging/JUnit/JunitXmlLogger.php1Âuœg1º¡¾¤/phpunit/Logging/JUnit/Subscriber/Subscriber.php=Âuœg=ôýxÛ¤:phpunit/Logging/JUnit/Subscriber/TestErroredSubscriber.php}Âuœg}£Šá¤9phpunit/Logging/JUnit/Subscriber/TestFailedSubscriber.phpwÂuœgw†€¤;phpunit/Logging/JUnit/Subscriber/TestFinishedSubscriber.phpƒÂuœgƒ"^—¤Cphpunit/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php³Âuœg³5ÝTY¤Dphpunit/Logging/JUnit/Subscriber/TestPreparationFailedSubscriber.php³Âuœg³ºÉ£Å¤Ephpunit/Logging/JUnit/Subscriber/TestPreparationStartedSubscriber.php¿Âuœg¿$†‘2¤;phpunit/Logging/JUnit/Subscriber/TestPreparedSubscriber.php}Âuœg}ñý»‡¤Jphpunit/Logging/JUnit/Subscriber/TestPrintedUnexpectedOutputSubscriber.phpyÂuœgy÷Öú¤Jphpunit/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.phpQÂuœgQ2õ÷÷¤:phpunit/Logging/JUnit/Subscriber/TestSkippedSubscriber.php}Âuœg}¿I©¤@phpunit/Logging/JUnit/Subscriber/TestSuiteFinishedSubscriber.php-Âuœg- Cö¶¤?phpunit/Logging/JUnit/Subscriber/TestSuiteStartedSubscriber.php-Âuœg-}‰£€¤2phpunit/Logging/TeamCity/Subscriber/Subscriber.phpIÂuœgIŒt¶“¤Ephpunit/Logging/TeamCity/Subscriber/TestConsideredRiskySubscriber.php³Âuœg³åÎF¤=phpunit/Logging/TeamCity/Subscriber/TestErroredSubscriber.phpƒÂuœgƒ¯y»ˆ¤<phpunit/Logging/TeamCity/Subscriber/TestFailedSubscriber.php}Âuœg}°ôå¤>phpunit/Logging/TeamCity/Subscriber/TestFinishedSubscriber.php‰Âuœg‰ÍT¸›¤Fphpunit/Logging/TeamCity/Subscriber/TestMarkedIncompleteSubscriber.php¹Âuœg¹¾T»b¤>phpunit/Logging/TeamCity/Subscriber/TestPreparedSubscriber.php%Âuœg%ÿ`c+¤Mphpunit/Logging/TeamCity/Subscriber/TestRunnerExecutionFinishedSubscriber.phpWÂuœgWã)Ê®¤=phpunit/Logging/TeamCity/Subscriber/TestSkippedSubscriber.phpƒÂuœgƒÁNÇH¤Wphpunit/Logging/TeamCity/Subscriber/TestSuiteBeforeFirstTestMethodErroredSubscriber.phpÂuœgïʹj¤Cphpunit/Logging/TeamCity/Subscriber/TestSuiteFinishedSubscriber.php9Âuœg9¬(s³¤Bphpunit/Logging/TeamCity/Subscriber/TestSuiteSkippedSubscriber.php—Âuœg—5²B;¤Bphpunit/Logging/TeamCity/Subscriber/TestSuiteStartedSubscriber.php3Âuœg3±Ò“¤+phpunit/Logging/TeamCity/TeamCityLogger.phpÉ+ÂuœgÉ+™p¤(phpunit/Logging/TestDox/HtmlRenderer.php'Âuœg'Vi@B¤*phpunit/Logging/TestDox/NamePrettifier.phpý!Âuœgý![ܾL¤-phpunit/Logging/TestDox/PlainTextRenderer.php„Âuœg„NÅô¤<phpunit/Logging/TestDox/TestResult/Subscriber/Subscriber.phpfÂuœgf7kC¤Ophpunit/Logging/TestDox/TestResult/Subscriber/TestConsideredRiskySubscriber.phpPÂuœgP»J'ž¤Gphpunit/Logging/TestDox/TestResult/Subscriber/TestErroredSubscriber.php Âuœg t8¤Fphpunit/Logging/TestDox/TestResult/Subscriber/TestFailedSubscriber.phpÂuœgñä;À¤Hphpunit/Logging/TestDox/TestResult/Subscriber/TestFinishedSubscriber.phpŠÂuœgŠMÉ~£¤Pphpunit/Logging/TestDox/TestResult/Subscriber/TestMarkedIncompleteSubscriber.phpVÂuœgV]ùó¤Fphpunit/Logging/TestDox/TestResult/Subscriber/TestPassedSubscriber.phpÂuœgÔBº¤Hphpunit/Logging/TestDox/TestResult/Subscriber/TestPreparedSubscriber.php&Âuœg&ÚÈé¤Gphpunit/Logging/TestDox/TestResult/Subscriber/TestSkippedSubscriber.php Âuœg ´Õj¤Tphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.phpnÂuœgnQ¤Ophpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredNoticeSubscriber.phpPÂuœgP°ÔÃ)¤Wphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php€Âuœg€˜]¤Rphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.phpbÂuœgbae¤Sphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.phphÂuœgh¢QF¤[phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php˜Âuœg˜^õ¤Uphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.phptÂuœgt‘Gâ°¤Wphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php€Âuœg€îk½<¤Pphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredWarningSubscriber.phpVÂuœgVxÝB\¤1phpunit/Logging/TestDox/TestResult/TestResult.phpfÂuœgf阵 ¤;phpunit/Logging/TestDox/TestResult/TestResultCollection.phpfÂuœgf\XçD¤Cphpunit/Logging/TestDox/TestResult/TestResultCollectionIterator.phpgÂuœggž¤:phpunit/Logging/TestDox/TestResult/TestResultCollector.php+Âuœg+Ñ4Û¤phpunit/Metadata/After.phpáÂuœgá¢dË~¤phpunit/Metadata/AfterClass.phpëÂuœgëV"S¤%phpunit/Metadata/Api/CodeCoverage.phpŠ&ÂuœgŠ&¾¡„@¤%phpunit/Metadata/Api/DataProvider.php‹Âuœg‹%ؽ%¤%phpunit/Metadata/Api/Dependencies.php†Âuœg†n‡xë¤phpunit/Metadata/Api/Groups.php­Âuœg­ûòœ¤$phpunit/Metadata/Api/HookMethods.php<Âuœg<+!]¤%phpunit/Metadata/Api/Requirements.phpÂuœg'NaФ"phpunit/Metadata/BackupGlobals.php[Âuœg[ê.=¤+phpunit/Metadata/BackupStaticProperties.phpmÂuœgm~àQФphpunit/Metadata/Before.phpãÂuœgãQªOî¤ phpunit/Metadata/BeforeClass.phpíÂuœgí¨…`¤phpunit/Metadata/Covers.phpÞÂuœgÞÚÃi¤ phpunit/Metadata/CoversClass.phpãÂuœgãYa v¤'phpunit/Metadata/CoversDefaultClass.phpûÂuœgû1E7¹¤#phpunit/Metadata/CoversFunction.phpõÂuœgõŠä d¤!phpunit/Metadata/CoversMethod.phpHÂuœgHU¸Ž"¤"phpunit/Metadata/CoversNothing.php6Âuœg6I¥Õ¤ phpunit/Metadata/CoversTrait.phpãÂuœgã¡©–'¤!phpunit/Metadata/DataProvider.php3Âuœg3È_Þî¤#phpunit/Metadata/DependsOnClass.phpUÂuœgU`O Ǥ$phpunit/Metadata/DependsOnMethod.php›Âuœg›pâï—¤?phpunit/Metadata/DisableReturnValueGenerationForTestDoubles.phppÂuœgp‘ ¤-phpunit/Metadata/DoesNotPerformAssertions.phpLÂuœgL{¯T¤Tphpunit/Metadata/Exception/AnnotationsAreNotSupportedForInternalClassesException.php®Âuœg®Ýy™¤(phpunit/Metadata/Exception/Exception.phpOÂuœgOÑw¥ö¤Aphpunit/Metadata/Exception/InvalidVersionRequirementException.php¥Âuœg¥PìR´¤<phpunit/Metadata/Exception/NoVersionRequirementException.php Âuœg ?+ç¤2phpunit/Metadata/Exception/ReflectionException.phphÂuœgh`´có¤4phpunit/Metadata/ExcludeGlobalVariableFromBackup.phpdÂuœgd·&Þ¤4phpunit/Metadata/ExcludeStaticPropertyFromBackup.phpgÂuœggŠdˆÌ¤phpunit/Metadata/Group.phpñÂuœgñAm:â¤'phpunit/Metadata/IgnoreDeprecations.php@Âuœg@w¸ ¤.phpunit/Metadata/IgnorePhpunitDeprecations.phpªÂuœgª(\¤phpunit/Metadata/Metadata.php|fÂuœg|ftͩդ'phpunit/Metadata/MetadataCollection.phpn0Âuœgn0¤/phpunit/Metadata/MetadataCollectionIterator.phpÚÂuœgÚü•Ø&¤/phpunit/Metadata/Parser/Annotation/DocBlock.php¼#Âuœg¼#›%7#¤/phpunit/Metadata/Parser/Annotation/Registry.php Âuœg )=ì¤,phpunit/Metadata/Parser/AnnotationParser.phpMÂuœgMÝÛfV¤+phpunit/Metadata/Parser/AttributeParser.phpŸfÂuœgŸf7µº¿¤)phpunit/Metadata/Parser/CachingParser.php¯ -Âuœg¯ - ®t¤"phpunit/Metadata/Parser/Parser.php/Âuœg/p5,³¤'phpunit/Metadata/Parser/ParserChain.phpñÂuœgñ;¨1Ú¤$phpunit/Metadata/Parser/Registry.php†Âuœg†^†ûw¤"phpunit/Metadata/PostCondition.phpñÂuœgñÌ€hg¤!phpunit/Metadata/PreCondition.phpïÂuœgïâj!æ¤(phpunit/Metadata/PreserveGlobalState.phpgÂuœgg<®œÑ¤%phpunit/Metadata/RequiresFunction.phpÂuœgqo±u¤#phpunit/Metadata/RequiresMethod.php7Âuœg7|…±Š¤,phpunit/Metadata/RequiresOperatingSystem.php<Âuœg<¹Öd¤2phpunit/Metadata/RequiresOperatingSystemFamily.phpuÂuœgu®aÁ¤ phpunit/Metadata/RequiresPhp.phpØÂuœgØ•Q|Ö¤)phpunit/Metadata/RequiresPhpExtension.php°Âuœg°¥õ}¤$phpunit/Metadata/RequiresPhpunit.phpàÂuœgàÚí5¤-phpunit/Metadata/RequiresPhpunitExtension.phpNÂuœgNª×¬l¤$phpunit/Metadata/RequiresSetting.phpÂuœgÅó¤.phpunit/Metadata/RunClassInSeparateProcess.phpNÂuœgN°8Ƥ)phpunit/Metadata/RunInSeparateProcess.phpDÂuœgDÿŸi‹¤0phpunit/Metadata/RunTestsInSeparateProcesses.phpRÂuœgRYß­s¤phpunit/Metadata/Test.php$Âuœg$1Ñ¡¤phpunit/Metadata/TestDox.phpÒÂuœgÒºÿDõ¤phpunit/Metadata/TestWith.php”Âuœg”ŸœÆ ¤phpunit/Metadata/Uses.phpÚÂuœgÚFN_ë¤phpunit/Metadata/UsesClass.phpßÂuœgß@Jùb¤%phpunit/Metadata/UsesDefaultClass.php÷Âuœg÷’Ñ-ù¤!phpunit/Metadata/UsesFunction.phpîÂuœgîÆlêa¤phpunit/Metadata/UsesMethod.phpDÂuœgD¼ë&¤phpunit/Metadata/UsesTrait.phpßÂuœgß–¤2phpunit/Metadata/Version/ComparisonRequirement.phpWÂuœgWìÈ–?¤2phpunit/Metadata/Version/ConstraintRequirement.phpžÂuœgž^.8¤(phpunit/Metadata/Version/Requirement.phpäÂuœgäK!=ݤ(phpunit/Metadata/WithoutErrorHandler.phpBÂuœgB%€W­¤$phpunit/Runner/Baseline/Baseline.phpYÂuœgY–õ{Á¤Aphpunit/Runner/Baseline/Exception/CannotLoadBaselineException.php~Âuœg~=)Sb¤Bphpunit/Runner/Baseline/Exception/FileDoesNotHaveLineException.php1Âuœg1ü3€¤%phpunit/Runner/Baseline/Generator.phpÜÂuœgÜ턤C¤!phpunit/Runner/Baseline/Issue.php) Âuœg) Û<ɤ"phpunit/Runner/Baseline/Reader.phpØ ÂuœgØ Íë}R¤2phpunit/Runner/Baseline/RelativePathCalculator.phpÎ -ÂuœgÎ -íËe¥¤1phpunit/Runner/Baseline/Subscriber/Subscriber.phpHÂuœgHÐ43¤Iphpunit/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.phpûÂuœgûü_E¤Dphpunit/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.phpâÂuœgâjâĤLphpunit/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php -Âuœg -Âk°±¤Gphpunit/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.phpñÂuœgñÒîL¤Hphpunit/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.phpöÂuœgö´MФEphpunit/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.phpçÂuœgçàQ̽¤"phpunit/Runner/Baseline/Writer.phpÂuœg<„Àè¤phpunit/Runner/CodeCoverage.php­1Âuœg­1üÂåɤ1phpunit/Runner/DeprecationCollector/Collector.php&Âuœg&kláu¤.phpunit/Runner/DeprecationCollector/Facade.phpøÂuœgøÖ`V¬¤=phpunit/Runner/DeprecationCollector/Subscriber/Subscriber.phpxÂuœgxr HÒ¤Iphpunit/Runner/DeprecationCollector/Subscriber/TestPreparedSubscriber.php/Âuœg/Kd€I¤Uphpunit/Runner/DeprecationCollector/Subscriber/TestTriggeredDeprecationSubscriber.php}Âuœg}Yò¤phpunit/Runner/ErrorHandler.phpi,Âuœgi,…ûrä¤8phpunit/Runner/Exception/ClassCannotBeFoundException.php%Âuœg%uëX¤@phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.phpQÂuœgQκYÀ¤5phpunit/Runner/Exception/ClassIsAbstractException.php'Âuœg'ƒìT¤;phpunit/Runner/Exception/DirectoryDoesNotExistException.php+Âuœg+EH¾-¤+phpunit/Runner/Exception/ErrorException.phpDÂuœgDi}Ť&phpunit/Runner/Exception/Exception.phpÂuœgV‚Õ•¤6phpunit/Runner/Exception/FileDoesNotExistException.phpþÂuœgþdfH!¤2phpunit/Runner/Exception/InvalidOrderException.phpaÂuœga[Èt%¤5phpunit/Runner/Exception/InvalidPhptFileException.phpdÂuœgdN8 Ȥ;phpunit/Runner/Exception/ParameterDoesNotExistException.phpÂuœgZ­Ÿh¤Dphpunit/Runner/Exception/PhptExternalFileCannotBeLoadedException.phpCÂuœgCþÔUr¤<phpunit/Runner/Exception/UnsupportedPhptSectionException.phpÂuœgÄ¡·§¤&phpunit/Runner/Extension/Extension.php…Âuœg…sƲ¤2phpunit/Runner/Extension/ExtensionBootstrapper.phpÌ ÂuœgÌ ËÁ¤#phpunit/Runner/Extension/Facade.php‘ Âuœg‘ ÇŒ -¤0phpunit/Runner/Extension/ParameterCollection.phpLÂuœgLpýñ(¤'phpunit/Runner/Extension/PharLoader.phpêÂuœgê 2¸¤4phpunit/Runner/Filter/ExcludeGroupFilterIterator.phpQÂuœgQúFßݤ3phpunit/Runner/Filter/ExcludeNameFilterIterator.php£Âuœg£BêÕ¤!phpunit/Runner/Filter/Factory.phpõ Âuœgõ Ä1 ¤-phpunit/Runner/Filter/GroupFilterIterator.php Âuœg ¥¿“A¤4phpunit/Runner/Filter/IncludeGroupFilterIterator.phpPÂuœgPIÿ £¤3phpunit/Runner/Filter/IncludeNameFilterIterator.php¢Âuœg¢jjϤ,phpunit/Runner/Filter/NameFilterIterator.phpˆÂuœgˆAÚz0¤.phpunit/Runner/Filter/TestIdFilterIterator.php©Âuœg©ûAág¤=phpunit/Runner/GarbageCollection/GarbageCollectionHandler.php6 Âuœg6 &%à¤Kphpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php<Âuœg</ëƒt¤Jphpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php5Âuœg5òXê$¤:phpunit/Runner/GarbageCollection/Subscriber/Subscriber.phpÂuœgl´Ñ¤Fphpunit/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.phpÏÂuœgÏ„g6¤(phpunit/Runner/HookMethod/HookMethod.php¨Âuœg¨­ªsŸ¤2phpunit/Runner/HookMethod/HookMethodCollection.phpÅ ÂuœgÅ ¥~„ɤphpunit/Runner/IssueFilter.php_Âuœg_¤Yܤ$phpunit/Runner/PHPT/PhptTestCase.php¢cÂuœg¢cšR/*¤&phpunit/Runner/PHPT/templates/phpt.tplÓÂuœgÓ>Üßu¤1phpunit/Runner/ResultCache/DefaultResultCache.phptÂuœgt¦ö¤.phpunit/Runner/ResultCache/NullResultCache.phpÂuœgu¬8N¤*phpunit/Runner/ResultCache/ResultCache.phpcÂuœgcB3ÖÖ¤1phpunit/Runner/ResultCache/ResultCacheHandler.phpÂuœgë 0õ¤4phpunit/Runner/ResultCache/Subscriber/Subscriber.phpcÂuœgc·Ëž¤Gphpunit/Runner/ResultCache/Subscriber/TestConsideredRiskySubscriber.phpTÂuœgT­_€¤?phpunit/Runner/ResultCache/Subscriber/TestErroredSubscriber.php$Âuœg$“ݘΤ>phpunit/Runner/ResultCache/Subscriber/TestFailedSubscriber.phpÂuœgÜú…†¤@phpunit/Runner/ResultCache/Subscriber/TestFinishedSubscriber.phpÉÂuœgÉíÎg¤Hphpunit/Runner/ResultCache/Subscriber/TestMarkedIncompleteSubscriber.phpZÂuœgZŸÞ¦v¤@phpunit/Runner/ResultCache/Subscriber/TestPreparedSubscriber.php*Âuœg*yѤ?phpunit/Runner/ResultCache/Subscriber/TestSkippedSubscriber.phpÃÂuœgÃà.“ͤEphpunit/Runner/ResultCache/Subscriber/TestSuiteFinishedSubscriber.php8Âuœg8Ê×/ý¤Dphpunit/Runner/ResultCache/Subscriber/TestSuiteStartedSubscriber.php2Âuœg2ª/ªÂ¤'phpunit/Runner/TestResult/Collector.phpkEÂuœgkEt /¤$phpunit/Runner/TestResult/Facade.phpôÂuœgô  e¤#phpunit/Runner/TestResult/Issue.phpà Âuœgà „9×=¤)phpunit/Runner/TestResult/PassedTests.phpp Âuœgp ‡sߤNphpunit/Runner/TestResult/Subscriber/AfterTestClassMethodErroredSubscriber.php˜Âuœg˜8)xº¤Ophpunit/Runner/TestResult/Subscriber/BeforeTestClassMethodErroredSubscriber.php¢Âuœg¢U½E2¤Cphpunit/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php˜Âuœg˜XUÕ¤3phpunit/Runner/TestResult/Subscriber/Subscriber.php`Âuœg`T¹1{¤Fphpunit/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.php\Âuœg\-ï½4¤>phpunit/Runner/TestResult/Subscriber/TestErroredSubscriber.php,Âuœg,ÿ;¦Ô¤=phpunit/Runner/TestResult/Subscriber/TestFailedSubscriber.php&Âuœg&×0ˤ?phpunit/Runner/TestResult/Subscriber/TestFinishedSubscriber.php2Âuœg2޻݃¤Gphpunit/Runner/TestResult/Subscriber/TestMarkedIncompleteSubscriber.phpbÂuœgbC•¬¿¤?phpunit/Runner/TestResult/Subscriber/TestPreparedSubscriber.php,Âuœg,<Ú¸G¤Qphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredDeprecationSubscriber.php’Âuœg’šÅÍ<¤Mphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredWarningSubscriber.phpzÂuœgzÚ+d¤>phpunit/Runner/TestResult/Subscriber/TestSkippedSubscriber.php,Âuœg,Û$ñ¤Dphpunit/Runner/TestResult/Subscriber/TestSuiteFinishedSubscriber.phpFÂuœgF2Šá¼¤Cphpunit/Runner/TestResult/Subscriber/TestSuiteSkippedSubscriber.php@Âuœg@OU&¤Cphpunit/Runner/TestResult/Subscriber/TestSuiteStartedSubscriber.php@Âuœg@ƒˆi¤Kphpunit/Runner/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.phpzÂuœgz°|?¤Ephpunit/Runner/TestResult/Subscriber/TestTriggeredErrorSubscriber.phpVÂuœgV¶‘Fphpunit/Runner/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php\Âuœg\¡AU‹¤Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.phpŒÂuœgŒB.XÞ¤Iphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.phpnÂuœgnE…@¤Jphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.phptÂuœgt’ÈS̤Rphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php¤Âuœg¤ù‘à/¤Lphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php€Âuœg€Ò)i2¤Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.phpŒÂuœgŒ,,ˆŒ¤Gphpunit/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.phpbÂuœgbÍ8Ux¤(phpunit/Runner/TestResult/TestResult.phpý@Âuœgý@ÝcHò¤"phpunit/Runner/TestSuiteLoader.php†Âuœg†P¢G¤"phpunit/Runner/TestSuiteSorter.php(Âuœg(¨ûL¤phpunit/Runner/Version.phpÏÂuœgÏÖÒú¤phpunit/TextUI/Application.php#aÂuœg#aSòãt¤"phpunit/TextUI/Command/Command.phpDÂuœgD5Ìk¤9phpunit/TextUI/Command/Commands/AtLeastVersionCommand.php5Âuœg5zд¤@phpunit/TextUI/Command/Commands/GenerateConfigurationCommand.php# Âuœg# ã2® ¤5phpunit/TextUI/Command/Commands/ListGroupsCommand.phpÂuœg‡,¤8phpunit/TextUI/Command/Commands/ListTestFilesCommand.phpÆÂuœgÆÒö ¤9phpunit/TextUI/Command/Commands/ListTestSuitesCommand.phpB -ÂuœgB -Q+ñ¤:phpunit/TextUI/Command/Commands/ListTestsAsTextCommand.phpÂuœgƒ’Þ¶¤9phpunit/TextUI/Command/Commands/ListTestsAsXmlCommand.phpÕÂuœgÕh=­¤?phpunit/TextUI/Command/Commands/MigrateConfigurationCommand.phpÂuœg¦—£#¤3phpunit/TextUI/Command/Commands/ShowHelpCommand.phpšÂuœgšÿ§x¤6phpunit/TextUI/Command/Commands/ShowVersionCommand.phpÇÂuœgÇ!n˜¤7phpunit/TextUI/Command/Commands/VersionCheckCommand.php] Âuœg] `}¤@phpunit/TextUI/Command/Commands/WarmCodeCoverageCacheCommand.php -Âuœg -6ј“¤!phpunit/TextUI/Command/Result.php½Âuœg½9aÉ2¤(phpunit/TextUI/Configuration/Builder.phpäÂuœgäß• 5¤,phpunit/TextUI/Configuration/Cli/Builder.phpcpÂuœgcpˆtj¤2phpunit/TextUI/Configuration/Cli/Configuration.phpèÙÂuœgèÙÙÃçS¤.phpunit/TextUI/Configuration/Cli/Exception.php[Âuœg[¨æÎ'¤?phpunit/TextUI/Configuration/Cli/XmlConfigurationFileFinder.phpÌÂuœgÌDý±ü¤;phpunit/TextUI/Configuration/CodeCoverageFilterRegistry.php¾Âuœg¾º™ò*¤.phpunit/TextUI/Configuration/Configuration.php}šÂuœg}š328¤Dphpunit/TextUI/Configuration/Exception/CannotFindSchemaException.php’Âuœg’¸«¢O¤Sphpunit/TextUI/Configuration/Exception/CodeCoverageReportNotConfiguredException.phpÂuœg©ÙVF¤Nphpunit/TextUI/Configuration/Exception/ConfigurationCannotBeBuiltException.php‹Âuœg‹6¯Õ¤4phpunit/TextUI/Configuration/Exception/Exception.php3Âuœg3¿l´p¤Gphpunit/TextUI/Configuration/Exception/FilterNotConfiguredException.php„Âuœg„´]Ü9¤Hphpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.php…Âuœg…N†¤>phpunit/TextUI/Configuration/Exception/NoBaselineException.php{Âuœg{%Iû¤?phpunit/TextUI/Configuration/Exception/NoBootstrapException.php|Âuœg|eIÂæ¤Dphpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.phpÂuœgÍAФGphpunit/TextUI/Configuration/Exception/NoConfigurationFileException.php„Âuœg„¡Þ@À¤Lphpunit/TextUI/Configuration/Exception/NoCoverageCacheDirectoryException.php‰Âuœg‰æGt½¤Cphpunit/TextUI/Configuration/Exception/NoCustomCssFileException.php€Âuœg€¾ÝòΤFphpunit/TextUI/Configuration/Exception/NoDefaultTestSuiteException.phpƒÂuœgƒàÐÿ¤Lphpunit/TextUI/Configuration/Exception/NoPharExtensionDirectoryException.php‰Âuœg‰™jà ¤\phpunit/TextUI/Configuration/Exception/SpecificDeprecationToStopOnNotConfiguredException.php™Âuœg™ì+̇¤'phpunit/TextUI/Configuration/Merger.php²ŠÂuœg²ŠçžQ¤+phpunit/TextUI/Configuration/PhpHandler.phpÉÂuœgÉà‘H¤)phpunit/TextUI/Configuration/Registry.phphÂuœgh~Øó«¤-phpunit/TextUI/Configuration/SourceFilter.php¶Âuœg¶jÖb¤-phpunit/TextUI/Configuration/SourceMapper.php„ Âuœg„ >sÊë¤1phpunit/TextUI/Configuration/TestSuiteBuilder.phpÂuœg>žÜH¤/phpunit/TextUI/Configuration/Value/Constant.php-Âuœg-9ⵤ9phpunit/TextUI/Configuration/Value/ConstantCollection.phpÂuœgfDP?¤Aphpunit/TextUI/Configuration/Value/ConstantCollectionIterator.phpÂuœg&–q€¤0phpunit/TextUI/Configuration/Value/Directory.php‰Âuœg‰nÏØ%¤:phpunit/TextUI/Configuration/Value/DirectoryCollection.phpðÂuœgð\Tc¤Bphpunit/TextUI/Configuration/Value/DirectoryCollectionIterator.phpÂuœg'»ä+¤9phpunit/TextUI/Configuration/Value/ExtensionBootstrap.phpÂuœgž„¤Cphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollection.phpžÂuœgžñ櫤Kphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollectionIterator.phprÂuœgrølû¤+phpunit/TextUI/Configuration/Value/File.phpÂuœg EÁð¤5phpunit/TextUI/Configuration/Value/FileCollection.php“Âuœg“2ï@|¤=phpunit/TextUI/Configuration/Value/FileCollectionIterator.phpØÂuœgØ7k’¤6phpunit/TextUI/Configuration/Value/FilterDirectory.phpYÂuœgY'Ùo‘¤@phpunit/TextUI/Configuration/Value/FilterDirectoryCollection.php'Âuœg'æ‰`ŤHphpunit/TextUI/Configuration/Value/FilterDirectoryCollectionIterator.php3Âuœg3ŠÆò\¤,phpunit/TextUI/Configuration/Value/Group.php…Âuœg…šVÛ_¤6phpunit/TextUI/Configuration/Value/GroupCollection.phpÂuœg¦b*¤>phpunit/TextUI/Configuration/Value/GroupCollectionIterator.phpãÂuœgã³-®(¤1phpunit/TextUI/Configuration/Value/IniSetting.php Âuœg ­E¨Õ¤;phpunit/TextUI/Configuration/Value/IniSettingCollection.php£Âuœg£l$ûˤCphpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.phpÂuœg^Œ~o¤*phpunit/TextUI/Configuration/Value/Php.phpîÂuœgîö¦«¤-phpunit/TextUI/Configuration/Value/Source.php=Âuœg=4èq¤4phpunit/TextUI/Configuration/Value/TestDirectory.php‰Âuœg‰©TϤ>phpunit/TextUI/Configuration/Value/TestDirectoryCollection.phpÂuœg§gàD¤Fphpunit/TextUI/Configuration/Value/TestDirectoryCollectionIterator.php)Âuœg)½@"[¤/phpunit/TextUI/Configuration/Value/TestFile.phpLÂuœgLø—ìú¤9phpunit/TextUI/Configuration/Value/TestFileCollection.php²Âuœg²5< ¤Aphpunit/TextUI/Configuration/Value/TestFileCollectionIterator.phpìÂuœgì»n@µ¤0phpunit/TextUI/Configuration/Value/TestSuite.phpŠÂuœgŠùÇ»¤:phpunit/TextUI/Configuration/Value/TestSuiteCollection.phpçÂuœgç!¤¥¤Bphpunit/TextUI/Configuration/Value/TestSuiteCollectionIterator.phpÂuœgCû3r¤/phpunit/TextUI/Configuration/Value/Variable.php«Âuœg«'z§3¤9phpunit/TextUI/Configuration/Value/VariableCollection.phpÂuœg¬!Ò~¤Aphpunit/TextUI/Configuration/Value/VariableCollectionIterator.phpÂuœgÊ­ñ¤>phpunit/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.phpÂuœg“ U¤?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.php&Âuœg&á+­¤Bphpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.php)Âuœg)±‹ZŤ?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Crap4j.phpËÂuœgËâÌñ¤=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Html.php Âuœg Ô{Oè¤<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Php.php#Âuœg#Hô3¤=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Text.phpÎÂuœgÎVÉ^ƒ¤<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Xml.php7Âuœg7Œ!¤2phpunit/TextUI/Configuration/Xml/Configuration.php2 Âuœg2 ’”¤9phpunit/TextUI/Configuration/Xml/DefaultConfiguration.php Âuœg 8 Τ.phpunit/TextUI/Configuration/Xml/Exception.php_Âuœg_+øg3¤.phpunit/TextUI/Configuration/Xml/Generator.phpöÂuœgöö z¤+phpunit/TextUI/Configuration/Xml/Groups.php½Âuœg½mu’¤@phpunit/TextUI/Configuration/Xml/LoadedFromFileConfiguration.phpƒÂuœgƒaAÇr¤+phpunit/TextUI/Configuration/Xml/Loader.phpHŽÂuœgHŽÿå8?¤2phpunit/TextUI/Configuration/Xml/Logging/Junit.phpÂuœgOÙ¤4phpunit/TextUI/Configuration/Xml/Logging/Logging.php Âuœg L¤Kphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveEmptyFilter.phpîÂuœgîåRµƒ¤Iphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveListeners.php›Âuœg›Í'6ï¤Hphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLogTypes.phpÝÂuœg݇tRO¤Ophpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLoggingElements.php(Âuœg('—¤Vphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveNoInteractionAttribute.php«Âuœg«n'°.¤Qphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemovePrinterAttributes.phpÂuœg]ï2/¤xphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveRegisterMockObjectsFromTestArgumentsRecursivelyAttribute.phpÂuœg¿ÕW¤Tphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestDoxGroupsElement.phpªÂuœgªô×´š¤Yphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestSuiteLoaderAttributes.php;Âuœg;)ó†¤Pphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveVerboseAttribute.php™Âuœg™Õª”±¤_phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php˜Âuœg˜Ž"Zù¤fphpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.phpÂÂuœgÂuÀˤ^phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php–Âuœg–ƒ–¢U¤kphpunit/TextUI/Configuration/Xml/Migration/Migrations/ReplaceRestrictDeprecationsWithIgnoreDeprecations.php‰Âuœg‰t¯³7¤Nphpunit/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.phpÖÂuœgÖÿF¤7phpunit/TextUI/Configuration/Xml/Migration/Migrator.phpÑÂuœgÑÕ+§¼¤?phpunit/TextUI/Configuration/Xml/Migration/SnapshotNodeList.php>Âuœg>ý+ ¤,phpunit/TextUI/Configuration/Xml/PHPUnit.phpÒ:ÂuœgÒ:;Ö‚!¤Ophpunit/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.php}Âuœg}|¥€¤Iphpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.phpÂuœg(ù¯¤Bphpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.phpoÂuœgoÐc€ª¤Sphpunit/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php+Âuœg+1•àA¤1phpunit/TextUI/Configuration/Xml/SchemaFinder.phpzÂuœgz=2–W¤4phpunit/TextUI/Configuration/Xml/TestSuiteMapper.phpÂuœgXX¸¤?phpunit/TextUI/Configuration/Xml/Validator/ValidationResult.phppÂuœgpú{¤8phpunit/TextUI/Configuration/Xml/Validator/Validator.phpùÂuœgùI‹ö`¤6phpunit/TextUI/Exception/CannotOpenSocketException.phpÂuœgzçá¤&phpunit/TextUI/Exception/Exception.php$Âuœg$昤3phpunit/TextUI/Exception/InvalidSocketException.phpÂuœgÊI -¤-phpunit/TextUI/Exception/RuntimeException.phpGÂuœgG¾n V¤;phpunit/TextUI/Exception/TestDirectoryNotFoundException.phpÂuœgH˲P¤6phpunit/TextUI/Exception/TestFileNotFoundException.phpþÂuœgþ=ƒ|¤phpunit/TextUI/Help.php¤9Âuœg¤9ëxx‡¤Aphpunit/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.php•3Âuœg•3L O¤cphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.phpºÂuœgºPÏDפGphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/Subscriber.php¦Âuœg¦%¢¹ß¤Zphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestConsideredRiskySubscriber.phptÂuœgtÜb¤Rphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestErroredSubscriber.phpJÂuœgJxmÇ¢¤Qphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFailedSubscriber.php>Âuœg>Y'¹‡¤Sphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFinishedSubscriber.phpJÂuœgJzJ–é¤[phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestMarkedIncompleteSubscriber.phpzÂuœgzÂjø\¤Sphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestPreparedSubscriber.phpJÂuœgJùû¤aphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestRunnerExecutionStartedSubscriber.php˜Âuœg˜ê¥j ¤Rphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestSkippedSubscriber.phpDÂuœgD…訚¤_phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredDeprecationSubscriber.php˜Âuœg˜d¿Vé¤Yphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredErrorSubscriber.phptÂuœgty´‘ѤZphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredNoticeSubscriber.phpzÂuœgz­[¾Ó¤bphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpDeprecationSubscriber.phpªÂuœgªA ”¤]phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpNoticeSubscriber.phpŒÂuœgŒ¸•‚è¤^phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpWarningSubscriber.php’Âuœg’¦Ú+¤fphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php¼Âuœg¼?ï>f¤bphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitWarningSubscriber.php¤Âuœg¤ƒ5ü›¤[phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredWarningSubscriber.php€Âuœg€ë Ý´¤/phpunit/TextUI/Output/Default/ResultPrinter.php`KÂuœg`KZzì¤9phpunit/TextUI/Output/Default/UnexpectedOutputPrinter.php3Âuœg3LŬ`¤ phpunit/TextUI/Output/Facade.phpn!Âuœgn!8q¤0phpunit/TextUI/Output/Printer/DefaultPrinter.phpˆ Âuœgˆ ¯"$¤-phpunit/TextUI/Output/Printer/NullPrinter.php§Âuœg§&W„þ¤)phpunit/TextUI/Output/Printer/Printer.php\Âuœg\gD“ߤ(phpunit/TextUI/Output/SummaryPrinter.php -Âuœg -`[¤/phpunit/TextUI/Output/TestDox/ResultPrinter.phpŒ(ÂuœgŒ((zˆÎ¤*phpunit/TextUI/ShellExitCodeCalculator.php Âuœg ¢p¨+¤phpunit/TextUI/TestRunner.php×Âuœg×m/$ؤ+phpunit/TextUI/TestSuiteFilterProcessor.phpF -ÂuœgF -œî5¶¤phpunit/Util/Cloner.phpÂuœgúÏé¤phpunit/Util/Color.php&Âuœg& í¾¹¤$phpunit/Util/Exception/Exception.php"Âuœg"ð‘Ò¤4phpunit/Util/Exception/InvalidDirectoryException.phpÂuœg ¦ç3¤/phpunit/Util/Exception/InvalidJsonException.php\Âuœg\÷nt¤:phpunit/Util/Exception/InvalidVersionOperatorException.phpÂuœgp2ïÙ¤.phpunit/Util/Exception/PhpProcessException.phpmÂuœgmZž|¤'phpunit/Util/Exception/XmlException.phpfÂuœgfÎ;´Q¤phpunit/Util/ExcludeList.php>Âuœg>f:\ɤphpunit/Util/Exporter.phpVÂuœgVÔMRç¤phpunit/Util/Filesystem.phpRÂuœgRñ]â_¤phpunit/Util/Filter.phpAÂuœgAu¡s¤phpunit/Util/GlobalState.phpÉÂuœgÉOÜÍÀ¤ phpunit/Util/Http/Downloader.phppÂuœgp ˜žu¤#phpunit/Util/Http/PhpDownloader.php Âuœg KÃ>Ƥphpunit/Util/Json.php Âuœg :+¾¾¤%phpunit/Util/PHP/DefaultJobRunner.php“Âuœg“«FŒ¤phpunit/Util/PHP/Job.php2 Âuœg2 EXÞ¤phpunit/Util/PHP/JobRunner.phpTÂuœgT2x‡E¤&phpunit/Util/PHP/JobRunnerRegistry.phpÂÂuœg¸JF¤phpunit/Util/PHP/Result.php~Âuœg~šsœB¤phpunit/Util/Reflection.phpu Âuœgu .ˤphpunit/Util/Test.phpûÂuœgû^=¤(phpunit/Util/ThrowableToStringMapper.php¬Âuœg¬¾F8Û¤*phpunit/Util/VersionComparisonOperator.phpÂuœgÞ⫤phpunit/Util/Xml/Loader.phpÕÂuœgÕ?/¤phpunit/Util/Xml/Xml.php3Âuœg3³À ݤsbom.xmlö%Âuœgö%YEg¤schema/10.0.xsd=Âuœg=|H¤schema/10.1.xsd«BÂuœg«BÜ­r—¤schema/10.2.xsdQEÂuœgQE¸çÿn¤schema/10.3.xsdFÂuœgF›¶3&¤schema/10.4.xsdGFÂuœgGF?”ñÁ¤schema/10.5.xsdGÂuœgGû7b„¤schema/11.0.xsdTFÂuœgTF÷É?z¤schema/11.1.xsd®HÂuœg®H!Êgè¤schema/11.2.xsd HÂuœg HëÍæ¤schema/11.3.xsdyIÂuœgyI“ô¹¤schema/11.4.xsd#IÂuœg#Iî0$”¤schema/8.5.xsdÓBÂuœgÓB2A[­¤schema/9.0.xsd4BÂuœg4B•¨7w¤schema/9.1.xsdÕBÂuœgÕBßq'8¤schema/9.2.xsdÜBÂuœgÜBc·Á-¤schema/9.3.xsd¼EÂuœg¼E¿ùq¤schema/9.4.xsd -FÂuœg -FDOFI¤schema/9.5.xsdDFÂuœgDFûùs|¤sebastian-cli-parser/LICENSEûÂuœgû§Øk¤sebastian-cli-parser/Parser.phpjÂuœgjd9¼¤<sebastian-cli-parser/exceptions/AmbiguousOptionException.phpJÂuœgJkK*¤-sebastian-cli-parser/exceptions/Exception.phpyÂuœgy>€±¤Gsebastian-cli-parser/exceptions/OptionDoesNotAllowArgumentException.phpcÂuœgcŠRjY¤Jsebastian-cli-parser/exceptions/RequiredOptionArgumentMissingException.phplÂuœglzQ¢¤:sebastian-cli-parser/exceptions/UnknownOptionException.phpCÂuœgC€*tP¤*sebastian-code-unit-reverse-lookup/LICENSEûÂuœgûu·Ç¤-sebastian-code-unit-reverse-lookup/Wizard.php -Âuœg -€ÙÛ¤'sebastian-code-unit/ClassMethodUnit.phpÚÂuœgÚjšë2¤!sebastian-code-unit/ClassUnit.phpÎÂuœgÎ]ºmÓ¤ sebastian-code-unit/CodeUnit.php)0Âuœg)0õtCF¤*sebastian-code-unit/CodeUnitCollection.phpðÂuœgðÒƒË}¤2sebastian-code-unit/CodeUnitCollectionIterator.phpVÂuœgVbu¤ sebastian-code-unit/FileUnit.phpÌÂuœgÌcÐŒR¤$sebastian-code-unit/FunctionUnit.phpÔÂuœgÔðD^¤+sebastian-code-unit/InterfaceMethodUnit.phpâÂuœgâ]5…D¤%sebastian-code-unit/InterfaceUnit.phpÖÂuœgÖ×bW¤sebastian-code-unit/LICENSEûÂuœgû§Øk¤sebastian-code-unit/Mapper.php„Âuœg„&­¤'sebastian-code-unit/TraitMethodUnit.phpÚÂuœgÚ„©¤!sebastian-code-unit/TraitUnit.phpÎÂuœgη*s:¤,sebastian-code-unit/exceptions/Exception.phpwÂuœgwž5ŒÇ¤;sebastian-code-unit/exceptions/InvalidCodeUnitException.php«Âuœg«MvÔŠ¤3sebastian-code-unit/exceptions/NoTraitException.php£Âuœg£å]Ü5¤6sebastian-code-unit/exceptions/ReflectionException.php¦Âuœg¦cÈQí¤(sebastian-comparator/ArrayComparator.phpi Âuœgi ŸÈ™¤#sebastian-comparator/Comparator.phpRÂuœgR¨À?¤*sebastian-comparator/ComparisonFailure.php Âuœg *ý*¤*sebastian-comparator/DOMNodeComparator.php -Âuœg -‘ô¨1¤+sebastian-comparator/DateTimeComparator.php‚Âuœg‚•Úíû¤.sebastian-comparator/EnumerationComparator.phpÀÂuœgÀÿL¤,sebastian-comparator/ExceptionComparator.php¿Âuœg¿ùyc¤ sebastian-comparator/Factory.phpÅÂuœgÅewÃñ¤sebastian-comparator/LICENSEûÂuœgû^2¤-sebastian-comparator/MockObjectComparator.phplÂuœglÚ—g8¤)sebastian-comparator/NumberComparator.php&Âuœg&°(2¤*sebastian-comparator/NumericComparator.phpcÂuœgc8›oå¤)sebastian-comparator/ObjectComparator.phpr -Âuœgr -Büeͤ+sebastian-comparator/ResourceComparator.phpOÂuœgOdnŒ¤)sebastian-comparator/ScalarComparator.php|Âuœg|~íb•¤3sebastian-comparator/SplObjectStorageComparator.php Âuœg ×bf¤'sebastian-comparator/TypeComparator.php…Âuœg…U -h‰¤-sebastian-comparator/exceptions/Exception.phpzÂuœgz¶£Ï¤4sebastian-comparator/exceptions/RuntimeException.php‘Âuœg‘€èõ_¤#sebastian-complexity/Calculator.php -Âuœg -ä}V¤.sebastian-complexity/Complexity/Complexity.php Âuœg w¸Š¤8sebastian-complexity/Complexity/ComplexityCollection.php* -Âuœg* -âl¤)¤@sebastian-complexity/Complexity/ComplexityCollectionIterator.phpRÂuœgR+ÂVù¤,sebastian-complexity/Exception/Exception.phpzÂuœgzȬˤ3sebastian-complexity/Exception/RuntimeException.php‘Âuœg‘¼Ìé¤sebastian-complexity/LICENSEûÂuœgû§Øk¤=sebastian-complexity/Visitor/ComplexityCalculatingVisitor.phpÂuœg$åÙ!¤Gsebastian-complexity/Visitor/CyclomaticComplexityCalculatingVisitor.phpSÂuœgS¿Ÿà ¤sebastian-diff/Chunk.php Âuœg ;™a¤sebastian-diff/Diff.phpHÂuœgHƒ¯€æ¤sebastian-diff/Differ.phpµÂuœgµË]ɤ3sebastian-diff/Exception/ConfigurationException.php,Âuœg,û>tñ¤&sebastian-diff/Exception/Exception.phpnÂuœgnšÀ/\¤5sebastian-diff/Exception/InvalidArgumentException.phpÂuœgæ$y¤sebastian-diff/LICENSEûÂuœgûƒÜ¡7¤sebastian-diff/Line.php0Âuœg0D5yŒ¤5sebastian-diff/LongestCommonSubsequenceCalculator.phpôÂuœgôep€6¤Dsebastian-diff/MemoryEfficientLongestCommonSubsequenceCalculator.phpüÂuœgüæeE¤4sebastian-diff/Output/AbstractChunkOutputBuilder.phpùÂuœgù?&ðæ¤/sebastian-diff/Output/DiffOnlyOutputBuilder.php€Âuœg€Ù| ¨¤4sebastian-diff/Output/DiffOutputBuilderInterface.phpÂuœgpmö¤8sebastian-diff/Output/StrictUnifiedDiffOutputBuilder.phpS(ÂuœgS(À/Ní¤2sebastian-diff/Output/UnifiedDiffOutputBuilder.phpÏÂuœgÏÁ¬.ߤsebastian-diff/Parser.phpÚ ÂuœgÚ &pѤBsebastian-diff/TimeEfficientLongestCommonSubsequenceCalculator.phpùÂuœgùNœh ¤!sebastian-environment/Console.phpÂuœgÕ1´¤sebastian-environment/LICENSEûÂuœgû'|¯¤!sebastian-environment/Runtime.php|Âuœg|+@$¨¤sebastian-exporter/Exporter.phpŠ0ÂuœgŠ0i@9¤sebastian-exporter/LICENSEûÂuœgûƒÜ¡7¤'sebastian-global-state/CodeExporter.php™ Âuœg™ l¤¤&sebastian-global-state/ExcludeList.php Âuœg Vÿeu¤sebastian-global-state/LICENSEûÂuœgûßik¤#sebastian-global-state/Restorer.php< Âuœg< ºÊ—¤#sebastian-global-state/Snapshot.phpÚ+ÂuœgÚ+“êl<¤/sebastian-global-state/exceptions/Exception.php}Âuœg}¶µâ´¤6sebastian-global-state/exceptions/RuntimeException.php”Âuœg”#Ú™¤#sebastian-lines-of-code/Counter.phpåÂuœgåjíª¤/sebastian-lines-of-code/Exception/Exception.php~Âuœg~%>²ú¤>sebastian-lines-of-code/Exception/IllogicalValuesException.php®Âuœg®Êårÿ¤<sebastian-lines-of-code/Exception/NegativeValueException.phpÀÂuœgÀË&«Ó¤6sebastian-lines-of-code/Exception/RuntimeException.php•Âuœg•Ñ)Ϲ¤sebastian-lines-of-code/LICENSEûÂuœgû§Øk¤/sebastian-lines-of-code/LineCountingVisitor.phpÕÂuœgÕæ¤ t¤'sebastian-lines-of-code/LinesOfCode.php’ Âuœg’ t‘ïî¤*sebastian-object-enumerator/Enumerator.phpDÂuœgDÑ4õ¤.sebastian-object-reflector/ObjectReflector.phpûÂuœgûŸŸMl¤'sebastian-recursion-context/Context.phpÎÂuœgÎæ>iK¤#sebastian-recursion-context/LICENSEûÂuœgûƒÜ¡7¤sebastian-type/LICENSEûÂuœgûgÒ2¤sebastian-type/Parameter.php¦Âuœg¦ÓòR7¤#sebastian-type/ReflectionMapper.phpaÂuœgaÐh¢Á¤sebastian-type/TypeName.phpöÂuœgö9ô_w¤&sebastian-type/exception/Exception.phpäÂuœgä}¥«¤-sebastian-type/exception/RuntimeException.phpûÂuœgûÃu†¤$sebastian-type/type/CallableType.phpWÂuœgWiùzì¤!sebastian-type/type/FalseType.phpÂÂuœg³X ]¤)sebastian-type/type/GenericObjectType.phpyÂuœgy‰#¸„¤(sebastian-type/type/IntersectionType.php€ Âuœg€ ž×¤$sebastian-type/type/IterableType.phpIÂuœgIZ«ŸÀ¤!sebastian-type/type/MixedType.php­Âuœg­ jÿ¦¤!sebastian-type/type/NeverType.php7Âuœg7}‘š¤ sebastian-type/type/NullType.php§Âuœg§#² n¤"sebastian-type/type/ObjectType.phpŒÂuœgŒ"Ç?Õ¤"sebastian-type/type/SimpleType.phpPÂuœgPgË·»¤"sebastian-type/type/StaticType.php"Âuœg"Oaг¤ sebastian-type/type/TrueType.php½Âuœg½,šiú¤sebastian-type/type/Type.php‰Âuœg‰mgg¤!sebastian-type/type/UnionType.php€ Âuœg€ °¬_¤#sebastian-type/type/UnknownType.phpŸÂuœgŸyWk=¤ sebastian-type/type/VoidType.php3Âuœg3õó¤sebastian-version/LICENSEûÂuœgû‘ÞD"¤sebastian-version/Version.php Âuœg -xޤ$staabm-side-effects-detector/LICENSE-Âuœg-ßâj-¤+staabm-side-effects-detector/SideEffect.phpFÂuœgFpפ4staabm-side-effects-detector/SideEffectsDetector.phpÒ$ÂuœgÒ$ÅÌÅ©¤1staabm-side-effects-detector/functionMetadata.phpŸsÂuœgŸsÔä!s¤theseer-tokenizer/Exception.phprÂuœgrÊÂmœ¤theseer-tokenizer/LICENSEüÂuœgüïR (¤"theseer-tokenizer/NamespaceUri.phpJÂuœgJWç]¤+theseer-tokenizer/NamespaceUriException.php}Âuœg}aÕ“¤theseer-tokenizer/Token.php—Âuœg—K•`¤%theseer-tokenizer/TokenCollection.phpÂuœgN´}¤.theseer-tokenizer/TokenCollectionException.php€Âuœg€5ɤtheseer-tokenizer/Tokenizer.php Âuœg !ŠøN¤#theseer-tokenizer/XMLSerializer.phpêÂuœgêu(Õ¤{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "8bb9756429367fe5f916165dd00b8a5a", - "packages": [ - { - "name": "myclabs/deep-copy", - "version": "1.12.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2024-11-08T17:47:46+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" - }, - "time": "2024-12-30T11:07:19+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "11.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "418c59fd080954f8c4aa5631d9502ecda2387118" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118", - "reference": "418c59fd080954f8c4aa5631d9502ecda2387118", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^5.3.1", - "php": ">=8.2", - "phpunit/php-file-iterator": "^5.1.0", - "phpunit/php-text-template": "^4.0.1", - "sebastian/code-unit-reverse-lookup": "^4.0.1", - "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.0", - "sebastian/lines-of-code": "^3.0.1", - "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^11.5.0" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "11.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-12-11T12:34:27+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "5.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-27T05:02:59+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "5.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^11.0" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:07:44+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:08:43+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "7.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:09:35+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:41:36+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", - "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-12-12T09:59:06+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:45:54+00:00" - }, - { - "name": "sebastian/comparator", - "version": "6.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d4e47a769525c4dd38cea90e5dcd435ddbbc7115", - "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/diff": "^6.0", - "sebastian/exporter": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.4" - }, - "suggest": { - "ext-bcmath": "For comparing BcMath\\Number objects" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-01-06T10:28:19+00:00" - }, - { - "name": "sebastian/complexity", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:49:50+00:00" - }, - { - "name": "sebastian/diff", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:53:05+00:00" - }, - { - "name": "sebastian/environment", - "version": "7.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", - "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:54:44+00:00" - }, - { - "name": "sebastian/exporter", - "version": "6.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-12-05T09:17:50+00:00" - }, - { - "name": "sebastian/global-state", - "version": "7.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:57:36+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:58:38+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "6.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:00:13+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:01:32+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:10:34+00:00" - }, - { - "name": "sebastian/type", - "version": "5.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/461b9c5da241511a2a0e8f240814fb23ce5c0aac", - "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-09-17T13:12:04+00:00" - }, - { - "name": "sebastian/version", - "version": "5.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-10-09T05:16:32+00:00" - }, - { - "name": "staabm/side-effects-detector", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/staabm/side-effects-detector.git", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.6", - "phpunit/phpunit": "^9.6.21", - "symfony/var-dumper": "^5.4.43", - "tomasvotruba/type-coverage": "1.0.0", - "tomasvotruba/unused-public": "1.0.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "lib/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A static analysis tool to detect side effects in PHP code", - "keywords": [ - "static analysis" - ], - "support": { - "issues": "https://github.com/staabm/side-effects-detector/issues", - "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" - }, - "funding": [ - { - "url": "https://github.com/staabm", - "type": "github" - } - ], - "time": "2024-10-20T05:08:20+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": {}, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": ">=8.2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*" - }, - "platform-dev": {}, - "platform-overrides": { - "php": "8.2.0" - }, - "plugin-api-version": "2.6.0" -} -phpunit/phpunit: 11.5.6 -myclabs/deep-copy: 1.12.1 -nikic/php-parser: v5.4.0 -phar-io/manifest: 2.0.4 -phar-io/version: 3.2.1 -phpunit/php-code-coverage: 11.0.8 -phpunit/php-file-iterator: 5.1.0 -phpunit/php-invoker: 5.0.1 -phpunit/php-text-template: 4.0.1 -phpunit/php-timer: 7.0.1 -sebastian/cli-parser: 3.0.2 -sebastian/code-unit: 3.0.2 -sebastian/code-unit-reverse-lookup: 4.0.1 -sebastian/comparator: 6.3.0 -sebastian/complexity: 4.0.1 -sebastian/diff: 6.0.2 -sebastian/environment: 7.2.0 -sebastian/exporter: 6.3.0 -sebastian/global-state: 7.0.2 -sebastian/lines-of-code: 3.0.1 -sebastian/object-enumerator: 6.0.1 -sebastian/object-reflector: 4.0.1 -sebastian/recursion-context: 6.0.2 -sebastian/type: 5.1.0 -sebastian/version: 5.0.2 -staabm/side-effects-detector: 1.0.5 -theseer/tokenizer: 1.2.3 - Filter, 'matcher' => Matcher] pairs. - */ - private $filters = []; - /** - * Type Filters to apply. - * - * @var array Array of ['filter' => Filter, 'matcher' => Matcher] pairs. - */ - private $typeFilters = []; - /** - * @var bool - */ - private $skipUncloneable = \false; - /** - * @var bool - */ - private $useCloneMethod; - /** - * @param bool $useCloneMethod If set to true, when an object implements the __clone() function, it will be used - * instead of the regular deep cloning. - */ - public function __construct($useCloneMethod = \false) - { - $this->useCloneMethod = $useCloneMethod; - $this->addTypeFilter(new ArrayObjectFilter($this), new TypeMatcher(ArrayObject::class)); - $this->addTypeFilter(new DateIntervalFilter(), new TypeMatcher(DateInterval::class)); - $this->addTypeFilter(new DatePeriodFilter(), new TypeMatcher(DatePeriod::class)); - $this->addTypeFilter(new SplDoublyLinkedListFilter($this), new TypeMatcher(SplDoublyLinkedList::class)); - } - /** - * If enabled, will not throw an exception when coming across an uncloneable property. - * - * @param $skipUncloneable - * - * @return $this - */ - public function skipUncloneable($skipUncloneable = \true) - { - $this->skipUncloneable = $skipUncloneable; - return $this; - } - /** - * Deep copies the given object. - * - * @param mixed $object - * - * @return mixed - */ - public function copy($object) - { - $this->hashMap = []; - return $this->recursiveCopy($object); - } - public function addFilter(Filter $filter, Matcher $matcher) - { - $this->filters[] = ['matcher' => $matcher, 'filter' => $filter]; - } - public function prependFilter(Filter $filter, Matcher $matcher) - { - array_unshift($this->filters, ['matcher' => $matcher, 'filter' => $filter]); - } - public function addTypeFilter(TypeFilter $filter, TypeMatcher $matcher) - { - $this->typeFilters[] = ['matcher' => $matcher, 'filter' => $filter]; - } - private function recursiveCopy($var) - { - // Matches Type Filter - if ($filter = $this->getFirstMatchedTypeFilter($this->typeFilters, $var)) { - return $filter->apply($var); - } - // Resource - if (is_resource($var)) { - return $var; - } - // Array - if (is_array($var)) { - return $this->copyArray($var); - } - // Scalar - if (!is_object($var)) { - return $var; - } - // Enum - if (\PHP_VERSION_ID >= 80100 && enum_exists(get_class($var))) { - return $var; - } - // Object - return $this->copyObject($var); - } - /** - * Copy an array - * @param array $array - * @return array - */ - private function copyArray(array $array) - { - foreach ($array as $key => $value) { - $array[$key] = $this->recursiveCopy($value); - } - return $array; - } - /** - * Copies an object. - * - * @param object $object - * - * @throws CloneException - * - * @return object - */ - private function copyObject($object) - { - $objectHash = spl_object_hash($object); - if (isset($this->hashMap[$objectHash])) { - return $this->hashMap[$objectHash]; - } - $reflectedObject = new ReflectionObject($object); - $isCloneable = $reflectedObject->isCloneable(); - if (\false === $isCloneable) { - if ($this->skipUncloneable) { - $this->hashMap[$objectHash] = $object; - return $object; - } - throw new CloneException(sprintf('The class "%s" is not cloneable.', $reflectedObject->getName())); - } - $newObject = clone $object; - $this->hashMap[$objectHash] = $newObject; - if ($this->useCloneMethod && $reflectedObject->hasMethod('__clone')) { - return $newObject; - } - if ($newObject instanceof DateTimeInterface || $newObject instanceof DateTimeZone) { - return $newObject; - } - foreach (ReflectionHelper::getProperties($reflectedObject) as $property) { - $this->copyObjectProperty($newObject, $property); - } - return $newObject; - } - private function copyObjectProperty($object, ReflectionProperty $property) - { - // Ignore static properties - if ($property->isStatic()) { - return; - } - // Ignore readonly properties - if (method_exists($property, 'isReadOnly') && $property->isReadOnly()) { - return; - } - // Apply the filters - foreach ($this->filters as $item) { - /** @var Matcher $matcher */ - $matcher = $item['matcher']; - /** @var Filter $filter */ - $filter = $item['filter']; - if ($matcher->matches($object, $property->getName())) { - $filter->apply($object, $property->getName(), function ($object) { - return $this->recursiveCopy($object); - }); - if ($filter instanceof ChainableFilter) { - continue; - } - // If a filter matches, we stop processing this property - return; - } - } - $property->setAccessible(\true); - // Ignore uninitialized properties (for PHP >7.4) - if (method_exists($property, 'isInitialized') && !$property->isInitialized($object)) { - return; - } - $propertyValue = $property->getValue($object); - // Copy the property - $property->setValue($object, $this->recursiveCopy($propertyValue)); - } - /** - * Returns first filter that matches variable, `null` if no such filter found. - * - * @param array $filterRecords Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and - * 'matcher' with value of type {@see TypeMatcher} - * @param mixed $var - * - * @return TypeFilter|null - */ - private function getFirstMatchedTypeFilter(array $filterRecords, $var) - { - $matched = $this->first($filterRecords, function (array $record) use ($var) { - /* @var TypeMatcher $matcher */ - $matcher = $record['matcher']; - return $matcher->matches($var); - }); - return isset($matched) ? $matched['filter'] : null; - } - /** - * Returns first element that matches predicate, `null` if no such element found. - * - * @param array $elements Array of ['filter' => Filter, 'matcher' => Matcher] pairs. - * @param callable $predicate Predicate arguments are: element. - * - * @return array|null Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and 'matcher' - * with value of type {@see TypeMatcher} or `null`. - */ - private function first(array $elements, callable $predicate) - { - foreach ($elements as $element) { - if (call_user_func($predicate, $element)) { - return $element; - } - } - return null; - } -} -filter = $filter; - } - public function apply($object, $property, $objectCopier) - { - $this->filter->apply($object, $property, $objectCopier); - } -} -setAccessible(\true); - $oldCollection = $reflectionProperty->getValue($object); - $newCollection = $oldCollection->map(function ($item) use ($objectCopier) { - return $objectCopier($item); - }); - $reflectionProperty->setValue($object, $newCollection); - } -} -setAccessible(\true); - $reflectionProperty->setValue($object, new ArrayCollection()); - } -} -__load(); - } -} -callback = $callable; - } - /** - * Replaces the object property by the result of the callback called with the object property. - * - * {@inheritdoc} - */ - public function apply($object, $property, $objectCopier) - { - $reflectionProperty = ReflectionHelper::getProperty($object, $property); - $reflectionProperty->setAccessible(\true); - $value = call_user_func($this->callback, $reflectionProperty->getValue($object)); - $reflectionProperty->setValue($object, $value); - } -} -setAccessible(\true); - $reflectionProperty->setValue($object, null); - } -} -class = $class; - $this->property = $property; - } - /** - * Matches a specific property of a specific class. - * - * {@inheritdoc} - */ - public function matches($object, $property) - { - return $object instanceof $this->class && $property == $this->property; - } -} -property = $property; - } - /** - * Matches a property by its name. - * - * {@inheritdoc} - */ - public function matches($object, $property) - { - return $property == $this->property; - } -} -propertyType = $propertyType; - } - /** - * {@inheritdoc} - */ - public function matches($object, $property) - { - try { - $reflectionProperty = ReflectionHelper::getProperty($object, $property); - } catch (ReflectionException $exception) { - return \false; - } - $reflectionProperty->setAccessible(\true); - // Uninitialized properties (for PHP >7.4) - if (method_exists($reflectionProperty, 'isInitialized') && !$reflectionProperty->isInitialized($object)) { - // null instanceof $this->propertyType - return \false; - } - return $reflectionProperty->getValue($object) instanceof $this->propertyType; - } -} -getProperties() does not return private properties from ancestor classes. - * - * @author muratyaman@gmail.com - * @see http://php.net/manual/en/reflectionclass.getproperties.php - * - * @param ReflectionClass $ref - * - * @return ReflectionProperty[] - */ - public static function getProperties(ReflectionClass $ref) - { - $props = $ref->getProperties(); - $propsArr = array(); - foreach ($props as $prop) { - $propertyName = $prop->getName(); - $propsArr[$propertyName] = $prop; - } - if ($parentClass = $ref->getParentClass()) { - $parentPropsArr = self::getProperties($parentClass); - foreach ($propsArr as $key => $property) { - $parentPropsArr[$key] = $property; - } - return $parentPropsArr; - } - return $propsArr; - } - /** - * Retrieves property by name from object and all its ancestors. - * - * @param object|string $object - * @param string $name - * - * @throws PropertyException - * @throws ReflectionException - * - * @return ReflectionProperty - */ - public static function getProperty($object, $name) - { - $reflection = is_object($object) ? new ReflectionObject($object) : new ReflectionClass($object); - if ($reflection->hasProperty($name)) { - return $reflection->getProperty($name); - } - if ($parentClass = $reflection->getParentClass()) { - return self::getProperty($parentClass->getName(), $name); - } - throw new PropertyException(sprintf('The class "%s" doesn\'t have a property with the given name: "%s".', is_object($object) ? get_class($object) : $object, $name)); - } -} - $propertyValue) { - $copy->{$propertyName} = $propertyValue; - } - return $copy; - } -} -= 80200 && $element->include_end_date) { - $options |= DatePeriod::INCLUDE_END_DATE; - } - if (!$element->include_start_date) { - $options |= DatePeriod::EXCLUDE_START_DATE; - } - if ($element->getEndDate()) { - return new DatePeriod($element->getStartDate(), $element->getDateInterval(), $element->getEndDate(), $options); - } - if (\PHP_VERSION_ID >= 70217) { - $recurrences = $element->getRecurrences(); - } else { - $recurrences = $element->recurrences - $element->include_start_date; - } - return new DatePeriod($element->getStartDate(), $element->getDateInterval(), $recurrences, $options); - } -} -callback = $callable; - } - /** - * {@inheritdoc} - */ - public function apply($element) - { - return call_user_func($this->callback, $element); - } -} -copier = $copier; - } - /** - * {@inheritdoc} - */ - public function apply($arrayObject) - { - $clone = clone $arrayObject; - foreach ($arrayObject->getArrayCopy() as $k => $v) { - $clone->offsetSet($k, $this->copier->copy($v)); - } - return $clone; - } -} -copier = $copier; - } - /** - * {@inheritdoc} - */ - public function apply($element) - { - $newElement = clone $element; - $copy = $this->createCopyClosure(); - return $copy($newElement); - } - private function createCopyClosure() - { - $copier = $this->copier; - $copy = function (SplDoublyLinkedList $list) use ($copier) { - // Replace each element in the list with a deep copy of itself - for ($i = 1; $i <= $list->count(); $i++) { - $copy = $copier->recursiveCopy($list->shift()); - $list->push($copy); - } - return $list; - }; - return Closure::bind($copy, null, DeepCopy::class); - } -} -type = $type; - } - /** - * @param mixed $element - * - * @return boolean - */ - public function matches($element) - { - return is_object($element) ? is_a($element, $this->type) : gettype($element) === $this->type; - } -} -copy($value); - } -} -The MIT License (MIT) - -Copyright (c) 2013 My C-Sense - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -BSD 3-Clause License - -Copyright (c) 2011, Nikita Popov -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - protected array $attributes = []; - /** @var list */ - protected array $constants = []; - /** @var list */ - protected array $attributeGroups = []; - /** @var Identifier|Node\Name|Node\ComplexType|null */ - protected ?Node $type = null; - /** - * Creates a class constant builder - * - * @param string|Identifier $name Name - * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value Value - */ - public function __construct($name, $value) - { - $this->constants = [new Const_($name, BuilderHelpers::normalizeValue($value))]; - } - /** - * Add another constant to const group - * - * @param string|Identifier $name Name - * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value Value - * - * @return $this The builder instance (for fluid interface) - */ - public function addConst($name, $value) - { - $this->constants[] = new Const_($name, BuilderHelpers::normalizeValue($value)); - return $this; - } - /** - * Makes the constant public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); - return $this; - } - /** - * Makes the constant protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); - return $this; - } - /** - * Makes the constant private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); - return $this; - } - /** - * Makes the constant final. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeFinal() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL); - return $this; - } - /** - * Sets doc comment for the constant. - * - * @param PhpParser\Comment\Doc|string $docComment Doc comment to set - * - * @return $this The builder instance (for fluid interface) - */ - public function setDocComment($docComment) - { - $this->attributes = ['comments' => [BuilderHelpers::normalizeDocComment($docComment)]]; - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Sets the constant type. - * - * @param string|Node\Name|Identifier|Node\ComplexType $type - * - * @return $this - */ - public function setType($type) - { - $this->type = BuilderHelpers::normalizeType($type); - return $this; - } - /** - * Returns the built class node. - * - * @return Stmt\ClassConst The built constant node - */ - public function getNode(): PhpParser\Node - { - return new Stmt\ClassConst($this->constants, $this->flags, $this->attributes, $this->attributeGroups, $this->type); - } -} - */ - protected array $implements = []; - protected int $flags = 0; - /** @var list */ - protected array $uses = []; - /** @var list */ - protected array $constants = []; - /** @var list */ - protected array $properties = []; - /** @var list */ - protected array $methods = []; - /** @var list */ - protected array $attributeGroups = []; - /** - * Creates a class builder. - * - * @param string $name Name of the class - */ - public function __construct(string $name) - { - $this->name = $name; - } - /** - * Extends a class. - * - * @param Name|string $class Name of class to extend - * - * @return $this The builder instance (for fluid interface) - */ - public function extend($class) - { - $this->extends = BuilderHelpers::normalizeName($class); - return $this; - } - /** - * Implements one or more interfaces. - * - * @param Name|string ...$interfaces Names of interfaces to implement - * - * @return $this The builder instance (for fluid interface) - */ - public function implement(...$interfaces) - { - foreach ($interfaces as $interface) { - $this->implements[] = BuilderHelpers::normalizeName($interface); - } - return $this; - } - /** - * Makes the class abstract. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeAbstract() - { - $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::ABSTRACT); - return $this; - } - /** - * Makes the class final. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeFinal() - { - $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::FINAL); - return $this; - } - /** - * Makes the class readonly. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeReadonly() - { - $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::READONLY); - return $this; - } - /** - * Adds a statement. - * - * @param Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) - { - $stmt = BuilderHelpers::normalizeNode($stmt); - if ($stmt instanceof Stmt\Property) { - $this->properties[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassMethod) { - $this->methods[] = $stmt; - } elseif ($stmt instanceof Stmt\TraitUse) { - $this->uses[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassConst) { - $this->constants[] = $stmt; - } else { - throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); - } - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Returns the built class node. - * - * @return Stmt\Class_ The built class node - */ - public function getNode(): PhpParser\Node - { - return new Stmt\Class_($this->name, ['flags' => $this->flags, 'extends' => $this->extends, 'implements' => $this->implements, 'stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); - } -} - */ - protected array $attributes = []; - /** - * Adds a statement. - * - * @param PhpParser\Node\Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - abstract public function addStmt($stmt); - /** - * Adds multiple statements. - * - * @param (PhpParser\Node\Stmt|PhpParser\Builder)[] $stmts The statements to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmts(array $stmts) - { - foreach ($stmts as $stmt) { - $this->addStmt($stmt); - } - return $this; - } - /** - * Sets doc comment for the declaration. - * - * @param PhpParser\Comment\Doc|string $docComment Doc comment to set - * - * @return $this The builder instance (for fluid interface) - */ - public function setDocComment($docComment) - { - $this->attributes['comments'] = [BuilderHelpers::normalizeDocComment($docComment)]; - return $this; - } -} - */ - protected array $attributes = []; - /** @var list */ - protected array $attributeGroups = []; - /** - * Creates an enum case builder. - * - * @param string|Identifier $name Name - */ - public function __construct($name) - { - $this->name = $name; - } - /** - * Sets the value. - * - * @param Node\Expr|string|int $value - * - * @return $this - */ - public function setValue($value) - { - $this->value = BuilderHelpers::normalizeValue($value); - return $this; - } - /** - * Sets doc comment for the constant. - * - * @param PhpParser\Comment\Doc|string $docComment Doc comment to set - * - * @return $this The builder instance (for fluid interface) - */ - public function setDocComment($docComment) - { - $this->attributes = ['comments' => [BuilderHelpers::normalizeDocComment($docComment)]]; - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Returns the built enum case node. - * - * @return Stmt\EnumCase The built constant node - */ - public function getNode(): PhpParser\Node - { - return new Stmt\EnumCase($this->name, $this->value, $this->attributeGroups, $this->attributes); - } -} - */ - protected array $implements = []; - /** @var list */ - protected array $uses = []; - /** @var list */ - protected array $enumCases = []; - /** @var list */ - protected array $constants = []; - /** @var list */ - protected array $methods = []; - /** @var list */ - protected array $attributeGroups = []; - /** - * Creates an enum builder. - * - * @param string $name Name of the enum - */ - public function __construct(string $name) - { - $this->name = $name; - } - /** - * Sets the scalar type. - * - * @param string|Identifier $scalarType - * - * @return $this - */ - public function setScalarType($scalarType) - { - $this->scalarType = BuilderHelpers::normalizeType($scalarType); - return $this; - } - /** - * Implements one or more interfaces. - * - * @param Name|string ...$interfaces Names of interfaces to implement - * - * @return $this The builder instance (for fluid interface) - */ - public function implement(...$interfaces) - { - foreach ($interfaces as $interface) { - $this->implements[] = BuilderHelpers::normalizeName($interface); - } - return $this; - } - /** - * Adds a statement. - * - * @param Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) - { - $stmt = BuilderHelpers::normalizeNode($stmt); - if ($stmt instanceof Stmt\EnumCase) { - $this->enumCases[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassMethod) { - $this->methods[] = $stmt; - } elseif ($stmt instanceof Stmt\TraitUse) { - $this->uses[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassConst) { - $this->constants[] = $stmt; - } else { - throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); - } - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Returns the built class node. - * - * @return Stmt\Enum_ The built enum node - */ - public function getNode(): PhpParser\Node - { - return new Stmt\Enum_($this->name, ['scalarType' => $this->scalarType, 'implements' => $this->implements, 'stmts' => array_merge($this->uses, $this->enumCases, $this->constants, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); - } -} -returnByRef = \true; - return $this; - } - /** - * Adds a parameter. - * - * @param Node\Param|Param $param The parameter to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addParam($param) - { - $param = BuilderHelpers::normalizeNode($param); - if (!$param instanceof Node\Param) { - throw new \LogicException(sprintf('Expected parameter node, got "%s"', $param->getType())); - } - $this->params[] = $param; - return $this; - } - /** - * Adds multiple parameters. - * - * @param (Node\Param|Param)[] $params The parameters to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addParams(array $params) - { - foreach ($params as $param) { - $this->addParam($param); - } - return $this; - } - /** - * Sets the return type for PHP 7. - * - * @param string|Node\Name|Node\Identifier|Node\ComplexType $type - * - * @return $this The builder instance (for fluid interface) - */ - public function setReturnType($type) - { - $this->returnType = BuilderHelpers::normalizeType($type); - return $this; - } -} - */ - protected array $stmts = []; - /** @var list */ - protected array $attributeGroups = []; - /** - * Creates a function builder. - * - * @param string $name Name of the function - */ - public function __construct(string $name) - { - $this->name = $name; - } - /** - * Adds a statement. - * - * @param Node|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) - { - $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Returns the built function node. - * - * @return Stmt\Function_ The built function node - */ - public function getNode(): Node - { - return new Stmt\Function_($this->name, ['byRef' => $this->returnByRef, 'params' => $this->params, 'returnType' => $this->returnType, 'stmts' => $this->stmts, 'attrGroups' => $this->attributeGroups], $this->attributes); - } -} - */ - protected array $extends = []; - /** @var list */ - protected array $constants = []; - /** @var list */ - protected array $methods = []; - /** @var list */ - protected array $attributeGroups = []; - /** - * Creates an interface builder. - * - * @param string $name Name of the interface - */ - public function __construct(string $name) - { - $this->name = $name; - } - /** - * Extends one or more interfaces. - * - * @param Name|string ...$interfaces Names of interfaces to extend - * - * @return $this The builder instance (for fluid interface) - */ - public function extend(...$interfaces) - { - foreach ($interfaces as $interface) { - $this->extends[] = BuilderHelpers::normalizeName($interface); - } - return $this; - } - /** - * Adds a statement. - * - * @param Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) - { - $stmt = BuilderHelpers::normalizeNode($stmt); - if ($stmt instanceof Stmt\ClassConst) { - $this->constants[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassMethod) { - // we erase all statements in the body of an interface method - $stmt->stmts = null; - $this->methods[] = $stmt; - } else { - throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); - } - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Returns the built interface node. - * - * @return Stmt\Interface_ The built interface node - */ - public function getNode(): PhpParser\Node - { - return new Stmt\Interface_($this->name, ['extends' => $this->extends, 'stmts' => array_merge($this->constants, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); - } -} -|null */ - protected ?array $stmts = []; - /** @var list */ - protected array $attributeGroups = []; - /** - * Creates a method builder. - * - * @param string $name Name of the method - */ - public function __construct(string $name) - { - $this->name = $name; - } - /** - * Makes the method public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); - return $this; - } - /** - * Makes the method protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); - return $this; - } - /** - * Makes the method private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); - return $this; - } - /** - * Makes the method static. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeStatic() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::STATIC); - return $this; - } - /** - * Makes the method abstract. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeAbstract() - { - if (!empty($this->stmts)) { - throw new \LogicException('Cannot make method with statements abstract'); - } - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::ABSTRACT); - $this->stmts = null; - // abstract methods don't have statements - return $this; - } - /** - * Makes the method final. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeFinal() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL); - return $this; - } - /** - * Adds a statement. - * - * @param Node|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) - { - if (null === $this->stmts) { - throw new \LogicException('Cannot add statements to an abstract method'); - } - $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Returns the built method node. - * - * @return Stmt\ClassMethod The built method node - */ - public function getNode(): Node - { - return new Stmt\ClassMethod($this->name, ['flags' => $this->flags, 'byRef' => $this->returnByRef, 'params' => $this->params, 'returnType' => $this->returnType, 'stmts' => $this->stmts, 'attrGroups' => $this->attributeGroups], $this->attributes); - } -} -name = null !== $name ? BuilderHelpers::normalizeName($name) : null; - } - /** - * Adds a statement. - * - * @param Node|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) - { - $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); - return $this; - } - /** - * Returns the built node. - * - * @return Stmt\Namespace_ The built node - */ - public function getNode(): Node - { - return new Stmt\Namespace_($this->name, $this->stmts, $this->attributes); - } -} - */ - protected array $attributeGroups = []; - /** - * Creates a parameter builder. - * - * @param string $name Name of the parameter - */ - public function __construct(string $name) - { - $this->name = $name; - } - /** - * Sets default value for the parameter. - * - * @param mixed $value Default value to use - * - * @return $this The builder instance (for fluid interface) - */ - public function setDefault($value) - { - $this->default = BuilderHelpers::normalizeValue($value); - return $this; - } - /** - * Sets type for the parameter. - * - * @param string|Node\Name|Node\Identifier|Node\ComplexType $type Parameter type - * - * @return $this The builder instance (for fluid interface) - */ - public function setType($type) - { - $this->type = BuilderHelpers::normalizeType($type); - if ($this->type == 'void') { - throw new \LogicException('Parameter type cannot be void'); - } - return $this; - } - /** - * Make the parameter accept the value by reference. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeByRef() - { - $this->byRef = \true; - return $this; - } - /** - * Make the parameter variadic - * - * @return $this The builder instance (for fluid interface) - */ - public function makeVariadic() - { - $this->variadic = \true; - return $this; - } - /** - * Makes the (promoted) parameter public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); - return $this; - } - /** - * Makes the (promoted) parameter protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); - return $this; - } - /** - * Makes the (promoted) parameter private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); - return $this; - } - /** - * Makes the (promoted) parameter readonly. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeReadonly() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY); - return $this; - } - /** - * Gives the promoted property private(set) visibility. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivateSet() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE_SET); - return $this; - } - /** - * Gives the promoted property protected(set) visibility. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtectedSet() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED_SET); - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Returns the built parameter node. - * - * @return Node\Param The built parameter node - */ - public function getNode(): Node - { - return new Node\Param(new Node\Expr\Variable($this->name), $this->default, $this->type, $this->byRef, $this->variadic, [], $this->flags, $this->attributeGroups); - } -} - */ - protected array $attributes = []; - /** @var null|Identifier|Name|ComplexType */ - protected ?Node $type = null; - /** @var list */ - protected array $attributeGroups = []; - /** @var list */ - protected array $hooks = []; - /** - * Creates a property builder. - * - * @param string $name Name of the property - */ - public function __construct(string $name) - { - $this->name = $name; - } - /** - * Makes the property public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); - return $this; - } - /** - * Makes the property protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); - return $this; - } - /** - * Makes the property private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); - return $this; - } - /** - * Makes the property static. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeStatic() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::STATIC); - return $this; - } - /** - * Makes the property readonly. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeReadonly() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY); - return $this; - } - /** - * Makes the property abstract. Requires at least one property hook to be specified as well. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeAbstract() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::ABSTRACT); - return $this; - } - /** - * Makes the property final. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeFinal() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL); - return $this; - } - /** - * Gives the property private(set) visibility. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivateSet() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE_SET); - return $this; - } - /** - * Gives the property protected(set) visibility. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtectedSet() - { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED_SET); - return $this; - } - /** - * Sets default value for the property. - * - * @param mixed $value Default value to use - * - * @return $this The builder instance (for fluid interface) - */ - public function setDefault($value) - { - $this->default = BuilderHelpers::normalizeValue($value); - return $this; - } - /** - * Sets doc comment for the property. - * - * @param PhpParser\Comment\Doc|string $docComment Doc comment to set - * - * @return $this The builder instance (for fluid interface) - */ - public function setDocComment($docComment) - { - $this->attributes = ['comments' => [BuilderHelpers::normalizeDocComment($docComment)]]; - return $this; - } - /** - * Sets the property type for PHP 7.4+. - * - * @param string|Name|Identifier|ComplexType $type - * - * @return $this - */ - public function setType($type) - { - $this->type = BuilderHelpers::normalizeType($type); - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Adds a property hook. - * - * @return $this The builder instance (for fluid interface) - */ - public function addHook(Node\PropertyHook $hook) - { - $this->hooks[] = $hook; - return $this; - } - /** - * Returns the built class node. - * - * @return Stmt\Property The built property node - */ - public function getNode(): PhpParser\Node - { - if ($this->flags & Modifiers::ABSTRACT && !$this->hooks) { - throw new PhpParser\Error('Only hooked properties may be declared abstract'); - } - return new Stmt\Property($this->flags !== 0 ? $this->flags : Modifiers::PUBLIC, [new Node\PropertyItem($this->name, $this->default)], $this->attributes, $this->type, $this->attributeGroups, $this->hooks); - } -} -and($trait); - } - } - /** - * Adds used trait. - * - * @param Node\Name|string $trait Trait name - * - * @return $this The builder instance (for fluid interface) - */ - public function and($trait) - { - $this->traits[] = BuilderHelpers::normalizeName($trait); - return $this; - } - /** - * Adds trait adaptation. - * - * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation - * - * @return $this The builder instance (for fluid interface) - */ - public function with($adaptation) - { - $adaptation = BuilderHelpers::normalizeNode($adaptation); - if (!$adaptation instanceof Stmt\TraitUseAdaptation) { - throw new \LogicException('Adaptation must have type TraitUseAdaptation'); - } - $this->adaptations[] = $adaptation; - return $this; - } - /** - * Returns the built node. - * - * @return Node The built node - */ - public function getNode(): Node - { - return new Stmt\TraitUse($this->traits, $this->adaptations); - } -} -type = self::TYPE_UNDEFINED; - $this->trait = is_null($trait) ? null : BuilderHelpers::normalizeName($trait); - $this->method = BuilderHelpers::normalizeIdentifier($method); - } - /** - * Sets alias of method. - * - * @param Node\Identifier|string $alias Alias for adapted method - * - * @return $this The builder instance (for fluid interface) - */ - public function as($alias) - { - if ($this->type === self::TYPE_UNDEFINED) { - $this->type = self::TYPE_ALIAS; - } - if ($this->type !== self::TYPE_ALIAS) { - throw new \LogicException('Cannot set alias for not alias adaptation buider'); - } - $this->alias = BuilderHelpers::normalizeIdentifier($alias); - return $this; - } - /** - * Sets adapted method public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() - { - $this->setModifier(Modifiers::PUBLIC); - return $this; - } - /** - * Sets adapted method protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() - { - $this->setModifier(Modifiers::PROTECTED); - return $this; - } - /** - * Sets adapted method private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() - { - $this->setModifier(Modifiers::PRIVATE); - return $this; - } - /** - * Adds overwritten traits. - * - * @param Node\Name|string ...$traits Traits for overwrite - * - * @return $this The builder instance (for fluid interface) - */ - public function insteadof(...$traits) - { - if ($this->type === self::TYPE_UNDEFINED) { - if (is_null($this->trait)) { - throw new \LogicException('Precedence adaptation must have trait'); - } - $this->type = self::TYPE_PRECEDENCE; - } - if ($this->type !== self::TYPE_PRECEDENCE) { - throw new \LogicException('Cannot add overwritten traits for not precedence adaptation buider'); - } - foreach ($traits as $trait) { - $this->insteadof[] = BuilderHelpers::normalizeName($trait); - } - return $this; - } - protected function setModifier(int $modifier): void - { - if ($this->type === self::TYPE_UNDEFINED) { - $this->type = self::TYPE_ALIAS; - } - if ($this->type !== self::TYPE_ALIAS) { - throw new \LogicException('Cannot set access modifier for not alias adaptation buider'); - } - if (is_null($this->modifier)) { - $this->modifier = $modifier; - } else { - throw new \LogicException('Multiple access type modifiers are not allowed'); - } - } - /** - * Returns the built node. - * - * @return Node The built node - */ - public function getNode(): Node - { - switch ($this->type) { - case self::TYPE_ALIAS: - return new Stmt\TraitUseAdaptation\Alias($this->trait, $this->method, $this->modifier, $this->alias); - case self::TYPE_PRECEDENCE: - return new Stmt\TraitUseAdaptation\Precedence($this->trait, $this->method, $this->insteadof); - default: - throw new \LogicException('Type of adaptation is not defined'); - } - } -} - */ - protected array $uses = []; - /** @var list */ - protected array $constants = []; - /** @var list */ - protected array $properties = []; - /** @var list */ - protected array $methods = []; - /** @var list */ - protected array $attributeGroups = []; - /** - * Creates an interface builder. - * - * @param string $name Name of the interface - */ - public function __construct(string $name) - { - $this->name = $name; - } - /** - * Adds a statement. - * - * @param Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) - { - $stmt = BuilderHelpers::normalizeNode($stmt); - if ($stmt instanceof Stmt\Property) { - $this->properties[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassMethod) { - $this->methods[] = $stmt; - } elseif ($stmt instanceof Stmt\TraitUse) { - $this->uses[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassConst) { - $this->constants[] = $stmt; - } else { - throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); - } - return $this; - } - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) - { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - return $this; - } - /** - * Returns the built trait node. - * - * @return Stmt\Trait_ The built interface node - */ - public function getNode(): PhpParser\Node - { - return new Stmt\Trait_($this->name, ['stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); - } -} -name = BuilderHelpers::normalizeName($name); - $this->type = $type; - } - /** - * Sets alias for used name. - * - * @param string $alias Alias to use (last component of full name by default) - * - * @return $this The builder instance (for fluid interface) - */ - public function as(string $alias) - { - $this->alias = $alias; - return $this; - } - /** - * Returns the built node. - * - * @return Stmt\Use_ The built node - */ - public function getNode(): Node - { - return new Stmt\Use_([new Node\UseItem($this->name, $this->alias)], $this->type); - } -} -args($args)); - } - /** - * Creates a namespace builder. - * - * @param null|string|Node\Name $name Name of the namespace - * - * @return Builder\Namespace_ The created namespace builder - */ - public function namespace($name): Builder\Namespace_ - { - return new Builder\Namespace_($name); - } - /** - * Creates a class builder. - * - * @param string $name Name of the class - * - * @return Builder\Class_ The created class builder - */ - public function class(string $name): Builder\Class_ - { - return new Builder\Class_($name); - } - /** - * Creates an interface builder. - * - * @param string $name Name of the interface - * - * @return Builder\Interface_ The created interface builder - */ - public function interface(string $name): Builder\Interface_ - { - return new Builder\Interface_($name); - } - /** - * Creates a trait builder. - * - * @param string $name Name of the trait - * - * @return Builder\Trait_ The created trait builder - */ - public function trait(string $name): Builder\Trait_ - { - return new Builder\Trait_($name); - } - /** - * Creates an enum builder. - * - * @param string $name Name of the enum - * - * @return Builder\Enum_ The created enum builder - */ - public function enum(string $name): Builder\Enum_ - { - return new Builder\Enum_($name); - } - /** - * Creates a trait use builder. - * - * @param Node\Name|string ...$traits Trait names - * - * @return Builder\TraitUse The created trait use builder - */ - public function useTrait(...$traits): Builder\TraitUse - { - return new Builder\TraitUse(...$traits); - } - /** - * Creates a trait use adaptation builder. - * - * @param Node\Name|string|null $trait Trait name - * @param Node\Identifier|string $method Method name - * - * @return Builder\TraitUseAdaptation The created trait use adaptation builder - */ - public function traitUseAdaptation($trait, $method = null): Builder\TraitUseAdaptation - { - if ($method === null) { - $method = $trait; - $trait = null; - } - return new Builder\TraitUseAdaptation($trait, $method); - } - /** - * Creates a method builder. - * - * @param string $name Name of the method - * - * @return Builder\Method The created method builder - */ - public function method(string $name): Builder\Method - { - return new Builder\Method($name); - } - /** - * Creates a parameter builder. - * - * @param string $name Name of the parameter - * - * @return Builder\Param The created parameter builder - */ - public function param(string $name): Builder\Param - { - return new Builder\Param($name); - } - /** - * Creates a property builder. - * - * @param string $name Name of the property - * - * @return Builder\Property The created property builder - */ - public function property(string $name): Builder\Property - { - return new Builder\Property($name); - } - /** - * Creates a function builder. - * - * @param string $name Name of the function - * - * @return Builder\Function_ The created function builder - */ - public function function(string $name): Builder\Function_ - { - return new Builder\Function_($name); - } - /** - * Creates a namespace/class use builder. - * - * @param Node\Name|string $name Name of the entity (namespace or class) to alias - * - * @return Builder\Use_ The created use builder - */ - public function use($name): Builder\Use_ - { - return new Builder\Use_($name, Use_::TYPE_NORMAL); - } - /** - * Creates a function use builder. - * - * @param Node\Name|string $name Name of the function to alias - * - * @return Builder\Use_ The created use function builder - */ - public function useFunction($name): Builder\Use_ - { - return new Builder\Use_($name, Use_::TYPE_FUNCTION); - } - /** - * Creates a constant use builder. - * - * @param Node\Name|string $name Name of the const to alias - * - * @return Builder\Use_ The created use const builder - */ - public function useConst($name): Builder\Use_ - { - return new Builder\Use_($name, Use_::TYPE_CONSTANT); - } - /** - * Creates a class constant builder. - * - * @param string|Identifier $name Name - * @param Node\Expr|bool|null|int|float|string|array $value Value - * - * @return Builder\ClassConst The created use const builder - */ - public function classConst($name, $value): Builder\ClassConst - { - return new Builder\ClassConst($name, $value); - } - /** - * Creates an enum case builder. - * - * @param string|Identifier $name Name - * - * @return Builder\EnumCase The created use const builder - */ - public function enumCase($name): Builder\EnumCase - { - return new Builder\EnumCase($name); - } - /** - * Creates node a for a literal value. - * - * @param Expr|bool|null|int|float|string|array|\UnitEnum $value $value - */ - public function val($value): Expr - { - return BuilderHelpers::normalizeValue($value); - } - /** - * Creates variable node. - * - * @param string|Expr $name Name - */ - public function var($name): Expr\Variable - { - if (!\is_string($name) && !$name instanceof Expr) { - throw new \LogicException('Variable name must be string or Expr'); - } - return new Expr\Variable($name); - } - /** - * Normalizes an argument list. - * - * Creates Arg nodes for all arguments and converts literal values to expressions. - * - * @param array $args List of arguments to normalize - * - * @return list - */ - public function args(array $args): array - { - $normalizedArgs = []; - foreach ($args as $key => $arg) { - if (!$arg instanceof Arg) { - $arg = new Arg(BuilderHelpers::normalizeValue($arg)); - } - if (\is_string($key)) { - $arg->name = BuilderHelpers::normalizeIdentifier($key); - } - $normalizedArgs[] = $arg; - } - return $normalizedArgs; - } - /** - * Creates a function call node. - * - * @param string|Name|Expr $name Function name - * @param array $args Function arguments - */ - public function funcCall($name, array $args = []): Expr\FuncCall - { - return new Expr\FuncCall(BuilderHelpers::normalizeNameOrExpr($name), $this->args($args)); - } - /** - * Creates a method call node. - * - * @param Expr $var Variable the method is called on - * @param string|Identifier|Expr $name Method name - * @param array $args Method arguments - */ - public function methodCall(Expr $var, $name, array $args = []): Expr\MethodCall - { - return new Expr\MethodCall($var, BuilderHelpers::normalizeIdentifierOrExpr($name), $this->args($args)); - } - /** - * Creates a static method call node. - * - * @param string|Name|Expr $class Class name - * @param string|Identifier|Expr $name Method name - * @param array $args Method arguments - */ - public function staticCall($class, $name, array $args = []): Expr\StaticCall - { - return new Expr\StaticCall(BuilderHelpers::normalizeNameOrExpr($class), BuilderHelpers::normalizeIdentifierOrExpr($name), $this->args($args)); - } - /** - * Creates an object creation node. - * - * @param string|Name|Expr $class Class name - * @param array $args Constructor arguments - */ - public function new($class, array $args = []): Expr\New_ - { - return new Expr\New_(BuilderHelpers::normalizeNameOrExpr($class), $this->args($args)); - } - /** - * Creates a constant fetch node. - * - * @param string|Name $name Constant name - */ - public function constFetch($name): Expr\ConstFetch - { - return new Expr\ConstFetch(BuilderHelpers::normalizeName($name)); - } - /** - * Creates a property fetch node. - * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Property name - */ - public function propertyFetch(Expr $var, $name): Expr\PropertyFetch - { - return new Expr\PropertyFetch($var, BuilderHelpers::normalizeIdentifierOrExpr($name)); - } - /** - * Creates a class constant fetch node. - * - * @param string|Name|Expr $class Class name - * @param string|Identifier|Expr $name Constant name - */ - public function classConstFetch($class, $name): Expr\ClassConstFetch - { - return new Expr\ClassConstFetch(BuilderHelpers::normalizeNameOrExpr($class), BuilderHelpers::normalizeIdentifierOrExpr($name)); - } - /** - * Creates nested Concat nodes from a list of expressions. - * - * @param Expr|string ...$exprs Expressions or literal strings - */ - public function concat(...$exprs): Concat - { - $numExprs = count($exprs); - if ($numExprs < 2) { - throw new \LogicException('Expected at least two expressions'); - } - $lastConcat = $this->normalizeStringExpr($exprs[0]); - for ($i = 1; $i < $numExprs; $i++) { - $lastConcat = new Concat($lastConcat, $this->normalizeStringExpr($exprs[$i])); - } - return $lastConcat; - } - /** - * @param string|Expr $expr - */ - private function normalizeStringExpr($expr): Expr - { - if ($expr instanceof Expr) { - return $expr; - } - if (\is_string($expr)) { - return new String_($expr); - } - throw new \LogicException('Expected string or Expr'); - } -} -getNode(); - } - if ($node instanceof Node) { - return $node; - } - throw new \LogicException('Expected node or builder object'); - } - /** - * Normalizes a node to a statement. - * - * Expressions are wrapped in a Stmt\Expression node. - * - * @param Node|Builder $node The node to normalize - * - * @return Stmt The normalized statement node - */ - public static function normalizeStmt($node): Stmt - { - $node = self::normalizeNode($node); - if ($node instanceof Stmt) { - return $node; - } - if ($node instanceof Expr) { - return new Stmt\Expression($node); - } - throw new \LogicException('Expected statement or expression node'); - } - /** - * Normalizes strings to Identifier. - * - * @param string|Identifier $name The identifier to normalize - * - * @return Identifier The normalized identifier - */ - public static function normalizeIdentifier($name): Identifier - { - if ($name instanceof Identifier) { - return $name; - } - if (\is_string($name)) { - return new Identifier($name); - } - throw new \LogicException('Expected string or instance of Node\Identifier'); - } - /** - * Normalizes strings to Identifier, also allowing expressions. - * - * @param string|Identifier|Expr $name The identifier to normalize - * - * @return Identifier|Expr The normalized identifier or expression - */ - public static function normalizeIdentifierOrExpr($name) - { - if ($name instanceof Identifier || $name instanceof Expr) { - return $name; - } - if (\is_string($name)) { - return new Identifier($name); - } - throw new \LogicException('Expected string or instance of Node\Identifier or Node\Expr'); - } - /** - * Normalizes a name: Converts string names to Name nodes. - * - * @param Name|string $name The name to normalize - * - * @return Name The normalized name - */ - public static function normalizeName($name): Name - { - if ($name instanceof Name) { - return $name; - } - if (is_string($name)) { - if (!$name) { - throw new \LogicException('Name cannot be empty'); - } - if ($name[0] === '\\') { - return new Name\FullyQualified(substr($name, 1)); - } - if (0 === strpos($name, 'namespace\\')) { - return new Name\Relative(substr($name, strlen('namespace\\'))); - } - return new Name($name); - } - throw new \LogicException('Name must be a string or an instance of Node\Name'); - } - /** - * Normalizes a name: Converts string names to Name nodes, while also allowing expressions. - * - * @param Expr|Name|string $name The name to normalize - * - * @return Name|Expr The normalized name or expression - */ - public static function normalizeNameOrExpr($name) - { - if ($name instanceof Expr) { - return $name; - } - if (!is_string($name) && !$name instanceof Name) { - throw new \LogicException('Name must be a string or an instance of Node\Name or Node\Expr'); - } - return self::normalizeName($name); - } - /** - * Normalizes a type: Converts plain-text type names into proper AST representation. - * - * In particular, builtin types become Identifiers, custom types become Names and nullables - * are wrapped in NullableType nodes. - * - * @param string|Name|Identifier|ComplexType $type The type to normalize - * - * @return Name|Identifier|ComplexType The normalized type - */ - public static function normalizeType($type) - { - if (!is_string($type)) { - if (!$type instanceof Name && !$type instanceof Identifier && !$type instanceof ComplexType) { - throw new \LogicException('Type must be a string, or an instance of Name, Identifier or ComplexType'); - } - return $type; - } - $nullable = \false; - if (strlen($type) > 0 && $type[0] === '?') { - $nullable = \true; - $type = substr($type, 1); - } - $builtinTypes = ['array', 'callable', 'bool', 'int', 'float', 'string', 'iterable', 'void', 'object', 'null', 'false', 'mixed', 'never', 'true']; - $lowerType = strtolower($type); - if (in_array($lowerType, $builtinTypes)) { - $type = new Identifier($lowerType); - } else { - $type = self::normalizeName($type); - } - $notNullableTypes = ['void', 'mixed', 'never']; - if ($nullable && in_array((string) $type, $notNullableTypes)) { - throw new \LogicException(sprintf('%s type cannot be nullable', $type)); - } - return $nullable ? new NullableType($type) : $type; - } - /** - * Normalizes a value: Converts nulls, booleans, integers, - * floats, strings and arrays into their respective nodes - * - * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value The value to normalize - * - * @return Expr The normalized value - */ - public static function normalizeValue($value): Expr - { - if ($value instanceof Node\Expr) { - return $value; - } - if (is_null($value)) { - return new Expr\ConstFetch(new Name('null')); - } - if (is_bool($value)) { - return new Expr\ConstFetch(new Name($value ? 'true' : 'false')); - } - if (is_int($value)) { - return new Scalar\Int_($value); - } - if (is_float($value)) { - return new Scalar\Float_($value); - } - if (is_string($value)) { - return new Scalar\String_($value); - } - if (is_array($value)) { - $items = []; - $lastKey = -1; - foreach ($value as $itemKey => $itemValue) { - // for consecutive, numeric keys don't generate keys - if (null !== $lastKey && ++$lastKey === $itemKey) { - $items[] = new Node\ArrayItem(self::normalizeValue($itemValue)); - } else { - $lastKey = null; - $items[] = new Node\ArrayItem(self::normalizeValue($itemValue), self::normalizeValue($itemKey)); - } - } - return new Expr\Array_($items); - } - if ($value instanceof \UnitEnum) { - return new Expr\ClassConstFetch(new FullyQualified(\get_class($value)), new Identifier($value->name)); - } - throw new \LogicException('Invalid value'); - } - /** - * Normalizes a doc comment: Converts plain strings to PhpParser\Comment\Doc. - * - * @param Comment\Doc|string $docComment The doc comment to normalize - * - * @return Comment\Doc The normalized doc comment - */ - public static function normalizeDocComment($docComment): Comment\Doc - { - if ($docComment instanceof Comment\Doc) { - return $docComment; - } - if (is_string($docComment)) { - return new Comment\Doc($docComment); - } - throw new \LogicException('Doc comment must be a string or an instance of PhpParser\Comment\Doc'); - } - /** - * Normalizes a attribute: Converts attribute to the Attribute Group if needed. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return Node\AttributeGroup The Attribute Group - */ - public static function normalizeAttribute($attribute): Node\AttributeGroup - { - if ($attribute instanceof Node\AttributeGroup) { - return $attribute; - } - if (!$attribute instanceof Node\Attribute) { - throw new \LogicException('Attribute must be an instance of PhpParser\Node\Attribute or PhpParser\Node\AttributeGroup'); - } - return new Node\AttributeGroup([$attribute]); - } - /** - * Adds a modifier and returns new modifier bitmask. - * - * @param int $modifiers Existing modifiers - * @param int $modifier Modifier to set - * - * @return int New modifiers - */ - public static function addModifier(int $modifiers, int $modifier): int - { - Modifiers::verifyModifier($modifiers, $modifier); - return $modifiers | $modifier; - } - /** - * Adds a modifier and returns new modifier bitmask. - * @return int New modifiers - */ - public static function addClassModifier(int $existingModifiers, int $modifierToSet): int - { - Modifiers::verifyClassModifier($existingModifiers, $modifierToSet); - return $existingModifiers | $modifierToSet; - } -} -text = $text; - $this->startLine = $startLine; - $this->startFilePos = $startFilePos; - $this->startTokenPos = $startTokenPos; - $this->endLine = $endLine; - $this->endFilePos = $endFilePos; - $this->endTokenPos = $endTokenPos; - } - /** - * Gets the comment text. - * - * @return string The comment text (including comment delimiters like /*) - */ - public function getText(): string - { - return $this->text; - } - /** - * Gets the line number the comment started on. - * - * @return int Line number (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getStartLine(): int - { - return $this->startLine; - } - /** - * Gets the file offset the comment started on. - * - * @return int File offset (or -1 if not available) - */ - public function getStartFilePos(): int - { - return $this->startFilePos; - } - /** - * Gets the token offset the comment started on. - * - * @return int Token offset (or -1 if not available) - */ - public function getStartTokenPos(): int - { - return $this->startTokenPos; - } - /** - * Gets the line number the comment ends on. - * - * @return int Line number (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getEndLine(): int - { - return $this->endLine; - } - /** - * Gets the file offset the comment ends on. - * - * @return int File offset (or -1 if not available) - */ - public function getEndFilePos(): int - { - return $this->endFilePos; - } - /** - * Gets the token offset the comment ends on. - * - * @return int Token offset (or -1 if not available) - */ - public function getEndTokenPos(): int - { - return $this->endTokenPos; - } - /** - * Gets the comment text. - * - * @return string The comment text (including comment delimiters like /*) - */ - public function __toString(): string - { - return $this->text; - } - /** - * Gets the reformatted comment text. - * - * "Reformatted" here means that we try to clean up the whitespace at the - * starts of the lines. This is necessary because we receive the comments - * without leading whitespace on the first line, but with leading whitespace - * on all subsequent lines. - * - * Additionally, this normalizes CRLF newlines to LF newlines. - */ - public function getReformattedText(): string - { - $text = str_replace("\r\n", "\n", $this->text); - $newlinePos = strpos($text, "\n"); - if (\false === $newlinePos) { - // Single line comments don't need further processing - return $text; - } - if (preg_match('(^.*(?:\n\s+\*.*)+$)', $text)) { - // Multi line comment of the type - // - // /* - // * Some text. - // * Some more text. - // */ - // - // is handled by replacing the whitespace sequences before the * by a single space - return preg_replace('(^\s+\*)m', ' *', $text); - } - if (preg_match('(^/\*\*?\s*\n)', $text) && preg_match('(\n(\s*)\*/$)', $text, $matches)) { - // Multi line comment of the type - // - // /* - // Some text. - // Some more text. - // */ - // - // is handled by removing the whitespace sequence on the line before the closing - // */ on all lines. So if the last line is " */", then " " is removed at the - // start of all lines. - return preg_replace('(^' . preg_quote($matches[1]) . ')m', '', $text); - } - if (preg_match('(^/\*\*?\s*(?!\s))', $text, $matches)) { - // Multi line comment of the type - // - // /* Some text. - // Some more text. - // Indented text. - // Even more text. */ - // - // is handled by removing the difference between the shortest whitespace prefix on all - // lines and the length of the "/* " opening sequence. - $prefixLen = $this->getShortestWhitespacePrefixLen(substr($text, $newlinePos + 1)); - $removeLen = $prefixLen - strlen($matches[0]); - return preg_replace('(^\s{' . $removeLen . '})m', '', $text); - } - // No idea how to format this comment, so simply return as is - return $text; - } - /** - * Get length of shortest whitespace prefix (at the start of a line). - * - * If there is a line with no prefix whitespace, 0 is a valid return value. - * - * @param string $str String to check - * @return int Length in characters. Tabs count as single characters. - */ - private function getShortestWhitespacePrefixLen(string $str): int - { - $lines = explode("\n", $str); - $shortestPrefixLen = \PHP_INT_MAX; - foreach ($lines as $line) { - preg_match('(^\s*)', $line, $matches); - $prefixLen = strlen($matches[0]); - if ($prefixLen < $shortestPrefixLen) { - $shortestPrefixLen = $prefixLen; - } - } - return $shortestPrefixLen; - } - /** - * @return array{nodeType:string, text:mixed, line:mixed, filePos:mixed} - */ - public function jsonSerialize(): array - { - // Technically not a node, but we make it look like one anyway - $type = $this instanceof Comment\Doc ? 'Comment_Doc' : 'Comment'; - return [ - 'nodeType' => $type, - 'text' => $this->text, - // TODO: Rename these to include "start". - 'line' => $this->startLine, - 'filePos' => $this->startFilePos, - 'tokenPos' => $this->startTokenPos, - 'endLine' => $this->endLine, - 'endFilePos' => $this->endFilePos, - 'endTokenPos' => $this->endTokenPos, - ]; - } -} -fallbackEvaluator = $fallbackEvaluator ?? function (Expr $expr) { - throw new ConstExprEvaluationException("Expression of type {$expr->getType()} cannot be evaluated"); - }; - } - /** - * Silently evaluates a constant expression into a PHP value. - * - * Thrown Errors, warnings or notices will be converted into a ConstExprEvaluationException. - * The original source of the exception is available through getPrevious(). - * - * If some part of the expression cannot be evaluated, the fallback evaluator passed to the - * constructor will be invoked. By default, if no fallback is provided, an exception of type - * ConstExprEvaluationException is thrown. - * - * See class doc comment for caveats and limitations. - * - * @param Expr $expr Constant expression to evaluate - * @return mixed Result of evaluation - * - * @throws ConstExprEvaluationException if the expression cannot be evaluated or an error occurred - */ - public function evaluateSilently(Expr $expr) - { - set_error_handler(function ($num, $str, $file, $line) { - throw new \ErrorException($str, 0, $num, $file, $line); - }); - try { - return $this->evaluate($expr); - } catch (\Throwable $e) { - if (!$e instanceof ConstExprEvaluationException) { - $e = new ConstExprEvaluationException("An error occurred during constant expression evaluation", 0, $e); - } - throw $e; - } finally { - restore_error_handler(); - } - } - /** - * Directly evaluates a constant expression into a PHP value. - * - * May generate Error exceptions, warnings or notices. Use evaluateSilently() to convert these - * into a ConstExprEvaluationException. - * - * If some part of the expression cannot be evaluated, the fallback evaluator passed to the - * constructor will be invoked. By default, if no fallback is provided, an exception of type - * ConstExprEvaluationException is thrown. - * - * See class doc comment for caveats and limitations. - * - * @param Expr $expr Constant expression to evaluate - * @return mixed Result of evaluation - * - * @throws ConstExprEvaluationException if the expression cannot be evaluated - */ - public function evaluateDirectly(Expr $expr) - { - return $this->evaluate($expr); - } - /** @return mixed */ - private function evaluate(Expr $expr) - { - if ($expr instanceof Scalar\Int_ || $expr instanceof Scalar\Float_ || $expr instanceof Scalar\String_) { - return $expr->value; - } - if ($expr instanceof Expr\Array_) { - return $this->evaluateArray($expr); - } - // Unary operators - if ($expr instanceof Expr\UnaryPlus) { - return +$this->evaluate($expr->expr); - } - if ($expr instanceof Expr\UnaryMinus) { - return -$this->evaluate($expr->expr); - } - if ($expr instanceof Expr\BooleanNot) { - return !$this->evaluate($expr->expr); - } - if ($expr instanceof Expr\BitwiseNot) { - return ~$this->evaluate($expr->expr); - } - if ($expr instanceof Expr\BinaryOp) { - return $this->evaluateBinaryOp($expr); - } - if ($expr instanceof Expr\Ternary) { - return $this->evaluateTernary($expr); - } - if ($expr instanceof Expr\ArrayDimFetch && null !== $expr->dim) { - return $this->evaluate($expr->var)[$this->evaluate($expr->dim)]; - } - if ($expr instanceof Expr\ConstFetch) { - return $this->evaluateConstFetch($expr); - } - return ($this->fallbackEvaluator)($expr); - } - private function evaluateArray(Expr\Array_ $expr): array - { - $array = []; - foreach ($expr->items as $item) { - if (null !== $item->key) { - $array[$this->evaluate($item->key)] = $this->evaluate($item->value); - } elseif ($item->unpack) { - $array = array_merge($array, $this->evaluate($item->value)); - } else { - $array[] = $this->evaluate($item->value); - } - } - return $array; - } - /** @return mixed */ - private function evaluateTernary(Expr\Ternary $expr) - { - if (null === $expr->if) { - return $this->evaluate($expr->cond) ?: $this->evaluate($expr->else); - } - return $this->evaluate($expr->cond) ? $this->evaluate($expr->if) : $this->evaluate($expr->else); - } - /** @return mixed */ - private function evaluateBinaryOp(Expr\BinaryOp $expr) - { - if ($expr instanceof Expr\BinaryOp\Coalesce && $expr->left instanceof Expr\ArrayDimFetch) { - // This needs to be special cased to respect BP_VAR_IS fetch semantics - return $this->evaluate($expr->left->var)[$this->evaluate($expr->left->dim)] ?? $this->evaluate($expr->right); - } - // The evaluate() calls are repeated in each branch, because some of the operators are - // short-circuiting and evaluating the RHS in advance may be illegal in that case - $l = $expr->left; - $r = $expr->right; - switch ($expr->getOperatorSigil()) { - case '&': - return $this->evaluate($l) & $this->evaluate($r); - case '|': - return $this->evaluate($l) | $this->evaluate($r); - case '^': - return $this->evaluate($l) ^ $this->evaluate($r); - case '&&': - return $this->evaluate($l) && $this->evaluate($r); - case '||': - return $this->evaluate($l) || $this->evaluate($r); - case '??': - return $this->evaluate($l) ?? $this->evaluate($r); - case '.': - return $this->evaluate($l) . $this->evaluate($r); - case '/': - return $this->evaluate($l) / $this->evaluate($r); - case '==': - return $this->evaluate($l) == $this->evaluate($r); - case '>': - return $this->evaluate($l) > $this->evaluate($r); - case '>=': - return $this->evaluate($l) >= $this->evaluate($r); - case '===': - return $this->evaluate($l) === $this->evaluate($r); - case 'and': - return $this->evaluate($l) and $this->evaluate($r); - case 'or': - return $this->evaluate($l) or $this->evaluate($r); - case 'xor': - return $this->evaluate($l) xor $this->evaluate($r); - case '-': - return $this->evaluate($l) - $this->evaluate($r); - case '%': - return $this->evaluate($l) % $this->evaluate($r); - case '*': - return $this->evaluate($l) * $this->evaluate($r); - case '!=': - return $this->evaluate($l) != $this->evaluate($r); - case '!==': - return $this->evaluate($l) !== $this->evaluate($r); - case '+': - return $this->evaluate($l) + $this->evaluate($r); - case '**': - return $this->evaluate($l) ** $this->evaluate($r); - case '<<': - return $this->evaluate($l) << $this->evaluate($r); - case '>>': - return $this->evaluate($l) >> $this->evaluate($r); - case '<': - return $this->evaluate($l) < $this->evaluate($r); - case '<=': - return $this->evaluate($l) <= $this->evaluate($r); - case '<=>': - return $this->evaluate($l) <=> $this->evaluate($r); - } - throw new \Exception('Should not happen'); - } - /** @return mixed */ - private function evaluateConstFetch(Expr\ConstFetch $expr) - { - $name = $expr->name->toLowerString(); - switch ($name) { - case 'null': - return null; - case 'false': - return \false; - case 'true': - return \true; - } - return ($this->fallbackEvaluator)($expr); - } -} - */ - protected array $attributes; - /** - * Creates an Exception signifying a parse error. - * - * @param string $message Error message - * @param array $attributes Attributes of node/token where error occurred - */ - public function __construct(string $message, array $attributes = []) - { - $this->rawMessage = $message; - $this->attributes = $attributes; - $this->updateMessage(); - } - /** - * Gets the error message - * - * @return string Error message - */ - public function getRawMessage(): string - { - return $this->rawMessage; - } - /** - * Gets the line the error starts in. - * - * @return int Error start line - * @phpstan-return -1|positive-int - */ - public function getStartLine(): int - { - return $this->attributes['startLine'] ?? -1; - } - /** - * Gets the line the error ends in. - * - * @return int Error end line - * @phpstan-return -1|positive-int - */ - public function getEndLine(): int - { - return $this->attributes['endLine'] ?? -1; - } - /** - * Gets the attributes of the node/token the error occurred at. - * - * @return array - */ - public function getAttributes(): array - { - return $this->attributes; - } - /** - * Sets the attributes of the node/token the error occurred at. - * - * @param array $attributes - */ - public function setAttributes(array $attributes): void - { - $this->attributes = $attributes; - $this->updateMessage(); - } - /** - * Sets the line of the PHP file the error occurred in. - * - * @param string $message Error message - */ - public function setRawMessage(string $message): void - { - $this->rawMessage = $message; - $this->updateMessage(); - } - /** - * Sets the line the error starts in. - * - * @param int $line Error start line - */ - public function setStartLine(int $line): void - { - $this->attributes['startLine'] = $line; - $this->updateMessage(); - } - /** - * Returns whether the error has start and end column information. - * - * For column information enable the startFilePos and endFilePos in the lexer options. - */ - public function hasColumnInfo(): bool - { - return isset($this->attributes['startFilePos'], $this->attributes['endFilePos']); - } - /** - * Gets the start column (1-based) into the line where the error started. - * - * @param string $code Source code of the file - */ - public function getStartColumn(string $code): int - { - if (!$this->hasColumnInfo()) { - throw new \RuntimeException('Error does not have column information'); - } - return $this->toColumn($code, $this->attributes['startFilePos']); - } - /** - * Gets the end column (1-based) into the line where the error ended. - * - * @param string $code Source code of the file - */ - public function getEndColumn(string $code): int - { - if (!$this->hasColumnInfo()) { - throw new \RuntimeException('Error does not have column information'); - } - return $this->toColumn($code, $this->attributes['endFilePos']); - } - /** - * Formats message including line and column information. - * - * @param string $code Source code associated with the error, for calculation of the columns - * - * @return string Formatted message - */ - public function getMessageWithColumnInfo(string $code): string - { - return sprintf('%s from %d:%d to %d:%d', $this->getRawMessage(), $this->getStartLine(), $this->getStartColumn($code), $this->getEndLine(), $this->getEndColumn($code)); - } - /** - * Converts a file offset into a column. - * - * @param string $code Source code that $pos indexes into - * @param int $pos 0-based position in $code - * - * @return int 1-based column (relative to start of line) - */ - private function toColumn(string $code, int $pos): int - { - if ($pos > strlen($code)) { - throw new \RuntimeException('Invalid position information'); - } - $lineStartPos = strrpos($code, "\n", $pos - strlen($code)); - if (\false === $lineStartPos) { - $lineStartPos = -1; - } - return $pos - $lineStartPos; - } - /** - * Updates the exception message after a change to rawMessage or rawLine. - */ - protected function updateMessage(): void - { - $this->message = $this->rawMessage; - if (-1 === $this->getStartLine()) { - $this->message .= ' on unknown line'; - } else { - $this->message .= ' on line ' . $this->getStartLine(); - } - } -} -errors[] = $error; - } - /** - * Get collected errors. - * - * @return Error[] - */ - public function getErrors(): array - { - return $this->errors; - } - /** - * Check whether there are any errors. - */ - public function hasErrors(): bool - { - return !empty($this->errors); - } - /** - * Reset/clear collected errors. - */ - public function clearErrors(): void - { - $this->errors = []; - } -} -type = $type; - $this->old = $old; - $this->new = $new; - } -} -isEqual = $isEqual; - } - /** - * Calculate diff (edit script) from $old to $new. - * - * @param T[] $old Original array - * @param T[] $new New array - * - * @return DiffElem[] Diff (edit script) - */ - public function diff(array $old, array $new): array - { - $old = \array_values($old); - $new = \array_values($new); - list($trace, $x, $y) = $this->calculateTrace($old, $new); - return $this->extractDiff($trace, $x, $y, $old, $new); - } - /** - * Calculate diff, including "replace" operations. - * - * If a sequence of remove operations is followed by the same number of add operations, these - * will be coalesced into replace operations. - * - * @param T[] $old Original array - * @param T[] $new New array - * - * @return DiffElem[] Diff (edit script), including replace operations - */ - public function diffWithReplacements(array $old, array $new): array - { - return $this->coalesceReplacements($this->diff($old, $new)); - } - /** - * @param T[] $old - * @param T[] $new - * @return array{array>, int, int} - */ - private function calculateTrace(array $old, array $new): array - { - $n = \count($old); - $m = \count($new); - $max = $n + $m; - $v = [1 => 0]; - $trace = []; - for ($d = 0; $d <= $max; $d++) { - $trace[] = $v; - for ($k = -$d; $k <= $d; $k += 2) { - if ($k === -$d || $k !== $d && $v[$k - 1] < $v[$k + 1]) { - $x = $v[$k + 1]; - } else { - $x = $v[$k - 1] + 1; - } - $y = $x - $k; - while ($x < $n && $y < $m && ($this->isEqual)($old[$x], $new[$y])) { - $x++; - $y++; - } - $v[$k] = $x; - if ($x >= $n && $y >= $m) { - return [$trace, $x, $y]; - } - } - } - throw new \Exception('Should not happen'); - } - /** - * @param array> $trace - * @param T[] $old - * @param T[] $new - * @return DiffElem[] - */ - private function extractDiff(array $trace, int $x, int $y, array $old, array $new): array - { - $result = []; - for ($d = \count($trace) - 1; $d >= 0; $d--) { - $v = $trace[$d]; - $k = $x - $y; - if ($k === -$d || $k !== $d && $v[$k - 1] < $v[$k + 1]) { - $prevK = $k + 1; - } else { - $prevK = $k - 1; - } - $prevX = $v[$prevK]; - $prevY = $prevX - $prevK; - while ($x > $prevX && $y > $prevY) { - $result[] = new DiffElem(DiffElem::TYPE_KEEP, $old[$x - 1], $new[$y - 1]); - $x--; - $y--; - } - if ($d === 0) { - break; - } - while ($x > $prevX) { - $result[] = new DiffElem(DiffElem::TYPE_REMOVE, $old[$x - 1], null); - $x--; - } - while ($y > $prevY) { - $result[] = new DiffElem(DiffElem::TYPE_ADD, null, $new[$y - 1]); - $y--; - } - } - return array_reverse($result); - } - /** - * Coalesce equal-length sequences of remove+add into a replace operation. - * - * @param DiffElem[] $diff - * @return DiffElem[] - */ - private function coalesceReplacements(array $diff): array - { - $newDiff = []; - $c = \count($diff); - for ($i = 0; $i < $c; $i++) { - $diffType = $diff[$i]->type; - if ($diffType !== DiffElem::TYPE_REMOVE) { - $newDiff[] = $diff[$i]; - continue; - } - $j = $i; - while ($j < $c && $diff[$j]->type === DiffElem::TYPE_REMOVE) { - $j++; - } - $k = $j; - while ($k < $c && $diff[$k]->type === DiffElem::TYPE_ADD) { - $k++; - } - if ($j - $i === $k - $j) { - $len = $j - $i; - for ($n = 0; $n < $len; $n++) { - $newDiff[] = new DiffElem(DiffElem::TYPE_REPLACE, $diff[$i + $n]->old, $diff[$j + $n]->new); - } - } else { - for (; $i < $k; $i++) { - $newDiff[] = $diff[$i]; - } - } - $i = $k - 1; - } - return $newDiff; - } -} - $attributes Attributes - */ - public function __construct(array $attrGroups, int $flags, array $args, ?Node\Name $extends, array $implements, array $stmts, array $attributes) - { - parent::__construct($attributes); - $this->attrGroups = $attrGroups; - $this->flags = $flags; - $this->args = $args; - $this->extends = $extends; - $this->implements = $implements; - $this->stmts = $stmts; - } - public static function fromNewNode(Expr\New_ $newNode): self - { - $class = $newNode->class; - assert($class instanceof Node\Stmt\Class_); - // We don't assert that $class->name is null here, to allow consumers to assign unique names - // to anonymous classes for their own purposes. We simplify ignore the name here. - return new self($class->attrGroups, $class->flags, $newNode->args, $class->extends, $class->implements, $class->stmts, $newNode->getAttributes()); - } - public function getType(): string - { - return 'Expr_PrintableNewAnonClass'; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'flags', 'args', 'extends', 'implements', 'stmts']; - } -} -= 80000) { - class TokenPolyfill extends \PhpToken - { - } - return; -} -/** - * This is a polyfill for the PhpToken class introduced in PHP 8.0. We do not actually polyfill - * PhpToken, because composer might end up picking a different polyfill implementation, which does - * not meet our requirements. - * - * @internal - */ -class TokenPolyfill -{ - /** @var int The ID of the token. Either a T_* constant of a character code < 256. */ - public int $id; - /** @var string The textual content of the token. */ - public string $text; - /** @var int The 1-based starting line of the token (or -1 if unknown). */ - public int $line; - /** @var int The 0-based starting position of the token (or -1 if unknown). */ - public int $pos; - /** @var array Tokens ignored by the PHP parser. */ - private const IGNORABLE_TOKENS = [\T_WHITESPACE => \true, \T_COMMENT => \true, \T_DOC_COMMENT => \true, \T_OPEN_TAG => \true]; - /** @var array Tokens that may be part of a T_NAME_* identifier. */ - private static array $identifierTokens; - /** - * Create a Token with the given ID and text, as well optional line and position information. - */ - final public function __construct(int $id, string $text, int $line = -1, int $pos = -1) - { - $this->id = $id; - $this->text = $text; - $this->line = $line; - $this->pos = $pos; - } - /** - * Get the name of the token. For single-char tokens this will be the token character. - * Otherwise it will be a T_* style name, or null if the token ID is unknown. - */ - public function getTokenName(): ?string - { - if ($this->id < 256) { - return \chr($this->id); - } - $name = token_name($this->id); - return $name === 'UNKNOWN' ? null : $name; - } - /** - * Check whether the token is of the given kind. The kind may be either an integer that matches - * the token ID, a string that matches the token text, or an array of integers/strings. In the - * latter case, the function returns true if any of the kinds in the array match. - * - * @param int|string|(int|string)[] $kind - */ - public function is($kind): bool - { - if (\is_int($kind)) { - return $this->id === $kind; - } - if (\is_string($kind)) { - return $this->text === $kind; - } - if (\is_array($kind)) { - foreach ($kind as $entry) { - if (\is_int($entry)) { - if ($this->id === $entry) { - return \true; - } - } elseif (\is_string($entry)) { - if ($this->text === $entry) { - return \true; - } - } else { - throw new \TypeError('Argument #1 ($kind) must only have elements of type string|int, ' . gettype($entry) . ' given'); - } - } - return \false; - } - throw new \TypeError('Argument #1 ($kind) must be of type string|int|array, ' . gettype($kind) . ' given'); - } - /** - * Check whether this token would be ignored by the PHP parser. Returns true for T_WHITESPACE, - * T_COMMENT, T_DOC_COMMENT and T_OPEN_TAG, and false for everything else. - */ - public function isIgnorable(): bool - { - return isset(self::IGNORABLE_TOKENS[$this->id]); - } - /** - * Return the textual content of the token. - */ - public function __toString(): string - { - return $this->text; - } - /** - * Tokenize the given source code and return an array of tokens. - * - * This performs certain canonicalizations to match the PHP 8.0 token format: - * * Bad characters are represented using T_BAD_CHARACTER rather than omitted. - * * T_COMMENT does not include trailing newlines, instead the newline is part of a following - * T_WHITESPACE token. - * * Namespaced names are represented using T_NAME_* tokens. - * - * @return static[] - */ - public static function tokenize(string $code, int $flags = 0): array - { - self::init(); - $tokens = []; - $line = 1; - $pos = 0; - $origTokens = \token_get_all($code, $flags); - $numTokens = \count($origTokens); - for ($i = 0; $i < $numTokens; $i++) { - $token = $origTokens[$i]; - if (\is_string($token)) { - if (\strlen($token) === 2) { - // b" and B" are tokenized as single-char tokens, even though they aren't. - $tokens[] = new static(\ord('"'), $token, $line, $pos); - $pos += 2; - } else { - $tokens[] = new static(\ord($token), $token, $line, $pos); - $pos++; - } - } else { - $id = $token[0]; - $text = $token[1]; - // Emulate PHP 8.0 comment format, which does not include trailing whitespace anymore. - if ($id === \T_COMMENT && \substr($text, 0, 2) !== '/*' && \preg_match('/(\r\n|\n|\r)$/D', $text, $matches)) { - $trailingNewline = $matches[0]; - $text = \substr($text, 0, -\strlen($trailingNewline)); - $tokens[] = new static($id, $text, $line, $pos); - $pos += \strlen($text); - if ($i + 1 < $numTokens && $origTokens[$i + 1][0] === \T_WHITESPACE) { - // Move trailing newline into following T_WHITESPACE token, if it already exists. - $origTokens[$i + 1][1] = $trailingNewline . $origTokens[$i + 1][1]; - $origTokens[$i + 1][2]--; - } else { - // Otherwise, we need to create a new T_WHITESPACE token. - $tokens[] = new static(\T_WHITESPACE, $trailingNewline, $line, $pos); - $line++; - $pos += \strlen($trailingNewline); - } - continue; - } - // Emulate PHP 8.0 T_NAME_* tokens, by combining sequences of T_NS_SEPARATOR and - // T_STRING into a single token. - if ($id === \T_NS_SEPARATOR || isset(self::$identifierTokens[$id])) { - $newText = $text; - $lastWasSeparator = $id === \T_NS_SEPARATOR; - for ($j = $i + 1; $j < $numTokens; $j++) { - if ($lastWasSeparator) { - if (!isset(self::$identifierTokens[$origTokens[$j][0]])) { - break; - } - $lastWasSeparator = \false; - } else { - if ($origTokens[$j][0] !== \T_NS_SEPARATOR) { - break; - } - $lastWasSeparator = \true; - } - $newText .= $origTokens[$j][1]; - } - if ($lastWasSeparator) { - // Trailing separator is not part of the name. - $j--; - $newText = \substr($newText, 0, -1); - } - if ($j > $i + 1) { - if ($id === \T_NS_SEPARATOR) { - $id = \T_NAME_FULLY_QUALIFIED; - } elseif ($id === \T_NAMESPACE) { - $id = \T_NAME_RELATIVE; - } else { - $id = \T_NAME_QUALIFIED; - } - $tokens[] = new static($id, $newText, $line, $pos); - $pos += \strlen($newText); - $i = $j - 1; - continue; - } - } - $tokens[] = new static($id, $text, $line, $pos); - $line += \substr_count($text, "\n"); - $pos += \strlen($text); - } - } - return $tokens; - } - /** Initialize private static state needed by tokenize(). */ - private static function init(): void - { - if (isset(self::$identifierTokens)) { - return; - } - // Based on semi_reserved production. - self::$identifierTokens = \array_fill_keys([\T_STRING, \T_STATIC, \T_ABSTRACT, \T_FINAL, \T_PRIVATE, \T_PROTECTED, \T_PUBLIC, \T_READONLY, \T_INCLUDE, \T_INCLUDE_ONCE, \T_EVAL, \T_REQUIRE, \T_REQUIRE_ONCE, \T_LOGICAL_OR, \T_LOGICAL_XOR, \T_LOGICAL_AND, \T_INSTANCEOF, \T_NEW, \T_CLONE, \T_EXIT, \T_IF, \T_ELSEIF, \T_ELSE, \T_ENDIF, \T_ECHO, \T_DO, \T_WHILE, \T_ENDWHILE, \T_FOR, \T_ENDFOR, \T_FOREACH, \T_ENDFOREACH, \T_DECLARE, \T_ENDDECLARE, \T_AS, \T_TRY, \T_CATCH, \T_FINALLY, \T_THROW, \T_USE, \T_INSTEADOF, \T_GLOBAL, \T_VAR, \T_UNSET, \T_ISSET, \T_EMPTY, \T_CONTINUE, \T_GOTO, \T_FUNCTION, \T_CONST, \T_RETURN, \T_PRINT, \T_YIELD, \T_LIST, \T_SWITCH, \T_ENDSWITCH, \T_CASE, \T_DEFAULT, \T_BREAK, \T_ARRAY, \T_CALLABLE, \T_EXTENDS, \T_IMPLEMENTS, \T_NAMESPACE, \T_TRAIT, \T_INTERFACE, \T_CLASS, \T_CLASS_C, \T_TRAIT_C, \T_FUNC_C, \T_METHOD_C, \T_LINE, \T_FILE, \T_DIR, \T_NS_C, \T_HALT_COMPILER, \T_FN, \T_MATCH], \true); - } -} -tokens = $tokens; - $this->indentMap = $this->calcIndentMap($tabWidth); - } - /** - * Whether the given position is immediately surrounded by parenthesis. - * - * @param int $startPos Start position - * @param int $endPos End position - */ - public function haveParens(int $startPos, int $endPos): bool - { - return $this->haveTokenImmediatelyBefore($startPos, '(') && $this->haveTokenImmediatelyAfter($endPos, ')'); - } - /** - * Whether the given position is immediately surrounded by braces. - * - * @param int $startPos Start position - * @param int $endPos End position - */ - public function haveBraces(int $startPos, int $endPos): bool - { - return ($this->haveTokenImmediatelyBefore($startPos, '{') || $this->haveTokenImmediatelyBefore($startPos, \T_CURLY_OPEN)) && $this->haveTokenImmediatelyAfter($endPos, '}'); - } - /** - * Check whether the position is directly preceded by a certain token type. - * - * During this check whitespace and comments are skipped. - * - * @param int $pos Position before which the token should occur - * @param int|string $expectedTokenType Token to check for - * - * @return bool Whether the expected token was found - */ - public function haveTokenImmediatelyBefore(int $pos, $expectedTokenType): bool - { - $tokens = $this->tokens; - $pos--; - for (; $pos >= 0; $pos--) { - $token = $tokens[$pos]; - if ($token->is($expectedTokenType)) { - return \true; - } - if (!$token->isIgnorable()) { - break; - } - } - return \false; - } - /** - * Check whether the position is directly followed by a certain token type. - * - * During this check whitespace and comments are skipped. - * - * @param int $pos Position after which the token should occur - * @param int|string $expectedTokenType Token to check for - * - * @return bool Whether the expected token was found - */ - public function haveTokenImmediatelyAfter(int $pos, $expectedTokenType): bool - { - $tokens = $this->tokens; - $pos++; - for ($c = \count($tokens); $pos < $c; $pos++) { - $token = $tokens[$pos]; - if ($token->is($expectedTokenType)) { - return \true; - } - if (!$token->isIgnorable()) { - break; - } - } - return \false; - } - /** @param int|string|(int|string)[] $skipTokenType */ - public function skipLeft(int $pos, $skipTokenType): int - { - $tokens = $this->tokens; - $pos = $this->skipLeftWhitespace($pos); - if ($skipTokenType === \T_WHITESPACE) { - return $pos; - } - if (!$tokens[$pos]->is($skipTokenType)) { - // Shouldn't happen. The skip token MUST be there - throw new \Exception('Encountered unexpected token'); - } - $pos--; - return $this->skipLeftWhitespace($pos); - } - /** @param int|string|(int|string)[] $skipTokenType */ - public function skipRight(int $pos, $skipTokenType): int - { - $tokens = $this->tokens; - $pos = $this->skipRightWhitespace($pos); - if ($skipTokenType === \T_WHITESPACE) { - return $pos; - } - if (!$tokens[$pos]->is($skipTokenType)) { - // Shouldn't happen. The skip token MUST be there - throw new \Exception('Encountered unexpected token'); - } - $pos++; - return $this->skipRightWhitespace($pos); - } - /** - * Return first non-whitespace token position smaller or equal to passed position. - * - * @param int $pos Token position - * @return int Non-whitespace token position - */ - public function skipLeftWhitespace(int $pos): int - { - $tokens = $this->tokens; - for (; $pos >= 0; $pos--) { - if (!$tokens[$pos]->isIgnorable()) { - break; - } - } - return $pos; - } - /** - * Return first non-whitespace position greater or equal to passed position. - * - * @param int $pos Token position - * @return int Non-whitespace token position - */ - public function skipRightWhitespace(int $pos): int - { - $tokens = $this->tokens; - for ($count = \count($tokens); $pos < $count; $pos++) { - if (!$tokens[$pos]->isIgnorable()) { - break; - } - } - return $pos; - } - /** @param int|string|(int|string)[] $findTokenType */ - public function findRight(int $pos, $findTokenType): int - { - $tokens = $this->tokens; - for ($count = \count($tokens); $pos < $count; $pos++) { - if ($tokens[$pos]->is($findTokenType)) { - return $pos; - } - } - return -1; - } - /** - * Whether the given position range contains a certain token type. - * - * @param int $startPos Starting position (inclusive) - * @param int $endPos Ending position (exclusive) - * @param int|string $tokenType Token type to look for - * @return bool Whether the token occurs in the given range - */ - public function haveTokenInRange(int $startPos, int $endPos, $tokenType): bool - { - $tokens = $this->tokens; - for ($pos = $startPos; $pos < $endPos; $pos++) { - if ($tokens[$pos]->is($tokenType)) { - return \true; - } - } - return \false; - } - public function haveTagInRange(int $startPos, int $endPos): bool - { - return $this->haveTokenInRange($startPos, $endPos, \T_OPEN_TAG) || $this->haveTokenInRange($startPos, $endPos, \T_CLOSE_TAG); - } - /** - * Get indentation before token position. - * - * @param int $pos Token position - * - * @return int Indentation depth (in spaces) - */ - public function getIndentationBefore(int $pos): int - { - return $this->indentMap[$pos]; - } - /** - * Get the code corresponding to a token offset range, optionally adjusted for indentation. - * - * @param int $from Token start position (inclusive) - * @param int $to Token end position (exclusive) - * @param int $indent By how much the code should be indented (can be negative as well) - * - * @return string Code corresponding to token range, adjusted for indentation - */ - public function getTokenCode(int $from, int $to, int $indent): string - { - $tokens = $this->tokens; - $result = ''; - for ($pos = $from; $pos < $to; $pos++) { - $token = $tokens[$pos]; - $id = $token->id; - $text = $token->text; - if ($id === \T_CONSTANT_ENCAPSED_STRING || $id === \T_ENCAPSED_AND_WHITESPACE) { - $result .= $text; - } else if ($indent < 0) { - $result .= str_replace("\n" . str_repeat(" ", -$indent), "\n", $text); - } elseif ($indent > 0) { - $result .= str_replace("\n", "\n" . str_repeat(" ", $indent), $text); - } else { - $result .= $text; - } - } - return $result; - } - /** - * Precalculate the indentation at every token position. - * - * @return int[] Token position to indentation map - */ - private function calcIndentMap(int $tabWidth): array - { - $indentMap = []; - $indent = 0; - foreach ($this->tokens as $i => $token) { - $indentMap[] = $indent; - if ($token->id === \T_WHITESPACE) { - $content = $token->text; - $newlinePos = \strrpos($content, "\n"); - if (\false !== $newlinePos) { - $indent = $this->getIndent(\substr($content, $newlinePos + 1), $tabWidth); - } elseif ($i === 1 && $this->tokens[0]->id === \T_OPEN_TAG && $this->tokens[0]->text[\strlen($this->tokens[0]->text) - 1] === "\n") { - // Special case: Newline at the end of opening tag followed by whitespace. - $indent = $this->getIndent($content, $tabWidth); - } - } - } - // Add a sentinel for one past end of the file - $indentMap[] = $indent; - return $indentMap; - } - private function getIndent(string $ws, int $tabWidth): int - { - $spaces = \substr_count($ws, " "); - $tabs = \substr_count($ws, "\t"); - assert(\strlen($ws) === $spaces + $tabs); - return $spaces + $tabs * $tabWidth; - } -} -[] Node type to reflection class map */ - private array $reflectionClassCache; - /** @return mixed */ - public function decode(string $json) - { - $value = json_decode($json, \true); - if (json_last_error()) { - throw new \RuntimeException('JSON decoding error: ' . json_last_error_msg()); - } - return $this->decodeRecursive($value); - } - /** - * @param mixed $value - * @return mixed - */ - private function decodeRecursive($value) - { - if (\is_array($value)) { - if (isset($value['nodeType'])) { - if ($value['nodeType'] === 'Comment' || $value['nodeType'] === 'Comment_Doc') { - return $this->decodeComment($value); - } - return $this->decodeNode($value); - } - return $this->decodeArray($value); - } - return $value; - } - private function decodeArray(array $array): array - { - $decodedArray = []; - foreach ($array as $key => $value) { - $decodedArray[$key] = $this->decodeRecursive($value); - } - return $decodedArray; - } - private function decodeNode(array $value): Node - { - $nodeType = $value['nodeType']; - if (!\is_string($nodeType)) { - throw new \RuntimeException('Node type must be a string'); - } - $reflectionClass = $this->reflectionClassFromNodeType($nodeType); - $node = $reflectionClass->newInstanceWithoutConstructor(); - if (isset($value['attributes'])) { - if (!\is_array($value['attributes'])) { - throw new \RuntimeException('Attributes must be an array'); - } - $node->setAttributes($this->decodeArray($value['attributes'])); - } - foreach ($value as $name => $subNode) { - if ($name === 'nodeType' || $name === 'attributes') { - continue; - } - $node->{$name} = $this->decodeRecursive($subNode); - } - return $node; - } - private function decodeComment(array $value): Comment - { - $className = $value['nodeType'] === 'Comment' ? Comment::class : Comment\Doc::class; - if (!isset($value['text'])) { - throw new \RuntimeException('Comment must have text'); - } - return new $className($value['text'], $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1, $value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1); - } - /** @return \ReflectionClass */ - private function reflectionClassFromNodeType(string $nodeType): \ReflectionClass - { - if (!isset($this->reflectionClassCache[$nodeType])) { - $className = $this->classNameFromNodeType($nodeType); - $this->reflectionClassCache[$nodeType] = new \ReflectionClass($className); - } - return $this->reflectionClassCache[$nodeType]; - } - /** @return class-string */ - private function classNameFromNodeType(string $nodeType): string - { - $className = 'PhpParser\Node\\' . strtr($nodeType, '_', '\\'); - if (class_exists($className)) { - return $className; - } - $className .= '_'; - if (class_exists($className)) { - return $className; - } - throw new \RuntimeException("Unknown node type \"{$nodeType}\""); - } -} -postprocessTokens($tokens, $errorHandler); - if (\false !== $scream) { - ini_set('xdebug.scream', $scream); - } - return $tokens; - } - private function handleInvalidCharacter(Token $token, ErrorHandler $errorHandler): void - { - $chr = $token->text; - if ($chr === "\x00") { - // PHP cuts error message after null byte, so need special case - $errorMsg = 'Unexpected null byte'; - } else { - $errorMsg = sprintf('Unexpected character "%s" (ASCII %d)', $chr, ord($chr)); - } - $errorHandler->handleError(new Error($errorMsg, ['startLine' => $token->line, 'endLine' => $token->line, 'startFilePos' => $token->pos, 'endFilePos' => $token->pos])); - } - private function isUnterminatedComment(Token $token): bool - { - return $token->is([\T_COMMENT, \T_DOC_COMMENT]) && substr($token->text, 0, 2) === '/*' && substr($token->text, -2) !== '*/'; - } - /** - * @param list $tokens - */ - protected function postprocessTokens(array &$tokens, ErrorHandler $errorHandler): void - { - // This function reports errors (bad characters and unterminated comments) in the token - // array, and performs certain canonicalizations: - // * Use PHP 8.1 T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG and - // T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG tokens used to disambiguate intersection types. - // * Add a sentinel token with ID 0. - $numTokens = \count($tokens); - if ($numTokens === 0) { - // Empty input edge case: Just add the sentinel token. - $tokens[] = new Token(0, "\x00", 1, 0); - return; - } - for ($i = 0; $i < $numTokens; $i++) { - $token = $tokens[$i]; - if ($token->id === \T_BAD_CHARACTER) { - $this->handleInvalidCharacter($token, $errorHandler); - } - if ($token->id === \ord('&')) { - $next = $i + 1; - while (isset($tokens[$next]) && $tokens[$next]->id === \T_WHITESPACE) { - $next++; - } - $followedByVarOrVarArg = isset($tokens[$next]) && $tokens[$next]->is([\T_VARIABLE, \T_ELLIPSIS]); - $token->id = $followedByVarOrVarArg ? \T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG : \T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG; - } - } - // Check for unterminated comment - $lastToken = $tokens[$numTokens - 1]; - if ($this->isUnterminatedComment($lastToken)) { - $errorHandler->handleError(new Error('Unterminated comment', ['startLine' => $lastToken->line, 'endLine' => $lastToken->getEndLine(), 'startFilePos' => $lastToken->pos, 'endFilePos' => $lastToken->getEndPos()])); - } - // Add sentinel token. - $tokens[] = new Token(0, "\x00", $lastToken->getEndLine(), $lastToken->getEndPos()); - } -} - */ - private array $emulators = []; - private PhpVersion $targetPhpVersion; - private PhpVersion $hostPhpVersion; - /** - * @param PhpVersion|null $phpVersion PHP version to emulate. Defaults to newest supported. - */ - public function __construct(?PhpVersion $phpVersion = null) - { - $this->targetPhpVersion = $phpVersion ?? PhpVersion::getNewestSupported(); - $this->hostPhpVersion = PhpVersion::getHostVersion(); - $emulators = [new MatchTokenEmulator(), new NullsafeTokenEmulator(), new AttributeEmulator(), new EnumTokenEmulator(), new ReadonlyTokenEmulator(), new ExplicitOctalEmulator(), new ReadonlyFunctionTokenEmulator(), new PropertyTokenEmulator(), new AsymmetricVisibilityTokenEmulator()]; - // Collect emulators that are relevant for the PHP version we're running - // and the PHP version we're targeting for emulation. - foreach ($emulators as $emulator) { - $emulatorPhpVersion = $emulator->getPhpVersion(); - if ($this->isForwardEmulationNeeded($emulatorPhpVersion)) { - $this->emulators[] = $emulator; - } elseif ($this->isReverseEmulationNeeded($emulatorPhpVersion)) { - $this->emulators[] = new ReverseEmulator($emulator); - } - } - } - public function tokenize(string $code, ?ErrorHandler $errorHandler = null): array - { - $emulators = array_filter($this->emulators, function ($emulator) use ($code) { - return $emulator->isEmulationNeeded($code); - }); - if (empty($emulators)) { - // Nothing to emulate, yay - return parent::tokenize($code, $errorHandler); - } - if ($errorHandler === null) { - $errorHandler = new ErrorHandler\Throwing(); - } - $this->patches = []; - foreach ($emulators as $emulator) { - $code = $emulator->preprocessCode($code, $this->patches); - } - $collector = new ErrorHandler\Collecting(); - $tokens = parent::tokenize($code, $collector); - $this->sortPatches(); - $tokens = $this->fixupTokens($tokens); - $errors = $collector->getErrors(); - if (!empty($errors)) { - $this->fixupErrors($errors); - foreach ($errors as $error) { - $errorHandler->handleError($error); - } - } - foreach ($emulators as $emulator) { - $tokens = $emulator->emulate($code, $tokens); - } - return $tokens; - } - private function isForwardEmulationNeeded(PhpVersion $emulatorPhpVersion): bool - { - return $this->hostPhpVersion->older($emulatorPhpVersion) && $this->targetPhpVersion->newerOrEqual($emulatorPhpVersion); - } - private function isReverseEmulationNeeded(PhpVersion $emulatorPhpVersion): bool - { - return $this->hostPhpVersion->newerOrEqual($emulatorPhpVersion) && $this->targetPhpVersion->older($emulatorPhpVersion); - } - private function sortPatches(): void - { - // Patches may be contributed by different emulators. - // Make sure they are sorted by increasing patch position. - usort($this->patches, function ($p1, $p2) { - return $p1[0] <=> $p2[0]; - }); - } - /** - * @param list $tokens - * @return list - */ - private function fixupTokens(array $tokens): array - { - if (\count($this->patches) === 0) { - return $tokens; - } - // Load first patch - $patchIdx = 0; - list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; - // We use a manual loop over the tokens, because we modify the array on the fly - $posDelta = 0; - $lineDelta = 0; - for ($i = 0, $c = \count($tokens); $i < $c; $i++) { - $token = $tokens[$i]; - $pos = $token->pos; - $token->pos += $posDelta; - $token->line += $lineDelta; - $localPosDelta = 0; - $len = \strlen($token->text); - while ($patchPos >= $pos && $patchPos < $pos + $len) { - $patchTextLen = \strlen($patchText); - if ($patchType === 'remove') { - if ($patchPos === $pos && $patchTextLen === $len) { - // Remove token entirely - array_splice($tokens, $i, 1, []); - $i--; - $c--; - } else { - // Remove from token string - $token->text = substr_replace($token->text, '', $patchPos - $pos + $localPosDelta, $patchTextLen); - $localPosDelta -= $patchTextLen; - } - $lineDelta -= \substr_count($patchText, "\n"); - } elseif ($patchType === 'add') { - // Insert into the token string - $token->text = substr_replace($token->text, $patchText, $patchPos - $pos + $localPosDelta, 0); - $localPosDelta += $patchTextLen; - $lineDelta += \substr_count($patchText, "\n"); - } elseif ($patchType === 'replace') { - // Replace inside the token string - $token->text = substr_replace($token->text, $patchText, $patchPos - $pos + $localPosDelta, $patchTextLen); - } else { - assert(\false); - } - // Fetch the next patch - $patchIdx++; - if ($patchIdx >= \count($this->patches)) { - // No more patches. However, we still need to adjust position. - $patchPos = \PHP_INT_MAX; - break; - } - list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; - } - $posDelta += $localPosDelta; - } - return $tokens; - } - /** - * Fixup line and position information in errors. - * - * @param Error[] $errors - */ - private function fixupErrors(array $errors): void - { - foreach ($errors as $error) { - $attrs = $error->getAttributes(); - $posDelta = 0; - $lineDelta = 0; - foreach ($this->patches as $patch) { - list($patchPos, $patchType, $patchText) = $patch; - if ($patchPos >= $attrs['startFilePos']) { - // No longer relevant - break; - } - if ($patchType === 'add') { - $posDelta += strlen($patchText); - $lineDelta += substr_count($patchText, "\n"); - } elseif ($patchType === 'remove') { - $posDelta -= strlen($patchText); - $lineDelta -= substr_count($patchText, "\n"); - } - } - $attrs['startFilePos'] += $posDelta; - $attrs['endFilePos'] += $posDelta; - $attrs['startLine'] += $lineDelta; - $attrs['endLine'] += $lineDelta; - $error->setAttributes($attrs); - } - } -} - \T_PUBLIC_SET, \T_PROTECTED => \T_PROTECTED_SET, \T_PRIVATE => \T_PRIVATE_SET]; - for ($i = 0, $c = count($tokens); $i < $c; ++$i) { - $token = $tokens[$i]; - if (isset($map[$token->id]) && $i + 3 < $c && $tokens[$i + 1]->text === '(' && $tokens[$i + 2]->id === \T_STRING && \strtolower($tokens[$i + 2]->text) === 'set' && $tokens[$i + 3]->text === ')' && $this->isKeywordContext($tokens, $i)) { - array_splice($tokens, $i, 4, [new Token($map[$token->id], $token->text . '(' . $tokens[$i + 2]->text . ')', $token->line, $token->pos)]); - $c -= 3; - } - } - return $tokens; - } - public function reverseEmulate(string $code, array $tokens): array - { - $reverseMap = [\T_PUBLIC_SET => \T_PUBLIC, \T_PROTECTED_SET => \T_PROTECTED, \T_PRIVATE_SET => \T_PRIVATE]; - for ($i = 0, $c = count($tokens); $i < $c; ++$i) { - $token = $tokens[$i]; - if (isset($reverseMap[$token->id]) && \preg_match('/(public|protected|private)\((set)\)/i', $token->text, $matches)) { - [, $modifier, $set] = $matches; - $modifierLen = \strlen($modifier); - array_splice($tokens, $i, 1, [new Token($reverseMap[$token->id], $modifier, $token->line, $token->pos), new Token(\ord('('), '(', $token->line, $token->pos + $modifierLen), new Token(\T_STRING, $set, $token->line, $token->pos + $modifierLen + 1), new Token(\ord(')'), ')', $token->line, $token->pos + $modifierLen + 4)]); - $i += 3; - $c += 3; - } - } - return $tokens; - } - /** @param Token[] $tokens */ - protected function isKeywordContext(array $tokens, int $pos): bool - { - $prevToken = $this->getPreviousNonSpaceToken($tokens, $pos); - if ($prevToken === null) { - return \false; - } - return $prevToken->id !== \T_OBJECT_OPERATOR && $prevToken->id !== \T_NULLSAFE_OBJECT_OPERATOR; - } - /** @param Token[] $tokens */ - private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token - { - for ($i = $start - 1; $i >= 0; --$i) { - if ($tokens[$i]->id === \T_WHITESPACE) { - continue; - } - return $tokens[$i]; - } - return null; - } -} -text === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1]->text === '[') { - array_splice($tokens, $i, 2, [new Token(\T_ATTRIBUTE, '#[', $token->line, $token->pos)]); - $c--; - continue; - } - } - return $tokens; - } - public function reverseEmulate(string $code, array $tokens): array - { - // TODO - return $tokens; - } - public function preprocessCode(string $code, array &$patches): string - { - $pos = 0; - while (\false !== $pos = strpos($code, '#[', $pos)) { - // Replace #[ with %[ - $code[$pos] = '%'; - $patches[] = [$pos, 'replace', '#']; - $pos += 2; - } - return $code; - } -} -id === \T_WHITESPACE && $tokens[$pos + 2]->id === \T_STRING; - } -} -id == \T_LNUMBER && $token->text === '0' && isset($tokens[$i + 1]) && $tokens[$i + 1]->id == \T_STRING && preg_match('/[oO][0-7]+(?:_[0-7]+)*/', $tokens[$i + 1]->text)) { - $tokenKind = $this->resolveIntegerOrFloatToken($tokens[$i + 1]->text); - array_splice($tokens, $i, 2, [new Token($tokenKind, '0' . $tokens[$i + 1]->text, $token->line, $token->pos)]); - $c--; - } - } - return $tokens; - } - private function resolveIntegerOrFloatToken(string $str): int - { - $str = substr($str, 1); - $str = str_replace('_', '', $str); - $num = octdec($str); - return is_float($num) ? \T_DNUMBER : \T_LNUMBER; - } - public function reverseEmulate(string $code, array $tokens): array - { - // Explicit octals were not legal code previously, don't bother. - return $tokens; - } -} -getKeywordString()) !== \false; - } - /** @param Token[] $tokens */ - protected function isKeywordContext(array $tokens, int $pos): bool - { - $prevToken = $this->getPreviousNonSpaceToken($tokens, $pos); - if ($prevToken === null) { - return \false; - } - return $prevToken->id !== \T_OBJECT_OPERATOR && $prevToken->id !== \T_NULLSAFE_OBJECT_OPERATOR; - } - public function emulate(string $code, array $tokens): array - { - $keywordString = $this->getKeywordString(); - foreach ($tokens as $i => $token) { - if ($token->id === \T_STRING && strtolower($token->text) === $keywordString && $this->isKeywordContext($tokens, $i)) { - $token->id = $this->getKeywordToken(); - } - } - return $tokens; - } - /** @param Token[] $tokens */ - private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token - { - for ($i = $start - 1; $i >= 0; --$i) { - if ($tokens[$i]->id === \T_WHITESPACE) { - continue; - } - return $tokens[$i]; - } - return null; - } - public function reverseEmulate(string $code, array $tokens): array - { - $keywordToken = $this->getKeywordToken(); - foreach ($tokens as $token) { - if ($token->id === $keywordToken) { - $token->id = \T_STRING; - } - } - return $tokens; - } -} -') !== \false; - } - public function emulate(string $code, array $tokens): array - { - // We need to manually iterate and manage a count because we'll change - // the tokens array on the way - for ($i = 0, $c = count($tokens); $i < $c; ++$i) { - $token = $tokens[$i]; - if ($token->text === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1]->id === \T_OBJECT_OPERATOR) { - array_splice($tokens, $i, 2, [new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos)]); - $c--; - continue; - } - // Handle ?-> inside encapsed string. - if ($token->id === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1]) && $tokens[$i - 1]->id === \T_VARIABLE && preg_match('/^\?->([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)/', $token->text, $matches)) { - $replacement = [new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos), new Token(\T_STRING, $matches[1], $token->line, $token->pos + 3)]; - $matchLen = \strlen($matches[0]); - if ($matchLen !== \strlen($token->text)) { - $replacement[] = new Token(\T_ENCAPSED_AND_WHITESPACE, \substr($token->text, $matchLen), $token->line, $token->pos + $matchLen); - } - array_splice($tokens, $i, 1, $replacement); - $c += \count($replacement) - 1; - continue; - } - } - return $tokens; - } - public function reverseEmulate(string $code, array $tokens): array - { - // ?-> was not valid code previously, don't bother. - return $tokens; - } -} -text === '(' || $tokens[$pos + 1]->id === \T_WHITESPACE && isset($tokens[$pos + 2]) && $tokens[$pos + 2]->text === '(')); - } -} -emulator = $emulator; - } - public function getPhpVersion(): PhpVersion - { - return $this->emulator->getPhpVersion(); - } - public function isEmulationNeeded(string $code): bool - { - return $this->emulator->isEmulationNeeded($code); - } - public function emulate(string $code, array $tokens): array - { - return $this->emulator->reverseEmulate($code, $tokens); - } - public function reverseEmulate(string $code, array $tokens): array - { - return $this->emulator->emulate($code, $tokens); - } - public function preprocessCode(string $code, array &$patches): string - { - return $code; - } -} - 'public', self::PROTECTED => 'protected', self::PRIVATE => 'private', self::STATIC => 'static', self::ABSTRACT => 'abstract', self::FINAL => 'final', self::READONLY => 'readonly', self::PUBLIC_SET => 'public(set)', self::PROTECTED_SET => 'protected(set)', self::PRIVATE_SET => 'private(set)']; - public static function toString(int $modifier): string - { - if (!isset(self::TO_STRING_MAP[$modifier])) { - throw new \InvalidArgumentException("Unknown modifier {$modifier}"); - } - return self::TO_STRING_MAP[$modifier]; - } - private static function isValidModifier(int $modifier): bool - { - $isPow2 = ($modifier & $modifier - 1) == 0 && $modifier != 0; - return $isPow2 && $modifier <= self::PRIVATE_SET; - } - /** - * @internal - */ - public static function verifyClassModifier(int $a, int $b): void - { - assert(self::isValidModifier($b)); - if (($a & $b) != 0) { - throw new Error('Multiple ' . self::toString($b) . ' modifiers are not allowed'); - } - if ($a & 48 && $b & 48) { - throw new Error('Cannot use the final modifier on an abstract class'); - } - } - /** - * @internal - */ - public static function verifyModifier(int $a, int $b): void - { - assert(self::isValidModifier($b)); - if ($a & Modifiers::VISIBILITY_MASK && $b & Modifiers::VISIBILITY_MASK || $a & Modifiers::VISIBILITY_SET_MASK && $b & Modifiers::VISIBILITY_SET_MASK) { - throw new Error('Multiple access type modifiers are not allowed'); - } - if (($a & $b) != 0) { - throw new Error('Multiple ' . self::toString($b) . ' modifiers are not allowed'); - } - if ($a & 48 && $b & 48) { - throw new Error('Cannot use the final modifier on an abstract class member'); - } - } -} - [aliasName => originalName]] */ - protected array $aliases = []; - /** @var Name[][] Same as $aliases but preserving original case */ - protected array $origAliases = []; - /** @var ErrorHandler Error handler */ - protected ErrorHandler $errorHandler; - /** - * Create a name context. - * - * @param ErrorHandler $errorHandler Error handling used to report errors - */ - public function __construct(ErrorHandler $errorHandler) - { - $this->errorHandler = $errorHandler; - } - /** - * Start a new namespace. - * - * This also resets the alias table. - * - * @param Name|null $namespace Null is the global namespace - */ - public function startNamespace(?Name $namespace = null): void - { - $this->namespace = $namespace; - $this->origAliases = $this->aliases = [Stmt\Use_::TYPE_NORMAL => [], Stmt\Use_::TYPE_FUNCTION => [], Stmt\Use_::TYPE_CONSTANT => []]; - } - /** - * Add an alias / import. - * - * @param Name $name Original name - * @param string $aliasName Aliased name - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* - * @param array $errorAttrs Attributes to use to report an error - */ - public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []): void - { - // Constant names are case sensitive, everything else case insensitive - if ($type === Stmt\Use_::TYPE_CONSTANT) { - $aliasLookupName = $aliasName; - } else { - $aliasLookupName = strtolower($aliasName); - } - if (isset($this->aliases[$type][$aliasLookupName])) { - $typeStringMap = [Stmt\Use_::TYPE_NORMAL => '', Stmt\Use_::TYPE_FUNCTION => 'function ', Stmt\Use_::TYPE_CONSTANT => 'const ']; - $this->errorHandler->handleError(new Error(sprintf('Cannot use %s%s as %s because the name is already in use', $typeStringMap[$type], $name, $aliasName), $errorAttrs)); - return; - } - $this->aliases[$type][$aliasLookupName] = $name; - $this->origAliases[$type][$aliasName] = $name; - } - /** - * Get current namespace. - * - * @return null|Name Namespace (or null if global namespace) - */ - public function getNamespace(): ?Name - { - return $this->namespace; - } - /** - * Get resolved name. - * - * @param Name $name Name to resolve - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_{FUNCTION|CONSTANT} - * - * @return null|Name Resolved name, or null if static resolution is not possible - */ - public function getResolvedName(Name $name, int $type): ?Name - { - // don't resolve special class names - if ($type === Stmt\Use_::TYPE_NORMAL && $name->isSpecialClassName()) { - if (!$name->isUnqualified()) { - $this->errorHandler->handleError(new Error(sprintf("'\\%s' is an invalid class name", $name->toString()), $name->getAttributes())); - } - return $name; - } - // fully qualified names are already resolved - if ($name->isFullyQualified()) { - return $name; - } - // Try to resolve aliases - if (null !== $resolvedName = $this->resolveAlias($name, $type)) { - return $resolvedName; - } - if ($type !== Stmt\Use_::TYPE_NORMAL && $name->isUnqualified()) { - if (null === $this->namespace) { - // outside of a namespace unaliased unqualified is same as fully qualified - return new FullyQualified($name, $name->getAttributes()); - } - // Cannot resolve statically - return null; - } - // if no alias exists prepend current namespace - return FullyQualified::concat($this->namespace, $name, $name->getAttributes()); - } - /** - * Get resolved class name. - * - * @param Name $name Class ame to resolve - * - * @return Name Resolved name - */ - public function getResolvedClassName(Name $name): Name - { - return $this->getResolvedName($name, Stmt\Use_::TYPE_NORMAL); - } - /** - * Get possible ways of writing a fully qualified name (e.g., by making use of aliases). - * - * @param string $name Fully-qualified name (without leading namespace separator) - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* - * - * @return Name[] Possible representations of the name - */ - public function getPossibleNames(string $name, int $type): array - { - $lcName = strtolower($name); - if ($type === Stmt\Use_::TYPE_NORMAL) { - // self, parent and static must always be unqualified - if ($lcName === "self" || $lcName === "parent" || $lcName === "static") { - return [new Name($name)]; - } - } - // Collect possible ways to write this name, starting with the fully-qualified name - $possibleNames = [new FullyQualified($name)]; - if (null !== $nsRelativeName = $this->getNamespaceRelativeName($name, $lcName, $type)) { - // Make sure there is no alias that makes the normally namespace-relative name - // into something else - if (null === $this->resolveAlias($nsRelativeName, $type)) { - $possibleNames[] = $nsRelativeName; - } - } - // Check for relevant namespace use statements - foreach ($this->origAliases[Stmt\Use_::TYPE_NORMAL] as $alias => $orig) { - $lcOrig = $orig->toLowerString(); - if (0 === strpos($lcName, $lcOrig . '\\')) { - $possibleNames[] = new Name($alias . substr($name, strlen($lcOrig))); - } - } - // Check for relevant type-specific use statements - foreach ($this->origAliases[$type] as $alias => $orig) { - if ($type === Stmt\Use_::TYPE_CONSTANT) { - // Constants are complicated-sensitive - $normalizedOrig = $this->normalizeConstName($orig->toString()); - if ($normalizedOrig === $this->normalizeConstName($name)) { - $possibleNames[] = new Name($alias); - } - } else if ($orig->toLowerString() === $lcName) { - $possibleNames[] = new Name($alias); - } - } - return $possibleNames; - } - /** - * Get shortest representation of this fully-qualified name. - * - * @param string $name Fully-qualified name (without leading namespace separator) - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* - * - * @return Name Shortest representation - */ - public function getShortName(string $name, int $type): Name - { - $possibleNames = $this->getPossibleNames($name, $type); - // Find shortest name - $shortestName = null; - $shortestLength = \INF; - foreach ($possibleNames as $possibleName) { - $length = strlen($possibleName->toCodeString()); - if ($length < $shortestLength) { - $shortestName = $possibleName; - $shortestLength = $length; - } - } - return $shortestName; - } - private function resolveAlias(Name $name, int $type): ?FullyQualified - { - $firstPart = $name->getFirst(); - if ($name->isQualified()) { - // resolve aliases for qualified names, always against class alias table - $checkName = strtolower($firstPart); - if (isset($this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName])) { - $alias = $this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName]; - return FullyQualified::concat($alias, $name->slice(1), $name->getAttributes()); - } - } elseif ($name->isUnqualified()) { - // constant aliases are case-sensitive, function aliases case-insensitive - $checkName = $type === Stmt\Use_::TYPE_CONSTANT ? $firstPart : strtolower($firstPart); - if (isset($this->aliases[$type][$checkName])) { - // resolve unqualified aliases - return new FullyQualified($this->aliases[$type][$checkName], $name->getAttributes()); - } - } - // No applicable aliases - return null; - } - private function getNamespaceRelativeName(string $name, string $lcName, int $type): ?Name - { - if (null === $this->namespace) { - return new Name($name); - } - if ($type === Stmt\Use_::TYPE_CONSTANT) { - // The constants true/false/null always resolve to the global symbols, even inside a - // namespace, so they may be used without qualification - if ($lcName === "true" || $lcName === "false" || $lcName === "null") { - return new Name($name); - } - } - $namespacePrefix = strtolower($this->namespace . '\\'); - if (0 === strpos($lcName, $namespacePrefix)) { - return new Name(substr($name, strlen($namespacePrefix))); - } - return null; - } - private function normalizeConstName(string $name): string - { - $nsSep = strrpos($name, '\\'); - if (\false === $nsSep) { - return $name; - } - // Constants have case-insensitive namespace and case-sensitive short-name - $ns = substr($name, 0, $nsSep); - $shortName = substr($name, $nsSep + 1); - return strtolower($ns) . '\\' . $shortName; - } -} - - */ - public function getAttributes(): array; - /** - * Replaces all the attributes of this node. - * - * @param array $attributes - */ - public function setAttributes(array $attributes): void; -} - $attributes Additional attributes - * @param Identifier|null $name Parameter name (for named parameters) - */ - public function __construct(Expr $value, bool $byRef = \false, bool $unpack = \false, array $attributes = [], ?Identifier $name = null) - { - $this->attributes = $attributes; - $this->name = $name; - $this->value = $value; - $this->byRef = $byRef; - $this->unpack = $unpack; - } - public function getSubNodeNames(): array - { - return ['name', 'value', 'byRef', 'unpack']; - } - public function getType(): string - { - return 'Arg'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $value, ?Expr $key = null, bool $byRef = \false, array $attributes = [], bool $unpack = \false) - { - $this->attributes = $attributes; - $this->key = $key; - $this->value = $value; - $this->byRef = $byRef; - $this->unpack = $unpack; - } - public function getSubNodeNames(): array - { - return ['key', 'value', 'byRef', 'unpack']; - } - public function getType(): string - { - return 'ArrayItem'; - } -} -// @deprecated compatibility alias -class_alias(ArrayItem::class, Expr\ArrayItem::class); - Attribute arguments */ - public array $args; - /** - * @param Node\Name $name Attribute name - * @param list $args Attribute arguments - * @param array $attributes Additional node attributes - */ - public function __construct(Name $name, array $args = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->name = $name; - $this->args = $args; - } - public function getSubNodeNames(): array - { - return ['name', 'args']; - } - public function getType(): string - { - return 'Attribute'; - } -} - $attributes Additional node attributes - */ - public function __construct(array $attrs, array $attributes = []) - { - $this->attributes = $attributes; - $this->attrs = $attrs; - } - public function getSubNodeNames(): array - { - return ['attrs']; - } - public function getType(): string - { - return 'AttributeGroup'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr\Variable $var, bool $byRef = \false, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->byRef = $byRef; - } - public function getSubNodeNames(): array - { - return ['var', 'byRef']; - } - public function getType(): string - { - return 'ClosureUse'; - } -} -// @deprecated compatibility alias -class_alias(ClosureUse::class, Expr\ClosureUse::class); - $attributes Additional attributes - */ - public function __construct($name, Expr $value, array $attributes = []) - { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->value = $value; - } - public function getSubNodeNames(): array - { - return ['name', 'value']; - } - public function getType(): string - { - return 'Const'; - } -} -value pair node. - * - * @param string|Node\Identifier $key Key - * @param Node\Expr $value Value - * @param array $attributes Additional attributes - */ - public function __construct($key, Node\Expr $value, array $attributes = []) - { - $this->attributes = $attributes; - $this->key = \is_string($key) ? new Node\Identifier($key) : $key; - $this->value = $value; - } - public function getSubNodeNames(): array - { - return ['key', 'value']; - } - public function getType(): string - { - return 'DeclareItem'; - } -} -// @deprecated compatibility alias -class_alias(DeclareItem::class, Stmt\DeclareDeclare::class); - $attributes Additional attributes - */ - public function __construct(Expr $var, ?Expr $dim = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->dim = $dim; - } - public function getSubNodeNames(): array - { - return ['var', 'dim']; - } - public function getType(): string - { - return 'Expr_ArrayDimFetch'; - } -} - $attributes Additional attributes - */ - public function __construct(array $items = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->items = $items; - } - public function getSubNodeNames(): array - { - return ['items']; - } - public function getType(): string - { - return 'Expr_Array'; - } -} - false : Whether the closure is static - * 'byRef' => false : Whether to return by reference - * 'params' => array() : Parameters - * 'returnType' => null : Return type - * 'attrGroups' => array() : PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct(array $subNodes, array $attributes = []) - { - $this->attributes = $attributes; - $this->static = $subNodes['static'] ?? \false; - $this->byRef = $subNodes['byRef'] ?? \false; - $this->params = $subNodes['params'] ?? []; - $this->returnType = $subNodes['returnType'] ?? null; - $this->expr = $subNodes['expr']; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'static', 'byRef', 'params', 'returnType', 'expr']; - } - public function returnsByRef(): bool - { - return $this->byRef; - } - public function getParams(): array - { - return $this->params; - } - public function getReturnType() - { - return $this->returnType; - } - public function getAttrGroups(): array - { - return $this->attrGroups; - } - /** - * @return Node\Stmt\Return_[] - */ - public function getStmts(): array - { - return [new Node\Stmt\Return_($this->expr)]; - } - public function getType(): string - { - return 'Expr_ArrowFunction'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $var, Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['var', 'expr']; - } - public function getType(): string - { - return 'Expr_Assign'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $var, Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['var', 'expr']; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $var, Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['var', 'expr']; - } - public function getType(): string - { - return 'Expr_AssignRef'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $left, Expr $right, array $attributes = []) - { - $this->attributes = $attributes; - $this->left = $left; - $this->right = $right; - } - public function getSubNodeNames(): array - { - return ['left', 'right']; - } - /** - * Get the operator sigil for this binary operation. - * - * In the case there are multiple possible sigils for an operator, this method does not - * necessarily return the one used in the parsed code. - */ - abstract public function getOperatorSigil(): string; -} -'; - } - public function getType(): string - { - return 'Expr_BinaryOp_Greater'; - } -} -='; - } - public function getType(): string - { - return 'Expr_BinaryOp_GreaterOrEqual'; - } -} ->'; - } - public function getType(): string - { - return 'Expr_BinaryOp_ShiftRight'; - } -} -'; - } - public function getType(): string - { - return 'Expr_BinaryOp_Spaceship'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_BitwiseNot'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_BooleanNot'; - } -} - - */ - abstract public function getRawArgs(): array; - /** - * Returns whether this call expression is actually a first class callable. - */ - public function isFirstClassCallable(): bool - { - $rawArgs = $this->getRawArgs(); - return count($rawArgs) === 1 && current($rawArgs) instanceof VariadicPlaceholder; - } - /** - * Assert that this is not a first-class callable and return only ordinary Args. - * - * @return Arg[] - */ - public function getArgs(): array - { - assert(!$this->isFirstClassCallable()); - return $this->getRawArgs(); - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } -} - $attributes Additional attributes - */ - public function __construct(Node $class, $name, array $attributes = []) - { - $this->attributes = $attributes; - $this->class = $class; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - public function getSubNodeNames(): array - { - return ['class', 'name']; - } - public function getType(): string - { - return 'Expr_ClassConstFetch'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_Clone'; - } -} - false : Whether the closure is static - * 'byRef' => false : Whether to return by reference - * 'params' => array(): Parameters - * 'uses' => array(): use()s - * 'returnType' => null : Return type - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attributes groups - * @param array $attributes Additional attributes - */ - public function __construct(array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->static = $subNodes['static'] ?? \false; - $this->byRef = $subNodes['byRef'] ?? \false; - $this->params = $subNodes['params'] ?? []; - $this->uses = $subNodes['uses'] ?? []; - $this->returnType = $subNodes['returnType'] ?? null; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'static', 'byRef', 'params', 'uses', 'returnType', 'stmts']; - } - public function returnsByRef(): bool - { - return $this->byRef; - } - public function getParams(): array - { - return $this->params; - } - public function getReturnType() - { - return $this->returnType; - } - /** @return Node\Stmt[] */ - public function getStmts(): array - { - return $this->stmts; - } - public function getAttrGroups(): array - { - return $this->attrGroups; - } - public function getType(): string - { - return 'Expr_Closure'; - } -} - $attributes Additional attributes - */ - public function __construct(Name $name, array $attributes = []) - { - $this->attributes = $attributes; - $this->name = $name; - } - public function getSubNodeNames(): array - { - return ['name']; - } - public function getType(): string - { - return 'Expr_ConstFetch'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_Empty'; - } -} - $attributes Additional attributes - */ - public function __construct(array $attributes = []) - { - $this->attributes = $attributes; - } - public function getSubNodeNames(): array - { - return []; - } - public function getType(): string - { - return 'Expr_Error'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_ErrorSuppress'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_Eval'; - } -} - $attributes Additional attributes - */ - public function __construct(?Expr $expr = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_Exit'; - } -} - Arguments */ - public array $args; - /** - * Constructs a function call node. - * - * @param Node\Name|Expr $name Function name - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Node $name, array $args = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->name = $name; - $this->args = $args; - } - public function getSubNodeNames(): array - { - return ['name', 'args']; - } - public function getType(): string - { - return 'Expr_FuncCall'; - } - public function getRawArgs(): array - { - return $this->args; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, int $type, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - $this->type = $type; - } - public function getSubNodeNames(): array - { - return ['expr', 'type']; - } - public function getType(): string - { - return 'Expr_Include'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, Node $class, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - $this->class = $class; - } - public function getSubNodeNames(): array - { - return ['expr', 'class']; - } - public function getType(): string - { - return 'Expr_Instanceof'; - } -} - $attributes Additional attributes - */ - public function __construct(array $vars, array $attributes = []) - { - $this->attributes = $attributes; - $this->vars = $vars; - } - public function getSubNodeNames(): array - { - return ['vars']; - } - public function getType(): string - { - return 'Expr_Isset'; - } -} - $attributes Additional attributes - */ - public function __construct(array $items, array $attributes = []) - { - $this->attributes = $attributes; - $this->items = $items; - } - public function getSubNodeNames(): array - { - return ['items']; - } - public function getType(): string - { - return 'Expr_List'; - } -} - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $arms = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->cond = $cond; - $this->arms = $arms; - } - public function getSubNodeNames(): array - { - return ['cond', 'arms']; - } - public function getType(): string - { - return 'Expr_Match'; - } -} - Arguments */ - public array $args; - /** - * Constructs a function call node. - * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Method name - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Expr $var, $name, array $args = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->args = $args; - } - public function getSubNodeNames(): array - { - return ['var', 'name', 'args']; - } - public function getType(): string - { - return 'Expr_MethodCall'; - } - public function getRawArgs(): array - { - return $this->args; - } -} - Arguments */ - public array $args; - /** - * Constructs a function call node. - * - * @param Node\Name|Expr|Node\Stmt\Class_ $class Class name (or class node for anonymous classes) - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Node $class, array $args = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->class = $class; - $this->args = $args; - } - public function getSubNodeNames(): array - { - return ['class', 'args']; - } - public function getType(): string - { - return 'Expr_New'; - } - public function getRawArgs(): array - { - return $this->args; - } -} - Arguments */ - public array $args; - /** - * Constructs a nullsafe method call node. - * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Method name - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Expr $var, $name, array $args = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->args = $args; - } - public function getSubNodeNames(): array - { - return ['var', 'name', 'args']; - } - public function getType(): string - { - return 'Expr_NullsafeMethodCall'; - } - public function getRawArgs(): array - { - return $this->args; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $var, $name, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - public function getSubNodeNames(): array - { - return ['var', 'name']; - } - public function getType(): string - { - return 'Expr_NullsafePropertyFetch'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $var, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - } - public function getSubNodeNames(): array - { - return ['var']; - } - public function getType(): string - { - return 'Expr_PostDec'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $var, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - } - public function getSubNodeNames(): array - { - return ['var']; - } - public function getType(): string - { - return 'Expr_PostInc'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $var, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - } - public function getSubNodeNames(): array - { - return ['var']; - } - public function getType(): string - { - return 'Expr_PreDec'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $var, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - } - public function getSubNodeNames(): array - { - return ['var']; - } - public function getType(): string - { - return 'Expr_PreInc'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_Print'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $var, $name, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - public function getSubNodeNames(): array - { - return ['var', 'name']; - } - public function getType(): string - { - return 'Expr_PropertyFetch'; - } -} - $attributes Additional attributes - */ - public function __construct(array $parts, array $attributes = []) - { - $this->attributes = $attributes; - $this->parts = $parts; - } - public function getSubNodeNames(): array - { - return ['parts']; - } - public function getType(): string - { - return 'Expr_ShellExec'; - } -} - Arguments */ - public array $args; - /** - * Constructs a static method call node. - * - * @param Node\Name|Expr $class Class name - * @param string|Identifier|Expr $name Method name - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Node $class, $name, array $args = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->class = $class; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->args = $args; - } - public function getSubNodeNames(): array - { - return ['class', 'name', 'args']; - } - public function getType(): string - { - return 'Expr_StaticCall'; - } - public function getRawArgs(): array - { - return $this->args; - } -} - $attributes Additional attributes - */ - public function __construct(Node $class, $name, array $attributes = []) - { - $this->attributes = $attributes; - $this->class = $class; - $this->name = \is_string($name) ? new VarLikeIdentifier($name) : $name; - } - public function getSubNodeNames(): array - { - return ['class', 'name']; - } - public function getType(): string - { - return 'Expr_StaticPropertyFetch'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $cond, ?Expr $if, Expr $else, array $attributes = []) - { - $this->attributes = $attributes; - $this->cond = $cond; - $this->if = $if; - $this->else = $else; - } - public function getSubNodeNames(): array - { - return ['cond', 'if', 'else']; - } - public function getType(): string - { - return 'Expr_Ternary'; - } -} - $attributes Additional attributes - */ - public function __construct(Node\Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_Throw'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_UnaryMinus'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_UnaryPlus'; - } -} - $attributes Additional attributes - */ - public function __construct($name, array $attributes = []) - { - $this->attributes = $attributes; - $this->name = $name; - } - public function getSubNodeNames(): array - { - return ['name']; - } - public function getType(): string - { - return 'Expr_Variable'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Expr_YieldFrom'; - } -} - $attributes Additional attributes - */ - public function __construct(?Expr $value = null, ?Expr $key = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->key = $key; - $this->value = $value; - } - public function getSubNodeNames(): array - { - return ['key', 'value']; - } - public function getType(): string - { - return 'Expr_Yield'; - } -} - */ - private static array $specialClassNames = ['self' => \true, 'parent' => \true, 'static' => \true]; - /** - * Constructs an identifier node. - * - * @param string $name Identifier as string - * @param array $attributes Additional attributes - */ - public function __construct(string $name, array $attributes = []) - { - if ($name === '') { - throw new \InvalidArgumentException('Identifier name cannot be empty'); - } - $this->attributes = $attributes; - $this->name = $name; - } - public function getSubNodeNames(): array - { - return ['name']; - } - /** - * Get identifier as string. - * - * @psalm-return non-empty-string - * @return string Identifier as string. - */ - public function toString(): string - { - return $this->name; - } - /** - * Get lowercased identifier as string. - * - * @psalm-return non-empty-string&lowercase-string - * @return string Lowercased identifier as string - */ - public function toLowerString(): string - { - return strtolower($this->name); - } - /** - * Checks whether the identifier is a special class name (self, parent or static). - * - * @return bool Whether identifier is a special class name - */ - public function isSpecialClassName(): bool - { - return isset(self::$specialClassNames[strtolower($this->name)]); - } - /** - * Get identifier as string. - * - * @psalm-return non-empty-string - * @return string Identifier as string - */ - public function __toString(): string - { - return $this->name; - } - public function getType(): string - { - return 'Identifier'; - } -} - $attributes Additional attributes - */ - public function __construct(string $value, array $attributes = []) - { - $this->attributes = $attributes; - $this->value = $value; - } - public function getSubNodeNames(): array - { - return ['value']; - } - public function getType(): string - { - return 'InterpolatedStringPart'; - } -} -// @deprecated compatibility alias -class_alias(InterpolatedStringPart::class, Scalar\EncapsedStringPart::class); - $attributes Additional attributes - */ - public function __construct(array $types, array $attributes = []) - { - $this->attributes = $attributes; - $this->types = $types; - } - public function getSubNodeNames(): array - { - return ['types']; - } - public function getType(): string - { - return 'IntersectionType'; - } -} - */ - public ?array $conds; - /** @var Node\Expr */ - public Expr $body; - /** - * @param null|list $conds - */ - public function __construct(?array $conds, Node\Expr $body, array $attributes = []) - { - $this->conds = $conds; - $this->body = $body; - $this->attributes = $attributes; - } - public function getSubNodeNames(): array - { - return ['conds', 'body']; - } - public function getType(): string - { - return 'MatchArm'; - } -} - */ - private static array $specialClassNames = ['self' => \true, 'parent' => \true, 'static' => \true]; - /** - * Constructs a name node. - * - * @param string|string[]|self $name Name as string, part array or Name instance (copy ctor) - * @param array $attributes Additional attributes - */ - final public function __construct($name, array $attributes = []) - { - $this->attributes = $attributes; - $this->name = self::prepareName($name); - } - public function getSubNodeNames(): array - { - return ['name']; - } - /** - * Get parts of name (split by the namespace separator). - * - * @psalm-return non-empty-list - * @return string[] Parts of name - */ - public function getParts(): array - { - return \explode('\\', $this->name); - } - /** - * Gets the first part of the name, i.e. everything before the first namespace separator. - * - * @return string First part of the name - */ - public function getFirst(): string - { - if (\false !== $pos = \strpos($this->name, '\\')) { - return \substr($this->name, 0, $pos); - } - return $this->name; - } - /** - * Gets the last part of the name, i.e. everything after the last namespace separator. - * - * @return string Last part of the name - */ - public function getLast(): string - { - if (\false !== $pos = \strrpos($this->name, '\\')) { - return \substr($this->name, $pos + 1); - } - return $this->name; - } - /** - * Checks whether the name is unqualified. (E.g. Name) - * - * @return bool Whether the name is unqualified - */ - public function isUnqualified(): bool - { - return \false === \strpos($this->name, '\\'); - } - /** - * Checks whether the name is qualified. (E.g. Name\Name) - * - * @return bool Whether the name is qualified - */ - public function isQualified(): bool - { - return \false !== \strpos($this->name, '\\'); - } - /** - * Checks whether the name is fully qualified. (E.g. \Name) - * - * @return bool Whether the name is fully qualified - */ - public function isFullyQualified(): bool - { - return \false; - } - /** - * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name) - * - * @return bool Whether the name is relative - */ - public function isRelative(): bool - { - return \false; - } - /** - * Returns a string representation of the name itself, without taking the name type into - * account (e.g., not including a leading backslash for fully qualified names). - * - * @psalm-return non-empty-string - * @return string String representation - */ - public function toString(): string - { - return $this->name; - } - /** - * Returns a string representation of the name as it would occur in code (e.g., including - * leading backslash for fully qualified names. - * - * @psalm-return non-empty-string - * @return string String representation - */ - public function toCodeString(): string - { - return $this->toString(); - } - /** - * Returns lowercased string representation of the name, without taking the name type into - * account (e.g., no leading backslash for fully qualified names). - * - * @psalm-return non-empty-string&lowercase-string - * @return string Lowercased string representation - */ - public function toLowerString(): string - { - return strtolower($this->name); - } - /** - * Checks whether the identifier is a special class name (self, parent or static). - * - * @return bool Whether identifier is a special class name - */ - public function isSpecialClassName(): bool - { - return isset(self::$specialClassNames[strtolower($this->name)]); - } - /** - * Returns a string representation of the name by imploding the namespace parts with the - * namespace separator. - * - * @psalm-return non-empty-string - * @return string String representation - */ - public function __toString(): string - { - return $this->name; - } - /** - * Gets a slice of a name (similar to array_slice). - * - * This method returns a new instance of the same type as the original and with the same - * attributes. - * - * If the slice is empty, null is returned. The null value will be correctly handled in - * concatenations using concat(). - * - * Offset and length have the same meaning as in array_slice(). - * - * @param int $offset Offset to start the slice at (may be negative) - * @param int|null $length Length of the slice (may be negative) - * - * @return static|null Sliced name - */ - public function slice(int $offset, ?int $length = null) - { - if ($offset === 1 && $length === null) { - // Short-circuit the common case. - if (\false !== $pos = \strpos($this->name, '\\')) { - return new static(\substr($this->name, $pos + 1)); - } - return null; - } - $parts = \explode('\\', $this->name); - $numParts = \count($parts); - $realOffset = $offset < 0 ? $offset + $numParts : $offset; - if ($realOffset < 0 || $realOffset > $numParts) { - throw new \OutOfBoundsException(sprintf('Offset %d is out of bounds', $offset)); - } - if (null === $length) { - $realLength = $numParts - $realOffset; - } else { - $realLength = $length < 0 ? $length + $numParts - $realOffset : $length; - if ($realLength < 0 || $realLength > $numParts - $realOffset) { - throw new \OutOfBoundsException(sprintf('Length %d is out of bounds', $length)); - } - } - if ($realLength === 0) { - // Empty slice is represented as null - return null; - } - return new static(array_slice($parts, $realOffset, $realLength), $this->attributes); - } - /** - * Concatenate two names, yielding a new Name instance. - * - * The type of the generated instance depends on which class this method is called on, for - * example Name\FullyQualified::concat() will yield a Name\FullyQualified instance. - * - * If one of the arguments is null, a new instance of the other name will be returned. If both - * arguments are null, null will be returned. As such, writing - * Name::concat($namespace, $shortName) - * where $namespace is a Name node or null will work as expected. - * - * @param string|string[]|self|null $name1 The first name - * @param string|string[]|self|null $name2 The second name - * @param array $attributes Attributes to assign to concatenated name - * - * @return static|null Concatenated name - */ - public static function concat($name1, $name2, array $attributes = []) - { - if (null === $name1 && null === $name2) { - return null; - } - if (null === $name1) { - return new static($name2, $attributes); - } - if (null === $name2) { - return new static($name1, $attributes); - } else { - return new static(self::prepareName($name1) . '\\' . self::prepareName($name2), $attributes); - } - } - /** - * Prepares a (string, array or Name node) name for use in name changing methods by converting - * it to a string. - * - * @param string|string[]|self $name Name to prepare - * - * @psalm-return non-empty-string - * @return string Prepared name - */ - private static function prepareName($name): string - { - if (\is_string($name)) { - if ('' === $name) { - throw new \InvalidArgumentException('Name cannot be empty'); - } - return $name; - } - if (\is_array($name)) { - if (empty($name)) { - throw new \InvalidArgumentException('Name cannot be empty'); - } - return implode('\\', $name); - } - if ($name instanceof self) { - return $name->name; - } - throw new \InvalidArgumentException('Expected string, array of parts or Name instance'); - } - public function getType(): string - { - return 'Name'; - } -} -toString(); - } - public function getType(): string - { - return 'Name_FullyQualified'; - } -} -toString(); - } - public function getType(): string - { - return 'Name_Relative'; - } -} - $attributes Additional attributes - */ - public function __construct(Node $type, array $attributes = []) - { - $this->attributes = $attributes; - $this->type = $type; - } - public function getSubNodeNames(): array - { - return ['type']; - } - public function getType(): string - { - return 'NullableType'; - } -} - $attributes Additional attributes - * @param int $flags Optional visibility flags - * @param list $attrGroups PHP attribute groups - * @param PropertyHook[] $hooks Property hooks for promoted properties - */ - public function __construct(Expr $var, ?Expr $default = null, ?Node $type = null, bool $byRef = \false, bool $variadic = \false, array $attributes = [], int $flags = 0, array $attrGroups = [], array $hooks = []) - { - $this->attributes = $attributes; - $this->type = $type; - $this->byRef = $byRef; - $this->variadic = $variadic; - $this->var = $var; - $this->default = $default; - $this->flags = $flags; - $this->attrGroups = $attrGroups; - $this->hooks = $hooks; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'flags', 'type', 'byRef', 'variadic', 'var', 'default', 'hooks']; - } - public function getType(): string - { - return 'Param'; - } - /** - * Whether this parameter uses constructor property promotion. - */ - public function isPromoted(): bool - { - return $this->flags !== 0 || $this->hooks !== []; - } - public function isPublic(): bool - { - $public = (bool) ($this->flags & Modifiers::PUBLIC); - if ($public) { - return \true; - } - if ($this->hooks === []) { - return \false; - } - return ($this->flags & Modifiers::VISIBILITY_MASK) === 0; - } - public function isProtected(): bool - { - return (bool) ($this->flags & Modifiers::PROTECTED); - } - public function isPrivate(): bool - { - return (bool) ($this->flags & Modifiers::PRIVATE); - } - public function isReadonly(): bool - { - return (bool) ($this->flags & Modifiers::READONLY); - } - /** - * Whether the promoted property has explicit public(set) visibility. - */ - public function isPublicSet(): bool - { - return (bool) ($this->flags & Modifiers::PUBLIC_SET); - } - /** - * Whether the promoted property has explicit protected(set) visibility. - */ - public function isProtectedSet(): bool - { - return (bool) ($this->flags & Modifiers::PROTECTED_SET); - } - /** - * Whether the promoted property has explicit private(set) visibility. - */ - public function isPrivateSet(): bool - { - return (bool) ($this->flags & Modifiers::PRIVATE_SET); - } -} - 0 : Flags - * 'byRef' => false : Whether hook returns by reference - * 'params' => array(): Parameters - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, $body, array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->body = $body; - $this->flags = $subNodes['flags'] ?? 0; - $this->byRef = $subNodes['byRef'] ?? \false; - $this->params = $subNodes['params'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - public function returnsByRef(): bool - { - return $this->byRef; - } - public function getParams(): array - { - return $this->params; - } - public function getReturnType() - { - return null; - } - /** - * Whether the property hook is final. - */ - public function isFinal(): bool - { - return (bool) ($this->flags & Modifiers::FINAL); - } - public function getStmts(): ?array - { - if ($this->body instanceof Expr) { - $name = $this->name->toLowerString(); - if ($name === 'get') { - return [new Return_($this->body)]; - } - if ($name === 'set') { - if (!$this->hasAttribute('propertyName')) { - throw new \LogicException('Can only use getStmts() on a "set" hook if the "propertyName" attribute is set'); - } - $propName = $this->getAttribute('propertyName'); - $prop = new PropertyFetch(new Variable('this'), (string) $propName); - return [new Expression(new Assign($prop, $this->body))]; - } - throw new \LogicException('Unknown property hook "' . $name . '"'); - } - return $this->body; - } - public function getAttrGroups(): array - { - return $this->attrGroups; - } - public function getType(): string - { - return 'PropertyHook'; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'body']; - } -} - $attributes Additional attributes - */ - public function __construct($name, ?Node\Expr $default = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name; - $this->default = $default; - } - public function getSubNodeNames(): array - { - return ['name', 'default']; - } - public function getType(): string - { - return 'PropertyItem'; - } -} -// @deprecated compatibility alias -class_alias(PropertyItem::class, Stmt\PropertyProperty::class); - $attributes Additional attributes - */ - public function __construct(float $value, array $attributes = []) - { - $this->attributes = $attributes; - $this->value = $value; - } - public function getSubNodeNames(): array - { - return ['value']; - } - /** - * @param mixed[] $attributes - */ - public static function fromString(string $str, array $attributes = []): Float_ - { - $attributes['rawValue'] = $str; - $float = self::parse($str); - return new Float_($float, $attributes); - } - /** - * @internal - * - * Parses a DNUMBER token like PHP would. - * - * @param string $str A string number - * - * @return float The parsed number - */ - public static function parse(string $str): float - { - $str = str_replace('_', '', $str); - // Check whether this is one of the special integer notations. - if ('0' === $str[0]) { - // hex - if ('x' === $str[1] || 'X' === $str[1]) { - return hexdec($str); - } - // bin - if ('b' === $str[1] || 'B' === $str[1]) { - return bindec($str); - } - // oct, but only if the string does not contain any of '.eE'. - if (\false === strpbrk($str, '.eE')) { - // substr($str, 0, strcspn($str, '89')) cuts the string at the first invalid digit - // (8 or 9) so that only the digits before that are used. - return octdec(substr($str, 0, strcspn($str, '89'))); - } - } - // dec - return (float) $str; - } - public function getType(): string - { - return 'Scalar_Float'; - } -} -// @deprecated compatibility alias -class_alias(Float_::class, DNumber::class); - $attributes Additional attributes - */ - public function __construct(int $value, array $attributes = []) - { - $this->attributes = $attributes; - $this->value = $value; - } - public function getSubNodeNames(): array - { - return ['value']; - } - /** - * Constructs an Int node from a string number literal. - * - * @param string $str String number literal (decimal, octal, hex or binary) - * @param array $attributes Additional attributes - * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5) - * - * @return Int_ The constructed LNumber, including kind attribute - */ - public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = \false): Int_ - { - $attributes['rawValue'] = $str; - $str = str_replace('_', '', $str); - if ('0' !== $str[0] || '0' === $str) { - $attributes['kind'] = Int_::KIND_DEC; - return new Int_((int) $str, $attributes); - } - if ('x' === $str[1] || 'X' === $str[1]) { - $attributes['kind'] = Int_::KIND_HEX; - return new Int_(hexdec($str), $attributes); - } - if ('b' === $str[1] || 'B' === $str[1]) { - $attributes['kind'] = Int_::KIND_BIN; - return new Int_(bindec($str), $attributes); - } - if (!$allowInvalidOctal && strpbrk($str, '89')) { - throw new Error('Invalid numeric literal', $attributes); - } - // Strip optional explicit octal prefix. - if ('o' === $str[1] || 'O' === $str[1]) { - $str = substr($str, 2); - } - // use intval instead of octdec to get proper cutting behavior with malformed numbers - $attributes['kind'] = Int_::KIND_OCT; - return new Int_(intval($str, 8), $attributes); - } - public function getType(): string - { - return 'Scalar_Int'; - } -} -// @deprecated compatibility alias -class_alias(Int_::class, LNumber::class); - $attributes Additional attributes - */ - public function __construct(array $parts, array $attributes = []) - { - $this->attributes = $attributes; - $this->parts = $parts; - } - public function getSubNodeNames(): array - { - return ['parts']; - } - public function getType(): string - { - return 'Scalar_InterpolatedString'; - } -} -// @deprecated compatibility alias -class_alias(InterpolatedString::class, Encapsed::class); - $attributes Additional attributes - */ - public function __construct(array $attributes = []) - { - $this->attributes = $attributes; - } - public function getSubNodeNames(): array - { - return []; - } - /** - * Get name of magic constant. - * - * @return string Name of magic constant - */ - abstract public function getName(): string; -} - Escaped character to its decoded value */ - protected static array $replacements = ['\\' => '\\', '$' => '$', 'n' => "\n", 'r' => "\r", 't' => "\t", 'f' => "\f", 'v' => "\v", 'e' => "\x1b"]; - /** - * Constructs a string scalar node. - * - * @param string $value Value of the string - * @param array $attributes Additional attributes - */ - public function __construct(string $value, array $attributes = []) - { - $this->attributes = $attributes; - $this->value = $value; - } - public function getSubNodeNames(): array - { - return ['value']; - } - /** - * @param array $attributes - * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes - */ - public static function fromString(string $str, array $attributes = [], bool $parseUnicodeEscape = \true): self - { - $attributes['kind'] = $str[0] === "'" || $str[1] === "'" && ($str[0] === 'b' || $str[0] === 'B') ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED; - $attributes['rawValue'] = $str; - $string = self::parse($str, $parseUnicodeEscape); - return new self($string, $attributes); - } - /** - * @internal - * - * Parses a string token. - * - * @param string $str String token content - * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes - * - * @return string The parsed string - */ - public static function parse(string $str, bool $parseUnicodeEscape = \true): string - { - $bLength = 0; - if ('b' === $str[0] || 'B' === $str[0]) { - $bLength = 1; - } - if ('\'' === $str[$bLength]) { - return str_replace(['\\\\', '\\\''], ['\\', '\''], substr($str, $bLength + 1, -1)); - } else { - return self::parseEscapeSequences(substr($str, $bLength + 1, -1), '"', $parseUnicodeEscape); - } - } - /** - * @internal - * - * Parses escape sequences in strings (all string types apart from single quoted). - * - * @param string $str String without quotes - * @param null|string $quote Quote type - * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes - * - * @return string String with escape sequences parsed - */ - public static function parseEscapeSequences(string $str, ?string $quote, bool $parseUnicodeEscape = \true): string - { - if (null !== $quote) { - $str = str_replace('\\' . $quote, $quote, $str); - } - $extra = ''; - if ($parseUnicodeEscape) { - $extra = '|u\{([0-9a-fA-F]+)\}'; - } - return preg_replace_callback('~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}' . $extra . ')~', function ($matches) { - $str = $matches[1]; - if (isset(self::$replacements[$str])) { - return self::$replacements[$str]; - } - if ('x' === $str[0] || 'X' === $str[0]) { - return chr(hexdec(substr($str, 1))); - } - if ('u' === $str[0]) { - $dec = hexdec($matches[2]); - // If it overflowed to float, treat as INT_MAX, it will throw an error anyway. - return self::codePointToUtf8(\is_int($dec) ? $dec : \PHP_INT_MAX); - } else { - return chr(octdec($str)); - } - }, $str); - } - /** - * Converts a Unicode code point to its UTF-8 encoded representation. - * - * @param int $num Code point - * - * @return string UTF-8 representation of code point - */ - private static function codePointToUtf8(int $num): string - { - if ($num <= 0x7f) { - return chr($num); - } - if ($num <= 0x7ff) { - return chr(($num >> 6) + 0xc0) . chr(($num & 0x3f) + 0x80); - } - if ($num <= 0xffff) { - return chr(($num >> 12) + 0xe0) . chr(($num >> 6 & 0x3f) + 0x80) . chr(($num & 0x3f) + 0x80); - } - if ($num <= 0x1fffff) { - return chr(($num >> 18) + 0xf0) . chr(($num >> 12 & 0x3f) + 0x80) . chr(($num >> 6 & 0x3f) + 0x80) . chr(($num & 0x3f) + 0x80); - } - throw new Error('Invalid UTF-8 codepoint escape sequence: Codepoint too large'); - } - public function getType(): string - { - return 'Scalar_String'; - } -} - $attributes Additional attributes - */ - public function __construct(Expr\Variable $var, ?Node\Expr $default = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->var = $var; - $this->default = $default; - } - public function getSubNodeNames(): array - { - return ['var', 'default']; - } - public function getType(): string - { - return 'StaticVar'; - } -} -// @deprecated compatibility alias -class_alias(StaticVar::class, Stmt\StaticVar::class); - $attributes Additional attributes - */ - public function __construct(array $stmts, array $attributes = []) - { - $this->attributes = $attributes; - $this->stmts = $stmts; - } - public function getType(): string - { - return 'Stmt_Block'; - } - public function getSubNodeNames(): array - { - return ['stmts']; - } -} - $attributes Additional attributes - */ - public function __construct(?Node\Expr $num = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->num = $num; - } - public function getSubNodeNames(): array - { - return ['num']; - } - public function getType(): string - { - return 'Stmt_Break'; - } -} - $attributes Additional attributes - */ - public function __construct(?Node\Expr $cond, array $stmts = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $stmts; - } - public function getSubNodeNames(): array - { - return ['cond', 'stmts']; - } - public function getType(): string - { - return 'Stmt_Case'; - } -} - $attributes Additional attributes - */ - public function __construct(array $types, ?Expr\Variable $var = null, array $stmts = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->types = $types; - $this->var = $var; - $this->stmts = $stmts; - } - public function getSubNodeNames(): array - { - return ['types', 'var', 'stmts']; - } - public function getType(): string - { - return 'Stmt_Catch'; - } -} - $attributes Additional attributes - * @param list $attrGroups PHP attribute groups - * @param null|Node\Identifier|Node\Name|Node\ComplexType $type Type declaration - */ - public function __construct(array $consts, int $flags = 0, array $attributes = [], array $attrGroups = [], ?Node $type = null) - { - $this->attributes = $attributes; - $this->flags = $flags; - $this->consts = $consts; - $this->attrGroups = $attrGroups; - $this->type = $type; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'flags', 'type', 'consts']; - } - /** - * Whether constant is explicitly or implicitly public. - */ - public function isPublic(): bool - { - return ($this->flags & Modifiers::PUBLIC) !== 0 || ($this->flags & Modifiers::VISIBILITY_MASK) === 0; - } - /** - * Whether constant is protected. - */ - public function isProtected(): bool - { - return (bool) ($this->flags & Modifiers::PROTECTED); - } - /** - * Whether constant is private. - */ - public function isPrivate(): bool - { - return (bool) ($this->flags & Modifiers::PRIVATE); - } - /** - * Whether constant is final. - */ - public function isFinal(): bool - { - return (bool) ($this->flags & Modifiers::FINAL); - } - public function getType(): string - { - return 'Stmt_ClassConst'; - } -} -stmts as $stmt) { - if ($stmt instanceof TraitUse) { - $traitUses[] = $stmt; - } - } - return $traitUses; - } - /** - * @return ClassConst[] - */ - public function getConstants(): array - { - $constants = []; - foreach ($this->stmts as $stmt) { - if ($stmt instanceof ClassConst) { - $constants[] = $stmt; - } - } - return $constants; - } - /** - * @return Property[] - */ - public function getProperties(): array - { - $properties = []; - foreach ($this->stmts as $stmt) { - if ($stmt instanceof Property) { - $properties[] = $stmt; - } - } - return $properties; - } - /** - * Gets property with the given name defined directly in this class/interface/trait. - * - * @param string $name Name of the property - * - * @return Property|null Property node or null if the property does not exist - */ - public function getProperty(string $name): ?Property - { - foreach ($this->stmts as $stmt) { - if ($stmt instanceof Property) { - foreach ($stmt->props as $prop) { - if ($prop instanceof PropertyItem && $name === $prop->name->toString()) { - return $stmt; - } - } - } - } - return null; - } - /** - * Gets all methods defined directly in this class/interface/trait - * - * @return ClassMethod[] - */ - public function getMethods(): array - { - $methods = []; - foreach ($this->stmts as $stmt) { - if ($stmt instanceof ClassMethod) { - $methods[] = $stmt; - } - } - return $methods; - } - /** - * Gets method with the given name defined directly in this class/interface/trait. - * - * @param string $name Name of the method (compared case-insensitively) - * - * @return ClassMethod|null Method node or null if the method does not exist - */ - public function getMethod(string $name): ?ClassMethod - { - $lowerName = strtolower($name); - foreach ($this->stmts as $stmt) { - if ($stmt instanceof ClassMethod && $lowerName === $stmt->name->toLowerString()) { - return $stmt; - } - } - return null; - } -} - */ - private static array $magicNames = ['__construct' => \true, '__destruct' => \true, '__call' => \true, '__callstatic' => \true, '__get' => \true, '__set' => \true, '__isset' => \true, '__unset' => \true, '__sleep' => \true, '__wakeup' => \true, '__tostring' => \true, '__set_state' => \true, '__clone' => \true, '__invoke' => \true, '__debuginfo' => \true, '__serialize' => \true, '__unserialize' => \true]; - /** - * Constructs a class method node. - * - * @param string|Node\Identifier $name Name - * @param array{ - * flags?: int, - * byRef?: bool, - * params?: Node\Param[], - * returnType?: null|Node\Identifier|Node\Name|Node\ComplexType, - * stmts?: Node\Stmt[]|null, - * attrGroups?: Node\AttributeGroup[], - * } $subNodes Array of the following optional subnodes: - * 'flags => 0 : Flags - * 'byRef' => false : Whether to return by reference - * 'params' => array() : Parameters - * 'returnType' => null : Return type - * 'stmts' => array() : Statements - * 'attrGroups' => array() : PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0; - $this->byRef = $subNodes['byRef'] ?? \false; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->params = $subNodes['params'] ?? []; - $this->returnType = $subNodes['returnType'] ?? null; - $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'returnType', 'stmts']; - } - public function returnsByRef(): bool - { - return $this->byRef; - } - public function getParams(): array - { - return $this->params; - } - public function getReturnType() - { - return $this->returnType; - } - public function getStmts(): ?array - { - return $this->stmts; - } - public function getAttrGroups(): array - { - return $this->attrGroups; - } - /** - * Whether the method is explicitly or implicitly public. - */ - public function isPublic(): bool - { - return ($this->flags & Modifiers::PUBLIC) !== 0 || ($this->flags & Modifiers::VISIBILITY_MASK) === 0; - } - /** - * Whether the method is protected. - */ - public function isProtected(): bool - { - return (bool) ($this->flags & Modifiers::PROTECTED); - } - /** - * Whether the method is private. - */ - public function isPrivate(): bool - { - return (bool) ($this->flags & Modifiers::PRIVATE); - } - /** - * Whether the method is abstract. - */ - public function isAbstract(): bool - { - return (bool) ($this->flags & Modifiers::ABSTRACT); - } - /** - * Whether the method is final. - */ - public function isFinal(): bool - { - return (bool) ($this->flags & Modifiers::FINAL); - } - /** - * Whether the method is static. - */ - public function isStatic(): bool - { - return (bool) ($this->flags & Modifiers::STATIC); - } - /** - * Whether the method is magic. - */ - public function isMagic(): bool - { - return isset(self::$magicNames[$this->name->toLowerString()]); - } - public function getType(): string - { - return 'Stmt_ClassMethod'; - } -} - 0 : Flags - * 'extends' => null : Name of extended class - * 'implements' => array(): Names of implemented interfaces - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->extends = $subNodes['extends'] ?? null; - $this->implements = $subNodes['implements'] ?? []; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'flags', 'name', 'extends', 'implements', 'stmts']; - } - /** - * Whether the class is explicitly abstract. - */ - public function isAbstract(): bool - { - return (bool) ($this->flags & Modifiers::ABSTRACT); - } - /** - * Whether the class is final. - */ - public function isFinal(): bool - { - return (bool) ($this->flags & Modifiers::FINAL); - } - public function isReadonly(): bool - { - return (bool) ($this->flags & Modifiers::READONLY); - } - /** - * Whether the class is anonymous. - */ - public function isAnonymous(): bool - { - return null === $this->name; - } - public function getType(): string - { - return 'Stmt_Class'; - } -} - $attributes Additional attributes - */ - public function __construct(array $consts, array $attributes = []) - { - $this->attributes = $attributes; - $this->consts = $consts; - } - public function getSubNodeNames(): array - { - return ['consts']; - } - public function getType(): string - { - return 'Stmt_Const'; - } -} - $attributes Additional attributes - */ - public function __construct(?Node\Expr $num = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->num = $num; - } - public function getSubNodeNames(): array - { - return ['num']; - } - public function getType(): string - { - return 'Stmt_Continue'; - } -} - $attributes Additional attributes - */ - public function __construct(array $declares, ?array $stmts = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->declares = $declares; - $this->stmts = $stmts; - } - public function getSubNodeNames(): array - { - return ['declares', 'stmts']; - } - public function getType(): string - { - return 'Stmt_Declare'; - } -} - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $stmts; - } - public function getSubNodeNames(): array - { - return ['stmts', 'cond']; - } - public function getType(): string - { - return 'Stmt_Do'; - } -} - $attributes Additional attributes - */ - public function __construct(array $exprs, array $attributes = []) - { - $this->attributes = $attributes; - $this->exprs = $exprs; - } - public function getSubNodeNames(): array - { - return ['exprs']; - } - public function getType(): string - { - return 'Stmt_Echo'; - } -} - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $stmts; - } - public function getSubNodeNames(): array - { - return ['cond', 'stmts']; - } - public function getType(): string - { - return 'Stmt_ElseIf'; - } -} - $attributes Additional attributes - */ - public function __construct(array $stmts = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->stmts = $stmts; - } - public function getSubNodeNames(): array - { - return ['stmts']; - } - public function getType(): string - { - return 'Stmt_Else'; - } -} - $attrGroups PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, ?Node\Expr $expr = null, array $attrGroups = [], array $attributes = []) - { - parent::__construct($attributes); - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->expr = $expr; - $this->attrGroups = $attrGroups; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'name', 'expr']; - } - public function getType(): string - { - return 'Stmt_EnumCase'; - } -} - null : Scalar type - * 'implements' => array() : Names of implemented interfaces - * 'stmts' => array() : Statements - * 'attrGroups' => array() : PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) - { - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->scalarType = $subNodes['scalarType'] ?? null; - $this->implements = $subNodes['implements'] ?? []; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - parent::__construct($attributes); - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'name', 'scalarType', 'implements', 'stmts']; - } - public function getType(): string - { - return 'Stmt_Enum'; - } -} - $attributes Additional attributes - */ - public function __construct(Node\Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Stmt_Expression'; - } -} - $attributes Additional attributes - */ - public function __construct(array $stmts = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->stmts = $stmts; - } - public function getSubNodeNames(): array - { - return ['stmts']; - } - public function getType(): string - { - return 'Stmt_Finally'; - } -} - array(): Init expressions - * 'cond' => array(): Loop conditions - * 'loop' => array(): Loop expressions - * 'stmts' => array(): Statements - * @param array $attributes Additional attributes - */ - public function __construct(array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->init = $subNodes['init'] ?? []; - $this->cond = $subNodes['cond'] ?? []; - $this->loop = $subNodes['loop'] ?? []; - $this->stmts = $subNodes['stmts'] ?? []; - } - public function getSubNodeNames(): array - { - return ['init', 'cond', 'loop', 'stmts']; - } - public function getType(): string - { - return 'Stmt_For'; - } -} - null : Variable to assign key to - * 'byRef' => false : Whether to assign value by reference - * 'stmts' => array(): Statements - * @param array $attributes Additional attributes - */ - public function __construct(Node\Expr $expr, Node\Expr $valueVar, array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - $this->keyVar = $subNodes['keyVar'] ?? null; - $this->byRef = $subNodes['byRef'] ?? \false; - $this->valueVar = $valueVar; - $this->stmts = $subNodes['stmts'] ?? []; - } - public function getSubNodeNames(): array - { - return ['expr', 'keyVar', 'byRef', 'valueVar', 'stmts']; - } - public function getType(): string - { - return 'Stmt_Foreach'; - } -} - false : Whether to return by reference - * 'params' => array(): Parameters - * 'returnType' => null : Return type - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->byRef = $subNodes['byRef'] ?? \false; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->params = $subNodes['params'] ?? []; - $this->returnType = $subNodes['returnType'] ?? null; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'byRef', 'name', 'params', 'returnType', 'stmts']; - } - public function returnsByRef(): bool - { - return $this->byRef; - } - public function getParams(): array - { - return $this->params; - } - public function getReturnType() - { - return $this->returnType; - } - public function getAttrGroups(): array - { - return $this->attrGroups; - } - /** @return Node\Stmt[] */ - public function getStmts(): array - { - return $this->stmts; - } - public function getType(): string - { - return 'Stmt_Function'; - } -} - $attributes Additional attributes - */ - public function __construct(array $vars, array $attributes = []) - { - $this->attributes = $attributes; - $this->vars = $vars; - } - public function getSubNodeNames(): array - { - return ['vars']; - } - public function getType(): string - { - return 'Stmt_Global'; - } -} - $attributes Additional attributes - */ - public function __construct($name, array $attributes = []) - { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - public function getSubNodeNames(): array - { - return ['name']; - } - public function getType(): string - { - return 'Stmt_Goto'; - } -} - $attributes Additional attributes - */ - public function __construct(Name $prefix, array $uses, int $type = Use_::TYPE_NORMAL, array $attributes = []) - { - $this->attributes = $attributes; - $this->type = $type; - $this->prefix = $prefix; - $this->uses = $uses; - } - public function getSubNodeNames(): array - { - return ['type', 'prefix', 'uses']; - } - public function getType(): string - { - return 'Stmt_GroupUse'; - } -} - $attributes Additional attributes - */ - public function __construct(string $remaining, array $attributes = []) - { - $this->attributes = $attributes; - $this->remaining = $remaining; - } - public function getSubNodeNames(): array - { - return ['remaining']; - } - public function getType(): string - { - return 'Stmt_HaltCompiler'; - } -} - array(): Statements - * 'elseifs' => array(): Elseif clauses - * 'else' => null : Else clause - * @param array $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $subNodes['stmts'] ?? []; - $this->elseifs = $subNodes['elseifs'] ?? []; - $this->else = $subNodes['else'] ?? null; - } - public function getSubNodeNames(): array - { - return ['cond', 'stmts', 'elseifs', 'else']; - } - public function getType(): string - { - return 'Stmt_If'; - } -} - $attributes Additional attributes - */ - public function __construct(string $value, array $attributes = []) - { - $this->attributes = $attributes; - $this->value = $value; - } - public function getSubNodeNames(): array - { - return ['value']; - } - public function getType(): string - { - return 'Stmt_InlineHTML'; - } -} - array(): Name of extended interfaces - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->extends = $subNodes['extends'] ?? []; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'name', 'extends', 'stmts']; - } - public function getType(): string - { - return 'Stmt_Interface'; - } -} - $attributes Additional attributes - */ - public function __construct($name, array $attributes = []) - { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - public function getSubNodeNames(): array - { - return ['name']; - } - public function getType(): string - { - return 'Stmt_Label'; - } -} - $attributes Additional attributes - */ - public function __construct(?Node\Name $name = null, ?array $stmts = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->name = $name; - $this->stmts = $stmts; - } - public function getSubNodeNames(): array - { - return ['name', 'stmts']; - } - public function getType(): string - { - return 'Stmt_Namespace'; - } -} - $attributes Additional attributes - * @param null|Identifier|Name|ComplexType $type Type declaration - * @param Node\AttributeGroup[] $attrGroups PHP attribute groups - * @param Node\PropertyHook[] $hooks Property hooks - */ - public function __construct(int $flags, array $props, array $attributes = [], ?Node $type = null, array $attrGroups = [], array $hooks = []) - { - $this->attributes = $attributes; - $this->flags = $flags; - $this->props = $props; - $this->type = $type; - $this->attrGroups = $attrGroups; - $this->hooks = $hooks; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'flags', 'type', 'props', 'hooks']; - } - /** - * Whether the property is explicitly or implicitly public. - */ - public function isPublic(): bool - { - return ($this->flags & Modifiers::PUBLIC) !== 0 || ($this->flags & Modifiers::VISIBILITY_MASK) === 0; - } - /** - * Whether the property is protected. - */ - public function isProtected(): bool - { - return (bool) ($this->flags & Modifiers::PROTECTED); - } - /** - * Whether the property is private. - */ - public function isPrivate(): bool - { - return (bool) ($this->flags & Modifiers::PRIVATE); - } - /** - * Whether the property is static. - */ - public function isStatic(): bool - { - return (bool) ($this->flags & Modifiers::STATIC); - } - /** - * Whether the property is readonly. - */ - public function isReadonly(): bool - { - return (bool) ($this->flags & Modifiers::READONLY); - } - /** - * Whether the property is abstract. - */ - public function isAbstract(): bool - { - return (bool) ($this->flags & Modifiers::ABSTRACT); - } - /** - * Whether the property is final. - */ - public function isFinal(): bool - { - return (bool) ($this->flags & Modifiers::FINAL); - } - /** - * Whether the property has explicit public(set) visibility. - */ - public function isPublicSet(): bool - { - return (bool) ($this->flags & Modifiers::PUBLIC_SET); - } - /** - * Whether the property has explicit protected(set) visibility. - */ - public function isProtectedSet(): bool - { - return (bool) ($this->flags & Modifiers::PROTECTED_SET); - } - /** - * Whether the property has explicit private(set) visibility. - */ - public function isPrivateSet(): bool - { - return (bool) ($this->flags & Modifiers::PRIVATE_SET); - } - public function getType(): string - { - return 'Stmt_Property'; - } -} - $attributes Additional attributes - */ - public function __construct(?Node\Expr $expr = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames(): array - { - return ['expr']; - } - public function getType(): string - { - return 'Stmt_Return'; - } -} - $attributes Additional attributes - */ - public function __construct(array $vars, array $attributes = []) - { - $this->attributes = $attributes; - $this->vars = $vars; - } - public function getSubNodeNames(): array - { - return ['vars']; - } - public function getType(): string - { - return 'Stmt_Static'; - } -} - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $cases, array $attributes = []) - { - $this->attributes = $attributes; - $this->cond = $cond; - $this->cases = $cases; - } - public function getSubNodeNames(): array - { - return ['cond', 'cases']; - } - public function getType(): string - { - return 'Stmt_Switch'; - } -} - $attributes Additional attributes - */ - public function __construct(array $traits, array $adaptations = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->traits = $traits; - $this->adaptations = $adaptations; - } - public function getSubNodeNames(): array - { - return ['traits', 'adaptations']; - } - public function getType(): string - { - return 'Stmt_TraitUse'; - } -} - $attributes Additional attributes - */ - public function __construct(?Node\Name $trait, $method, ?int $newModifier, $newName, array $attributes = []) - { - $this->attributes = $attributes; - $this->trait = $trait; - $this->method = \is_string($method) ? new Node\Identifier($method) : $method; - $this->newModifier = $newModifier; - $this->newName = \is_string($newName) ? new Node\Identifier($newName) : $newName; - } - public function getSubNodeNames(): array - { - return ['trait', 'method', 'newModifier', 'newName']; - } - public function getType(): string - { - return 'Stmt_TraitUseAdaptation_Alias'; - } -} - $attributes Additional attributes - */ - public function __construct(Node\Name $trait, $method, array $insteadof, array $attributes = []) - { - $this->attributes = $attributes; - $this->trait = $trait; - $this->method = \is_string($method) ? new Node\Identifier($method) : $method; - $this->insteadof = $insteadof; - } - public function getSubNodeNames(): array - { - return ['trait', 'method', 'insteadof']; - } - public function getType(): string - { - return 'Stmt_TraitUseAdaptation_Precedence'; - } -} - array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - public function getSubNodeNames(): array - { - return ['attrGroups', 'name', 'stmts']; - } - public function getType(): string - { - return 'Stmt_Trait'; - } -} - $attributes Additional attributes - */ - public function __construct(array $stmts, array $catches, ?Finally_ $finally = null, array $attributes = []) - { - $this->attributes = $attributes; - $this->stmts = $stmts; - $this->catches = $catches; - $this->finally = $finally; - } - public function getSubNodeNames(): array - { - return ['stmts', 'catches', 'finally']; - } - public function getType(): string - { - return 'Stmt_TryCatch'; - } -} - $attributes Additional attributes - */ - public function __construct(array $vars, array $attributes = []) - { - $this->attributes = $attributes; - $this->vars = $vars; - } - public function getSubNodeNames(): array - { - return ['vars']; - } - public function getType(): string - { - return 'Stmt_Unset'; - } -} - $attributes Additional attributes - */ - public function __construct(array $uses, int $type = self::TYPE_NORMAL, array $attributes = []) - { - $this->attributes = $attributes; - $this->type = $type; - $this->uses = $uses; - } - public function getSubNodeNames(): array - { - return ['type', 'uses']; - } - public function getType(): string - { - return 'Stmt_Use'; - } -} - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) - { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $stmts; - } - public function getSubNodeNames(): array - { - return ['cond', 'stmts']; - } - public function getType(): string - { - return 'Stmt_While'; - } -} - $attributes Additional attributes - */ - public function __construct(array $types, array $attributes = []) - { - $this->attributes = $attributes; - $this->types = $types; - } - public function getSubNodeNames(): array - { - return ['types']; - } - public function getType(): string - { - return 'UnionType'; - } -} - $attributes Additional attributes - */ - public function __construct(Node\Name $name, $alias = null, int $type = Use_::TYPE_UNKNOWN, array $attributes = []) - { - $this->attributes = $attributes; - $this->type = $type; - $this->name = $name; - $this->alias = \is_string($alias) ? new Identifier($alias) : $alias; - } - public function getSubNodeNames(): array - { - return ['type', 'name', 'alias']; - } - /** - * Get alias. If not explicitly given this is the last component of the used name. - */ - public function getAlias(): Identifier - { - if (null !== $this->alias) { - return $this->alias; - } - return new Identifier($this->name->getLast()); - } - public function getType(): string - { - return 'UseItem'; - } -} -// @deprecated compatibility alias -class_alias(UseItem::class, Stmt\UseUse::class); - $attributes Additional attributes - */ - public function __construct(array $attributes = []) - { - $this->attributes = $attributes; - } - public function getType(): string - { - return 'VariadicPlaceholder'; - } - public function getSubNodeNames(): array - { - return []; - } -} - Attributes */ - protected array $attributes; - /** - * Creates a Node. - * - * @param array $attributes Array of attributes - */ - public function __construct(array $attributes = []) - { - $this->attributes = $attributes; - } - /** - * Gets line the node started in (alias of getStartLine). - * - * @return int Start line (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getLine(): int - { - return $this->attributes['startLine'] ?? -1; - } - /** - * Gets line the node started in. - * - * Requires the 'startLine' attribute to be enabled in the lexer (enabled by default). - * - * @return int Start line (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getStartLine(): int - { - return $this->attributes['startLine'] ?? -1; - } - /** - * Gets the line the node ended in. - * - * Requires the 'endLine' attribute to be enabled in the lexer (enabled by default). - * - * @return int End line (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getEndLine(): int - { - return $this->attributes['endLine'] ?? -1; - } - /** - * Gets the token offset of the first token that is part of this node. - * - * The offset is an index into the array returned by Lexer::getTokens(). - * - * Requires the 'startTokenPos' attribute to be enabled in the lexer (DISABLED by default). - * - * @return int Token start position (or -1 if not available) - */ - public function getStartTokenPos(): int - { - return $this->attributes['startTokenPos'] ?? -1; - } - /** - * Gets the token offset of the last token that is part of this node. - * - * The offset is an index into the array returned by Lexer::getTokens(). - * - * Requires the 'endTokenPos' attribute to be enabled in the lexer (DISABLED by default). - * - * @return int Token end position (or -1 if not available) - */ - public function getEndTokenPos(): int - { - return $this->attributes['endTokenPos'] ?? -1; - } - /** - * Gets the file offset of the first character that is part of this node. - * - * Requires the 'startFilePos' attribute to be enabled in the lexer (DISABLED by default). - * - * @return int File start position (or -1 if not available) - */ - public function getStartFilePos(): int - { - return $this->attributes['startFilePos'] ?? -1; - } - /** - * Gets the file offset of the last character that is part of this node. - * - * Requires the 'endFilePos' attribute to be enabled in the lexer (DISABLED by default). - * - * @return int File end position (or -1 if not available) - */ - public function getEndFilePos(): int - { - return $this->attributes['endFilePos'] ?? -1; - } - /** - * Gets all comments directly preceding this node. - * - * The comments are also available through the "comments" attribute. - * - * @return Comment[] - */ - public function getComments(): array - { - return $this->attributes['comments'] ?? []; - } - /** - * Gets the doc comment of the node. - * - * @return null|Comment\Doc Doc comment object or null - */ - public function getDocComment(): ?Comment\Doc - { - $comments = $this->getComments(); - for ($i = count($comments) - 1; $i >= 0; $i--) { - $comment = $comments[$i]; - if ($comment instanceof Comment\Doc) { - return $comment; - } - } - return null; - } - /** - * Sets the doc comment of the node. - * - * This will either replace an existing doc comment or add it to the comments array. - * - * @param Comment\Doc $docComment Doc comment to set - */ - public function setDocComment(Comment\Doc $docComment): void - { - $comments = $this->getComments(); - for ($i = count($comments) - 1; $i >= 0; $i--) { - if ($comments[$i] instanceof Comment\Doc) { - // Replace existing doc comment. - $comments[$i] = $docComment; - $this->setAttribute('comments', $comments); - return; - } - } - // Append new doc comment. - $comments[] = $docComment; - $this->setAttribute('comments', $comments); - } - public function setAttribute(string $key, $value): void - { - $this->attributes[$key] = $value; - } - public function hasAttribute(string $key): bool - { - return array_key_exists($key, $this->attributes); - } - public function getAttribute(string $key, $default = null) - { - if (array_key_exists($key, $this->attributes)) { - return $this->attributes[$key]; - } - return $default; - } - public function getAttributes(): array - { - return $this->attributes; - } - public function setAttributes(array $attributes): void - { - $this->attributes = $attributes; - } - /** - * @return array - */ - public function jsonSerialize(): array - { - return ['nodeType' => $this->getType()] + get_object_vars($this); - } -} - \true, 'startLine' => \true, 'endLine' => \true, 'startFilePos' => \true, 'endFilePos' => \true, 'startTokenPos' => \true, 'endTokenPos' => \true]; - /** - * Constructs a NodeDumper. - * - * Supported options: - * * bool dumpComments: Whether comments should be dumped. - * * bool dumpPositions: Whether line/offset information should be dumped. To dump offset - * information, the code needs to be passed to dump(). - * * bool dumpOtherAttributes: Whether non-comment, non-position attributes should be dumped. - * - * @param array $options Options (see description) - */ - public function __construct(array $options = []) - { - $this->dumpComments = !empty($options['dumpComments']); - $this->dumpPositions = !empty($options['dumpPositions']); - $this->dumpOtherAttributes = !empty($options['dumpOtherAttributes']); - } - /** - * Dumps a node or array. - * - * @param array|Node $node Node or array to dump - * @param string|null $code Code corresponding to dumped AST. This only needs to be passed if - * the dumpPositions option is enabled and the dumping of node offsets - * is desired. - * - * @return string Dumped value - */ - public function dump($node, ?string $code = null): string - { - $this->code = $code; - $this->res = ''; - $this->nl = "\n"; - $this->dumpRecursive($node, \false); - return $this->res; - } - /** @param mixed $node */ - protected function dumpRecursive($node, bool $indent = \true): void - { - if ($indent) { - $this->nl .= " "; - } - if ($node instanceof Node) { - $this->res .= $node->getType(); - if ($this->dumpPositions && null !== $p = $this->dumpPosition($node)) { - $this->res .= $p; - } - $this->res .= '('; - foreach ($node->getSubNodeNames() as $key) { - $this->res .= "{$this->nl} " . $key . ': '; - $value = $node->{$key}; - if (\is_int($value)) { - if ('flags' === $key || 'newModifier' === $key) { - $this->res .= $this->dumpFlags($value); - continue; - } - if ('type' === $key && $node instanceof Include_) { - $this->res .= $this->dumpIncludeType($value); - continue; - } - if ('type' === $key && ($node instanceof Use_ || $node instanceof UseItem || $node instanceof GroupUse)) { - $this->res .= $this->dumpUseType($value); - continue; - } - } - $this->dumpRecursive($value); - } - if ($this->dumpComments && $comments = $node->getComments()) { - $this->res .= "{$this->nl} comments: "; - $this->dumpRecursive($comments); - } - if ($this->dumpOtherAttributes) { - foreach ($node->getAttributes() as $key => $value) { - if (isset(self::IGNORE_ATTRIBUTES[$key])) { - continue; - } - $this->res .= "{$this->nl} {$key}: "; - if (\is_int($value)) { - if ('kind' === $key) { - if ($node instanceof Int_) { - $this->res .= $this->dumpIntKind($value); - continue; - } - if ($node instanceof String_ || $node instanceof InterpolatedString) { - $this->res .= $this->dumpStringKind($value); - continue; - } - if ($node instanceof Array_) { - $this->res .= $this->dumpArrayKind($value); - continue; - } - if ($node instanceof List_) { - $this->res .= $this->dumpListKind($value); - continue; - } - } - } - $this->dumpRecursive($value); - } - } - $this->res .= "{$this->nl})"; - } elseif (\is_array($node)) { - $this->res .= 'array('; - foreach ($node as $key => $value) { - $this->res .= "{$this->nl} " . $key . ': '; - $this->dumpRecursive($value); - } - $this->res .= "{$this->nl})"; - } elseif ($node instanceof Comment) { - $this->res .= \str_replace("\n", $this->nl, $node->getReformattedText()); - } elseif (\is_string($node)) { - $this->res .= \str_replace("\n", $this->nl, (string) $node); - } elseif (\is_int($node) || \is_float($node)) { - $this->res .= $node; - } elseif (null === $node) { - $this->res .= 'null'; - } elseif (\false === $node) { - $this->res .= 'false'; - } elseif (\true === $node) { - $this->res .= 'true'; - } else { - throw new \InvalidArgumentException('Can only dump nodes and arrays.'); - } - if ($indent) { - $this->nl = \substr($this->nl, 0, -4); - } - } - protected function dumpFlags(int $flags): string - { - $strs = []; - if ($flags & Modifiers::PUBLIC) { - $strs[] = 'PUBLIC'; - } - if ($flags & Modifiers::PROTECTED) { - $strs[] = 'PROTECTED'; - } - if ($flags & Modifiers::PRIVATE) { - $strs[] = 'PRIVATE'; - } - if ($flags & Modifiers::ABSTRACT) { - $strs[] = 'ABSTRACT'; - } - if ($flags & Modifiers::STATIC) { - $strs[] = 'STATIC'; - } - if ($flags & Modifiers::FINAL) { - $strs[] = 'FINAL'; - } - if ($flags & Modifiers::READONLY) { - $strs[] = 'READONLY'; - } - if ($flags & Modifiers::PUBLIC_SET) { - $strs[] = 'PUBLIC_SET'; - } - if ($flags & Modifiers::PROTECTED_SET) { - $strs[] = 'PROTECTED_SET'; - } - if ($flags & Modifiers::PRIVATE_SET) { - $strs[] = 'PRIVATE_SET'; - } - if ($strs) { - return implode(' | ', $strs) . ' (' . $flags . ')'; - } else { - return (string) $flags; - } - } - /** @param array $map */ - private function dumpEnum(int $value, array $map): string - { - if (!isset($map[$value])) { - return (string) $value; - } - return $map[$value] . ' (' . $value . ')'; - } - private function dumpIncludeType(int $type): string - { - return $this->dumpEnum($type, [Include_::TYPE_INCLUDE => 'TYPE_INCLUDE', Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE', Include_::TYPE_REQUIRE => 'TYPE_REQUIRE', Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE']); - } - private function dumpUseType(int $type): string - { - return $this->dumpEnum($type, [Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN', Use_::TYPE_NORMAL => 'TYPE_NORMAL', Use_::TYPE_FUNCTION => 'TYPE_FUNCTION', Use_::TYPE_CONSTANT => 'TYPE_CONSTANT']); - } - private function dumpIntKind(int $kind): string - { - return $this->dumpEnum($kind, [Int_::KIND_BIN => 'KIND_BIN', Int_::KIND_OCT => 'KIND_OCT', Int_::KIND_DEC => 'KIND_DEC', Int_::KIND_HEX => 'KIND_HEX']); - } - private function dumpStringKind(int $kind): string - { - return $this->dumpEnum($kind, [String_::KIND_SINGLE_QUOTED => 'KIND_SINGLE_QUOTED', String_::KIND_DOUBLE_QUOTED => 'KIND_DOUBLE_QUOTED', String_::KIND_HEREDOC => 'KIND_HEREDOC', String_::KIND_NOWDOC => 'KIND_NOWDOC']); - } - private function dumpArrayKind(int $kind): string - { - return $this->dumpEnum($kind, [Array_::KIND_LONG => 'KIND_LONG', Array_::KIND_SHORT => 'KIND_SHORT']); - } - private function dumpListKind(int $kind): string - { - return $this->dumpEnum($kind, [List_::KIND_LIST => 'KIND_LIST', List_::KIND_ARRAY => 'KIND_ARRAY']); - } - /** - * Dump node position, if possible. - * - * @param Node $node Node for which to dump position - * - * @return string|null Dump of position, or null if position information not available - */ - protected function dumpPosition(Node $node): ?string - { - if (!$node->hasAttribute('startLine') || !$node->hasAttribute('endLine')) { - return null; - } - $start = $node->getStartLine(); - $end = $node->getEndLine(); - if ($node->hasAttribute('startFilePos') && $node->hasAttribute('endFilePos') && null !== $this->code) { - $start .= ':' . $this->toColumn($this->code, $node->getStartFilePos()); - $end .= ':' . $this->toColumn($this->code, $node->getEndFilePos()); - } - return "[{$start} - {$end}]"; - } - // Copied from Error class - private function toColumn(string $code, int $pos): int - { - if ($pos > strlen($code)) { - throw new \RuntimeException('Invalid position information'); - } - $lineStartPos = strrpos($code, "\n", $pos - strlen($code)); - if (\false === $lineStartPos) { - $lineStartPos = -1; - } - return $pos - $lineStartPos; - } -} -traverse($nodes); - return $visitor->getFoundNodes(); - } - /** - * Find all nodes that are instances of a certain class. - * @template TNode as Node - * - * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param class-string $class Class name - * - * @return TNode[] Found nodes (all instances of $class) - */ - public function findInstanceOf($nodes, string $class): array - { - return $this->find($nodes, function ($node) use ($class) { - return $node instanceof $class; - }); - } - /** - * Find first node satisfying a filter callback. - * - * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param callable $filter Filter callback: function(Node $node) : bool - * - * @return null|Node Found node (or null if none found) - */ - public function findFirst($nodes, callable $filter): ?Node - { - if ($nodes === []) { - return null; - } - if (!is_array($nodes)) { - $nodes = [$nodes]; - } - $visitor = new FirstFindingVisitor($filter); - $traverser = new NodeTraverser($visitor); - $traverser->traverse($nodes); - return $visitor->getFoundNode(); - } - /** - * Find first node that is an instance of a certain class. - * - * @template TNode as Node - * - * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param class-string $class Class name - * - * @return null|TNode Found node, which is an instance of $class (or null if none found) - */ - public function findFirstInstanceOf($nodes, string $class): ?Node - { - return $this->findFirst($nodes, function ($node) use ($class) { - return $node instanceof $class; - }); - } -} - Visitors */ - protected array $visitors = []; - /** @var bool Whether traversal should be stopped */ - protected bool $stopTraversal; - /** - * Create a traverser with the given visitors. - * - * @param NodeVisitor ...$visitors Node visitors - */ - public function __construct(NodeVisitor ...$visitors) - { - $this->visitors = $visitors; - } - /** - * Adds a visitor. - * - * @param NodeVisitor $visitor Visitor to add - */ - public function addVisitor(NodeVisitor $visitor): void - { - $this->visitors[] = $visitor; - } - /** - * Removes an added visitor. - */ - public function removeVisitor(NodeVisitor $visitor): void - { - $index = array_search($visitor, $this->visitors); - if ($index !== \false) { - array_splice($this->visitors, $index, 1, []); - } - } - /** - * Traverses an array of nodes using the registered visitors. - * - * @param Node[] $nodes Array of nodes - * - * @return Node[] Traversed array of nodes - */ - public function traverse(array $nodes): array - { - $this->stopTraversal = \false; - foreach ($this->visitors as $visitor) { - if (null !== $return = $visitor->beforeTraverse($nodes)) { - $nodes = $return; - } - } - $nodes = $this->traverseArray($nodes); - for ($i = \count($this->visitors) - 1; $i >= 0; --$i) { - $visitor = $this->visitors[$i]; - if (null !== $return = $visitor->afterTraverse($nodes)) { - $nodes = $return; - } - } - return $nodes; - } - /** - * Recursively traverse a node. - * - * @param Node $node Node to traverse. - */ - protected function traverseNode(Node $node): void - { - foreach ($node->getSubNodeNames() as $name) { - $subNode = $node->{$name}; - if (\is_array($subNode)) { - $node->{$name} = $this->traverseArray($subNode); - if ($this->stopTraversal) { - break; - } - continue; - } - if (!$subNode instanceof Node) { - continue; - } - $traverseChildren = \true; - $visitorIndex = -1; - foreach ($this->visitors as $visitorIndex => $visitor) { - $return = $visitor->enterNode($subNode); - if (null !== $return) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($subNode, $return); - $subNode = $node->{$name} = $return; - } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) { - $traverseChildren = \false; - } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { - $traverseChildren = \false; - break; - } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { - $this->stopTraversal = \true; - break 2; - } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { - $node->{$name} = null; - continue 2; - } else { - throw new \LogicException('enterNode() returned invalid value of type ' . gettype($return)); - } - } - } - if ($traverseChildren) { - $this->traverseNode($subNode); - if ($this->stopTraversal) { - break; - } - } - for (; $visitorIndex >= 0; --$visitorIndex) { - $visitor = $this->visitors[$visitorIndex]; - $return = $visitor->leaveNode($subNode); - if (null !== $return) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($subNode, $return); - $subNode = $node->{$name} = $return; - } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { - $this->stopTraversal = \true; - break 2; - } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { - $node->{$name} = null; - break; - } elseif (\is_array($return)) { - throw new \LogicException('leaveNode() may only return an array ' . 'if the parent structure is an array'); - } else { - throw new \LogicException('leaveNode() returned invalid value of type ' . gettype($return)); - } - } - } - } - } - /** - * Recursively traverse array (usually of nodes). - * - * @param array $nodes Array to traverse - * - * @return array Result of traversal (may be original array or changed one) - */ - protected function traverseArray(array $nodes): array - { - $doNodes = []; - foreach ($nodes as $i => $node) { - if (!$node instanceof Node) { - if (\is_array($node)) { - throw new \LogicException('Invalid node structure: Contains nested arrays'); - } - continue; - } - $traverseChildren = \true; - $visitorIndex = -1; - foreach ($this->visitors as $visitorIndex => $visitor) { - $return = $visitor->enterNode($node); - if (null !== $return) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($node, $return); - $nodes[$i] = $node = $return; - } elseif (\is_array($return)) { - $doNodes[] = [$i, $return]; - continue 2; - } elseif (NodeVisitor::REMOVE_NODE === $return) { - $doNodes[] = [$i, []]; - continue 2; - } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) { - $traverseChildren = \false; - } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { - $traverseChildren = \false; - break; - } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { - $this->stopTraversal = \true; - break 2; - } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { - throw new \LogicException('REPLACE_WITH_NULL can not be used if the parent structure is an array'); - } else { - throw new \LogicException('enterNode() returned invalid value of type ' . gettype($return)); - } - } - } - if ($traverseChildren) { - $this->traverseNode($node); - if ($this->stopTraversal) { - break; - } - } - for (; $visitorIndex >= 0; --$visitorIndex) { - $visitor = $this->visitors[$visitorIndex]; - $return = $visitor->leaveNode($node); - if (null !== $return) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($node, $return); - $nodes[$i] = $node = $return; - } elseif (\is_array($return)) { - $doNodes[] = [$i, $return]; - break; - } elseif (NodeVisitor::REMOVE_NODE === $return) { - $doNodes[] = [$i, []]; - break; - } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { - $this->stopTraversal = \true; - break 2; - } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { - throw new \LogicException('REPLACE_WITH_NULL can not be used if the parent structure is an array'); - } else { - throw new \LogicException('leaveNode() returned invalid value of type ' . gettype($return)); - } - } - } - } - if (!empty($doNodes)) { - while (list($i, $replace) = array_pop($doNodes)) { - array_splice($nodes, $i, 1, $replace); - } - } - return $nodes; - } - private function ensureReplacementReasonable(Node $old, Node $new): void - { - if ($old instanceof Node\Stmt && $new instanceof Node\Expr) { - throw new \LogicException("Trying to replace statement ({$old->getType()}) " . "with expression ({$new->getType()}). Are you missing a " . "Stmt_Expression wrapper?"); - } - if ($old instanceof Node\Expr && $new instanceof Node\Stmt) { - throw new \LogicException("Trying to replace expression ({$old->getType()}) " . "with statement ({$new->getType()})"); - } - } -} - $node stays as-is - * * array (of Nodes) - * => The return value is merged into the parent array (at the position of the $node) - * * NodeVisitor::REMOVE_NODE - * => $node is removed from the parent array - * * NodeVisitor::REPLACE_WITH_NULL - * => $node is replaced with null - * * NodeVisitor::DONT_TRAVERSE_CHILDREN - * => Children of $node are not traversed. $node stays as-is - * * NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN - * => Further visitors for the current node are skipped, and its children are not - * traversed. $node stays as-is. - * * NodeVisitor::STOP_TRAVERSAL - * => Traversal is aborted. $node stays as-is - * * otherwise - * => $node is set to the return value - * - * @param Node $node Node - * - * @return null|int|Node|Node[] Replacement node (or special return value) - */ - public function enterNode(Node $node); - /** - * Called when leaving a node. - * - * Return value semantics: - * * null - * => $node stays as-is - * * NodeVisitor::REMOVE_NODE - * => $node is removed from the parent array - * * NodeVisitor::REPLACE_WITH_NULL - * => $node is replaced with null - * * NodeVisitor::STOP_TRAVERSAL - * => Traversal is aborted. $node stays as-is - * * array (of Nodes) - * => The return value is merged into the parent array (at the position of the $node) - * * otherwise - * => $node is set to the return value - * - * @param Node $node Node - * - * @return null|int|Node|Node[] Replacement node (or special return value) - */ - public function leaveNode(Node $node); - /** - * Called once after traversal. - * - * Return value semantics: - * * null: $nodes stays as-is - * * otherwise: $nodes is set to the return value - * - * @param Node[] $nodes Array of nodes - * - * @return null|Node[] Array of nodes - */ - public function afterTraverse(array $nodes); -} -setAttribute('origNode', $origNode); - return $node; - } -} - Token positions of comments */ - private array $commentPositions = []; - /** - * Create a comment annotation visitor. - * - * @param Token[] $tokens Token array - */ - public function __construct(array $tokens) - { - $this->tokens = $tokens; - // Collect positions of comments. We use this to avoid traversing parts of the AST where - // there are no comments. - foreach ($tokens as $i => $token) { - if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) { - $this->commentPositions[] = $i; - } - } - } - public function enterNode(Node $node) - { - $nextCommentPos = current($this->commentPositions); - if ($nextCommentPos === \false) { - // No more comments. - return self::STOP_TRAVERSAL; - } - $oldPos = $this->pos; - $this->pos = $pos = $node->getStartTokenPos(); - if ($nextCommentPos > $oldPos && $nextCommentPos < $pos) { - $comments = []; - while (--$pos >= $oldPos) { - $token = $this->tokens[$pos]; - if ($token->id === \T_DOC_COMMENT) { - $comments[] = new Comment\Doc($token->text, $token->line, $token->pos, $pos, $token->getEndLine(), $token->getEndPos() - 1, $pos); - continue; - } - if ($token->id === \T_COMMENT) { - $comments[] = new Comment($token->text, $token->line, $token->pos, $pos, $token->getEndLine(), $token->getEndPos() - 1, $pos); - continue; - } - if ($token->id !== \T_WHITESPACE) { - break; - } - } - if (!empty($comments)) { - $node->setAttribute('comments', array_reverse($comments)); - } - do { - $nextCommentPos = next($this->commentPositions); - } while ($nextCommentPos !== \false && $nextCommentPos < $this->pos); - } - $endPos = $node->getEndTokenPos(); - if ($nextCommentPos > $endPos) { - // Skip children if there are no comments located inside this node. - $this->pos = $endPos; - return self::DONT_TRAVERSE_CHILDREN; - } - return null; - } -} -filterCallback = $filterCallback; - } - /** - * Get found nodes satisfying the filter callback. - * - * Nodes are returned in pre-order. - * - * @return Node[] Found nodes - */ - public function getFoundNodes(): array - { - return $this->foundNodes; - } - public function beforeTraverse(array $nodes): ?array - { - $this->foundNodes = []; - return null; - } - public function enterNode(Node $node) - { - $filterCallback = $this->filterCallback; - if ($filterCallback($node)) { - $this->foundNodes[] = $node; - } - return null; - } -} -filterCallback = $filterCallback; - } - /** - * Get found node satisfying the filter callback. - * - * Returns null if no node satisfies the filter callback. - * - * @return null|Node Found node (or null if not found) - */ - public function getFoundNode(): ?Node - { - return $this->foundNode; - } - public function beforeTraverse(array $nodes): ?array - { - $this->foundNode = null; - return null; - } - public function enterNode(Node $node) - { - $filterCallback = $this->filterCallback; - if ($filterCallback($node)) { - $this->foundNode = $node; - return NodeVisitor::STOP_TRAVERSAL; - } - return null; - } -} -nameContext = new NameContext($errorHandler ?? new ErrorHandler\Throwing()); - $this->preserveOriginalNames = $options['preserveOriginalNames'] ?? \false; - $this->replaceNodes = $options['replaceNodes'] ?? \true; - } - /** - * Get name resolution context. - */ - public function getNameContext(): NameContext - { - return $this->nameContext; - } - public function beforeTraverse(array $nodes): ?array - { - $this->nameContext->startNamespace(); - return null; - } - public function enterNode(Node $node) - { - if ($node instanceof Stmt\Namespace_) { - $this->nameContext->startNamespace($node->name); - } elseif ($node instanceof Stmt\Use_) { - foreach ($node->uses as $use) { - $this->addAlias($use, $node->type, null); - } - } elseif ($node instanceof Stmt\GroupUse) { - foreach ($node->uses as $use) { - $this->addAlias($use, $node->type, $node->prefix); - } - } elseif ($node instanceof Stmt\Class_) { - if (null !== $node->extends) { - $node->extends = $this->resolveClassName($node->extends); - } - foreach ($node->implements as &$interface) { - $interface = $this->resolveClassName($interface); - } - $this->resolveAttrGroups($node); - if (null !== $node->name) { - $this->addNamespacedName($node); - } else { - $node->namespacedName = null; - } - } elseif ($node instanceof Stmt\Interface_) { - foreach ($node->extends as &$interface) { - $interface = $this->resolveClassName($interface); - } - $this->resolveAttrGroups($node); - $this->addNamespacedName($node); - } elseif ($node instanceof Stmt\Enum_) { - foreach ($node->implements as &$interface) { - $interface = $this->resolveClassName($interface); - } - $this->resolveAttrGroups($node); - $this->addNamespacedName($node); - } elseif ($node instanceof Stmt\Trait_) { - $this->resolveAttrGroups($node); - $this->addNamespacedName($node); - } elseif ($node instanceof Stmt\Function_) { - $this->resolveSignature($node); - $this->resolveAttrGroups($node); - $this->addNamespacedName($node); - } elseif ($node instanceof Stmt\ClassMethod || $node instanceof Expr\Closure || $node instanceof Expr\ArrowFunction) { - $this->resolveSignature($node); - $this->resolveAttrGroups($node); - } elseif ($node instanceof Stmt\Property) { - if (null !== $node->type) { - $node->type = $this->resolveType($node->type); - } - $this->resolveAttrGroups($node); - } elseif ($node instanceof Node\PropertyHook) { - foreach ($node->params as $param) { - $param->type = $this->resolveType($param->type); - $this->resolveAttrGroups($param); - } - $this->resolveAttrGroups($node); - } elseif ($node instanceof Stmt\Const_) { - foreach ($node->consts as $const) { - $this->addNamespacedName($const); - } - } elseif ($node instanceof Stmt\ClassConst) { - if (null !== $node->type) { - $node->type = $this->resolveType($node->type); - } - $this->resolveAttrGroups($node); - } elseif ($node instanceof Stmt\EnumCase) { - $this->resolveAttrGroups($node); - } elseif ($node instanceof Expr\StaticCall || $node instanceof Expr\StaticPropertyFetch || $node instanceof Expr\ClassConstFetch || $node instanceof Expr\New_ || $node instanceof Expr\Instanceof_) { - if ($node->class instanceof Name) { - $node->class = $this->resolveClassName($node->class); - } - } elseif ($node instanceof Stmt\Catch_) { - foreach ($node->types as &$type) { - $type = $this->resolveClassName($type); - } - } elseif ($node instanceof Expr\FuncCall) { - if ($node->name instanceof Name) { - $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_FUNCTION); - } - } elseif ($node instanceof Expr\ConstFetch) { - $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_CONSTANT); - } elseif ($node instanceof Stmt\TraitUse) { - foreach ($node->traits as &$trait) { - $trait = $this->resolveClassName($trait); - } - foreach ($node->adaptations as $adaptation) { - if (null !== $adaptation->trait) { - $adaptation->trait = $this->resolveClassName($adaptation->trait); - } - if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) { - foreach ($adaptation->insteadof as &$insteadof) { - $insteadof = $this->resolveClassName($insteadof); - } - } - } - } - return null; - } - /** @param Stmt\Use_::TYPE_* $type */ - private function addAlias(Node\UseItem $use, int $type, ?Name $prefix = null): void - { - // Add prefix for group uses - $name = $prefix ? Name::concat($prefix, $use->name) : $use->name; - // Type is determined either by individual element or whole use declaration - $type |= $use->type; - $this->nameContext->addAlias($name, (string) $use->getAlias(), $type, $use->getAttributes()); - } - /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure|Expr\ArrowFunction $node */ - private function resolveSignature($node): void - { - foreach ($node->params as $param) { - $param->type = $this->resolveType($param->type); - $this->resolveAttrGroups($param); - } - $node->returnType = $this->resolveType($node->returnType); - } - /** - * @template T of Node\Identifier|Name|Node\ComplexType|null - * @param T $node - * @return T - */ - private function resolveType(?Node $node): ?Node - { - if ($node instanceof Name) { - return $this->resolveClassName($node); - } - if ($node instanceof Node\NullableType) { - $node->type = $this->resolveType($node->type); - return $node; - } - if ($node instanceof Node\UnionType || $node instanceof Node\IntersectionType) { - foreach ($node->types as &$type) { - $type = $this->resolveType($type); - } - return $node; - } - return $node; - } - /** - * Resolve name, according to name resolver options. - * - * @param Name $name Function or constant name to resolve - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* - * - * @return Name Resolved name, or original name with attribute - */ - protected function resolveName(Name $name, int $type): Name - { - if (!$this->replaceNodes) { - $resolvedName = $this->nameContext->getResolvedName($name, $type); - if (null !== $resolvedName) { - $name->setAttribute('resolvedName', $resolvedName); - } else { - $name->setAttribute('namespacedName', FullyQualified::concat($this->nameContext->getNamespace(), $name, $name->getAttributes())); - } - return $name; - } - if ($this->preserveOriginalNames) { - // Save the original name - $originalName = $name; - $name = clone $originalName; - $name->setAttribute('originalName', $originalName); - } - $resolvedName = $this->nameContext->getResolvedName($name, $type); - if (null !== $resolvedName) { - return $resolvedName; - } - // unqualified names inside a namespace cannot be resolved at compile-time - // add the namespaced version of the name as an attribute - $name->setAttribute('namespacedName', FullyQualified::concat($this->nameContext->getNamespace(), $name, $name->getAttributes())); - return $name; - } - protected function resolveClassName(Name $name): Name - { - return $this->resolveName($name, Stmt\Use_::TYPE_NORMAL); - } - protected function addNamespacedName(Node $node): void - { - $node->namespacedName = Name::concat($this->nameContext->getNamespace(), (string) $node->name); - } - protected function resolveAttrGroups(Node $node): void - { - foreach ($node->attrGroups as $attrGroup) { - foreach ($attrGroup->attrs as $attr) { - $attr->name = $this->resolveClassName($attr->name); - } - } - } -} -$node->getAttribute('parent'), the previous - * node can be accessed through $node->getAttribute('previous'), - * and the next node can be accessed through $node->getAttribute('next'). - */ -final class NodeConnectingVisitor extends NodeVisitorAbstract -{ - /** - * @var Node[] - */ - private array $stack = []; - /** - * @var ?Node - */ - private $previous; - public function beforeTraverse(array $nodes) - { - $this->stack = []; - $this->previous = null; - } - public function enterNode(Node $node) - { - if (!empty($this->stack)) { - $node->setAttribute('parent', $this->stack[count($this->stack) - 1]); - } - if ($this->previous !== null && $this->previous->getAttribute('parent') === $node->getAttribute('parent')) { - $node->setAttribute('previous', $this->previous); - $this->previous->setAttribute('next', $node); - } - $this->stack[] = $node; - } - public function leaveNode(Node $node) - { - $this->previous = $node; - array_pop($this->stack); - } -} -$node->getAttribute('parent'). - */ -final class ParentConnectingVisitor extends NodeVisitorAbstract -{ - /** - * @var Node[] - */ - private array $stack = []; - public function beforeTraverse(array $nodes) - { - $this->stack = []; - } - public function enterNode(Node $node) - { - if (!empty($this->stack)) { - $node->setAttribute('parent', $this->stack[count($this->stack) - 1]); - } - $this->stack[] = $node; - } - public function leaveNode(Node $node) - { - array_pop($this->stack); - } -} -'", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_PUBLIC_SET", "T_PROTECTED_SET", "T_PRIVATE_SET", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_ENUM", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_NULLSAFE_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_PROPERTY_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "T_ATTRIBUTE", "';'", "']'", "'('", "')'", "'{'", "'}'", "'`'", "'\"'", "'\$'"); - protected array $tokenToSymbol = array(0, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 56, 170, 172, 171, 55, 172, 172, 165, 166, 53, 50, 8, 51, 52, 54, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 31, 163, 44, 16, 46, 30, 68, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 70, 172, 164, 36, 172, 169, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 167, 35, 168, 58, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 49, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162); - protected array $action = array(128, 129, 130, 565, 131, 132, 944, 754, 755, 756, 133, 38, 838, 485, 561, 1365, -32766, -32766, -32766, 0, 829, 1122, 1123, 1124, 1118, 1117, 1116, 1125, 1119, 1120, 1121, -32766, -32766, -32766, -332, 748, 747, -32766, 840, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 24, -32766, 1034, -568, 757, 1122, 1123, 1124, 1118, 1117, 1116, 1125, 1119, 1120, 1121, 2, 381, 382, 265, 134, 384, 761, 762, 763, 764, 1111, 425, 426, 1300, 329, 36, 248, 26, 291, 818, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 794, 566, 795, 796, 797, 798, 786, 787, 346, 347, 789, 790, 775, 776, 777, 779, 780, 781, 357, 821, 822, 823, 824, 825, 567, -568, -568, 299, 782, 783, 568, 569, -194, 806, 804, 805, 817, 801, 802, 35, -193, 570, 571, 800, 572, 573, 574, 575, -32766, 576, 577, 471, 472, 486, 238, -568, 803, 578, 579, -371, 135, -371, 128, 129, 130, 565, 131, 132, 1067, 754, 755, 756, 133, 38, -32766, 136, 728, 1027, 1026, 1025, 1031, 1028, 1029, 1030, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 101, 102, 103, 104, 105, -332, 748, 747, 1043, 923, -32766, -32766, -32766, 839, -32766, 145, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 757, -32766, -32766, -32766, 611, -32766, 290, -32766, -32766, -32766, -32766, -32766, 834, 718, 265, 134, 384, 761, 762, 763, 764, -615, -32766, 426, -32766, -32766, -32766, -32766, -615, 251, 818, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 794, 566, 795, 796, 797, 798, 786, 787, 346, 347, 789, 790, 775, 776, 777, 779, 780, 781, 357, 821, 822, 823, 824, 825, 567, 913, 426, 310, 782, 783, 568, 569, -194, 806, 804, 805, 817, 801, 802, 1288, -193, 570, 571, 800, 572, 573, 574, 575, -273, 576, 577, 835, 82, 83, 84, -85, 803, 578, 579, 237, 148, 778, 749, 750, 751, 752, 753, 150, 754, 755, 756, 791, 792, 37, -32766, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 1043, 276, -32766, -32766, -32766, 925, 1263, 1262, 1264, 713, 831, 312, 393, 109, 7, 1097, 47, 757, -32766, -32766, -32766, 838, -85, -32766, 1095, -32766, -32766, -32766, 1268, -32766, -32766, 758, 759, 760, 761, 762, 763, 764, 994, -32766, 827, -32766, -32766, 923, -615, 324, -615, 818, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 794, 816, 795, 796, 797, 798, 786, 787, 788, 815, 789, 790, 775, 776, 777, 779, 780, 781, 820, 821, 822, 823, 824, 825, 826, 300, 301, 342, 782, 783, 784, 785, 833, 806, 804, 805, 817, 801, 802, 715, 1040, 793, 799, 800, 807, 808, 810, 809, 140, 811, 812, 838, 327, 343, -32766, 125, 803, 814, 813, 49, 50, 51, 517, 52, 53, 1043, -110, 371, 913, 54, 55, -110, 56, -110, -566, -32766, -32766, -32766, 306, 1043, 126, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -612, 1096, 106, 107, 108, 740, 276, -612, 963, 964, -32766, 290, 287, 965, 1330, 57, 58, -32766, 109, 375, 995, 59, 959, 60, 245, 246, 61, 62, 63, 64, 65, 66, 67, 68, -32766, 28, 267, 69, 441, 518, 391, -346, 74, 1294, 1295, 519, 443, 838, 327, -566, -566, 1292, 42, 20, 520, 925, 521, 923, 522, 713, 523, -564, 693, 524, 525, -566, 923, 444, 44, 45, 447, 378, 377, -78, 46, 526, 923, -572, 445, -566, 369, 341, 1346, 103, 104, 105, -563, 1254, 923, 383, 382, 446, 528, 529, 530, 865, 719, 866, 694, 425, 461, 462, 463, 844, 532, 533, 720, 1280, 1281, 1282, 1283, 1285, 1277, 1278, 298, 865, 151, 866, 723, 153, 1284, 1279, 695, 696, 1263, 1262, 1264, 299, -564, -564, 70, -153, -153, -153, 322, 323, 327, 154, -4, 923, 913, 1263, 1262, 1264, -564, 155, -153, 283, -153, 913, -153, 157, -153, -563, -563, 33, -571, 1350, -564, 913, -58, 829, 376, -612, 1349, -612, 748, 747, 837, -563, -606, 913, -606, 963, 964, -57, 748, 747, 527, 123, 81, -570, 1040, -563, 327, 617, 899, 959, -110, -110, -110, 32, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124, -565, 1043, 947, 28, 268, 149, 408, 923, 1375, 829, 137, 1376, 138, 925, 144, 838, 913, 713, -153, 1292, 660, 21, 925, 679, 680, 283, 713, 158, 1170, 1172, 379, 380, 980, 385, 386, 159, 713, 730, 376, -562, 438, 1066, 141, 160, 925, 297, 327, 161, 713, 963, 964, 946, 651, 652, 527, 1254, -87, 162, -306, 748, 747, -84, 531, 959, -110, -110, -110, -565, -565, -78, 287, 1268, 532, 533, -73, 1280, 1281, 1282, 1283, 1285, 1277, 1278, -72, -565, -71, -70, 11, 1261, 1284, 1279, 913, -69, 748, 747, -68, 925, -32766, -565, 72, 713, -4, -16, 1261, 323, 327, -67, -562, -562, 291, -32766, -32766, -32766, -66, -32766, -65, -32766, -46, -32766, -18, 142, -32766, 275, -562, 1259, 284, -32766, -32766, -32766, 729, -32766, 732, -32766, -32766, 922, 147, 1261, -562, -32766, 422, 28, 267, -302, -32766, -32766, -32766, 279, -32766, 1042, -32766, -32766, -32766, 838, 838, -32766, 288, 1292, 1040, 280, -32766, -32766, -32766, 285, 286, 335, -32766, -32766, 1263, 1262, 1264, 925, -32766, 422, 289, 713, 28, 268, 292, 293, 276, 940, 73, 1043, -32766, 109, 689, 146, 838, -110, -110, -562, 1292, 1254, -110, 829, -32766, 1377, 704, 582, 10, 661, 838, -110, 1129, 706, 649, 283, 307, 960, -32766, 533, -32766, 1280, 1281, 1282, 1283, 1285, 1277, 1278, 682, 1043, 305, -50, 468, 1299, 1284, 1279, 1254, 666, -528, 496, 667, 304, 299, 683, 72, 74, 1301, 588, -32766, 323, 327, 327, -518, 290, 533, 40, 1280, 1281, 1282, 1283, 1285, 1277, 1278, 8, 139, 0, -562, -562, 27, 1284, 1279, -276, 407, 0, -32766, 0, 0, 0, 0, 72, 1261, 311, -562, 0, 323, 327, 0, -32766, -32766, -32766, 0, -32766, 373, -32766, 0, -32766, -562, 0, -32766, 0, 0, 615, 0, -32766, -32766, -32766, 923, -32766, 0, -32766, -32766, 942, 1289, 1261, 837, -32766, 422, 41, 299, 34, -32766, -32766, -32766, 737, -32766, 738, -32766, -32766, -32766, 923, 857, -32766, 904, 1004, 981, 988, -32766, -32766, -32766, 978, -32766, 989, -32766, -32766, 902, 976, 1261, 1100, -32766, 422, 48, 1103, 1104, -32766, -32766, -32766, 1101, -32766, 1102, -32766, -32766, -32766, 1108, -600, -32766, 849, 1316, 1334, 491, -32766, -32766, -32766, 1368, -32766, 654, -32766, -32766, -599, -598, 1261, 595, -32766, 422, -572, -571, 1268, -32766, -32766, -32766, 913, -32766, -570, -32766, -32766, -32766, -569, -512, -32766, -274, 1, 29, 30, -32766, -32766, -32766, -251, -251, -251, -32766, -32766, 39, 376, 913, 43, -32766, 422, 71, 302, 303, 75, 76, 77, 963, 964, 78, 79, -32766, 527, -250, -250, -250, -273, 80, 374, 376, 899, 959, -110, -110, -110, 143, 152, 156, 243, 331, 963, 964, 127, 358, 359, 527, 360, 361, 362, 363, 364, 365, 366, 899, 959, -110, -110, -110, -32766, 13, 367, 838, 368, 925, 1261, 14, 370, 713, -251, 439, 560, -32766, -32766, -32766, 15, -32766, 16, -32766, 18, -32766, 406, 487, -32766, 488, 495, 498, 925, -32766, -32766, -32766, 713, -250, 499, -32766, -32766, 500, -110, -110, 501, -32766, 422, -110, 505, 506, 507, 515, 593, 699, 1069, 1210, -110, -32766, 1290, 1068, 1049, 1249, 1045, -278, -102, -32766, 12, 17, 22, 296, 405, 607, 612, 640, 705, 1214, 1267, 1211, 1347, 0, 321, 372, 714, 717, 721, 722, 724, 299, 725, 726, 74, 727, 1227, 731, 716, 0, 327, 411, 1293, 734, 900, 1372, 1374, 860, 859, 953, 996, 1373, 952, 950, 951, 954, 1242, 933, 943, 931, 986, 987, 638, 1371, 1328, 1317, 1335, 1344, 0, 0, 0, 327); - protected array $actionCheck = array(2, 3, 4, 5, 6, 7, 1, 9, 10, 11, 12, 13, 82, 31, 85, 85, 9, 10, 11, 0, 80, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 9, 10, 11, 8, 37, 38, 30, 1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 101, 30, 1, 70, 57, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 8, 106, 107, 71, 72, 73, 74, 75, 76, 77, 126, 116, 80, 150, 70, 151, 152, 8, 30, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 137, 138, 162, 126, 127, 128, 129, 8, 131, 132, 133, 134, 135, 136, 8, 8, 139, 140, 141, 142, 143, 144, 145, 9, 147, 148, 137, 138, 167, 14, 167, 154, 155, 156, 106, 158, 108, 2, 3, 4, 5, 6, 7, 166, 9, 10, 11, 12, 13, 116, 8, 167, 119, 120, 121, 122, 123, 124, 125, 9, 10, 11, 44, 45, 46, 47, 48, 49, 50, 51, 52, 166, 37, 38, 141, 1, 9, 10, 11, 163, 30, 8, 32, 33, 34, 35, 36, 37, 38, 9, 10, 11, 57, 9, 10, 11, 1, 30, 165, 32, 33, 34, 35, 36, 80, 31, 71, 72, 73, 74, 75, 76, 77, 1, 30, 80, 32, 33, 34, 35, 8, 8, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 84, 80, 8, 126, 127, 128, 129, 166, 131, 132, 133, 134, 135, 136, 1, 166, 139, 140, 141, 142, 143, 144, 145, 166, 147, 148, 160, 9, 10, 11, 31, 154, 155, 156, 97, 158, 2, 3, 4, 5, 6, 7, 14, 9, 10, 11, 12, 13, 30, 116, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 141, 57, 9, 10, 11, 163, 159, 160, 161, 167, 80, 8, 106, 69, 108, 168, 70, 57, 9, 10, 11, 82, 97, 30, 1, 32, 33, 34, 1, 9, 10, 71, 72, 73, 74, 75, 76, 77, 31, 30, 80, 32, 33, 1, 164, 8, 166, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 137, 138, 8, 126, 127, 128, 129, 160, 131, 132, 133, 134, 135, 136, 167, 116, 139, 140, 141, 142, 143, 144, 145, 167, 147, 148, 82, 171, 8, 116, 167, 154, 155, 156, 2, 3, 4, 5, 6, 7, 141, 101, 8, 84, 12, 13, 106, 15, 108, 70, 9, 10, 11, 113, 141, 14, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 1, 163, 53, 54, 55, 167, 57, 8, 117, 118, 116, 165, 30, 122, 1, 50, 51, 140, 69, 8, 163, 56, 131, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 140, 70, 71, 72, 73, 74, 8, 168, 165, 78, 79, 80, 8, 82, 171, 137, 138, 86, 87, 88, 89, 163, 91, 1, 93, 167, 95, 70, 80, 98, 99, 153, 1, 8, 103, 104, 105, 106, 107, 16, 109, 110, 1, 165, 8, 167, 115, 116, 1, 50, 51, 52, 70, 122, 1, 106, 107, 8, 127, 128, 129, 106, 31, 108, 116, 116, 132, 133, 134, 8, 139, 140, 31, 142, 143, 144, 145, 146, 147, 148, 149, 106, 14, 108, 31, 14, 155, 156, 140, 141, 159, 160, 161, 162, 137, 138, 165, 75, 76, 77, 169, 170, 171, 14, 0, 1, 84, 159, 160, 161, 153, 14, 90, 165, 92, 84, 94, 14, 96, 137, 138, 14, 165, 1, 167, 84, 16, 80, 106, 164, 8, 166, 37, 38, 159, 153, 164, 84, 166, 117, 118, 16, 37, 38, 122, 16, 167, 165, 116, 167, 171, 51, 130, 131, 132, 133, 134, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 16, 70, 141, 73, 70, 71, 101, 102, 1, 80, 80, 16, 83, 16, 163, 16, 82, 84, 167, 168, 86, 75, 76, 163, 75, 76, 165, 167, 16, 59, 60, 106, 107, 163, 106, 107, 16, 167, 31, 106, 70, 108, 1, 167, 16, 163, 113, 171, 16, 167, 117, 118, 122, 111, 112, 122, 122, 31, 16, 35, 37, 38, 31, 130, 131, 132, 133, 134, 137, 138, 31, 30, 1, 139, 140, 31, 142, 143, 144, 145, 146, 147, 148, 31, 153, 31, 31, 154, 80, 155, 156, 84, 31, 37, 38, 31, 163, 74, 167, 165, 167, 168, 31, 80, 170, 171, 31, 137, 138, 30, 87, 88, 89, 31, 91, 31, 93, 31, 95, 31, 31, 98, 31, 153, 116, 31, 103, 104, 105, 31, 74, 31, 109, 110, 31, 31, 80, 167, 115, 116, 70, 71, 35, 87, 88, 89, 35, 91, 140, 93, 127, 95, 82, 82, 98, 37, 86, 116, 35, 103, 104, 105, 35, 35, 35, 109, 110, 159, 160, 161, 163, 115, 116, 37, 167, 70, 71, 37, 37, 57, 38, 158, 141, 127, 69, 77, 70, 82, 117, 118, 70, 86, 122, 122, 80, 116, 83, 80, 89, 97, 90, 82, 131, 82, 92, 113, 165, 114, 131, 85, 140, 140, 142, 143, 144, 145, 146, 147, 148, 94, 141, 136, 31, 97, 150, 155, 156, 122, 96, 153, 97, 100, 135, 162, 100, 165, 165, 150, 157, 140, 170, 171, 171, 153, 165, 140, 163, 142, 143, 144, 145, 146, 147, 148, 153, 31, -1, 137, 138, 153, 155, 156, 166, 168, -1, 74, -1, -1, -1, -1, 165, 80, 135, 153, -1, 170, 171, -1, 87, 88, 89, -1, 91, 153, 93, -1, 95, 167, -1, 98, -1, -1, 157, -1, 103, 104, 105, 1, 74, -1, 109, 110, 158, 164, 80, 159, 115, 116, 163, 162, 167, 87, 88, 89, 163, 91, 163, 93, 127, 95, 1, 163, 98, 163, 163, 163, 163, 103, 104, 105, 163, 74, 163, 109, 110, 163, 163, 80, 163, 115, 116, 70, 163, 163, 87, 88, 89, 163, 91, 163, 93, 127, 95, 163, 165, 98, 164, 164, 164, 102, 103, 104, 105, 164, 74, 164, 109, 110, 165, 165, 80, 81, 115, 116, 165, 165, 1, 87, 88, 89, 84, 91, 165, 93, 127, 95, 165, 165, 98, 166, 165, 165, 165, 103, 104, 105, 100, 101, 102, 109, 110, 165, 106, 84, 165, 115, 116, 165, 137, 138, 165, 165, 165, 117, 118, 165, 165, 127, 122, 100, 101, 102, 166, 165, 153, 106, 130, 131, 132, 133, 134, 165, 165, 165, 165, 165, 117, 118, 167, 165, 165, 122, 165, 165, 165, 165, 165, 165, 165, 130, 131, 132, 133, 134, 74, 166, 165, 82, 165, 163, 80, 166, 165, 167, 168, 165, 165, 87, 88, 89, 166, 91, 166, 93, 166, 95, 166, 166, 98, 166, 166, 166, 163, 103, 104, 105, 167, 168, 166, 109, 110, 166, 117, 118, 166, 115, 116, 122, 166, 166, 166, 166, 166, 166, 166, 166, 131, 127, 166, 166, 166, 166, 166, 166, 166, 140, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, -1, 167, 167, 167, 167, 167, 167, 167, 162, 167, 167, 165, 167, 169, 167, 167, -1, 171, 168, 170, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, -1, -1, -1, 171); - protected array $actionBase = array(0, -2, 156, 559, 641, 1004, 1027, 485, 292, 200, -60, 283, 568, 590, 590, 715, 590, 195, 578, 894, 395, 395, 395, 825, 313, 313, 825, 313, 731, 731, 731, 731, 764, 764, 965, 965, 998, 932, 899, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 37, 360, 216, 644, 1061, 1067, 1063, 1068, 1059, 1058, 1062, 1064, 1069, 1109, 1110, 812, 1111, 1112, 1108, 1113, 1065, 909, 1060, 1066, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 135, 477, 373, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 642, 642, 22, 22, 22, 362, 813, 778, 813, 813, 813, 813, 813, 813, 813, 813, 346, 205, 678, 188, 171, 171, 7, 7, 7, 7, 7, 376, 779, 54, 1083, 1083, 139, 139, 139, 139, -50, 49, 749, 380, 787, -39, 569, 569, 536, 536, 335, 335, 349, 349, 335, 335, 335, 212, 212, 212, 212, 415, 494, 519, 512, -71, 807, 584, 584, 584, 584, 807, 807, 807, 807, 795, 1086, 807, 807, 807, 639, 828, 828, 979, 452, 452, 452, 828, 492, -70, -70, 492, 394, -70, 516, 982, 637, 988, 397, 785, 486, 509, 397, -16, 299, 502, 233, 854, 633, 854, 1056, 832, 832, 794, 752, 898, 1085, 1070, 839, 1106, 842, 1107, 471, 10, 747, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1114, 632, 1056, 145, 1114, 1114, 1114, 632, 632, 632, 632, 632, 632, 632, 632, 796, 632, 632, 650, 145, 654, 657, 145, 837, 632, 798, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, -18, 37, 37, 360, 5, 5, 37, 341, 52, 5, 5, 5, 5, 37, 37, 37, 37, 633, 830, 789, 636, 278, 843, 128, 830, 830, 830, 26, 136, 120, 732, 815, 259, 822, 822, 829, 933, 933, 822, 827, 822, 829, 822, 822, 933, 933, 855, 933, 163, 541, 430, 514, 562, 933, 273, 822, 822, 822, 822, 845, 933, 58, 573, 822, 234, 194, 822, 822, 845, 805, 802, 793, 933, 933, 933, 845, 470, 793, 793, 793, 859, 861, 800, 799, 390, 356, 598, 127, 850, 799, 799, 822, 535, 800, 799, 800, 799, 852, 799, 799, 799, 800, 799, 827, 456, 799, 720, 728, 586, 75, 799, 19, 950, 953, 734, 954, 944, 955, 1008, 958, 959, 1073, 930, 977, 947, 966, 1009, 935, 934, 811, 666, 692, 809, 784, 929, 823, 823, 823, 917, 918, 823, 823, 823, 823, 823, 823, 823, 823, 666, 847, 838, 817, 983, 703, 705, 1044, 782, 1090, 1081, 982, 950, 959, 739, 947, 966, 935, 934, 792, 790, 772, 783, 769, 763, 760, 762, 797, 1046, 974, 791, 707, 1016, 985, 1089, 1071, 986, 987, 1018, 1047, 866, 1050, 1091, 824, 1092, 1093, 900, 989, 1074, 823, 912, 897, 901, 988, 925, 666, 902, 1051, 997, 851, 1019, 1021, 1072, 834, 821, 907, 1094, 990, 991, 999, 1075, 1076, 853, 1003, 804, 1022, 841, 803, 1023, 1030, 1033, 1036, 1077, 1095, 1079, 911, 1080, 868, 818, 931, 840, 1096, 307, 835, 836, 849, 1005, 605, 978, 1082, 1087, 1097, 1040, 1041, 1042, 1098, 1099, 975, 869, 1012, 833, 1014, 964, 870, 871, 608, 848, 1052, 819, 831, 844, 626, 634, 1100, 1101, 1102, 976, 806, 816, 875, 877, 1053, 826, 1054, 1103, 640, 880, 1104, 1045, 736, 740, 560, 662, 647, 750, 820, 1084, 814, 801, 810, 1001, 740, 808, 881, 1105, 883, 887, 888, 1043, 892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 468, 468, 468, 468, 468, 313, 313, 313, 313, 313, 468, 468, 468, 468, 468, 468, 468, 313, 468, 468, 468, 313, 0, 0, 313, 0, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 716, 716, 297, 297, 297, 297, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 297, 297, 0, 297, 297, 297, 297, 297, 297, 297, 297, 855, 716, 716, 716, 716, 452, 452, 452, 452, -95, -95, 716, 716, 716, 394, 716, 716, 452, 452, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 0, 0, 0, 145, -70, 716, 827, 827, 827, 827, 716, 716, 716, 716, -70, -70, 716, 716, 716, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 145, 0, 0, 827, 638, 827, 638, 716, 394, 855, 659, 716, 0, 0, 0, 0, 145, 827, 145, 632, -70, -70, 632, 632, 5, 37, 659, 613, 613, 613, 613, 0, 0, 633, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 827, 0, 855, 0, 827, 827, 827, 0, 0, 0, 0, 0, 0, 0, 0, 933, 0, 0, 0, 0, 0, 0, 0, 827, 0, 933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 834, 0, 0, 834, 0, 823, 823, 823, 0, 0, 0, 848, 826); - protected array $actionDefault = array(3, 32767, 102, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 100, 32767, 618, 618, 618, 618, 32767, 32767, 255, 102, 32767, 32767, 487, 404, 404, 404, 32767, 32767, 560, 560, 560, 560, 560, 32767, 32767, 32767, 32767, 32767, 32767, 487, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 36, 7, 8, 10, 11, 49, 17, 328, 100, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 611, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 392, 491, 470, 471, 473, 474, 403, 561, 617, 331, 614, 333, 402, 145, 343, 334, 243, 259, 492, 260, 493, 496, 497, 216, 389, 149, 150, 434, 488, 436, 486, 490, 435, 409, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 407, 408, 489, 32767, 32767, 467, 466, 465, 432, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 433, 437, 406, 440, 438, 439, 456, 457, 454, 455, 458, 32767, 32767, 320, 32767, 32767, 459, 460, 461, 462, 370, 368, 32767, 32767, 320, 111, 32767, 32767, 447, 448, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 504, 554, 464, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 100, 556, 429, 431, 524, 442, 443, 441, 410, 32767, 529, 32767, 102, 32767, 531, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 555, 32767, 562, 562, 32767, 517, 100, 195, 32767, 530, 195, 195, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 625, 517, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 32767, 195, 110, 32767, 32767, 32767, 100, 195, 195, 195, 195, 195, 195, 195, 195, 532, 195, 195, 190, 32767, 269, 271, 102, 579, 195, 534, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 517, 452, 138, 32767, 519, 138, 562, 444, 445, 446, 562, 562, 562, 316, 293, 32767, 32767, 32767, 32767, 532, 532, 100, 100, 100, 100, 32767, 32767, 32767, 32767, 111, 503, 99, 99, 99, 99, 99, 103, 101, 32767, 32767, 32767, 32767, 224, 32767, 101, 99, 32767, 101, 101, 32767, 32767, 224, 226, 213, 228, 32767, 583, 584, 224, 101, 228, 228, 228, 248, 248, 506, 322, 101, 99, 101, 101, 197, 322, 322, 32767, 101, 506, 322, 506, 322, 199, 322, 322, 322, 506, 322, 32767, 101, 322, 215, 392, 99, 99, 322, 32767, 32767, 32767, 519, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 223, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 549, 32767, 567, 581, 450, 451, 453, 566, 564, 475, 476, 477, 478, 479, 480, 481, 483, 613, 32767, 523, 32767, 32767, 32767, 342, 32767, 623, 32767, 32767, 32767, 9, 74, 512, 42, 43, 51, 57, 538, 539, 540, 541, 535, 536, 542, 537, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 624, 32767, 562, 32767, 32767, 32767, 32767, 449, 544, 589, 32767, 32767, 563, 616, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 138, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 549, 32767, 136, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 545, 32767, 32767, 32767, 562, 32767, 32767, 32767, 32767, 318, 315, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 562, 32767, 32767, 32767, 32767, 32767, 295, 32767, 312, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 388, 519, 298, 300, 301, 32767, 32767, 32767, 32767, 364, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 152, 152, 3, 3, 345, 152, 152, 152, 345, 345, 152, 345, 345, 345, 152, 152, 152, 152, 152, 152, 281, 185, 263, 266, 248, 248, 152, 356, 152); - protected array $goto = array(196, 196, 1041, 352, 700, 465, 587, 470, 470, 1072, 736, 641, 643, 1205, 855, 663, 470, 856, 709, 687, 690, 1014, 698, 707, 1010, 625, 662, 166, 166, 166, 166, 220, 197, 193, 193, 176, 178, 215, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 188, 189, 190, 191, 192, 217, 215, 218, 540, 541, 423, 542, 545, 546, 547, 548, 549, 550, 551, 552, 1156, 167, 168, 169, 195, 170, 171, 172, 165, 173, 174, 175, 177, 214, 216, 219, 239, 242, 253, 254, 256, 257, 258, 259, 260, 261, 262, 263, 269, 270, 271, 272, 281, 282, 317, 318, 319, 429, 430, 431, 602, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 179, 236, 180, 188, 189, 190, 191, 192, 217, 1156, 198, 199, 200, 201, 240, 181, 182, 202, 183, 203, 199, 184, 241, 198, 164, 204, 205, 185, 206, 207, 208, 186, 209, 210, 187, 211, 212, 213, 278, 278, 278, 278, 858, 433, 665, 979, 916, 604, 917, 428, 320, 314, 315, 338, 597, 432, 339, 434, 642, 627, 627, 896, 854, 896, 896, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 614, 628, 631, 632, 633, 634, 655, 656, 657, 711, 830, 871, 460, 912, 907, 908, 921, 864, 909, 861, 910, 911, 862, 356, 915, 868, 421, 883, 482, 867, 870, 1361, 1361, 356, 356, 484, 1094, 1089, 1090, 1091, 889, 603, 1107, 397, 400, 605, 609, 356, 356, 1361, 594, 356, 712, 344, 1378, 353, 354, 511, 703, 442, 1105, 1260, 1041, 1260, 1260, 350, 559, 1364, 1364, 356, 356, 1041, 1260, 1041, 1351, 1041, 1041, 345, 344, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1000, 1236, 948, 249, 249, 1260, 1237, 1240, 949, 1241, 1260, 1260, 1260, 1260, 1114, 1115, 1260, 1260, 1260, 1343, 1343, 1343, 1343, 564, 557, 851, 427, 1322, 616, 395, 247, 247, 247, 247, 244, 250, 592, 929, 503, 664, 504, 930, 355, 355, 355, 355, 510, 945, 512, 945, 479, 1336, 1337, 328, 557, 564, 589, 590, 330, 600, 606, 1153, 621, 622, 555, 1065, 555, 555, 658, 659, 25, 676, 677, 678, 440, 555, 1310, 1310, 686, 559, 851, 670, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1044, 1044, 1047, 1046, 685, 956, 458, 340, 1036, 1052, 1053, 973, 973, 973, 973, 1050, 1051, 458, 967, 974, 1307, 1307, 971, 412, 708, 848, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 5, 610, 6, 873, 934, 1143, 451, 451, 876, 451, 451, 1333, 962, 1333, 1333, 1253, 1019, 404, 553, 553, 553, 553, 1333, 608, 875, 620, 668, 998, 1251, 558, 584, 1022, 869, 739, 558, 885, 584, 480, 398, 464, 1078, 697, 326, 309, 1250, 832, 1345, 1345, 1345, 1345, 1082, 473, 601, 474, 475, 1338, 1339, 697, 1128, 881, 697, 984, 1369, 1370, 598, 619, 1032, 0, 544, 544, 851, 836, 0, 1329, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 543, 543, 1255, 879, 0, 0, 543, 0, 543, 543, 543, 543, 543, 543, 543, 543, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 252, 252, 451, 836, 1080, 836, 409, 410, 1331, 1331, 1080, 674, 0, 675, 0, 414, 415, 416, 0, 688, 0, 0, 417, 635, 637, 639, 0, 348, 0, 0, 1256, 1257, 0, 1243, 884, 872, 1077, 1081, 0, 846, 1003, 0, 0, 975, 0, 735, 1243, 982, 556, 1012, 1007, 0, 435, 0, 0, 0, 0, 0, 1258, 1319, 1320, 0, 0, 435, 273, 325, 0, 325, 325, 0, 972, 1048, 1048, 0, 0, 0, 669, 1059, 1055, 1056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1126, 888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1017, 1017); - protected array $gotoCheck = array(42, 42, 73, 97, 73, 156, 48, 154, 154, 128, 48, 48, 48, 156, 26, 48, 154, 27, 9, 48, 48, 48, 48, 48, 48, 56, 56, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 23, 23, 23, 23, 15, 66, 66, 49, 65, 131, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 108, 108, 25, 25, 25, 25, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 6, 35, 83, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 15, 15, 43, 35, 84, 15, 35, 188, 188, 14, 14, 84, 15, 15, 15, 15, 45, 8, 8, 59, 59, 59, 59, 14, 14, 188, 178, 14, 8, 174, 14, 97, 97, 8, 8, 83, 8, 73, 73, 73, 73, 185, 14, 188, 188, 14, 14, 73, 73, 73, 187, 73, 73, 174, 174, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 103, 79, 79, 5, 5, 73, 79, 79, 79, 79, 73, 73, 73, 73, 145, 145, 73, 73, 73, 9, 9, 9, 9, 76, 76, 22, 13, 14, 13, 62, 5, 5, 5, 5, 5, 5, 104, 73, 160, 64, 160, 73, 24, 24, 24, 24, 160, 9, 14, 9, 182, 182, 182, 76, 76, 76, 76, 76, 76, 76, 76, 155, 76, 76, 19, 115, 19, 19, 86, 86, 76, 86, 86, 86, 113, 19, 176, 176, 117, 14, 22, 121, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 89, 89, 119, 119, 89, 89, 19, 29, 89, 89, 89, 19, 19, 19, 19, 120, 120, 19, 19, 19, 177, 177, 93, 93, 93, 18, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 46, 17, 46, 37, 17, 17, 23, 23, 39, 23, 23, 131, 92, 131, 131, 14, 17, 28, 107, 107, 107, 107, 131, 107, 17, 80, 17, 17, 166, 9, 9, 110, 17, 99, 9, 41, 9, 157, 9, 9, 130, 7, 175, 175, 17, 7, 131, 131, 131, 131, 133, 9, 9, 9, 9, 184, 184, 7, 148, 9, 7, 96, 9, 9, 2, 2, 114, -1, 179, 179, 22, 12, -1, 131, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 162, 162, 20, 9, -1, -1, 162, -1, 162, 162, 162, 162, 162, 162, 162, 162, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 5, 5, 23, 12, 131, 12, 82, 82, 131, 131, 131, 82, -1, 82, -1, 82, 82, 82, -1, 82, -1, -1, 82, 85, 85, 85, -1, 82, -1, -1, 20, 20, -1, 20, 16, 16, 16, 16, -1, 20, 50, -1, -1, 50, -1, 50, 20, 16, 50, 50, 50, -1, 118, -1, -1, -1, -1, -1, 20, 20, 20, -1, -1, 118, 24, 24, -1, 24, 24, -1, 16, 118, 118, -1, -1, -1, 118, 118, 118, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 107, 107); - protected array $gotoBase = array(0, 0, -234, 0, 0, 291, 199, 451, 232, 8, 0, 0, 191, -25, -76, -183, 108, -48, 96, 88, 109, 0, 36, 159, 328, 182, 10, 13, 94, 91, 0, 0, 0, 0, 0, -162, 0, 78, 0, 101, 0, 9, -1, 202, 0, 213, -322, 0, -708, 151, 556, 0, 0, 0, 0, 0, -15, 0, 0, 197, 0, 0, 276, 0, 90, 156, -70, 0, 0, 0, 0, 0, 0, -5, 0, 0, -34, 0, 0, -119, 112, -160, 40, -67, -246, 69, -364, 0, 0, 102, 0, 0, 97, 98, 0, 0, 33, -483, 0, 42, 0, 0, 0, 254, 282, 0, 0, 407, -54, 0, 77, 0, 0, 86, -29, 79, 0, 84, 314, 104, 111, 80, 0, 0, 0, 0, 0, 0, 7, 0, 82, 163, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 29, 0, 0, 0, 0, 0, -27, 106, -263, 12, 0, 0, -171, 0, 264, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, -46, 137, 128, 164, 220, 248, 0, 0, 38, 0, 99, 234, 0, 242, -78, 0, 0); - protected array $gotoDefault = array(-32768, 516, 743, 4, 744, 938, 819, 828, 580, 534, 710, 349, 629, 424, 1327, 914, 1142, 599, 847, 1269, 1275, 459, 850, 333, 733, 926, 897, 898, 401, 388, 863, 399, 653, 630, 497, 882, 455, 874, 489, 877, 454, 886, 163, 420, 514, 890, 3, 893, 562, 924, 977, 389, 901, 390, 681, 903, 583, 905, 906, 396, 402, 403, 1147, 591, 626, 918, 255, 585, 919, 387, 920, 928, 392, 394, 691, 469, 508, 502, 413, 1109, 586, 613, 650, 448, 476, 624, 636, 623, 483, 436, 418, 332, 961, 969, 490, 467, 983, 351, 991, 741, 1155, 644, 492, 999, 645, 1006, 1009, 535, 536, 481, 1021, 266, 1024, 493, 1033, 23, 671, 1038, 1039, 672, 646, 1061, 647, 673, 648, 1063, 466, 581, 1071, 456, 1079, 1315, 457, 1083, 264, 1086, 277, 419, 437, 1092, 1093, 9, 1099, 701, 702, 19, 274, 513, 1127, 692, -32768, -32768, -32768, -32768, 453, 1154, 452, 1224, 1226, 563, 494, 1244, 294, 1247, 684, 509, 1252, 449, 1318, 450, 537, 477, 316, 538, 1362, 308, 336, 313, 554, 295, 337, 539, 478, 1324, 1332, 334, 31, 1352, 1363, 596, 618); - protected array $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 25, 25, 50, 69, 69, 72, 72, 71, 70, 70, 63, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, 80, 26, 26, 27, 27, 27, 27, 27, 88, 88, 90, 90, 83, 83, 91, 91, 92, 92, 92, 84, 84, 87, 87, 85, 85, 93, 94, 94, 57, 57, 65, 65, 68, 68, 68, 67, 95, 95, 96, 58, 58, 58, 58, 97, 97, 98, 98, 99, 99, 100, 101, 101, 102, 102, 103, 103, 55, 55, 51, 51, 105, 53, 53, 106, 52, 52, 54, 54, 64, 64, 64, 64, 81, 81, 109, 109, 111, 111, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 115, 115, 115, 115, 89, 89, 118, 118, 118, 119, 119, 116, 116, 120, 120, 122, 122, 123, 123, 117, 124, 124, 121, 125, 125, 125, 125, 113, 113, 82, 82, 82, 20, 20, 20, 127, 126, 126, 128, 128, 128, 128, 60, 129, 129, 130, 61, 132, 132, 133, 133, 134, 134, 86, 135, 135, 135, 135, 135, 135, 135, 140, 140, 141, 141, 142, 142, 142, 142, 142, 143, 144, 144, 139, 139, 136, 136, 138, 138, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 137, 147, 147, 149, 148, 148, 150, 150, 114, 151, 151, 153, 153, 153, 152, 152, 62, 104, 154, 154, 56, 56, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 161, 162, 162, 163, 155, 155, 160, 160, 164, 165, 165, 166, 167, 168, 168, 168, 168, 19, 19, 73, 73, 73, 73, 156, 156, 156, 156, 170, 170, 159, 159, 159, 157, 157, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 108, 179, 179, 179, 179, 158, 158, 158, 158, 158, 158, 158, 158, 59, 59, 173, 173, 173, 173, 173, 180, 180, 169, 169, 169, 169, 181, 181, 181, 181, 181, 181, 74, 74, 66, 66, 66, 66, 131, 131, 131, 131, 184, 183, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 182, 182, 182, 182, 107, 178, 186, 186, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 175, 175, 175, 175, 174, 189, 188, 188, 188, 188, 188, 188, 188, 188, 190, 190, 190, 190); - protected array $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, 0, 1, 1, 1, 1, 4, 3, 5, 4, 3, 4, 1, 3, 1, 1, 8, 7, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, 2, 1, 1, 1, 1, 0, 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, 1, 3, 1, 1, 1, 1, 8, 9, 7, 8, 7, 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, 0, 2, 1, 1, 1, 1, 1, 1, 1, 7, 9, 6, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, 1, 1, 3, 2, 0, 1, 5, 5, 6, 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 0, 2, 0, 5, 8, 1, 3, 3, 0, 2, 2, 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, 3, 2, 2, 1, 1, 0, 4, 2, 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 4, 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 4, 4, 1, 4, 4, 0, 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, 1, 4, 4, 3, 3, 3, 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, 6, 3, 1, 1, 2, 1); - protected function initReduceCallbacks(): void - { - $this->reduceCallbacks = [0 => null, 1 => static function ($self, $stackPos) { - $self->semValue = $self->handleNamespaces($self->semStack[$stackPos - (1 - 1)]); - }, 2 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (2 - 2)] !== null) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - } - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 3 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 4 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos); - if ($nop !== null) { - $self->semStack[$stackPos - (1 - 1)][] = $nop; - } - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 5 => null, 6 => null, 7 => null, 8 => null, 9 => null, 10 => null, 11 => null, 12 => null, 13 => null, 14 => null, 15 => null, 16 => null, 17 => null, 18 => null, 19 => null, 20 => null, 21 => null, 22 => null, 23 => null, 24 => null, 25 => null, 26 => null, 27 => null, 28 => null, 29 => null, 30 => null, 31 => null, 32 => null, 33 => null, 34 => null, 35 => null, 36 => null, 37 => null, 38 => null, 39 => null, 40 => null, 41 => null, 42 => null, 43 => null, 44 => null, 45 => null, 46 => null, 47 => null, 48 => null, 49 => null, 50 => null, 51 => null, 52 => null, 53 => null, 54 => null, 55 => null, 56 => null, 57 => null, 58 => null, 59 => null, 60 => null, 61 => null, 62 => null, 63 => null, 64 => null, 65 => null, 66 => null, 67 => null, 68 => null, 69 => null, 70 => null, 71 => null, 72 => null, 73 => null, 74 => null, 75 => null, 76 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - if ($self->semValue === "emitError(new Error('Cannot use "getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]))); - } - }, 77 => null, 78 => null, 79 => null, 80 => null, 81 => null, 82 => null, 83 => null, 84 => null, 85 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 86 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 87 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 88 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 89 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 90 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 91 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 92 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 93 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 94 => null, 95 => static function ($self, $stackPos) { - $self->semValue = new Name(substr($self->semStack[$stackPos - (1 - 1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 96 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable(substr($self->semStack[$stackPos - (1 - 1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 97 => static function ($self, $stackPos) { - /* nothing */ - }, 98 => static function ($self, $stackPos) { - /* nothing */ - }, 99 => static function ($self, $stackPos) { - /* nothing */ - }, 100 => static function ($self, $stackPos) { - $self->emitError(new Error('A trailing comma is not allowed here', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]))); - }, 101 => null, 102 => null, 103 => static function ($self, $stackPos) { - $self->semValue = new Node\Attribute($self->semStack[$stackPos - (1 - 1)], [], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 104 => static function ($self, $stackPos) { - $self->semValue = new Node\Attribute($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 105 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 106 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 107 => static function ($self, $stackPos) { - $self->semValue = new Node\AttributeGroup($self->semStack[$stackPos - (4 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 108 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 109 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 110 => static function ($self, $stackPos) { - $self->semValue = []; - }, 111 => null, 112 => null, 113 => null, 114 => null, 115 => static function ($self, $stackPos) { - $self->semValue = new Stmt\HaltCompiler($self->handleHaltCompiler(), $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 116 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos - (3 - 2)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); - $self->checkNamespace($self->semValue); - }, 117 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos - (5 - 2)], $self->semStack[$stackPos - (5 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $self->checkNamespace($self->semValue); - }, 118 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_(null, $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $self->checkNamespace($self->semValue); - }, 119 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Use_($self->semStack[$stackPos - (3 - 2)], Stmt\Use_::TYPE_NORMAL, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 120 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Use_($self->semStack[$stackPos - (4 - 3)], $self->semStack[$stackPos - (4 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 121 => null, 122 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Const_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 123 => static function ($self, $stackPos) { - $self->semValue = Stmt\Use_::TYPE_FUNCTION; - }, 124 => static function ($self, $stackPos) { - $self->semValue = Stmt\Use_::TYPE_CONSTANT; - }, 125 => static function ($self, $stackPos) { - $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos - (8 - 3)], $self->semStack[$stackPos - (8 - 6)], $self->semStack[$stackPos - (8 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 126 => static function ($self, $stackPos) { - $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos - (7 - 2)], $self->semStack[$stackPos - (7 - 5)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 127 => null, 128 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 129 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 130 => null, 131 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 132 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 133 => null, 134 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 135 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 136 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkUseUse($self->semValue, $stackPos - (1 - 1)); - }, 137 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkUseUse($self->semValue, $stackPos - (3 - 3)); - }, 138 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkUseUse($self->semValue, $stackPos - (1 - 1)); - }, 139 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkUseUse($self->semValue, $stackPos - (3 - 3)); - }, 140 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - $self->semValue->type = Stmt\Use_::TYPE_NORMAL; - }, 141 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue->type = $self->semStack[$stackPos - (2 - 1)]; - }, 142 => null, 143 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 144 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 145 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 146 => null, 147 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 148 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 149 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos - (3 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos - (3 - 1)])), $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 150 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos - (3 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos - (3 - 1)])), $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 151 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (2 - 2)] !== null) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - } - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 152 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 153 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos); - if ($nop !== null) { - $self->semStack[$stackPos - (1 - 1)][] = $nop; - } - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 154 => null, 155 => null, 156 => null, 157 => static function ($self, $stackPos) { - throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 158 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Block($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 159 => static function ($self, $stackPos) { - $self->semValue = new Stmt\If_($self->semStack[$stackPos - (7 - 3)], ['stmts' => $self->semStack[$stackPos - (7 - 5)], 'elseifs' => $self->semStack[$stackPos - (7 - 6)], 'else' => $self->semStack[$stackPos - (7 - 7)]], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 160 => static function ($self, $stackPos) { - $self->semValue = new Stmt\If_($self->semStack[$stackPos - (10 - 3)], ['stmts' => $self->semStack[$stackPos - (10 - 6)], 'elseifs' => $self->semStack[$stackPos - (10 - 7)], 'else' => $self->semStack[$stackPos - (10 - 8)]], $self->getAttributes($self->tokenStartStack[$stackPos - (10 - 1)], $self->tokenEndStack[$stackPos])); - }, 161 => static function ($self, $stackPos) { - $self->semValue = new Stmt\While_($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 162 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Do_($self->semStack[$stackPos - (7 - 5)], $self->semStack[$stackPos - (7 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 163 => static function ($self, $stackPos) { - $self->semValue = new Stmt\For_(['init' => $self->semStack[$stackPos - (9 - 3)], 'cond' => $self->semStack[$stackPos - (9 - 5)], 'loop' => $self->semStack[$stackPos - (9 - 7)], 'stmts' => $self->semStack[$stackPos - (9 - 9)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 164 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Switch_($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 165 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Break_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 166 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Continue_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 167 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Return_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 168 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Global_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 169 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Static_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 170 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Echo_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 171 => static function ($self, $stackPos) { - $self->semValue = new Stmt\InlineHTML($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('hasLeadingNewline', $self->inlineHtmlHasLeadingNewline($stackPos - (1 - 1))); - }, 172 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Expression($self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 173 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Unset_($self->semStack[$stackPos - (5 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 174 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos - (7 - 3)], $self->semStack[$stackPos - (7 - 5)][0], ['keyVar' => null, 'byRef' => $self->semStack[$stackPos - (7 - 5)][1], 'stmts' => $self->semStack[$stackPos - (7 - 7)]], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 175 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos - (9 - 3)], $self->semStack[$stackPos - (9 - 7)][0], ['keyVar' => $self->semStack[$stackPos - (9 - 5)], 'byRef' => $self->semStack[$stackPos - (9 - 7)][1], 'stmts' => $self->semStack[$stackPos - (9 - 9)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 176 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos - (6 - 3)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (6 - 4)], $self->tokenEndStack[$stackPos - (6 - 4)])), ['stmts' => $self->semStack[$stackPos - (6 - 6)]], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - }, 177 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Declare_($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 178 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TryCatch($self->semStack[$stackPos - (6 - 3)], $self->semStack[$stackPos - (6 - 5)], $self->semStack[$stackPos - (6 - 6)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkTryCatch($self->semValue); - }, 179 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Goto_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 180 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Label($self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 181 => static function ($self, $stackPos) { - $self->semValue = null; - /* means: no statement */ - }, 182 => null, 183 => static function ($self, $stackPos) { - $self->semValue = $self->maybeCreateNop($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]); - }, 184 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (1 - 1)] instanceof Stmt\Block) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]->stmts; - } else if ($self->semStack[$stackPos - (1 - 1)] === null) { - $self->semValue = []; - } else { - $self->semValue = [$self->semStack[$stackPos - (1 - 1)]]; - } - }, 185 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 186 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 187 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 188 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 189 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Catch_($self->semStack[$stackPos - (8 - 3)], $self->semStack[$stackPos - (8 - 4)], $self->semStack[$stackPos - (8 - 7)], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 190 => static function ($self, $stackPos) { - $self->semValue = null; - }, 191 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Finally_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 192 => null, 193 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 194 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 195 => static function ($self, $stackPos) { - $self->semValue = \false; - }, 196 => static function ($self, $stackPos) { - $self->semValue = \true; - }, 197 => static function ($self, $stackPos) { - $self->semValue = \false; - }, 198 => static function ($self, $stackPos) { - $self->semValue = \true; - }, 199 => static function ($self, $stackPos) { - $self->semValue = \false; - }, 200 => static function ($self, $stackPos) { - $self->semValue = \true; - }, 201 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 202 => static function ($self, $stackPos) { - $self->semValue = []; - }, 203 => null, 204 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 205 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 206 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Function_($self->semStack[$stackPos - (8 - 3)], ['byRef' => $self->semStack[$stackPos - (8 - 2)], 'params' => $self->semStack[$stackPos - (8 - 5)], 'returnType' => $self->semStack[$stackPos - (8 - 7)], 'stmts' => $self->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 207 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Function_($self->semStack[$stackPos - (9 - 4)], ['byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 6)], 'returnType' => $self->semStack[$stackPos - (9 - 8)], 'stmts' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => $self->semStack[$stackPos - (9 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 208 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Class_($self->semStack[$stackPos - (7 - 2)], ['type' => $self->semStack[$stackPos - (7 - 1)], 'extends' => $self->semStack[$stackPos - (7 - 3)], 'implements' => $self->semStack[$stackPos - (7 - 4)], 'stmts' => $self->semStack[$stackPos - (7 - 6)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkClass($self->semValue, $stackPos - (7 - 2)); - }, 209 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Class_($self->semStack[$stackPos - (8 - 3)], ['type' => $self->semStack[$stackPos - (8 - 2)], 'extends' => $self->semStack[$stackPos - (8 - 4)], 'implements' => $self->semStack[$stackPos - (8 - 5)], 'stmts' => $self->semStack[$stackPos - (8 - 7)], 'attrGroups' => $self->semStack[$stackPos - (8 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkClass($self->semValue, $stackPos - (8 - 3)); - }, 210 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Interface_($self->semStack[$stackPos - (7 - 3)], ['extends' => $self->semStack[$stackPos - (7 - 4)], 'stmts' => $self->semStack[$stackPos - (7 - 6)], 'attrGroups' => $self->semStack[$stackPos - (7 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkInterface($self->semValue, $stackPos - (7 - 3)); - }, 211 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Trait_($self->semStack[$stackPos - (6 - 3)], ['stmts' => $self->semStack[$stackPos - (6 - 5)], 'attrGroups' => $self->semStack[$stackPos - (6 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - }, 212 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Enum_($self->semStack[$stackPos - (8 - 3)], ['scalarType' => $self->semStack[$stackPos - (8 - 4)], 'implements' => $self->semStack[$stackPos - (8 - 5)], 'stmts' => $self->semStack[$stackPos - (8 - 7)], 'attrGroups' => $self->semStack[$stackPos - (8 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkEnum($self->semValue, $stackPos - (8 - 3)); - }, 213 => static function ($self, $stackPos) { - $self->semValue = null; - }, 214 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 215 => static function ($self, $stackPos) { - $self->semValue = null; - }, 216 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 217 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 218 => null, 219 => null, 220 => static function ($self, $stackPos) { - $self->checkClassModifier($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); - $self->semValue = $self->semStack[$stackPos - (2 - 1)] | $self->semStack[$stackPos - (2 - 2)]; - }, 221 => static function ($self, $stackPos) { - $self->semValue = Modifiers::ABSTRACT; - }, 222 => static function ($self, $stackPos) { - $self->semValue = Modifiers::FINAL; - }, 223 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, 224 => static function ($self, $stackPos) { - $self->semValue = null; - }, 225 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 226 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 227 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 228 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 229 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 230 => null, 231 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 232 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 233 => null, 234 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 235 => null, 236 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 237 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (1 - 1)] instanceof Stmt\Block) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]->stmts; - } else if ($self->semStack[$stackPos - (1 - 1)] === null) { - $self->semValue = []; - } else { - $self->semValue = [$self->semStack[$stackPos - (1 - 1)]]; - } - }, 238 => static function ($self, $stackPos) { - $self->semValue = null; - }, 239 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 240 => null, 241 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 242 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 243 => static function ($self, $stackPos) { - $self->semValue = new Node\DeclareItem($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 244 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 245 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 3)]; - }, 246 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 247 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (5 - 3)]; - }, 248 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 249 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 250 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Case_($self->semStack[$stackPos - (4 - 2)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 251 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Case_(null, $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 252 => null, 253 => null, 254 => static function ($self, $stackPos) { - $self->semValue = new Expr\Match_($self->semStack[$stackPos - (7 - 3)], $self->semStack[$stackPos - (7 - 6)], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 255 => static function ($self, $stackPos) { - $self->semValue = []; - }, 256 => null, 257 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 258 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 259 => static function ($self, $stackPos) { - $self->semValue = new Node\MatchArm($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 260 => static function ($self, $stackPos) { - $self->semValue = new Node\MatchArm(null, $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 261 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 262 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 263 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 264 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 265 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 266 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 267 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 268 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos - (6 - 3)], $self->semStack[$stackPos - (6 - 6)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - $self->fixupAlternativeElse($self->semValue); - }, 269 => static function ($self, $stackPos) { - $self->semValue = null; - }, 270 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Else_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 271 => static function ($self, $stackPos) { - $self->semValue = null; - }, 272 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Else_($self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->fixupAlternativeElse($self->semValue); - }, 273 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)], \false); - }, 274 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (2 - 2)], \true); - }, 275 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)], \false); - }, 276 => static function ($self, $stackPos) { - $self->semValue = array($self->fixupArrayDestructuring($self->semStack[$stackPos - (1 - 1)]), \false); - }, 277 => null, 278 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 279 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 280 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 281 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 282 => static function ($self, $stackPos) { - $self->checkModifier($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); - $self->semValue = $self->semStack[$stackPos - (2 - 1)] | $self->semStack[$stackPos - (2 - 2)]; - }, 283 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC; - }, 284 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED; - }, 285 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE; - }, 286 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC_SET; - }, 287 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED_SET; - }, 288 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE_SET; - }, 289 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, 290 => static function ($self, $stackPos) { - $self->semValue = new Node\Param($self->semStack[$stackPos - (7 - 6)], null, $self->semStack[$stackPos - (7 - 3)], $self->semStack[$stackPos - (7 - 4)], $self->semStack[$stackPos - (7 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (7 - 2)], $self->semStack[$stackPos - (7 - 1)], $self->semStack[$stackPos - (7 - 7)]); - $self->checkParam($self->semValue); - $self->addPropertyNameToHooks($self->semValue); - }, 291 => static function ($self, $stackPos) { - $self->semValue = new Node\Param($self->semStack[$stackPos - (9 - 6)], $self->semStack[$stackPos - (9 - 8)], $self->semStack[$stackPos - (9 - 3)], $self->semStack[$stackPos - (9 - 4)], $self->semStack[$stackPos - (9 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (9 - 2)], $self->semStack[$stackPos - (9 - 1)], $self->semStack[$stackPos - (9 - 9)]); - $self->checkParam($self->semValue); - $self->addPropertyNameToHooks($self->semValue); - }, 292 => static function ($self, $stackPos) { - $self->semValue = new Node\Param(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])), null, $self->semStack[$stackPos - (6 - 3)], $self->semStack[$stackPos - (6 - 4)], $self->semStack[$stackPos - (6 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (6 - 2)], $self->semStack[$stackPos - (6 - 1)]); - }, 293 => null, 294 => static function ($self, $stackPos) { - $self->semValue = new Node\NullableType($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 295 => static function ($self, $stackPos) { - $self->semValue = new Node\UnionType($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 296 => null, 297 => null, 298 => static function ($self, $stackPos) { - $self->semValue = new Node\Name('static', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 299 => static function ($self, $stackPos) { - $self->semValue = $self->handleBuiltinTypes($self->semStack[$stackPos - (1 - 1)]); - }, 300 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier('array', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 301 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier('callable', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 302 => null, 303 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 304 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 305 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 306 => null, 307 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 308 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 309 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 310 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 311 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 312 => static function ($self, $stackPos) { - $self->semValue = new Node\IntersectionType($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 313 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 314 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 315 => static function ($self, $stackPos) { - $self->semValue = new Node\IntersectionType($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 316 => null, 317 => static function ($self, $stackPos) { - $self->semValue = new Node\NullableType($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 318 => static function ($self, $stackPos) { - $self->semValue = new Node\UnionType($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 319 => null, 320 => static function ($self, $stackPos) { - $self->semValue = null; - }, 321 => null, 322 => static function ($self, $stackPos) { - $self->semValue = null; - }, 323 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 324 => static function ($self, $stackPos) { - $self->semValue = null; - }, 325 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 326 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 327 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 2)]); - }, 328 => static function ($self, $stackPos) { - $self->semValue = new Node\VariadicPlaceholder($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 329 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 330 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 331 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos - (1 - 1)], \false, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 332 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos - (2 - 2)], \true, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 333 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos - (2 - 2)], \false, \true, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 334 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos - (3 - 3)], \false, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (3 - 1)]); - }, 335 => null, 336 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 337 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 338 => null, 339 => null, 340 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 341 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 342 => static function ($self, $stackPos) { - $self->semValue = new Node\StaticVar($self->semStack[$stackPos - (1 - 1)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 343 => static function ($self, $stackPos) { - $self->semValue = new Node\StaticVar($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 344 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (2 - 2)] !== null) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - } else { - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - } - }, 345 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 346 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos); - if ($nop !== null) { - $self->semStack[$stackPos - (1 - 1)][] = $nop; - } - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 347 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Property($self->semStack[$stackPos - (5 - 2)], $self->semStack[$stackPos - (5 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 1)]); - }, 348 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos - (5 - 4)], $self->semStack[$stackPos - (5 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (5 - 1)]); - $self->checkClassConst($self->semValue, $stackPos - (5 - 2)); - }, 349 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos - (6 - 5)], $self->semStack[$stackPos - (6 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (6 - 1)], $self->semStack[$stackPos - (6 - 4)]); - $self->checkClassConst($self->semValue, $stackPos - (6 - 2)); - }, 350 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassMethod($self->semStack[$stackPos - (10 - 5)], ['type' => $self->semStack[$stackPos - (10 - 2)], 'byRef' => $self->semStack[$stackPos - (10 - 4)], 'params' => $self->semStack[$stackPos - (10 - 7)], 'returnType' => $self->semStack[$stackPos - (10 - 9)], 'stmts' => $self->semStack[$stackPos - (10 - 10)], 'attrGroups' => $self->semStack[$stackPos - (10 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (10 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkClassMethod($self->semValue, $stackPos - (10 - 2)); - }, 351 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUse($self->semStack[$stackPos - (3 - 2)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 352 => static function ($self, $stackPos) { - $self->semValue = new Stmt\EnumCase($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 4)], $self->semStack[$stackPos - (5 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 353 => static function ($self, $stackPos) { - $self->semValue = null; - /* will be skipped */ - }, 354 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 355 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 356 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 357 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 358 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos - (4 - 1)][0], $self->semStack[$stackPos - (4 - 1)][1], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 359 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos - (5 - 1)][0], $self->semStack[$stackPos - (5 - 1)][1], $self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 360 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos - (4 - 1)][0], $self->semStack[$stackPos - (4 - 1)][1], $self->semStack[$stackPos - (4 - 3)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 361 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos - (4 - 1)][0], $self->semStack[$stackPos - (4 - 1)][1], null, $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 362 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos - (4 - 1)][0], $self->semStack[$stackPos - (4 - 1)][1], null, $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 363 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 364 => null, 365 => static function ($self, $stackPos) { - $self->semValue = array(null, $self->semStack[$stackPos - (1 - 1)]); - }, 366 => static function ($self, $stackPos) { - $self->semValue = null; - }, 367 => null, 368 => null, 369 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 370 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 371 => null, 372 => null, 373 => static function ($self, $stackPos) { - $self->checkModifier($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); - $self->semValue = $self->semStack[$stackPos - (2 - 1)] | $self->semStack[$stackPos - (2 - 2)]; - }, 374 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC; - }, 375 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED; - }, 376 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE; - }, 377 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC_SET; - }, 378 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED_SET; - }, 379 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE_SET; - }, 380 => static function ($self, $stackPos) { - $self->semValue = Modifiers::STATIC; - }, 381 => static function ($self, $stackPos) { - $self->semValue = Modifiers::ABSTRACT; - }, 382 => static function ($self, $stackPos) { - $self->semValue = Modifiers::FINAL; - }, 383 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, 384 => null, 385 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 386 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 387 => static function ($self, $stackPos) { - $self->semValue = new Node\VarLikeIdentifier(substr($self->semStack[$stackPos - (1 - 1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 388 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyItem($self->semStack[$stackPos - (1 - 1)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 389 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyItem($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 390 => static function ($self, $stackPos) { - $self->semValue = []; - }, 391 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 392 => static function ($self, $stackPos) { - $self->semValue = []; - }, 393 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyHook($self->semStack[$stackPos - (5 - 4)], $self->semStack[$stackPos - (5 - 5)], ['flags' => $self->semStack[$stackPos - (5 - 2)], 'byRef' => $self->semStack[$stackPos - (5 - 3)], 'params' => [], 'attrGroups' => $self->semStack[$stackPos - (5 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkPropertyHook($self->semValue, null); - }, 394 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyHook($self->semStack[$stackPos - (8 - 4)], $self->semStack[$stackPos - (8 - 8)], ['flags' => $self->semStack[$stackPos - (8 - 2)], 'byRef' => $self->semStack[$stackPos - (8 - 3)], 'params' => $self->semStack[$stackPos - (8 - 6)], 'attrGroups' => $self->semStack[$stackPos - (8 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkPropertyHook($self->semValue, $stackPos - (8 - 5)); - }, 395 => static function ($self, $stackPos) { - $self->semValue = null; - }, 396 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 397 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 398 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 399 => static function ($self, $stackPos) { - $self->checkPropertyHookModifiers($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); - $self->semValue = $self->semStack[$stackPos - (2 - 1)] | $self->semStack[$stackPos - (2 - 2)]; - }, 400 => null, 401 => null, 402 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 403 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 404 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 405 => null, 406 => null, 407 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 408 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->fixupArrayDestructuring($self->semStack[$stackPos - (3 - 1)]), $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 409 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 410 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignRef($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 411 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignRef($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - if (!$self->phpVersion->allowsAssignNewByReference()) { - $self->emitError(new Error('Cannot assign new by reference', $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos]))); - } - }, 412 => null, 413 => null, 414 => static function ($self, $stackPos) { - $self->semValue = new Expr\Clone_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 415 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Plus($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 416 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Minus($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 417 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Mul($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 418 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Div($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 419 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Concat($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 420 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Mod($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 421 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 422 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseOr($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 423 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseXor($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 424 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\ShiftLeft($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 425 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\ShiftRight($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 426 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Pow($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 427 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Coalesce($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 428 => static function ($self, $stackPos) { - $self->semValue = new Expr\PostInc($self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 429 => static function ($self, $stackPos) { - $self->semValue = new Expr\PreInc($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 430 => static function ($self, $stackPos) { - $self->semValue = new Expr\PostDec($self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 431 => static function ($self, $stackPos) { - $self->semValue = new Expr\PreDec($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 432 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BooleanOr($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 433 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BooleanAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 434 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalOr($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 435 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 436 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalXor($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 437 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseOr($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 438 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 439 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 440 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseXor($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 441 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Concat($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 442 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Plus($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 443 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Minus($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 444 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Mul($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 445 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Div($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 446 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Mod($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 447 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\ShiftLeft($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 448 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\ShiftRight($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 449 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Pow($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 450 => static function ($self, $stackPos) { - $self->semValue = new Expr\UnaryPlus($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 451 => static function ($self, $stackPos) { - $self->semValue = new Expr\UnaryMinus($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 452 => static function ($self, $stackPos) { - $self->semValue = new Expr\BooleanNot($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 453 => static function ($self, $stackPos) { - $self->semValue = new Expr\BitwiseNot($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 454 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Identical($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 455 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\NotIdentical($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 456 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Equal($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 457 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\NotEqual($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 458 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Spaceship($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 459 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Smaller($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 460 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\SmallerOrEqual($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 461 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Greater($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 462 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\GreaterOrEqual($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 463 => static function ($self, $stackPos) { - $self->semValue = new Expr\Instanceof_($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 464 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 465 => static function ($self, $stackPos) { - $self->semValue = new Expr\Ternary($self->semStack[$stackPos - (5 - 1)], $self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 466 => static function ($self, $stackPos) { - $self->semValue = new Expr\Ternary($self->semStack[$stackPos - (4 - 1)], null, $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 467 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Coalesce($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 468 => static function ($self, $stackPos) { - $self->semValue = new Expr\Isset_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 469 => static function ($self, $stackPos) { - $self->semValue = new Expr\Empty_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 470 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 471 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 472 => static function ($self, $stackPos) { - $self->semValue = new Expr\Eval_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 473 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 474 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 475 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Int_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 476 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = $self->getFloatCastKind($self->semStack[$stackPos - (2 - 1)]); - $self->semValue = new Expr\Cast\Double($self->semStack[$stackPos - (2 - 2)], $attrs); - }, 477 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\String_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 478 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Array_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 479 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Object_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 480 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Bool_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 481 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Unset_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 482 => static function ($self, $stackPos) { - $self->semValue = $self->createExitExpr($self->semStack[$stackPos - (2 - 1)], $stackPos - (2 - 1), $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 483 => static function ($self, $stackPos) { - $self->semValue = new Expr\ErrorSuppress($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 484 => null, 485 => static function ($self, $stackPos) { - $self->semValue = new Expr\ShellExec($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 486 => static function ($self, $stackPos) { - $self->semValue = new Expr\Print_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 487 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_(null, null, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 488 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_($self->semStack[$stackPos - (2 - 2)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 489 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_($self->semStack[$stackPos - (4 - 4)], $self->semStack[$stackPos - (4 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 490 => static function ($self, $stackPos) { - $self->semValue = new Expr\YieldFrom($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 491 => static function ($self, $stackPos) { - $self->semValue = new Expr\Throw_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 492 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $self->semStack[$stackPos - (8 - 2)], 'params' => $self->semStack[$stackPos - (8 - 4)], 'returnType' => $self->semStack[$stackPos - (8 - 6)], 'expr' => $self->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 493 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 5)], 'returnType' => $self->semStack[$stackPos - (9 - 7)], 'expr' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 494 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => \false, 'byRef' => $self->semStack[$stackPos - (8 - 2)], 'params' => $self->semStack[$stackPos - (8 - 4)], 'uses' => $self->semStack[$stackPos - (8 - 6)], 'returnType' => $self->semStack[$stackPos - (8 - 7)], 'stmts' => $self->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 495 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => \true, 'byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 5)], 'uses' => $self->semStack[$stackPos - (9 - 7)], 'returnType' => $self->semStack[$stackPos - (9 - 8)], 'stmts' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 496 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 5)], 'returnType' => $self->semStack[$stackPos - (9 - 7)], 'expr' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => $self->semStack[$stackPos - (9 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 497 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $self->semStack[$stackPos - (10 - 4)], 'params' => $self->semStack[$stackPos - (10 - 6)], 'returnType' => $self->semStack[$stackPos - (10 - 8)], 'expr' => $self->semStack[$stackPos - (10 - 10)], 'attrGroups' => $self->semStack[$stackPos - (10 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (10 - 1)], $self->tokenEndStack[$stackPos])); - }, 498 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => \false, 'byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 5)], 'uses' => $self->semStack[$stackPos - (9 - 7)], 'returnType' => $self->semStack[$stackPos - (9 - 8)], 'stmts' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => $self->semStack[$stackPos - (9 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 499 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => \true, 'byRef' => $self->semStack[$stackPos - (10 - 4)], 'params' => $self->semStack[$stackPos - (10 - 6)], 'uses' => $self->semStack[$stackPos - (10 - 8)], 'returnType' => $self->semStack[$stackPos - (10 - 9)], 'stmts' => $self->semStack[$stackPos - (10 - 10)], 'attrGroups' => $self->semStack[$stackPos - (10 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (10 - 1)], $self->tokenEndStack[$stackPos])); - }, 500 => static function ($self, $stackPos) { - $self->semValue = array(new Stmt\Class_(null, ['type' => $self->semStack[$stackPos - (8 - 2)], 'extends' => $self->semStack[$stackPos - (8 - 4)], 'implements' => $self->semStack[$stackPos - (8 - 5)], 'stmts' => $self->semStack[$stackPos - (8 - 7)], 'attrGroups' => $self->semStack[$stackPos - (8 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])), $self->semStack[$stackPos - (8 - 3)]); - $self->checkClass($self->semValue[0], -1); - }, 501 => static function ($self, $stackPos) { - $self->semValue = new Expr\New_($self->semStack[$stackPos - (3 - 2)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 502 => static function ($self, $stackPos) { - list($class, $ctorArgs) = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = new Expr\New_($class, $ctorArgs, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 503 => static function ($self, $stackPos) { - $self->semValue = new Expr\New_($self->semStack[$stackPos - (2 - 2)], [], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 504 => null, 505 => null, 506 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 507 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 3)]; - }, 508 => null, 509 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 510 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 511 => static function ($self, $stackPos) { - $self->semValue = new Node\ClosureUse($self->semStack[$stackPos - (2 - 2)], $self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 512 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 513 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 514 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 515 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 516 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticCall($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 517 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 518 => null, 519 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 520 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 521 => static function ($self, $stackPos) { - $self->semValue = new Name\FullyQualified(substr($self->semStack[$stackPos - (1 - 1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 522 => static function ($self, $stackPos) { - $self->semValue = new Name\Relative(substr($self->semStack[$stackPos - (1 - 1)], 10), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 523 => null, 524 => null, 525 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 526 => static function ($self, $stackPos) { - $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->errorState = 2; - }, 527 => null, 528 => null, 529 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 530 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - foreach ($self->semValue as $s) { - if ($s instanceof Node\InterpolatedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); - } - } - }, 531 => static function ($self, $stackPos) { - foreach ($self->semStack[$stackPos - (1 - 1)] as $s) { - if ($s instanceof Node\InterpolatedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); - } - } - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 532 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 533 => null, 534 => static function ($self, $stackPos) { - $self->semValue = new Expr\ConstFetch($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 535 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Line($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 536 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\File($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 537 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Dir($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 538 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Class_($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 539 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Trait_($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 540 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Method($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 541 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Function_($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 542 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Namespace_($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 543 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Property($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 544 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 545 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos - (5 - 1)], $self->semStack[$stackPos - (5 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 546 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos - (3 - 1)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (3 - 3)], $self->tokenEndStack[$stackPos - (3 - 3)])), $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->errorState = 2; - }, 547 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = Expr\Array_::KIND_SHORT; - $self->semValue = new Expr\Array_($self->semStack[$stackPos - (3 - 2)], $attrs); - }, 548 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = Expr\Array_::KIND_LONG; - $self->semValue = new Expr\Array_($self->semStack[$stackPos - (4 - 3)], $attrs); - $self->createdArrays->attach($self->semValue); - }, 549 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - $self->createdArrays->attach($self->semValue); - }, 550 => static function ($self, $stackPos) { - $self->semValue = Scalar\String_::fromString($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->supportsUnicodeEscapes()); - }, 551 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; - foreach ($self->semStack[$stackPos - (3 - 2)] as $s) { - if ($s instanceof Node\InterpolatedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', $self->phpVersion->supportsUnicodeEscapes()); - } - } - $self->semValue = new Scalar\InterpolatedString($self->semStack[$stackPos - (3 - 2)], $attrs); - }, 552 => static function ($self, $stackPos) { - $self->semValue = $self->parseLNumber($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->allowsInvalidOctals()); - }, 553 => static function ($self, $stackPos) { - $self->semValue = Scalar\Float_::fromString($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 554 => null, 555 => null, 556 => null, 557 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 2)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 3)], $self->tokenEndStack[$stackPos - (3 - 3)]), \true); - }, 558 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos - (2 - 1)], '', $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 2)], $self->tokenEndStack[$stackPos - (2 - 2)]), \true); - }, 559 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 2)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 3)], $self->tokenEndStack[$stackPos - (3 - 3)]), \true); - }, 560 => static function ($self, $stackPos) { - $self->semValue = null; - }, 561 => null, 562 => null, 563 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 564 => null, 565 => null, 566 => null, 567 => null, 568 => null, 569 => null, 570 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 571 => null, 572 => null, 573 => null, 574 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 575 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 576 => null, 577 => static function ($self, $stackPos) { - $self->semValue = new Expr\MethodCall($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 578 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafeMethodCall($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 579 => static function ($self, $stackPos) { - $self->semValue = null; - }, 580 => null, 581 => null, 582 => null, 583 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 584 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 585 => null, 586 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 587 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 588 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])), $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - $self->errorState = 2; - }, 589 => static function ($self, $stackPos) { - $var = $self->semStack[$stackPos - (1 - 1)]->name; - $self->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])) : $var; - }, 590 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 591 => null, 592 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 593 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 594 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 595 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 596 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 597 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 598 => null, 599 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 600 => null, 601 => null, 602 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 603 => null, 604 => static function ($self, $stackPos) { - $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->errorState = 2; - }, 605 => static function ($self, $stackPos) { - $self->semValue = new Expr\List_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Expr\List_::KIND_LIST); - $self->postprocessList($self->semValue); - }, 606 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - $end = count($self->semValue) - 1; - if ($self->semValue[$end]->value instanceof Expr\Error) { - array_pop($self->semValue); - } - }, 607 => null, 608 => static function ($self, $stackPos) { - /* do nothing -- prevent default action of $$=$self->semStack[$1]. See $551. */ - }, 609 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 610 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 611 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (1 - 1)], null, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 612 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (2 - 2)], null, \true, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 613 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (1 - 1)], null, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 614 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (3 - 3)], $self->semStack[$stackPos - (3 - 1)], \false, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 615 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (4 - 4)], $self->semStack[$stackPos - (4 - 1)], \true, $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 616 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (3 - 3)], $self->semStack[$stackPos - (3 - 1)], \false, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 617 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (2 - 2)], null, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos]), \true); - }, 618 => static function ($self, $stackPos) { - /* Create an Error node now to remember the position. We'll later either report an error, - or convert this into a null element, depending on whether this is a creation or destructuring context. */ - $attrs = $self->createEmptyElemAttributes($self->tokenPos); - $self->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, \false, $attrs); - }, 619 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 620 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 621 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 622 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)]); - }, 623 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['rawValue'] = $self->semStack[$stackPos - (1 - 1)]; - $self->semValue = new Node\InterpolatedStringPart($self->semStack[$stackPos - (1 - 1)], $attrs); - }, 624 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 625 => null, 626 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 627 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 628 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 629 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 630 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 631 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (6 - 2)], $self->semStack[$stackPos - (6 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - }, 632 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 633 => static function ($self, $stackPos) { - $self->semValue = new Scalar\String_($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 634 => static function ($self, $stackPos) { - $self->semValue = $self->parseNumString($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 635 => static function ($self, $stackPos) { - $self->semValue = $self->parseNumString('-' . $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 636 => null]; - } -} -'", "T_IS_GREATER_OR_EQUAL", "'.'", "T_SL", "T_SR", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_PUBLIC_SET", "T_PROTECTED_SET", "T_PRIVATE_SET", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_ENUM", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_NULLSAFE_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_PROPERTY_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "T_ATTRIBUTE", "';'", "']'", "'('", "')'", "'{'", "'}'", "'`'", "'\"'", "'\$'"); - protected array $tokenToSymbol = array(0, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 56, 170, 172, 171, 55, 172, 172, 165, 166, 53, 51, 8, 52, 48, 54, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 31, 163, 44, 16, 46, 30, 68, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 70, 172, 164, 36, 172, 169, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 167, 35, 168, 58, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 49, 50, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162); - protected array $action = array(126, 127, 128, 570, 129, 130, 955, 765, 766, 767, 131, 38, 849, -85, -32766, 1376, -32766, -32766, -32766, 0, 840, 1134, 1135, 1136, 1130, 1129, 1128, 1137, 1131, 1132, 1133, -32766, -32766, -32766, 851, 759, 758, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 1005, -32766, 1045, -570, 768, 1134, 1135, 1136, 1130, 1129, 1128, 1137, 1131, 1132, 1133, 388, 387, 842, 263, 132, 389, 772, 773, 774, 775, 430, 845, 431, -85, 2, 36, 246, 47, 291, 829, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 805, 571, 806, 807, 808, 809, 797, 798, 344, 345, 800, 801, 786, 787, 788, 790, 791, 792, 359, 832, 833, 834, 835, 836, 572, -570, -570, -332, 793, 794, 573, 574, 236, 817, 815, 816, 828, 812, 813, 26, -194, 575, 576, 811, 577, 578, 579, 580, 323, 581, 582, 876, 844, 877, 297, 298, 814, 583, 584, 722, 133, 846, 126, 127, 128, 570, 129, 130, 1078, 765, 766, 767, 131, 38, -32766, 35, 735, 1038, 1037, 1036, 1042, 1039, 1040, 1041, -32766, -32766, -32766, 1006, 104, 105, 106, 107, 108, -372, 275, -372, -32766, 759, 758, 1054, 850, -32766, -32766, -32766, 848, -32766, 109, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 134, 476, 477, 768, -32766, -32766, -32766, 1054, -32766, 290, -32766, -32766, -32766, -32766, -32766, 616, 143, 263, 132, 389, 772, 773, 774, 775, 249, -32766, 431, -32766, -32766, -32766, -32766, 290, 307, 829, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 805, 571, 806, 807, 808, 809, 797, 798, 344, 345, 800, 801, 786, 787, 788, 790, 791, 792, 359, 832, 833, 834, 835, 836, 572, 958, -273, -332, 793, 794, 573, 574, 840, 817, 815, 816, 828, 812, 813, 1301, -194, 575, 576, 811, 577, 578, 579, 580, 566, 581, 582, 1108, 82, 83, 84, 748, 814, 583, 584, 309, 146, 789, 760, 761, 762, 763, 764, 235, 765, 766, 767, 802, 803, 37, 957, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 157, 275, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 101, 102, 103, -32766, 109, 1313, 622, 318, 768, -32766, -32766, -32766, 849, 1361, -32766, 1107, -32766, -32766, -32766, 340, 1360, 1357, 769, 770, 771, 772, 773, 774, 775, 341, -32766, 838, -32766, -32766, 1386, 374, 1281, 1387, 829, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 805, 827, 806, 807, 808, 809, 797, 798, 799, 826, 800, 801, 786, 787, 788, 790, 791, 792, 831, 832, 833, 834, 835, 836, 837, 1077, 431, -567, 793, 794, 795, 796, 148, 817, 815, 816, 828, 812, 813, 380, -193, 804, 810, 811, 818, 819, 821, 820, 138, 822, 823, 840, 321, 396, 285, 24, 814, 825, 824, 49, 50, 51, 522, 52, 53, 398, -110, 7, 849, 54, 55, -110, 56, -110, -32766, -32766, -32766, 1342, 303, 125, 1123, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, 161, 750, -567, -567, 291, 974, 975, -32766, -32766, -32766, 976, 448, 285, 1276, 1275, 1277, 57, 58, -567, -32766, -32766, 59, 1109, 60, 243, 244, 61, 62, 63, 64, 65, 66, 67, 68, -32766, 28, 265, 69, 446, 523, 490, -346, 449, 1307, 1308, 524, 139, 849, 1051, 450, 321, 1305, 42, 20, 525, 934, 526, 934, 527, 74, 528, -568, 698, 529, 530, 321, 386, 387, 44, 45, 452, 383, 382, 1054, 46, 531, 430, 974, 975, 451, 372, 339, 976, 1281, 855, 725, 934, 1267, 759, 758, -32766, 970, 533, 534, 535, 149, 934, 281, 699, -78, -566, 1274, 102, 103, 537, 538, -193, 1293, 1294, 1295, 1296, 1298, 1290, 1291, 295, 1054, 726, 466, 467, 468, 1297, 1292, 700, 701, 1276, 1275, 1277, 296, -568, -568, 70, -153, -153, -153, 316, 317, 321, 1272, 924, 290, 924, 1276, 1275, 1277, -568, 1051, -153, 281, -153, 1150, -153, 81, -153, 740, 151, 321, -574, 152, 759, 758, -32766, 1053, 381, 876, 849, 877, 153, -566, -566, 924, 1054, 1051, 155, 974, 975, -606, 491, -606, 532, 924, 1276, 1275, 1277, -566, 33, 1054, 910, 970, -110, -110, -110, 28, 266, -58, 281, -573, 1054, -32766, -32766, -110, -110, 665, 21, 849, -110, -57, -564, 1305, 684, 685, 147, 413, 123, -110, 384, 385, 124, 936, 135, 936, 136, 720, -32766, 720, -153, 142, 48, 32, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 390, 391, 1267, 296, 759, 758, 74, 936, 156, 934, 158, 720, 321, -4, 934, 159, 934, 936, 160, 537, 538, 720, 1293, 1294, 1295, 1296, 1298, 1290, 1291, 1183, 1185, 934, -564, -564, -565, 1297, 1292, 759, 758, 727, -564, -32766, 656, 657, -306, 72, 730, 1274, -564, -87, 317, 321, 299, 300, -32766, -32766, -32766, -84, -32766, -78, -32766, 737, -32766, -73, -72, -32766, -71, -70, 379, -69, -32766, -32766, -32766, -68, -32766, -67, -32766, -32766, -66, -65, 1274, -46, -32766, 427, 28, 265, -18, -32766, -32766, -32766, 140, -32766, 924, -32766, -32766, -32766, 849, 924, -32766, 924, 1305, -565, -565, -32766, -32766, -32766, 274, -564, -564, -32766, -32766, 282, 736, 739, 924, -32766, 427, -565, 933, 381, 145, 443, 286, -564, 951, 73, 294, -32766, -302, -572, 974, 975, 279, 280, 283, 532, 1267, 28, 266, 284, 329, 275, 109, 536, 970, -110, -110, -110, 287, 849, 292, 293, 840, 1305, 538, 694, 1293, 1294, 1295, 1296, 1298, 1290, 1291, 709, 144, 587, 711, 11, 10, 1297, 1292, 991, 849, 1141, 473, 720, 936, -32766, 936, 72, 720, -4, 720, 1388, 317, 321, -50, 970, 672, 1267, 687, 666, 501, 936, 971, 301, 308, 720, 671, 1312, 302, 1314, -32766, 688, 953, -530, -520, 538, 40, 1293, 1294, 1295, 1296, 1298, 1290, 1291, 848, 41, 8, 137, 654, 27, 1297, 1292, 304, 34, 593, 620, 296, -32766, 0, 0, 72, 0, 0, 1274, 0, 317, 321, 0, 0, 0, -32766, -32766, -32766, -276, -32766, 0, -32766, 0, -32766, 0, 0, -32766, 0, 0, 0, 0, -32766, -32766, -32766, 934, -32766, 0, -32766, -32766, 0, 0, 1274, 378, -32766, 427, 745, -600, 412, -32766, -32766, -32766, 746, -32766, 868, -32766, -32766, -32766, 934, 915, -32766, 1015, 992, 999, 989, -32766, -32766, -32766, 1000, -32766, 913, -32766, -32766, 987, 1112, 1274, 1115, -32766, 427, 1116, 1113, 1152, -32766, -32766, -32766, 1114, -32766, 1120, -32766, -32766, -32766, 1302, 860, -32766, 1329, 1346, 1379, 496, -32766, -32766, -32766, 659, -32766, -599, -32766, -32766, -598, -574, 1274, 600, -32766, 427, -573, -572, -571, -32766, -32766, -32766, 924, -32766, -514, -32766, -32766, -32766, 1, 29, -32766, -274, 30, 39, 43, -32766, -32766, -32766, -251, -251, -251, -32766, -32766, 71, 381, 924, 75, -32766, 427, 76, 77, 78, 1281, 79, 80, 974, 975, 141, 150, -32766, 532, -250, -250, -250, -273, 154, 241, 381, 910, 970, -110, -110, -110, 325, 360, 361, 362, 363, 974, 975, 364, 365, -16, 532, 366, 367, 368, 369, 370, 373, 444, 910, 970, -110, -110, -110, -32766, 13, 565, 371, 1306, 936, 1274, 14, 416, 720, -251, 15, 16, -32766, -32766, -32766, 18, -32766, 354, -32766, 411, -32766, 492, 493, -32766, 500, 503, 504, 936, -32766, -32766, -32766, 720, -250, 505, -32766, -32766, 849, 506, 510, 511, -32766, 427, 512, 519, 598, 704, 1080, 1223, 1303, 1079, 1060, 1262, -32766, 1056, -278, -102, 12, 17, 22, 312, 410, 612, 617, 645, 710, 1227, 1280, 1224, 1358, 0, 315, -110, -110, 375, 721, 724, -110, 728, 729, 731, 732, 733, 734, 738, 750, -110, 723, 751, 0, 742, 911, 1383, 1385, 0, -32766, 871, 870, 964, 1007, 1384, 963, 961, 962, 965, 1255, 944, 954, 942, 1151, 1147, 1101, 997, 998, 643, 1382, 1340, 296, 1355, 0, 74, 1240, 321, 0, 0, 0, 321); - protected array $actionCheck = array(2, 3, 4, 5, 6, 7, 1, 9, 10, 11, 12, 13, 82, 31, 116, 85, 9, 10, 11, 0, 80, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 9, 10, 11, 1, 37, 38, 30, 140, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 31, 30, 1, 70, 57, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 106, 107, 80, 71, 72, 73, 74, 75, 76, 77, 116, 80, 80, 97, 8, 151, 152, 70, 30, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 137, 138, 8, 126, 127, 128, 129, 14, 131, 132, 133, 134, 135, 136, 8, 8, 139, 140, 141, 142, 143, 144, 145, 70, 147, 148, 106, 160, 108, 137, 138, 154, 155, 156, 167, 158, 160, 2, 3, 4, 5, 6, 7, 166, 9, 10, 11, 12, 13, 116, 8, 167, 119, 120, 121, 122, 123, 124, 125, 9, 10, 11, 163, 51, 52, 53, 54, 55, 106, 57, 108, 116, 37, 38, 141, 163, 9, 10, 11, 159, 30, 69, 32, 33, 34, 35, 36, 37, 38, 8, 137, 138, 57, 9, 10, 11, 141, 30, 165, 32, 33, 34, 35, 36, 1, 8, 71, 72, 73, 74, 75, 76, 77, 8, 30, 80, 32, 33, 34, 35, 165, 8, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 73, 166, 166, 126, 127, 128, 129, 80, 131, 132, 133, 134, 135, 136, 1, 166, 139, 140, 141, 142, 143, 144, 145, 85, 147, 148, 163, 9, 10, 11, 167, 154, 155, 156, 8, 158, 2, 3, 4, 5, 6, 7, 97, 9, 10, 11, 12, 13, 30, 122, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 16, 57, 9, 10, 11, 44, 45, 46, 47, 48, 49, 50, 9, 69, 150, 52, 8, 57, 9, 10, 11, 82, 1, 30, 1, 32, 33, 34, 8, 8, 1, 71, 72, 73, 74, 75, 76, 77, 8, 30, 80, 32, 33, 80, 8, 1, 83, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 1, 80, 70, 126, 127, 128, 129, 14, 131, 132, 133, 134, 135, 136, 8, 8, 139, 140, 141, 142, 143, 144, 145, 167, 147, 148, 80, 171, 8, 30, 101, 154, 155, 156, 2, 3, 4, 5, 6, 7, 106, 101, 108, 82, 12, 13, 106, 15, 108, 9, 10, 11, 1, 113, 14, 126, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 14, 167, 137, 138, 30, 117, 118, 9, 10, 11, 122, 8, 30, 159, 160, 161, 51, 52, 153, 9, 10, 56, 168, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 140, 70, 71, 72, 73, 74, 31, 168, 8, 78, 79, 80, 167, 82, 116, 8, 171, 86, 87, 88, 89, 1, 91, 1, 93, 165, 95, 70, 80, 98, 99, 171, 106, 107, 103, 104, 105, 106, 107, 141, 109, 110, 116, 117, 118, 8, 115, 116, 122, 1, 8, 31, 1, 122, 37, 38, 116, 131, 127, 128, 129, 14, 1, 165, 116, 16, 70, 80, 49, 50, 139, 140, 166, 142, 143, 144, 145, 146, 147, 148, 149, 141, 31, 132, 133, 134, 155, 156, 140, 141, 159, 160, 161, 162, 137, 138, 165, 75, 76, 77, 169, 170, 171, 116, 84, 165, 84, 159, 160, 161, 153, 116, 90, 165, 92, 163, 94, 167, 96, 167, 14, 171, 165, 14, 37, 38, 116, 140, 106, 106, 82, 108, 14, 137, 138, 84, 141, 116, 14, 117, 118, 164, 167, 166, 122, 84, 159, 160, 161, 153, 14, 141, 130, 131, 132, 133, 134, 70, 71, 16, 165, 165, 141, 51, 52, 117, 118, 75, 76, 82, 122, 16, 70, 86, 75, 76, 101, 102, 16, 131, 106, 107, 16, 163, 16, 163, 16, 167, 140, 167, 168, 16, 70, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 106, 107, 122, 162, 37, 38, 165, 163, 16, 1, 16, 167, 171, 0, 1, 16, 1, 163, 16, 139, 140, 167, 142, 143, 144, 145, 146, 147, 148, 59, 60, 1, 137, 138, 70, 155, 156, 37, 38, 31, 70, 74, 111, 112, 35, 165, 31, 80, 153, 31, 170, 171, 137, 138, 87, 88, 89, 31, 91, 31, 93, 31, 95, 31, 31, 98, 31, 31, 153, 31, 103, 104, 105, 31, 74, 31, 109, 110, 31, 31, 80, 31, 115, 116, 70, 71, 31, 87, 88, 89, 31, 91, 84, 93, 127, 95, 82, 84, 98, 84, 86, 137, 138, 103, 104, 105, 31, 137, 138, 109, 110, 31, 31, 31, 84, 115, 116, 153, 31, 106, 31, 108, 37, 153, 38, 158, 113, 127, 35, 165, 117, 118, 35, 35, 35, 122, 122, 70, 71, 35, 35, 57, 69, 130, 131, 132, 133, 134, 37, 82, 37, 37, 80, 86, 140, 77, 142, 143, 144, 145, 146, 147, 148, 80, 70, 89, 92, 154, 97, 155, 156, 163, 82, 82, 97, 167, 163, 85, 163, 165, 167, 168, 167, 83, 170, 171, 31, 131, 100, 122, 94, 90, 97, 163, 131, 135, 135, 167, 96, 150, 136, 150, 140, 100, 158, 153, 153, 140, 163, 142, 143, 144, 145, 146, 147, 148, 159, 163, 153, 31, 113, 153, 155, 156, 114, 167, 157, 157, 162, 74, -1, -1, 165, -1, -1, 80, -1, 170, 171, -1, -1, -1, 87, 88, 89, 166, 91, -1, 93, -1, 95, -1, -1, 98, -1, -1, -1, -1, 103, 104, 105, 1, 74, -1, 109, 110, -1, -1, 80, 153, 115, 116, 163, 165, 168, 87, 88, 89, 163, 91, 163, 93, 127, 95, 1, 163, 98, 163, 163, 163, 163, 103, 104, 105, 163, 74, 163, 109, 110, 163, 163, 80, 163, 115, 116, 163, 163, 163, 87, 88, 89, 163, 91, 163, 93, 127, 95, 164, 164, 98, 164, 164, 164, 102, 103, 104, 105, 164, 74, 165, 109, 110, 165, 165, 80, 81, 115, 116, 165, 165, 165, 87, 88, 89, 84, 91, 165, 93, 127, 95, 165, 165, 98, 166, 165, 165, 165, 103, 104, 105, 100, 101, 102, 109, 110, 165, 106, 84, 165, 115, 116, 165, 165, 165, 1, 165, 165, 117, 118, 165, 165, 127, 122, 100, 101, 102, 166, 165, 165, 106, 130, 131, 132, 133, 134, 165, 165, 165, 165, 165, 117, 118, 165, 165, 31, 122, 165, 165, 165, 165, 165, 165, 165, 130, 131, 132, 133, 134, 74, 166, 165, 165, 170, 163, 80, 166, 168, 167, 168, 166, 166, 87, 88, 89, 166, 91, 166, 93, 166, 95, 166, 166, 98, 166, 166, 166, 163, 103, 104, 105, 167, 168, 166, 109, 110, 82, 166, 166, 166, 115, 116, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 127, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, -1, 167, 117, 118, 167, 167, 167, 122, 167, 167, 167, 167, 167, 167, 167, 167, 131, 167, 167, -1, 168, 168, 168, 168, -1, 140, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 162, 168, -1, 165, 169, 171, -1, -1, -1, 171); - protected array $actionBase = array(0, -2, 156, 559, 757, 1004, 1027, 485, 292, 357, -60, -12, 588, 759, 759, 774, 759, 557, 752, 892, 598, 598, 598, 827, 313, 313, 827, 313, 711, 711, 711, 711, 744, 744, 965, 965, 998, 932, 899, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 33, 20, 224, 1080, 673, 1056, 1062, 1058, 1063, 1054, 1053, 1057, 1059, 1064, 1109, 1110, 833, 1108, 1112, 1060, 907, 1055, 1061, 888, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 356, 476, 513, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 624, 624, 22, 22, 22, 362, 811, 758, 811, 811, 811, 811, 811, 811, 811, 811, 346, 205, 188, 714, 171, 171, 7, 7, 7, 7, 7, 376, 1117, 54, 585, 585, 314, 314, 314, 314, 365, 554, 83, 435, 397, 556, 477, 463, 532, 532, 558, 558, 76, 76, 558, 558, 558, 133, 133, 547, 547, 547, 547, 41, 217, 806, 382, 382, 382, 382, 806, 806, 806, 806, 795, 996, 806, 806, 806, 494, 533, 708, 649, 649, 560, -70, -70, 560, 800, -70, 487, 975, 316, 982, -102, 807, -40, 514, -102, 1000, 368, 639, 639, 659, 639, 639, 639, 801, 611, 801, 1052, 836, 836, 794, 776, 894, 1082, 1065, 832, 1106, 847, 1107, 1083, 489, 488, -16, 13, 74, 772, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1113, 554, 1052, -3, 1104, 1105, 1113, 1113, 1113, 554, 554, 554, 554, 554, 554, 554, 554, 799, 554, 554, 675, -3, 629, 636, -3, 849, 554, 797, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 512, 33, 33, 20, 5, 5, 33, 142, 52, 5, 5, 5, 337, 5, 33, 33, 33, 611, 828, 813, 638, -18, 814, 443, 828, 828, 828, 115, 114, 128, 753, 837, 370, 816, 816, 835, 929, 929, 816, 834, 816, 835, 816, 816, 929, 929, 810, 929, 202, 506, 373, 442, 537, 929, 234, 816, 816, 816, 816, 805, 929, 72, 544, 816, 226, 218, 816, 816, 805, 804, 824, 808, 929, 929, 929, 805, 389, 808, 808, 808, 853, 859, 851, 819, 361, 305, 579, 163, 830, 819, 819, 816, 456, 851, 819, 851, 819, 790, 819, 819, 819, 851, 819, 834, 383, 819, 736, 574, 127, 819, 816, 19, 944, 947, 762, 950, 934, 951, 991, 952, 954, 1070, 925, 967, 935, 955, 999, 933, 930, 831, 699, 703, 809, 796, 919, 817, 817, 817, 912, 917, 817, 817, 817, 817, 817, 817, 817, 817, 699, 897, 860, 820, 976, 705, 707, 1041, 793, 1085, 1114, 975, 944, 954, 770, 935, 955, 933, 930, 792, 791, 786, 788, 782, 780, 777, 779, 803, 1043, 958, 789, 712, 1012, 977, 1084, 1066, 978, 981, 1016, 1044, 861, 1045, 1086, 838, 1087, 1090, 898, 985, 1071, 817, 911, 852, 900, 982, 918, 699, 901, 1046, 997, 802, 1018, 1019, 1069, 821, 844, 902, 1091, 986, 987, 988, 1073, 1074, 798, 1003, 823, 1021, 839, 850, 1022, 1023, 1030, 1034, 1075, 1092, 1076, 908, 1077, 866, 845, 931, 846, 1093, 429, 843, 848, 858, 990, 584, 974, 1078, 1002, 1094, 1035, 1036, 1039, 1095, 1096, 959, 868, 1007, 840, 1008, 964, 869, 870, 643, 857, 1047, 841, 842, 855, 646, 655, 1097, 1098, 1099, 966, 825, 822, 871, 875, 1048, 829, 1050, 1100, 661, 877, 1101, 1042, 738, 743, 586, 692, 680, 746, 818, 1079, 812, 854, 815, 989, 743, 826, 880, 1102, 881, 883, 886, 1040, 887, 1014, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 468, 468, 468, 468, 468, 313, 313, 313, 313, 313, 468, 468, 468, 468, 468, 468, 468, 313, 468, 468, 468, 313, 0, 0, 313, 0, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 524, 524, 297, 297, 297, 297, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 297, 297, 297, 0, 297, 297, 297, 297, 297, 297, 297, 810, 524, 524, 524, 524, 133, 133, 133, 133, -95, -95, -95, 524, 524, 133, 524, 810, 524, 524, 524, 524, 524, 524, 524, 524, 524, 0, 0, 524, 524, 524, 524, -3, -70, 524, 834, 834, 834, 834, 524, 524, 524, 524, -70, -70, 524, 524, 524, 0, 0, 0, 133, 133, -3, 0, 0, -3, 391, 0, 834, 206, 834, 206, 524, 391, 810, 374, 524, 489, 0, 0, 0, 0, 0, 0, 0, -3, 834, -3, 554, -70, -70, 554, 554, 5, 33, 374, 612, 612, 612, 612, 33, 0, 0, 0, 0, 0, 611, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 834, 0, 810, 0, 810, 810, 834, 834, 834, 0, 0, 0, 0, 0, 0, 0, 0, 929, 0, 0, 0, 0, 0, 0, 0, 834, 0, 929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 817, 821, 0, 0, 821, 0, 817, 817, 817, 0, 0, 0, 857, 829); - protected array $actionDefault = array(3, 32767, 102, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 100, 32767, 618, 618, 618, 618, 32767, 32767, 255, 102, 32767, 32767, 489, 406, 406, 406, 32767, 32767, 562, 562, 562, 562, 562, 32767, 32767, 32767, 32767, 32767, 32767, 489, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 36, 7, 8, 10, 11, 49, 17, 328, 100, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 393, 611, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 493, 472, 473, 475, 476, 405, 563, 617, 331, 614, 333, 404, 145, 343, 334, 243, 259, 494, 260, 495, 498, 499, 216, 390, 149, 150, 436, 490, 438, 488, 492, 437, 411, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 409, 410, 491, 32767, 32767, 469, 468, 467, 434, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 435, 439, 442, 408, 440, 441, 458, 459, 456, 457, 460, 32767, 32767, 320, 32767, 32767, 461, 462, 463, 464, 371, 195, 369, 32767, 32767, 443, 320, 111, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 449, 450, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 100, 506, 556, 466, 444, 445, 32767, 531, 32767, 102, 32767, 533, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 558, 431, 433, 526, 612, 412, 615, 32767, 519, 100, 195, 32767, 532, 195, 195, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 557, 32767, 625, 519, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 32767, 195, 110, 32767, 110, 110, 32767, 32767, 100, 195, 195, 195, 195, 195, 195, 195, 195, 534, 195, 195, 190, 32767, 269, 271, 102, 580, 195, 536, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 393, 32767, 32767, 32767, 32767, 519, 454, 138, 32767, 521, 138, 564, 446, 447, 448, 564, 564, 564, 316, 293, 32767, 32767, 32767, 32767, 534, 534, 100, 100, 100, 100, 32767, 32767, 32767, 32767, 111, 505, 99, 99, 99, 99, 99, 103, 101, 32767, 32767, 32767, 32767, 224, 32767, 101, 99, 32767, 101, 101, 32767, 32767, 224, 226, 213, 228, 32767, 584, 585, 224, 101, 228, 228, 228, 248, 248, 508, 322, 101, 99, 101, 101, 197, 322, 322, 32767, 101, 508, 322, 508, 322, 199, 322, 322, 322, 508, 322, 32767, 101, 322, 215, 99, 99, 322, 32767, 32767, 32767, 32767, 521, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 223, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 551, 32767, 569, 582, 452, 453, 455, 568, 566, 477, 478, 479, 480, 481, 482, 483, 485, 613, 32767, 525, 32767, 32767, 32767, 342, 32767, 623, 32767, 32767, 32767, 9, 74, 514, 42, 43, 51, 57, 540, 541, 542, 543, 537, 538, 544, 539, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 624, 32767, 564, 32767, 32767, 32767, 32767, 451, 546, 590, 32767, 32767, 565, 616, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 138, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 551, 32767, 136, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 547, 32767, 32767, 32767, 564, 32767, 32767, 32767, 32767, 318, 315, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 564, 32767, 32767, 32767, 32767, 32767, 295, 32767, 312, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 389, 521, 298, 300, 301, 32767, 32767, 32767, 32767, 365, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 152, 152, 3, 3, 345, 152, 152, 152, 345, 345, 152, 345, 345, 345, 152, 152, 152, 152, 152, 152, 152, 281, 185, 263, 266, 248, 248, 152, 357, 152, 391, 391, 400); - protected array $goto = array(194, 194, 1052, 487, 705, 278, 278, 278, 278, 990, 489, 548, 548, 907, 865, 907, 907, 548, 714, 548, 548, 548, 548, 548, 548, 548, 548, 166, 166, 166, 166, 218, 195, 191, 191, 176, 178, 213, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 186, 187, 188, 189, 190, 215, 213, 216, 545, 546, 428, 547, 550, 551, 552, 553, 554, 555, 556, 557, 1169, 167, 168, 169, 193, 170, 171, 172, 164, 173, 174, 175, 177, 212, 214, 217, 237, 240, 251, 252, 253, 255, 256, 257, 258, 259, 260, 261, 267, 268, 269, 270, 276, 288, 289, 313, 314, 434, 435, 436, 607, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 186, 187, 188, 189, 190, 215, 1169, 196, 197, 198, 199, 238, 179, 180, 200, 181, 201, 197, 182, 239, 196, 163, 202, 203, 183, 204, 205, 206, 184, 207, 208, 165, 209, 210, 211, 185, 869, 560, 1083, 560, 560, 592, 1100, 475, 475, 744, 646, 648, 609, 560, 668, 432, 475, 621, 692, 695, 1025, 703, 712, 1021, 719, 558, 558, 558, 558, 470, 613, 866, 663, 664, 463, 681, 682, 683, 1218, 984, 984, 984, 984, 247, 247, 463, 978, 985, 355, 355, 355, 355, 867, 923, 918, 919, 932, 875, 920, 872, 921, 922, 873, 350, 926, 879, 1126, 1154, 1127, 878, 245, 245, 245, 245, 242, 248, 841, 1106, 1102, 1103, 438, 670, 402, 405, 610, 614, 433, 336, 332, 333, 335, 602, 437, 337, 439, 647, 426, 1273, 1052, 1273, 1273, 342, 900, 456, 456, 348, 456, 456, 1052, 1273, 882, 1052, 520, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 343, 342, 1052, 1052, 1052, 1052, 894, 465, 1273, 881, 508, 599, 509, 1273, 1273, 1273, 1273, 358, 515, 1273, 1273, 1273, 1354, 1354, 1354, 1354, 862, 358, 358, 1372, 1372, 630, 667, 895, 883, 1088, 1092, 940, 358, 358, 1362, 941, 358, 1011, 1372, 1389, 993, 956, 447, 956, 619, 633, 636, 637, 638, 639, 660, 661, 662, 716, 718, 564, 569, 562, 358, 358, 1375, 1375, 400, 983, 1055, 1055, 690, 967, 597, 862, 1047, 1063, 1064, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 1138, 899, 456, 669, 456, 456, 1058, 1057, 322, 562, 569, 594, 595, 324, 605, 611, 1166, 626, 627, 1028, 1028, 1061, 1062, 632, 632, 25, 320, 306, 1334, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 702, 1349, 1350, 1014, 843, 5, 986, 6, 743, 445, 422, 561, 1023, 1018, 1076, 1345, 702, 1345, 1345, 702, 603, 624, 1323, 1323, 691, 250, 250, 1345, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 563, 589, 927, 564, 928, 563, 675, 589, 859, 403, 469, 1356, 1356, 1356, 1356, 338, 887, 271, 319, 625, 319, 319, 478, 606, 479, 480, 973, 351, 352, 409, 892, 1320, 1320, 1380, 1381, 1341, 862, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 982, 417, 713, 1268, 1264, 414, 415, 1033, 884, 440, 679, 890, 680, 1149, 419, 420, 421, 1089, 693, 847, 1266, 423, 440, 747, 1043, 346, 485, 1093, 1059, 1059, 330, 484, 1347, 1348, 1140, 674, 1070, 1066, 1067, 1091, 896, 995, 549, 549, 377, 1343, 1343, 1091, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 1269, 1270, 0, 1256, 0, 847, 0, 847, 615, 857, 0, 945, 1156, 640, 642, 644, 1256, 0, 0, 0, 0, 608, 1119, 1030, 0, 0, 752, 752, 1271, 1331, 1332, 886, 717, 673, 1009, 0, 0, 516, 708, 880, 1117, 1249, 959, 0, 0, 0, 1250, 1253, 960, 0, 1254, 1263); - protected array $gotoCheck = array(42, 42, 73, 84, 73, 23, 23, 23, 23, 49, 84, 162, 162, 25, 25, 25, 25, 162, 9, 162, 162, 162, 162, 162, 162, 162, 162, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 15, 19, 128, 19, 19, 48, 15, 154, 154, 48, 48, 48, 131, 19, 48, 13, 154, 13, 48, 48, 48, 48, 48, 48, 48, 107, 107, 107, 107, 156, 107, 26, 86, 86, 19, 86, 86, 86, 156, 19, 19, 19, 19, 5, 5, 19, 19, 19, 24, 24, 24, 24, 27, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 97, 15, 15, 146, 146, 146, 15, 5, 5, 5, 5, 5, 5, 6, 15, 15, 15, 66, 66, 59, 59, 59, 59, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 43, 73, 73, 73, 73, 174, 45, 23, 23, 185, 23, 23, 73, 73, 35, 73, 76, 73, 73, 73, 73, 73, 73, 73, 73, 73, 174, 174, 73, 73, 73, 73, 35, 83, 73, 35, 160, 178, 160, 73, 73, 73, 73, 14, 160, 73, 73, 73, 9, 9, 9, 9, 22, 14, 14, 188, 188, 56, 56, 16, 16, 16, 16, 73, 14, 14, 187, 73, 14, 103, 188, 14, 16, 9, 83, 9, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 14, 76, 76, 14, 14, 188, 188, 62, 16, 89, 89, 89, 89, 104, 22, 89, 89, 89, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 16, 16, 23, 64, 23, 23, 119, 119, 76, 76, 76, 76, 76, 76, 76, 76, 155, 76, 76, 107, 107, 120, 120, 108, 108, 76, 175, 175, 14, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 7, 184, 184, 50, 7, 46, 50, 46, 50, 113, 14, 50, 50, 50, 115, 131, 7, 131, 131, 7, 2, 2, 176, 176, 117, 5, 5, 131, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 9, 9, 65, 14, 65, 9, 121, 9, 18, 9, 9, 131, 131, 131, 131, 29, 39, 24, 24, 80, 24, 24, 9, 9, 9, 9, 92, 97, 97, 28, 9, 177, 177, 9, 9, 131, 22, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 93, 93, 93, 20, 166, 82, 82, 110, 37, 118, 82, 9, 82, 153, 82, 82, 82, 130, 82, 12, 14, 82, 118, 99, 114, 82, 157, 133, 118, 118, 9, 182, 182, 182, 149, 118, 118, 118, 118, 131, 41, 96, 179, 179, 138, 131, 131, 131, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 20, 20, -1, 20, -1, 12, -1, 12, 17, 20, -1, 17, 17, 85, 85, 85, 20, -1, -1, -1, -1, 8, 8, 17, -1, -1, 24, 24, 20, 20, 20, 17, 8, 17, 17, -1, -1, 8, 8, 17, 8, 79, 79, -1, -1, -1, 79, 79, 79, -1, 79, 17); - protected array $gotoBase = array(0, 0, -289, 0, 0, 203, 227, 406, 569, 8, 0, 0, 223, -162, 5, -186, -143, 93, 152, -101, 102, 0, 31, 2, 206, 10, 188, 209, 142, 172, 0, 0, 0, 0, 0, -104, 0, 166, 0, 149, 0, 90, -1, 234, 0, 237, -329, 0, -555, -9, 404, 0, 0, 0, 0, 0, 274, 0, 0, 198, 0, 0, 309, 0, 141, 439, 6, 0, 0, 0, 0, 0, 0, -5, 0, 0, 1, 0, 0, 183, 146, -28, 4, 12, -475, 82, -535, 0, 0, 74, 0, 0, 151, 196, 0, 0, 89, -267, 0, 108, 0, 0, 0, 291, 314, 0, 0, 158, 162, 0, 131, 0, 0, 145, 100, 153, 0, 156, 243, 101, 112, 167, 0, 0, 0, 0, 0, 0, 161, 0, 135, 165, 0, 76, 0, 0, 0, 0, -209, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 81, 0, 0, 0, 157, 134, 148, -76, 77, 0, 0, -210, 0, -224, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, -33, 84, 200, 247, 265, 305, 0, 0, 231, 0, 36, 236, 0, 292, 7, 0, 0); - protected array $gotoDefault = array(-32768, 521, 754, 4, 755, 949, 830, 839, 585, 539, 715, 347, 634, 429, 1339, 925, 1155, 604, 858, 1282, 1288, 464, 861, 327, 741, 937, 908, 909, 406, 393, 874, 404, 658, 635, 502, 893, 460, 885, 494, 888, 459, 897, 162, 425, 518, 901, 3, 904, 567, 935, 988, 394, 912, 395, 686, 914, 588, 916, 917, 401, 407, 408, 1160, 596, 631, 929, 254, 590, 930, 392, 931, 939, 397, 399, 696, 474, 513, 507, 418, 1121, 591, 618, 655, 453, 481, 629, 641, 628, 488, 441, 424, 326, 972, 980, 495, 472, 994, 349, 1002, 749, 1168, 649, 497, 1010, 650, 1017, 1020, 540, 541, 486, 1032, 264, 1035, 498, 1044, 23, 676, 1049, 1050, 677, 651, 1072, 652, 678, 653, 1074, 471, 586, 1082, 461, 1090, 1328, 462, 1094, 262, 1097, 277, 353, 376, 442, 1104, 1105, 9, 1111, 706, 707, 19, 273, 517, 1139, 697, 1145, 272, 1148, 458, 1167, 457, 1237, 1239, 568, 499, 1257, 310, 1260, 689, 514, 1265, 454, 1330, 455, 542, 482, 334, 543, 1373, 305, 356, 331, 559, 311, 357, 544, 483, 1336, 1344, 328, 31, 1363, 1374, 601, 623); - protected array $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 25, 25, 50, 69, 69, 72, 72, 71, 70, 70, 63, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, 80, 26, 26, 27, 27, 27, 27, 27, 88, 88, 90, 90, 83, 83, 91, 91, 92, 92, 92, 84, 84, 87, 87, 85, 85, 93, 94, 94, 57, 57, 65, 65, 68, 68, 68, 67, 95, 95, 96, 58, 58, 58, 58, 97, 97, 98, 98, 99, 99, 100, 101, 101, 102, 102, 103, 103, 55, 55, 51, 51, 105, 53, 53, 106, 52, 52, 54, 54, 64, 64, 64, 64, 81, 81, 109, 109, 111, 111, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 115, 115, 115, 115, 89, 89, 118, 118, 118, 119, 119, 116, 116, 120, 120, 122, 122, 123, 123, 117, 124, 124, 121, 125, 125, 125, 125, 113, 113, 82, 82, 82, 20, 20, 20, 127, 126, 126, 128, 128, 128, 128, 60, 129, 129, 130, 61, 132, 132, 133, 133, 134, 134, 86, 135, 135, 135, 135, 135, 135, 135, 135, 141, 141, 142, 142, 143, 143, 143, 143, 143, 144, 145, 145, 140, 140, 136, 136, 139, 139, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 137, 148, 148, 150, 149, 149, 138, 138, 114, 114, 151, 151, 153, 153, 153, 152, 152, 62, 104, 154, 154, 56, 56, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 161, 162, 162, 163, 155, 155, 160, 160, 164, 165, 165, 166, 167, 168, 168, 168, 168, 19, 19, 73, 73, 73, 73, 156, 156, 156, 156, 170, 170, 159, 159, 159, 157, 157, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 108, 179, 179, 179, 179, 158, 158, 158, 158, 158, 158, 158, 158, 59, 59, 173, 173, 173, 173, 173, 180, 180, 169, 169, 169, 169, 181, 181, 181, 181, 181, 74, 74, 66, 66, 66, 66, 131, 131, 131, 131, 184, 183, 172, 172, 172, 172, 172, 172, 171, 171, 171, 182, 182, 182, 182, 107, 178, 186, 186, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 175, 175, 175, 175, 174, 189, 188, 188, 188, 188, 188, 188, 188, 188, 190, 190, 190, 190); - protected array $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, 0, 1, 1, 1, 1, 4, 3, 5, 4, 3, 4, 1, 3, 1, 1, 8, 7, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, 2, 1, 1, 1, 1, 0, 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, 1, 3, 1, 1, 1, 1, 8, 9, 7, 8, 7, 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, 0, 2, 1, 1, 1, 1, 1, 1, 1, 7, 9, 6, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, 1, 1, 3, 2, 0, 1, 5, 7, 5, 6, 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 0, 2, 0, 3, 5, 8, 1, 3, 3, 0, 2, 2, 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, 3, 2, 2, 1, 1, 0, 4, 2, 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 4, 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 4, 1, 4, 4, 0, 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, 1, 4, 3, 3, 3, 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, 6, 3, 1, 1, 2, 1); - protected function initReduceCallbacks(): void - { - $this->reduceCallbacks = [0 => null, 1 => static function ($self, $stackPos) { - $self->semValue = $self->handleNamespaces($self->semStack[$stackPos - (1 - 1)]); - }, 2 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (2 - 2)] !== null) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - } - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 3 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 4 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos); - if ($nop !== null) { - $self->semStack[$stackPos - (1 - 1)][] = $nop; - } - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 5 => null, 6 => null, 7 => null, 8 => null, 9 => null, 10 => null, 11 => null, 12 => null, 13 => null, 14 => null, 15 => null, 16 => null, 17 => null, 18 => null, 19 => null, 20 => null, 21 => null, 22 => null, 23 => null, 24 => null, 25 => null, 26 => null, 27 => null, 28 => null, 29 => null, 30 => null, 31 => null, 32 => null, 33 => null, 34 => null, 35 => null, 36 => null, 37 => null, 38 => null, 39 => null, 40 => null, 41 => null, 42 => null, 43 => null, 44 => null, 45 => null, 46 => null, 47 => null, 48 => null, 49 => null, 50 => null, 51 => null, 52 => null, 53 => null, 54 => null, 55 => null, 56 => null, 57 => null, 58 => null, 59 => null, 60 => null, 61 => null, 62 => null, 63 => null, 64 => null, 65 => null, 66 => null, 67 => null, 68 => null, 69 => null, 70 => null, 71 => null, 72 => null, 73 => null, 74 => null, 75 => null, 76 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - if ($self->semValue === "emitError(new Error('Cannot use "getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]))); - } - }, 77 => null, 78 => null, 79 => null, 80 => null, 81 => null, 82 => null, 83 => null, 84 => null, 85 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 86 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 87 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 88 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 89 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 90 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 91 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 92 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 93 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 94 => null, 95 => static function ($self, $stackPos) { - $self->semValue = new Name(substr($self->semStack[$stackPos - (1 - 1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 96 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable(substr($self->semStack[$stackPos - (1 - 1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 97 => static function ($self, $stackPos) { - /* nothing */ - }, 98 => static function ($self, $stackPos) { - /* nothing */ - }, 99 => static function ($self, $stackPos) { - /* nothing */ - }, 100 => static function ($self, $stackPos) { - $self->emitError(new Error('A trailing comma is not allowed here', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]))); - }, 101 => null, 102 => null, 103 => static function ($self, $stackPos) { - $self->semValue = new Node\Attribute($self->semStack[$stackPos - (1 - 1)], [], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 104 => static function ($self, $stackPos) { - $self->semValue = new Node\Attribute($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 105 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 106 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 107 => static function ($self, $stackPos) { - $self->semValue = new Node\AttributeGroup($self->semStack[$stackPos - (4 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 108 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 109 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 110 => static function ($self, $stackPos) { - $self->semValue = []; - }, 111 => null, 112 => null, 113 => null, 114 => null, 115 => static function ($self, $stackPos) { - $self->semValue = new Stmt\HaltCompiler($self->handleHaltCompiler(), $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 116 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos - (3 - 2)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); - $self->checkNamespace($self->semValue); - }, 117 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos - (5 - 2)], $self->semStack[$stackPos - (5 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $self->checkNamespace($self->semValue); - }, 118 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_(null, $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $self->checkNamespace($self->semValue); - }, 119 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Use_($self->semStack[$stackPos - (3 - 2)], Stmt\Use_::TYPE_NORMAL, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 120 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Use_($self->semStack[$stackPos - (4 - 3)], $self->semStack[$stackPos - (4 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 121 => null, 122 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Const_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 123 => static function ($self, $stackPos) { - $self->semValue = Stmt\Use_::TYPE_FUNCTION; - }, 124 => static function ($self, $stackPos) { - $self->semValue = Stmt\Use_::TYPE_CONSTANT; - }, 125 => static function ($self, $stackPos) { - $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos - (8 - 3)], $self->semStack[$stackPos - (8 - 6)], $self->semStack[$stackPos - (8 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 126 => static function ($self, $stackPos) { - $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos - (7 - 2)], $self->semStack[$stackPos - (7 - 5)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 127 => null, 128 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 129 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 130 => null, 131 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 132 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 133 => null, 134 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 135 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 136 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkUseUse($self->semValue, $stackPos - (1 - 1)); - }, 137 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkUseUse($self->semValue, $stackPos - (3 - 3)); - }, 138 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkUseUse($self->semValue, $stackPos - (1 - 1)); - }, 139 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkUseUse($self->semValue, $stackPos - (3 - 3)); - }, 140 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - $self->semValue->type = Stmt\Use_::TYPE_NORMAL; - }, 141 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue->type = $self->semStack[$stackPos - (2 - 1)]; - }, 142 => null, 143 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 144 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 145 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 146 => null, 147 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 148 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 149 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos - (3 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos - (3 - 1)])), $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 150 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos - (3 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos - (3 - 1)])), $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 151 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (2 - 2)] !== null) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - } - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 152 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 153 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos); - if ($nop !== null) { - $self->semStack[$stackPos - (1 - 1)][] = $nop; - } - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 154 => null, 155 => null, 156 => null, 157 => static function ($self, $stackPos) { - throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 158 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Block($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 159 => static function ($self, $stackPos) { - $self->semValue = new Stmt\If_($self->semStack[$stackPos - (7 - 3)], ['stmts' => $self->semStack[$stackPos - (7 - 5)], 'elseifs' => $self->semStack[$stackPos - (7 - 6)], 'else' => $self->semStack[$stackPos - (7 - 7)]], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 160 => static function ($self, $stackPos) { - $self->semValue = new Stmt\If_($self->semStack[$stackPos - (10 - 3)], ['stmts' => $self->semStack[$stackPos - (10 - 6)], 'elseifs' => $self->semStack[$stackPos - (10 - 7)], 'else' => $self->semStack[$stackPos - (10 - 8)]], $self->getAttributes($self->tokenStartStack[$stackPos - (10 - 1)], $self->tokenEndStack[$stackPos])); - }, 161 => static function ($self, $stackPos) { - $self->semValue = new Stmt\While_($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 162 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Do_($self->semStack[$stackPos - (7 - 5)], $self->semStack[$stackPos - (7 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 163 => static function ($self, $stackPos) { - $self->semValue = new Stmt\For_(['init' => $self->semStack[$stackPos - (9 - 3)], 'cond' => $self->semStack[$stackPos - (9 - 5)], 'loop' => $self->semStack[$stackPos - (9 - 7)], 'stmts' => $self->semStack[$stackPos - (9 - 9)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 164 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Switch_($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 165 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Break_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 166 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Continue_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 167 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Return_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 168 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Global_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 169 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Static_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 170 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Echo_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 171 => static function ($self, $stackPos) { - $self->semValue = new Stmt\InlineHTML($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('hasLeadingNewline', $self->inlineHtmlHasLeadingNewline($stackPos - (1 - 1))); - }, 172 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Expression($self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 173 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Unset_($self->semStack[$stackPos - (5 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 174 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos - (7 - 3)], $self->semStack[$stackPos - (7 - 5)][0], ['keyVar' => null, 'byRef' => $self->semStack[$stackPos - (7 - 5)][1], 'stmts' => $self->semStack[$stackPos - (7 - 7)]], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 175 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos - (9 - 3)], $self->semStack[$stackPos - (9 - 7)][0], ['keyVar' => $self->semStack[$stackPos - (9 - 5)], 'byRef' => $self->semStack[$stackPos - (9 - 7)][1], 'stmts' => $self->semStack[$stackPos - (9 - 9)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 176 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos - (6 - 3)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (6 - 4)], $self->tokenEndStack[$stackPos - (6 - 4)])), ['stmts' => $self->semStack[$stackPos - (6 - 6)]], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - }, 177 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Declare_($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 178 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TryCatch($self->semStack[$stackPos - (6 - 3)], $self->semStack[$stackPos - (6 - 5)], $self->semStack[$stackPos - (6 - 6)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkTryCatch($self->semValue); - }, 179 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Goto_($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 180 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Label($self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 181 => static function ($self, $stackPos) { - $self->semValue = null; - /* means: no statement */ - }, 182 => null, 183 => static function ($self, $stackPos) { - $self->semValue = $self->maybeCreateNop($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]); - }, 184 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (1 - 1)] instanceof Stmt\Block) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]->stmts; - } else if ($self->semStack[$stackPos - (1 - 1)] === null) { - $self->semValue = []; - } else { - $self->semValue = [$self->semStack[$stackPos - (1 - 1)]]; - } - }, 185 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 186 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 187 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 188 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 189 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Catch_($self->semStack[$stackPos - (8 - 3)], $self->semStack[$stackPos - (8 - 4)], $self->semStack[$stackPos - (8 - 7)], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 190 => static function ($self, $stackPos) { - $self->semValue = null; - }, 191 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Finally_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 192 => null, 193 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 194 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 195 => static function ($self, $stackPos) { - $self->semValue = \false; - }, 196 => static function ($self, $stackPos) { - $self->semValue = \true; - }, 197 => static function ($self, $stackPos) { - $self->semValue = \false; - }, 198 => static function ($self, $stackPos) { - $self->semValue = \true; - }, 199 => static function ($self, $stackPos) { - $self->semValue = \false; - }, 200 => static function ($self, $stackPos) { - $self->semValue = \true; - }, 201 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 202 => static function ($self, $stackPos) { - $self->semValue = []; - }, 203 => null, 204 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 205 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 206 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Function_($self->semStack[$stackPos - (8 - 3)], ['byRef' => $self->semStack[$stackPos - (8 - 2)], 'params' => $self->semStack[$stackPos - (8 - 5)], 'returnType' => $self->semStack[$stackPos - (8 - 7)], 'stmts' => $self->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 207 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Function_($self->semStack[$stackPos - (9 - 4)], ['byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 6)], 'returnType' => $self->semStack[$stackPos - (9 - 8)], 'stmts' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => $self->semStack[$stackPos - (9 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 208 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Class_($self->semStack[$stackPos - (7 - 2)], ['type' => $self->semStack[$stackPos - (7 - 1)], 'extends' => $self->semStack[$stackPos - (7 - 3)], 'implements' => $self->semStack[$stackPos - (7 - 4)], 'stmts' => $self->semStack[$stackPos - (7 - 6)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkClass($self->semValue, $stackPos - (7 - 2)); - }, 209 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Class_($self->semStack[$stackPos - (8 - 3)], ['type' => $self->semStack[$stackPos - (8 - 2)], 'extends' => $self->semStack[$stackPos - (8 - 4)], 'implements' => $self->semStack[$stackPos - (8 - 5)], 'stmts' => $self->semStack[$stackPos - (8 - 7)], 'attrGroups' => $self->semStack[$stackPos - (8 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkClass($self->semValue, $stackPos - (8 - 3)); - }, 210 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Interface_($self->semStack[$stackPos - (7 - 3)], ['extends' => $self->semStack[$stackPos - (7 - 4)], 'stmts' => $self->semStack[$stackPos - (7 - 6)], 'attrGroups' => $self->semStack[$stackPos - (7 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkInterface($self->semValue, $stackPos - (7 - 3)); - }, 211 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Trait_($self->semStack[$stackPos - (6 - 3)], ['stmts' => $self->semStack[$stackPos - (6 - 5)], 'attrGroups' => $self->semStack[$stackPos - (6 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - }, 212 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Enum_($self->semStack[$stackPos - (8 - 3)], ['scalarType' => $self->semStack[$stackPos - (8 - 4)], 'implements' => $self->semStack[$stackPos - (8 - 5)], 'stmts' => $self->semStack[$stackPos - (8 - 7)], 'attrGroups' => $self->semStack[$stackPos - (8 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkEnum($self->semValue, $stackPos - (8 - 3)); - }, 213 => static function ($self, $stackPos) { - $self->semValue = null; - }, 214 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 215 => static function ($self, $stackPos) { - $self->semValue = null; - }, 216 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 217 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 218 => null, 219 => null, 220 => static function ($self, $stackPos) { - $self->checkClassModifier($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); - $self->semValue = $self->semStack[$stackPos - (2 - 1)] | $self->semStack[$stackPos - (2 - 2)]; - }, 221 => static function ($self, $stackPos) { - $self->semValue = Modifiers::ABSTRACT; - }, 222 => static function ($self, $stackPos) { - $self->semValue = Modifiers::FINAL; - }, 223 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, 224 => static function ($self, $stackPos) { - $self->semValue = null; - }, 225 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 226 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 227 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 228 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 229 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 230 => null, 231 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 232 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 233 => null, 234 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 235 => null, 236 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 237 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (1 - 1)] instanceof Stmt\Block) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]->stmts; - } else if ($self->semStack[$stackPos - (1 - 1)] === null) { - $self->semValue = []; - } else { - $self->semValue = [$self->semStack[$stackPos - (1 - 1)]]; - } - }, 238 => static function ($self, $stackPos) { - $self->semValue = null; - }, 239 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 240 => null, 241 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 242 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 243 => static function ($self, $stackPos) { - $self->semValue = new Node\DeclareItem($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 244 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 245 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 3)]; - }, 246 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 247 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (5 - 3)]; - }, 248 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 249 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 250 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Case_($self->semStack[$stackPos - (4 - 2)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 251 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Case_(null, $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 252 => null, 253 => null, 254 => static function ($self, $stackPos) { - $self->semValue = new Expr\Match_($self->semStack[$stackPos - (7 - 3)], $self->semStack[$stackPos - (7 - 6)], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos])); - }, 255 => static function ($self, $stackPos) { - $self->semValue = []; - }, 256 => null, 257 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 258 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 259 => static function ($self, $stackPos) { - $self->semValue = new Node\MatchArm($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 260 => static function ($self, $stackPos) { - $self->semValue = new Node\MatchArm(null, $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 261 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 262 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 263 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 264 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 265 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 266 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 267 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 268 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos - (6 - 3)], $self->semStack[$stackPos - (6 - 6)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - $self->fixupAlternativeElse($self->semValue); - }, 269 => static function ($self, $stackPos) { - $self->semValue = null; - }, 270 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Else_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 271 => static function ($self, $stackPos) { - $self->semValue = null; - }, 272 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Else_($self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->fixupAlternativeElse($self->semValue); - }, 273 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)], \false); - }, 274 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (2 - 2)], \true); - }, 275 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)], \false); - }, 276 => static function ($self, $stackPos) { - $self->semValue = array($self->fixupArrayDestructuring($self->semStack[$stackPos - (1 - 1)]), \false); - }, 277 => null, 278 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 279 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 280 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 281 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 282 => static function ($self, $stackPos) { - $self->checkModifier($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); - $self->semValue = $self->semStack[$stackPos - (2 - 1)] | $self->semStack[$stackPos - (2 - 2)]; - }, 283 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC; - }, 284 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED; - }, 285 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE; - }, 286 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC_SET; - }, 287 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED_SET; - }, 288 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE_SET; - }, 289 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, 290 => static function ($self, $stackPos) { - $self->semValue = new Node\Param($self->semStack[$stackPos - (7 - 6)], null, $self->semStack[$stackPos - (7 - 3)], $self->semStack[$stackPos - (7 - 4)], $self->semStack[$stackPos - (7 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (7 - 2)], $self->semStack[$stackPos - (7 - 1)], $self->semStack[$stackPos - (7 - 7)]); - $self->checkParam($self->semValue); - $self->addPropertyNameToHooks($self->semValue); - }, 291 => static function ($self, $stackPos) { - $self->semValue = new Node\Param($self->semStack[$stackPos - (9 - 6)], $self->semStack[$stackPos - (9 - 8)], $self->semStack[$stackPos - (9 - 3)], $self->semStack[$stackPos - (9 - 4)], $self->semStack[$stackPos - (9 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (9 - 2)], $self->semStack[$stackPos - (9 - 1)], $self->semStack[$stackPos - (9 - 9)]); - $self->checkParam($self->semValue); - $self->addPropertyNameToHooks($self->semValue); - }, 292 => static function ($self, $stackPos) { - $self->semValue = new Node\Param(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])), null, $self->semStack[$stackPos - (6 - 3)], $self->semStack[$stackPos - (6 - 4)], $self->semStack[$stackPos - (6 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (6 - 2)], $self->semStack[$stackPos - (6 - 1)]); - }, 293 => null, 294 => static function ($self, $stackPos) { - $self->semValue = new Node\NullableType($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 295 => static function ($self, $stackPos) { - $self->semValue = new Node\UnionType($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 296 => null, 297 => null, 298 => static function ($self, $stackPos) { - $self->semValue = new Node\Name('static', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 299 => static function ($self, $stackPos) { - $self->semValue = $self->handleBuiltinTypes($self->semStack[$stackPos - (1 - 1)]); - }, 300 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier('array', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 301 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier('callable', $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 302 => null, 303 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 304 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 305 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 306 => null, 307 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 308 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 309 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 310 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 311 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 312 => static function ($self, $stackPos) { - $self->semValue = new Node\IntersectionType($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 313 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 314 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 315 => static function ($self, $stackPos) { - $self->semValue = new Node\IntersectionType($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 316 => null, 317 => static function ($self, $stackPos) { - $self->semValue = new Node\NullableType($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 318 => static function ($self, $stackPos) { - $self->semValue = new Node\UnionType($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 319 => null, 320 => static function ($self, $stackPos) { - $self->semValue = null; - }, 321 => null, 322 => static function ($self, $stackPos) { - $self->semValue = null; - }, 323 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (2 - 2)]; - }, 324 => static function ($self, $stackPos) { - $self->semValue = null; - }, 325 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 326 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 2)]; - }, 327 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 2)]); - }, 328 => static function ($self, $stackPos) { - $self->semValue = new Node\VariadicPlaceholder($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 329 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 330 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 331 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos - (1 - 1)], \false, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 332 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos - (2 - 2)], \true, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 333 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos - (2 - 2)], \false, \true, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 334 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos - (3 - 3)], \false, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (3 - 1)]); - }, 335 => null, 336 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 337 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 338 => null, 339 => null, 340 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 341 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 342 => static function ($self, $stackPos) { - $self->semValue = new Node\StaticVar($self->semStack[$stackPos - (1 - 1)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 343 => static function ($self, $stackPos) { - $self->semValue = new Node\StaticVar($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 344 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos - (2 - 2)] !== null) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - } else { - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - } - }, 345 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 346 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos); - if ($nop !== null) { - $self->semStack[$stackPos - (1 - 1)][] = $nop; - } - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 347 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Property($self->semStack[$stackPos - (5 - 2)], $self->semStack[$stackPos - (5 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 1)]); - }, 348 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Property($self->semStack[$stackPos - (7 - 2)], $self->semStack[$stackPos - (7 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (7 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (7 - 3)], $self->semStack[$stackPos - (7 - 1)], $self->semStack[$stackPos - (7 - 6)]); - $self->checkPropertyHooksForMultiProperty($self->semValue, $stackPos - (7 - 5)); - $self->checkEmptyPropertyHookList($self->semStack[$stackPos - (7 - 6)], $stackPos - (7 - 5)); - $self->addPropertyNameToHooks($self->semValue); - }, 349 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos - (5 - 4)], $self->semStack[$stackPos - (5 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (5 - 1)]); - $self->checkClassConst($self->semValue, $stackPos - (5 - 2)); - }, 350 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos - (6 - 5)], $self->semStack[$stackPos - (6 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos - (6 - 1)], $self->semStack[$stackPos - (6 - 4)]); - $self->checkClassConst($self->semValue, $stackPos - (6 - 2)); - }, 351 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassMethod($self->semStack[$stackPos - (10 - 5)], ['type' => $self->semStack[$stackPos - (10 - 2)], 'byRef' => $self->semStack[$stackPos - (10 - 4)], 'params' => $self->semStack[$stackPos - (10 - 7)], 'returnType' => $self->semStack[$stackPos - (10 - 9)], 'stmts' => $self->semStack[$stackPos - (10 - 10)], 'attrGroups' => $self->semStack[$stackPos - (10 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (10 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkClassMethod($self->semValue, $stackPos - (10 - 2)); - }, 352 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUse($self->semStack[$stackPos - (3 - 2)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 353 => static function ($self, $stackPos) { - $self->semValue = new Stmt\EnumCase($self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 4)], $self->semStack[$stackPos - (5 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 354 => static function ($self, $stackPos) { - $self->semValue = null; - /* will be skipped */ - }, 355 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 356 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 357 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 358 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 359 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos - (4 - 1)][0], $self->semStack[$stackPos - (4 - 1)][1], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 360 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos - (5 - 1)][0], $self->semStack[$stackPos - (5 - 1)][1], $self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 361 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos - (4 - 1)][0], $self->semStack[$stackPos - (4 - 1)][1], $self->semStack[$stackPos - (4 - 3)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 362 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos - (4 - 1)][0], $self->semStack[$stackPos - (4 - 1)][1], null, $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 363 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos - (4 - 1)][0], $self->semStack[$stackPos - (4 - 1)][1], null, $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 364 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)]); - }, 365 => null, 366 => static function ($self, $stackPos) { - $self->semValue = array(null, $self->semStack[$stackPos - (1 - 1)]); - }, 367 => static function ($self, $stackPos) { - $self->semValue = null; - }, 368 => null, 369 => null, 370 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 371 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 372 => null, 373 => null, 374 => static function ($self, $stackPos) { - $self->checkModifier($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); - $self->semValue = $self->semStack[$stackPos - (2 - 1)] | $self->semStack[$stackPos - (2 - 2)]; - }, 375 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC; - }, 376 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED; - }, 377 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE; - }, 378 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC_SET; - }, 379 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED_SET; - }, 380 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE_SET; - }, 381 => static function ($self, $stackPos) { - $self->semValue = Modifiers::STATIC; - }, 382 => static function ($self, $stackPos) { - $self->semValue = Modifiers::ABSTRACT; - }, 383 => static function ($self, $stackPos) { - $self->semValue = Modifiers::FINAL; - }, 384 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, 385 => null, 386 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 387 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 388 => static function ($self, $stackPos) { - $self->semValue = new Node\VarLikeIdentifier(substr($self->semStack[$stackPos - (1 - 1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 389 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyItem($self->semStack[$stackPos - (1 - 1)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 390 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyItem($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 391 => static function ($self, $stackPos) { - $self->semValue = []; - }, 392 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 393 => static function ($self, $stackPos) { - $self->semValue = []; - }, 394 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - $self->checkEmptyPropertyHookList($self->semStack[$stackPos - (3 - 2)], $stackPos - (3 - 1)); - }, 395 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyHook($self->semStack[$stackPos - (5 - 4)], $self->semStack[$stackPos - (5 - 5)], ['flags' => $self->semStack[$stackPos - (5 - 2)], 'byRef' => $self->semStack[$stackPos - (5 - 3)], 'params' => [], 'attrGroups' => $self->semStack[$stackPos - (5 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkPropertyHook($self->semValue, null); - }, 396 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyHook($self->semStack[$stackPos - (8 - 4)], $self->semStack[$stackPos - (8 - 8)], ['flags' => $self->semStack[$stackPos - (8 - 2)], 'byRef' => $self->semStack[$stackPos - (8 - 3)], 'params' => $self->semStack[$stackPos - (8 - 6)], 'attrGroups' => $self->semStack[$stackPos - (8 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - $self->checkPropertyHook($self->semValue, $stackPos - (8 - 5)); - }, 397 => static function ($self, $stackPos) { - $self->semValue = null; - }, 398 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 399 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 400 => static function ($self, $stackPos) { - $self->semValue = 0; - }, 401 => static function ($self, $stackPos) { - $self->checkPropertyHookModifiers($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); - $self->semValue = $self->semStack[$stackPos - (2 - 1)] | $self->semStack[$stackPos - (2 - 2)]; - }, 402 => null, 403 => null, 404 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 405 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 406 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 407 => null, 408 => null, 409 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 410 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->fixupArrayDestructuring($self->semStack[$stackPos - (3 - 1)]), $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 411 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 412 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignRef($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 413 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignRef($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - if (!$self->phpVersion->allowsAssignNewByReference()) { - $self->emitError(new Error('Cannot assign new by reference', $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos]))); - } - }, 414 => null, 415 => null, 416 => static function ($self, $stackPos) { - $self->semValue = new Expr\Clone_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 417 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Plus($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 418 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Minus($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 419 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Mul($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 420 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Div($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 421 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Concat($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 422 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Mod($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 423 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 424 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseOr($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 425 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseXor($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 426 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\ShiftLeft($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 427 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\ShiftRight($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 428 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Pow($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 429 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Coalesce($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 430 => static function ($self, $stackPos) { - $self->semValue = new Expr\PostInc($self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 431 => static function ($self, $stackPos) { - $self->semValue = new Expr\PreInc($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 432 => static function ($self, $stackPos) { - $self->semValue = new Expr\PostDec($self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 433 => static function ($self, $stackPos) { - $self->semValue = new Expr\PreDec($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 434 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BooleanOr($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 435 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BooleanAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 436 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalOr($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 437 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 438 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalXor($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 439 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseOr($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 440 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 441 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 442 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseXor($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 443 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Concat($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 444 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Plus($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 445 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Minus($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 446 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Mul($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 447 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Div($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 448 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Mod($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 449 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\ShiftLeft($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 450 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\ShiftRight($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 451 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Pow($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 452 => static function ($self, $stackPos) { - $self->semValue = new Expr\UnaryPlus($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 453 => static function ($self, $stackPos) { - $self->semValue = new Expr\UnaryMinus($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 454 => static function ($self, $stackPos) { - $self->semValue = new Expr\BooleanNot($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 455 => static function ($self, $stackPos) { - $self->semValue = new Expr\BitwiseNot($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 456 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Identical($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 457 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\NotIdentical($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 458 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Equal($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 459 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\NotEqual($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 460 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Spaceship($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 461 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Smaller($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 462 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\SmallerOrEqual($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 463 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Greater($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 464 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\GreaterOrEqual($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 465 => static function ($self, $stackPos) { - $self->semValue = new Expr\Instanceof_($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 466 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 467 => static function ($self, $stackPos) { - $self->semValue = new Expr\Ternary($self->semStack[$stackPos - (5 - 1)], $self->semStack[$stackPos - (5 - 3)], $self->semStack[$stackPos - (5 - 5)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 468 => static function ($self, $stackPos) { - $self->semValue = new Expr\Ternary($self->semStack[$stackPos - (4 - 1)], null, $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 469 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Coalesce($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 470 => static function ($self, $stackPos) { - $self->semValue = new Expr\Isset_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 471 => static function ($self, $stackPos) { - $self->semValue = new Expr\Empty_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 472 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 473 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 474 => static function ($self, $stackPos) { - $self->semValue = new Expr\Eval_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 475 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 476 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 477 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Int_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 478 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = $self->getFloatCastKind($self->semStack[$stackPos - (2 - 1)]); - $self->semValue = new Expr\Cast\Double($self->semStack[$stackPos - (2 - 2)], $attrs); - }, 479 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\String_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 480 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Array_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 481 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Object_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 482 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Bool_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 483 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Unset_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 484 => static function ($self, $stackPos) { - $self->semValue = $self->createExitExpr($self->semStack[$stackPos - (2 - 1)], $stackPos - (2 - 1), $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 485 => static function ($self, $stackPos) { - $self->semValue = new Expr\ErrorSuppress($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 486 => null, 487 => static function ($self, $stackPos) { - $self->semValue = new Expr\ShellExec($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 488 => static function ($self, $stackPos) { - $self->semValue = new Expr\Print_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 489 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_(null, null, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 490 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_($self->semStack[$stackPos - (2 - 2)], null, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 491 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_($self->semStack[$stackPos - (4 - 4)], $self->semStack[$stackPos - (4 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 492 => static function ($self, $stackPos) { - $self->semValue = new Expr\YieldFrom($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 493 => static function ($self, $stackPos) { - $self->semValue = new Expr\Throw_($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 494 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $self->semStack[$stackPos - (8 - 2)], 'params' => $self->semStack[$stackPos - (8 - 4)], 'returnType' => $self->semStack[$stackPos - (8 - 6)], 'expr' => $self->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 495 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 5)], 'returnType' => $self->semStack[$stackPos - (9 - 7)], 'expr' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 496 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => \false, 'byRef' => $self->semStack[$stackPos - (8 - 2)], 'params' => $self->semStack[$stackPos - (8 - 4)], 'uses' => $self->semStack[$stackPos - (8 - 6)], 'returnType' => $self->semStack[$stackPos - (8 - 7)], 'stmts' => $self->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])); - }, 497 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => \true, 'byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 5)], 'uses' => $self->semStack[$stackPos - (9 - 7)], 'returnType' => $self->semStack[$stackPos - (9 - 8)], 'stmts' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 498 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 5)], 'returnType' => $self->semStack[$stackPos - (9 - 7)], 'expr' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => $self->semStack[$stackPos - (9 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 499 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $self->semStack[$stackPos - (10 - 4)], 'params' => $self->semStack[$stackPos - (10 - 6)], 'returnType' => $self->semStack[$stackPos - (10 - 8)], 'expr' => $self->semStack[$stackPos - (10 - 10)], 'attrGroups' => $self->semStack[$stackPos - (10 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (10 - 1)], $self->tokenEndStack[$stackPos])); - }, 500 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => \false, 'byRef' => $self->semStack[$stackPos - (9 - 3)], 'params' => $self->semStack[$stackPos - (9 - 5)], 'uses' => $self->semStack[$stackPos - (9 - 7)], 'returnType' => $self->semStack[$stackPos - (9 - 8)], 'stmts' => $self->semStack[$stackPos - (9 - 9)], 'attrGroups' => $self->semStack[$stackPos - (9 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (9 - 1)], $self->tokenEndStack[$stackPos])); - }, 501 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => \true, 'byRef' => $self->semStack[$stackPos - (10 - 4)], 'params' => $self->semStack[$stackPos - (10 - 6)], 'uses' => $self->semStack[$stackPos - (10 - 8)], 'returnType' => $self->semStack[$stackPos - (10 - 9)], 'stmts' => $self->semStack[$stackPos - (10 - 10)], 'attrGroups' => $self->semStack[$stackPos - (10 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (10 - 1)], $self->tokenEndStack[$stackPos])); - }, 502 => static function ($self, $stackPos) { - $self->semValue = array(new Stmt\Class_(null, ['type' => $self->semStack[$stackPos - (8 - 2)], 'extends' => $self->semStack[$stackPos - (8 - 4)], 'implements' => $self->semStack[$stackPos - (8 - 5)], 'stmts' => $self->semStack[$stackPos - (8 - 7)], 'attrGroups' => $self->semStack[$stackPos - (8 - 1)]], $self->getAttributes($self->tokenStartStack[$stackPos - (8 - 1)], $self->tokenEndStack[$stackPos])), $self->semStack[$stackPos - (8 - 3)]); - $self->checkClass($self->semValue[0], -1); - }, 503 => static function ($self, $stackPos) { - $self->semValue = new Expr\New_($self->semStack[$stackPos - (3 - 2)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 504 => static function ($self, $stackPos) { - list($class, $ctorArgs) = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = new Expr\New_($class, $ctorArgs, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 505 => static function ($self, $stackPos) { - $self->semValue = new Expr\New_($self->semStack[$stackPos - (2 - 2)], [], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 506 => null, 507 => null, 508 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 509 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (4 - 3)]; - }, 510 => null, 511 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 512 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 513 => static function ($self, $stackPos) { - $self->semValue = new Node\ClosureUse($self->semStack[$stackPos - (2 - 2)], $self->semStack[$stackPos - (2 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 514 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 515 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 516 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 517 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 518 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticCall($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 519 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 520 => null, 521 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 522 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 523 => static function ($self, $stackPos) { - $self->semValue = new Name\FullyQualified(substr($self->semStack[$stackPos - (1 - 1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 524 => static function ($self, $stackPos) { - $self->semValue = new Name\Relative(substr($self->semStack[$stackPos - (1 - 1)], 10), $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 525 => null, 526 => null, 527 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 528 => static function ($self, $stackPos) { - $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->errorState = 2; - }, 529 => null, 530 => null, 531 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 532 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - foreach ($self->semValue as $s) { - if ($s instanceof Node\InterpolatedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); - } - } - }, 533 => static function ($self, $stackPos) { - foreach ($self->semStack[$stackPos - (1 - 1)] as $s) { - if ($s instanceof Node\InterpolatedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); - } - } - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - }, 534 => static function ($self, $stackPos) { - $self->semValue = array(); - }, 535 => null, 536 => static function ($self, $stackPos) { - $self->semValue = new Expr\ConstFetch($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 537 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Line($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 538 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\File($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 539 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Dir($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 540 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Class_($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 541 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Trait_($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 542 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Method($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 543 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Function_($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 544 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Namespace_($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 545 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Property($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 546 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 547 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos - (5 - 1)], $self->semStack[$stackPos - (5 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (5 - 1)], $self->tokenEndStack[$stackPos])); - }, 548 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos - (3 - 1)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (3 - 3)], $self->tokenEndStack[$stackPos - (3 - 3)])), $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - $self->errorState = 2; - }, 549 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = Expr\Array_::KIND_SHORT; - $self->semValue = new Expr\Array_($self->semStack[$stackPos - (3 - 2)], $attrs); - }, 550 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = Expr\Array_::KIND_LONG; - $self->semValue = new Expr\Array_($self->semStack[$stackPos - (4 - 3)], $attrs); - $self->createdArrays->attach($self->semValue); - }, 551 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - $self->createdArrays->attach($self->semValue); - }, 552 => static function ($self, $stackPos) { - $self->semValue = Scalar\String_::fromString($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->supportsUnicodeEscapes()); - }, 553 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; - foreach ($self->semStack[$stackPos - (3 - 2)] as $s) { - if ($s instanceof Node\InterpolatedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', $self->phpVersion->supportsUnicodeEscapes()); - } - } - $self->semValue = new Scalar\InterpolatedString($self->semStack[$stackPos - (3 - 2)], $attrs); - }, 554 => static function ($self, $stackPos) { - $self->semValue = $self->parseLNumber($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->allowsInvalidOctals()); - }, 555 => static function ($self, $stackPos) { - $self->semValue = Scalar\Float_::fromString($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 556 => null, 557 => null, 558 => null, 559 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 2)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 3)], $self->tokenEndStack[$stackPos - (3 - 3)]), \true); - }, 560 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos - (2 - 1)], '', $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 2)], $self->tokenEndStack[$stackPos - (2 - 2)]), \true); - }, 561 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 2)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 3)], $self->tokenEndStack[$stackPos - (3 - 3)]), \true); - }, 562 => static function ($self, $stackPos) { - $self->semValue = null; - }, 563 => null, 564 => null, 565 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 566 => null, 567 => null, 568 => null, 569 => null, 570 => null, 571 => null, 572 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 573 => null, 574 => null, 575 => null, 576 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 577 => null, 578 => static function ($self, $stackPos) { - $self->semValue = new Expr\MethodCall($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 579 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafeMethodCall($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->semStack[$stackPos - (4 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 580 => static function ($self, $stackPos) { - $self->semValue = null; - }, 581 => null, 582 => null, 583 => null, 584 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 585 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 586 => null, 587 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 588 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 589 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])), $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - $self->errorState = 2; - }, 590 => static function ($self, $stackPos) { - $var = $self->semStack[$stackPos - (1 - 1)]->name; - $self->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])) : $var; - }, 591 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 592 => null, 593 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 594 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 595 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 596 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 597 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 598 => null, 599 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 600 => null, 601 => null, 602 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 603 => null, 604 => static function ($self, $stackPos) { - $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - $self->errorState = 2; - }, 605 => static function ($self, $stackPos) { - $self->semValue = new Expr\List_($self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Expr\List_::KIND_LIST); - $self->postprocessList($self->semValue); - }, 606 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (1 - 1)]; - $end = count($self->semValue) - 1; - if ($self->semValue[$end]->value instanceof Expr\Error) { - array_pop($self->semValue); - } - }, 607 => null, 608 => static function ($self, $stackPos) { - /* do nothing -- prevent default action of $$=$self->semStack[$1]. See $551. */ - }, 609 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (3 - 1)][] = $self->semStack[$stackPos - (3 - 3)]; - $self->semValue = $self->semStack[$stackPos - (3 - 1)]; - }, 610 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 611 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (1 - 1)], null, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 612 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (2 - 2)], null, \true, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 613 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (1 - 1)], null, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 614 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (3 - 3)], $self->semStack[$stackPos - (3 - 1)], \false, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 615 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (4 - 4)], $self->semStack[$stackPos - (4 - 1)], \true, $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 616 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (3 - 3)], $self->semStack[$stackPos - (3 - 1)], \false, $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 617 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos - (2 - 2)], null, \false, $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos]), \true); - }, 618 => static function ($self, $stackPos) { - /* Create an Error node now to remember the position. We'll later either report an error, - or convert this into a null element, depending on whether this is a creation or destructuring context. */ - $attrs = $self->createEmptyElemAttributes($self->tokenPos); - $self->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, \false, $attrs); - }, 619 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 620 => static function ($self, $stackPos) { - $self->semStack[$stackPos - (2 - 1)][] = $self->semStack[$stackPos - (2 - 2)]; - $self->semValue = $self->semStack[$stackPos - (2 - 1)]; - }, 621 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (1 - 1)]); - }, 622 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos - (2 - 1)], $self->semStack[$stackPos - (2 - 2)]); - }, 623 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos]); - $attrs['rawValue'] = $self->semStack[$stackPos - (1 - 1)]; - $self->semValue = new Node\InterpolatedStringPart($self->semStack[$stackPos - (1 - 1)], $attrs); - }, 624 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 625 => null, 626 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (4 - 1)], $self->semStack[$stackPos - (4 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (4 - 1)], $self->tokenEndStack[$stackPos])); - }, 627 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 628 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos - (3 - 1)], $self->semStack[$stackPos - (3 - 3)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 629 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 630 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos - (3 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (3 - 1)], $self->tokenEndStack[$stackPos])); - }, 631 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos - (6 - 2)], $self->semStack[$stackPos - (6 - 4)], $self->getAttributes($self->tokenStartStack[$stackPos - (6 - 1)], $self->tokenEndStack[$stackPos])); - }, 632 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos - (3 - 2)]; - }, 633 => static function ($self, $stackPos) { - $self->semValue = new Scalar\String_($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 634 => static function ($self, $stackPos) { - $self->semValue = $self->parseNumString($self->semStack[$stackPos - (1 - 1)], $self->getAttributes($self->tokenStartStack[$stackPos - (1 - 1)], $self->tokenEndStack[$stackPos])); - }, 635 => static function ($self, $stackPos) { - $self->semValue = $self->parseNumString('-' . $self->semStack[$stackPos - (2 - 2)], $self->getAttributes($self->tokenStartStack[$stackPos - (2 - 1)], $self->tokenEndStack[$stackPos])); - }, 636 => null]; - } -} - Map of PHP token IDs to drop */ - protected array $dropTokens; - /** @var int[] Map of external symbols (static::T_*) to internal symbols */ - protected array $tokenToSymbol; - /** @var string[] Map of symbols to their names */ - protected array $symbolToName; - /** @var array Names of the production rules (only necessary for debugging) */ - protected array $productions; - /** @var int[] Map of states to a displacement into the $action table. The corresponding action for this - * state/symbol pair is $action[$actionBase[$state] + $symbol]. If $actionBase[$state] is 0, the - * action is defaulted, i.e. $actionDefault[$state] should be used instead. */ - protected array $actionBase; - /** @var int[] Table of actions. Indexed according to $actionBase comment. */ - protected array $action; - /** @var int[] Table indexed analogously to $action. If $actionCheck[$actionBase[$state] + $symbol] != $symbol - * then the action is defaulted, i.e. $actionDefault[$state] should be used instead. */ - protected array $actionCheck; - /** @var int[] Map of states to their default action */ - protected array $actionDefault; - /** @var callable[] Semantic action callbacks */ - protected array $reduceCallbacks; - /** @var int[] Map of non-terminals to a displacement into the $goto table. The corresponding goto state for this - * non-terminal/state pair is $goto[$gotoBase[$nonTerminal] + $state] (unless defaulted) */ - protected array $gotoBase; - /** @var int[] Table of states to goto after reduction. Indexed according to $gotoBase comment. */ - protected array $goto; - /** @var int[] Table indexed analogously to $goto. If $gotoCheck[$gotoBase[$nonTerminal] + $state] != $nonTerminal - * then the goto state is defaulted, i.e. $gotoDefault[$nonTerminal] should be used. */ - protected array $gotoCheck; - /** @var int[] Map of non-terminals to the default state to goto after their reduction */ - protected array $gotoDefault; - /** @var int[] Map of rules to the non-terminal on their left-hand side, i.e. the non-terminal to use for - * determining the state to goto after reduction. */ - protected array $ruleToNonTerminal; - /** @var int[] Map of rules to the length of their right-hand side, which is the number of elements that have to - * be popped from the stack(s) on reduction. */ - protected array $ruleToLength; - /* - * The following members are part of the parser state: - */ - /** @var mixed Temporary value containing the result of last semantic action (reduction) */ - protected $semValue; - /** @var mixed[] Semantic value stack (contains values of tokens and semantic action results) */ - protected array $semStack; - /** @var int[] Token start position stack */ - protected array $tokenStartStack; - /** @var int[] Token end position stack */ - protected array $tokenEndStack; - /** @var ErrorHandler Error handler */ - protected ErrorHandler $errorHandler; - /** @var int Error state, used to avoid error floods */ - protected int $errorState; - /** @var \SplObjectStorage|null Array nodes created during parsing, for postprocessing of empty elements. */ - protected ?\SplObjectStorage $createdArrays; - /** @var Token[] Tokens for the current parse */ - protected array $tokens; - /** @var int Current position in token array */ - protected int $tokenPos; - /** - * Initialize $reduceCallbacks map. - */ - abstract protected function initReduceCallbacks(): void; - /** - * Creates a parser instance. - * - * Options: - * * phpVersion: ?PhpVersion, - * - * @param Lexer $lexer A lexer - * @param PhpVersion $phpVersion PHP version to target, defaults to latest supported. This - * option is best-effort: Even if specified, parsing will generally assume the latest - * supported version and only adjust behavior in minor ways, for example by omitting - * errors in older versions and interpreting type hints as a name or identifier depending - * on version. - */ - public function __construct(Lexer $lexer, ?PhpVersion $phpVersion = null) - { - $this->lexer = $lexer; - $this->phpVersion = $phpVersion ?? PhpVersion::getNewestSupported(); - $this->initReduceCallbacks(); - $this->phpTokenToSymbol = $this->createTokenMap(); - $this->dropTokens = array_fill_keys([\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], \true); - } - /** - * Parses PHP code into a node tree. - * - * If a non-throwing error handler is used, the parser will continue parsing after an error - * occurred and attempt to build a partial AST. - * - * @param string $code The source code to parse - * @param ErrorHandler|null $errorHandler Error handler to use for lexer/parser errors, defaults - * to ErrorHandler\Throwing. - * - * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and - * the parser was unable to recover from an error). - */ - public function parse(string $code, ?ErrorHandler $errorHandler = null): ?array - { - $this->errorHandler = $errorHandler ?: new ErrorHandler\Throwing(); - $this->createdArrays = new \SplObjectStorage(); - $this->tokens = $this->lexer->tokenize($code, $this->errorHandler); - $result = $this->doParse(); - // Report errors for any empty elements used inside arrays. This is delayed until after the main parse, - // because we don't know a priori whether a given array expression will be used in a destructuring context - // or not. - foreach ($this->createdArrays as $node) { - foreach ($node->items as $item) { - if ($item->value instanceof Expr\Error) { - $this->errorHandler->handleError(new Error('Cannot use empty array elements in arrays', $item->getAttributes())); - } - } - } - // Clear out some of the interior state, so we don't hold onto unnecessary - // memory between uses of the parser - $this->tokenStartStack = []; - $this->tokenEndStack = []; - $this->semStack = []; - $this->semValue = null; - $this->createdArrays = null; - if ($result !== null) { - $traverser = new NodeTraverser(new CommentAnnotatingVisitor($this->tokens)); - $traverser->traverse($result); - } - return $result; - } - public function getTokens(): array - { - return $this->tokens; - } - /** @return Stmt[]|null */ - protected function doParse(): ?array - { - // We start off with no lookahead-token - $symbol = self::SYMBOL_NONE; - $tokenValue = null; - $this->tokenPos = -1; - // Keep stack of start and end attributes - $this->tokenStartStack = []; - $this->tokenEndStack = [0]; - // Start off in the initial state and keep a stack of previous states - $state = 0; - $stateStack = [$state]; - // Semantic value stack (contains values of tokens and semantic action results) - $this->semStack = []; - // Current position in the stack(s) - $stackPos = 0; - $this->errorState = 0; - for (;;) { - //$this->traceNewState($state, $symbol); - if ($this->actionBase[$state] === 0) { - $rule = $this->actionDefault[$state]; - } else { - if ($symbol === self::SYMBOL_NONE) { - do { - $token = $this->tokens[++$this->tokenPos]; - $tokenId = $token->id; - } while (isset($this->dropTokens[$tokenId])); - // Map the lexer token id to the internally used symbols. - $tokenValue = $token->text; - if (!isset($this->phpTokenToSymbol[$tokenId])) { - throw new \RangeException(sprintf('The lexer returned an invalid token (id=%d, value=%s)', $tokenId, $tokenValue)); - } - $symbol = $this->phpTokenToSymbol[$tokenId]; - //$this->traceRead($symbol); - } - $idx = $this->actionBase[$state] + $symbol; - if (($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol || $state < $this->YY2TBLSTATE && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol) && ($action = $this->action[$idx]) !== $this->defaultAction) { - /* - * >= numNonLeafStates: shift and reduce - * > 0: shift - * = 0: accept - * < 0: reduce - * = -YYUNEXPECTED: error - */ - if ($action > 0) { - /* shift */ - //$this->traceShift($symbol); - ++$stackPos; - $stateStack[$stackPos] = $state = $action; - $this->semStack[$stackPos] = $tokenValue; - $this->tokenStartStack[$stackPos] = $this->tokenPos; - $this->tokenEndStack[$stackPos] = $this->tokenPos; - $symbol = self::SYMBOL_NONE; - if ($this->errorState) { - --$this->errorState; - } - if ($action < $this->numNonLeafStates) { - continue; - } - /* $yyn >= numNonLeafStates means shift-and-reduce */ - $rule = $action - $this->numNonLeafStates; - } else { - $rule = -$action; - } - } else { - $rule = $this->actionDefault[$state]; - } - } - for (;;) { - if ($rule === 0) { - /* accept */ - //$this->traceAccept(); - return $this->semValue; - } - if ($rule !== $this->unexpectedTokenRule) { - /* reduce */ - //$this->traceReduce($rule); - $ruleLength = $this->ruleToLength[$rule]; - try { - $callback = $this->reduceCallbacks[$rule]; - if ($callback !== null) { - $callback($this, $stackPos); - } elseif ($ruleLength > 0) { - $this->semValue = $this->semStack[$stackPos - $ruleLength + 1]; - } - } catch (Error $e) { - if (-1 === $e->getStartLine()) { - $e->setStartLine($this->tokens[$this->tokenPos]->line); - } - $this->emitError($e); - // Can't recover from this type of error - return null; - } - /* Goto - shift nonterminal */ - $lastTokenEnd = $this->tokenEndStack[$stackPos]; - $stackPos -= $ruleLength; - $nonTerminal = $this->ruleToNonTerminal[$rule]; - $idx = $this->gotoBase[$nonTerminal] + $stateStack[$stackPos]; - if ($idx >= 0 && $idx < $this->gotoTableSize && $this->gotoCheck[$idx] === $nonTerminal) { - $state = $this->goto[$idx]; - } else { - $state = $this->gotoDefault[$nonTerminal]; - } - ++$stackPos; - $stateStack[$stackPos] = $state; - $this->semStack[$stackPos] = $this->semValue; - $this->tokenEndStack[$stackPos] = $lastTokenEnd; - if ($ruleLength === 0) { - // Empty productions use the start attributes of the lookahead token. - $this->tokenStartStack[$stackPos] = $this->tokenPos; - } - } else { - /* error */ - switch ($this->errorState) { - case 0: - $msg = $this->getErrorMessage($symbol, $state); - $this->emitError(new Error($msg, $this->getAttributesForToken($this->tokenPos))); - // Break missing intentionally - // no break - case 1: - case 2: - $this->errorState = 3; - // Pop until error-expecting state uncovered - while (!(($idx = $this->actionBase[$state] + $this->errorSymbol) >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol || $state < $this->YY2TBLSTATE && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $this->errorSymbol) >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol) || ($action = $this->action[$idx]) === $this->defaultAction) { - // Not totally sure about this - if ($stackPos <= 0) { - // Could not recover from error - return null; - } - $state = $stateStack[--$stackPos]; - //$this->tracePop($state); - } - //$this->traceShift($this->errorSymbol); - ++$stackPos; - $stateStack[$stackPos] = $state = $action; - // We treat the error symbol as being empty, so we reset the end attributes - // to the end attributes of the last non-error symbol - $this->tokenStartStack[$stackPos] = $this->tokenPos; - $this->tokenEndStack[$stackPos] = $this->tokenEndStack[$stackPos - 1]; - break; - case 3: - if ($symbol === 0) { - // Reached EOF without recovering from error - return null; - } - //$this->traceDiscard($symbol); - $symbol = self::SYMBOL_NONE; - break 2; - } - } - if ($state < $this->numNonLeafStates) { - break; - } - /* >= numNonLeafStates means shift-and-reduce */ - $rule = $state - $this->numNonLeafStates; - } - } - } - protected function emitError(Error $error): void - { - $this->errorHandler->handleError($error); - } - /** - * Format error message including expected tokens. - * - * @param int $symbol Unexpected symbol - * @param int $state State at time of error - * - * @return string Formatted error message - */ - protected function getErrorMessage(int $symbol, int $state): string - { - $expectedString = ''; - if ($expected = $this->getExpectedTokens($state)) { - $expectedString = ', expecting ' . implode(' or ', $expected); - } - return 'Syntax error, unexpected ' . $this->symbolToName[$symbol] . $expectedString; - } - /** - * Get limited number of expected tokens in given state. - * - * @param int $state State - * - * @return string[] Expected tokens. If too many, an empty array is returned. - */ - protected function getExpectedTokens(int $state): array - { - $expected = []; - $base = $this->actionBase[$state]; - foreach ($this->symbolToName as $symbol => $name) { - $idx = $base + $symbol; - if ($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol || $state < $this->YY2TBLSTATE && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol) { - if ($this->action[$idx] !== $this->unexpectedTokenRule && $this->action[$idx] !== $this->defaultAction && $symbol !== $this->errorSymbol) { - if (count($expected) === 4) { - /* Too many expected tokens */ - return []; - } - $expected[] = $name; - } - } - } - return $expected; - } - /** - * Get attributes for a node with the given start and end token positions. - * - * @param int $tokenStartPos Token position the node starts at - * @param int $tokenEndPos Token position the node ends at - * @return array Attributes - */ - protected function getAttributes(int $tokenStartPos, int $tokenEndPos): array - { - $startToken = $this->tokens[$tokenStartPos]; - $afterEndToken = $this->tokens[$tokenEndPos + 1]; - return ['startLine' => $startToken->line, 'startTokenPos' => $tokenStartPos, 'startFilePos' => $startToken->pos, 'endLine' => $afterEndToken->line, 'endTokenPos' => $tokenEndPos, 'endFilePos' => $afterEndToken->pos - 1]; - } - /** - * Get attributes for a single token at the given token position. - * - * @return array Attributes - */ - protected function getAttributesForToken(int $tokenPos): array - { - if ($tokenPos < \count($this->tokens) - 1) { - return $this->getAttributes($tokenPos, $tokenPos); - } - // Get attributes for the sentinel token. - $token = $this->tokens[$tokenPos]; - return ['startLine' => $token->line, 'startTokenPos' => $tokenPos, 'startFilePos' => $token->pos, 'endLine' => $token->line, 'endTokenPos' => $tokenPos, 'endFilePos' => $token->pos]; - } - /* - * Tracing functions used for debugging the parser. - */ - /* - protected function traceNewState($state, $symbol): void { - echo '% State ' . $state - . ', Lookahead ' . ($symbol == self::SYMBOL_NONE ? '--none--' : $this->symbolToName[$symbol]) . "\n"; - } - - protected function traceRead($symbol): void { - echo '% Reading ' . $this->symbolToName[$symbol] . "\n"; - } - - protected function traceShift($symbol): void { - echo '% Shift ' . $this->symbolToName[$symbol] . "\n"; - } - - protected function traceAccept(): void { - echo "% Accepted.\n"; - } - - protected function traceReduce($n): void { - echo '% Reduce by (' . $n . ') ' . $this->productions[$n] . "\n"; - } - - protected function tracePop($state): void { - echo '% Recovering, uncovered state ' . $state . "\n"; - } - - protected function traceDiscard($symbol): void { - echo '% Discard ' . $this->symbolToName[$symbol] . "\n"; - } - */ - /* - * Helper functions invoked by semantic actions - */ - /** - * Moves statements of semicolon-style namespaces into $ns->stmts and checks various error conditions. - * - * @param Node\Stmt[] $stmts - * @return Node\Stmt[] - */ - protected function handleNamespaces(array $stmts): array - { - $hasErrored = \false; - $style = $this->getNamespacingStyle($stmts); - if (null === $style) { - // not namespaced, nothing to do - return $stmts; - } - if ('brace' === $style) { - // For braced namespaces we only have to check that there are no invalid statements between the namespaces - $afterFirstNamespace = \false; - foreach ($stmts as $stmt) { - if ($stmt instanceof Node\Stmt\Namespace_) { - $afterFirstNamespace = \true; - } elseif (!$stmt instanceof Node\Stmt\HaltCompiler && !$stmt instanceof Node\Stmt\Nop && $afterFirstNamespace && !$hasErrored) { - $this->emitError(new Error('No code may exist outside of namespace {}', $stmt->getAttributes())); - $hasErrored = \true; - // Avoid one error for every statement - } - } - return $stmts; - } else { - // For semicolon namespaces we have to move the statements after a namespace declaration into ->stmts - $resultStmts = []; - $targetStmts =& $resultStmts; - $lastNs = null; - foreach ($stmts as $stmt) { - if ($stmt instanceof Node\Stmt\Namespace_) { - if ($lastNs !== null) { - $this->fixupNamespaceAttributes($lastNs); - } - if ($stmt->stmts === null) { - $stmt->stmts = []; - $targetStmts =& $stmt->stmts; - $resultStmts[] = $stmt; - } else { - // This handles the invalid case of mixed style namespaces - $resultStmts[] = $stmt; - $targetStmts =& $resultStmts; - } - $lastNs = $stmt; - } elseif ($stmt instanceof Node\Stmt\HaltCompiler) { - // __halt_compiler() is not moved into the namespace - $resultStmts[] = $stmt; - } else { - $targetStmts[] = $stmt; - } - } - if ($lastNs !== null) { - $this->fixupNamespaceAttributes($lastNs); - } - return $resultStmts; - } - } - private function fixupNamespaceAttributes(Node\Stmt\Namespace_ $stmt): void - { - // We moved the statements into the namespace node, as such the end of the namespace node - // needs to be extended to the end of the statements. - if (empty($stmt->stmts)) { - return; - } - // We only move the builtin end attributes here. This is the best we can do with the - // knowledge we have. - $endAttributes = ['endLine', 'endFilePos', 'endTokenPos']; - $lastStmt = $stmt->stmts[count($stmt->stmts) - 1]; - foreach ($endAttributes as $endAttribute) { - if ($lastStmt->hasAttribute($endAttribute)) { - $stmt->setAttribute($endAttribute, $lastStmt->getAttribute($endAttribute)); - } - } - } - /** @return array */ - private function getNamespaceErrorAttributes(Namespace_ $node): array - { - $attrs = $node->getAttributes(); - // Adjust end attributes to only cover the "namespace" keyword, not the whole namespace. - if (isset($attrs['startLine'])) { - $attrs['endLine'] = $attrs['startLine']; - } - if (isset($attrs['startTokenPos'])) { - $attrs['endTokenPos'] = $attrs['startTokenPos']; - } - if (isset($attrs['startFilePos'])) { - $attrs['endFilePos'] = $attrs['startFilePos'] + \strlen('namespace') - 1; - } - return $attrs; - } - /** - * Determine namespacing style (semicolon or brace) - * - * @param Node[] $stmts Top-level statements. - * - * @return null|string One of "semicolon", "brace" or null (no namespaces) - */ - private function getNamespacingStyle(array $stmts): ?string - { - $style = null; - $hasNotAllowedStmts = \false; - foreach ($stmts as $i => $stmt) { - if ($stmt instanceof Node\Stmt\Namespace_) { - $currentStyle = null === $stmt->stmts ? 'semicolon' : 'brace'; - if (null === $style) { - $style = $currentStyle; - if ($hasNotAllowedStmts) { - $this->emitError(new Error('Namespace declaration statement has to be the very first statement in the script', $this->getNamespaceErrorAttributes($stmt))); - } - } elseif ($style !== $currentStyle) { - $this->emitError(new Error('Cannot mix bracketed namespace declarations with unbracketed namespace declarations', $this->getNamespaceErrorAttributes($stmt))); - // Treat like semicolon style for namespace normalization - return 'semicolon'; - } - continue; - } - /* declare(), __halt_compiler() and nops can be used before a namespace declaration */ - if ($stmt instanceof Node\Stmt\Declare_ || $stmt instanceof Node\Stmt\HaltCompiler || $stmt instanceof Node\Stmt\Nop) { - continue; - } - /* There may be a hashbang line at the very start of the file */ - if ($i === 0 && $stmt instanceof Node\Stmt\InlineHTML && preg_match('/\A#!.*\r?\n\z/', $stmt->value)) { - continue; - } - /* Everything else if forbidden before namespace declarations */ - $hasNotAllowedStmts = \true; - } - return $style; - } - /** @return Name|Identifier */ - protected function handleBuiltinTypes(Name $name) - { - if (!$name->isUnqualified()) { - return $name; - } - $lowerName = $name->toLowerString(); - if (!$this->phpVersion->supportsBuiltinType($lowerName)) { - return $name; - } - return new Node\Identifier($lowerName, $name->getAttributes()); - } - /** - * Get combined start and end attributes at a stack location - * - * @param int $stackPos Stack location - * - * @return array Combined start and end attributes - */ - protected function getAttributesAt(int $stackPos): array - { - return $this->getAttributes($this->tokenStartStack[$stackPos], $this->tokenEndStack[$stackPos]); - } - protected function getFloatCastKind(string $cast): int - { - $cast = strtolower($cast); - if (strpos($cast, 'float') !== \false) { - return Double::KIND_FLOAT; - } - if (strpos($cast, 'real') !== \false) { - return Double::KIND_REAL; - } - return Double::KIND_DOUBLE; - } - /** @param array $attributes */ - protected function parseLNumber(string $str, array $attributes, bool $allowInvalidOctal = \false): Int_ - { - try { - return Int_::fromString($str, $attributes, $allowInvalidOctal); - } catch (Error $error) { - $this->emitError($error); - // Use dummy value - return new Int_(0, $attributes); - } - } - /** - * Parse a T_NUM_STRING token into either an integer or string node. - * - * @param string $str Number string - * @param array $attributes Attributes - * - * @return Int_|String_ Integer or string node. - */ - protected function parseNumString(string $str, array $attributes) - { - if (!preg_match('/^(?:0|-?[1-9][0-9]*)$/', $str)) { - return new String_($str, $attributes); - } - $num = +$str; - if (!is_int($num)) { - return new String_($str, $attributes); - } - return new Int_($num, $attributes); - } - /** @param array $attributes */ - protected function stripIndentation(string $string, int $indentLen, string $indentChar, bool $newlineAtStart, bool $newlineAtEnd, array $attributes): string - { - if ($indentLen === 0) { - return $string; - } - $start = $newlineAtStart ? '(?:(?<=\n)|\A)' : '(?<=\n)'; - $end = $newlineAtEnd ? '(?:(?=[\r\n])|\z)' : '(?=[\r\n])'; - $regex = '/' . $start . '([ \t]*)(' . $end . ')?/'; - return preg_replace_callback($regex, function ($matches) use ($indentLen, $indentChar, $attributes) { - $prefix = substr($matches[1], 0, $indentLen); - if (\false !== strpos($prefix, $indentChar === " " ? "\t" : " ")) { - $this->emitError(new Error('Invalid indentation - tabs and spaces cannot be mixed', $attributes)); - } elseif (strlen($prefix) < $indentLen && !isset($matches[2])) { - $this->emitError(new Error('Invalid body indentation level ' . '(expecting an indentation level of at least ' . $indentLen . ')', $attributes)); - } - return substr($matches[0], strlen($prefix)); - }, $string); - } - /** - * @param string|(Expr|InterpolatedStringPart)[] $contents - * @param array $attributes - * @param array $endTokenAttributes - */ - protected function parseDocString(string $startToken, $contents, string $endToken, array $attributes, array $endTokenAttributes, bool $parseUnicodeEscape): Expr - { - $kind = strpos($startToken, "'") === \false ? String_::KIND_HEREDOC : String_::KIND_NOWDOC; - $regex = '/\A[bB]?<<<[ \t]*[\'"]?([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)[\'"]?(?:\r\n|\n|\r)\z/'; - $result = preg_match($regex, $startToken, $matches); - assert($result === 1); - $label = $matches[1]; - $result = preg_match('/\A[ \t]*/', $endToken, $matches); - assert($result === 1); - $indentation = $matches[0]; - $attributes['kind'] = $kind; - $attributes['docLabel'] = $label; - $attributes['docIndentation'] = $indentation; - $indentHasSpaces = \false !== strpos($indentation, " "); - $indentHasTabs = \false !== strpos($indentation, "\t"); - if ($indentHasSpaces && $indentHasTabs) { - $this->emitError(new Error('Invalid indentation - tabs and spaces cannot be mixed', $endTokenAttributes)); - // Proceed processing as if this doc string is not indented - $indentation = ''; - } - $indentLen = \strlen($indentation); - $indentChar = $indentHasSpaces ? " " : "\t"; - if (\is_string($contents)) { - if ($contents === '') { - $attributes['rawValue'] = $contents; - return new String_('', $attributes); - } - $contents = $this->stripIndentation($contents, $indentLen, $indentChar, \true, \true, $attributes); - $contents = preg_replace('~(\r\n|\n|\r)\z~', '', $contents); - $attributes['rawValue'] = $contents; - if ($kind === String_::KIND_HEREDOC) { - $contents = String_::parseEscapeSequences($contents, null, $parseUnicodeEscape); - } - return new String_($contents, $attributes); - } else { - assert(count($contents) > 0); - if (!$contents[0] instanceof Node\InterpolatedStringPart) { - // If there is no leading encapsed string part, pretend there is an empty one - $this->stripIndentation('', $indentLen, $indentChar, \true, \false, $contents[0]->getAttributes()); - } - $newContents = []; - foreach ($contents as $i => $part) { - if ($part instanceof Node\InterpolatedStringPart) { - $isLast = $i === \count($contents) - 1; - $part->value = $this->stripIndentation($part->value, $indentLen, $indentChar, $i === 0, $isLast, $part->getAttributes()); - if ($isLast) { - $part->value = preg_replace('~(\r\n|\n|\r)\z~', '', $part->value); - } - $part->setAttribute('rawValue', $part->value); - $part->value = String_::parseEscapeSequences($part->value, null, $parseUnicodeEscape); - if ('' === $part->value) { - continue; - } - } - $newContents[] = $part; - } - return new InterpolatedString($newContents, $attributes); - } - } - protected function createCommentFromToken(Token $token, int $tokenPos): Comment - { - assert($token->id === \T_COMMENT || $token->id == \T_DOC_COMMENT); - return \T_DOC_COMMENT === $token->id ? new Comment\Doc($token->text, $token->line, $token->pos, $tokenPos, $token->getEndLine(), $token->getEndPos() - 1, $tokenPos) : new Comment($token->text, $token->line, $token->pos, $tokenPos, $token->getEndLine(), $token->getEndPos() - 1, $tokenPos); - } - /** - * Get last comment before the given token position, if any - */ - protected function getCommentBeforeToken(int $tokenPos): ?Comment - { - while (--$tokenPos >= 0) { - $token = $this->tokens[$tokenPos]; - if (!isset($this->dropTokens[$token->id])) { - break; - } - if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) { - return $this->createCommentFromToken($token, $tokenPos); - } - } - return null; - } - /** - * Create a zero-length nop to capture preceding comments, if any. - */ - protected function maybeCreateZeroLengthNop(int $tokenPos): ?Nop - { - $comment = $this->getCommentBeforeToken($tokenPos); - if ($comment === null) { - return null; - } - $commentEndLine = $comment->getEndLine(); - $commentEndFilePos = $comment->getEndFilePos(); - $commentEndTokenPos = $comment->getEndTokenPos(); - $attributes = ['startLine' => $commentEndLine, 'endLine' => $commentEndLine, 'startFilePos' => $commentEndFilePos + 1, 'endFilePos' => $commentEndFilePos, 'startTokenPos' => $commentEndTokenPos + 1, 'endTokenPos' => $commentEndTokenPos]; - return new Nop($attributes); - } - protected function maybeCreateNop(int $tokenStartPos, int $tokenEndPos): ?Nop - { - if ($this->getCommentBeforeToken($tokenStartPos) === null) { - return null; - } - return new Nop($this->getAttributes($tokenStartPos, $tokenEndPos)); - } - protected function handleHaltCompiler(): string - { - // Prevent the lexer from returning any further tokens. - $nextToken = $this->tokens[$this->tokenPos + 1]; - $this->tokenPos = \count($this->tokens) - 2; - // Return text after __halt_compiler. - return $nextToken->id === \T_INLINE_HTML ? $nextToken->text : ''; - } - protected function inlineHtmlHasLeadingNewline(int $stackPos): bool - { - $tokenPos = $this->tokenStartStack[$stackPos]; - $token = $this->tokens[$tokenPos]; - assert($token->id == \T_INLINE_HTML); - if ($tokenPos > 0) { - $prevToken = $this->tokens[$tokenPos - 1]; - assert($prevToken->id == \T_CLOSE_TAG); - return \false !== strpos($prevToken->text, "\n") || \false !== strpos($prevToken->text, "\r"); - } - return \true; - } - /** - * @return array - */ - protected function createEmptyElemAttributes(int $tokenPos): array - { - return $this->getAttributesForToken($tokenPos); - } - protected function fixupArrayDestructuring(Array_ $node): Expr\List_ - { - $this->createdArrays->detach($node); - return new Expr\List_(array_map(function (Node\ArrayItem $item) { - if ($item->value instanceof Expr\Error) { - // We used Error as a placeholder for empty elements, which are legal for destructuring. - return null; - } - if ($item->value instanceof Array_) { - return new Node\ArrayItem($this->fixupArrayDestructuring($item->value), $item->key, $item->byRef, $item->getAttributes()); - } - return $item; - }, $node->items), ['kind' => Expr\List_::KIND_ARRAY] + $node->getAttributes()); - } - protected function postprocessList(Expr\List_ $node): void - { - foreach ($node->items as $i => $item) { - if ($item->value instanceof Expr\Error) { - // We used Error as a placeholder for empty elements, which are legal for destructuring. - $node->items[$i] = null; - } - } - } - /** @param ElseIf_|Else_ $node */ - protected function fixupAlternativeElse($node): void - { - // Make sure a trailing nop statement carrying comments is part of the node. - $numStmts = \count($node->stmts); - if ($numStmts !== 0 && $node->stmts[$numStmts - 1] instanceof Nop) { - $nopAttrs = $node->stmts[$numStmts - 1]->getAttributes(); - if (isset($nopAttrs['endLine'])) { - $node->setAttribute('endLine', $nopAttrs['endLine']); - } - if (isset($nopAttrs['endFilePos'])) { - $node->setAttribute('endFilePos', $nopAttrs['endFilePos']); - } - if (isset($nopAttrs['endTokenPos'])) { - $node->setAttribute('endTokenPos', $nopAttrs['endTokenPos']); - } - } - } - protected function checkClassModifier(int $a, int $b, int $modifierPos): void - { - try { - Modifiers::verifyClassModifier($a, $b); - } catch (Error $error) { - $error->setAttributes($this->getAttributesAt($modifierPos)); - $this->emitError($error); - } - } - protected function checkModifier(int $a, int $b, int $modifierPos): void - { - // Jumping through some hoops here because verifyModifier() is also used elsewhere - try { - Modifiers::verifyModifier($a, $b); - } catch (Error $error) { - $error->setAttributes($this->getAttributesAt($modifierPos)); - $this->emitError($error); - } - } - protected function checkParam(Param $node): void - { - if ($node->variadic && null !== $node->default) { - $this->emitError(new Error('Variadic parameter cannot have a default value', $node->default->getAttributes())); - } - } - protected function checkTryCatch(TryCatch $node): void - { - if (empty($node->catches) && null === $node->finally) { - $this->emitError(new Error('Cannot use try without catch or finally', $node->getAttributes())); - } - } - protected function checkNamespace(Namespace_ $node): void - { - if (null !== $node->stmts) { - foreach ($node->stmts as $stmt) { - if ($stmt instanceof Namespace_) { - $this->emitError(new Error('Namespace declarations cannot be nested', $stmt->getAttributes())); - } - } - } - } - private function checkClassName(?Identifier $name, int $namePos): void - { - if (null !== $name && $name->isSpecialClassName()) { - $this->emitError(new Error(sprintf('Cannot use \'%s\' as class name as it is reserved', $name), $this->getAttributesAt($namePos))); - } - } - /** @param Name[] $interfaces */ - private function checkImplementedInterfaces(array $interfaces): void - { - foreach ($interfaces as $interface) { - if ($interface->isSpecialClassName()) { - $this->emitError(new Error(sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface), $interface->getAttributes())); - } - } - } - protected function checkClass(Class_ $node, int $namePos): void - { - $this->checkClassName($node->name, $namePos); - if ($node->extends && $node->extends->isSpecialClassName()) { - $this->emitError(new Error(sprintf('Cannot use \'%s\' as class name as it is reserved', $node->extends), $node->extends->getAttributes())); - } - $this->checkImplementedInterfaces($node->implements); - } - protected function checkInterface(Interface_ $node, int $namePos): void - { - $this->checkClassName($node->name, $namePos); - $this->checkImplementedInterfaces($node->extends); - } - protected function checkEnum(Enum_ $node, int $namePos): void - { - $this->checkClassName($node->name, $namePos); - $this->checkImplementedInterfaces($node->implements); - } - protected function checkClassMethod(ClassMethod $node, int $modifierPos): void - { - if ($node->flags & Modifiers::STATIC) { - switch ($node->name->toLowerString()) { - case '__construct': - $this->emitError(new Error(sprintf('Constructor %s() cannot be static', $node->name), $this->getAttributesAt($modifierPos))); - break; - case '__destruct': - $this->emitError(new Error(sprintf('Destructor %s() cannot be static', $node->name), $this->getAttributesAt($modifierPos))); - break; - case '__clone': - $this->emitError(new Error(sprintf('Clone method %s() cannot be static', $node->name), $this->getAttributesAt($modifierPos))); - break; - } - } - if ($node->flags & Modifiers::READONLY) { - $this->emitError(new Error(sprintf('Method %s() cannot be readonly', $node->name), $this->getAttributesAt($modifierPos))); - } - } - protected function checkClassConst(ClassConst $node, int $modifierPos): void - { - foreach ([Modifiers::STATIC, Modifiers::ABSTRACT, Modifiers::READONLY] as $modifier) { - if ($node->flags & $modifier) { - $this->emitError(new Error("Cannot use '" . Modifiers::toString($modifier) . "' as constant modifier", $this->getAttributesAt($modifierPos))); - } - } - } - protected function checkUseUse(UseItem $node, int $namePos): void - { - if ($node->alias && $node->alias->isSpecialClassName()) { - $this->emitError(new Error(sprintf('Cannot use %s as %s because \'%2$s\' is a special class name', $node->name, $node->alias), $this->getAttributesAt($namePos))); - } - } - protected function checkPropertyHooksForMultiProperty(Property $property, int $hookPos): void - { - if (count($property->props) > 1) { - $this->emitError(new Error('Cannot use hooks when declaring multiple properties', $this->getAttributesAt($hookPos))); - } - } - /** @param PropertyHook[] $hooks */ - protected function checkEmptyPropertyHookList(array $hooks, int $hookPos): void - { - if (empty($hooks)) { - $this->emitError(new Error('Property hook list cannot be empty', $this->getAttributesAt($hookPos))); - } - } - protected function checkPropertyHook(PropertyHook $hook, ?int $paramListPos): void - { - $name = $hook->name->toLowerString(); - if ($name !== 'get' && $name !== 'set') { - $this->emitError(new Error('Unknown hook "' . $hook->name . '", expected "get" or "set"', $hook->name->getAttributes())); - } - if ($name === 'get' && $paramListPos !== null) { - $this->emitError(new Error('get hook must not have a parameter list', $this->getAttributesAt($paramListPos))); - } - } - protected function checkPropertyHookModifiers(int $a, int $b, int $modifierPos): void - { - try { - Modifiers::verifyModifier($a, $b); - } catch (Error $error) { - $error->setAttributes($this->getAttributesAt($modifierPos)); - $this->emitError($error); - } - if ($b != Modifiers::FINAL) { - $this->emitError(new Error('Cannot use the ' . Modifiers::toString($b) . ' modifier on a property hook', $this->getAttributesAt($modifierPos))); - } - } - /** - * @param Property|Param $node - */ - protected function addPropertyNameToHooks(Node $node): void - { - if ($node instanceof Property) { - $name = $node->props[0]->name->toString(); - } else { - $name = $node->var->name; - } - foreach ($node->hooks as $hook) { - $hook->setAttribute('propertyName', $name); - } - } - /** @param array $args */ - private function isSimpleExit(array $args): bool - { - if (\count($args) === 0) { - return \true; - } - if (\count($args) === 1) { - $arg = $args[0]; - return $arg instanceof Arg && $arg->name === null && $arg->byRef === \false && $arg->unpack === \false; - } - return \false; - } - /** - * @param array $args - * @param array $attrs - */ - protected function createExitExpr(string $name, int $namePos, array $args, array $attrs): Expr - { - if ($this->isSimpleExit($args)) { - // Create Exit node for backwards compatibility. - $attrs['kind'] = strtolower($name) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; - return new Expr\Exit_(\count($args) === 1 ? $args[0]->value : null, $attrs); - } - return new Expr\FuncCall(new Name($name, $this->getAttributesAt($namePos)), $args, $attrs); - } - /** - * Creates the token map. - * - * The token map maps the PHP internal token identifiers - * to the identifiers used by the Parser. Additionally it - * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'. - * - * @return array The token map - */ - protected function createTokenMap(): array - { - $tokenMap = []; - // Single-char tokens use an identity mapping. - for ($i = 0; $i < 256; ++$i) { - $tokenMap[$i] = $i; - } - foreach ($this->symbolToName as $name) { - if ($name[0] === 'T') { - $tokenMap[\constant($name)] = constant(static::class . '::' . $name); - } - } - // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO - $tokenMap[\T_OPEN_TAG_WITH_ECHO] = static::T_ECHO; - // T_CLOSE_TAG is equivalent to ';' - $tokenMap[\T_CLOSE_TAG] = ord(';'); - // We have created a map from PHP token IDs to external symbol IDs. - // Now map them to the internal symbol ID. - $fullTokenMap = []; - foreach ($tokenMap as $phpToken => $extSymbol) { - $intSymbol = $this->tokenToSymbol[$extSymbol]; - if ($intSymbol === $this->invalidSymbol) { - continue; - } - $fullTokenMap[$phpToken] = $intSymbol; - } - return $fullTokenMap; - } -} -isHostVersion()) { - $lexer = new Lexer(); - } else { - $lexer = new Lexer\Emulative($version); - } - if ($version->id >= 80000) { - return new Php8($lexer, $version); - } - return new Php7($lexer, $version); - } - /** - * Create a parser targeting the newest version supported by this library. Code for older - * versions will be accepted if there have been no relevant backwards-compatibility breaks in - * PHP. - */ - public function createForNewestSupportedVersion(): Parser - { - return $this->createForVersion(PhpVersion::getNewestSupported()); - } - /** - * Create a parser targeting the host PHP version, that is the PHP version we're currently - * running on. This parser will not use any token emulation. - */ - public function createForHostVersion(): Parser - { - return $this->createForVersion(PhpVersion::getHostVersion()); - } -} - 50100, 'callable' => 50400, 'bool' => 70000, 'int' => 70000, 'float' => 70000, 'string' => 70000, 'iterable' => 70100, 'void' => 70100, 'object' => 70200, 'null' => 80000, 'false' => 80000, 'mixed' => 80000, 'never' => 80100, 'true' => 80200]; - private function __construct(int $id) - { - $this->id = $id; - } - /** - * Create a PhpVersion object from major and minor version components. - */ - public static function fromComponents(int $major, int $minor): self - { - return new self($major * 10000 + $minor * 100); - } - /** - * Get the newest PHP version supported by this library. Support for this version may be partial, - * if it is still under development. - */ - public static function getNewestSupported(): self - { - return self::fromComponents(8, 4); - } - /** - * Get the host PHP version, that is the PHP version we're currently running on. - */ - public static function getHostVersion(): self - { - return self::fromComponents(\PHP_MAJOR_VERSION, \PHP_MINOR_VERSION); - } - /** - * Parse the version from a string like "8.1". - */ - public static function fromString(string $version): self - { - if (!preg_match('/^(\d+)\.(\d+)/', $version, $matches)) { - throw new \LogicException("Invalid PHP version \"{$version}\""); - } - return self::fromComponents((int) $matches[1], (int) $matches[2]); - } - /** - * Check whether two versions are the same. - */ - public function equals(PhpVersion $other): bool - { - return $this->id === $other->id; - } - /** - * Check whether this version is greater than or equal to the argument. - */ - public function newerOrEqual(PhpVersion $other): bool - { - return $this->id >= $other->id; - } - /** - * Check whether this version is older than the argument. - */ - public function older(PhpVersion $other): bool - { - return $this->id < $other->id; - } - /** - * Check whether this is the host PHP version. - */ - public function isHostVersion(): bool - { - return $this->equals(self::getHostVersion()); - } - /** - * Check whether this PHP version supports the given builtin type. Type name must be lowercase. - */ - public function supportsBuiltinType(string $type): bool - { - $minVersion = self::BUILTIN_TYPE_VERSIONS[$type] ?? null; - return $minVersion !== null && $this->id >= $minVersion; - } - /** - * Whether this version supports [] array literals. - */ - public function supportsShortArraySyntax(): bool - { - return $this->id >= 50400; - } - /** - * Whether this version supports [] for destructuring. - */ - public function supportsShortArrayDestructuring(): bool - { - return $this->id >= 70100; - } - /** - * Whether this version supports flexible heredoc/nowdoc. - */ - public function supportsFlexibleHeredoc(): bool - { - return $this->id >= 70300; - } - /** - * Whether this version supports trailing commas in parameter lists. - */ - public function supportsTrailingCommaInParamList(): bool - { - return $this->id >= 80000; - } - /** - * Whether this version allows "$var =& new Obj". - */ - public function allowsAssignNewByReference(): bool - { - return $this->id < 70000; - } - /** - * Whether this version allows invalid octals like "08". - */ - public function allowsInvalidOctals(): bool - { - return $this->id < 70000; - } - /** - * Whether this version allows DEL (\x7f) to occur in identifiers. - */ - public function allowsDelInIdentifiers(): bool - { - return $this->id < 70100; - } - /** - * Whether this version supports yield in expression context without parentheses. - */ - public function supportsYieldWithoutParentheses(): bool - { - return $this->id >= 70000; - } - /** - * Whether this version supports unicode escape sequences in strings. - */ - public function supportsUnicodeEscapes(): bool - { - return $this->id >= 70000; - } -} -pAttrGroups($node->attrGroups, \true) . $this->pModifiers($node->flags) . ($node->type ? $this->p($node->type) . ' ' : '') . ($node->byRef ? '&' : '') . ($node->variadic ? '...' : '') . $this->p($node->var) . ($node->default ? ' = ' . $this->p($node->default) : '') . ($node->hooks ? ' {' . $this->pStmts($node->hooks) . $this->nl . '}' : ''); - } - protected function pArg(Node\Arg $node): string - { - return ($node->name ? $node->name->toString() . ': ' : '') . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value); - } - protected function pVariadicPlaceholder(Node\VariadicPlaceholder $node): string - { - return '...'; - } - protected function pConst(Node\Const_ $node): string - { - return $node->name . ' = ' . $this->p($node->value); - } - protected function pNullableType(Node\NullableType $node): string - { - return '?' . $this->p($node->type); - } - protected function pUnionType(Node\UnionType $node): string - { - $types = []; - foreach ($node->types as $typeNode) { - if ($typeNode instanceof Node\IntersectionType) { - $types[] = '(' . $this->p($typeNode) . ')'; - continue; - } - $types[] = $this->p($typeNode); - } - return implode('|', $types); - } - protected function pIntersectionType(Node\IntersectionType $node): string - { - return $this->pImplode($node->types, '&'); - } - protected function pIdentifier(Node\Identifier $node): string - { - return $node->name; - } - protected function pVarLikeIdentifier(Node\VarLikeIdentifier $node): string - { - return '$' . $node->name; - } - protected function pAttribute(Node\Attribute $node): string - { - return $this->p($node->name) . ($node->args ? '(' . $this->pCommaSeparated($node->args) . ')' : ''); - } - protected function pAttributeGroup(Node\AttributeGroup $node): string - { - return '#[' . $this->pCommaSeparated($node->attrs) . ']'; - } - // Names - protected function pName(Name $node): string - { - return $node->name; - } - protected function pName_FullyQualified(Name\FullyQualified $node): string - { - return '\\' . $node->name; - } - protected function pName_Relative(Name\Relative $node): string - { - return 'namespace\\' . $node->name; - } - // Magic Constants - protected function pScalar_MagicConst_Class(MagicConst\Class_ $node): string - { - return '__CLASS__'; - } - protected function pScalar_MagicConst_Dir(MagicConst\Dir $node): string - { - return '__DIR__'; - } - protected function pScalar_MagicConst_File(MagicConst\File $node): string - { - return '__FILE__'; - } - protected function pScalar_MagicConst_Function(MagicConst\Function_ $node): string - { - return '__FUNCTION__'; - } - protected function pScalar_MagicConst_Line(MagicConst\Line $node): string - { - return '__LINE__'; - } - protected function pScalar_MagicConst_Method(MagicConst\Method $node): string - { - return '__METHOD__'; - } - protected function pScalar_MagicConst_Namespace(MagicConst\Namespace_ $node): string - { - return '__NAMESPACE__'; - } - protected function pScalar_MagicConst_Trait(MagicConst\Trait_ $node): string - { - return '__TRAIT__'; - } - protected function pScalar_MagicConst_Property(MagicConst\Property $node): string - { - return '__PROPERTY__'; - } - // Scalars - private function indentString(string $str): string - { - return str_replace("\n", $this->nl, $str); - } - protected function pScalar_String(Scalar\String_ $node): string - { - $kind = $node->getAttribute('kind', Scalar\String_::KIND_SINGLE_QUOTED); - switch ($kind) { - case Scalar\String_::KIND_NOWDOC: - $label = $node->getAttribute('docLabel'); - if ($label && !$this->containsEndLabel($node->value, $label)) { - $shouldIdent = $this->phpVersion->supportsFlexibleHeredoc(); - $nl = $shouldIdent ? $this->nl : $this->newline; - if ($node->value === '') { - return "<<<'{$label}'{$nl}{$label}{$this->docStringEndToken}"; - } - // Make sure trailing \r is not combined with following \n into CRLF. - if ($node->value[strlen($node->value) - 1] !== "\r") { - $value = $shouldIdent ? $this->indentString($node->value) : $node->value; - return "<<<'{$label}'{$nl}{$value}{$nl}{$label}{$this->docStringEndToken}"; - } - } - /* break missing intentionally */ - // no break - case Scalar\String_::KIND_SINGLE_QUOTED: - return $this->pSingleQuotedString($node->value); - case Scalar\String_::KIND_HEREDOC: - $label = $node->getAttribute('docLabel'); - $escaped = $this->escapeString($node->value, null); - if ($label && !$this->containsEndLabel($escaped, $label)) { - $nl = $this->phpVersion->supportsFlexibleHeredoc() ? $this->nl : $this->newline; - if ($escaped === '') { - return "<<<{$label}{$nl}{$label}{$this->docStringEndToken}"; - } - return "<<<{$label}{$nl}{$escaped}{$nl}{$label}{$this->docStringEndToken}"; - } - /* break missing intentionally */ - // no break - case Scalar\String_::KIND_DOUBLE_QUOTED: - return '"' . $this->escapeString($node->value, '"') . '"'; - } - throw new \Exception('Invalid string kind'); - } - protected function pScalar_InterpolatedString(Scalar\InterpolatedString $node): string - { - if ($node->getAttribute('kind') === Scalar\String_::KIND_HEREDOC) { - $label = $node->getAttribute('docLabel'); - if ($label && !$this->encapsedContainsEndLabel($node->parts, $label)) { - $nl = $this->phpVersion->supportsFlexibleHeredoc() ? $this->nl : $this->newline; - if (count($node->parts) === 1 && $node->parts[0] instanceof Node\InterpolatedStringPart && $node->parts[0]->value === '') { - return "<<<{$label}{$nl}{$label}{$this->docStringEndToken}"; - } - return "<<<{$label}{$nl}" . $this->pEncapsList($node->parts, null) . "{$nl}{$label}{$this->docStringEndToken}"; - } - } - return '"' . $this->pEncapsList($node->parts, '"') . '"'; - } - protected function pScalar_Int(Scalar\Int_ $node): string - { - if ($node->value === -\PHP_INT_MAX - 1) { - // PHP_INT_MIN cannot be represented as a literal, - // because the sign is not part of the literal - return '(-' . \PHP_INT_MAX . '-1)'; - } - $kind = $node->getAttribute('kind', Scalar\Int_::KIND_DEC); - if (Scalar\Int_::KIND_DEC === $kind) { - return (string) $node->value; - } - if ($node->value < 0) { - $sign = '-'; - $str = (string) -$node->value; - } else { - $sign = ''; - $str = (string) $node->value; - } - switch ($kind) { - case Scalar\Int_::KIND_BIN: - return $sign . '0b' . base_convert($str, 10, 2); - case Scalar\Int_::KIND_OCT: - return $sign . '0' . base_convert($str, 10, 8); - case Scalar\Int_::KIND_HEX: - return $sign . '0x' . base_convert($str, 10, 16); - } - throw new \Exception('Invalid number kind'); - } - protected function pScalar_Float(Scalar\Float_ $node): string - { - if (!is_finite($node->value)) { - if ($node->value === \INF) { - return '1.0E+1000'; - } - if ($node->value === -\INF) { - return '-1.0E+1000'; - } else { - return '\NAN'; - } - } - // Try to find a short full-precision representation - $stringValue = sprintf('%.16G', $node->value); - if ($node->value !== (float) $stringValue) { - $stringValue = sprintf('%.17G', $node->value); - } - // %G is locale dependent and there exists no locale-independent alternative. We don't want - // mess with switching locales here, so let's assume that a comma is the only non-standard - // decimal separator we may encounter... - $stringValue = str_replace(',', '.', $stringValue); - // ensure that number is really printed as float - return preg_match('/^-?[0-9]+$/', $stringValue) ? $stringValue . '.0' : $stringValue; - } - // Assignments - protected function pExpr_Assign(Expr\Assign $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\Assign::class, $this->p($node->var) . ' = ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignRef(Expr\AssignRef $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\AssignRef::class, $this->p($node->var) . ' =& ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_Plus(AssignOp\Plus $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\Plus::class, $this->p($node->var) . ' += ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_Minus(AssignOp\Minus $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\Minus::class, $this->p($node->var) . ' -= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_Mul(AssignOp\Mul $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\Mul::class, $this->p($node->var) . ' *= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_Div(AssignOp\Div $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\Div::class, $this->p($node->var) . ' /= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_Concat(AssignOp\Concat $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\Concat::class, $this->p($node->var) . ' .= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_Mod(AssignOp\Mod $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\Mod::class, $this->p($node->var) . ' %= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_BitwiseAnd(AssignOp\BitwiseAnd $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\BitwiseAnd::class, $this->p($node->var) . ' &= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_BitwiseOr(AssignOp\BitwiseOr $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\BitwiseOr::class, $this->p($node->var) . ' |= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_BitwiseXor(AssignOp\BitwiseXor $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\BitwiseXor::class, $this->p($node->var) . ' ^= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_ShiftLeft(AssignOp\ShiftLeft $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\ShiftLeft::class, $this->p($node->var) . ' <<= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_ShiftRight(AssignOp\ShiftRight $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\ShiftRight::class, $this->p($node->var) . ' >>= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_Pow(AssignOp\Pow $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\Pow::class, $this->p($node->var) . ' **= ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_AssignOp_Coalesce(AssignOp\Coalesce $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(AssignOp\Coalesce::class, $this->p($node->var) . ' ??= ', $node->expr, $precedence, $lhsPrecedence); - } - // Binary expressions - protected function pExpr_BinaryOp_Plus(BinaryOp\Plus $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Plus::class, $node->left, ' + ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Minus(BinaryOp\Minus $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Minus::class, $node->left, ' - ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Mul(BinaryOp\Mul $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Mul::class, $node->left, ' * ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Div(BinaryOp\Div $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Div::class, $node->left, ' / ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Concat(BinaryOp\Concat $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Concat::class, $node->left, ' . ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Mod(BinaryOp\Mod $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Mod::class, $node->left, ' % ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_BooleanAnd(BinaryOp\BooleanAnd $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\BooleanAnd::class, $node->left, ' && ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_BooleanOr(BinaryOp\BooleanOr $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\BooleanOr::class, $node->left, ' || ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_BitwiseAnd(BinaryOp\BitwiseAnd $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\BitwiseAnd::class, $node->left, ' & ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_BitwiseOr(BinaryOp\BitwiseOr $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\BitwiseOr::class, $node->left, ' | ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_BitwiseXor(BinaryOp\BitwiseXor $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\BitwiseXor::class, $node->left, ' ^ ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_ShiftLeft(BinaryOp\ShiftLeft $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\ShiftLeft::class, $node->left, ' << ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_ShiftRight(BinaryOp\ShiftRight $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\ShiftRight::class, $node->left, ' >> ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Pow(BinaryOp\Pow $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Pow::class, $node->left, ' ** ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_LogicalAnd(BinaryOp\LogicalAnd $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\LogicalAnd::class, $node->left, ' and ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_LogicalOr(BinaryOp\LogicalOr $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\LogicalOr::class, $node->left, ' or ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_LogicalXor(BinaryOp\LogicalXor $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\LogicalXor::class, $node->left, ' xor ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Equal(BinaryOp\Equal $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Equal::class, $node->left, ' == ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_NotEqual(BinaryOp\NotEqual $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\NotEqual::class, $node->left, ' != ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Identical(BinaryOp\Identical $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Identical::class, $node->left, ' === ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_NotIdentical(BinaryOp\NotIdentical $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\NotIdentical::class, $node->left, ' !== ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Spaceship(BinaryOp\Spaceship $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Spaceship::class, $node->left, ' <=> ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Greater(BinaryOp\Greater $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Greater::class, $node->left, ' > ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_GreaterOrEqual(BinaryOp\GreaterOrEqual $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\GreaterOrEqual::class, $node->left, ' >= ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Smaller(BinaryOp\Smaller $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Smaller::class, $node->left, ' < ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_SmallerOrEqual(BinaryOp\SmallerOrEqual $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\SmallerOrEqual::class, $node->left, ' <= ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node, int $precedence, int $lhsPrecedence): string - { - return $this->pInfixOp(BinaryOp\Coalesce::class, $node->left, ' ?? ', $node->right, $precedence, $lhsPrecedence); - } - protected function pExpr_Instanceof(Expr\Instanceof_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPostfixOp(Expr\Instanceof_::class, $node->expr, ' instanceof ' . $this->pNewOperand($node->class), $precedence, $lhsPrecedence); - } - // Unary expressions - protected function pExpr_BooleanNot(Expr\BooleanNot $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\BooleanNot::class, '!', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_BitwiseNot(Expr\BitwiseNot $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\BitwiseNot::class, '~', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_UnaryMinus(Expr\UnaryMinus $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\UnaryMinus::class, '-', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_UnaryPlus(Expr\UnaryPlus $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\UnaryPlus::class, '+', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_PreInc(Expr\PreInc $node): string - { - return '++' . $this->p($node->var); - } - protected function pExpr_PreDec(Expr\PreDec $node): string - { - return '--' . $this->p($node->var); - } - protected function pExpr_PostInc(Expr\PostInc $node): string - { - return $this->p($node->var) . '++'; - } - protected function pExpr_PostDec(Expr\PostDec $node): string - { - return $this->p($node->var) . '--'; - } - protected function pExpr_ErrorSuppress(Expr\ErrorSuppress $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\ErrorSuppress::class, '@', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_YieldFrom(Expr\YieldFrom $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\YieldFrom::class, 'yield from ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_Print(Expr\Print_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\Print_::class, 'print ', $node->expr, $precedence, $lhsPrecedence); - } - // Casts - protected function pExpr_Cast_Int(Cast\Int_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Cast\Int_::class, '(int) ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_Cast_Double(Cast\Double $node, int $precedence, int $lhsPrecedence): string - { - $kind = $node->getAttribute('kind', Cast\Double::KIND_DOUBLE); - if ($kind === Cast\Double::KIND_DOUBLE) { - $cast = '(double)'; - } elseif ($kind === Cast\Double::KIND_FLOAT) { - $cast = '(float)'; - } else { - assert($kind === Cast\Double::KIND_REAL); - $cast = '(real)'; - } - return $this->pPrefixOp(Cast\Double::class, $cast . ' ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_Cast_String(Cast\String_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Cast\String_::class, '(string) ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_Cast_Array(Cast\Array_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Cast\Array_::class, '(array) ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_Cast_Object(Cast\Object_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Cast\Object_::class, '(object) ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_Cast_Bool(Cast\Bool_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Cast\Bool_::class, '(bool) ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_Cast_Unset(Cast\Unset_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Cast\Unset_::class, '(unset) ', $node->expr, $precedence, $lhsPrecedence); - } - // Function calls and similar constructs - protected function pExpr_FuncCall(Expr\FuncCall $node): string - { - return $this->pCallLhs($node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - protected function pExpr_MethodCall(Expr\MethodCall $node): string - { - return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - protected function pExpr_NullsafeMethodCall(Expr\NullsafeMethodCall $node): string - { - return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - protected function pExpr_StaticCall(Expr\StaticCall $node): string - { - return $this->pStaticDereferenceLhs($node->class) . '::' . ($node->name instanceof Expr ? $node->name instanceof Expr\Variable ? $this->p($node->name) : '{' . $this->p($node->name) . '}' : $node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - protected function pExpr_Empty(Expr\Empty_ $node): string - { - return 'empty(' . $this->p($node->expr) . ')'; - } - protected function pExpr_Isset(Expr\Isset_ $node): string - { - return 'isset(' . $this->pCommaSeparated($node->vars) . ')'; - } - protected function pExpr_Eval(Expr\Eval_ $node): string - { - return 'eval(' . $this->p($node->expr) . ')'; - } - protected function pExpr_Include(Expr\Include_ $node, int $precedence, int $lhsPrecedence): string - { - static $map = [Expr\Include_::TYPE_INCLUDE => 'include', Expr\Include_::TYPE_INCLUDE_ONCE => 'include_once', Expr\Include_::TYPE_REQUIRE => 'require', Expr\Include_::TYPE_REQUIRE_ONCE => 'require_once']; - return $this->pPrefixOp(Expr\Include_::class, $map[$node->type] . ' ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_List(Expr\List_ $node): string - { - $syntax = $node->getAttribute('kind', $this->phpVersion->supportsShortArrayDestructuring() ? Expr\List_::KIND_ARRAY : Expr\List_::KIND_LIST); - if ($syntax === Expr\List_::KIND_ARRAY) { - return '[' . $this->pMaybeMultiline($node->items, \true) . ']'; - } else { - return 'list(' . $this->pMaybeMultiline($node->items, \true) . ')'; - } - } - // Other - protected function pExpr_Error(Expr\Error $node): string - { - throw new \LogicException('Cannot pretty-print AST with Error nodes'); - } - protected function pExpr_Variable(Expr\Variable $node): string - { - if ($node->name instanceof Expr) { - return '${' . $this->p($node->name) . '}'; - } else { - return '$' . $node->name; - } - } - protected function pExpr_Array(Expr\Array_ $node): string - { - $syntax = $node->getAttribute('kind', $this->shortArraySyntax ? Expr\Array_::KIND_SHORT : Expr\Array_::KIND_LONG); - if ($syntax === Expr\Array_::KIND_SHORT) { - return '[' . $this->pMaybeMultiline($node->items, \true) . ']'; - } else { - return 'array(' . $this->pMaybeMultiline($node->items, \true) . ')'; - } - } - protected function pKey(?Node $node): string - { - if ($node === null) { - return ''; - } - // => is not really an operator and does not typically participate in precedence resolution. - // However, there is an exception if yield expressions with keys are involved: - // [yield $a => $b] is interpreted as [(yield $a => $b)], so we need to ensure that - // [(yield $a) => $b] is printed with parentheses. We approximate this by lowering the LHS - // precedence to that of yield (which will also print unnecessary parentheses for rare low - // precedence unary operators like include). - $yieldPrecedence = $this->precedenceMap[Expr\Yield_::class][0]; - return $this->p($node, self::MAX_PRECEDENCE, $yieldPrecedence) . ' => '; - } - protected function pArrayItem(Node\ArrayItem $node): string - { - return $this->pKey($node->key) . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value); - } - protected function pExpr_ArrayDimFetch(Expr\ArrayDimFetch $node): string - { - return $this->pDereferenceLhs($node->var) . '[' . (null !== $node->dim ? $this->p($node->dim) : '') . ']'; - } - protected function pExpr_ConstFetch(Expr\ConstFetch $node): string - { - return $this->p($node->name); - } - protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node): string - { - return $this->pStaticDereferenceLhs($node->class) . '::' . $this->pObjectProperty($node->name); - } - protected function pExpr_PropertyFetch(Expr\PropertyFetch $node): string - { - return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name); - } - protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node): string - { - return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name); - } - protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node): string - { - return $this->pStaticDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name); - } - protected function pExpr_ShellExec(Expr\ShellExec $node): string - { - return '`' . $this->pEncapsList($node->parts, '`') . '`'; - } - protected function pExpr_Closure(Expr\Closure $node): string - { - return $this->pAttrGroups($node->attrGroups, \true) . $this->pStatic($node->static) . 'function ' . ($node->byRef ? '&' : '') . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' . (!empty($node->uses) ? ' use (' . $this->pCommaSeparated($node->uses) . ')' : '') . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pExpr_Match(Expr\Match_ $node): string - { - return 'match (' . $this->p($node->cond) . ') {' . $this->pCommaSeparatedMultiline($node->arms, \true) . $this->nl . '}'; - } - protected function pMatchArm(Node\MatchArm $node): string - { - $result = ''; - if ($node->conds) { - for ($i = 0, $c = \count($node->conds); $i + 1 < $c; $i++) { - $result .= $this->p($node->conds[$i]) . ', '; - } - $result .= $this->pKey($node->conds[$i]); - } else { - $result = 'default => '; - } - return $result . $this->p($node->body); - } - protected function pExpr_ArrowFunction(Expr\ArrowFunction $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\ArrowFunction::class, $this->pAttrGroups($node->attrGroups, \true) . $this->pStatic($node->static) . 'fn' . ($node->byRef ? '&' : '') . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . ' => ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pClosureUse(Node\ClosureUse $node): string - { - return ($node->byRef ? '&' : '') . $this->p($node->var); - } - protected function pExpr_New(Expr\New_ $node): string - { - if ($node->class instanceof Stmt\Class_) { - $args = $node->args ? '(' . $this->pMaybeMultiline($node->args) . ')' : ''; - return 'new ' . $this->pClassCommon($node->class, $args); - } - return 'new ' . $this->pNewOperand($node->class) . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - protected function pExpr_Clone(Expr\Clone_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\Clone_::class, 'clone ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_Ternary(Expr\Ternary $node, int $precedence, int $lhsPrecedence): string - { - // a bit of cheating: we treat the ternary as a binary op where the ?...: part is the operator. - // this is okay because the part between ? and : never needs parentheses. - return $this->pInfixOp(Expr\Ternary::class, $node->cond, ' ?' . (null !== $node->if ? ' ' . $this->p($node->if) . ' ' : '') . ': ', $node->else, $precedence, $lhsPrecedence); - } - protected function pExpr_Exit(Expr\Exit_ $node): string - { - $kind = $node->getAttribute('kind', Expr\Exit_::KIND_DIE); - return ($kind === Expr\Exit_::KIND_EXIT ? 'exit' : 'die') . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : ''); - } - protected function pExpr_Throw(Expr\Throw_ $node, int $precedence, int $lhsPrecedence): string - { - return $this->pPrefixOp(Expr\Throw_::class, 'throw ', $node->expr, $precedence, $lhsPrecedence); - } - protected function pExpr_Yield(Expr\Yield_ $node, int $precedence, int $lhsPrecedence): string - { - if ($node->value === null) { - $opPrecedence = $this->precedenceMap[Expr\Yield_::class][0]; - return $opPrecedence >= $lhsPrecedence ? '(yield)' : 'yield'; - } else { - if (!$this->phpVersion->supportsYieldWithoutParentheses()) { - return '(yield ' . $this->pKey($node->key) . $this->p($node->value) . ')'; - } - return $this->pPrefixOp(Expr\Yield_::class, 'yield ' . $this->pKey($node->key), $node->value, $precedence, $lhsPrecedence); - } - } - // Declarations - protected function pStmt_Namespace(Stmt\Namespace_ $node): string - { - if ($this->canUseSemicolonNamespaces) { - return 'namespace ' . $this->p($node->name) . ';' . $this->nl . $this->pStmts($node->stmts, \false); - } else { - return 'namespace' . (null !== $node->name ? ' ' . $this->p($node->name) : '') . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - } - protected function pStmt_Use(Stmt\Use_ $node): string - { - return 'use ' . $this->pUseType($node->type) . $this->pCommaSeparated($node->uses) . ';'; - } - protected function pStmt_GroupUse(Stmt\GroupUse $node): string - { - return 'use ' . $this->pUseType($node->type) . $this->pName($node->prefix) . '\{' . $this->pCommaSeparated($node->uses) . '};'; - } - protected function pUseItem(Node\UseItem $node): string - { - return $this->pUseType($node->type) . $this->p($node->name) . (null !== $node->alias ? ' as ' . $node->alias : ''); - } - protected function pUseType(int $type): string - { - return $type === Stmt\Use_::TYPE_FUNCTION ? 'function ' : ($type === Stmt\Use_::TYPE_CONSTANT ? 'const ' : ''); - } - protected function pStmt_Interface(Stmt\Interface_ $node): string - { - return $this->pAttrGroups($node->attrGroups) . 'interface ' . $node->name . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_Enum(Stmt\Enum_ $node): string - { - return $this->pAttrGroups($node->attrGroups) . 'enum ' . $node->name . ($node->scalarType ? ' : ' . $this->p($node->scalarType) : '') . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_Class(Stmt\Class_ $node): string - { - return $this->pClassCommon($node, ' ' . $node->name); - } - protected function pStmt_Trait(Stmt\Trait_ $node): string - { - return $this->pAttrGroups($node->attrGroups) . 'trait ' . $node->name . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_EnumCase(Stmt\EnumCase $node): string - { - return $this->pAttrGroups($node->attrGroups) . 'case ' . $node->name . ($node->expr ? ' = ' . $this->p($node->expr) : '') . ';'; - } - protected function pStmt_TraitUse(Stmt\TraitUse $node): string - { - return 'use ' . $this->pCommaSeparated($node->traits) . (empty($node->adaptations) ? ';' : ' {' . $this->pStmts($node->adaptations) . $this->nl . '}'); - } - protected function pStmt_TraitUseAdaptation_Precedence(Stmt\TraitUseAdaptation\Precedence $node): string - { - return $this->p($node->trait) . '::' . $node->method . ' insteadof ' . $this->pCommaSeparated($node->insteadof) . ';'; - } - protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias $node): string - { - return (null !== $node->trait ? $this->p($node->trait) . '::' : '') . $node->method . ' as' . (null !== $node->newModifier ? ' ' . rtrim($this->pModifiers($node->newModifier), ' ') : '') . (null !== $node->newName ? ' ' . $node->newName : '') . ';'; - } - protected function pStmt_Property(Stmt\Property $node): string - { - return $this->pAttrGroups($node->attrGroups) . (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags)) . ($node->type ? $this->p($node->type) . ' ' : '') . $this->pCommaSeparated($node->props) . ($node->hooks ? ' {' . $this->pStmts($node->hooks) . $this->nl . '}' : ';'); - } - protected function pPropertyItem(Node\PropertyItem $node): string - { - return '$' . $node->name . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); - } - protected function pPropertyHook(Node\PropertyHook $node): string - { - return $this->pAttrGroups($node->attrGroups) . $this->pModifiers($node->flags) . ($node->byRef ? '&' : '') . $node->name . ($node->params ? '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' : '') . (\is_array($node->body) ? ' {' . $this->pStmts($node->body) . $this->nl . '}' : ($node->body !== null ? ' => ' . $this->p($node->body) : '') . ';'); - } - protected function pStmt_ClassMethod(Stmt\ClassMethod $node): string - { - return $this->pAttrGroups($node->attrGroups) . $this->pModifiers($node->flags) . 'function ' . ($node->byRef ? '&' : '') . $node->name . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . (null !== $node->stmts ? $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}' : ';'); - } - protected function pStmt_ClassConst(Stmt\ClassConst $node): string - { - return $this->pAttrGroups($node->attrGroups) . $this->pModifiers($node->flags) . 'const ' . (null !== $node->type ? $this->p($node->type) . ' ' : '') . $this->pCommaSeparated($node->consts) . ';'; - } - protected function pStmt_Function(Stmt\Function_ $node): string - { - return $this->pAttrGroups($node->attrGroups) . 'function ' . ($node->byRef ? '&' : '') . $node->name . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_Const(Stmt\Const_ $node): string - { - return 'const ' . $this->pCommaSeparated($node->consts) . ';'; - } - protected function pStmt_Declare(Stmt\Declare_ $node): string - { - return 'declare (' . $this->pCommaSeparated($node->declares) . ')' . (null !== $node->stmts ? ' {' . $this->pStmts($node->stmts) . $this->nl . '}' : ';'); - } - protected function pDeclareItem(Node\DeclareItem $node): string - { - return $node->key . '=' . $this->p($node->value); - } - // Control flow - protected function pStmt_If(Stmt\If_ $node): string - { - return 'if (' . $this->p($node->cond) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}' . ($node->elseifs ? ' ' . $this->pImplode($node->elseifs, ' ') : '') . (null !== $node->else ? ' ' . $this->p($node->else) : ''); - } - protected function pStmt_ElseIf(Stmt\ElseIf_ $node): string - { - return 'elseif (' . $this->p($node->cond) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_Else(Stmt\Else_ $node): string - { - if (\count($node->stmts) === 1 && $node->stmts[0] instanceof Stmt\If_) { - // Print as "else if" rather than "else { if }" - return 'else ' . $this->p($node->stmts[0]); - } - return 'else {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_For(Stmt\For_ $node): string - { - return 'for (' . $this->pCommaSeparated($node->init) . ';' . (!empty($node->cond) ? ' ' : '') . $this->pCommaSeparated($node->cond) . ';' . (!empty($node->loop) ? ' ' : '') . $this->pCommaSeparated($node->loop) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_Foreach(Stmt\Foreach_ $node): string - { - return 'foreach (' . $this->p($node->expr) . ' as ' . (null !== $node->keyVar ? $this->p($node->keyVar) . ' => ' : '') . ($node->byRef ? '&' : '') . $this->p($node->valueVar) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_While(Stmt\While_ $node): string - { - return 'while (' . $this->p($node->cond) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_Do(Stmt\Do_ $node): string - { - return 'do {' . $this->pStmts($node->stmts) . $this->nl . '} while (' . $this->p($node->cond) . ');'; - } - protected function pStmt_Switch(Stmt\Switch_ $node): string - { - return 'switch (' . $this->p($node->cond) . ') {' . $this->pStmts($node->cases) . $this->nl . '}'; - } - protected function pStmt_Case(Stmt\Case_ $node): string - { - return (null !== $node->cond ? 'case ' . $this->p($node->cond) : 'default') . ':' . $this->pStmts($node->stmts); - } - protected function pStmt_TryCatch(Stmt\TryCatch $node): string - { - return 'try {' . $this->pStmts($node->stmts) . $this->nl . '}' . ($node->catches ? ' ' . $this->pImplode($node->catches, ' ') : '') . ($node->finally !== null ? ' ' . $this->p($node->finally) : ''); - } - protected function pStmt_Catch(Stmt\Catch_ $node): string - { - return 'catch (' . $this->pImplode($node->types, '|') . ($node->var !== null ? ' ' . $this->p($node->var) : '') . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_Finally(Stmt\Finally_ $node): string - { - return 'finally {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pStmt_Break(Stmt\Break_ $node): string - { - return 'break' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; - } - protected function pStmt_Continue(Stmt\Continue_ $node): string - { - return 'continue' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; - } - protected function pStmt_Return(Stmt\Return_ $node): string - { - return 'return' . (null !== $node->expr ? ' ' . $this->p($node->expr) : '') . ';'; - } - protected function pStmt_Label(Stmt\Label $node): string - { - return $node->name . ':'; - } - protected function pStmt_Goto(Stmt\Goto_ $node): string - { - return 'goto ' . $node->name . ';'; - } - // Other - protected function pStmt_Expression(Stmt\Expression $node): string - { - return $this->p($node->expr) . ';'; - } - protected function pStmt_Echo(Stmt\Echo_ $node): string - { - return 'echo ' . $this->pCommaSeparated($node->exprs) . ';'; - } - protected function pStmt_Static(Stmt\Static_ $node): string - { - return 'static ' . $this->pCommaSeparated($node->vars) . ';'; - } - protected function pStmt_Global(Stmt\Global_ $node): string - { - return 'global ' . $this->pCommaSeparated($node->vars) . ';'; - } - protected function pStaticVar(Node\StaticVar $node): string - { - return $this->p($node->var) . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); - } - protected function pStmt_Unset(Stmt\Unset_ $node): string - { - return 'unset(' . $this->pCommaSeparated($node->vars) . ');'; - } - protected function pStmt_InlineHTML(Stmt\InlineHTML $node): string - { - $newline = $node->getAttribute('hasLeadingNewline', \true) ? $this->newline : ''; - return '?>' . $newline . $node->value . 'remaining; - } - protected function pStmt_Nop(Stmt\Nop $node): string - { - return ''; - } - protected function pStmt_Block(Stmt\Block $node): string - { - return '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - // Helpers - protected function pClassCommon(Stmt\Class_ $node, string $afterClassToken): string - { - return $this->pAttrGroups($node->attrGroups, $node->name === null) . $this->pModifiers($node->flags) . 'class' . $afterClassToken . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '') . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - protected function pObjectProperty(Node $node): string - { - if ($node instanceof Expr) { - return '{' . $this->p($node) . '}'; - } else { - assert($node instanceof Node\Identifier); - return $node->name; - } - } - /** @param (Expr|Node\InterpolatedStringPart)[] $encapsList */ - protected function pEncapsList(array $encapsList, ?string $quote): string - { - $return = ''; - foreach ($encapsList as $element) { - if ($element instanceof Node\InterpolatedStringPart) { - $return .= $this->escapeString($element->value, $quote); - } else { - $return .= '{' . $this->p($element) . '}'; - } - } - return $return; - } - protected function pSingleQuotedString(string $string): string - { - // It is idiomatic to only escape backslashes when necessary, i.e. when followed by ', \ or - // the end of the string ('Foo\Bar' instead of 'Foo\\Bar'). However, we also don't want to - // produce an odd number of backslashes, so '\\\\a' should not get rendered as '\\\a', even - // though that would be legal. - $regex = '/\'|\\\\(?=[\'\\\\]|$)|(?<=\\\\)\\\\/'; - return '\'' . preg_replace($regex, '\\\\$0', $string) . '\''; - } - protected function escapeString(string $string, ?string $quote): string - { - if (null === $quote) { - // For doc strings, don't escape newlines - $escaped = addcslashes($string, "\t\f\v\$\\"); - // But do escape isolated \r. Combined with the terminating newline, it might get - // interpreted as \r\n and dropped from the string contents. - $escaped = preg_replace('/\r(?!\n)/', '\r', $escaped); - if ($this->phpVersion->supportsFlexibleHeredoc()) { - $escaped = $this->indentString($escaped); - } - } else { - $escaped = addcslashes($string, "\n\r\t\f\v\$" . $quote . "\\"); - } - // Escape control characters and non-UTF-8 characters. - // Regex based on https://stackoverflow.com/a/11709412/385378. - $regex = '/( - [\x00-\x08\x0E-\x1F] # Control characters - | [\xC0-\xC1] # Invalid UTF-8 Bytes - | [\xF5-\xFF] # Invalid UTF-8 Bytes - | \xE0(?=[\x80-\x9F]) # Overlong encoding of prior code point - | \xF0(?=[\x80-\x8F]) # Overlong encoding of prior code point - | [\xC2-\xDF](?![\x80-\xBF]) # Invalid UTF-8 Sequence Start - | [\xE0-\xEF](?![\x80-\xBF]{2}) # Invalid UTF-8 Sequence Start - | [\xF0-\xF4](?![\x80-\xBF]{3}) # Invalid UTF-8 Sequence Start - | (?<=[\x00-\x7F\xF5-\xFF])[\x80-\xBF] # Invalid UTF-8 Sequence Middle - | (? $part) { - if ($part instanceof Node\InterpolatedStringPart && $this->containsEndLabel($this->escapeString($part->value, null), $label, $i === 0)) { - return \true; - } - } - return \false; - } - protected function pDereferenceLhs(Node $node): string - { - if (!$this->dereferenceLhsRequiresParens($node)) { - return $this->p($node); - } else { - return '(' . $this->p($node) . ')'; - } - } - protected function pStaticDereferenceLhs(Node $node): string - { - if (!$this->staticDereferenceLhsRequiresParens($node)) { - return $this->p($node); - } else { - return '(' . $this->p($node) . ')'; - } - } - protected function pCallLhs(Node $node): string - { - if (!$this->callLhsRequiresParens($node)) { - return $this->p($node); - } else { - return '(' . $this->p($node) . ')'; - } - } - protected function pNewOperand(Node $node): string - { - if (!$this->newOperandRequiresParens($node)) { - return $this->p($node); - } else { - return '(' . $this->p($node) . ')'; - } - } - /** - * @param Node[] $nodes - */ - protected function hasNodeWithComments(array $nodes): bool - { - foreach ($nodes as $node) { - if ($node && $node->getComments()) { - return \true; - } - } - return \false; - } - /** @param Node[] $nodes */ - protected function pMaybeMultiline(array $nodes, bool $trailingComma = \false): string - { - if (!$this->hasNodeWithComments($nodes)) { - return $this->pCommaSeparated($nodes); - } else { - return $this->pCommaSeparatedMultiline($nodes, $trailingComma) . $this->nl; - } - } - /** @param Node\AttributeGroup[] $nodes */ - protected function pAttrGroups(array $nodes, bool $inline = \false): string - { - $result = ''; - $sep = $inline ? ' ' : $this->nl; - foreach ($nodes as $node) { - $result .= $this->p($node) . $sep; - } - return $result; - } -} - */ - protected array $precedenceMap = [ - // [precedence, precedenceLHS, precedenceRHS] - // Where the latter two are the precedences to use for the LHS and RHS of a binary operator, - // where 1 is added to one of the sides depending on associativity. This information is not - // used for unary operators and set to -1. - Expr\Clone_::class => [-10, 0, 1], - BinaryOp\Pow::class => [0, 0, 1], - Expr\BitwiseNot::class => [10, -1, -1], - Expr\UnaryPlus::class => [10, -1, -1], - Expr\UnaryMinus::class => [10, -1, -1], - Cast\Int_::class => [10, -1, -1], - Cast\Double::class => [10, -1, -1], - Cast\String_::class => [10, -1, -1], - Cast\Array_::class => [10, -1, -1], - Cast\Object_::class => [10, -1, -1], - Cast\Bool_::class => [10, -1, -1], - Cast\Unset_::class => [10, -1, -1], - Expr\ErrorSuppress::class => [10, -1, -1], - Expr\Instanceof_::class => [20, -1, -1], - Expr\BooleanNot::class => [30, -1, -1], - BinaryOp\Mul::class => [40, 41, 40], - BinaryOp\Div::class => [40, 41, 40], - BinaryOp\Mod::class => [40, 41, 40], - BinaryOp\Plus::class => [50, 51, 50], - BinaryOp\Minus::class => [50, 51, 50], - BinaryOp\Concat::class => [50, 51, 50], - BinaryOp\ShiftLeft::class => [60, 61, 60], - BinaryOp\ShiftRight::class => [60, 61, 60], - BinaryOp\Smaller::class => [70, 70, 70], - BinaryOp\SmallerOrEqual::class => [70, 70, 70], - BinaryOp\Greater::class => [70, 70, 70], - BinaryOp\GreaterOrEqual::class => [70, 70, 70], - BinaryOp\Equal::class => [80, 80, 80], - BinaryOp\NotEqual::class => [80, 80, 80], - BinaryOp\Identical::class => [80, 80, 80], - BinaryOp\NotIdentical::class => [80, 80, 80], - BinaryOp\Spaceship::class => [80, 80, 80], - BinaryOp\BitwiseAnd::class => [90, 91, 90], - BinaryOp\BitwiseXor::class => [100, 101, 100], - BinaryOp\BitwiseOr::class => [110, 111, 110], - BinaryOp\BooleanAnd::class => [120, 121, 120], - BinaryOp\BooleanOr::class => [130, 131, 130], - BinaryOp\Coalesce::class => [140, 140, 141], - Expr\Ternary::class => [150, 150, 150], - Expr\Assign::class => [160, -1, -1], - Expr\AssignRef::class => [160, -1, -1], - AssignOp\Plus::class => [160, -1, -1], - AssignOp\Minus::class => [160, -1, -1], - AssignOp\Mul::class => [160, -1, -1], - AssignOp\Div::class => [160, -1, -1], - AssignOp\Concat::class => [160, -1, -1], - AssignOp\Mod::class => [160, -1, -1], - AssignOp\BitwiseAnd::class => [160, -1, -1], - AssignOp\BitwiseOr::class => [160, -1, -1], - AssignOp\BitwiseXor::class => [160, -1, -1], - AssignOp\ShiftLeft::class => [160, -1, -1], - AssignOp\ShiftRight::class => [160, -1, -1], - AssignOp\Pow::class => [160, -1, -1], - AssignOp\Coalesce::class => [160, -1, -1], - Expr\YieldFrom::class => [170, -1, -1], - Expr\Yield_::class => [175, -1, -1], - Expr\Print_::class => [180, -1, -1], - BinaryOp\LogicalAnd::class => [190, 191, 190], - BinaryOp\LogicalXor::class => [200, 201, 200], - BinaryOp\LogicalOr::class => [210, 211, 210], - Expr\Include_::class => [220, -1, -1], - Expr\ArrowFunction::class => [230, -1, -1], - Expr\Throw_::class => [240, -1, -1], - ]; - /** @var int Current indentation level. */ - protected int $indentLevel; - /** @var string String for single level of indentation */ - private string $indent; - /** @var int Width in spaces to indent by. */ - private int $indentWidth; - /** @var bool Whether to use tab indentation. */ - private bool $useTabs; - /** @var int Width in spaces of one tab. */ - private int $tabWidth = 4; - /** @var string Newline style. Does not include current indentation. */ - protected string $newline; - /** @var string Newline including current indentation. */ - protected string $nl; - /** @var string|null Token placed at end of doc string to ensure it is followed by a newline. - * Null if flexible doc strings are used. */ - protected ?string $docStringEndToken; - /** @var bool Whether semicolon namespaces can be used (i.e. no global namespace is used) */ - protected bool $canUseSemicolonNamespaces; - /** @var bool Whether to use short array syntax if the node specifies no preference */ - protected bool $shortArraySyntax; - /** @var PhpVersion PHP version to target */ - protected PhpVersion $phpVersion; - /** @var TokenStream|null Original tokens for use in format-preserving pretty print */ - protected ?TokenStream $origTokens; - /** @var Internal\Differ Differ for node lists */ - protected Differ $nodeListDiffer; - /** @var array Map determining whether a certain character is a label character */ - protected array $labelCharMap; - /** - * @var array> Map from token classes and subnode names to FIXUP_* constants. - * This is used during format-preserving prints to place additional parens/braces if necessary. - */ - protected array $fixupMap; - /** - * @var array Map from "{$node->getType()}->{$subNode}" - * to ['left' => $l, 'right' => $r], where $l and $r specify the token type that needs to be stripped - * when removing this node. - */ - protected array $removalMap; - /** - * @var array Map from - * "{$node->getType()}->{$subNode}" to [$find, $beforeToken, $extraLeft, $extraRight]. - * $find is an optional token after which the insertion occurs. $extraLeft/Right - * are optionally added before/after the main insertions. - */ - protected array $insertionMap; - /** - * @var array Map From "{$class}->{$subNode}" to string that should be inserted - * between elements of this list subnode. - */ - protected array $listInsertionMap; - /** - * @var array - */ - protected array $emptyListInsertionMap; - /** @var array Map from "{$class}->{$subNode}" to [$printFn, $token] - * where $printFn is the function to print the modifiers and $token is the token before which - * the modifiers should be reprinted. */ - protected array $modifierChangeMap; - /** - * Creates a pretty printer instance using the given options. - * - * Supported options: - * * PhpVersion $phpVersion: The PHP version to target (default to PHP 7.4). This option - * controls compatibility of the generated code with older PHP - * versions in cases where a simple stylistic choice exists (e.g. - * array() vs []). It is safe to pretty-print an AST for a newer - * PHP version while specifying an older target (but the result will - * of course not be compatible with the older version in that case). - * * string $newline: The newline style to use. Should be "\n" (default) or "\r\n". - * * string $indent: The indentation to use. Should either be all spaces or a single - * tab. Defaults to four spaces (" "). - * * bool $shortArraySyntax: Whether to use [] instead of array() as the default array - * syntax, if the node does not specify a format. Defaults to whether - * the phpVersion support short array syntax. - * - * @param array{ - * phpVersion?: PhpVersion, newline?: string, indent?: string, shortArraySyntax?: bool - * } $options Dictionary of formatting options - */ - public function __construct(array $options = []) - { - $this->phpVersion = $options['phpVersion'] ?? PhpVersion::fromComponents(7, 4); - $this->newline = $options['newline'] ?? "\n"; - if ($this->newline !== "\n" && $this->newline != "\r\n") { - throw new \LogicException('Option "newline" must be one of "\n" or "\r\n"'); - } - $this->shortArraySyntax = $options['shortArraySyntax'] ?? $this->phpVersion->supportsShortArraySyntax(); - $this->docStringEndToken = $this->phpVersion->supportsFlexibleHeredoc() ? null : '_DOC_STRING_END_' . mt_rand(); - $this->indent = $indent = $options['indent'] ?? ' '; - if ($indent === "\t") { - $this->useTabs = \true; - $this->indentWidth = $this->tabWidth; - } elseif ($indent === \str_repeat(' ', \strlen($indent))) { - $this->useTabs = \false; - $this->indentWidth = \strlen($indent); - } else { - throw new \LogicException('Option "indent" must either be all spaces or a single tab'); - } - } - /** - * Reset pretty printing state. - */ - protected function resetState(): void - { - $this->indentLevel = 0; - $this->nl = $this->newline; - $this->origTokens = null; - } - /** - * Set indentation level - * - * @param int $level Level in number of spaces - */ - protected function setIndentLevel(int $level): void - { - $this->indentLevel = $level; - if ($this->useTabs) { - $tabs = \intdiv($level, $this->tabWidth); - $spaces = $level % $this->tabWidth; - $this->nl = $this->newline . \str_repeat("\t", $tabs) . \str_repeat(' ', $spaces); - } else { - $this->nl = $this->newline . \str_repeat(' ', $level); - } - } - /** - * Increase indentation level. - */ - protected function indent(): void - { - $this->indentLevel += $this->indentWidth; - $this->nl .= $this->indent; - } - /** - * Decrease indentation level. - */ - protected function outdent(): void - { - assert($this->indentLevel >= $this->indentWidth); - $this->setIndentLevel($this->indentLevel - $this->indentWidth); - } - /** - * Pretty prints an array of statements. - * - * @param Node[] $stmts Array of statements - * - * @return string Pretty printed statements - */ - public function prettyPrint(array $stmts): string - { - $this->resetState(); - $this->preprocessNodes($stmts); - return ltrim($this->handleMagicTokens($this->pStmts($stmts, \false))); - } - /** - * Pretty prints an expression. - * - * @param Expr $node Expression node - * - * @return string Pretty printed node - */ - public function prettyPrintExpr(Expr $node): string - { - $this->resetState(); - return $this->handleMagicTokens($this->p($node)); - } - /** - * Pretty prints a file of statements (includes the opening newline . $this->newline; - } - $p = "newline . $this->newline . $this->prettyPrint($stmts); - if ($stmts[0] instanceof Stmt\InlineHTML) { - $p = preg_replace('/^<\?php\s+\?>\r?\n?/', '', $p); - } - if ($stmts[count($stmts) - 1] instanceof Stmt\InlineHTML) { - $p = preg_replace('/<\?php$/', '', rtrim($p)); - } - return $p; - } - /** - * Preprocesses the top-level nodes to initialize pretty printer state. - * - * @param Node[] $nodes Array of nodes - */ - protected function preprocessNodes(array $nodes): void - { - /* We can use semicolon-namespaces unless there is a global namespace declaration */ - $this->canUseSemicolonNamespaces = \true; - foreach ($nodes as $node) { - if ($node instanceof Stmt\Namespace_ && null === $node->name) { - $this->canUseSemicolonNamespaces = \false; - break; - } - } - } - /** - * Handles (and removes) doc-string-end tokens. - */ - protected function handleMagicTokens(string $str): string - { - if ($this->docStringEndToken !== null) { - // Replace doc-string-end tokens with nothing or a newline - $str = str_replace($this->docStringEndToken . ';' . $this->newline, ';' . $this->newline, $str); - $str = str_replace($this->docStringEndToken, $this->newline, $str); - } - return $str; - } - /** - * Pretty prints an array of nodes (statements) and indents them optionally. - * - * @param Node[] $nodes Array of nodes - * @param bool $indent Whether to indent the printed nodes - * - * @return string Pretty printed statements - */ - protected function pStmts(array $nodes, bool $indent = \true): string - { - if ($indent) { - $this->indent(); - } - $result = ''; - foreach ($nodes as $node) { - $comments = $node->getComments(); - if ($comments) { - $result .= $this->nl . $this->pComments($comments); - if ($node instanceof Stmt\Nop) { - continue; - } - } - $result .= $this->nl . $this->p($node); - } - if ($indent) { - $this->outdent(); - } - return $result; - } - /** - * Pretty-print an infix operation while taking precedence into account. - * - * @param string $class Node class of operator - * @param Node $leftNode Left-hand side node - * @param string $operatorString String representation of the operator - * @param Node $rightNode Right-hand side node - * @param int $precedence Precedence of parent operator - * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator - * - * @return string Pretty printed infix operation - */ - protected function pInfixOp(string $class, Node $leftNode, string $operatorString, Node $rightNode, int $precedence, int $lhsPrecedence): string - { - list($opPrecedence, $newPrecedenceLHS, $newPrecedenceRHS) = $this->precedenceMap[$class]; - $prefix = ''; - $suffix = ''; - if ($opPrecedence >= $precedence) { - $prefix = '('; - $suffix = ')'; - $lhsPrecedence = self::MAX_PRECEDENCE; - } - return $prefix . $this->p($leftNode, $newPrecedenceLHS, $newPrecedenceLHS) . $operatorString . $this->p($rightNode, $newPrecedenceRHS, $lhsPrecedence) . $suffix; - } - /** - * Pretty-print a prefix operation while taking precedence into account. - * - * @param string $class Node class of operator - * @param string $operatorString String representation of the operator - * @param Node $node Node - * @param int $precedence Precedence of parent operator - * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator - * - * @return string Pretty printed prefix operation - */ - protected function pPrefixOp(string $class, string $operatorString, Node $node, int $precedence, int $lhsPrecedence): string - { - $opPrecedence = $this->precedenceMap[$class][0]; - $prefix = ''; - $suffix = ''; - if ($opPrecedence >= $lhsPrecedence) { - $prefix = '('; - $suffix = ')'; - $lhsPrecedence = self::MAX_PRECEDENCE; - } - $printedArg = $this->p($node, $opPrecedence, $lhsPrecedence); - if ($operatorString === '+' && $printedArg[0] === '+' || $operatorString === '-' && $printedArg[0] === '-') { - // Avoid printing +(+$a) as ++$a and similar. - $printedArg = '(' . $printedArg . ')'; - } - return $prefix . $operatorString . $printedArg . $suffix; - } - /** - * Pretty-print a postfix operation while taking precedence into account. - * - * @param string $class Node class of operator - * @param string $operatorString String representation of the operator - * @param Node $node Node - * @param int $precedence Precedence of parent operator - * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator - * - * @return string Pretty printed postfix operation - */ - protected function pPostfixOp(string $class, Node $node, string $operatorString, int $precedence, int $lhsPrecedence): string - { - $opPrecedence = $this->precedenceMap[$class][0]; - $prefix = ''; - $suffix = ''; - if ($opPrecedence >= $precedence) { - $prefix = '('; - $suffix = ')'; - $lhsPrecedence = self::MAX_PRECEDENCE; - } - if ($opPrecedence < $lhsPrecedence) { - $lhsPrecedence = $opPrecedence; - } - return $prefix . $this->p($node, $opPrecedence, $lhsPrecedence) . $operatorString . $suffix; - } - /** - * Pretty prints an array of nodes and implodes the printed values. - * - * @param Node[] $nodes Array of Nodes to be printed - * @param string $glue Character to implode with - * - * @return string Imploded pretty printed nodes> $pre - */ - protected function pImplode(array $nodes, string $glue = ''): string - { - $pNodes = []; - foreach ($nodes as $node) { - if (null === $node) { - $pNodes[] = ''; - } else { - $pNodes[] = $this->p($node); - } - } - return implode($glue, $pNodes); - } - /** - * Pretty prints an array of nodes and implodes the printed values with commas. - * - * @param Node[] $nodes Array of Nodes to be printed - * - * @return string Comma separated pretty printed nodes - */ - protected function pCommaSeparated(array $nodes): string - { - return $this->pImplode($nodes, ', '); - } - /** - * Pretty prints a comma-separated list of nodes in multiline style, including comments. - * - * The result includes a leading newline and one level of indentation (same as pStmts). - * - * @param Node[] $nodes Array of Nodes to be printed - * @param bool $trailingComma Whether to use a trailing comma - * - * @return string Comma separated pretty printed nodes in multiline style - */ - protected function pCommaSeparatedMultiline(array $nodes, bool $trailingComma): string - { - $this->indent(); - $result = ''; - $lastIdx = count($nodes) - 1; - foreach ($nodes as $idx => $node) { - if ($node !== null) { - $comments = $node->getComments(); - if ($comments) { - $result .= $this->nl . $this->pComments($comments); - } - $result .= $this->nl . $this->p($node); - } else { - $result .= $this->nl; - } - if ($trailingComma || $idx !== $lastIdx) { - $result .= ','; - } - } - $this->outdent(); - return $result; - } - /** - * Prints reformatted text of the passed comments. - * - * @param Comment[] $comments List of comments - * - * @return string Reformatted text of comments - */ - protected function pComments(array $comments): string - { - $formattedComments = []; - foreach ($comments as $comment) { - $formattedComments[] = str_replace("\n", $this->nl, $comment->getReformattedText()); - } - return implode($this->nl, $formattedComments); - } - /** - * Perform a format-preserving pretty print of an AST. - * - * The format preservation is best effort. For some changes to the AST the formatting will not - * be preserved (at least not locally). - * - * In order to use this method a number of prerequisites must be satisfied: - * * The startTokenPos and endTokenPos attributes in the lexer must be enabled. - * * The CloningVisitor must be run on the AST prior to modification. - * * The original tokens must be provided, using the getTokens() method on the lexer. - * - * @param Node[] $stmts Modified AST with links to original AST - * @param Node[] $origStmts Original AST with token offset information - * @param Token[] $origTokens Tokens of the original code - */ - public function printFormatPreserving(array $stmts, array $origStmts, array $origTokens): string - { - $this->initializeNodeListDiffer(); - $this->initializeLabelCharMap(); - $this->initializeFixupMap(); - $this->initializeRemovalMap(); - $this->initializeInsertionMap(); - $this->initializeListInsertionMap(); - $this->initializeEmptyListInsertionMap(); - $this->initializeModifierChangeMap(); - $this->resetState(); - $this->origTokens = new TokenStream($origTokens, $this->tabWidth); - $this->preprocessNodes($stmts); - $pos = 0; - $result = $this->pArray($stmts, $origStmts, $pos, 0, 'File', 'stmts', null); - if (null !== $result) { - $result .= $this->origTokens->getTokenCode($pos, count($origTokens) - 1, 0); - } else { - // Fallback - // TODO Add newline . $this->pStmts($stmts, \false); - } - return $this->handleMagicTokens($result); - } - protected function pFallback(Node $node, int $precedence, int $lhsPrecedence): string - { - return $this->{'p' . $node->getType()}($node, $precedence, $lhsPrecedence); - } - /** - * Pretty prints a node. - * - * This method also handles formatting preservation for nodes. - * - * @param Node $node Node to be pretty printed - * @param int $precedence Precedence of parent operator - * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator - * @param bool $parentFormatPreserved Whether parent node has preserved formatting - * - * @return string Pretty printed node - */ - protected function p(Node $node, int $precedence = self::MAX_PRECEDENCE, int $lhsPrecedence = self::MAX_PRECEDENCE, bool $parentFormatPreserved = \false): string - { - // No orig tokens means this is a normal pretty print without preservation of formatting - if (!$this->origTokens) { - return $this->{'p' . $node->getType()}($node, $precedence, $lhsPrecedence); - } - /** @var Node|null $origNode */ - $origNode = $node->getAttribute('origNode'); - if (null === $origNode) { - return $this->pFallback($node, $precedence, $lhsPrecedence); - } - $class = \get_class($node); - \assert($class === \get_class($origNode)); - $startPos = $origNode->getStartTokenPos(); - $endPos = $origNode->getEndTokenPos(); - \assert($startPos >= 0 && $endPos >= 0); - $fallbackNode = $node; - if ($node instanceof Expr\New_ && $node->class instanceof Stmt\Class_) { - // Normalize node structure of anonymous classes - assert($origNode instanceof Expr\New_); - $node = PrintableNewAnonClassNode::fromNewNode($node); - $origNode = PrintableNewAnonClassNode::fromNewNode($origNode); - $class = PrintableNewAnonClassNode::class; - } - // InlineHTML node does not contain closing and opening PHP tags. If the parent formatting - // is not preserved, then we need to use the fallback code to make sure the tags are - // printed. - if ($node instanceof Stmt\InlineHTML && !$parentFormatPreserved) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - $indentAdjustment = $this->indentLevel - $this->origTokens->getIndentationBefore($startPos); - $type = $node->getType(); - $fixupInfo = $this->fixupMap[$class] ?? null; - $result = ''; - $pos = $startPos; - foreach ($node->getSubNodeNames() as $subNodeName) { - $subNode = $node->{$subNodeName}; - $origSubNode = $origNode->{$subNodeName}; - if (!$subNode instanceof Node && $subNode !== null || !$origSubNode instanceof Node && $origSubNode !== null) { - if ($subNode === $origSubNode) { - // Unchanged, can reuse old code - continue; - } - if (is_array($subNode) && is_array($origSubNode)) { - // Array subnode changed, we might be able to reconstruct it - $listResult = $this->pArray($subNode, $origSubNode, $pos, $indentAdjustment, $class, $subNodeName, $fixupInfo[$subNodeName] ?? null); - if (null === $listResult) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - $result .= $listResult; - continue; - } - // Check if this is a modifier change - $key = $class . '->' . $subNodeName; - if (!isset($this->modifierChangeMap[$key])) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - [$printFn, $findToken] = $this->modifierChangeMap[$key]; - $result .= $this->{$printFn}($subNode); - $pos = $this->origTokens->findRight($pos, $findToken); - continue; - } - $extraLeft = ''; - $extraRight = ''; - if ($origSubNode !== null) { - $subStartPos = $origSubNode->getStartTokenPos(); - $subEndPos = $origSubNode->getEndTokenPos(); - \assert($subStartPos >= 0 && $subEndPos >= 0); - } else { - if ($subNode === null) { - // Both null, nothing to do - continue; - } - // A node has been inserted, check if we have insertion information for it - $key = $type . '->' . $subNodeName; - if (!isset($this->insertionMap[$key])) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - list($findToken, $beforeToken, $extraLeft, $extraRight) = $this->insertionMap[$key]; - if (null !== $findToken) { - $subStartPos = $this->origTokens->findRight($pos, $findToken) + (int) !$beforeToken; - } else { - $subStartPos = $pos; - } - if (null === $extraLeft && null !== $extraRight) { - // If inserting on the right only, skipping whitespace looks better - $subStartPos = $this->origTokens->skipRightWhitespace($subStartPos); - } - $subEndPos = $subStartPos - 1; - } - if (null === $subNode) { - // A node has been removed, check if we have removal information for it - $key = $type . '->' . $subNodeName; - if (!isset($this->removalMap[$key])) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - // Adjust positions to account for additional tokens that must be skipped - $removalInfo = $this->removalMap[$key]; - if (isset($removalInfo['left'])) { - $subStartPos = $this->origTokens->skipLeft($subStartPos - 1, $removalInfo['left']) + 1; - } - if (isset($removalInfo['right'])) { - $subEndPos = $this->origTokens->skipRight($subEndPos + 1, $removalInfo['right']) - 1; - } - } - $result .= $this->origTokens->getTokenCode($pos, $subStartPos, $indentAdjustment); - if (null !== $subNode) { - $result .= $extraLeft; - $origIndentLevel = $this->indentLevel; - $this->setIndentLevel(max($this->origTokens->getIndentationBefore($subStartPos) + $indentAdjustment, 0)); - // If it's the same node that was previously in this position, it certainly doesn't - // need fixup. It's important to check this here, because our fixup checks are more - // conservative than strictly necessary. - if (isset($fixupInfo[$subNodeName]) && $subNode->getAttribute('origNode') !== $origSubNode) { - $fixup = $fixupInfo[$subNodeName]; - $res = $this->pFixup($fixup, $subNode, $class, $subStartPos, $subEndPos); - } else { - $res = $this->p($subNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, \true); - } - $this->safeAppend($result, $res); - $this->setIndentLevel($origIndentLevel); - $result .= $extraRight; - } - $pos = $subEndPos + 1; - } - $result .= $this->origTokens->getTokenCode($pos, $endPos + 1, $indentAdjustment); - return $result; - } - /** - * Perform a format-preserving pretty print of an array. - * - * @param Node[] $nodes New nodes - * @param Node[] $origNodes Original nodes - * @param int $pos Current token position (updated by reference) - * @param int $indentAdjustment Adjustment for indentation - * @param string $parentNodeClass Class of the containing node. - * @param string $subNodeName Name of array subnode. - * @param null|int $fixup Fixup information for array item nodes - * - * @return null|string Result of pretty print or null if cannot preserve formatting - */ - protected function pArray(array $nodes, array $origNodes, int &$pos, int $indentAdjustment, string $parentNodeClass, string $subNodeName, ?int $fixup): ?string - { - $diff = $this->nodeListDiffer->diffWithReplacements($origNodes, $nodes); - $mapKey = $parentNodeClass . '->' . $subNodeName; - $insertStr = $this->listInsertionMap[$mapKey] ?? null; - $isStmtList = $subNodeName === 'stmts'; - $beforeFirstKeepOrReplace = \true; - $skipRemovedNode = \false; - $delayedAdd = []; - $lastElemIndentLevel = $this->indentLevel; - $insertNewline = \false; - if ($insertStr === "\n") { - $insertStr = ''; - $insertNewline = \true; - } - if ($isStmtList && \count($origNodes) === 1 && \count($nodes) !== 1) { - $startPos = $origNodes[0]->getStartTokenPos(); - $endPos = $origNodes[0]->getEndTokenPos(); - \assert($startPos >= 0 && $endPos >= 0); - if (!$this->origTokens->haveBraces($startPos, $endPos)) { - // This was a single statement without braces, but either additional statements - // have been added, or the single statement has been removed. This requires the - // addition of braces. For now fall back. - // TODO: Try to preserve formatting - return null; - } - } - $result = ''; - foreach ($diff as $i => $diffElem) { - $diffType = $diffElem->type; - /** @var Node|string|null $arrItem */ - $arrItem = $diffElem->new; - /** @var Node|string|null $origArrItem */ - $origArrItem = $diffElem->old; - if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) { - $beforeFirstKeepOrReplace = \false; - if ($origArrItem === null || $arrItem === null) { - // We can only handle the case where both are null - if ($origArrItem === $arrItem) { - continue; - } - return null; - } - if (!$arrItem instanceof Node || !$origArrItem instanceof Node) { - // We can only deal with nodes. This can occur for Names, which use string arrays. - return null; - } - $itemStartPos = $origArrItem->getStartTokenPos(); - $itemEndPos = $origArrItem->getEndTokenPos(); - \assert($itemStartPos >= 0 && $itemEndPos >= 0 && $itemStartPos >= $pos); - $origIndentLevel = $this->indentLevel; - $lastElemIndentLevel = max($this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment, 0); - $this->setIndentLevel($lastElemIndentLevel); - $comments = $arrItem->getComments(); - $origComments = $origArrItem->getComments(); - $commentStartPos = $origComments ? $origComments[0]->getStartTokenPos() : $itemStartPos; - \assert($commentStartPos >= 0); - if ($commentStartPos < $pos) { - // Comments may be assigned to multiple nodes if they start at the same position. - // Make sure we don't try to print them multiple times. - $commentStartPos = $itemStartPos; - } - if ($skipRemovedNode) { - if ($isStmtList && $this->origTokens->haveTagInRange($pos, $itemStartPos)) { - // We'd remove an opening/closing PHP tag. - // TODO: Preserve formatting. - $this->setIndentLevel($origIndentLevel); - return null; - } - } else { - $result .= $this->origTokens->getTokenCode($pos, $commentStartPos, $indentAdjustment); - } - if (!empty($delayedAdd)) { - /** @var Node $delayedAddNode */ - foreach ($delayedAdd as $delayedAddNode) { - if ($insertNewline) { - $delayedAddComments = $delayedAddNode->getComments(); - if ($delayedAddComments) { - $result .= $this->pComments($delayedAddComments) . $this->nl; - } - } - $this->safeAppend($result, $this->p($delayedAddNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, \true)); - if ($insertNewline) { - $result .= $insertStr . $this->nl; - } else { - $result .= $insertStr; - } - } - $delayedAdd = []; - } - if ($comments !== $origComments) { - if ($comments) { - $result .= $this->pComments($comments) . $this->nl; - } - } else { - $result .= $this->origTokens->getTokenCode($commentStartPos, $itemStartPos, $indentAdjustment); - } - // If we had to remove anything, we have done so now. - $skipRemovedNode = \false; - } elseif ($diffType === DiffElem::TYPE_ADD) { - if (null === $insertStr) { - // We don't have insertion information for this list type - return null; - } - if (!$arrItem instanceof Node) { - // We only support list insertion of nodes. - return null; - } - // We go multiline if the original code was multiline, - // or if it's an array item with a comment above it. - // Match always uses multiline formatting. - if ($insertStr === ', ' && ($this->isMultiline($origNodes) || $arrItem->getComments() || $parentNodeClass === Expr\Match_::class)) { - $insertStr = ','; - $insertNewline = \true; - } - if ($beforeFirstKeepOrReplace) { - // Will be inserted at the next "replace" or "keep" element - $delayedAdd[] = $arrItem; - continue; - } - $itemStartPos = $pos; - $itemEndPos = $pos - 1; - $origIndentLevel = $this->indentLevel; - $this->setIndentLevel($lastElemIndentLevel); - if ($insertNewline) { - $result .= $insertStr . $this->nl; - $comments = $arrItem->getComments(); - if ($comments) { - $result .= $this->pComments($comments) . $this->nl; - } - } else { - $result .= $insertStr; - } - } elseif ($diffType === DiffElem::TYPE_REMOVE) { - if (!$origArrItem instanceof Node) { - // We only support removal for nodes - return null; - } - $itemStartPos = $origArrItem->getStartTokenPos(); - $itemEndPos = $origArrItem->getEndTokenPos(); - \assert($itemStartPos >= 0 && $itemEndPos >= 0); - // Consider comments part of the node. - $origComments = $origArrItem->getComments(); - if ($origComments) { - $itemStartPos = $origComments[0]->getStartTokenPos(); - } - if ($i === 0) { - // If we're removing from the start, keep the tokens before the node and drop those after it, - // instead of the other way around. - $result .= $this->origTokens->getTokenCode($pos, $itemStartPos, $indentAdjustment); - $skipRemovedNode = \true; - } else if ($isStmtList && $this->origTokens->haveTagInRange($pos, $itemStartPos)) { - // We'd remove an opening/closing PHP tag. - // TODO: Preserve formatting. - return null; - } - $pos = $itemEndPos + 1; - continue; - } else { - throw new \Exception("Shouldn't happen"); - } - if (null !== $fixup && $arrItem->getAttribute('origNode') !== $origArrItem) { - $res = $this->pFixup($fixup, $arrItem, null, $itemStartPos, $itemEndPos); - } else { - $res = $this->p($arrItem, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, \true); - } - $this->safeAppend($result, $res); - $this->setIndentLevel($origIndentLevel); - $pos = $itemEndPos + 1; - } - if ($skipRemovedNode) { - // TODO: Support removing single node. - return null; - } - if (!empty($delayedAdd)) { - if (!isset($this->emptyListInsertionMap[$mapKey])) { - return null; - } - list($findToken, $extraLeft, $extraRight) = $this->emptyListInsertionMap[$mapKey]; - if (null !== $findToken) { - $insertPos = $this->origTokens->findRight($pos, $findToken) + 1; - $result .= $this->origTokens->getTokenCode($pos, $insertPos, $indentAdjustment); - $pos = $insertPos; - } - $first = \true; - $result .= $extraLeft; - foreach ($delayedAdd as $delayedAddNode) { - if (!$first) { - $result .= $insertStr; - if ($insertNewline) { - $result .= $this->nl; - } - } - $result .= $this->p($delayedAddNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, \true); - $first = \false; - } - $result .= $extraRight === "\n" ? $this->nl : $extraRight; - } - return $result; - } - /** - * Print node with fixups. - * - * Fixups here refer to the addition of extra parentheses, braces or other characters, that - * are required to preserve program semantics in a certain context (e.g. to maintain precedence - * or because only certain expressions are allowed in certain places). - * - * @param int $fixup Fixup type - * @param Node $subNode Subnode to print - * @param string|null $parentClass Class of parent node - * @param int $subStartPos Original start pos of subnode - * @param int $subEndPos Original end pos of subnode - * - * @return string Result of fixed-up print of subnode - */ - protected function pFixup(int $fixup, Node $subNode, ?string $parentClass, int $subStartPos, int $subEndPos): string - { - switch ($fixup) { - case self::FIXUP_PREC_LEFT: - // We use a conservative approximation where lhsPrecedence == precedence. - if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { - $precedence = $this->precedenceMap[$parentClass][1]; - return $this->p($subNode, $precedence, $precedence); - } - break; - case self::FIXUP_PREC_RIGHT: - if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { - $precedence = $this->precedenceMap[$parentClass][2]; - return $this->p($subNode, $precedence, $precedence); - } - break; - case self::FIXUP_PREC_UNARY: - if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { - $precedence = $this->precedenceMap[$parentClass][0]; - return $this->p($subNode, $precedence, $precedence); - } - break; - case self::FIXUP_CALL_LHS: - if ($this->callLhsRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { - return '(' . $this->p($subNode) . ')'; - } - break; - case self::FIXUP_DEREF_LHS: - if ($this->dereferenceLhsRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { - return '(' . $this->p($subNode) . ')'; - } - break; - case self::FIXUP_STATIC_DEREF_LHS: - if ($this->staticDereferenceLhsRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { - return '(' . $this->p($subNode) . ')'; - } - break; - case self::FIXUP_NEW: - if ($this->newOperandRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { - return '(' . $this->p($subNode) . ')'; - } - break; - case self::FIXUP_BRACED_NAME: - case self::FIXUP_VAR_BRACED_NAME: - if ($subNode instanceof Expr && !$this->origTokens->haveBraces($subStartPos, $subEndPos)) { - return ($fixup === self::FIXUP_VAR_BRACED_NAME ? '$' : '') . '{' . $this->p($subNode) . '}'; - } - break; - case self::FIXUP_ENCAPSED: - if (!$subNode instanceof Node\InterpolatedStringPart && !$this->origTokens->haveBraces($subStartPos, $subEndPos)) { - return '{' . $this->p($subNode) . '}'; - } - break; - default: - throw new \Exception('Cannot happen'); - } - // Nothing special to do - return $this->p($subNode); - } - /** - * Appends to a string, ensuring whitespace between label characters. - * - * Example: "echo" and "$x" result in "echo$x", but "echo" and "x" result in "echo x". - * Without safeAppend the result would be "echox", which does not preserve semantics. - */ - protected function safeAppend(string &$str, string $append): void - { - if ($str === "") { - $str = $append; - return; - } - if ($append === "") { - return; - } - if (!$this->labelCharMap[$append[0]] || !$this->labelCharMap[$str[\strlen($str) - 1]]) { - $str .= $append; - } else { - $str .= " " . $append; - } - } - /** - * Determines whether the LHS of a call must be wrapped in parenthesis. - * - * @param Node $node LHS of a call - * - * @return bool Whether parentheses are required - */ - protected function callLhsRequiresParens(Node $node): bool - { - return !($node instanceof Node\Name || $node instanceof Expr\Variable || $node instanceof Expr\ArrayDimFetch || $node instanceof Expr\FuncCall || $node instanceof Expr\MethodCall || $node instanceof Expr\NullsafeMethodCall || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_); - } - /** - * Determines whether the LHS of an array/object operation must be wrapped in parentheses. - * - * @param Node $node LHS of dereferencing operation - * - * @return bool Whether parentheses are required - */ - protected function dereferenceLhsRequiresParens(Node $node): bool - { - // A constant can occur on the LHS of an array/object deref, but not a static deref. - return $this->staticDereferenceLhsRequiresParens($node) && !$node instanceof Expr\ConstFetch; - } - /** - * Determines whether the LHS of a static operation must be wrapped in parentheses. - * - * @param Node $node LHS of dereferencing operation - * - * @return bool Whether parentheses are required - */ - protected function staticDereferenceLhsRequiresParens(Node $node): bool - { - return !($node instanceof Expr\Variable || $node instanceof Node\Name || $node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch || $node instanceof Expr\NullsafePropertyFetch || $node instanceof Expr\StaticPropertyFetch || $node instanceof Expr\FuncCall || $node instanceof Expr\MethodCall || $node instanceof Expr\NullsafeMethodCall || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_ || $node instanceof Scalar\String_ || $node instanceof Expr\ClassConstFetch); - } - /** - * Determines whether an expression used in "new" or "instanceof" requires parentheses. - * - * @param Node $node New or instanceof operand - * - * @return bool Whether parentheses are required - */ - protected function newOperandRequiresParens(Node $node): bool - { - if ($node instanceof Node\Name || $node instanceof Expr\Variable) { - return \false; - } - if ($node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch || $node instanceof Expr\NullsafePropertyFetch) { - return $this->newOperandRequiresParens($node->var); - } - if ($node instanceof Expr\StaticPropertyFetch) { - return $this->newOperandRequiresParens($node->class); - } - return \true; - } - /** - * Print modifiers, including trailing whitespace. - * - * @param int $modifiers Modifier mask to print - * - * @return string Printed modifiers - */ - protected function pModifiers(int $modifiers): string - { - return ($modifiers & Modifiers::FINAL ? 'final ' : '') . ($modifiers & Modifiers::ABSTRACT ? 'abstract ' : '') . ($modifiers & Modifiers::PUBLIC ? 'public ' : '') . ($modifiers & Modifiers::PROTECTED ? 'protected ' : '') . ($modifiers & Modifiers::PRIVATE ? 'private ' : '') . ($modifiers & Modifiers::PUBLIC_SET ? 'public(set) ' : '') . ($modifiers & Modifiers::PROTECTED_SET ? 'protected(set) ' : '') . ($modifiers & Modifiers::PRIVATE_SET ? 'private(set) ' : '') . ($modifiers & Modifiers::STATIC ? 'static ' : '') . ($modifiers & Modifiers::READONLY ? 'readonly ' : ''); - } - protected function pStatic(bool $static): string - { - return $static ? 'static ' : ''; - } - /** - * Determine whether a list of nodes uses multiline formatting. - * - * @param (Node|null)[] $nodes Node list - * - * @return bool Whether multiline formatting is used - */ - protected function isMultiline(array $nodes): bool - { - if (\count($nodes) < 2) { - return \false; - } - $pos = -1; - foreach ($nodes as $node) { - if (null === $node) { - continue; - } - $endPos = $node->getEndTokenPos() + 1; - if ($pos >= 0) { - $text = $this->origTokens->getTokenCode($pos, $endPos, 0); - if (\false === strpos($text, "\n")) { - // We require that a newline is present between *every* item. If the formatting - // is inconsistent, with only some items having newlines, we don't consider it - // as multiline - return \false; - } - } - $pos = $endPos; - } - return \true; - } - /** - * Lazily initializes label char map. - * - * The label char map determines whether a certain character may occur in a label. - */ - protected function initializeLabelCharMap(): void - { - if (isset($this->labelCharMap)) { - return; - } - $this->labelCharMap = []; - for ($i = 0; $i < 256; $i++) { - $chr = chr($i); - $this->labelCharMap[$chr] = $i >= 0x80 || ctype_alnum($chr); - } - if ($this->phpVersion->allowsDelInIdentifiers()) { - $this->labelCharMap[""] = \true; - } - } - /** - * Lazily initializes node list differ. - * - * The node list differ is used to determine differences between two array subnodes. - */ - protected function initializeNodeListDiffer(): void - { - if (isset($this->nodeListDiffer)) { - return; - } - $this->nodeListDiffer = new Internal\Differ(function ($a, $b) { - if ($a instanceof Node && $b instanceof Node) { - return $a === $b->getAttribute('origNode'); - } - // Can happen for array destructuring - return $a === null && $b === null; - }); - } - /** - * Lazily initializes fixup map. - * - * The fixup map is used to determine whether a certain subnode of a certain node may require - * some kind of "fixup" operation, e.g. the addition of parenthesis or braces. - */ - protected function initializeFixupMap(): void - { - if (isset($this->fixupMap)) { - return; - } - $this->fixupMap = [Expr\Instanceof_::class => ['expr' => self::FIXUP_PREC_UNARY, 'class' => self::FIXUP_NEW], Expr\Ternary::class => ['cond' => self::FIXUP_PREC_LEFT, 'else' => self::FIXUP_PREC_RIGHT], Expr\Yield_::class => ['value' => self::FIXUP_PREC_UNARY], Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS], Expr\StaticCall::class => ['class' => self::FIXUP_STATIC_DEREF_LHS], Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS], Expr\ClassConstFetch::class => ['class' => self::FIXUP_STATIC_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\New_::class => ['class' => self::FIXUP_NEW], Expr\MethodCall::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\NullsafeMethodCall::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\StaticPropertyFetch::class => ['class' => self::FIXUP_STATIC_DEREF_LHS, 'name' => self::FIXUP_VAR_BRACED_NAME], Expr\PropertyFetch::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\NullsafePropertyFetch::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Scalar\InterpolatedString::class => ['parts' => self::FIXUP_ENCAPSED]]; - $binaryOps = [BinaryOp\Pow::class, BinaryOp\Mul::class, BinaryOp\Div::class, BinaryOp\Mod::class, BinaryOp\Plus::class, BinaryOp\Minus::class, BinaryOp\Concat::class, BinaryOp\ShiftLeft::class, BinaryOp\ShiftRight::class, BinaryOp\Smaller::class, BinaryOp\SmallerOrEqual::class, BinaryOp\Greater::class, BinaryOp\GreaterOrEqual::class, BinaryOp\Equal::class, BinaryOp\NotEqual::class, BinaryOp\Identical::class, BinaryOp\NotIdentical::class, BinaryOp\Spaceship::class, BinaryOp\BitwiseAnd::class, BinaryOp\BitwiseXor::class, BinaryOp\BitwiseOr::class, BinaryOp\BooleanAnd::class, BinaryOp\BooleanOr::class, BinaryOp\Coalesce::class, BinaryOp\LogicalAnd::class, BinaryOp\LogicalXor::class, BinaryOp\LogicalOr::class]; - foreach ($binaryOps as $binaryOp) { - $this->fixupMap[$binaryOp] = ['left' => self::FIXUP_PREC_LEFT, 'right' => self::FIXUP_PREC_RIGHT]; - } - $prefixOps = [Expr\Clone_::class, Expr\BitwiseNot::class, Expr\BooleanNot::class, Expr\UnaryPlus::class, Expr\UnaryMinus::class, Cast\Int_::class, Cast\Double::class, Cast\String_::class, Cast\Array_::class, Cast\Object_::class, Cast\Bool_::class, Cast\Unset_::class, Expr\ErrorSuppress::class, Expr\YieldFrom::class, Expr\Print_::class, Expr\Include_::class, Expr\Assign::class, Expr\AssignRef::class, AssignOp\Plus::class, AssignOp\Minus::class, AssignOp\Mul::class, AssignOp\Div::class, AssignOp\Concat::class, AssignOp\Mod::class, AssignOp\BitwiseAnd::class, AssignOp\BitwiseOr::class, AssignOp\BitwiseXor::class, AssignOp\ShiftLeft::class, AssignOp\ShiftRight::class, AssignOp\Pow::class, AssignOp\Coalesce::class, Expr\ArrowFunction::class, Expr\Throw_::class]; - foreach ($prefixOps as $prefixOp) { - $this->fixupMap[$prefixOp] = ['expr' => self::FIXUP_PREC_UNARY]; - } - } - /** - * Lazily initializes the removal map. - * - * The removal map is used to determine which additional tokens should be removed when a - * certain node is replaced by null. - */ - protected function initializeRemovalMap(): void - { - if (isset($this->removalMap)) { - return; - } - $stripBoth = ['left' => \T_WHITESPACE, 'right' => \T_WHITESPACE]; - $stripLeft = ['left' => \T_WHITESPACE]; - $stripRight = ['right' => \T_WHITESPACE]; - $stripDoubleArrow = ['right' => \T_DOUBLE_ARROW]; - $stripColon = ['left' => ':']; - $stripEquals = ['left' => '=']; - $this->removalMap = ['Expr_ArrayDimFetch->dim' => $stripBoth, 'ArrayItem->key' => $stripDoubleArrow, 'Expr_ArrowFunction->returnType' => $stripColon, 'Expr_Closure->returnType' => $stripColon, 'Expr_Exit->expr' => $stripBoth, 'Expr_Ternary->if' => $stripBoth, 'Expr_Yield->key' => $stripDoubleArrow, 'Expr_Yield->value' => $stripBoth, 'Param->type' => $stripRight, 'Param->default' => $stripEquals, 'Stmt_Break->num' => $stripBoth, 'Stmt_Catch->var' => $stripLeft, 'Stmt_ClassConst->type' => $stripRight, 'Stmt_ClassMethod->returnType' => $stripColon, 'Stmt_Class->extends' => ['left' => \T_EXTENDS], 'Stmt_Enum->scalarType' => $stripColon, 'Stmt_EnumCase->expr' => $stripEquals, 'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS], 'Stmt_Continue->num' => $stripBoth, 'Stmt_Foreach->keyVar' => $stripDoubleArrow, 'Stmt_Function->returnType' => $stripColon, 'Stmt_If->else' => $stripLeft, 'Stmt_Namespace->name' => $stripLeft, 'Stmt_Property->type' => $stripRight, 'PropertyItem->default' => $stripEquals, 'Stmt_Return->expr' => $stripBoth, 'Stmt_StaticVar->default' => $stripEquals, 'Stmt_TraitUseAdaptation_Alias->newName' => $stripLeft, 'Stmt_TryCatch->finally' => $stripLeft]; - } - protected function initializeInsertionMap(): void - { - if (isset($this->insertionMap)) { - return; - } - // TODO: "yield" where both key and value are inserted doesn't work - // [$find, $beforeToken, $extraLeft, $extraRight] - $this->insertionMap = [ - 'Expr_ArrayDimFetch->dim' => ['[', \false, null, null], - 'ArrayItem->key' => [null, \false, null, ' => '], - 'Expr_ArrowFunction->returnType' => [')', \false, ': ', null], - 'Expr_Closure->returnType' => [')', \false, ': ', null], - 'Expr_Ternary->if' => ['?', \false, ' ', ' '], - 'Expr_Yield->key' => [\T_YIELD, \false, null, ' => '], - 'Expr_Yield->value' => [\T_YIELD, \false, ' ', null], - 'Param->type' => [null, \false, null, ' '], - 'Param->default' => [null, \false, ' = ', null], - 'Stmt_Break->num' => [\T_BREAK, \false, ' ', null], - 'Stmt_Catch->var' => [null, \false, ' ', null], - 'Stmt_ClassMethod->returnType' => [')', \false, ': ', null], - 'Stmt_ClassConst->type' => [\T_CONST, \false, ' ', null], - 'Stmt_Class->extends' => [null, \false, ' extends ', null], - 'Stmt_Enum->scalarType' => [null, \false, ' : ', null], - 'Stmt_EnumCase->expr' => [null, \false, ' = ', null], - 'Expr_PrintableNewAnonClass->extends' => [null, \false, ' extends ', null], - 'Stmt_Continue->num' => [\T_CONTINUE, \false, ' ', null], - 'Stmt_Foreach->keyVar' => [\T_AS, \false, null, ' => '], - 'Stmt_Function->returnType' => [')', \false, ': ', null], - 'Stmt_If->else' => [null, \false, ' ', null], - 'Stmt_Namespace->name' => [\T_NAMESPACE, \false, ' ', null], - 'Stmt_Property->type' => [\T_VARIABLE, \true, null, ' '], - 'PropertyItem->default' => [null, \false, ' = ', null], - 'Stmt_Return->expr' => [\T_RETURN, \false, ' ', null], - 'Stmt_StaticVar->default' => [null, \false, ' = ', null], - //'Stmt_TraitUseAdaptation_Alias->newName' => [T_AS, false, ' ', null], // TODO - 'Stmt_TryCatch->finally' => [null, \false, ' ', null], - ]; - } - protected function initializeListInsertionMap(): void - { - if (isset($this->listInsertionMap)) { - return; - } - $this->listInsertionMap = [ - // special - //'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully - //'Scalar_InterpolatedString->parts' => '', - Stmt\Catch_::class . '->types' => '|', - UnionType::class . '->types' => '|', - IntersectionType::class . '->types' => '&', - Stmt\If_::class . '->elseifs' => ' ', - Stmt\TryCatch::class . '->catches' => ' ', - // comma-separated lists - Expr\Array_::class . '->items' => ', ', - Expr\ArrowFunction::class . '->params' => ', ', - Expr\Closure::class . '->params' => ', ', - Expr\Closure::class . '->uses' => ', ', - Expr\FuncCall::class . '->args' => ', ', - Expr\Isset_::class . '->vars' => ', ', - Expr\List_::class . '->items' => ', ', - Expr\MethodCall::class . '->args' => ', ', - Expr\NullsafeMethodCall::class . '->args' => ', ', - Expr\New_::class . '->args' => ', ', - PrintableNewAnonClassNode::class . '->args' => ', ', - Expr\StaticCall::class . '->args' => ', ', - Stmt\ClassConst::class . '->consts' => ', ', - Stmt\ClassMethod::class . '->params' => ', ', - Stmt\Class_::class . '->implements' => ', ', - Stmt\Enum_::class . '->implements' => ', ', - PrintableNewAnonClassNode::class . '->implements' => ', ', - Stmt\Const_::class . '->consts' => ', ', - Stmt\Declare_::class . '->declares' => ', ', - Stmt\Echo_::class . '->exprs' => ', ', - Stmt\For_::class . '->init' => ', ', - Stmt\For_::class . '->cond' => ', ', - Stmt\For_::class . '->loop' => ', ', - Stmt\Function_::class . '->params' => ', ', - Stmt\Global_::class . '->vars' => ', ', - Stmt\GroupUse::class . '->uses' => ', ', - Stmt\Interface_::class . '->extends' => ', ', - Expr\Match_::class . '->arms' => ', ', - Stmt\Property::class . '->props' => ', ', - Stmt\StaticVar::class . '->vars' => ', ', - Stmt\TraitUse::class . '->traits' => ', ', - Stmt\TraitUseAdaptation\Precedence::class . '->insteadof' => ', ', - Stmt\Unset_::class . '->vars' => ', ', - Stmt\UseUse::class . '->uses' => ', ', - MatchArm::class . '->conds' => ', ', - AttributeGroup::class . '->attrs' => ', ', - PropertyHook::class . '->params' => ', ', - // statement lists - Expr\Closure::class . '->stmts' => "\n", - Stmt\Case_::class . '->stmts' => "\n", - Stmt\Catch_::class . '->stmts' => "\n", - Stmt\Class_::class . '->stmts' => "\n", - Stmt\Enum_::class . '->stmts' => "\n", - PrintableNewAnonClassNode::class . '->stmts' => "\n", - Stmt\Interface_::class . '->stmts' => "\n", - Stmt\Trait_::class . '->stmts' => "\n", - Stmt\ClassMethod::class . '->stmts' => "\n", - Stmt\Declare_::class . '->stmts' => "\n", - Stmt\Do_::class . '->stmts' => "\n", - Stmt\ElseIf_::class . '->stmts' => "\n", - Stmt\Else_::class . '->stmts' => "\n", - Stmt\Finally_::class . '->stmts' => "\n", - Stmt\Foreach_::class . '->stmts' => "\n", - Stmt\For_::class . '->stmts' => "\n", - Stmt\Function_::class . '->stmts' => "\n", - Stmt\If_::class . '->stmts' => "\n", - Stmt\Namespace_::class . '->stmts' => "\n", - Stmt\Block::class . '->stmts' => "\n", - // Attribute groups - Stmt\Class_::class . '->attrGroups' => "\n", - Stmt\Enum_::class . '->attrGroups' => "\n", - Stmt\EnumCase::class . '->attrGroups' => "\n", - Stmt\Interface_::class . '->attrGroups' => "\n", - Stmt\Trait_::class . '->attrGroups' => "\n", - Stmt\Function_::class . '->attrGroups' => "\n", - Stmt\ClassMethod::class . '->attrGroups' => "\n", - Stmt\ClassConst::class . '->attrGroups' => "\n", - Stmt\Property::class . '->attrGroups' => "\n", - PrintableNewAnonClassNode::class . '->attrGroups' => ' ', - Expr\Closure::class . '->attrGroups' => ' ', - Expr\ArrowFunction::class . '->attrGroups' => ' ', - Param::class . '->attrGroups' => ' ', - PropertyHook::class . '->attrGroups' => ' ', - Stmt\Switch_::class . '->cases' => "\n", - Stmt\TraitUse::class . '->adaptations' => "\n", - Stmt\TryCatch::class . '->stmts' => "\n", - Stmt\While_::class . '->stmts' => "\n", - PropertyHook::class . '->body' => "\n", - Stmt\Property::class . '->hooks' => "\n", - Param::class . '->hooks' => "\n", - // dummy for top-level context - 'File->stmts' => "\n", - ]; - } - protected function initializeEmptyListInsertionMap(): void - { - if (isset($this->emptyListInsertionMap)) { - return; - } - // TODO Insertion into empty statement lists. - // [$find, $extraLeft, $extraRight] - $this->emptyListInsertionMap = [Expr\ArrowFunction::class . '->params' => ['(', '', ''], Expr\Closure::class . '->uses' => [')', ' use (', ')'], Expr\Closure::class . '->params' => ['(', '', ''], Expr\FuncCall::class . '->args' => ['(', '', ''], Expr\MethodCall::class . '->args' => ['(', '', ''], Expr\NullsafeMethodCall::class . '->args' => ['(', '', ''], Expr\New_::class . '->args' => ['(', '', ''], PrintableNewAnonClassNode::class . '->args' => ['(', '', ''], PrintableNewAnonClassNode::class . '->implements' => [null, ' implements ', ''], Expr\StaticCall::class . '->args' => ['(', '', ''], Stmt\Class_::class . '->implements' => [null, ' implements ', ''], Stmt\Enum_::class . '->implements' => [null, ' implements ', ''], Stmt\ClassMethod::class . '->params' => ['(', '', ''], Stmt\Interface_::class . '->extends' => [null, ' extends ', ''], Stmt\Function_::class . '->params' => ['(', '', ''], Stmt\Interface_::class . '->attrGroups' => [null, '', "\n"], Stmt\Class_::class . '->attrGroups' => [null, '', "\n"], Stmt\ClassConst::class . '->attrGroups' => [null, '', "\n"], Stmt\ClassMethod::class . '->attrGroups' => [null, '', "\n"], Stmt\Function_::class . '->attrGroups' => [null, '', "\n"], Stmt\Property::class . '->attrGroups' => [null, '', "\n"], Stmt\Trait_::class . '->attrGroups' => [null, '', "\n"], Expr\ArrowFunction::class . '->attrGroups' => [null, '', ' '], Expr\Closure::class . '->attrGroups' => [null, '', ' '], PrintableNewAnonClassNode::class . '->attrGroups' => [\T_NEW, ' ', '']]; - } - protected function initializeModifierChangeMap(): void - { - if (isset($this->modifierChangeMap)) { - return; - } - $this->modifierChangeMap = [Stmt\ClassConst::class . '->flags' => ['pModifiers', \T_CONST], Stmt\ClassMethod::class . '->flags' => ['pModifiers', \T_FUNCTION], Stmt\Class_::class . '->flags' => ['pModifiers', \T_CLASS], Stmt\Property::class . '->flags' => ['pModifiers', \T_VARIABLE], PrintableNewAnonClassNode::class . '->flags' => ['pModifiers', \T_CLASS], Param::class . '->flags' => ['pModifiers', \T_VARIABLE], PropertyHook::class . '->flags' => ['pModifiers', \T_STRING], Expr\Closure::class . '->static' => ['pStatic', \T_FUNCTION], Expr\ArrowFunction::class . '->static' => ['pStatic', \T_FN]]; - // List of integer subnodes that are not modifiers: - // Expr_Include->type - // Stmt_GroupUse->type - // Stmt_Use->type - // UseItem->type - } -} -pos + \strlen($this->text); - } - /** Get 1-based end line number of the token. */ - public function getEndLine(): int - { - return $this->line + \substr_count($this->text, "\n"); - } -} -, Sebastian Heuer , Sebastian Bergmann , and contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of Arne Blankerts nor the names of contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use PHPUnitPHAR\PharIo\Version\Exception as VersionException; -use PHPUnitPHAR\PharIo\Version\Version; -use PHPUnitPHAR\PharIo\Version\VersionConstraintParser; -use Throwable; -use function sprintf; -class ManifestDocumentMapper -{ - public function map(ManifestDocument $document): Manifest - { - try { - $contains = $document->getContainsElement(); - $type = $this->mapType($contains); - $copyright = $this->mapCopyright($document->getCopyrightElement()); - $requirements = $this->mapRequirements($document->getRequiresElement()); - $bundledComponents = $this->mapBundledComponents($document); - return new Manifest(new ApplicationName($contains->getName()), new Version($contains->getVersion()), $type, $copyright, $requirements, $bundledComponents); - } catch (Throwable $e) { - throw new ManifestDocumentMapperException($e->getMessage(), (int) $e->getCode(), $e); - } - } - private function mapType(ContainsElement $contains): Type - { - switch ($contains->getType()) { - case 'application': - return Type::application(); - case 'library': - return Type::library(); - case 'extension': - return $this->mapExtension($contains->getExtensionElement()); - } - throw new ManifestDocumentMapperException(sprintf('Unsupported type %s', $contains->getType())); - } - private function mapCopyright(CopyrightElement $copyright): CopyrightInformation - { - $authors = new AuthorCollection(); - foreach ($copyright->getAuthorElements() as $authorElement) { - $authors->add(new Author($authorElement->getName(), $authorElement->hasEMail() ? new Email($authorElement->getEmail()) : null)); - } - $licenseElement = $copyright->getLicenseElement(); - $license = new License($licenseElement->getType(), new Url($licenseElement->getUrl())); - return new CopyrightInformation($authors, $license); - } - private function mapRequirements(RequiresElement $requires): RequirementCollection - { - $collection = new RequirementCollection(); - $phpElement = $requires->getPHPElement(); - $parser = new VersionConstraintParser(); - try { - $versionConstraint = $parser->parse($phpElement->getVersion()); - } catch (VersionException $e) { - throw new ManifestDocumentMapperException(sprintf('Unsupported version constraint - %s', $e->getMessage()), (int) $e->getCode(), $e); - } - $collection->add(new PhpVersionRequirement($versionConstraint)); - if (!$phpElement->hasExtElements()) { - return $collection; - } - foreach ($phpElement->getExtElements() as $extElement) { - $collection->add(new PhpExtensionRequirement($extElement->getName())); - } - return $collection; - } - private function mapBundledComponents(ManifestDocument $document): BundledComponentCollection - { - $collection = new BundledComponentCollection(); - if (!$document->hasBundlesElement()) { - return $collection; - } - foreach ($document->getBundlesElement()->getComponentElements() as $componentElement) { - $collection->add(new BundledComponent($componentElement->getName(), new Version($componentElement->getVersion()))); - } - return $collection; - } - private function mapExtension(ExtensionElement $extension): Extension - { - try { - $versionConstraint = (new VersionConstraintParser())->parse($extension->getCompatible()); - return Type::extension(new ApplicationName($extension->getFor()), $versionConstraint); - } catch (VersionException $e) { - throw new ManifestDocumentMapperException(sprintf('Unsupported version constraint - %s', $e->getMessage()), (int) $e->getCode(), $e); - } - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use function sprintf; -class ManifestLoader -{ - public static function fromFile(string $filename): Manifest - { - try { - return (new ManifestDocumentMapper())->map(ManifestDocument::fromFile($filename)); - } catch (Exception $e) { - throw new ManifestLoaderException(sprintf('Loading %s failed.', $filename), (int) $e->getCode(), $e); - } - } - public static function fromPhar(string $filename): Manifest - { - return self::fromFile('phar://' . $filename . '/manifest.xml'); - } - public static function fromString(string $manifest): Manifest - { - try { - return (new ManifestDocumentMapper())->map(ManifestDocument::fromString($manifest)); - } catch (Exception $e) { - throw new ManifestLoaderException('Processing string failed', (int) $e->getCode(), $e); - } - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use PHPUnitPHAR\PharIo\Version\AnyVersionConstraint; -use PHPUnitPHAR\PharIo\Version\Version; -use PHPUnitPHAR\PharIo\Version\VersionConstraint; -use XMLWriter; -use function count; -use function file_put_contents; -use function str_repeat; -/** @psalm-suppress MissingConstructor */ -class ManifestSerializer -{ - /** @var XMLWriter */ - private $xmlWriter; - public function serializeToFile(Manifest $manifest, string $filename): void - { - file_put_contents($filename, $this->serializeToString($manifest)); - } - public function serializeToString(Manifest $manifest): string - { - $this->startDocument(); - $this->addContains($manifest->getName(), $manifest->getVersion(), $manifest->getType()); - $this->addCopyright($manifest->getCopyrightInformation()); - $this->addRequirements($manifest->getRequirements()); - $this->addBundles($manifest->getBundledComponents()); - return $this->finishDocument(); - } - private function startDocument(): void - { - $xmlWriter = new XMLWriter(); - $xmlWriter->openMemory(); - $xmlWriter->setIndent(\true); - $xmlWriter->setIndentString(str_repeat(' ', 4)); - $xmlWriter->startDocument('1.0', 'UTF-8'); - $xmlWriter->startElement('phar'); - $xmlWriter->writeAttribute('xmlns', 'https://phar.io/xml/manifest/1.0'); - $this->xmlWriter = $xmlWriter; - } - private function finishDocument(): string - { - $this->xmlWriter->endElement(); - $this->xmlWriter->endDocument(); - return $this->xmlWriter->outputMemory(); - } - private function addContains(ApplicationName $name, Version $version, Type $type): void - { - $this->xmlWriter->startElement('contains'); - $this->xmlWriter->writeAttribute('name', $name->asString()); - $this->xmlWriter->writeAttribute('version', $version->getVersionString()); - switch (\true) { - case $type->isApplication(): - { - $this->xmlWriter->writeAttribute('type', 'application'); - break; - } - case $type->isLibrary(): - { - $this->xmlWriter->writeAttribute('type', 'library'); - break; - } - case $type->isExtension(): - { - $this->xmlWriter->writeAttribute('type', 'extension'); - /* @var $type Extension */ - $this->addExtension($type->getApplicationName(), $type->getVersionConstraint()); - break; - } - default: - { - $this->xmlWriter->writeAttribute('type', 'custom'); - } - } - $this->xmlWriter->endElement(); - } - private function addCopyright(CopyrightInformation $copyrightInformation): void - { - $this->xmlWriter->startElement('copyright'); - foreach ($copyrightInformation->getAuthors() as $author) { - $this->xmlWriter->startElement('author'); - $this->xmlWriter->writeAttribute('name', $author->getName()); - $this->xmlWriter->writeAttribute('email', $author->getEmail()->asString()); - $this->xmlWriter->endElement(); - } - $license = $copyrightInformation->getLicense(); - $this->xmlWriter->startElement('license'); - $this->xmlWriter->writeAttribute('type', $license->getName()); - $this->xmlWriter->writeAttribute('url', $license->getUrl()->asString()); - $this->xmlWriter->endElement(); - $this->xmlWriter->endElement(); - } - private function addRequirements(RequirementCollection $requirementCollection): void - { - $phpRequirement = new AnyVersionConstraint(); - $extensions = []; - foreach ($requirementCollection as $requirement) { - if ($requirement instanceof PhpVersionRequirement) { - $phpRequirement = $requirement->getVersionConstraint(); - continue; - } - if ($requirement instanceof PhpExtensionRequirement) { - $extensions[] = $requirement->asString(); - } - } - $this->xmlWriter->startElement('requires'); - $this->xmlWriter->startElement('php'); - $this->xmlWriter->writeAttribute('version', $phpRequirement->asString()); - foreach ($extensions as $extension) { - $this->xmlWriter->startElement('ext'); - $this->xmlWriter->writeAttribute('name', $extension); - $this->xmlWriter->endElement(); - } - $this->xmlWriter->endElement(); - $this->xmlWriter->endElement(); - } - private function addBundles(BundledComponentCollection $bundledComponentCollection): void - { - if (count($bundledComponentCollection) === 0) { - return; - } - $this->xmlWriter->startElement('bundles'); - foreach ($bundledComponentCollection as $bundledComponent) { - $this->xmlWriter->startElement('component'); - $this->xmlWriter->writeAttribute('name', $bundledComponent->getName()); - $this->xmlWriter->writeAttribute('version', $bundledComponent->getVersion()->getVersionString()); - $this->xmlWriter->endElement(); - } - $this->xmlWriter->endElement(); - } - private function addExtension(ApplicationName $applicationName, VersionConstraint $versionConstraint): void - { - $this->xmlWriter->startElement('extension'); - $this->xmlWriter->writeAttribute('for', $applicationName->asString()); - $this->xmlWriter->writeAttribute('compatible', $versionConstraint->asString()); - $this->xmlWriter->endElement(); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use InvalidArgumentException; -class ElementCollectionException extends InvalidArgumentException implements Exception -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use Throwable; -interface Exception extends Throwable -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use InvalidArgumentException; -class InvalidApplicationNameException extends InvalidArgumentException implements Exception -{ - public const InvalidFormat = 2; -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use InvalidArgumentException; -class InvalidEmailException extends InvalidArgumentException implements Exception -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use InvalidArgumentException; -class InvalidUrlException extends InvalidArgumentException implements Exception -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use RuntimeException; -class ManifestDocumentException extends RuntimeException implements Exception -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use LibXMLError; -use function sprintf; -class ManifestDocumentLoadingException extends \Exception implements Exception -{ - /** @var LibXMLError[] */ - private $libxmlErrors; - /** - * ManifestDocumentLoadingException constructor. - * - * @param LibXMLError[] $libxmlErrors - */ - public function __construct(array $libxmlErrors) - { - $this->libxmlErrors = $libxmlErrors; - $first = $this->libxmlErrors[0]; - parent::__construct(sprintf('%s (Line: %d / Column: %d / File: %s)', $first->message, $first->line, $first->column, $first->file), $first->code); - } - /** - * @return LibXMLError[] - */ - public function getLibxmlErrors(): array - { - return $this->libxmlErrors; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use RuntimeException; -class ManifestDocumentMapperException extends RuntimeException implements Exception -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use RuntimeException; -class ManifestElementException extends RuntimeException implements Exception -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class ManifestLoaderException extends \Exception implements Exception -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use InvalidArgumentException; -class NoEmailAddressException extends InvalidArgumentException implements Exception -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class Application extends Type -{ - public function isApplication(): bool - { - return \true; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use function preg_match; -use function sprintf; -class ApplicationName -{ - /** @var string */ - private $name; - public function __construct(string $name) - { - $this->ensureValidFormat($name); - $this->name = $name; - } - public function asString(): string - { - return $this->name; - } - public function isEqual(ApplicationName $name): bool - { - return $this->name === $name->name; - } - private function ensureValidFormat(string $name): void - { - if (!preg_match('#\w/\w#', $name)) { - throw new InvalidApplicationNameException(sprintf('Format of name "%s" is not valid - expected: vendor/packagename', $name), InvalidApplicationNameException::InvalidFormat); - } - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use function sprintf; -class Author -{ - /** @var string */ - private $name; - /** @var null|Email */ - private $email; - public function __construct(string $name, ?Email $email = null) - { - $this->name = $name; - $this->email = $email; - } - public function asString(): string - { - if (!$this->hasEmail()) { - return $this->name; - } - return sprintf('%s <%s>', $this->name, $this->email->asString()); - } - public function getName(): string - { - return $this->name; - } - /** - * @psalm-assert-if-true Email $this->email - */ - public function hasEmail(): bool - { - return $this->email !== null; - } - public function getEmail(): Email - { - if (!$this->hasEmail()) { - throw new NoEmailAddressException(); - } - return $this->email; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use Countable; -use IteratorAggregate; -use function count; -/** @template-implements IteratorAggregate */ -class AuthorCollection implements Countable, IteratorAggregate -{ - /** @var Author[] */ - private $authors = []; - public function add(Author $author): void - { - $this->authors[] = $author; - } - /** - * @return Author[] - */ - public function getAuthors(): array - { - return $this->authors; - } - public function count(): int - { - return count($this->authors); - } - public function getIterator(): AuthorCollectionIterator - { - return new AuthorCollectionIterator($this); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use Iterator; -use function count; -/** @template-implements Iterator */ -class AuthorCollectionIterator implements Iterator -{ - /** @var Author[] */ - private $authors; - /** @var int */ - private $position = 0; - public function __construct(AuthorCollection $authors) - { - $this->authors = $authors->getAuthors(); - } - public function rewind(): void - { - $this->position = 0; - } - public function valid(): bool - { - return $this->position < count($this->authors); - } - public function key(): int - { - return $this->position; - } - public function current(): Author - { - return $this->authors[$this->position]; - } - public function next(): void - { - $this->position++; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use PHPUnitPHAR\PharIo\Version\Version; -class BundledComponent -{ - /** @var string */ - private $name; - /** @var Version */ - private $version; - public function __construct(string $name, Version $version) - { - $this->name = $name; - $this->version = $version; - } - public function getName(): string - { - return $this->name; - } - public function getVersion(): Version - { - return $this->version; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use Countable; -use IteratorAggregate; -use function count; -/** @template-implements IteratorAggregate */ -class BundledComponentCollection implements Countable, IteratorAggregate -{ - /** @var BundledComponent[] */ - private $bundledComponents = []; - public function add(BundledComponent $bundledComponent): void - { - $this->bundledComponents[] = $bundledComponent; - } - /** - * @return BundledComponent[] - */ - public function getBundledComponents(): array - { - return $this->bundledComponents; - } - public function count(): int - { - return count($this->bundledComponents); - } - public function getIterator(): BundledComponentCollectionIterator - { - return new BundledComponentCollectionIterator($this); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use Iterator; -use function count; -/** @template-implements Iterator */ -class BundledComponentCollectionIterator implements Iterator -{ - /** @var BundledComponent[] */ - private $bundledComponents; - /** @var int */ - private $position = 0; - public function __construct(BundledComponentCollection $bundledComponents) - { - $this->bundledComponents = $bundledComponents->getBundledComponents(); - } - public function rewind(): void - { - $this->position = 0; - } - public function valid(): bool - { - return $this->position < count($this->bundledComponents); - } - public function key(): int - { - return $this->position; - } - public function current(): BundledComponent - { - return $this->bundledComponents[$this->position]; - } - public function next(): void - { - $this->position++; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class CopyrightInformation -{ - /** @var AuthorCollection */ - private $authors; - /** @var License */ - private $license; - public function __construct(AuthorCollection $authors, License $license) - { - $this->authors = $authors; - $this->license = $license; - } - public function getAuthors(): AuthorCollection - { - return $this->authors; - } - public function getLicense(): License - { - return $this->license; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use const FILTER_VALIDATE_EMAIL; -use function filter_var; -class Email -{ - /** @var string */ - private $email; - public function __construct(string $email) - { - $this->ensureEmailIsValid($email); - $this->email = $email; - } - public function asString(): string - { - return $this->email; - } - private function ensureEmailIsValid(string $url): void - { - if (filter_var($url, FILTER_VALIDATE_EMAIL) === \false) { - throw new InvalidEmailException(); - } - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use PHPUnitPHAR\PharIo\Version\Version; -use PHPUnitPHAR\PharIo\Version\VersionConstraint; -class Extension extends Type -{ - /** @var ApplicationName */ - private $application; - /** @var VersionConstraint */ - private $versionConstraint; - public function __construct(ApplicationName $application, VersionConstraint $versionConstraint) - { - $this->application = $application; - $this->versionConstraint = $versionConstraint; - } - public function getApplicationName(): ApplicationName - { - return $this->application; - } - public function getVersionConstraint(): VersionConstraint - { - return $this->versionConstraint; - } - public function isExtension(): bool - { - return \true; - } - public function isExtensionFor(ApplicationName $name): bool - { - return $this->application->isEqual($name); - } - public function isCompatibleWith(ApplicationName $name, Version $version): bool - { - return $this->isExtensionFor($name) && $this->versionConstraint->complies($version); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class Library extends Type -{ - public function isLibrary(): bool - { - return \true; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class License -{ - /** @var string */ - private $name; - /** @var Url */ - private $url; - public function __construct(string $name, Url $url) - { - $this->name = $name; - $this->url = $url; - } - public function getName(): string - { - return $this->name; - } - public function getUrl(): Url - { - return $this->url; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use PHPUnitPHAR\PharIo\Version\Version; -class Manifest -{ - /** @var ApplicationName */ - private $name; - /** @var Version */ - private $version; - /** @var Type */ - private $type; - /** @var CopyrightInformation */ - private $copyrightInformation; - /** @var RequirementCollection */ - private $requirements; - /** @var BundledComponentCollection */ - private $bundledComponents; - public function __construct(ApplicationName $name, Version $version, Type $type, CopyrightInformation $copyrightInformation, RequirementCollection $requirements, BundledComponentCollection $bundledComponents) - { - $this->name = $name; - $this->version = $version; - $this->type = $type; - $this->copyrightInformation = $copyrightInformation; - $this->requirements = $requirements; - $this->bundledComponents = $bundledComponents; - } - public function getName(): ApplicationName - { - return $this->name; - } - public function getVersion(): Version - { - return $this->version; - } - public function getType(): Type - { - return $this->type; - } - public function getCopyrightInformation(): CopyrightInformation - { - return $this->copyrightInformation; - } - public function getRequirements(): RequirementCollection - { - return $this->requirements; - } - public function getBundledComponents(): BundledComponentCollection - { - return $this->bundledComponents; - } - public function isApplication(): bool - { - return $this->type->isApplication(); - } - public function isLibrary(): bool - { - return $this->type->isLibrary(); - } - public function isExtension(): bool - { - return $this->type->isExtension(); - } - public function isExtensionFor(ApplicationName $application, ?Version $version = null): bool - { - if (!$this->isExtension()) { - return \false; - } - /** @var Extension $type */ - $type = $this->type; - if ($version !== null) { - return $type->isCompatibleWith($application, $version); - } - return $type->isExtensionFor($application); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class PhpExtensionRequirement implements Requirement -{ - /** @var string */ - private $extension; - public function __construct(string $extension) - { - $this->extension = $extension; - } - public function asString(): string - { - return $this->extension; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use PHPUnitPHAR\PharIo\Version\VersionConstraint; -class PhpVersionRequirement implements Requirement -{ - /** @var VersionConstraint */ - private $versionConstraint; - public function __construct(VersionConstraint $versionConstraint) - { - $this->versionConstraint = $versionConstraint; - } - public function getVersionConstraint(): VersionConstraint - { - return $this->versionConstraint; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -interface Requirement -{ -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use Countable; -use IteratorAggregate; -use function count; -/** @template-implements IteratorAggregate */ -class RequirementCollection implements Countable, IteratorAggregate -{ - /** @var Requirement[] */ - private $requirements = []; - public function add(Requirement $requirement): void - { - $this->requirements[] = $requirement; - } - /** - * @return Requirement[] - */ - public function getRequirements(): array - { - return $this->requirements; - } - public function count(): int - { - return count($this->requirements); - } - public function getIterator(): RequirementCollectionIterator - { - return new RequirementCollectionIterator($this); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use Iterator; -use function count; -/** @template-implements Iterator */ -class RequirementCollectionIterator implements Iterator -{ - /** @var Requirement[] */ - private $requirements; - /** @var int */ - private $position = 0; - public function __construct(RequirementCollection $requirements) - { - $this->requirements = $requirements->getRequirements(); - } - public function rewind(): void - { - $this->position = 0; - } - public function valid(): bool - { - return $this->position < count($this->requirements); - } - public function key(): int - { - return $this->position; - } - public function current(): Requirement - { - return $this->requirements[$this->position]; - } - public function next(): void - { - $this->position++; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use PHPUnitPHAR\PharIo\Version\VersionConstraint; -abstract class Type -{ - public static function application(): Application - { - return new Application(); - } - public static function library(): Library - { - return new Library(); - } - public static function extension(ApplicationName $application, VersionConstraint $versionConstraint): Extension - { - return new Extension($application, $versionConstraint); - } - /** @psalm-assert-if-true Application $this */ - public function isApplication(): bool - { - return \false; - } - /** @psalm-assert-if-true Library $this */ - public function isLibrary(): bool - { - return \false; - } - /** @psalm-assert-if-true Extension $this */ - public function isExtension(): bool - { - return \false; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use const FILTER_VALIDATE_URL; -use function filter_var; -class Url -{ - /** @var string */ - private $url; - public function __construct(string $url) - { - $this->ensureUrlIsValid($url); - $this->url = $url; - } - public function asString(): string - { - return $this->url; - } - /** - * @throws InvalidUrlException - */ - private function ensureUrlIsValid(string $url): void - { - if (filter_var($url, FILTER_VALIDATE_URL) === \false) { - throw new InvalidUrlException(); - } - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class AuthorElement extends ManifestElement -{ - public function getName(): string - { - return $this->getAttributeValue('name'); - } - public function getEmail(): string - { - return $this->getAttributeValue('email'); - } - public function hasEMail(): bool - { - return $this->hasAttribute('email'); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class AuthorElementCollection extends ElementCollection -{ - public function current(): AuthorElement - { - return new AuthorElement($this->getCurrentElement()); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class BundlesElement extends ManifestElement -{ - public function getComponentElements(): ComponentElementCollection - { - return new ComponentElementCollection($this->getChildrenByName('component')); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class ComponentElement extends ManifestElement -{ - public function getName(): string - { - return $this->getAttributeValue('name'); - } - public function getVersion(): string - { - return $this->getAttributeValue('version'); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class ComponentElementCollection extends ElementCollection -{ - public function current(): ComponentElement - { - return new ComponentElement($this->getCurrentElement()); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class ContainsElement extends ManifestElement -{ - public function getName(): string - { - return $this->getAttributeValue('name'); - } - public function getVersion(): string - { - return $this->getAttributeValue('version'); - } - public function getType(): string - { - return $this->getAttributeValue('type'); - } - public function getExtensionElement(): ExtensionElement - { - return new ExtensionElement($this->getChildByName('extension')); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class CopyrightElement extends ManifestElement -{ - public function getAuthorElements(): AuthorElementCollection - { - return new AuthorElementCollection($this->getChildrenByName('author')); - } - public function getLicenseElement(): LicenseElement - { - return new LicenseElement($this->getChildByName('license')); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use DOMElement; -use DOMNodeList; -use Iterator; -use ReturnTypeWillChange; -use function count; -use function get_class; -use function sprintf; -/** @template-implements Iterator */ -abstract class ElementCollection implements Iterator -{ - /** @var DOMElement[] */ - private $nodes = []; - /** @var int */ - private $position; - public function __construct(DOMNodeList $nodeList) - { - $this->position = 0; - $this->importNodes($nodeList); - } - #[ReturnTypeWillChange] - abstract public function current(); - public function next(): void - { - $this->position++; - } - public function key(): int - { - return $this->position; - } - public function valid(): bool - { - return $this->position < count($this->nodes); - } - public function rewind(): void - { - $this->position = 0; - } - protected function getCurrentElement(): DOMElement - { - return $this->nodes[$this->position]; - } - private function importNodes(DOMNodeList $nodeList): void - { - foreach ($nodeList as $node) { - if (!$node instanceof DOMElement) { - throw new ElementCollectionException(sprintf('\DOMElement expected, got \%s', get_class($node))); - } - $this->nodes[] = $node; - } - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class ExtElement extends ManifestElement -{ - public function getName(): string - { - return $this->getAttributeValue('name'); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class ExtElementCollection extends ElementCollection -{ - public function current(): ExtElement - { - return new ExtElement($this->getCurrentElement()); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class ExtensionElement extends ManifestElement -{ - public function getFor(): string - { - return $this->getAttributeValue('for'); - } - public function getCompatible(): string - { - return $this->getAttributeValue('compatible'); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class LicenseElement extends ManifestElement -{ - public function getType(): string - { - return $this->getAttributeValue('type'); - } - public function getUrl(): string - { - return $this->getAttributeValue('url'); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use DOMDocument; -use DOMElement; -use Throwable; -use function count; -use function file_get_contents; -use function is_file; -use function libxml_clear_errors; -use function libxml_get_errors; -use function libxml_use_internal_errors; -use function sprintf; -class ManifestDocument -{ - public const XMLNS = 'https://phar.io/xml/manifest/1.0'; - /** @var DOMDocument */ - private $dom; - public static function fromFile(string $filename): ManifestDocument - { - if (!is_file($filename)) { - throw new ManifestDocumentException(sprintf('File "%s" not found', $filename)); - } - return self::fromString(file_get_contents($filename)); - } - public static function fromString(string $xmlString): ManifestDocument - { - $prev = libxml_use_internal_errors(\true); - libxml_clear_errors(); - try { - $dom = new DOMDocument(); - $dom->loadXML($xmlString); - $errors = libxml_get_errors(); - libxml_use_internal_errors($prev); - } catch (Throwable $t) { - throw new ManifestDocumentException($t->getMessage(), 0, $t); - } - if (count($errors) !== 0) { - throw new ManifestDocumentLoadingException($errors); - } - return new self($dom); - } - private function __construct(DOMDocument $dom) - { - $this->ensureCorrectDocumentType($dom); - $this->dom = $dom; - } - public function getContainsElement(): ContainsElement - { - return new ContainsElement($this->fetchElementByName('contains')); - } - public function getCopyrightElement(): CopyrightElement - { - return new CopyrightElement($this->fetchElementByName('copyright')); - } - public function getRequiresElement(): RequiresElement - { - return new RequiresElement($this->fetchElementByName('requires')); - } - public function hasBundlesElement(): bool - { - return $this->dom->getElementsByTagNameNS(self::XMLNS, 'bundles')->length === 1; - } - public function getBundlesElement(): BundlesElement - { - return new BundlesElement($this->fetchElementByName('bundles')); - } - private function ensureCorrectDocumentType(DOMDocument $dom): void - { - $root = $dom->documentElement; - if ($root->localName !== 'phar' || $root->namespaceURI !== self::XMLNS) { - throw new ManifestDocumentException('Not a phar.io manifest document'); - } - } - private function fetchElementByName(string $elementName): DOMElement - { - $element = $this->dom->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); - if (!$element instanceof DOMElement) { - throw new ManifestDocumentException(sprintf('Element %s missing', $elementName)); - } - return $element; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -use DOMElement; -use DOMNodeList; -use function sprintf; -class ManifestElement -{ - public const XMLNS = 'https://phar.io/xml/manifest/1.0'; - /** @var DOMElement */ - private $element; - public function __construct(DOMElement $element) - { - $this->element = $element; - } - protected function getAttributeValue(string $name): string - { - if (!$this->element->hasAttribute($name)) { - throw new ManifestElementException(sprintf('Attribute %s not set on element %s', $name, $this->element->localName)); - } - return $this->element->getAttribute($name); - } - protected function hasAttribute(string $name): bool - { - return $this->element->hasAttribute($name); - } - protected function getChildByName(string $elementName): DOMElement - { - $element = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); - if (!$element instanceof DOMElement) { - throw new ManifestElementException(sprintf('Element %s missing', $elementName)); - } - return $element; - } - protected function getChildrenByName(string $elementName): DOMNodeList - { - $elementList = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName); - if ($elementList->length === 0) { - throw new ManifestElementException(sprintf('Element(s) %s missing', $elementName)); - } - return $elementList; - } - protected function hasChild(string $elementName): bool - { - return $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->length !== 0; - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class PhpElement extends ManifestElement -{ - public function getVersion(): string - { - return $this->getAttributeValue('version'); - } - public function hasExtElements(): bool - { - return $this->hasChild('ext'); - } - public function getExtElements(): ExtElementCollection - { - return new ExtElementCollection($this->getChildrenByName('ext')); - } -} -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PHPUnitPHAR\PharIo\Manifest; - -class RequiresElement extends ManifestElement -{ - public function getPHPElement(): PhpElement - { - return new PhpElement($this->getChildByName('php')); - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class BuildMetaData -{ - /** @var string */ - private $value; - public function __construct(string $value) - { - $this->value = $value; - } - public function asString(): string - { - return $this->value; - } - public function equals(BuildMetaData $other): bool - { - return $this->asString() === $other->asString(); - } -} -Copyright (c) 2016-2017 Arne Blankerts , Sebastian Heuer and contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - - 0, 'a' => 1, 'alpha' => 1, 'b' => 2, 'beta' => 2, 'rc' => 3, 'p' => 4, 'pl' => 4, 'patch' => 4]; - /** @var string */ - private $value; - /** @var int */ - private $valueScore; - /** @var int */ - private $number = 0; - /** @var string */ - private $full; - /** - * @throws InvalidPreReleaseSuffixException - */ - public function __construct(string $value) - { - $this->parseValue($value); - } - public function asString(): string - { - return $this->full; - } - public function getValue(): string - { - return $this->value; - } - public function getNumber(): ?int - { - return $this->number; - } - public function isGreaterThan(PreReleaseSuffix $suffix): bool - { - if ($this->valueScore > $suffix->valueScore) { - return \true; - } - if ($this->valueScore < $suffix->valueScore) { - return \false; - } - return $this->getNumber() > $suffix->getNumber(); - } - private function mapValueToScore(string $value): int - { - $value = \strtolower($value); - return self::valueScoreMap[$value]; - } - private function parseValue(string $value): void - { - $regex = '/-?((dev|beta|b|rc|alpha|a|patch|p|pl)\.?(\d*)).*$/i'; - if (\preg_match($regex, $value, $matches) !== 1) { - throw new InvalidPreReleaseSuffixException(\sprintf('Invalid label %s', $value)); - } - $this->full = $matches[1]; - $this->value = $matches[2]; - if ($matches[3] !== '') { - $this->number = (int) $matches[3]; - } - $this->valueScore = $this->mapValueToScore($matches[2]); - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class Version -{ - /** @var string */ - private $originalVersionString; - /** @var VersionNumber */ - private $major; - /** @var VersionNumber */ - private $minor; - /** @var VersionNumber */ - private $patch; - /** @var null|PreReleaseSuffix */ - private $preReleaseSuffix; - /** @var null|BuildMetaData */ - private $buildMetadata; - public function __construct(string $versionString) - { - $this->ensureVersionStringIsValid($versionString); - $this->originalVersionString = $versionString; - } - /** - * @throws NoPreReleaseSuffixException - */ - public function getPreReleaseSuffix(): PreReleaseSuffix - { - if ($this->preReleaseSuffix === null) { - throw new NoPreReleaseSuffixException('No pre-release suffix set'); - } - return $this->preReleaseSuffix; - } - public function getOriginalString(): string - { - return $this->originalVersionString; - } - public function getVersionString(): string - { - $str = \sprintf('%d.%d.%d', $this->getMajor()->getValue() ?? 0, $this->getMinor()->getValue() ?? 0, $this->getPatch()->getValue() ?? 0); - if (!$this->hasPreReleaseSuffix()) { - return $str; - } - return $str . '-' . $this->getPreReleaseSuffix()->asString(); - } - public function hasPreReleaseSuffix(): bool - { - return $this->preReleaseSuffix !== null; - } - public function equals(Version $other): bool - { - if ($this->getVersionString() !== $other->getVersionString()) { - return \false; - } - if ($this->hasBuildMetaData() !== $other->hasBuildMetaData()) { - return \false; - } - if ($this->hasBuildMetaData() && $other->hasBuildMetaData() && !$this->getBuildMetaData()->equals($other->getBuildMetaData())) { - return \false; - } - return \true; - } - public function isGreaterThan(Version $version): bool - { - if ($version->getMajor()->getValue() > $this->getMajor()->getValue()) { - return \false; - } - if ($version->getMajor()->getValue() < $this->getMajor()->getValue()) { - return \true; - } - if ($version->getMinor()->getValue() > $this->getMinor()->getValue()) { - return \false; - } - if ($version->getMinor()->getValue() < $this->getMinor()->getValue()) { - return \true; - } - if ($version->getPatch()->getValue() > $this->getPatch()->getValue()) { - return \false; - } - if ($version->getPatch()->getValue() < $this->getPatch()->getValue()) { - return \true; - } - if (!$version->hasPreReleaseSuffix() && !$this->hasPreReleaseSuffix()) { - return \false; - } - if ($version->hasPreReleaseSuffix() && !$this->hasPreReleaseSuffix()) { - return \true; - } - if (!$version->hasPreReleaseSuffix() && $this->hasPreReleaseSuffix()) { - return \false; - } - return $this->getPreReleaseSuffix()->isGreaterThan($version->getPreReleaseSuffix()); - } - public function getMajor(): VersionNumber - { - return $this->major; - } - public function getMinor(): VersionNumber - { - return $this->minor; - } - public function getPatch(): VersionNumber - { - return $this->patch; - } - /** - * @psalm-assert-if-true BuildMetaData $this->buildMetadata - * @psalm-assert-if-true BuildMetaData $this->getBuildMetaData() - */ - public function hasBuildMetaData(): bool - { - return $this->buildMetadata !== null; - } - /** - * @throws NoBuildMetaDataException - */ - public function getBuildMetaData(): BuildMetaData - { - if (!$this->hasBuildMetaData()) { - throw new NoBuildMetaDataException('No build metadata set'); - } - return $this->buildMetadata; - } - /** - * @param string[] $matches - * - * @throws InvalidPreReleaseSuffixException - */ - private function parseVersion(array $matches): void - { - $this->major = new VersionNumber((int) $matches['Major']); - $this->minor = new VersionNumber((int) $matches['Minor']); - $this->patch = isset($matches['Patch']) ? new VersionNumber((int) $matches['Patch']) : new VersionNumber(0); - if (isset($matches['PreReleaseSuffix']) && $matches['PreReleaseSuffix'] !== '') { - $this->preReleaseSuffix = new PreReleaseSuffix($matches['PreReleaseSuffix']); - } - if (isset($matches['BuildMetadata'])) { - $this->buildMetadata = new BuildMetaData($matches['BuildMetadata']); - } - } - /** - * @param string $version - * - * @throws InvalidVersionException - */ - private function ensureVersionStringIsValid($version): void - { - $regex = '/^v? - (?P0|[1-9]\d*) - \. - (?P0|[1-9]\d*) - (\. - (?P0|[1-9]\d*) - )? - (?: - - - (?(?:(dev|beta|b|rc|alpha|a|patch|p|pl)\.?\d*)) - )? - (?: - \+ - (?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-@]+)*) - )? - $/xi'; - if (\preg_match($regex, $version, $matches) !== 1) { - throw new InvalidVersionException(\sprintf("Version string '%s' does not follow SemVer semantics", $version)); - } - $this->parseVersion($matches); - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class VersionConstraintParser -{ - /** - * @throws UnsupportedVersionConstraintException - */ - public function parse(string $value): VersionConstraint - { - if (\strpos($value, '|') !== \false) { - return $this->handleOrGroup($value); - } - if (!\preg_match('/^[\^~*]?v?[\d.*]+(?:-.*)?$/i', $value)) { - throw new UnsupportedVersionConstraintException(\sprintf('Version constraint %s is not supported.', $value)); - } - switch ($value[0]) { - case '~': - return $this->handleTildeOperator($value); - case '^': - return $this->handleCaretOperator($value); - } - $constraint = new VersionConstraintValue($value); - if ($constraint->getMajor()->isAny()) { - return new AnyVersionConstraint(); - } - if ($constraint->getMinor()->isAny()) { - return new SpecificMajorVersionConstraint($constraint->getVersionString(), $constraint->getMajor()->getValue() ?? 0); - } - if ($constraint->getPatch()->isAny()) { - return new SpecificMajorAndMinorVersionConstraint($constraint->getVersionString(), $constraint->getMajor()->getValue() ?? 0, $constraint->getMinor()->getValue() ?? 0); - } - return new ExactVersionConstraint($constraint->getVersionString()); - } - private function handleOrGroup(string $value): OrVersionConstraintGroup - { - $constraints = []; - foreach (\preg_split('{\s*\|\|?\s*}', \trim($value)) as $groupSegment) { - $constraints[] = $this->parse(\trim($groupSegment)); - } - return new OrVersionConstraintGroup($value, $constraints); - } - private function handleTildeOperator(string $value): AndVersionConstraintGroup - { - $constraintValue = new VersionConstraintValue(\substr($value, 1)); - if ($constraintValue->getPatch()->isAny()) { - return $this->handleCaretOperator($value); - } - $constraints = [new GreaterThanOrEqualToVersionConstraint($value, new Version(\substr($value, 1))), new SpecificMajorAndMinorVersionConstraint($value, $constraintValue->getMajor()->getValue() ?? 0, $constraintValue->getMinor()->getValue() ?? 0)]; - return new AndVersionConstraintGroup($value, $constraints); - } - private function handleCaretOperator(string $value): AndVersionConstraintGroup - { - $constraintValue = new VersionConstraintValue(\substr($value, 1)); - $constraints = [new GreaterThanOrEqualToVersionConstraint($value, new Version(\substr($value, 1)))]; - if ($constraintValue->getMajor()->getValue() === 0) { - $constraints[] = new SpecificMajorAndMinorVersionConstraint($value, $constraintValue->getMajor()->getValue() ?? 0, $constraintValue->getMinor()->getValue() ?? 0); - } else { - $constraints[] = new SpecificMajorVersionConstraint($value, $constraintValue->getMajor()->getValue() ?? 0); - } - return new AndVersionConstraintGroup($value, $constraints); - } -} -versionString = $versionString; - $this->parseVersion($versionString); - } - public function getLabel(): string - { - return $this->label; - } - public function getBuildMetaData(): string - { - return $this->buildMetaData; - } - public function getVersionString(): string - { - return $this->versionString; - } - public function getMajor(): VersionNumber - { - return $this->major; - } - public function getMinor(): VersionNumber - { - return $this->minor; - } - public function getPatch(): VersionNumber - { - return $this->patch; - } - private function parseVersion(string $versionString): void - { - $this->extractBuildMetaData($versionString); - $this->extractLabel($versionString); - $this->stripPotentialVPrefix($versionString); - $versionSegments = \explode('.', $versionString); - $this->major = new VersionNumber(\is_numeric($versionSegments[0]) ? (int) $versionSegments[0] : null); - $minorValue = isset($versionSegments[1]) && \is_numeric($versionSegments[1]) ? (int) $versionSegments[1] : null; - $patchValue = isset($versionSegments[2]) && \is_numeric($versionSegments[2]) ? (int) $versionSegments[2] : null; - $this->minor = new VersionNumber($minorValue); - $this->patch = new VersionNumber($patchValue); - } - private function extractBuildMetaData(string &$versionString): void - { - if (\preg_match('/\+(.*)/', $versionString, $matches) === 1) { - $this->buildMetaData = $matches[1]; - $versionString = \str_replace($matches[0], '', $versionString); - } - } - private function extractLabel(string &$versionString): void - { - if (\preg_match('/-(.*)/', $versionString, $matches) === 1) { - $this->label = $matches[1]; - $versionString = \str_replace($matches[0], '', $versionString); - } - } - private function stripPotentialVPrefix(string &$versionString): void - { - if ($versionString[0] !== 'v') { - return; - } - $versionString = \substr($versionString, 1); - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class VersionNumber -{ - /** @var ?int */ - private $value; - public function __construct(?int $value) - { - $this->value = $value; - } - public function isAny(): bool - { - return $this->value === null; - } - public function getValue(): ?int - { - return $this->value; - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -abstract class AbstractVersionConstraint implements VersionConstraint -{ - /** @var string */ - private $originalValue; - public function __construct(string $originalValue) - { - $this->originalValue = $originalValue; - } - public function asString(): string - { - return $this->originalValue; - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class AndVersionConstraintGroup extends AbstractVersionConstraint -{ - /** @var VersionConstraint[] */ - private $constraints = []; - /** - * @param VersionConstraint[] $constraints - */ - public function __construct(string $originalValue, array $constraints) - { - parent::__construct($originalValue); - $this->constraints = $constraints; - } - public function complies(Version $version): bool - { - foreach ($this->constraints as $constraint) { - if (!$constraint->complies($version)) { - return \false; - } - } - return \true; - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class AnyVersionConstraint implements VersionConstraint -{ - public function complies(Version $version): bool - { - return \true; - } - public function asString(): string - { - return '*'; - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class ExactVersionConstraint extends AbstractVersionConstraint -{ - public function complies(Version $version): bool - { - $other = $version->getVersionString(); - if ($version->hasBuildMetaData()) { - $other .= '+' . $version->getBuildMetaData()->asString(); - } - return $this->asString() === $other; - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class GreaterThanOrEqualToVersionConstraint extends AbstractVersionConstraint -{ - /** @var Version */ - private $minimalVersion; - public function __construct(string $originalValue, Version $minimalVersion) - { - parent::__construct($originalValue); - $this->minimalVersion = $minimalVersion; - } - public function complies(Version $version): bool - { - return $version->getVersionString() === $this->minimalVersion->getVersionString() || $version->isGreaterThan($this->minimalVersion); - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class OrVersionConstraintGroup extends AbstractVersionConstraint -{ - /** @var VersionConstraint[] */ - private $constraints = []; - /** - * @param string $originalValue - * @param VersionConstraint[] $constraints - */ - public function __construct($originalValue, array $constraints) - { - parent::__construct($originalValue); - $this->constraints = $constraints; - } - public function complies(Version $version): bool - { - foreach ($this->constraints as $constraint) { - if ($constraint->complies($version)) { - return \true; - } - } - return \false; - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class SpecificMajorAndMinorVersionConstraint extends AbstractVersionConstraint -{ - /** @var int */ - private $major; - /** @var int */ - private $minor; - public function __construct(string $originalValue, int $major, int $minor) - { - parent::__construct($originalValue); - $this->major = $major; - $this->minor = $minor; - } - public function complies(Version $version): bool - { - if ($version->getMajor()->getValue() !== $this->major) { - return \false; - } - return $version->getMinor()->getValue() === $this->minor; - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -class SpecificMajorVersionConstraint extends AbstractVersionConstraint -{ - /** @var int */ - private $major; - public function __construct(string $originalValue, int $major) - { - parent::__construct($originalValue); - $this->major = $major; - } - public function complies(Version $version): bool - { - return $version->getMajor()->getValue() === $this->major; - } -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -interface VersionConstraint -{ - public function complies(Version $version): bool; - public function asString(): string; -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -use Throwable; -interface Exception extends Throwable -{ -} -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\PharIo\Version; - -final class UnsupportedVersionConstraintException extends \RuntimeException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use function array_diff; -use function array_diff_key; -use function array_flip; -use function array_keys; -use function array_merge; -use function array_merge_recursive; -use function array_unique; -use function count; -use function explode; -use function is_array; -use function is_file; -use function sort; -use ReflectionClass; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Data\ProcessedCodeCoverageData; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver\Driver; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\Builder; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\Directory; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\StaticAnalysis\CachingFileAnalyser; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\StaticAnalysis\ParsingFileAnalyser; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Test\TestSize\TestSize; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Test\TestStatus\TestStatus; -use PHPUnitPHAR\SebastianBergmann\CodeUnitReverseLookup\Wizard; -/** - * Provides collection functionality for PHP code coverage information. - * - * @phpstan-type TestType = array{ - * size: string, - * status: string, - * } - */ -final class CodeCoverage -{ - private const UNCOVERED_FILES = 'UNCOVERED_FILES'; - private readonly Driver $driver; - private readonly Filter $filter; - private readonly Wizard $wizard; - private bool $checkForUnintentionallyCoveredCode = \false; - private bool $includeUncoveredFiles = \true; - private bool $ignoreDeprecatedCode = \false; - private ?string $currentId = null; - private ?TestSize $currentSize = null; - private ProcessedCodeCoverageData $data; - private bool $useAnnotationsForIgnoringCode = \true; - /** - * @var array> - */ - private array $linesToBeIgnored = []; - /** - * @var array - */ - private array $tests = []; - /** - * @var list - */ - private array $parentClassesExcludedFromUnintentionallyCoveredCodeCheck = []; - private ?FileAnalyser $analyser = null; - private ?string $cacheDirectory = null; - private ?Directory $cachedReport = null; - public function __construct(Driver $driver, Filter $filter) - { - $this->driver = $driver; - $this->filter = $filter; - $this->data = new ProcessedCodeCoverageData(); - $this->wizard = new Wizard(); - } - /** - * Returns the code coverage information as a graph of node objects. - */ - public function getReport(): Directory - { - if ($this->cachedReport === null) { - $this->cachedReport = (new Builder($this->analyser()))->build($this); - } - return $this->cachedReport; - } - /** - * Clears collected code coverage data. - */ - public function clear(): void - { - $this->currentId = null; - $this->currentSize = null; - $this->data = new ProcessedCodeCoverageData(); - $this->tests = []; - $this->cachedReport = null; - } - /** - * @internal - */ - public function clearCache(): void - { - $this->cachedReport = null; - } - /** - * Returns the filter object used. - */ - public function filter(): Filter - { - return $this->filter; - } - /** - * Returns the collected code coverage data. - */ - public function getData(bool $raw = \false): ProcessedCodeCoverageData - { - if (!$raw) { - if ($this->includeUncoveredFiles) { - $this->addUncoveredFilesFromFilter(); - } - } - return $this->data; - } - /** - * Sets the coverage data. - */ - public function setData(ProcessedCodeCoverageData $data): void - { - $this->data = $data; - } - /** - * @return array - */ - public function getTests(): array - { - return $this->tests; - } - /** - * @param array $tests - */ - public function setTests(array $tests): void - { - $this->tests = $tests; - } - public function start(string $id, ?TestSize $size = null, bool $clear = \false): void - { - if ($clear) { - $this->clear(); - } - $this->currentId = $id; - $this->currentSize = $size; - $this->driver->start(); - $this->cachedReport = null; - } - /** - * @param array> $linesToBeIgnored - */ - public function stop(bool $append = \true, ?TestStatus $status = null, array|false $linesToBeCovered = [], array $linesToBeUsed = [], array $linesToBeIgnored = []): RawCodeCoverageData - { - $data = $this->driver->stop(); - $this->linesToBeIgnored = array_merge_recursive($this->linesToBeIgnored, $linesToBeIgnored); - $this->append($data, null, $append, $status, $linesToBeCovered, $linesToBeUsed, $linesToBeIgnored); - $this->currentId = null; - $this->currentSize = null; - $this->cachedReport = null; - return $data; - } - /** - * @param array> $linesToBeIgnored - * - * @throws ReflectionException - * @throws TestIdMissingException - * @throws UnintentionallyCoveredCodeException - */ - public function append(RawCodeCoverageData $rawData, ?string $id = null, bool $append = \true, ?TestStatus $status = null, array|false $linesToBeCovered = [], array $linesToBeUsed = [], array $linesToBeIgnored = []): void - { - if ($id === null) { - $id = $this->currentId; - } - if ($id === null) { - throw new TestIdMissingException(); - } - $this->cachedReport = null; - if ($status === null) { - $status = TestStatus::unknown(); - } - $size = $this->currentSize; - if ($size === null) { - $size = TestSize::unknown(); - } - $this->applyFilter($rawData); - $this->applyExecutableLinesFilter($rawData); - if ($this->useAnnotationsForIgnoringCode) { - $this->applyIgnoredLinesFilter($rawData, $linesToBeIgnored); - } - $this->data->initializeUnseenData($rawData); - if (!$append) { - return; - } - if ($id === self::UNCOVERED_FILES) { - return; - } - $this->applyCoversAndUsesFilter($rawData, $linesToBeCovered, $linesToBeUsed, $size); - if (empty($rawData->lineCoverage())) { - return; - } - $this->tests[$id] = ['size' => $size->asString(), 'status' => $status->asString()]; - $this->data->markCodeAsExecutedByTestCase($id, $rawData); - } - /** - * Merges the data from another instance. - */ - public function merge(self $that): void - { - $this->filter->includeFiles($that->filter()->files()); - $this->data->merge($that->data); - $this->tests = array_merge($this->tests, $that->getTests()); - $this->cachedReport = null; - } - public function enableCheckForUnintentionallyCoveredCode(): void - { - $this->checkForUnintentionallyCoveredCode = \true; - } - public function disableCheckForUnintentionallyCoveredCode(): void - { - $this->checkForUnintentionallyCoveredCode = \false; - } - /** - * @deprecated - */ - public function includeUncoveredFiles(): void - { - $this->includeUncoveredFiles = \true; - } - /** - * @deprecated - */ - public function excludeUncoveredFiles(): void - { - $this->includeUncoveredFiles = \false; - } - public function enableAnnotationsForIgnoringCode(): void - { - $this->useAnnotationsForIgnoringCode = \true; - } - public function disableAnnotationsForIgnoringCode(): void - { - $this->useAnnotationsForIgnoringCode = \false; - } - public function ignoreDeprecatedCode(): void - { - $this->ignoreDeprecatedCode = \true; - } - public function doNotIgnoreDeprecatedCode(): void - { - $this->ignoreDeprecatedCode = \false; - } - /** - * @phpstan-assert-if-true !null $this->cacheDirectory - */ - public function cachesStaticAnalysis(): bool - { - return $this->cacheDirectory !== null; - } - public function cacheStaticAnalysis(string $directory): void - { - $this->cacheDirectory = $directory; - } - public function doNotCacheStaticAnalysis(): void - { - $this->cacheDirectory = null; - } - /** - * @throws StaticAnalysisCacheNotConfiguredException - */ - public function cacheDirectory(): string - { - if (!$this->cachesStaticAnalysis()) { - throw new StaticAnalysisCacheNotConfiguredException('The static analysis cache is not configured'); - } - return $this->cacheDirectory; - } - /** - * @param class-string $className - */ - public function excludeSubclassesOfThisClassFromUnintentionallyCoveredCodeCheck(string $className): void - { - $this->parentClassesExcludedFromUnintentionallyCoveredCodeCheck[] = $className; - } - public function enableBranchAndPathCoverage(): void - { - $this->driver->enableBranchAndPathCoverage(); - } - public function disableBranchAndPathCoverage(): void - { - $this->driver->disableBranchAndPathCoverage(); - } - public function collectsBranchAndPathCoverage(): bool - { - return $this->driver->collectsBranchAndPathCoverage(); - } - public function detectsDeadCode(): bool - { - return $this->driver->detectsDeadCode(); - } - /** - * @throws ReflectionException - * @throws UnintentionallyCoveredCodeException - */ - private function applyCoversAndUsesFilter(RawCodeCoverageData $rawData, array|false $linesToBeCovered, array $linesToBeUsed, TestSize $size): void - { - if ($linesToBeCovered === \false) { - $rawData->clear(); - return; - } - if (empty($linesToBeCovered)) { - return; - } - if ($this->checkForUnintentionallyCoveredCode && !$size->isMedium() && !$size->isLarge()) { - $this->performUnintentionallyCoveredCodeCheck($rawData, $linesToBeCovered, $linesToBeUsed); - } - $rawLineData = $rawData->lineCoverage(); - $filesWithNoCoverage = array_diff_key($rawLineData, $linesToBeCovered); - foreach (array_keys($filesWithNoCoverage) as $fileWithNoCoverage) { - $rawData->removeCoverageDataForFile($fileWithNoCoverage); - } - if (is_array($linesToBeCovered)) { - foreach ($linesToBeCovered as $fileToBeCovered => $includedLines) { - $rawData->keepLineCoverageDataOnlyForLines($fileToBeCovered, $includedLines); - $rawData->keepFunctionCoverageDataOnlyForLines($fileToBeCovered, $includedLines); - } - } - } - private function applyFilter(RawCodeCoverageData $data): void - { - if ($this->filter->isEmpty()) { - return; - } - foreach (array_keys($data->lineCoverage()) as $filename) { - if ($this->filter->isExcluded($filename)) { - $data->removeCoverageDataForFile($filename); - } - } - } - private function applyExecutableLinesFilter(RawCodeCoverageData $data): void - { - foreach (array_keys($data->lineCoverage()) as $filename) { - if (!$this->filter->isFile($filename)) { - continue; - } - $linesToBranchMap = $this->analyser()->executableLinesIn($filename); - $data->keepLineCoverageDataOnlyForLines($filename, array_keys($linesToBranchMap)); - $data->markExecutableLineByBranch($filename, $linesToBranchMap); - } - } - /** - * @param array> $linesToBeIgnored - */ - private function applyIgnoredLinesFilter(RawCodeCoverageData $data, array $linesToBeIgnored): void - { - foreach (array_keys($data->lineCoverage()) as $filename) { - if (!$this->filter->isFile($filename)) { - continue; - } - if (isset($linesToBeIgnored[$filename])) { - $data->removeCoverageDataForLines($filename, $linesToBeIgnored[$filename]); - } - $data->removeCoverageDataForLines($filename, $this->analyser()->ignoredLinesFor($filename)); - } - } - /** - * @throws UnintentionallyCoveredCodeException - */ - private function addUncoveredFilesFromFilter(): void - { - $uncoveredFiles = array_diff($this->filter->files(), $this->data->coveredFiles()); - foreach ($uncoveredFiles as $uncoveredFile) { - if (is_file($uncoveredFile)) { - $this->append(RawCodeCoverageData::fromUncoveredFile($uncoveredFile, $this->analyser()), self::UNCOVERED_FILES, linesToBeIgnored: $this->linesToBeIgnored); - } - } - } - /** - * @throws ReflectionException - * @throws UnintentionallyCoveredCodeException - */ - private function performUnintentionallyCoveredCodeCheck(RawCodeCoverageData $data, array $linesToBeCovered, array $linesToBeUsed): void - { - $allowedLines = $this->getAllowedLines($linesToBeCovered, $linesToBeUsed); - $unintentionallyCoveredUnits = []; - foreach ($data->lineCoverage() as $file => $_data) { - foreach ($_data as $line => $flag) { - if ($flag === 1 && !isset($allowedLines[$file][$line])) { - $unintentionallyCoveredUnits[] = $this->wizard->lookup($file, $line); - } - } - } - $unintentionallyCoveredUnits = $this->processUnintentionallyCoveredUnits($unintentionallyCoveredUnits); - if (!empty($unintentionallyCoveredUnits)) { - throw new UnintentionallyCoveredCodeException($unintentionallyCoveredUnits); - } - } - private function getAllowedLines(array $linesToBeCovered, array $linesToBeUsed): array - { - $allowedLines = []; - foreach (array_keys($linesToBeCovered) as $file) { - if (!isset($allowedLines[$file])) { - $allowedLines[$file] = []; - } - $allowedLines[$file] = array_merge($allowedLines[$file], $linesToBeCovered[$file]); - } - foreach (array_keys($linesToBeUsed) as $file) { - if (!isset($allowedLines[$file])) { - $allowedLines[$file] = []; - } - $allowedLines[$file] = array_merge($allowedLines[$file], $linesToBeUsed[$file]); - } - foreach (array_keys($allowedLines) as $file) { - $allowedLines[$file] = array_flip(array_unique($allowedLines[$file])); - } - return $allowedLines; - } - /** - * @param list $unintentionallyCoveredUnits - * - * @throws ReflectionException - * - * @return list - */ - private function processUnintentionallyCoveredUnits(array $unintentionallyCoveredUnits): array - { - $unintentionallyCoveredUnits = array_unique($unintentionallyCoveredUnits); - $processed = []; - foreach ($unintentionallyCoveredUnits as $unintentionallyCoveredUnit) { - $tmp = explode('::', $unintentionallyCoveredUnit); - if (count($tmp) !== 2) { - $processed[] = $unintentionallyCoveredUnit; - continue; - } - try { - $class = new ReflectionClass($tmp[0]); - foreach ($this->parentClassesExcludedFromUnintentionallyCoveredCodeCheck as $parentClass) { - if ($class->isSubclassOf($parentClass)) { - continue 2; - } - } - } catch (\ReflectionException $e) { - throw new ReflectionException($e->getMessage(), $e->getCode(), $e); - } - $processed[] = $tmp[0]; - } - $processed = array_unique($processed); - sort($processed); - return $processed; - } - private function analyser(): FileAnalyser - { - if ($this->analyser !== null) { - return $this->analyser; - } - $this->analyser = new ParsingFileAnalyser($this->useAnnotationsForIgnoringCode, $this->ignoreDeprecatedCode); - if ($this->cachesStaticAnalysis()) { - $this->analyser = new CachingFileAnalyser($this->cacheDirectory, $this->analyser, $this->useAnnotationsForIgnoringCode, $this->ignoreDeprecatedCode); - } - return $this->analyser; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Data; - -use function array_key_exists; -use function array_keys; -use function array_merge; -use function array_unique; -use function count; -use function is_array; -use function ksort; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver\Driver; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - * - * @phpstan-import-type XdebugFunctionCoverageType from \SebastianBergmann\CodeCoverage\Driver\XdebugDriver - * - * @phpstan-type TestIdType = string - */ -final class ProcessedCodeCoverageData -{ - /** - * Line coverage data. - * An array of filenames, each having an array of linenumbers, each executable line having an array of testcase ids. - * - * @var array>> - */ - private array $lineCoverage = []; - /** - * Function coverage data. - * Maintains base format of raw data (@see https://xdebug.org/docs/code_coverage), but each 'hit' entry is an array - * of testcase ids. - * - * @var array, - * out: array, - * out_hit: array, - * }>, - * paths: array, - * hit: list, - * }>, - * hit: list - * }>> - */ - private array $functionCoverage = []; - public function initializeUnseenData(RawCodeCoverageData $rawData): void - { - foreach ($rawData->lineCoverage() as $file => $lines) { - if (!isset($this->lineCoverage[$file])) { - $this->lineCoverage[$file] = []; - foreach ($lines as $k => $v) { - $this->lineCoverage[$file][$k] = $v === Driver::LINE_NOT_EXECUTABLE ? null : []; - } - } - } - foreach ($rawData->functionCoverage() as $file => $functions) { - foreach ($functions as $functionName => $functionData) { - if (isset($this->functionCoverage[$file][$functionName])) { - $this->initPreviouslySeenFunction($file, $functionName, $functionData); - } else { - $this->initPreviouslyUnseenFunction($file, $functionName, $functionData); - } - } - } - } - public function markCodeAsExecutedByTestCase(string $testCaseId, RawCodeCoverageData $executedCode): void - { - foreach ($executedCode->lineCoverage() as $file => $lines) { - foreach ($lines as $k => $v) { - if ($v === Driver::LINE_EXECUTED) { - $this->lineCoverage[$file][$k][] = $testCaseId; - } - } - } - foreach ($executedCode->functionCoverage() as $file => $functions) { - foreach ($functions as $functionName => $functionData) { - foreach ($functionData['branches'] as $branchId => $branchData) { - if ($branchData['hit'] === Driver::BRANCH_HIT) { - $this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'][] = $testCaseId; - } - } - foreach ($functionData['paths'] as $pathId => $pathData) { - if ($pathData['hit'] === Driver::BRANCH_HIT) { - $this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'][] = $testCaseId; - } - } - } - } - } - public function setLineCoverage(array $lineCoverage): void - { - $this->lineCoverage = $lineCoverage; - } - public function lineCoverage(): array - { - ksort($this->lineCoverage); - return $this->lineCoverage; - } - public function setFunctionCoverage(array $functionCoverage): void - { - $this->functionCoverage = $functionCoverage; - } - public function functionCoverage(): array - { - ksort($this->functionCoverage); - return $this->functionCoverage; - } - public function coveredFiles(): array - { - ksort($this->lineCoverage); - return array_keys($this->lineCoverage); - } - public function renameFile(string $oldFile, string $newFile): void - { - $this->lineCoverage[$newFile] = $this->lineCoverage[$oldFile]; - if (isset($this->functionCoverage[$oldFile])) { - $this->functionCoverage[$newFile] = $this->functionCoverage[$oldFile]; - } - unset($this->lineCoverage[$oldFile], $this->functionCoverage[$oldFile]); - } - public function merge(self $newData): void - { - foreach ($newData->lineCoverage as $file => $lines) { - if (!isset($this->lineCoverage[$file])) { - $this->lineCoverage[$file] = $lines; - continue; - } - // we should compare the lines if any of two contains data - $compareLineNumbers = array_unique(array_merge(array_keys($this->lineCoverage[$file]), array_keys($newData->lineCoverage[$file]))); - foreach ($compareLineNumbers as $line) { - $thatPriority = $this->priorityForLine($newData->lineCoverage[$file], $line); - $thisPriority = $this->priorityForLine($this->lineCoverage[$file], $line); - if ($thatPriority > $thisPriority) { - $this->lineCoverage[$file][$line] = $newData->lineCoverage[$file][$line]; - } elseif ($thatPriority === $thisPriority && is_array($this->lineCoverage[$file][$line])) { - $this->lineCoverage[$file][$line] = array_unique(array_merge($this->lineCoverage[$file][$line], $newData->lineCoverage[$file][$line])); - } - } - } - foreach ($newData->functionCoverage as $file => $functions) { - if (!isset($this->functionCoverage[$file])) { - $this->functionCoverage[$file] = $functions; - continue; - } - foreach ($functions as $functionName => $functionData) { - if (isset($this->functionCoverage[$file][$functionName])) { - $this->initPreviouslySeenFunction($file, $functionName, $functionData); - } else { - $this->initPreviouslyUnseenFunction($file, $functionName, $functionData); - } - foreach ($functionData['branches'] as $branchId => $branchData) { - $this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'] = array_unique(array_merge($this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'], $branchData['hit'])); - } - foreach ($functionData['paths'] as $pathId => $pathData) { - $this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'] = array_unique(array_merge($this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'], $pathData['hit'])); - } - } - } - } - /** - * Determine the priority for a line. - * - * 1 = the line is not set - * 2 = the line has not been tested - * 3 = the line is dead code - * 4 = the line has been tested - * - * During a merge, a higher number is better. - */ - private function priorityForLine(array $data, int $line): int - { - if (!array_key_exists($line, $data)) { - return 1; - } - if (is_array($data[$line]) && count($data[$line]) === 0) { - return 2; - } - if ($data[$line] === null) { - return 3; - } - return 4; - } - /** - * For a function we have never seen before, copy all data over and simply init the 'hit' array. - * - * @param XdebugFunctionCoverageType $functionData - */ - private function initPreviouslyUnseenFunction(string $file, string $functionName, array $functionData): void - { - $this->functionCoverage[$file][$functionName] = $functionData; - foreach (array_keys($functionData['branches']) as $branchId) { - $this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'] = []; - } - foreach (array_keys($functionData['paths']) as $pathId) { - $this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'] = []; - } - } - /** - * For a function we have seen before, only copy over and init the 'hit' array for any unseen branches and paths. - * Techniques such as mocking and where the contents of a file are different vary during tests (e.g. compiling - * containers) mean that the functions inside a file cannot be relied upon to be static. - * - * @param XdebugFunctionCoverageType $functionData - */ - private function initPreviouslySeenFunction(string $file, string $functionName, array $functionData): void - { - foreach ($functionData['branches'] as $branchId => $branchData) { - if (!isset($this->functionCoverage[$file][$functionName]['branches'][$branchId])) { - $this->functionCoverage[$file][$functionName]['branches'][$branchId] = $branchData; - $this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'] = []; - } - } - foreach ($functionData['paths'] as $pathId => $pathData) { - if (!isset($this->functionCoverage[$file][$functionName]['paths'][$pathId])) { - $this->functionCoverage[$file][$functionName]['paths'][$pathId] = $pathData; - $this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'] = []; - } - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Data; - -use function array_diff; -use function array_diff_key; -use function array_flip; -use function array_intersect; -use function array_intersect_key; -use function count; -use function explode; -use function file_get_contents; -use function in_array; -use function is_file; -use function preg_replace; -use function range; -use function str_ends_with; -use function str_starts_with; -use function trim; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver\Driver; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - * - * @phpstan-import-type XdebugFunctionsCoverageType from \SebastianBergmann\CodeCoverage\Driver\XdebugDriver - * @phpstan-import-type XdebugCodeCoverageWithoutPathCoverageType from \SebastianBergmann\CodeCoverage\Driver\XdebugDriver - * @phpstan-import-type XdebugCodeCoverageWithPathCoverageType from \SebastianBergmann\CodeCoverage\Driver\XdebugDriver - */ -final class RawCodeCoverageData -{ - /** - * @var array> - */ - private static array $emptyLineCache = []; - /** - * @var XdebugCodeCoverageWithoutPathCoverageType - */ - private array $lineCoverage; - /** - * @var array - */ - private array $functionCoverage; - /** - * @param XdebugCodeCoverageWithoutPathCoverageType $rawCoverage - */ - public static function fromXdebugWithoutPathCoverage(array $rawCoverage): self - { - return new self($rawCoverage, []); - } - /** - * @param XdebugCodeCoverageWithPathCoverageType $rawCoverage - */ - public static function fromXdebugWithPathCoverage(array $rawCoverage): self - { - $lineCoverage = []; - $functionCoverage = []; - foreach ($rawCoverage as $file => $fileCoverageData) { - // Xdebug annotates the function name of traits, strip that off - foreach ($fileCoverageData['functions'] as $existingKey => $data) { - if (str_ends_with($existingKey, '}') && !str_starts_with($existingKey, '{')) { - // don't want to catch {main} - $newKey = preg_replace('/\{.*}$/', '', $existingKey); - $fileCoverageData['functions'][$newKey] = $data; - unset($fileCoverageData['functions'][$existingKey]); - } - } - $lineCoverage[$file] = $fileCoverageData['lines']; - $functionCoverage[$file] = $fileCoverageData['functions']; - } - return new self($lineCoverage, $functionCoverage); - } - public static function fromUncoveredFile(string $filename, FileAnalyser $analyser): self - { - $lineCoverage = []; - foreach ($analyser->executableLinesIn($filename) as $line => $branch) { - $lineCoverage[$line] = Driver::LINE_NOT_EXECUTED; - } - return new self([$filename => $lineCoverage], []); - } - /** - * @param XdebugCodeCoverageWithoutPathCoverageType $lineCoverage - * @param array $functionCoverage - */ - private function __construct(array $lineCoverage, array $functionCoverage) - { - $this->lineCoverage = $lineCoverage; - $this->functionCoverage = $functionCoverage; - $this->skipEmptyLines(); - } - public function clear(): void - { - $this->lineCoverage = $this->functionCoverage = []; - } - /** - * @return XdebugCodeCoverageWithoutPathCoverageType - */ - public function lineCoverage(): array - { - return $this->lineCoverage; - } - /** - * @return array - */ - public function functionCoverage(): array - { - return $this->functionCoverage; - } - public function removeCoverageDataForFile(string $filename): void - { - unset($this->lineCoverage[$filename], $this->functionCoverage[$filename]); - } - /** - * @param int[] $lines - */ - public function keepLineCoverageDataOnlyForLines(string $filename, array $lines): void - { - if (!isset($this->lineCoverage[$filename])) { - return; - } - $this->lineCoverage[$filename] = array_intersect_key($this->lineCoverage[$filename], array_flip($lines)); - } - /** - * @param int[] $linesToBranchMap - */ - public function markExecutableLineByBranch(string $filename, array $linesToBranchMap): void - { - if (!isset($this->lineCoverage[$filename])) { - return; - } - $linesByBranch = []; - foreach ($linesToBranchMap as $line => $branch) { - $linesByBranch[$branch][] = $line; - } - foreach ($this->lineCoverage[$filename] as $line => $lineStatus) { - if (!isset($linesToBranchMap[$line])) { - continue; - } - $branch = $linesToBranchMap[$line]; - if (!isset($linesByBranch[$branch])) { - continue; - } - foreach ($linesByBranch[$branch] as $lineInBranch) { - $this->lineCoverage[$filename][$lineInBranch] = $lineStatus; - } - if (Driver::LINE_EXECUTED === $lineStatus) { - unset($linesByBranch[$branch]); - } - } - } - /** - * @param int[] $lines - */ - public function keepFunctionCoverageDataOnlyForLines(string $filename, array $lines): void - { - if (!isset($this->functionCoverage[$filename])) { - return; - } - foreach ($this->functionCoverage[$filename] as $functionName => $functionData) { - foreach ($functionData['branches'] as $branchId => $branch) { - if (count(array_diff(range($branch['line_start'], $branch['line_end']), $lines)) > 0) { - unset($this->functionCoverage[$filename][$functionName]['branches'][$branchId]); - foreach ($functionData['paths'] as $pathId => $path) { - if (in_array($branchId, $path['path'], \true)) { - unset($this->functionCoverage[$filename][$functionName]['paths'][$pathId]); - } - } - } - } - } - } - /** - * @param int[] $lines - */ - public function removeCoverageDataForLines(string $filename, array $lines): void - { - if (empty($lines)) { - return; - } - if (!isset($this->lineCoverage[$filename])) { - return; - } - $this->lineCoverage[$filename] = array_diff_key($this->lineCoverage[$filename], array_flip($lines)); - if (isset($this->functionCoverage[$filename])) { - foreach ($this->functionCoverage[$filename] as $functionName => $functionData) { - foreach ($functionData['branches'] as $branchId => $branch) { - if (count(array_intersect($lines, range($branch['line_start'], $branch['line_end']))) > 0) { - unset($this->functionCoverage[$filename][$functionName]['branches'][$branchId]); - foreach ($functionData['paths'] as $pathId => $path) { - if (in_array($branchId, $path['path'], \true)) { - unset($this->functionCoverage[$filename][$functionName]['paths'][$pathId]); - } - } - } - } - } - } - } - /** - * At the end of a file, the PHP interpreter always sees an implicit return. Where this occurs in a file that has - * e.g. a class definition, that line cannot be invoked from a test and results in confusing coverage. This engine - * implementation detail therefore needs to be masked which is done here by simply ensuring that all empty lines - * are skipped over for coverage purposes. - * - * @see https://github.com/sebastianbergmann/php-code-coverage/issues/799 - */ - private function skipEmptyLines(): void - { - foreach ($this->lineCoverage as $filename => $coverage) { - foreach ($this->getEmptyLinesForFile($filename) as $emptyLine) { - unset($this->lineCoverage[$filename][$emptyLine]); - } - } - } - private function getEmptyLinesForFile(string $filename): array - { - if (!isset(self::$emptyLineCache[$filename])) { - self::$emptyLineCache[$filename] = []; - if (is_file($filename)) { - $sourceLines = explode("\n", file_get_contents($filename)); - foreach ($sourceLines as $line => $source) { - if (trim($source) === '') { - self::$emptyLineCache[$filename][] = $line + 1; - } - } - } - } - return self::$emptyLineCache[$filename]; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver; - -use function sprintf; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\BranchAndPathCoverageNotSupportedException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\DeadCodeDetectionNotSupportedException; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -abstract class Driver -{ - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const LINE_NOT_EXECUTABLE = -2; - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const LINE_NOT_EXECUTED = -1; - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const LINE_EXECUTED = 1; - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const BRANCH_NOT_HIT = 0; - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const BRANCH_HIT = 1; - private bool $collectBranchAndPathCoverage = \false; - private bool $detectDeadCode = \false; - public function canCollectBranchAndPathCoverage(): bool - { - return \false; - } - public function collectsBranchAndPathCoverage(): bool - { - return $this->collectBranchAndPathCoverage; - } - /** - * @throws BranchAndPathCoverageNotSupportedException - */ - public function enableBranchAndPathCoverage(): void - { - if (!$this->canCollectBranchAndPathCoverage()) { - throw new BranchAndPathCoverageNotSupportedException(sprintf('%s does not support branch and path coverage', $this->nameAndVersion())); - } - $this->collectBranchAndPathCoverage = \true; - } - public function disableBranchAndPathCoverage(): void - { - $this->collectBranchAndPathCoverage = \false; - } - public function canDetectDeadCode(): bool - { - return \false; - } - public function detectsDeadCode(): bool - { - return $this->detectDeadCode; - } - /** - * @throws DeadCodeDetectionNotSupportedException - */ - public function enableDeadCodeDetection(): void - { - if (!$this->canDetectDeadCode()) { - throw new DeadCodeDetectionNotSupportedException(sprintf('%s does not support dead code detection', $this->nameAndVersion())); - } - $this->detectDeadCode = \true; - } - public function disableDeadCodeDetection(): void - { - $this->detectDeadCode = \false; - } - abstract public function nameAndVersion(): string; - abstract public function start(): void; - abstract public function stop(): RawCodeCoverageData; -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver; - -use const pcov\inclusive; -use function array_intersect; -use function extension_loaded; -use function pcov\clear; -use function pcov\collect; -use function pcov\start; -use function pcov\stop; -use function pcov\waiting; -use function phpversion; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Filter; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class PcovDriver extends Driver -{ - private readonly Filter $filter; - /** - * @throws PcovNotAvailableException - */ - public function __construct(Filter $filter) - { - $this->ensurePcovIsAvailable(); - $this->filter = $filter; - } - public function start(): void - { - start(); - } - public function stop(): RawCodeCoverageData - { - stop(); - $filesToCollectCoverageFor = waiting(); - $collected = []; - if ($filesToCollectCoverageFor) { - if (!$this->filter->isEmpty()) { - $filesToCollectCoverageFor = array_intersect($filesToCollectCoverageFor, $this->filter->files()); - } - $collected = collect(inclusive, $filesToCollectCoverageFor); - clear(); - } - return RawCodeCoverageData::fromXdebugWithoutPathCoverage($collected); - } - public function nameAndVersion(): string - { - return 'PCOV ' . phpversion('pcov'); - } - /** - * @throws PcovNotAvailableException - */ - private function ensurePcovIsAvailable(): void - { - if (!extension_loaded('pcov')) { - throw new PcovNotAvailableException(); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver; - -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Filter; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\NoCodeCoverageDriverAvailableException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\NoCodeCoverageDriverWithPathCoverageSupportAvailableException; -use PHPUnitPHAR\SebastianBergmann\Environment\Runtime; -final class Selector -{ - /** - * @throws NoCodeCoverageDriverAvailableException - * @throws PcovNotAvailableException - * @throws XdebugNotAvailableException - * @throws XdebugNotEnabledException - */ - public function forLineCoverage(Filter $filter): Driver - { - $runtime = new Runtime(); - if ($runtime->hasPCOV()) { - return new PcovDriver($filter); - } - if ($runtime->hasXdebug()) { - $driver = new XdebugDriver($filter); - $driver->enableDeadCodeDetection(); - return $driver; - } - throw new NoCodeCoverageDriverAvailableException(); - } - /** - * @throws NoCodeCoverageDriverWithPathCoverageSupportAvailableException - * @throws XdebugNotAvailableException - * @throws XdebugNotEnabledException - */ - public function forLineAndPathCoverage(Filter $filter): Driver - { - if ((new Runtime())->hasXdebug()) { - $driver = new XdebugDriver($filter); - $driver->enableDeadCodeDetection(); - $driver->enableBranchAndPathCoverage(); - return $driver; - } - throw new NoCodeCoverageDriverWithPathCoverageSupportAvailableException(); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver; - -use const XDEBUG_CC_BRANCH_CHECK; -use const XDEBUG_CC_DEAD_CODE; -use const XDEBUG_CC_UNUSED; -use const XDEBUG_FILTER_CODE_COVERAGE; -use const XDEBUG_PATH_INCLUDE; -use function explode; -use function extension_loaded; -use function getenv; -use function in_array; -use function ini_get; -use function phpversion; -use function version_compare; -use function xdebug_get_code_coverage; -use function xdebug_info; -use function xdebug_set_filter; -use function xdebug_start_code_coverage; -use function xdebug_stop_code_coverage; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Filter; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - * - * @see https://xdebug.org/docs/code_coverage#xdebug_get_code_coverage - * - * @phpstan-type XdebugLinesCoverageType = array - * @phpstan-type XdebugBranchCoverageType = array{ - * op_start: int, - * op_end: int, - * line_start: int, - * line_end: int, - * hit: int, - * out: array, - * out_hit: array, - * } - * @phpstan-type XdebugPathCoverageType = array{ - * path: array, - * hit: int, - * } - * @phpstan-type XdebugFunctionCoverageType = array{ - * branches: array, - * paths: array, - * } - * @phpstan-type XdebugFunctionsCoverageType = array - * @phpstan-type XdebugPathAndBranchesCoverageType = array{ - * lines: XdebugLinesCoverageType, - * functions: XdebugFunctionsCoverageType, - * } - * @phpstan-type XdebugCodeCoverageWithoutPathCoverageType = array - * @phpstan-type XdebugCodeCoverageWithPathCoverageType = array - */ -final class XdebugDriver extends Driver -{ - /** - * @throws XdebugNotAvailableException - * @throws XdebugNotEnabledException - */ - public function __construct(Filter $filter) - { - $this->ensureXdebugIsAvailable(); - $this->ensureXdebugCodeCoverageFeatureIsEnabled(); - if (!$filter->isEmpty()) { - xdebug_set_filter(XDEBUG_FILTER_CODE_COVERAGE, XDEBUG_PATH_INCLUDE, $filter->files()); - } - } - public function canCollectBranchAndPathCoverage(): bool - { - return \true; - } - public function canDetectDeadCode(): bool - { - return \true; - } - public function start(): void - { - $flags = XDEBUG_CC_UNUSED; - if ($this->detectsDeadCode() || $this->collectsBranchAndPathCoverage()) { - $flags |= XDEBUG_CC_DEAD_CODE; - } - if ($this->collectsBranchAndPathCoverage()) { - $flags |= XDEBUG_CC_BRANCH_CHECK; - } - xdebug_start_code_coverage($flags); - } - public function stop(): RawCodeCoverageData - { - $data = xdebug_get_code_coverage(); - xdebug_stop_code_coverage(); - if ($this->collectsBranchAndPathCoverage()) { - /* @var XdebugCodeCoverageWithPathCoverageType $data */ - return RawCodeCoverageData::fromXdebugWithPathCoverage($data); - } - /* @var XdebugCodeCoverageWithoutPathCoverageType $data */ - return RawCodeCoverageData::fromXdebugWithoutPathCoverage($data); - } - public function nameAndVersion(): string - { - return 'Xdebug ' . phpversion('xdebug'); - } - /** - * @throws XdebugNotAvailableException - */ - private function ensureXdebugIsAvailable(): void - { - if (!extension_loaded('xdebug')) { - throw new XdebugNotAvailableException(); - } - } - /** - * @throws XdebugNotEnabledException - */ - private function ensureXdebugCodeCoverageFeatureIsEnabled(): void - { - if (version_compare(phpversion('xdebug'), '3.1', '>=')) { - if (!in_array('coverage', xdebug_info('mode'), \true)) { - throw new XdebugNotEnabledException(); - } - return; - } - $mode = getenv('XDEBUG_MODE'); - if ($mode === \false || $mode === '') { - $mode = ini_get('xdebug.mode'); - } - if ($mode === \false || !in_array('coverage', explode(',', $mode), \true)) { - throw new XdebugNotEnabledException(); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class BranchAndPathCoverageNotSupportedException extends RuntimeException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class DeadCodeDetectionNotSupportedException extends RuntimeException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Util; - -use RuntimeException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Exception; -final class DirectoryCouldNotBeCreatedException extends RuntimeException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use Throwable; -interface Exception extends Throwable -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class FileCouldNotBeWrittenException extends RuntimeException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -final class InvalidArgumentException extends \InvalidArgumentException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class NoCodeCoverageDriverAvailableException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('No code coverage driver available'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class NoCodeCoverageDriverWithPathCoverageSupportAvailableException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('No code coverage driver with path coverage support available'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class ParserException extends RuntimeException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver; - -use function sprintf; -use RuntimeException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Exception; -final class PathExistsButIsNotDirectoryException extends RuntimeException implements Exception -{ - public function __construct(string $path) - { - parent::__construct(sprintf('"%s" exists but is not a directory', $path)); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver; - -use RuntimeException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Exception; -final class PcovNotAvailableException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('The PCOV extension is not available'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class ReflectionException extends RuntimeException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class ReportAlreadyFinalizedException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('The code coverage report has already been finalized'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class StaticAnalysisCacheNotConfiguredException extends RuntimeException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class TestIdMissingException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('Test ID is missing'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class UnintentionallyCoveredCodeException extends RuntimeException implements Exception -{ - /** - * @var list - */ - private readonly array $unintentionallyCoveredUnits; - /** - * @param list $unintentionallyCoveredUnits - */ - public function __construct(array $unintentionallyCoveredUnits) - { - $this->unintentionallyCoveredUnits = $unintentionallyCoveredUnits; - parent::__construct($this->toString()); - } - /** - * @return list - */ - public function getUnintentionallyCoveredUnits(): array - { - return $this->unintentionallyCoveredUnits; - } - private function toString(): string - { - $message = ''; - foreach ($this->unintentionallyCoveredUnits as $unit) { - $message .= '- ' . $unit . "\n"; - } - return $message; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver; - -use function sprintf; -use RuntimeException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Exception; -final class WriteOperationFailedException extends RuntimeException implements Exception -{ - public function __construct(string $path) - { - parent::__construct(sprintf('Cannot write to "%s"', $path)); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver; - -use RuntimeException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Exception; -final class XdebugNotAvailableException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('The Xdebug extension is not available'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver; - -use RuntimeException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Exception; -final class XdebugNotEnabledException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('XDEBUG_MODE=coverage (environment variable) or xdebug.mode=coverage (PHP configuration setting) has to be set'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use RuntimeException; -final class XmlException extends RuntimeException implements Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage; - -use function array_keys; -use function is_file; -use function realpath; -use function str_contains; -use function str_starts_with; -final class Filter -{ - /** - * @var array - */ - private array $files = []; - /** - * @var array - */ - private array $isFileCache = []; - /** - * @param list $filenames - */ - public function includeFiles(array $filenames): void - { - foreach ($filenames as $filename) { - $this->includeFile($filename); - } - } - public function includeFile(string $filename): void - { - $filename = realpath($filename); - if (!$filename) { - return; - } - $this->files[$filename] = \true; - } - public function isFile(string $filename): bool - { - if (isset($this->isFileCache[$filename])) { - return $this->isFileCache[$filename]; - } - if ($filename === '-' || str_starts_with($filename, 'vfs://') || str_contains($filename, 'xdebug://debug-eval') || str_contains($filename, 'eval()\'d code') || str_contains($filename, 'runtime-created function') || str_contains($filename, 'runkit created function') || str_contains($filename, 'assert code') || str_contains($filename, 'regexp code') || str_contains($filename, 'Standard input code')) { - $isFile = \false; - } else { - $isFile = is_file($filename); - } - $this->isFileCache[$filename] = $isFile; - return $isFile; - } - public function isExcluded(string $filename): bool - { - return !isset($this->files[$filename]) || !$this->isFile($filename); - } - /** - * @return list - */ - public function files(): array - { - return array_keys($this->files); - } - public function isEmpty(): bool - { - return empty($this->files); - } -} -BSD 3-Clause License - -Copyright (c) 2009-2024, Sebastian Bergmann -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node; - -use const DIRECTORY_SEPARATOR; -use function array_merge; -use function str_ends_with; -use function str_replace; -use function substr; -use Countable; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Util\Percentage; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - * - * @phpstan-import-type LinesOfCodeType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser - * @phpstan-import-type ProcessedFunctionType from \SebastianBergmann\CodeCoverage\Node\File - * @phpstan-import-type ProcessedClassType from \SebastianBergmann\CodeCoverage\Node\File - * @phpstan-import-type ProcessedTraitType from \SebastianBergmann\CodeCoverage\Node\File - */ -abstract class AbstractNode implements Countable -{ - private readonly string $name; - private string $pathAsString; - private array $pathAsArray; - private readonly ?AbstractNode $parent; - private string $id; - public function __construct(string $name, ?self $parent = null) - { - if (str_ends_with($name, DIRECTORY_SEPARATOR)) { - $name = substr($name, 0, -1); - } - $this->name = $name; - $this->parent = $parent; - $this->processId(); - $this->processPath(); - } - public function name(): string - { - return $this->name; - } - public function id(): string - { - return $this->id; - } - public function pathAsString(): string - { - return $this->pathAsString; - } - public function pathAsArray(): array - { - return $this->pathAsArray; - } - public function parent(): ?self - { - return $this->parent; - } - public function percentageOfTestedClasses(): Percentage - { - return Percentage::fromFractionAndTotal($this->numberOfTestedClasses(), $this->numberOfClasses()); - } - public function percentageOfTestedTraits(): Percentage - { - return Percentage::fromFractionAndTotal($this->numberOfTestedTraits(), $this->numberOfTraits()); - } - public function percentageOfTestedClassesAndTraits(): Percentage - { - return Percentage::fromFractionAndTotal($this->numberOfTestedClassesAndTraits(), $this->numberOfClassesAndTraits()); - } - public function percentageOfTestedFunctions(): Percentage - { - return Percentage::fromFractionAndTotal($this->numberOfTestedFunctions(), $this->numberOfFunctions()); - } - public function percentageOfTestedMethods(): Percentage - { - return Percentage::fromFractionAndTotal($this->numberOfTestedMethods(), $this->numberOfMethods()); - } - public function percentageOfTestedFunctionsAndMethods(): Percentage - { - return Percentage::fromFractionAndTotal($this->numberOfTestedFunctionsAndMethods(), $this->numberOfFunctionsAndMethods()); - } - public function percentageOfExecutedLines(): Percentage - { - return Percentage::fromFractionAndTotal($this->numberOfExecutedLines(), $this->numberOfExecutableLines()); - } - public function percentageOfExecutedBranches(): Percentage - { - return Percentage::fromFractionAndTotal($this->numberOfExecutedBranches(), $this->numberOfExecutableBranches()); - } - public function percentageOfExecutedPaths(): Percentage - { - return Percentage::fromFractionAndTotal($this->numberOfExecutedPaths(), $this->numberOfExecutablePaths()); - } - public function numberOfClassesAndTraits(): int - { - return $this->numberOfClasses() + $this->numberOfTraits(); - } - public function numberOfTestedClassesAndTraits(): int - { - return $this->numberOfTestedClasses() + $this->numberOfTestedTraits(); - } - /** - * @return array - */ - public function classesAndTraits(): array - { - return array_merge($this->classes(), $this->traits()); - } - public function numberOfFunctionsAndMethods(): int - { - return $this->numberOfFunctions() + $this->numberOfMethods(); - } - public function numberOfTestedFunctionsAndMethods(): int - { - return $this->numberOfTestedFunctions() + $this->numberOfTestedMethods(); - } - /** - * @return array - */ - abstract public function classes(): array; - /** - * @return array - */ - abstract public function traits(): array; - /** - * @return array - */ - abstract public function functions(): array; - /** - * @return LinesOfCodeType - */ - abstract public function linesOfCode(): array; - abstract public function numberOfExecutableLines(): int; - abstract public function numberOfExecutedLines(): int; - abstract public function numberOfExecutableBranches(): int; - abstract public function numberOfExecutedBranches(): int; - abstract public function numberOfExecutablePaths(): int; - abstract public function numberOfExecutedPaths(): int; - abstract public function numberOfClasses(): int; - abstract public function numberOfTestedClasses(): int; - abstract public function numberOfTraits(): int; - abstract public function numberOfTestedTraits(): int; - abstract public function numberOfMethods(): int; - abstract public function numberOfTestedMethods(): int; - abstract public function numberOfFunctions(): int; - abstract public function numberOfTestedFunctions(): int; - private function processId(): void - { - if ($this->parent === null) { - $this->id = 'index'; - return; - } - $parentId = $this->parent->id(); - if ($parentId === 'index') { - $this->id = str_replace(':', '_', $this->name); - } else { - $this->id = $parentId . '/' . $this->name; - } - } - private function processPath(): void - { - if ($this->parent === null) { - $this->pathAsArray = [$this]; - $this->pathAsString = $this->name; - return; - } - $this->pathAsArray = $this->parent->pathAsArray(); - $this->pathAsString = $this->parent->pathAsString() . DIRECTORY_SEPARATOR . $this->name; - $this->pathAsArray[] = $this; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node; - -use const DIRECTORY_SEPARATOR; -use function array_shift; -use function basename; -use function count; -use function dirname; -use function explode; -use function implode; -use function is_file; -use function str_ends_with; -use function str_replace; -use function str_starts_with; -use function substr; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\CodeCoverage; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Data\ProcessedCodeCoverageData; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - * - * @phpstan-import-type TestType from \SebastianBergmann\CodeCoverage\CodeCoverage - */ -final class Builder -{ - private readonly FileAnalyser $analyser; - public function __construct(FileAnalyser $analyser) - { - $this->analyser = $analyser; - } - public function build(CodeCoverage $coverage): Directory - { - $data = clone $coverage->getData(); - // clone because path munging is destructive to the original data - $commonPath = $this->reducePaths($data); - $root = new Directory($commonPath, null); - $this->addItems($root, $this->buildDirectoryStructure($data), $coverage->getTests()); - return $root; - } - /** - * @param array $tests - */ - private function addItems(Directory $root, array $items, array $tests): void - { - foreach ($items as $key => $value) { - $key = (string) $key; - if (str_ends_with($key, '/f')) { - $key = substr($key, 0, -2); - $filename = $root->pathAsString() . DIRECTORY_SEPARATOR . $key; - if (is_file($filename)) { - $root->addFile(new File($key, $root, $value['lineCoverage'], $value['functionCoverage'], $tests, $this->analyser->classesIn($filename), $this->analyser->traitsIn($filename), $this->analyser->functionsIn($filename), $this->analyser->linesOfCodeFor($filename))); - } - } else { - $child = $root->addDirectory($key); - $this->addItems($child, $value, $tests); - } - } - } - /** - * Builds an array representation of the directory structure. - * - * For instance, - * - * - * Array - * ( - * [Money.php] => Array - * ( - * ... - * ) - * - * [MoneyBag.php] => Array - * ( - * ... - * ) - * ) - * - * - * is transformed into - * - * - * Array - * ( - * [.] => Array - * ( - * [Money.php] => Array - * ( - * ... - * ) - * - * [MoneyBag.php] => Array - * ( - * ... - * ) - * ) - * ) - * - * - * @return array, functionCoverage: array>}>> - */ - private function buildDirectoryStructure(ProcessedCodeCoverageData $data): array - { - $result = []; - foreach ($data->coveredFiles() as $originalPath) { - $path = explode(DIRECTORY_SEPARATOR, $originalPath); - $pointer =& $result; - $max = count($path); - for ($i = 0; $i < $max; $i++) { - $type = ''; - if ($i === $max - 1) { - $type = '/f'; - } - $pointer =& $pointer[$path[$i] . $type]; - } - $pointer = ['lineCoverage' => $data->lineCoverage()[$originalPath] ?? [], 'functionCoverage' => $data->functionCoverage()[$originalPath] ?? []]; - } - return $result; - } - /** - * Reduces the paths by cutting the longest common start path. - * - * For instance, - * - * - * Array - * ( - * [/home/sb/Money/Money.php] => Array - * ( - * ... - * ) - * - * [/home/sb/Money/MoneyBag.php] => Array - * ( - * ... - * ) - * ) - * - * - * is reduced to - * - * - * Array - * ( - * [Money.php] => Array - * ( - * ... - * ) - * - * [MoneyBag.php] => Array - * ( - * ... - * ) - * ) - * - */ - private function reducePaths(ProcessedCodeCoverageData $coverage): string - { - if (empty($coverage->coveredFiles())) { - return '.'; - } - $commonPath = ''; - $paths = $coverage->coveredFiles(); - if (count($paths) === 1) { - $commonPath = dirname($paths[0]) . DIRECTORY_SEPARATOR; - $coverage->renameFile($paths[0], basename($paths[0])); - return $commonPath; - } - $max = count($paths); - for ($i = 0; $i < $max; $i++) { - // strip phar:// prefixes - if (str_starts_with($paths[$i], 'phar://')) { - $paths[$i] = substr($paths[$i], 7); - $paths[$i] = str_replace('/', DIRECTORY_SEPARATOR, $paths[$i]); - } - $paths[$i] = explode(DIRECTORY_SEPARATOR, $paths[$i]); - if (empty($paths[$i][0])) { - $paths[$i][0] = DIRECTORY_SEPARATOR; - } - } - $done = \false; - $max = count($paths); - while (!$done) { - for ($i = 0; $i < $max - 1; $i++) { - if (!isset($paths[$i][0]) || !isset($paths[$i + 1][0]) || $paths[$i][0] !== $paths[$i + 1][0]) { - $done = \true; - break; - } - } - if (!$done) { - $commonPath .= $paths[0][0]; - if ($paths[0][0] !== DIRECTORY_SEPARATOR) { - $commonPath .= DIRECTORY_SEPARATOR; - } - for ($i = 0; $i < $max; $i++) { - array_shift($paths[$i]); - } - } - } - $original = $coverage->coveredFiles(); - $max = count($original); - for ($i = 0; $i < $max; $i++) { - $coverage->renameFile($original[$i], implode(DIRECTORY_SEPARATOR, $paths[$i])); - } - return substr($commonPath, 0, -1); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node; - -use function sprintf; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class CrapIndex -{ - private readonly int $cyclomaticComplexity; - private readonly float $codeCoverage; - public function __construct(int $cyclomaticComplexity, float $codeCoverage) - { - $this->cyclomaticComplexity = $cyclomaticComplexity; - $this->codeCoverage = $codeCoverage; - } - public function asString(): string - { - if ($this->codeCoverage === 0.0) { - return (string) ($this->cyclomaticComplexity ** 2 + $this->cyclomaticComplexity); - } - if ($this->codeCoverage >= 95) { - return (string) $this->cyclomaticComplexity; - } - return sprintf('%01.2F', $this->cyclomaticComplexity ** 2 * (1 - $this->codeCoverage / 100) ** 3 + $this->cyclomaticComplexity); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node; - -use function array_merge; -use function assert; -use function count; -use IteratorAggregate; -use RecursiveIteratorIterator; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - * - * @phpstan-import-type LinesOfCodeType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser - */ -final class Directory extends AbstractNode implements IteratorAggregate -{ - /** - * @var list - */ - private array $children = []; - /** - * @var list - */ - private array $directories = []; - /** - * @var list - */ - private array $files = []; - private ?array $classes = null; - private ?array $traits = null; - private ?array $functions = null; - /** - * @var null|LinesOfCodeType - */ - private ?array $linesOfCode = null; - private int $numFiles = -1; - private int $numExecutableLines = -1; - private int $numExecutedLines = -1; - private int $numExecutableBranches = -1; - private int $numExecutedBranches = -1; - private int $numExecutablePaths = -1; - private int $numExecutedPaths = -1; - private int $numClasses = -1; - private int $numTestedClasses = -1; - private int $numTraits = -1; - private int $numTestedTraits = -1; - private int $numMethods = -1; - private int $numTestedMethods = -1; - private int $numFunctions = -1; - private int $numTestedFunctions = -1; - public function count(): int - { - if ($this->numFiles === -1) { - $this->numFiles = 0; - foreach ($this->children as $child) { - $this->numFiles += count($child); - } - } - return $this->numFiles; - } - public function getIterator(): RecursiveIteratorIterator - { - return new RecursiveIteratorIterator(new Iterator($this), RecursiveIteratorIterator::SELF_FIRST); - } - public function addDirectory(string $name): self - { - $directory = new self($name, $this); - assert($directory instanceof self); - $this->children[] = $directory; - $this->directories[] =& $this->children[count($this->children) - 1]; - return $directory; - } - public function addFile(File $file): void - { - $this->children[] = $file; - $this->files[] =& $this->children[count($this->children) - 1]; - $this->numExecutableLines = -1; - $this->numExecutedLines = -1; - } - public function directories(): array - { - return $this->directories; - } - public function files(): array - { - return $this->files; - } - public function children(): array - { - return $this->children; - } - public function classes(): array - { - if ($this->classes === null) { - $this->classes = []; - foreach ($this->children as $child) { - $this->classes = array_merge($this->classes, $child->classes()); - } - } - return $this->classes; - } - public function traits(): array - { - if ($this->traits === null) { - $this->traits = []; - foreach ($this->children as $child) { - $this->traits = array_merge($this->traits, $child->traits()); - } - } - return $this->traits; - } - public function functions(): array - { - if ($this->functions === null) { - $this->functions = []; - foreach ($this->children as $child) { - $this->functions = array_merge($this->functions, $child->functions()); - } - } - return $this->functions; - } - /** - * @return LinesOfCodeType - */ - public function linesOfCode(): array - { - if ($this->linesOfCode === null) { - $this->linesOfCode = ['linesOfCode' => 0, 'commentLinesOfCode' => 0, 'nonCommentLinesOfCode' => 0]; - foreach ($this->children as $child) { - $childLinesOfCode = $child->linesOfCode(); - $this->linesOfCode['linesOfCode'] += $childLinesOfCode['linesOfCode']; - $this->linesOfCode['commentLinesOfCode'] += $childLinesOfCode['commentLinesOfCode']; - $this->linesOfCode['nonCommentLinesOfCode'] += $childLinesOfCode['nonCommentLinesOfCode']; - } - } - return $this->linesOfCode; - } - public function numberOfExecutableLines(): int - { - if ($this->numExecutableLines === -1) { - $this->numExecutableLines = 0; - foreach ($this->children as $child) { - $this->numExecutableLines += $child->numberOfExecutableLines(); - } - } - return $this->numExecutableLines; - } - public function numberOfExecutedLines(): int - { - if ($this->numExecutedLines === -1) { - $this->numExecutedLines = 0; - foreach ($this->children as $child) { - $this->numExecutedLines += $child->numberOfExecutedLines(); - } - } - return $this->numExecutedLines; - } - public function numberOfExecutableBranches(): int - { - if ($this->numExecutableBranches === -1) { - $this->numExecutableBranches = 0; - foreach ($this->children as $child) { - $this->numExecutableBranches += $child->numberOfExecutableBranches(); - } - } - return $this->numExecutableBranches; - } - public function numberOfExecutedBranches(): int - { - if ($this->numExecutedBranches === -1) { - $this->numExecutedBranches = 0; - foreach ($this->children as $child) { - $this->numExecutedBranches += $child->numberOfExecutedBranches(); - } - } - return $this->numExecutedBranches; - } - public function numberOfExecutablePaths(): int - { - if ($this->numExecutablePaths === -1) { - $this->numExecutablePaths = 0; - foreach ($this->children as $child) { - $this->numExecutablePaths += $child->numberOfExecutablePaths(); - } - } - return $this->numExecutablePaths; - } - public function numberOfExecutedPaths(): int - { - if ($this->numExecutedPaths === -1) { - $this->numExecutedPaths = 0; - foreach ($this->children as $child) { - $this->numExecutedPaths += $child->numberOfExecutedPaths(); - } - } - return $this->numExecutedPaths; - } - public function numberOfClasses(): int - { - if ($this->numClasses === -1) { - $this->numClasses = 0; - foreach ($this->children as $child) { - $this->numClasses += $child->numberOfClasses(); - } - } - return $this->numClasses; - } - public function numberOfTestedClasses(): int - { - if ($this->numTestedClasses === -1) { - $this->numTestedClasses = 0; - foreach ($this->children as $child) { - $this->numTestedClasses += $child->numberOfTestedClasses(); - } - } - return $this->numTestedClasses; - } - public function numberOfTraits(): int - { - if ($this->numTraits === -1) { - $this->numTraits = 0; - foreach ($this->children as $child) { - $this->numTraits += $child->numberOfTraits(); - } - } - return $this->numTraits; - } - public function numberOfTestedTraits(): int - { - if ($this->numTestedTraits === -1) { - $this->numTestedTraits = 0; - foreach ($this->children as $child) { - $this->numTestedTraits += $child->numberOfTestedTraits(); - } - } - return $this->numTestedTraits; - } - public function numberOfMethods(): int - { - if ($this->numMethods === -1) { - $this->numMethods = 0; - foreach ($this->children as $child) { - $this->numMethods += $child->numberOfMethods(); - } - } - return $this->numMethods; - } - public function numberOfTestedMethods(): int - { - if ($this->numTestedMethods === -1) { - $this->numTestedMethods = 0; - foreach ($this->children as $child) { - $this->numTestedMethods += $child->numberOfTestedMethods(); - } - } - return $this->numTestedMethods; - } - public function numberOfFunctions(): int - { - if ($this->numFunctions === -1) { - $this->numFunctions = 0; - foreach ($this->children as $child) { - $this->numFunctions += $child->numberOfFunctions(); - } - } - return $this->numFunctions; - } - public function numberOfTestedFunctions(): int - { - if ($this->numTestedFunctions === -1) { - $this->numTestedFunctions = 0; - foreach ($this->children as $child) { - $this->numTestedFunctions += $child->numberOfTestedFunctions(); - } - } - return $this->numTestedFunctions; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node; - -use function array_filter; -use function count; -use function range; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - * - * @phpstan-import-type CodeUnitFunctionType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor - * @phpstan-import-type CodeUnitMethodType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor - * @phpstan-import-type CodeUnitClassType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor - * @phpstan-import-type CodeUnitTraitType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor - * @phpstan-import-type LinesOfCodeType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser - * @phpstan-import-type LinesType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser - * - * @phpstan-type ProcessedFunctionType = array{ - * functionName: string, - * namespace: string, - * signature: string, - * startLine: int, - * endLine: int, - * executableLines: int, - * executedLines: int, - * executableBranches: int, - * executedBranches: int, - * executablePaths: int, - * executedPaths: int, - * ccn: int, - * coverage: int|float, - * crap: int|string, - * link: string - * } - * @phpstan-type ProcessedMethodType = array{ - * methodName: string, - * visibility: string, - * signature: string, - * startLine: int, - * endLine: int, - * executableLines: int, - * executedLines: int, - * executableBranches: int, - * executedBranches: int, - * executablePaths: int, - * executedPaths: int, - * ccn: int, - * coverage: float|int, - * crap: int|string, - * link: string - * } - * @phpstan-type ProcessedClassType = array{ - * className: string, - * namespace: string, - * methods: array, - * startLine: int, - * executableLines: int, - * executedLines: int, - * executableBranches: int, - * executedBranches: int, - * executablePaths: int, - * executedPaths: int, - * ccn: int, - * coverage: int|float, - * crap: int|string, - * link: string - * } - * @phpstan-type ProcessedTraitType = array{ - * traitName: string, - * namespace: string, - * methods: array, - * startLine: int, - * executableLines: int, - * executedLines: int, - * executableBranches: int, - * executedBranches: int, - * executablePaths: int, - * executedPaths: int, - * ccn: int, - * coverage: float|int, - * crap: int|string, - * link: string - * } - */ -final class File extends AbstractNode -{ - /** - * @var array> - */ - private array $lineCoverageData; - private array $functionCoverageData; - private readonly array $testData; - private int $numExecutableLines = 0; - private int $numExecutedLines = 0; - private int $numExecutableBranches = 0; - private int $numExecutedBranches = 0; - private int $numExecutablePaths = 0; - private int $numExecutedPaths = 0; - /** - * @var array - */ - private array $classes = []; - /** - * @var array - */ - private array $traits = []; - /** - * @var array - */ - private array $functions = []; - /** - * @var LinesOfCodeType - */ - private readonly array $linesOfCode; - private ?int $numClasses = null; - private int $numTestedClasses = 0; - private ?int $numTraits = null; - private int $numTestedTraits = 0; - private ?int $numMethods = null; - private ?int $numTestedMethods = null; - private ?int $numTestedFunctions = null; - /** - * @var array - */ - private array $codeUnitsByLine = []; - /** - * @param array> $lineCoverageData - * @param array $classes - * @param array $traits - * @param array $functions - * @param LinesOfCodeType $linesOfCode - */ - public function __construct(string $name, AbstractNode $parent, array $lineCoverageData, array $functionCoverageData, array $testData, array $classes, array $traits, array $functions, array $linesOfCode) - { - parent::__construct($name, $parent); - $this->lineCoverageData = $lineCoverageData; - $this->functionCoverageData = $functionCoverageData; - $this->testData = $testData; - $this->linesOfCode = $linesOfCode; - $this->calculateStatistics($classes, $traits, $functions); - } - public function count(): int - { - return 1; - } - /** - * @return array> - */ - public function lineCoverageData(): array - { - return $this->lineCoverageData; - } - public function functionCoverageData(): array - { - return $this->functionCoverageData; - } - public function testData(): array - { - return $this->testData; - } - /** - * @return array - */ - public function classes(): array - { - return $this->classes; - } - /** - * @return array - */ - public function traits(): array - { - return $this->traits; - } - /** - * @return array - */ - public function functions(): array - { - return $this->functions; - } - public function linesOfCode(): array - { - return $this->linesOfCode; - } - public function numberOfExecutableLines(): int - { - return $this->numExecutableLines; - } - public function numberOfExecutedLines(): int - { - return $this->numExecutedLines; - } - public function numberOfExecutableBranches(): int - { - return $this->numExecutableBranches; - } - public function numberOfExecutedBranches(): int - { - return $this->numExecutedBranches; - } - public function numberOfExecutablePaths(): int - { - return $this->numExecutablePaths; - } - public function numberOfExecutedPaths(): int - { - return $this->numExecutedPaths; - } - public function numberOfClasses(): int - { - if ($this->numClasses === null) { - $this->numClasses = 0; - foreach ($this->classes as $class) { - foreach ($class['methods'] as $method) { - if ($method['executableLines'] > 0) { - $this->numClasses++; - continue 2; - } - } - } - } - return $this->numClasses; - } - public function numberOfTestedClasses(): int - { - return $this->numTestedClasses; - } - public function numberOfTraits(): int - { - if ($this->numTraits === null) { - $this->numTraits = 0; - foreach ($this->traits as $trait) { - foreach ($trait['methods'] as $method) { - if ($method['executableLines'] > 0) { - $this->numTraits++; - continue 2; - } - } - } - } - return $this->numTraits; - } - public function numberOfTestedTraits(): int - { - return $this->numTestedTraits; - } - public function numberOfMethods(): int - { - if ($this->numMethods === null) { - $this->numMethods = 0; - foreach ($this->classes as $class) { - foreach ($class['methods'] as $method) { - if ($method['executableLines'] > 0) { - $this->numMethods++; - } - } - } - foreach ($this->traits as $trait) { - foreach ($trait['methods'] as $method) { - if ($method['executableLines'] > 0) { - $this->numMethods++; - } - } - } - } - return $this->numMethods; - } - public function numberOfTestedMethods(): int - { - if ($this->numTestedMethods === null) { - $this->numTestedMethods = 0; - foreach ($this->classes as $class) { - foreach ($class['methods'] as $method) { - if ($method['executableLines'] > 0 && $method['coverage'] === 100) { - $this->numTestedMethods++; - } - } - } - foreach ($this->traits as $trait) { - foreach ($trait['methods'] as $method) { - if ($method['executableLines'] > 0 && $method['coverage'] === 100) { - $this->numTestedMethods++; - } - } - } - } - return $this->numTestedMethods; - } - public function numberOfFunctions(): int - { - return count($this->functions); - } - public function numberOfTestedFunctions(): int - { - if ($this->numTestedFunctions === null) { - $this->numTestedFunctions = 0; - foreach ($this->functions as $function) { - if ($function['executableLines'] > 0 && $function['coverage'] === 100) { - $this->numTestedFunctions++; - } - } - } - return $this->numTestedFunctions; - } - /** - * @param array $classes - * @param array $traits - * @param array $functions - */ - private function calculateStatistics(array $classes, array $traits, array $functions): void - { - foreach (range(1, $this->linesOfCode['linesOfCode']) as $lineNumber) { - $this->codeUnitsByLine[$lineNumber] = []; - } - $this->processClasses($classes); - $this->processTraits($traits); - $this->processFunctions($functions); - foreach (range(1, $this->linesOfCode['linesOfCode']) as $lineNumber) { - if (isset($this->lineCoverageData[$lineNumber])) { - foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) { - $codeUnit['executableLines']++; - } - unset($codeUnit); - $this->numExecutableLines++; - if (count($this->lineCoverageData[$lineNumber]) > 0) { - foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) { - $codeUnit['executedLines']++; - } - unset($codeUnit); - $this->numExecutedLines++; - } - } - } - foreach ($this->traits as &$trait) { - foreach ($trait['methods'] as &$method) { - $methodLineCoverage = $method['executableLines'] ? $method['executedLines'] / $method['executableLines'] * 100 : 100; - $methodBranchCoverage = $method['executableBranches'] ? $method['executedBranches'] / $method['executableBranches'] * 100 : 0; - $methodPathCoverage = $method['executablePaths'] ? $method['executedPaths'] / $method['executablePaths'] * 100 : 0; - $method['coverage'] = $methodBranchCoverage ?: $methodLineCoverage; - $method['crap'] = (new CrapIndex($method['ccn'], $methodPathCoverage ?: $methodLineCoverage))->asString(); - $trait['ccn'] += $method['ccn']; - } - unset($method); - $traitLineCoverage = $trait['executableLines'] ? $trait['executedLines'] / $trait['executableLines'] * 100 : 100; - $traitBranchCoverage = $trait['executableBranches'] ? $trait['executedBranches'] / $trait['executableBranches'] * 100 : 0; - $traitPathCoverage = $trait['executablePaths'] ? $trait['executedPaths'] / $trait['executablePaths'] * 100 : 0; - $trait['coverage'] = $traitBranchCoverage ?: $traitLineCoverage; - $trait['crap'] = (new CrapIndex($trait['ccn'], $traitPathCoverage ?: $traitLineCoverage))->asString(); - if ($trait['executableLines'] > 0 && $trait['coverage'] === 100) { - $this->numTestedClasses++; - } - } - unset($trait); - foreach ($this->classes as &$class) { - foreach ($class['methods'] as &$method) { - $methodLineCoverage = $method['executableLines'] ? $method['executedLines'] / $method['executableLines'] * 100 : 100; - $methodBranchCoverage = $method['executableBranches'] ? $method['executedBranches'] / $method['executableBranches'] * 100 : 0; - $methodPathCoverage = $method['executablePaths'] ? $method['executedPaths'] / $method['executablePaths'] * 100 : 0; - $method['coverage'] = $methodBranchCoverage ?: $methodLineCoverage; - $method['crap'] = (new CrapIndex($method['ccn'], $methodPathCoverage ?: $methodLineCoverage))->asString(); - $class['ccn'] += $method['ccn']; - } - unset($method); - $classLineCoverage = $class['executableLines'] ? $class['executedLines'] / $class['executableLines'] * 100 : 100; - $classBranchCoverage = $class['executableBranches'] ? $class['executedBranches'] / $class['executableBranches'] * 100 : 0; - $classPathCoverage = $class['executablePaths'] ? $class['executedPaths'] / $class['executablePaths'] * 100 : 0; - $class['coverage'] = $classBranchCoverage ?: $classLineCoverage; - $class['crap'] = (new CrapIndex($class['ccn'], $classPathCoverage ?: $classLineCoverage))->asString(); - if ($class['executableLines'] > 0 && $class['coverage'] === 100) { - $this->numTestedClasses++; - } - } - unset($class); - foreach ($this->functions as &$function) { - $functionLineCoverage = $function['executableLines'] ? $function['executedLines'] / $function['executableLines'] * 100 : 100; - $functionBranchCoverage = $function['executableBranches'] ? $function['executedBranches'] / $function['executableBranches'] * 100 : 0; - $functionPathCoverage = $function['executablePaths'] ? $function['executedPaths'] / $function['executablePaths'] * 100 : 0; - $function['coverage'] = $functionBranchCoverage ?: $functionLineCoverage; - $function['crap'] = (new CrapIndex($function['ccn'], $functionPathCoverage ?: $functionLineCoverage))->asString(); - if ($function['coverage'] === 100) { - $this->numTestedFunctions++; - } - } - } - /** - * @param array $classes - */ - private function processClasses(array $classes): void - { - $link = $this->id() . '.html#'; - foreach ($classes as $className => $class) { - $this->classes[$className] = ['className' => $className, 'namespace' => $class['namespace'], 'methods' => [], 'startLine' => $class['startLine'], 'executableLines' => 0, 'executedLines' => 0, 'executableBranches' => 0, 'executedBranches' => 0, 'executablePaths' => 0, 'executedPaths' => 0, 'ccn' => 0, 'coverage' => 0, 'crap' => 0, 'link' => $link . $class['startLine']]; - foreach ($class['methods'] as $methodName => $method) { - $methodData = $this->newMethod($className, $methodName, $method, $link); - $this->classes[$className]['methods'][$methodName] = $methodData; - $this->classes[$className]['executableBranches'] += $methodData['executableBranches']; - $this->classes[$className]['executedBranches'] += $methodData['executedBranches']; - $this->classes[$className]['executablePaths'] += $methodData['executablePaths']; - $this->classes[$className]['executedPaths'] += $methodData['executedPaths']; - $this->numExecutableBranches += $methodData['executableBranches']; - $this->numExecutedBranches += $methodData['executedBranches']; - $this->numExecutablePaths += $methodData['executablePaths']; - $this->numExecutedPaths += $methodData['executedPaths']; - foreach (range($method['startLine'], $method['endLine']) as $lineNumber) { - $this->codeUnitsByLine[$lineNumber] = [&$this->classes[$className], &$this->classes[$className]['methods'][$methodName]]; - } - } - } - } - /** - * @param array $traits - */ - private function processTraits(array $traits): void - { - $link = $this->id() . '.html#'; - foreach ($traits as $traitName => $trait) { - $this->traits[$traitName] = ['traitName' => $traitName, 'namespace' => $trait['namespace'], 'methods' => [], 'startLine' => $trait['startLine'], 'executableLines' => 0, 'executedLines' => 0, 'executableBranches' => 0, 'executedBranches' => 0, 'executablePaths' => 0, 'executedPaths' => 0, 'ccn' => 0, 'coverage' => 0, 'crap' => 0, 'link' => $link . $trait['startLine']]; - foreach ($trait['methods'] as $methodName => $method) { - $methodData = $this->newMethod($traitName, $methodName, $method, $link); - $this->traits[$traitName]['methods'][$methodName] = $methodData; - $this->traits[$traitName]['executableBranches'] += $methodData['executableBranches']; - $this->traits[$traitName]['executedBranches'] += $methodData['executedBranches']; - $this->traits[$traitName]['executablePaths'] += $methodData['executablePaths']; - $this->traits[$traitName]['executedPaths'] += $methodData['executedPaths']; - $this->numExecutableBranches += $methodData['executableBranches']; - $this->numExecutedBranches += $methodData['executedBranches']; - $this->numExecutablePaths += $methodData['executablePaths']; - $this->numExecutedPaths += $methodData['executedPaths']; - foreach (range($method['startLine'], $method['endLine']) as $lineNumber) { - $this->codeUnitsByLine[$lineNumber] = [&$this->traits[$traitName], &$this->traits[$traitName]['methods'][$methodName]]; - } - } - } - } - /** - * @param array $functions - */ - private function processFunctions(array $functions): void - { - $link = $this->id() . '.html#'; - foreach ($functions as $functionName => $function) { - $this->functions[$functionName] = ['functionName' => $functionName, 'namespace' => $function['namespace'], 'signature' => $function['signature'], 'startLine' => $function['startLine'], 'endLine' => $function['endLine'], 'executableLines' => 0, 'executedLines' => 0, 'executableBranches' => 0, 'executedBranches' => 0, 'executablePaths' => 0, 'executedPaths' => 0, 'ccn' => $function['ccn'], 'coverage' => 0, 'crap' => 0, 'link' => $link . $function['startLine']]; - foreach (range($function['startLine'], $function['endLine']) as $lineNumber) { - $this->codeUnitsByLine[$lineNumber] = [&$this->functions[$functionName]]; - } - if (isset($this->functionCoverageData[$functionName]['branches'])) { - $this->functions[$functionName]['executableBranches'] = count($this->functionCoverageData[$functionName]['branches']); - $this->functions[$functionName]['executedBranches'] = count(array_filter($this->functionCoverageData[$functionName]['branches'], static function (array $branch) { - return (bool) $branch['hit']; - })); - } - if (isset($this->functionCoverageData[$functionName]['paths'])) { - $this->functions[$functionName]['executablePaths'] = count($this->functionCoverageData[$functionName]['paths']); - $this->functions[$functionName]['executedPaths'] = count(array_filter($this->functionCoverageData[$functionName]['paths'], static function (array $path) { - return (bool) $path['hit']; - })); - } - $this->numExecutableBranches += $this->functions[$functionName]['executableBranches']; - $this->numExecutedBranches += $this->functions[$functionName]['executedBranches']; - $this->numExecutablePaths += $this->functions[$functionName]['executablePaths']; - $this->numExecutedPaths += $this->functions[$functionName]['executedPaths']; - } - } - /** - * @param CodeUnitMethodType $method - * - * @return ProcessedMethodType - */ - private function newMethod(string $className, string $methodName, array $method, string $link): array - { - $methodData = ['methodName' => $methodName, 'visibility' => $method['visibility'], 'signature' => $method['signature'], 'startLine' => $method['startLine'], 'endLine' => $method['endLine'], 'executableLines' => 0, 'executedLines' => 0, 'executableBranches' => 0, 'executedBranches' => 0, 'executablePaths' => 0, 'executedPaths' => 0, 'ccn' => $method['ccn'], 'coverage' => 0, 'crap' => 0, 'link' => $link . $method['startLine']]; - $key = $className . '->' . $methodName; - if (isset($this->functionCoverageData[$key]['branches'])) { - $methodData['executableBranches'] = count($this->functionCoverageData[$key]['branches']); - $methodData['executedBranches'] = count(array_filter($this->functionCoverageData[$key]['branches'], static function (array $branch) { - return (bool) $branch['hit']; - })); - } - if (isset($this->functionCoverageData[$key]['paths'])) { - $methodData['executablePaths'] = count($this->functionCoverageData[$key]['paths']); - $methodData['executedPaths'] = count(array_filter($this->functionCoverageData[$key]['paths'], static function (array $path) { - return (bool) $path['hit']; - })); - } - return $methodData; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node; - -use function count; -use RecursiveIterator; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Iterator implements RecursiveIterator -{ - private int $position; - /** - * @var list - */ - private readonly array $nodes; - public function __construct(Directory $node) - { - $this->nodes = $node->children(); - } - /** - * Rewinds the Iterator to the first element. - */ - public function rewind(): void - { - $this->position = 0; - } - /** - * Checks if there is a current element after calls to rewind() or next(). - */ - public function valid(): bool - { - return $this->position < count($this->nodes); - } - /** - * Returns the key of the current element. - */ - public function key(): int - { - return $this->position; - } - /** - * Returns the current element. - */ - public function current(): ?AbstractNode - { - return $this->valid() ? $this->nodes[$this->position] : null; - } - /** - * Moves forward to next element. - */ - public function next(): void - { - $this->position++; - } - /** - * Returns the sub iterator for the current element. - */ - public function getChildren(): self - { - return new self($this->nodes[$this->position]); - } - /** - * Checks whether the current element has children. - */ - public function hasChildren(): bool - { - return $this->nodes[$this->position] instanceof Directory; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report; - -use function count; -use function dirname; -use function file_put_contents; -use function is_string; -use function ksort; -use function max; -use function range; -use function str_contains; -use function time; -use DOMDocument; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\CodeCoverage; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\File; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Util\Filesystem; -final class Clover -{ - /** - * @throws WriteOperationFailedException - */ - public function process(CodeCoverage $coverage, ?string $target = null, ?string $name = null): string - { - $time = (string) time(); - $xmlDocument = new DOMDocument('1.0', 'UTF-8'); - $xmlDocument->formatOutput = \true; - $xmlCoverage = $xmlDocument->createElement('coverage'); - $xmlCoverage->setAttribute('generated', $time); - $xmlDocument->appendChild($xmlCoverage); - $xmlProject = $xmlDocument->createElement('project'); - $xmlProject->setAttribute('timestamp', $time); - if (is_string($name)) { - $xmlProject->setAttribute('name', $name); - } - $xmlCoverage->appendChild($xmlProject); - $packages = []; - $report = $coverage->getReport(); - foreach ($report as $item) { - if (!$item instanceof File) { - continue; - } - /* @var File $item */ - $xmlFile = $xmlDocument->createElement('file'); - $xmlFile->setAttribute('name', $item->pathAsString()); - $classes = $item->classesAndTraits(); - $coverageData = $item->lineCoverageData(); - $lines = []; - $namespace = 'global'; - foreach ($classes as $className => $class) { - $classStatements = 0; - $coveredClassStatements = 0; - $coveredMethods = 0; - $classMethods = 0; - // Assumption: one namespace per file - if ($class['namespace'] !== '') { - $namespace = $class['namespace']; - } - foreach ($class['methods'] as $methodName => $method) { - if ($method['executableLines'] == 0) { - continue; - } - $classMethods++; - $classStatements += $method['executableLines']; - $coveredClassStatements += $method['executedLines']; - if ($method['coverage'] == 100) { - $coveredMethods++; - } - $methodCount = 0; - foreach (range($method['startLine'], $method['endLine']) as $line) { - if (isset($coverageData[$line])) { - $methodCount = max($methodCount, count($coverageData[$line])); - } - } - $lines[$method['startLine']] = ['ccn' => $method['ccn'], 'count' => $methodCount, 'crap' => $method['crap'], 'type' => 'method', 'visibility' => $method['visibility'], 'name' => $methodName]; - } - $xmlClass = $xmlDocument->createElement('class'); - $xmlClass->setAttribute('name', $className); - $xmlClass->setAttribute('namespace', $namespace); - $xmlFile->appendChild($xmlClass); - $xmlMetrics = $xmlDocument->createElement('metrics'); - $xmlMetrics->setAttribute('complexity', (string) $class['ccn']); - $xmlMetrics->setAttribute('methods', (string) $classMethods); - $xmlMetrics->setAttribute('coveredmethods', (string) $coveredMethods); - $xmlMetrics->setAttribute('conditionals', (string) $class['executableBranches']); - $xmlMetrics->setAttribute('coveredconditionals', (string) $class['executedBranches']); - $xmlMetrics->setAttribute('statements', (string) $classStatements); - $xmlMetrics->setAttribute('coveredstatements', (string) $coveredClassStatements); - $xmlMetrics->setAttribute('elements', (string) ($classMethods + $classStatements + $class['executableBranches'])); - $xmlMetrics->setAttribute('coveredelements', (string) ($coveredMethods + $coveredClassStatements + $class['executedBranches'])); - $xmlClass->appendChild($xmlMetrics); - } - foreach ($coverageData as $line => $data) { - if ($data === null || isset($lines[$line])) { - continue; - } - $lines[$line] = ['count' => count($data), 'type' => 'stmt']; - } - ksort($lines); - foreach ($lines as $line => $data) { - $xmlLine = $xmlDocument->createElement('line'); - $xmlLine->setAttribute('num', (string) $line); - $xmlLine->setAttribute('type', $data['type']); - if (isset($data['name'])) { - $xmlLine->setAttribute('name', $data['name']); - } - if (isset($data['visibility'])) { - $xmlLine->setAttribute('visibility', $data['visibility']); - } - if (isset($data['ccn'])) { - $xmlLine->setAttribute('complexity', (string) $data['ccn']); - } - if (isset($data['crap'])) { - $xmlLine->setAttribute('crap', (string) $data['crap']); - } - $xmlLine->setAttribute('count', (string) $data['count']); - $xmlFile->appendChild($xmlLine); - } - $linesOfCode = $item->linesOfCode(); - $xmlMetrics = $xmlDocument->createElement('metrics'); - $xmlMetrics->setAttribute('loc', (string) $linesOfCode['linesOfCode']); - $xmlMetrics->setAttribute('ncloc', (string) $linesOfCode['nonCommentLinesOfCode']); - $xmlMetrics->setAttribute('classes', (string) $item->numberOfClassesAndTraits()); - $xmlMetrics->setAttribute('methods', (string) $item->numberOfMethods()); - $xmlMetrics->setAttribute('coveredmethods', (string) $item->numberOfTestedMethods()); - $xmlMetrics->setAttribute('conditionals', (string) $item->numberOfExecutableBranches()); - $xmlMetrics->setAttribute('coveredconditionals', (string) $item->numberOfExecutedBranches()); - $xmlMetrics->setAttribute('statements', (string) $item->numberOfExecutableLines()); - $xmlMetrics->setAttribute('coveredstatements', (string) $item->numberOfExecutedLines()); - $xmlMetrics->setAttribute('elements', (string) ($item->numberOfMethods() + $item->numberOfExecutableLines() + $item->numberOfExecutableBranches())); - $xmlMetrics->setAttribute('coveredelements', (string) ($item->numberOfTestedMethods() + $item->numberOfExecutedLines() + $item->numberOfExecutedBranches())); - $xmlFile->appendChild($xmlMetrics); - if ($namespace === 'global') { - $xmlProject->appendChild($xmlFile); - } else { - if (!isset($packages[$namespace])) { - $packages[$namespace] = $xmlDocument->createElement('package'); - $packages[$namespace]->setAttribute('name', $namespace); - $xmlProject->appendChild($packages[$namespace]); - } - $packages[$namespace]->appendChild($xmlFile); - } - } - $linesOfCode = $report->linesOfCode(); - $xmlMetrics = $xmlDocument->createElement('metrics'); - $xmlMetrics->setAttribute('files', (string) count($report)); - $xmlMetrics->setAttribute('loc', (string) $linesOfCode['linesOfCode']); - $xmlMetrics->setAttribute('ncloc', (string) $linesOfCode['nonCommentLinesOfCode']); - $xmlMetrics->setAttribute('classes', (string) $report->numberOfClassesAndTraits()); - $xmlMetrics->setAttribute('methods', (string) $report->numberOfMethods()); - $xmlMetrics->setAttribute('coveredmethods', (string) $report->numberOfTestedMethods()); - $xmlMetrics->setAttribute('conditionals', (string) $report->numberOfExecutableBranches()); - $xmlMetrics->setAttribute('coveredconditionals', (string) $report->numberOfExecutedBranches()); - $xmlMetrics->setAttribute('statements', (string) $report->numberOfExecutableLines()); - $xmlMetrics->setAttribute('coveredstatements', (string) $report->numberOfExecutedLines()); - $xmlMetrics->setAttribute('elements', (string) ($report->numberOfMethods() + $report->numberOfExecutableLines() + $report->numberOfExecutableBranches())); - $xmlMetrics->setAttribute('coveredelements', (string) ($report->numberOfTestedMethods() + $report->numberOfExecutedLines() + $report->numberOfExecutedBranches())); - $xmlProject->appendChild($xmlMetrics); - $buffer = $xmlDocument->saveXML(); - if ($target !== null) { - if (!str_contains($target, '://')) { - Filesystem::createDirectory(dirname($target)); - } - if (@file_put_contents($target, $buffer) === \false) { - throw new WriteOperationFailedException($target); - } - } - return $buffer; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report; - -use const DIRECTORY_SEPARATOR; -use function basename; -use function count; -use function dirname; -use function file_put_contents; -use function preg_match; -use function range; -use function str_contains; -use function str_replace; -use function time; -use DOMImplementation; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\CodeCoverage; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\File; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Util\Filesystem; -final class Cobertura -{ - /** - * @throws WriteOperationFailedException - */ - public function process(CodeCoverage $coverage, ?string $target = null): string - { - $time = (string) time(); - $report = $coverage->getReport(); - $implementation = new DOMImplementation(); - $documentType = $implementation->createDocumentType('coverage', '', 'http://cobertura.sourceforge.net/xml/coverage-04.dtd'); - $document = $implementation->createDocument('', '', $documentType); - $document->xmlVersion = '1.0'; - $document->encoding = 'UTF-8'; - $document->formatOutput = \true; - $coverageElement = $document->createElement('coverage'); - $linesValid = $report->numberOfExecutableLines(); - $linesCovered = $report->numberOfExecutedLines(); - $lineRate = $linesValid === 0 ? 0 : $linesCovered / $linesValid; - $coverageElement->setAttribute('line-rate', (string) $lineRate); - $branchesValid = $report->numberOfExecutableBranches(); - $branchesCovered = $report->numberOfExecutedBranches(); - $branchRate = $branchesValid === 0 ? 0 : $branchesCovered / $branchesValid; - $coverageElement->setAttribute('branch-rate', (string) $branchRate); - $coverageElement->setAttribute('lines-covered', (string) $report->numberOfExecutedLines()); - $coverageElement->setAttribute('lines-valid', (string) $report->numberOfExecutableLines()); - $coverageElement->setAttribute('branches-covered', (string) $report->numberOfExecutedBranches()); - $coverageElement->setAttribute('branches-valid', (string) $report->numberOfExecutableBranches()); - $coverageElement->setAttribute('complexity', ''); - $coverageElement->setAttribute('version', '0.4'); - $coverageElement->setAttribute('timestamp', $time); - $document->appendChild($coverageElement); - $sourcesElement = $document->createElement('sources'); - $coverageElement->appendChild($sourcesElement); - $sourceElement = $document->createElement('source', $report->pathAsString()); - $sourcesElement->appendChild($sourceElement); - $packagesElement = $document->createElement('packages'); - $coverageElement->appendChild($packagesElement); - $complexity = 0; - foreach ($report as $item) { - if (!$item instanceof File) { - continue; - } - $packageElement = $document->createElement('package'); - $packageComplexity = 0; - $packageElement->setAttribute('name', str_replace($report->pathAsString() . DIRECTORY_SEPARATOR, '', $item->pathAsString())); - $linesValid = $item->numberOfExecutableLines(); - $linesCovered = $item->numberOfExecutedLines(); - $lineRate = $linesValid === 0 ? 0 : $linesCovered / $linesValid; - $packageElement->setAttribute('line-rate', (string) $lineRate); - $branchesValid = $item->numberOfExecutableBranches(); - $branchesCovered = $item->numberOfExecutedBranches(); - $branchRate = $branchesValid === 0 ? 0 : $branchesCovered / $branchesValid; - $packageElement->setAttribute('branch-rate', (string) $branchRate); - $packageElement->setAttribute('complexity', ''); - $packagesElement->appendChild($packageElement); - $classesElement = $document->createElement('classes'); - $packageElement->appendChild($classesElement); - $classes = $item->classesAndTraits(); - $coverageData = $item->lineCoverageData(); - foreach ($classes as $className => $class) { - $complexity += $class['ccn']; - $packageComplexity += $class['ccn']; - $linesValid = $class['executableLines']; - $linesCovered = $class['executedLines']; - $lineRate = $linesValid === 0 ? 0 : $linesCovered / $linesValid; - $branchesValid = $class['executableBranches']; - $branchesCovered = $class['executedBranches']; - $branchRate = $branchesValid === 0 ? 0 : $branchesCovered / $branchesValid; - $classElement = $document->createElement('class'); - $classElement->setAttribute('name', $className); - $classElement->setAttribute('filename', str_replace($report->pathAsString() . DIRECTORY_SEPARATOR, '', $item->pathAsString())); - $classElement->setAttribute('line-rate', (string) $lineRate); - $classElement->setAttribute('branch-rate', (string) $branchRate); - $classElement->setAttribute('complexity', (string) $class['ccn']); - $classesElement->appendChild($classElement); - $methodsElement = $document->createElement('methods'); - $classElement->appendChild($methodsElement); - $classLinesElement = $document->createElement('lines'); - $classElement->appendChild($classLinesElement); - foreach ($class['methods'] as $methodName => $method) { - if ($method['executableLines'] === 0) { - continue; - } - preg_match("/\\((.*?)\\)/", $method['signature'], $signature); - $linesValid = $method['executableLines']; - $linesCovered = $method['executedLines']; - $lineRate = $linesValid === 0 ? 0 : $linesCovered / $linesValid; - $branchesValid = $method['executableBranches']; - $branchesCovered = $method['executedBranches']; - $branchRate = $branchesValid === 0 ? 0 : $branchesCovered / $branchesValid; - $methodElement = $document->createElement('method'); - $methodElement->setAttribute('name', $methodName); - $methodElement->setAttribute('signature', $signature[1]); - $methodElement->setAttribute('line-rate', (string) $lineRate); - $methodElement->setAttribute('branch-rate', (string) $branchRate); - $methodElement->setAttribute('complexity', (string) $method['ccn']); - $methodLinesElement = $document->createElement('lines'); - $methodElement->appendChild($methodLinesElement); - foreach (range($method['startLine'], $method['endLine']) as $line) { - if (!isset($coverageData[$line])) { - continue; - } - $methodLineElement = $document->createElement('line'); - $methodLineElement->setAttribute('number', (string) $line); - $methodLineElement->setAttribute('hits', (string) count($coverageData[$line])); - $methodLinesElement->appendChild($methodLineElement); - $classLineElement = $methodLineElement->cloneNode(); - $classLinesElement->appendChild($classLineElement); - } - $methodsElement->appendChild($methodElement); - } - } - if ($item->numberOfFunctions() === 0) { - $packageElement->setAttribute('complexity', (string) $packageComplexity); - continue; - } - $functionsComplexity = 0; - $functionsLinesValid = 0; - $functionsLinesCovered = 0; - $functionsBranchesValid = 0; - $functionsBranchesCovered = 0; - $classElement = $document->createElement('class'); - $classElement->setAttribute('name', basename($item->pathAsString())); - $classElement->setAttribute('filename', str_replace($report->pathAsString() . DIRECTORY_SEPARATOR, '', $item->pathAsString())); - $methodsElement = $document->createElement('methods'); - $classElement->appendChild($methodsElement); - $classLinesElement = $document->createElement('lines'); - $classElement->appendChild($classLinesElement); - $functions = $item->functions(); - foreach ($functions as $functionName => $function) { - if ($function['executableLines'] === 0) { - continue; - } - $complexity += $function['ccn']; - $packageComplexity += $function['ccn']; - $functionsComplexity += $function['ccn']; - $linesValid = $function['executableLines']; - $linesCovered = $function['executedLines']; - $lineRate = $linesValid === 0 ? 0 : $linesCovered / $linesValid; - $functionsLinesValid += $linesValid; - $functionsLinesCovered += $linesCovered; - $branchesValid = $function['executableBranches']; - $branchesCovered = $function['executedBranches']; - $branchRate = $branchesValid === 0 ? 0 : $branchesCovered / $branchesValid; - $functionsBranchesValid += $branchesValid; - $functionsBranchesCovered += $branchesValid; - $methodElement = $document->createElement('method'); - $methodElement->setAttribute('name', $functionName); - $methodElement->setAttribute('signature', $function['signature']); - $methodElement->setAttribute('line-rate', (string) $lineRate); - $methodElement->setAttribute('branch-rate', (string) $branchRate); - $methodElement->setAttribute('complexity', (string) $function['ccn']); - $methodLinesElement = $document->createElement('lines'); - $methodElement->appendChild($methodLinesElement); - foreach (range($function['startLine'], $function['endLine']) as $line) { - if (!isset($coverageData[$line])) { - continue; - } - $methodLineElement = $document->createElement('line'); - $methodLineElement->setAttribute('number', (string) $line); - $methodLineElement->setAttribute('hits', (string) count($coverageData[$line])); - $methodLinesElement->appendChild($methodLineElement); - $classLineElement = $methodLineElement->cloneNode(); - $classLinesElement->appendChild($classLineElement); - } - $methodsElement->appendChild($methodElement); - } - $packageElement->setAttribute('complexity', (string) $packageComplexity); - if ($functionsLinesValid === 0) { - continue; - } - $lineRate = $functionsLinesCovered / $functionsLinesValid; - $branchRate = $functionsBranchesValid === 0 ? 0 : $functionsBranchesCovered / $functionsBranchesValid; - $classElement->setAttribute('line-rate', (string) $lineRate); - $classElement->setAttribute('branch-rate', (string) $branchRate); - $classElement->setAttribute('complexity', (string) $functionsComplexity); - $classesElement->appendChild($classElement); - } - $coverageElement->setAttribute('complexity', (string) $complexity); - $buffer = $document->saveXML(); - if ($target !== null) { - if (!str_contains($target, '://')) { - Filesystem::createDirectory(dirname($target)); - } - if (@file_put_contents($target, $buffer) === \false) { - throw new WriteOperationFailedException($target); - } - } - return $buffer; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report; - -use function date; -use function dirname; -use function file_put_contents; -use function htmlspecialchars; -use function is_string; -use function round; -use function str_contains; -use DOMDocument; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\CodeCoverage; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\File; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Util\Filesystem; -final class Crap4j -{ - private readonly int $threshold; - public function __construct(int $threshold = 30) - { - $this->threshold = $threshold; - } - /** - * @throws WriteOperationFailedException - */ - public function process(CodeCoverage $coverage, ?string $target = null, ?string $name = null): string - { - $document = new DOMDocument('1.0', 'UTF-8'); - $document->formatOutput = \true; - $root = $document->createElement('crap_result'); - $document->appendChild($root); - $project = $document->createElement('project', is_string($name) ? $name : ''); - $root->appendChild($project); - $root->appendChild($document->createElement('timestamp', date('Y-m-d H:i:s'))); - $stats = $document->createElement('stats'); - $methodsNode = $document->createElement('methods'); - $report = $coverage->getReport(); - unset($coverage); - $fullMethodCount = 0; - $fullCrapMethodCount = 0; - $fullCrapLoad = 0; - $fullCrap = 0; - foreach ($report as $item) { - $namespace = 'global'; - if (!$item instanceof File) { - continue; - } - $file = $document->createElement('file'); - $file->setAttribute('name', $item->pathAsString()); - $classes = $item->classesAndTraits(); - foreach ($classes as $className => $class) { - foreach ($class['methods'] as $methodName => $method) { - $crapLoad = $this->crapLoad((float) $method['crap'], $method['ccn'], $method['coverage']); - $fullCrap += $method['crap']; - $fullCrapLoad += $crapLoad; - $fullMethodCount++; - if ($method['crap'] >= $this->threshold) { - $fullCrapMethodCount++; - } - $methodNode = $document->createElement('method'); - if (!empty($class['namespace'])) { - $namespace = $class['namespace']; - } - $methodNode->appendChild($document->createElement('package', $namespace)); - $methodNode->appendChild($document->createElement('className', $className)); - $methodNode->appendChild($document->createElement('methodName', $methodName)); - $methodNode->appendChild($document->createElement('methodSignature', htmlspecialchars($method['signature']))); - $methodNode->appendChild($document->createElement('fullMethod', htmlspecialchars($method['signature']))); - $methodNode->appendChild($document->createElement('crap', (string) $this->roundValue((float) $method['crap']))); - $methodNode->appendChild($document->createElement('complexity', (string) $method['ccn'])); - $methodNode->appendChild($document->createElement('coverage', (string) $this->roundValue($method['coverage']))); - $methodNode->appendChild($document->createElement('crapLoad', (string) round($crapLoad))); - $methodsNode->appendChild($methodNode); - } - } - } - $stats->appendChild($document->createElement('name', 'Method Crap Stats')); - $stats->appendChild($document->createElement('methodCount', (string) $fullMethodCount)); - $stats->appendChild($document->createElement('crapMethodCount', (string) $fullCrapMethodCount)); - $stats->appendChild($document->createElement('crapLoad', (string) round($fullCrapLoad))); - $stats->appendChild($document->createElement('totalCrap', (string) $fullCrap)); - $crapMethodPercent = 0; - if ($fullMethodCount > 0) { - $crapMethodPercent = $this->roundValue(100 * $fullCrapMethodCount / $fullMethodCount); - } - $stats->appendChild($document->createElement('crapMethodPercent', (string) $crapMethodPercent)); - $root->appendChild($stats); - $root->appendChild($methodsNode); - $buffer = $document->saveXML(); - if ($target !== null) { - if (!str_contains($target, '://')) { - Filesystem::createDirectory(dirname($target)); - } - if (@file_put_contents($target, $buffer) === \false) { - throw new WriteOperationFailedException($target); - } - } - return $buffer; - } - private function crapLoad(float $crapValue, int $cyclomaticComplexity, float $coveragePercent): float - { - $crapLoad = 0; - if ($crapValue >= $this->threshold) { - $crapLoad += $cyclomaticComplexity * (1.0 - $coveragePercent / 100); - $crapLoad += $cyclomaticComplexity / $this->threshold; - } - return $crapLoad; - } - private function roundValue(float $value): float - { - return round($value, 2); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report\Html; - -/** - * @immutable - */ -final class Colors -{ - private readonly string $successLow; - private readonly string $successMedium; - private readonly string $successHigh; - private readonly string $warning; - private readonly string $danger; - public static function default(): self - { - return new self('#dff0d8', '#c3e3b5', '#99cb84', '#fcf8e3', '#f2dede'); - } - public static function from(string $successLow, string $successMedium, string $successHigh, string $warning, string $danger): self - { - return new self($successLow, $successMedium, $successHigh, $warning, $danger); - } - private function __construct(string $successLow, string $successMedium, string $successHigh, string $warning, string $danger) - { - $this->successLow = $successLow; - $this->successMedium = $successMedium; - $this->successHigh = $successHigh; - $this->warning = $warning; - $this->danger = $danger; - } - public function successLow(): string - { - return $this->successLow; - } - public function successMedium(): string - { - return $this->successMedium; - } - public function successHigh(): string - { - return $this->successHigh; - } - public function warning(): string - { - return $this->warning; - } - public function danger(): string - { - return $this->danger; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report\Html; - -use function is_file; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\InvalidArgumentException; -/** - * @immutable - */ -final class CustomCssFile -{ - private readonly string $path; - public static function default(): self - { - return new self(__DIR__ . '/Renderer/Template/css/custom.css'); - } - /** - * @throws InvalidArgumentException - */ - public static function from(string $path): self - { - if (!is_file($path)) { - throw new InvalidArgumentException('$path does not exist'); - } - return new self($path); - } - private function __construct(string $path) - { - $this->path = $path; - } - public function path(): string - { - return $this->path; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report\Html; - -use const DIRECTORY_SEPARATOR; -use function copy; -use function date; -use function dirname; -use function str_ends_with; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\CodeCoverage; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\FileCouldNotBeWrittenException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report\Thresholds; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Util\Filesystem; -use PHPUnitPHAR\SebastianBergmann\Template\Exception; -use PHPUnitPHAR\SebastianBergmann\Template\Template; -final class Facade -{ - private readonly string $templatePath; - private readonly string $generator; - private readonly Colors $colors; - private readonly Thresholds $thresholds; - private readonly CustomCssFile $customCssFile; - public function __construct(string $generator = '', ?Colors $colors = null, ?Thresholds $thresholds = null, ?CustomCssFile $customCssFile = null) - { - $this->generator = $generator; - $this->colors = $colors ?? Colors::default(); - $this->thresholds = $thresholds ?? Thresholds::default(); - $this->customCssFile = $customCssFile ?? CustomCssFile::default(); - $this->templatePath = __DIR__ . '/Renderer/Template/'; - } - public function process(CodeCoverage $coverage, string $target): void - { - $target = $this->directory($target); - $report = $coverage->getReport(); - $date = date('D M j G:i:s T Y'); - $dashboard = new Dashboard($this->templatePath, $this->generator, $date, $this->thresholds, $coverage->collectsBranchAndPathCoverage()); - $directory = new Directory($this->templatePath, $this->generator, $date, $this->thresholds, $coverage->collectsBranchAndPathCoverage()); - $file = new File($this->templatePath, $this->generator, $date, $this->thresholds, $coverage->collectsBranchAndPathCoverage()); - $directory->render($report, $target . 'index.html'); - $dashboard->render($report, $target . 'dashboard.html'); - foreach ($report as $node) { - $id = $node->id(); - if ($node instanceof DirectoryNode) { - Filesystem::createDirectory($target . $id); - $directory->render($node, $target . $id . '/index.html'); - $dashboard->render($node, $target . $id . '/dashboard.html'); - } else { - $dir = dirname($target . $id); - Filesystem::createDirectory($dir); - $file->render($node, $target . $id); - } - } - $this->copyFiles($target); - $this->renderCss($target); - } - private function copyFiles(string $target): void - { - $dir = $this->directory($target . '_css'); - copy($this->templatePath . 'css/bootstrap.min.css', $dir . 'bootstrap.min.css'); - copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css'); - copy($this->customCssFile->path(), $dir . 'custom.css'); - copy($this->templatePath . 'css/octicons.css', $dir . 'octicons.css'); - $dir = $this->directory($target . '_icons'); - copy($this->templatePath . 'icons/file-code.svg', $dir . 'file-code.svg'); - copy($this->templatePath . 'icons/file-directory.svg', $dir . 'file-directory.svg'); - $dir = $this->directory($target . '_js'); - copy($this->templatePath . 'js/bootstrap.bundle.min.js', $dir . 'bootstrap.bundle.min.js'); - copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js'); - copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js'); - copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js'); - copy($this->templatePath . 'js/file.js', $dir . 'file.js'); - } - private function renderCss(string $target): void - { - $template = new Template($this->templatePath . 'css/style.css', '{{', '}}'); - $template->setVar(['success-low' => $this->colors->successLow(), 'success-medium' => $this->colors->successMedium(), 'success-high' => $this->colors->successHigh(), 'warning' => $this->colors->warning(), 'danger' => $this->colors->danger()]); - try { - $template->renderTo($this->directory($target . '_css') . 'style.css'); - } catch (Exception $e) { - throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); - } - } - private function directory(string $directory): string - { - if (!str_ends_with($directory, DIRECTORY_SEPARATOR)) { - $directory .= DIRECTORY_SEPARATOR; - } - Filesystem::createDirectory($directory); - return $directory; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report\Html; - -use function array_pop; -use function count; -use function sprintf; -use function str_repeat; -use function substr_count; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\AbstractNode; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\File as FileNode; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report\Thresholds; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Version; -use PHPUnitPHAR\SebastianBergmann\Environment\Runtime; -use PHPUnitPHAR\SebastianBergmann\Template\Template; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -abstract class Renderer -{ - protected string $templatePath; - protected string $generator; - protected string $date; - protected Thresholds $thresholds; - protected bool $hasBranchCoverage; - protected string $version; - public function __construct(string $templatePath, string $generator, string $date, Thresholds $thresholds, bool $hasBranchCoverage) - { - $this->templatePath = $templatePath; - $this->generator = $generator; - $this->date = $date; - $this->thresholds = $thresholds; - $this->version = Version::id(); - $this->hasBranchCoverage = $hasBranchCoverage; - } - protected function renderItemTemplate(Template $template, array $data): string - { - $numSeparator = ' / '; - if (isset($data['numClasses']) && $data['numClasses'] > 0) { - $classesLevel = $this->colorLevel($data['testedClassesPercent']); - $classesNumber = $data['numTestedClasses'] . $numSeparator . $data['numClasses']; - $classesBar = $this->coverageBar($data['testedClassesPercent']); - } else { - $classesLevel = ''; - $classesNumber = '0' . $numSeparator . '0'; - $classesBar = ''; - $data['testedClassesPercentAsString'] = 'n/a'; - } - if ($data['numMethods'] > 0) { - $methodsLevel = $this->colorLevel($data['testedMethodsPercent']); - $methodsNumber = $data['numTestedMethods'] . $numSeparator . $data['numMethods']; - $methodsBar = $this->coverageBar($data['testedMethodsPercent']); - } else { - $methodsLevel = ''; - $methodsNumber = '0' . $numSeparator . '0'; - $methodsBar = ''; - $data['testedMethodsPercentAsString'] = 'n/a'; - } - if ($data['numExecutableLines'] > 0) { - $linesLevel = $this->colorLevel($data['linesExecutedPercent']); - $linesNumber = $data['numExecutedLines'] . $numSeparator . $data['numExecutableLines']; - $linesBar = $this->coverageBar($data['linesExecutedPercent']); - } else { - $linesLevel = ''; - $linesNumber = '0' . $numSeparator . '0'; - $linesBar = ''; - $data['linesExecutedPercentAsString'] = 'n/a'; - } - if ($data['numExecutablePaths'] > 0) { - $pathsLevel = $this->colorLevel($data['pathsExecutedPercent']); - $pathsNumber = $data['numExecutedPaths'] . $numSeparator . $data['numExecutablePaths']; - $pathsBar = $this->coverageBar($data['pathsExecutedPercent']); - } else { - $pathsLevel = ''; - $pathsNumber = '0' . $numSeparator . '0'; - $pathsBar = ''; - $data['pathsExecutedPercentAsString'] = 'n/a'; - } - if ($data['numExecutableBranches'] > 0) { - $branchesLevel = $this->colorLevel($data['branchesExecutedPercent']); - $branchesNumber = $data['numExecutedBranches'] . $numSeparator . $data['numExecutableBranches']; - $branchesBar = $this->coverageBar($data['branchesExecutedPercent']); - } else { - $branchesLevel = ''; - $branchesNumber = '0' . $numSeparator . '0'; - $branchesBar = ''; - $data['branchesExecutedPercentAsString'] = 'n/a'; - } - $template->setVar(['icon' => $data['icon'] ?? '', 'crap' => $data['crap'] ?? '', 'name' => $data['name'], 'lines_bar' => $linesBar, 'lines_executed_percent' => $data['linesExecutedPercentAsString'], 'lines_level' => $linesLevel, 'lines_number' => $linesNumber, 'paths_bar' => $pathsBar, 'paths_executed_percent' => $data['pathsExecutedPercentAsString'], 'paths_level' => $pathsLevel, 'paths_number' => $pathsNumber, 'branches_bar' => $branchesBar, 'branches_executed_percent' => $data['branchesExecutedPercentAsString'], 'branches_level' => $branchesLevel, 'branches_number' => $branchesNumber, 'methods_bar' => $methodsBar, 'methods_tested_percent' => $data['testedMethodsPercentAsString'], 'methods_level' => $methodsLevel, 'methods_number' => $methodsNumber, 'classes_bar' => $classesBar, 'classes_tested_percent' => $data['testedClassesPercentAsString'] ?? '', 'classes_level' => $classesLevel, 'classes_number' => $classesNumber]); - return $template->render(); - } - protected function setCommonTemplateVariables(Template $template, AbstractNode $node): void - { - $template->setVar(['id' => $node->id(), 'full_path' => $node->pathAsString(), 'path_to_root' => $this->pathToRoot($node), 'breadcrumbs' => $this->breadcrumbs($node), 'date' => $this->date, 'version' => $this->version, 'runtime' => $this->runtimeString(), 'generator' => $this->generator, 'low_upper_bound' => $this->thresholds->lowUpperBound(), 'high_lower_bound' => $this->thresholds->highLowerBound()]); - } - protected function breadcrumbs(AbstractNode $node): string - { - $breadcrumbs = ''; - $path = $node->pathAsArray(); - $pathToRoot = []; - $max = count($path); - if ($node instanceof FileNode) { - $max--; - } - for ($i = 0; $i < $max; $i++) { - $pathToRoot[] = str_repeat('../', $i); - } - foreach ($path as $step) { - if ($step !== $node) { - $breadcrumbs .= $this->inactiveBreadcrumb($step, array_pop($pathToRoot)); - } else { - $breadcrumbs .= $this->activeBreadcrumb($step); - } - } - return $breadcrumbs; - } - protected function activeBreadcrumb(AbstractNode $node): string - { - $buffer = sprintf('

' . "\n", $node->name()); - if ($node instanceof DirectoryNode) { - $buffer .= '
' . "\n"; - } - return $buffer; - } - protected function inactiveBreadcrumb(AbstractNode $node, string $pathToRoot): string - { - return sprintf(' ' . "\n", $pathToRoot, $node->name()); - } - protected function pathToRoot(AbstractNode $node): string - { - $id = $node->id(); - $depth = substr_count($id, '/'); - if ($id !== 'index' && $node instanceof DirectoryNode) { - $depth++; - } - return str_repeat('../', $depth); - } - protected function coverageBar(float $percent): string - { - $level = $this->colorLevel($percent); - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'coverage_bar_branch.html' : 'coverage_bar.html'); - $template = new Template($templateName, '{{', '}}'); - $template->setVar(['level' => $level, 'percent' => sprintf('%.2F', $percent)]); - return $template->render(); - } - protected function colorLevel(float $percent): string - { - if ($percent <= $this->thresholds->lowUpperBound()) { - return 'danger'; - } - if ($percent > $this->thresholds->lowUpperBound() && $percent < $this->thresholds->highLowerBound()) { - return 'warning'; - } - return 'success'; - } - private function runtimeString(): string - { - $runtime = new Runtime(); - return sprintf('%s %s', $runtime->getVendorUrl(), $runtime->getName(), $runtime->getVersion()); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report\Html; - -use function array_values; -use function arsort; -use function asort; -use function count; -use function explode; -use function floor; -use function json_encode; -use function sprintf; -use function str_replace; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\FileCouldNotBeWrittenException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\AbstractNode; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; -use PHPUnitPHAR\SebastianBergmann\Template\Exception; -use PHPUnitPHAR\SebastianBergmann\Template\Template; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Dashboard extends Renderer -{ - public function render(DirectoryNode $node, string $file): void - { - $classes = $node->classesAndTraits(); - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'dashboard_branch.html' : 'dashboard.html'); - $template = new Template($templateName, '{{', '}}'); - $this->setCommonTemplateVariables($template, $node); - $baseLink = $node->id() . '/'; - $complexity = $this->complexity($classes, $baseLink); - $coverageDistribution = $this->coverageDistribution($classes); - $insufficientCoverage = $this->insufficientCoverage($classes, $baseLink); - $projectRisks = $this->projectRisks($classes, $baseLink); - $template->setVar(['insufficient_coverage_classes' => $insufficientCoverage['class'], 'insufficient_coverage_methods' => $insufficientCoverage['method'], 'project_risks_classes' => $projectRisks['class'], 'project_risks_methods' => $projectRisks['method'], 'complexity_class' => $complexity['class'], 'complexity_method' => $complexity['method'], 'class_coverage_distribution' => $coverageDistribution['class'], 'method_coverage_distribution' => $coverageDistribution['method']]); - try { - $template->renderTo($file); - } catch (Exception $e) { - throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); - } - } - protected function activeBreadcrumb(AbstractNode $node): string - { - return sprintf(' ' . "\n" . ' ' . "\n", $node->name()); - } - /** - * Returns the data for the Class/Method Complexity charts. - */ - private function complexity(array $classes, string $baseLink): array - { - $result = ['class' => [], 'method' => []]; - foreach ($classes as $className => $class) { - foreach ($class['methods'] as $methodName => $method) { - if ($className !== '*') { - $methodName = $className . '::' . $methodName; - } - $result['method'][] = [$method['coverage'], $method['ccn'], sprintf('%s', str_replace($baseLink, '', $method['link']), $methodName)]; - } - $result['class'][] = [$class['coverage'], $class['ccn'], sprintf('%s', str_replace($baseLink, '', $class['link']), $className)]; - } - return ['class' => json_encode($result['class']), 'method' => json_encode($result['method'])]; - } - /** - * Returns the data for the Class / Method Coverage Distribution chart. - */ - private function coverageDistribution(array $classes): array - { - $result = ['class' => ['0%' => 0, '0-10%' => 0, '10-20%' => 0, '20-30%' => 0, '30-40%' => 0, '40-50%' => 0, '50-60%' => 0, '60-70%' => 0, '70-80%' => 0, '80-90%' => 0, '90-100%' => 0, '100%' => 0], 'method' => ['0%' => 0, '0-10%' => 0, '10-20%' => 0, '20-30%' => 0, '30-40%' => 0, '40-50%' => 0, '50-60%' => 0, '60-70%' => 0, '70-80%' => 0, '80-90%' => 0, '90-100%' => 0, '100%' => 0]]; - foreach ($classes as $class) { - foreach ($class['methods'] as $methodName => $method) { - if ($method['coverage'] === 0) { - $result['method']['0%']++; - } elseif ($method['coverage'] === 100) { - $result['method']['100%']++; - } else { - $key = floor($method['coverage'] / 10) * 10; - $key = $key . '-' . ($key + 10) . '%'; - $result['method'][$key]++; - } - } - if ($class['coverage'] === 0) { - $result['class']['0%']++; - } elseif ($class['coverage'] === 100) { - $result['class']['100%']++; - } else { - $key = floor($class['coverage'] / 10) * 10; - $key = $key . '-' . ($key + 10) . '%'; - $result['class'][$key]++; - } - } - return ['class' => json_encode(array_values($result['class'])), 'method' => json_encode(array_values($result['method']))]; - } - /** - * Returns the classes / methods with insufficient coverage. - */ - private function insufficientCoverage(array $classes, string $baseLink): array - { - $leastTestedClasses = []; - $leastTestedMethods = []; - $result = ['class' => '', 'method' => '']; - foreach ($classes as $className => $class) { - foreach ($class['methods'] as $methodName => $method) { - if ($method['coverage'] < $this->thresholds->highLowerBound()) { - $key = $methodName; - if ($className !== '*') { - $key = $className . '::' . $methodName; - } - $leastTestedMethods[$key] = $method['coverage']; - } - } - if ($class['coverage'] < $this->thresholds->highLowerBound()) { - $leastTestedClasses[$className] = $class['coverage']; - } - } - asort($leastTestedClasses); - asort($leastTestedMethods); - foreach ($leastTestedClasses as $className => $coverage) { - $result['class'] .= sprintf(' %s%d%%' . "\n", str_replace($baseLink, '', $classes[$className]['link']), $className, $coverage); - } - foreach ($leastTestedMethods as $methodName => $coverage) { - [$class, $method] = explode('::', $methodName); - $result['method'] .= sprintf(' %s%d%%' . "\n", str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), $methodName, $method, $coverage); - } - return $result; - } - /** - * Returns the project risks according to the CRAP index. - */ - private function projectRisks(array $classes, string $baseLink): array - { - $classRisks = []; - $methodRisks = []; - $result = ['class' => '', 'method' => '']; - foreach ($classes as $className => $class) { - foreach ($class['methods'] as $methodName => $method) { - if ($method['coverage'] < $this->thresholds->highLowerBound() && $method['ccn'] > 1) { - $key = $methodName; - if ($className !== '*') { - $key = $className . '::' . $methodName; - } - $methodRisks[$key] = $method['crap']; - } - } - if ($class['coverage'] < $this->thresholds->highLowerBound() && $class['ccn'] > count($class['methods'])) { - $classRisks[$className] = $class['crap']; - } - } - arsort($classRisks); - arsort($methodRisks); - foreach ($classRisks as $className => $crap) { - $result['class'] .= sprintf(' %s%d' . "\n", str_replace($baseLink, '', $classes[$className]['link']), $className, $crap); - } - foreach ($methodRisks as $methodName => $crap) { - [$class, $method] = explode('::', $methodName); - $result['method'] .= sprintf(' %s%d' . "\n", str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), $methodName, $method, $crap); - } - return $result; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report\Html; - -use function count; -use function sprintf; -use function str_repeat; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\FileCouldNotBeWrittenException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\AbstractNode as Node; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; -use PHPUnitPHAR\SebastianBergmann\Template\Exception; -use PHPUnitPHAR\SebastianBergmann\Template\Template; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Directory extends Renderer -{ - public function render(DirectoryNode $node, string $file): void - { - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'directory_branch.html' : 'directory.html'); - $template = new Template($templateName, '{{', '}}'); - $this->setCommonTemplateVariables($template, $node); - $items = $this->renderItem($node, \true); - foreach ($node->directories() as $item) { - $items .= $this->renderItem($item); - } - foreach ($node->files() as $item) { - $items .= $this->renderItem($item); - } - $template->setVar(['id' => $node->id(), 'items' => $items]); - try { - $template->renderTo($file); - } catch (Exception $e) { - throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); - } - } - private function renderItem(Node $node, bool $total = \false): string - { - $data = ['numClasses' => $node->numberOfClassesAndTraits(), 'numTestedClasses' => $node->numberOfTestedClassesAndTraits(), 'numMethods' => $node->numberOfFunctionsAndMethods(), 'numTestedMethods' => $node->numberOfTestedFunctionsAndMethods(), 'linesExecutedPercent' => $node->percentageOfExecutedLines()->asFloat(), 'linesExecutedPercentAsString' => $node->percentageOfExecutedLines()->asString(), 'numExecutedLines' => $node->numberOfExecutedLines(), 'numExecutableLines' => $node->numberOfExecutableLines(), 'branchesExecutedPercent' => $node->percentageOfExecutedBranches()->asFloat(), 'branchesExecutedPercentAsString' => $node->percentageOfExecutedBranches()->asString(), 'numExecutedBranches' => $node->numberOfExecutedBranches(), 'numExecutableBranches' => $node->numberOfExecutableBranches(), 'pathsExecutedPercent' => $node->percentageOfExecutedPaths()->asFloat(), 'pathsExecutedPercentAsString' => $node->percentageOfExecutedPaths()->asString(), 'numExecutedPaths' => $node->numberOfExecutedPaths(), 'numExecutablePaths' => $node->numberOfExecutablePaths(), 'testedMethodsPercent' => $node->percentageOfTestedFunctionsAndMethods()->asFloat(), 'testedMethodsPercentAsString' => $node->percentageOfTestedFunctionsAndMethods()->asString(), 'testedClassesPercent' => $node->percentageOfTestedClassesAndTraits()->asFloat(), 'testedClassesPercentAsString' => $node->percentageOfTestedClassesAndTraits()->asString()]; - if ($total) { - $data['name'] = 'Total'; - } else { - $up = str_repeat('../', count($node->pathAsArray()) - 2); - $data['icon'] = sprintf('', $up); - if ($node instanceof DirectoryNode) { - $data['name'] = sprintf('%s', $node->name(), $node->name()); - $data['icon'] = sprintf('', $up); - } elseif ($this->hasBranchCoverage) { - $data['name'] = sprintf('%s [line] [branch] [path]', $node->name(), $node->name(), $node->name(), $node->name()); - } else { - $data['name'] = sprintf('%s', $node->name(), $node->name()); - } - } - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'directory_item_branch.html' : 'directory_item.html'); - return $this->renderItemTemplate(new Template($templateName, '{{', '}}'), $data); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnitPHAR\SebastianBergmann\CodeCoverage\Report\Html; - -use const ENT_COMPAT; -use const ENT_HTML401; -use const ENT_SUBSTITUTE; -use const T_ABSTRACT; -use const T_ARRAY; -use const T_AS; -use const T_BREAK; -use const T_CALLABLE; -use const T_CASE; -use const T_CATCH; -use const T_CLASS; -use const T_CLONE; -use const T_COMMENT; -use const T_CONST; -use const T_CONTINUE; -use const T_DECLARE; -use const T_DEFAULT; -use const T_DO; -use const T_DOC_COMMENT; -use const T_ECHO; -use const T_ELSE; -use const T_ELSEIF; -use const T_EMPTY; -use const T_ENDDECLARE; -use const T_ENDFOR; -use const T_ENDFOREACH; -use const T_ENDIF; -use const T_ENDSWITCH; -use const T_ENDWHILE; -use const T_ENUM; -use const T_EVAL; -use const T_EXIT; -use const T_EXTENDS; -use const T_FINAL; -use const T_FINALLY; -use const T_FN; -use const T_FOR; -use const T_FOREACH; -use const T_FUNCTION; -use const T_GLOBAL; -use const T_GOTO; -use const T_HALT_COMPILER; -use const T_IF; -use const T_IMPLEMENTS; -use const T_INCLUDE; -use const T_INCLUDE_ONCE; -use const T_INLINE_HTML; -use const T_INSTANCEOF; -use const T_INSTEADOF; -use const T_INTERFACE; -use const T_ISSET; -use const T_LIST; -use const T_MATCH; -use const T_NAMESPACE; -use const T_NEW; -use const T_PRINT; -use const T_PRIVATE; -use const T_PROTECTED; -use const T_PUBLIC; -use const T_READONLY; -use const T_REQUIRE; -use const T_REQUIRE_ONCE; -use const T_RETURN; -use const T_STATIC; -use const T_SWITCH; -use const T_THROW; -use const T_TRAIT; -use const T_TRY; -use const T_UNSET; -use const T_USE; -use const T_VAR; -use const T_WHILE; -use const T_YIELD; -use const T_YIELD_FROM; -use function array_key_exists; -use function array_keys; -use function array_merge; -use function array_pop; -use function array_unique; -use function count; -use function explode; -use function file_get_contents; -use function htmlspecialchars; -use function is_string; -use function ksort; -use function range; -use function sort; -use function sprintf; -use function str_ends_with; -use function str_replace; -use function token_get_all; -use function trim; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\FileCouldNotBeWrittenException; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Node\File as FileNode; -use PHPUnitPHAR\SebastianBergmann\CodeCoverage\Util\Percentage; -use PHPUnitPHAR\SebastianBergmann\Template\Exception; -use PHPUnitPHAR\SebastianBergmann\Template\Template; -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class File extends Renderer -{ - /** - * @var array - */ - private const KEYWORD_TOKENS = [T_ABSTRACT => \true, T_ARRAY => \true, T_AS => \true, T_BREAK => \true, T_CALLABLE => \true, T_CASE => \true, T_CATCH => \true, T_CLASS => \true, T_CLONE => \true, T_CONST => \true, T_CONTINUE => \true, T_DECLARE => \true, T_DEFAULT => \true, T_DO => \true, T_ECHO => \true, T_ELSE => \true, T_ELSEIF => \true, T_EMPTY => \true, T_ENDDECLARE => \true, T_ENDFOR => \true, T_ENDFOREACH => \true, T_ENDIF => \true, T_ENDSWITCH => \true, T_ENDWHILE => \true, T_ENUM => \true, T_EVAL => \true, T_EXIT => \true, T_EXTENDS => \true, T_FINAL => \true, T_FINALLY => \true, T_FN => \true, T_FOR => \true, T_FOREACH => \true, T_FUNCTION => \true, T_GLOBAL => \true, T_GOTO => \true, T_HALT_COMPILER => \true, T_IF => \true, T_IMPLEMENTS => \true, T_INCLUDE => \true, T_INCLUDE_ONCE => \true, T_INSTANCEOF => \true, T_INSTEADOF => \true, T_INTERFACE => \true, T_ISSET => \true, T_LIST => \true, T_MATCH => \true, T_NAMESPACE => \true, T_NEW => \true, T_PRINT => \true, T_PRIVATE => \true, T_PROTECTED => \true, T_PUBLIC => \true, T_READONLY => \true, T_REQUIRE => \true, T_REQUIRE_ONCE => \true, T_RETURN => \true, T_STATIC => \true, T_SWITCH => \true, T_THROW => \true, T_TRAIT => \true, T_TRY => \true, T_UNSET => \true, T_USE => \true, T_VAR => \true, T_WHILE => \true, T_YIELD => \true, T_YIELD_FROM => \true]; - private static array $formattedSourceCache = []; - private int $htmlSpecialCharsFlags = ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE; - public function render(FileNode $node, string $file): void - { - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'file_branch.html' : 'file.html'); - $template = new Template($templateName, '{{', '}}'); - $this->setCommonTemplateVariables($template, $node); - $template->setVar(['items' => $this->renderItems($node), 'lines' => $this->renderSourceWithLineCoverage($node), 'legend' => '

Covered by small (and larger) testsCovered by medium (and large) testsCovered by large tests (and tests of unknown size)Not coveredNot coverable

', 'structure' => '']); - try { - $template->renderTo($file . '.html'); - } catch (Exception $e) { - throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); - } - if ($this->hasBranchCoverage) { - $template->setVar(['items' => $this->renderItems($node), 'lines' => $this->renderSourceWithBranchCoverage($node), 'legend' => '

Fully coveredPartially coveredNot covered

', 'structure' => $this->renderBranchStructure($node)]); - try { - $template->renderTo($file . '_branch.html'); - } catch (Exception $e) { - throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); - } - $template->setVar(['items' => $this->renderItems($node), 'lines' => $this->renderSourceWithPathCoverage($node), 'legend' => '

Fully coveredPartially coveredNot covered

', 'structure' => $this->renderPathStructure($node)]); - try { - $template->renderTo($file . '_path.html'); - } catch (Exception $e) { - throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); - } - } - } - private function renderItems(FileNode $node): string - { - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'file_item_branch.html' : 'file_item.html'); - $template = new Template($templateName, '{{', '}}'); - $methodTemplateName = $this->templatePath . ($this->hasBranchCoverage ? 'method_item_branch.html' : 'method_item.html'); - $methodItemTemplate = new Template($methodTemplateName, '{{', '}}'); - $items = $this->renderItemTemplate($template, ['name' => 'Total', 'numClasses' => $node->numberOfClassesAndTraits(), 'numTestedClasses' => $node->numberOfTestedClassesAndTraits(), 'numMethods' => $node->numberOfFunctionsAndMethods(), 'numTestedMethods' => $node->numberOfTestedFunctionsAndMethods(), 'linesExecutedPercent' => $node->percentageOfExecutedLines()->asFloat(), 'linesExecutedPercentAsString' => $node->percentageOfExecutedLines()->asString(), 'numExecutedLines' => $node->numberOfExecutedLines(), 'numExecutableLines' => $node->numberOfExecutableLines(), 'branchesExecutedPercent' => $node->percentageOfExecutedBranches()->asFloat(), 'branchesExecutedPercentAsString' => $node->percentageOfExecutedBranches()->asString(), 'numExecutedBranches' => $node->numberOfExecutedBranches(), 'numExecutableBranches' => $node->numberOfExecutableBranches(), 'pathsExecutedPercent' => $node->percentageOfExecutedPaths()->asFloat(), 'pathsExecutedPercentAsString' => $node->percentageOfExecutedPaths()->asString(), 'numExecutedPaths' => $node->numberOfExecutedPaths(), 'numExecutablePaths' => $node->numberOfExecutablePaths(), 'testedMethodsPercent' => $node->percentageOfTestedFunctionsAndMethods()->asFloat(), 'testedMethodsPercentAsString' => $node->percentageOfTestedFunctionsAndMethods()->asString(), 'testedClassesPercent' => $node->percentageOfTestedClassesAndTraits()->asFloat(), 'testedClassesPercentAsString' => $node->percentageOfTestedClassesAndTraits()->asString(), 'crap' => 'CRAP']); - $items .= $this->renderFunctionItems($node->functions(), $methodItemTemplate); - $items .= $this->renderTraitOrClassItems($node->traits(), $template, $methodItemTemplate); - $items .= $this->renderTraitOrClassItems($node->classes(), $template, $methodItemTemplate); - return $items; - } - private function renderTraitOrClassItems(array $items, Template $template, Template $methodItemTemplate): string - { - $buffer = ''; - if (empty($items)) { - return $buffer; - } - foreach ($items as $name => $item) { - $numMethods = 0; - $numTestedMethods = 0; - foreach ($item['methods'] as $method) { - if ($method['executableLines'] > 0) { - $numMethods++; - if ($method['executedLines'] === $method['executableLines']) { - $numTestedMethods++; - } - } - } - if ($item['executableLines'] > 0) { - $numClasses = 1; - $numTestedClasses = $numTestedMethods === $numMethods ? 1 : 0; - $linesExecutedPercentAsString = Percentage::fromFractionAndTotal($item['executedLines'], $item['executableLines'])->asString(); - $branchesExecutedPercentAsString = Percentage::fromFractionAndTotal($item['executedBranches'], $item['executableBranches'])->asString(); - $pathsExecutedPercentAsString = Percentage::fromFractionAndTotal($item['executedPaths'], $item['executablePaths'])->asString(); - } else { - $numClasses = 0; - $numTestedClasses = 0; - $linesExecutedPercentAsString = 'n/a'; - $branchesExecutedPercentAsString = 'n/a'; - $pathsExecutedPercentAsString = 'n/a'; - } - $testedMethodsPercentage = Percentage::fromFractionAndTotal($numTestedMethods, $numMethods); - $testedClassesPercentage = Percentage::fromFractionAndTotal($numTestedMethods === $numMethods ? 1 : 0, 1); - $buffer .= $this->renderItemTemplate($template, ['name' => $this->abbreviateClassName($name), 'numClasses' => $numClasses, 'numTestedClasses' => $numTestedClasses, 'numMethods' => $numMethods, 'numTestedMethods' => $numTestedMethods, 'linesExecutedPercent' => Percentage::fromFractionAndTotal($item['executedLines'], $item['executableLines'])->asFloat(), 'linesExecutedPercentAsString' => $linesExecutedPercentAsString, 'numExecutedLines' => $item['executedLines'], 'numExecutableLines' => $item['executableLines'], 'branchesExecutedPercent' => Percentage::fromFractionAndTotal($item['executedBranches'], $item['executableBranches'])->asFloat(), 'branchesExecutedPercentAsString' => $branchesExecutedPercentAsString, 'numExecutedBranches' => $item['executedBranches'], 'numExecutableBranches' => $item['executableBranches'], 'pathsExecutedPercent' => Percentage::fromFractionAndTotal($item['executedPaths'], $item['executablePaths'])->asFloat(), 'pathsExecutedPercentAsString' => $pathsExecutedPercentAsString, 'numExecutedPaths' => $item['executedPaths'], 'numExecutablePaths' => $item['executablePaths'], 'testedMethodsPercent' => $testedMethodsPercentage->asFloat(), 'testedMethodsPercentAsString' => $testedMethodsPercentage->asString(), 'testedClassesPercent' => $testedClassesPercentage->asFloat(), 'testedClassesPercentAsString' => $testedClassesPercentage->asString(), 'crap' => $item['crap']]); - foreach ($item['methods'] as $method) { - $buffer .= $this->renderFunctionOrMethodItem($methodItemTemplate, $method, ' '); - } - } - return $buffer; - } - private function renderFunctionItems(array $functions, Template $template): string - { - if (empty($functions)) { - return ''; - } - $buffer = ''; - foreach ($functions as $function) { - $buffer .= $this->renderFunctionOrMethodItem($template, $function); - } - return $buffer; - } - private function renderFunctionOrMethodItem(Template $template, array $item, string $indent = ''): string - { - $numMethods = 0; - $numTestedMethods = 0; - if ($item['executableLines'] > 0) { - $numMethods = 1; - if ($item['executedLines'] === $item['executableLines']) { - $numTestedMethods = 1; - } - } - $executedLinesPercentage = Percentage::fromFractionAndTotal($item['executedLines'], $item['executableLines']); - $executedBranchesPercentage = Percentage::fromFractionAndTotal($item['executedBranches'], $item['executableBranches']); - $executedPathsPercentage = Percentage::fromFractionAndTotal($item['executedPaths'], $item['executablePaths']); - $testedMethodsPercentage = Percentage::fromFractionAndTotal($numTestedMethods, 1); - return $this->renderItemTemplate($template, ['name' => sprintf('%s%s', $indent, $item['startLine'], htmlspecialchars($item['signature'], $this->htmlSpecialCharsFlags), $item['functionName'] ?? $item['methodName']), 'numMethods' => $numMethods, 'numTestedMethods' => $numTestedMethods, 'linesExecutedPercent' => $executedLinesPercentage->asFloat(), 'linesExecutedPercentAsString' => $executedLinesPercentage->asString(), 'numExecutedLines' => $item['executedLines'], 'numExecutableLines' => $item['executableLines'], 'branchesExecutedPercent' => $executedBranchesPercentage->asFloat(), 'branchesExecutedPercentAsString' => $executedBranchesPercentage->asString(), 'numExecutedBranches' => $item['executedBranches'], 'numExecutableBranches' => $item['executableBranches'], 'pathsExecutedPercent' => $executedPathsPercentage->asFloat(), 'pathsExecutedPercentAsString' => $executedPathsPercentage->asString(), 'numExecutedPaths' => $item['executedPaths'], 'numExecutablePaths' => $item['executablePaths'], 'testedMethodsPercent' => $testedMethodsPercentage->asFloat(), 'testedMethodsPercentAsString' => $testedMethodsPercentage->asString(), 'crap' => $item['crap']]); - } - private function renderSourceWithLineCoverage(FileNode $node): string - { - $linesTemplate = new Template($this->templatePath . 'lines.html.dist', '{{', '}}'); - $singleLineTemplate = new Template($this->templatePath . 'line.html.dist', '{{', '}}'); - $coverageData = $node->lineCoverageData(); - $testData = $node->testData(); - $codeLines = $this->loadFile($node->pathAsString()); - $lines = ''; - $i = 1; - foreach ($codeLines as $line) { - $trClass = ''; - $popoverContent = ''; - $popoverTitle = ''; - if (array_key_exists($i, $coverageData)) { - $numTests = $coverageData[$i] ? count($coverageData[$i]) : 0; - if ($coverageData[$i] === null) { - $trClass = 'warning'; - } elseif ($numTests === 0) { - $trClass = 'danger'; - } else { - if ($numTests > 1) { - $popoverTitle = $numTests . ' tests cover line ' . $i; - } else { - $popoverTitle = '1 test covers line ' . $i; - } - $lineCss = 'covered-by-large-tests'; - $popoverContent = '
    '; - foreach ($coverageData[$i] as $test) { - if ($lineCss === 'covered-by-large-tests' && $testData[$test]['size'] === 'medium') { - $lineCss = 'covered-by-medium-tests'; - } elseif ($testData[$test]['size'] === 'small') { - $lineCss = 'covered-by-small-tests'; - } - $popoverContent .= $this->createPopoverContentForTest($test, $testData[$test]); - } - $popoverContent .= '
'; - $trClass = $lineCss . ' popin'; - } - } - $popover = ''; - if (!empty($popoverTitle)) { - $popover = sprintf(' data-bs-title="%s" data-bs-content="%s" data-bs-placement="top" data-bs-html="true"', $popoverTitle, htmlspecialchars($popoverContent, $this->htmlSpecialCharsFlags)); - } - $lines .= $this->renderLine($singleLineTemplate, $i, $line, $trClass, $popover); - $i++; - } - $linesTemplate->setVar(['lines' => $lines]); - return $linesTemplate->render(); - } - private function renderSourceWithBranchCoverage(FileNode $node): string - { - $linesTemplate = new Template($this->templatePath . 'lines.html.dist', '{{', '}}'); - $singleLineTemplate = new Template($this->templatePath . 'line.html.dist', '{{', '}}'); - $functionCoverageData = $node->functionCoverageData(); - $testData = $node->testData(); - $codeLines = $this->loadFile($node->pathAsString()); - $lineData = []; - /** @var int $line */ - foreach (array_keys($codeLines) as $line) { - $lineData[$line + 1] = ['includedInBranches' => 0, 'includedInHitBranches' => 0, 'tests' => []]; - } - foreach ($functionCoverageData as $method) { - foreach ($method['branches'] as $branch) { - foreach (range($branch['line_start'], $branch['line_end']) as $line) { - if (!isset($lineData[$line])) { - // blank line at end of file is sometimes included here - continue; - } - $lineData[$line]['includedInBranches']++; - if ($branch['hit']) { - $lineData[$line]['includedInHitBranches']++; - $lineData[$line]['tests'] = array_unique(array_merge($lineData[$line]['tests'], $branch['hit'])); - } - } - } - } - $lines = ''; - $i = 1; - /** @var string $line */ - foreach ($codeLines as $line) { - $trClass = ''; - $popover = ''; - if ($lineData[$i]['includedInBranches'] > 0) { - $lineCss = 'success'; - if ($lineData[$i]['includedInHitBranches'] === 0) { - $lineCss = 'danger'; - } elseif ($lineData[$i]['includedInHitBranches'] !== $lineData[$i]['includedInBranches']) { - $lineCss = 'warning'; - } - $popoverContent = '
    '; - if (count($lineData[$i]['tests']) === 1) { - $popoverTitle = '1 test covers line ' . $i; - } else { - $popoverTitle = count($lineData[$i]['tests']) . ' tests cover line ' . $i; - } - $popoverTitle .= '. These are covering ' . $lineData[$i]['includedInHitBranches'] . ' out of the ' . $lineData[$i]['includedInBranches'] . ' code branches.'; - foreach ($lineData[$i]['tests'] as $test) { - $popoverContent .= $this->createPopoverContentForTest($test, $testData[$test]); - } - $popoverContent .= '
'; - $trClass = $lineCss . ' popin'; - $popover = sprintf(' data-bs-title="%s" data-bs-content="%s" data-bs-placement="top" data-bs-html="true"', $popoverTitle, htmlspecialchars($popoverContent, $this->htmlSpecialCharsFlags)); - } - $lines .= $this->renderLine($singleLineTemplate, $i, $line, $trClass, $popover); - $i++; - } - $linesTemplate->setVar(['lines' => $lines]); - return $linesTemplate->render(); - } - private function renderSourceWithPathCoverage(FileNode $node): string - { - $linesTemplate = new Template($this->templatePath . 'lines.html.dist', '{{', '}}'); - $singleLineTemplate = new Template($this->templatePath . 'line.html.dist', '{{', '}}'); - $functionCoverageData = $node->functionCoverageData(); - $testData = $node->testData(); - $codeLines = $this->loadFile($node->pathAsString()); - $lineData = []; - /** @var int $line */ - foreach (array_keys($codeLines) as $line) { - $lineData[$line + 1] = ['includedInPaths' => [], 'includedInHitPaths' => [], 'tests' => []]; - } - foreach ($functionCoverageData as $method) { - foreach ($method['paths'] as $pathId => $path) { - foreach ($path['path'] as $branchTaken) { - foreach (range($method['branches'][$branchTaken]['line_start'], $method['branches'][$branchTaken]['line_end']) as $line) { - if (!isset($lineData[$line])) { - continue; - } - $lineData[$line]['includedInPaths'][] = $pathId; - if ($path['hit']) { - $lineData[$line]['includedInHitPaths'][] = $pathId; - $lineData[$line]['tests'] = array_unique(array_merge($lineData[$line]['tests'], $path['hit'])); - } - } - } - } - } - $lines = ''; - $i = 1; - /** @var string $line */ - foreach ($codeLines as $line) { - $trClass = ''; - $popover = ''; - $includedInPathsCount = count(array_unique($lineData[$i]['includedInPaths'])); - $includedInHitPathsCount = count(array_unique($lineData[$i]['includedInHitPaths'])); - if ($includedInPathsCount > 0) { - $lineCss = 'success'; - if ($includedInHitPathsCount === 0) { - $lineCss = 'danger'; - } elseif ($includedInHitPathsCount !== $includedInPathsCount) { - $lineCss = 'warning'; - } - $popoverContent = '
    '; - if (count($lineData[$i]['tests']) === 1) { - $popoverTitle = '1 test covers line ' . $i; - } else { - $popoverTitle = count($lineData[$i]['tests']) . ' tests cover line ' . $i; - } - $popoverTitle .= '. These are covering ' . $includedInHitPathsCount . ' out of the ' . $includedInPathsCount . ' code paths.'; - foreach ($lineData[$i]['tests'] as $test) { - $popoverContent .= $this->createPopoverContentForTest($test, $testData[$test]); - } - $popoverContent .= '
'; - $trClass = $lineCss . ' popin'; - $popover = sprintf(' data-bs-title="%s" data-bs-content="%s" data-bs-placement="top" data-bs-html="true"', $popoverTitle, htmlspecialchars($popoverContent, $this->htmlSpecialCharsFlags)); - } - $lines .= $this->renderLine($singleLineTemplate, $i, $line, $trClass, $popover); - $i++; - } - $linesTemplate->setVar(['lines' => $lines]); - return $linesTemplate->render(); - } - private function renderBranchStructure(FileNode $node): string - { - $branchesTemplate = new Template($this->templatePath . 'branches.html.dist', '{{', '}}'); - $coverageData = $node->functionCoverageData(); - $testData = $node->testData(); - $codeLines = $this->loadFile($node->pathAsString()); - $branches = ''; - ksort($coverageData); - foreach ($coverageData as $methodName => $methodData) { - if (!$methodData['branches']) { - continue; - } - $branchStructure = ''; - foreach ($methodData['branches'] as $branch) { - $branchStructure .= $this->renderBranchLines($branch, $codeLines, $testData); - } - if ($branchStructure !== '') { - // don't show empty branches - $branches .= '
' . $this->abbreviateMethodName($methodName) . '
' . "\n"; - $branches .= $branchStructure; - } - } - $branchesTemplate->setVar(['branches' => $branches]); - return $branchesTemplate->render(); - } - private function renderBranchLines(array $branch, array $codeLines, array $testData): string - { - $linesTemplate = new Template($this->templatePath . 'lines.html.dist', '{{', '}}'); - $singleLineTemplate = new Template($this->templatePath . 'line.html.dist', '{{', '}}'); - $lines = ''; - $branchLines = range($branch['line_start'], $branch['line_end']); - sort($branchLines); - // sometimes end_line < start_line - /** @var int $line */ - foreach ($branchLines as $line) { - if (!isset($codeLines[$line])) { - // blank line at end of file is sometimes included here - continue; - } - $popoverContent = ''; - $popoverTitle = ''; - $numTests = count($branch['hit']); - if ($numTests === 0) { - $trClass = 'danger'; - } else { - $lineCss = 'covered-by-large-tests'; - $popoverContent = '
~L1aTH2zX$@u{5lW8LDM1@Ng z_lLK(&gmDuL2uMOaG8a>FE)Au*jEhwz~9<1xZqvImhsk%`(hi}*T8MCeDyY#j*rCt z9*^GeI-AffL!M3Dr_vfgjNUd(kYf}n``r?{%E<#kTl@Xj+tCc9-Lgs=dK0Rw`uZBM z#)hC)+uIC;++i#lm`GQW=0xHS#{TtgPf@mnqT1u>iHl%ohoYfR0m-r&0o+meuNO&8WfBQ#RxZY! zWn~`C(gwD(gVCIoi`~a!T!d_&f=S3!$7L01^^~$x@s+dqV9sK)F1@q|;^AYK%}YuM zgFGWI1`_=bATljljZeEID*b29#-7}4MA4?IqUCw??6|SLAa1^dPUiOVsCi~xozKk@ z{lEzvvN%$#+|pm5PYztJCfCdE?>*?&aY@6{&>#QS*jnG*xb(zqjQY zB?Y}P7vpVyXlnXPAN-sEsGcWm<=fhAuIoeX33o5kpwJq;5iLlPLE>Hf9&x z9hG+2`k=xJ9NI(%)%cv)9o0U0`W(x~4J>JPZQ8;r0a&1j%ofSIgI1x-v z9vnEczxRhH`7Qd>P!8+vXtRU28V3rNWTlvsMCHGvipfIh16H{k{MWp4Q(ny*^VeNfW z2pJ%0)cnWALkl-1f^VjOh z;SLKeBF2D!dR%vo)Uibgo@$O+Bwli$O0vut4ow1c^BZSq;Q(9Tf?~im4$f`{Z~w3~ zCik%TB^&vJHwd z9F}Vio%9fy5(NyUFp#63aZo9{75gJ^@qCtrQfhi^KF^Nv^VyP|8f?|+94XWLzs0}c z@2n#eSYdw(Hf-Nq7i7tl?L)Iaj&oU*jZ4A>D1Y?R3K|cu;;w#s&Q2z1R!Tjo?N>cH zO0*S(L;)to5`0D}VJ_(KRjDjT{l0^KcMRQ(*89()EngjicwtqZ7)pT_{W`GGdzD&q zFO1PKjY@N{#L7kJVlx`k&~j%lltL@KMVJQOssSkIZ;c&Pa#l1)l2&x-wJJG5Dt8qD zYece-H3dp!C6({i4CgOh@yx5<4z$V;%RbQ0>+*H`6BXp-)QnfeCSIA|egCY=b+3&t zf!a;7z|dyRPOXRiRUQB0WF-FFS3pdScOUGSmu&{v5TtWFqHw#@JATze(K+`%&*3k{ z2+uauO)$~<>zmpaVUO#L`;5IA+o^5{5Y9nl1`HH*H;YzDYQc}X#U z{%QQOHn`R8zH7A#(5`TjpeMu!^0mmWL2rUWI?0b1R{go?r3y#}MybtGyg+d>O99L2 z$RN8yi75(tpzZ;W06NgVmtqy{bxFZf8>>)6aCH25IAR_triVEi(rE^&U6>r7v+46j zlO-xfNLDg#JkM7(Nqgm}gp7=wd`dMYtc4|vx9y{|FR6ga=-vm7a7iBKQQ~F$irNgj7BjE!F0Ljw*6!#vkE0X45$zZNjy9w=gcc5^?VZeTNmc<5?@BPQ7&uH zp^X0uLT=2x{B)`L&XZ0>S1d~_2Ei}dMIscEW&%b0n>zMFM16dz#pHabGfbszpft5P zdM_&?jDM0ggwDL!*_2X>(YsG7bBfsjt;St}3cVCpp2Tlct6U#e9wMe;K2gpgi_Gb~ zym4y6p&OmQG#CEG7dDq^Cm3Oiandw99A}KWLyN*fgPG@B6qz7dfWsqk-UkchvErs_ zh+r%XL0ow6j0^>QGwX4%^i^3fGSo&d9^OzDn+egYw&`%`{Wk&t;-vBwLOqg!AxV`M zGl%mNz$Xbi_goV{#wYGin5>GX#$P+l>z###PN%aFZI1j1Fr4P3dV7TlQDc)$3CI!= zGc2fC_>48ti;s3@8|2-a`ARTfFk-}jF7Y;GSLfG2+*|jLhnvdEf-?i#-cCiMonj+q z^jBG!mf#d4?YrzEynR@ByF)O@E~Yzff^D;Sd Uji$^GqR3O7^g+!r&u~~zw`5Z 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