diff --git a/TplBlock.php b/TplBlock.php index 36d5496..e4b9c72 100644 --- a/TplBlock.php +++ b/TplBlock.php @@ -7,6 +7,7 @@ * @category Template * @package TplBlock * @author gnieark + * @link https://blog-du-grouik.tinad.fr * @license GNU General Public License V3 * @link https://github.com/gnieark/tplBlock/ */ @@ -28,28 +29,28 @@ class TplBlock * * @var string */ - const BLOCKSTARTSTART = ''; + const BLOCKSTARTEND = '\s+-->'; /** * The string starting a block end. * * @var string */ - const BLOCKENDSTART = ''; + const BLOCKENDEND = '\s+-->'; /** * The string starting an enclosure. @@ -214,7 +215,7 @@ class TplBlock * @return string message */ public function checkConsistency($str){ - + return 1; } diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..78aff5f --- /dev/null +++ b/composer.lock @@ -0,0 +1,4143 @@ +{ + "_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#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "9ccf162e5d02bf16edcaa6ad9354c1be", + "packages": [], + "packages-dev": [ + { + "name": "cilex/cilex", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/Cilex/Cilex.git", + "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Cilex/Cilex/zipball/7acd965a609a56d0345e8b6071c261fbdb926cb5", + "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5", + "shasum": "" + }, + "require": { + "cilex/console-service-provider": "1.*", + "php": ">=5.3.3", + "pimple/pimple": "~1.0", + "symfony/finder": "~2.1", + "symfony/process": "~2.1" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*", + "symfony/validator": "~2.1" + }, + "suggest": { + "monolog/monolog": ">=1.0.0", + "symfony/validator": ">=1.0.0", + "symfony/yaml": ">=1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Cilex": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "description": "The PHP micro-framework for Command line tools based on the Symfony2 Components", + "homepage": "http://cilex.github.com", + "keywords": [ + "cli", + "microframework" + ], + "time": "2014-03-29T14:03:13+00:00" + }, + { + "name": "cilex/console-service-provider", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/Cilex/console-service-provider.git", + "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Cilex/console-service-provider/zipball/25ee3d1875243d38e1a3448ff94bdf944f70d24e", + "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "pimple/pimple": "1.*@dev", + "symfony/console": "~2.1" + }, + "require-dev": { + "cilex/cilex": "1.*@dev", + "silex/silex": "1.*@dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Cilex\\Provider\\Console": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "description": "Console Service Provider", + "keywords": [ + "cilex", + "console", + "pimple", + "service-provider", + "silex" + ], + "time": "2012-12-19T10:50:58+00:00" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-12-06T07:11:42+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "time": "2018-03-08T01:11:30+00:00" + }, + { + "name": "gamegos/php-code-sniffer", + "version": "0.6.1", + "source": { + "type": "git", + "url": "https://github.com/gamegos/php-code-sniffer.git", + "reference": "7e5939b66a55bb70eb66830b596b28e6bf3d1368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/gamegos/php-code-sniffer/zipball/7e5939b66a55bb70eb66830b596b28e6bf3d1368", + "reference": "7e5939b66a55bb70eb66830b596b28e6bf3d1368", + "shasum": "" + }, + "require": { + "php": ">=5.3.10" + }, + "require-dev": { + "squizlabs/php_codesniffer": "2.*" + }, + "bin": [ + "bin/phpcs", + "bin/phpcs-pre-commit", + "bin/phpcbf" + ], + "type": "library", + "autoload": { + "psr-4": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Safak Ozpinar", + "email": "safak@gamegos.com" + } + ], + "description": "Gamegos PHP Code Sniffer", + "time": "2017-04-26T14:02:47+00:00" + }, + { + "name": "herrera-io/json", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/kherge-php/json.git", + "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kherge-php/json/zipball/60c696c9370a1e5136816ca557c17f82a6fa83f1", + "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "justinrainbow/json-schema": ">=1.0,<2.0-dev", + "php": ">=5.3.3", + "seld/jsonlint": ">=1.0,<2.0-dev" + }, + "require-dev": { + "herrera-io/phpunit-test-case": "1.*", + "mikey179/vfsstream": "1.1.0", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/lib/json_version.php" + ], + "psr-0": { + "Herrera\\Json": "src/lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Herrera", + "email": "kevin@herrera.io", + "homepage": "http://kevin.herrera.io" + } + ], + "description": "A library for simplifying JSON linting and validation.", + "homepage": "http://herrera-io.github.com/php-json", + "keywords": [ + "json", + "lint", + "schema", + "validate" + ], + "abandoned": "kherge/json", + "time": "2013-10-30T16:51:34+00:00" + }, + { + "name": "herrera-io/phar-update", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/kherge-abandoned/php-phar-update.git", + "reference": "00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kherge-abandoned/php-phar-update/zipball/00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b", + "reference": "00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b", + "shasum": "" + }, + "require": { + "herrera-io/json": "1.*", + "kherge/version": "1.*", + "php": ">=5.3.3" + }, + "require-dev": { + "herrera-io/phpunit-test-case": "1.*", + "mikey179/vfsstream": "1.1.0", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/lib/constants.php" + ], + "psr-0": { + "Herrera\\Phar\\Update": "src/lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Herrera", + "email": "kevin@herrera.io", + "homepage": "http://kevin.herrera.io" + } + ], + "description": "A library for self-updating Phars.", + "homepage": "http://herrera-io.github.com/php-phar-update", + "keywords": [ + "phar", + "update" + ], + "abandoned": true, + "time": "2013-10-30T17:23:01+00:00" + }, + { + "name": "jms/metadata", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/6a06970a10e0a532fb52d3959547123b84a3b3ab", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "doctrine/cache": "~1.0", + "symfony/cache": "~3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Metadata\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Class/method/property metadata management in PHP", + "keywords": [ + "annotations", + "metadata", + "xml", + "yaml" + ], + "time": "2016-12-05T10:18:33+00:00" + }, + { + "name": "jms/parser-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/parser-lib.git", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "shasum": "" + }, + "require": { + "phpoption/phpoption": ">=0.9,<2.0-dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "description": "A library for easily creating recursive-descent parsers.", + "time": "2012-11-18T18:08:43+00:00" + }, + { + "name": "jms/serializer", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/e7c53477ff55c21d1b1db7d062edc050a24f465f", + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3", + "jms/metadata": "~1.1", + "jms/parser-lib": "1.*", + "php": "^5.5|^7.0", + "phpcollection/phpcollection": "~0.1", + "phpoption/phpoption": "^1.1" + }, + "conflict": { + "twig/twig": "<1.12" + }, + "require-dev": { + "doctrine/orm": "~2.1", + "doctrine/phpcr-odm": "^1.3|^2.0", + "ext-pdo_sqlite": "*", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "phpunit/phpunit": "^4.8|^5.0", + "propel/propel1": "~1.7", + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/expression-language": "^2.6|^3.0", + "symfony/filesystem": "^2.1", + "symfony/form": "~2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/yaml": "^2.1|^3.0", + "twig/twig": "~1.12|~2.0" + }, + "suggest": { + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", + "symfony/yaml": "Required if you'd like to serialize data to YAML format." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\Serializer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "time": "2018-02-04T17:48:54+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/cc84765fb7317f6b07bd8ac78364747f95b86341", + "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341", + "shasum": "" + }, + "require": { + "php": ">=5.3.29" + }, + "require-dev": { + "json-schema/json-schema-test-suite": "1.1.0", + "phpdocumentor/phpdocumentor": "~2", + "phpunit/phpunit": "~3.7" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2016-01-25T15:43:01+00:00" + }, + { + "name": "kherge/version", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/kherge-abandoned/Version.git", + "reference": "f07cf83f8ce533be8f93d2893d96d674bbeb7e30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kherge-abandoned/Version/zipball/f07cf83f8ce533be8f93d2893d96d674bbeb7e30", + "reference": "f07cf83f8ce533be8f93d2893d96d674bbeb7e30", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "KevinGH\\Version": "src/lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Herrera", + "email": "me@kevingh.com" + } + ], + "description": "A parsing and comparison library for semantic versioning.", + "homepage": "http://github.com/kherge/Version", + "abandoned": true, + "time": "2012-08-16T17:13:03+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-06-19T01:22:40+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-10-19T19:58:43+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "files": [ + "lib/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2015-09-19T14:15:08+00:00" + }, + { + "name": "pdepend/pdepend", + "version": "2.5.2", + "source": { + "type": "git", + "url": "https://github.com/pdepend/pdepend.git", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", + "shasum": "" + }, + "require": { + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3|^4", + "symfony/dependency-injection": "^2.3.0|^3|^4", + "symfony/filesystem": "^2.3.0|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.7", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "bin": [ + "src/bin/pdepend" + ], + "type": "library", + "autoload": { + "psr-4": { + "PDepend\\": "src/main/php/PDepend" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Official version of pdepend to be handled with Composer", + "time": "2017-12-13T13:21:38+00:00" + }, + { + "name": "phpcollection/phpcollection", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "shasum": "" + }, + "require": { + "phpoption/phpoption": "1.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-0": { + "PhpCollection": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "General-Purpose Collection Library for PHP", + "keywords": [ + "collection", + "list", + "map", + "sequence", + "set" + ], + "time": "2015-05-17T12:39:23+00:00" + }, + { + "name": "phpdocumentor/fileset", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Fileset.git", + "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Fileset/zipball/bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0", + "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/finder": "~2.1" + }, + "require-dev": { + "phpunit/phpunit": "~3.7" + }, + "type": "library", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Fileset component for collecting a set of files given directories and file paths", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "files", + "fileset", + "phpdoc" + ], + "time": "2013-08-06T21:07:42+00:00" + }, + { + "name": "phpdocumentor/graphviz", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/GraphViz.git", + "reference": "a906a90a9f230535f25ea31caf81b2323956283f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/GraphViz/zipball/a906a90a9f230535f25ea31caf81b2323956283f", + "reference": "a906a90a9f230535f25ea31caf81b2323956283f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2016-02-02T13:00:08+00:00" + }, + { + "name": "phpdocumentor/phpdocumentor", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/phpDocumentor2.git", + "reference": "be607da0eef9b9249c43c5b4820d25d631c73667" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/phpDocumentor2/zipball/be607da0eef9b9249c43c5b4820d25d631c73667", + "reference": "be607da0eef9b9249c43c5b4820d25d631c73667", + "shasum": "" + }, + "require": { + "cilex/cilex": "~1.0", + "erusev/parsedown": "~1.0", + "herrera-io/phar-update": "1.0.3", + "jms/serializer": ">=0.12", + "monolog/monolog": "~1.6", + "php": ">=5.3.3", + "phpdocumentor/fileset": "~1.0", + "phpdocumentor/graphviz": "~1.0", + "phpdocumentor/reflection": "^3.0", + "phpdocumentor/reflection-docblock": "~2.0", + "symfony/config": "~2.3", + "symfony/console": "~2.3", + "symfony/event-dispatcher": "~2.1", + "symfony/process": "~2.0", + "symfony/stopwatch": "~2.3", + "symfony/validator": "~2.2", + "twig/twig": "~1.3", + "zendframework/zend-cache": "~2.1", + "zendframework/zend-config": "~2.1", + "zendframework/zend-filter": "~2.1", + "zendframework/zend-i18n": "~2.1", + "zendframework/zend-serializer": "~2.1", + "zendframework/zend-servicemanager": "~2.1", + "zendframework/zend-stdlib": "~2.1", + "zetacomponents/document": ">=1.3.1" + }, + "require-dev": { + "behat/behat": "~3.0", + "mikey179/vfsstream": "~1.2", + "mockery/mockery": "~0.9@dev", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.4", + "symfony/expression-language": "~2.4" + }, + "suggest": { + "ext-twig": "Enabling the twig extension improves the generation of twig based templates.", + "ext-xslcache": "Enabling the XSLCache extension improves the generation of xml based templates." + }, + "bin": [ + "bin/phpdoc.php", + "bin/phpdoc" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "2.9-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/" + ], + "Cilex\\Provider": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Documentation Generator for PHP", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "api", + "application", + "dga", + "documentation", + "phpdoc" + ], + "time": "2016-05-22T09:50:56+00:00" + }, + { + "name": "phpdocumentor/reflection", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Reflection.git", + "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d", + "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.0", + "php": ">=5.3.3", + "phpdocumentor/reflection-docblock": "~2.0", + "psr/log": "~1.0" + }, + "require-dev": { + "behat/behat": "~2.4", + "mockery/mockery": "~0.8", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/", + "tests/mocks/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Reflection library to do Static Analysis for PHP Projects", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2016-05-21T08:42:32+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2016-01-25T08:17:30+00:00" + }, + { + "name": "phpmd/phpmd", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/phpmd/phpmd.git", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/4e9924b2c157a3eb64395460fcf56b31badc8374", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "pdepend/pdepend": "^2.5", + "php": ">=5.3.9" + }, + "require-dev": { + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.0" + }, + "bin": [ + "src/bin/phpmd" + ], + "type": "project", + "autoload": { + "psr-0": { + "PHPMD\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + } + ], + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "http://phpmd.org/", + "keywords": [ + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" + ], + "time": "2017-01-20T14:41:10+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "time": "2015-07-25T16:39:46+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.5", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/dfd6be44111a7c41c2e884a336cc4f461b3b2401", + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2018-02-19T10:16:54+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" + }, + "require-dev": { + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" + }, + "suggest": { + "ext-xdebug": "^2.5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.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" + ], + "time": "2017-04-02T07:44:40+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.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" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "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" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-11-27T05:48:46+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "5.7.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "00d72b8dbd2bb7d6f02a820e6db5cb70df6ac55c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/00d72b8dbd2bb7d6f02a820e6db5cb70df6ac55c", + "reference": "00d72b8dbd2bb7d6f02a820e6db5cb70df6ac55c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "^4.0.3", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "~1.0", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0|~2.0", + "symfony/yaml": "~2.1|~3.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.7.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": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2016-12-01T17:04:00+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2017-06-30T09:13:00+00:00" + }, + { + "name": "pimple/pimple", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple is a simple Dependency Injection Container for PHP 5.3", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2013-11-22T08:30:29+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-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/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.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": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-11-26T07:53:53+00:00" + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "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": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-11-19T08:54:04+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "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": "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/", + "time": "2017-02-18T15:18:39+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "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": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-11-19T07:33:16+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "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": "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", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2018-01-24T12:46:19+00:00" + }, + { + "name": "symfony/config", + "version": "v2.8.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "17605ff58313d9fe94e507620a399721fc347b6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/17605ff58313d9fe94e507620a399721fc347b6d", + "reference": "17605ff58313d9fe94e507620a399721fc347b6d", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/filesystem": "~2.3|~3.0.0" + }, + "require-dev": { + "symfony/yaml": "~2.7|~3.0.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2018-01-21T19:03:25+00:00" + }, + { + "name": "symfony/console", + "version": "v2.8.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "a6ff8b2ffa4eb43046828b303af2e3fedadacc27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/a6ff8b2ffa4eb43046828b303af2e3fedadacc27", + "reference": "a6ff8b2ffa4eb43046828b303af2e3fedadacc27", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/debug": "^2.7.2|~3.0.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1|~3.0.0", + "symfony/process": "~2.1|~3.0.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2018-02-26T15:33:21+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/697c527acd9ea1b2d3efac34d9806bf255278b0a", + "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2016-07-30T07:22:48+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v3.2.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "d9f2e62e1a93d52ad4e4f6faaf66f6eef723d761" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d9f2e62e1a93d52ad4e4f6faaf66f6eef723d761", + "reference": "d9f2e62e1a93d52ad4e4f6faaf66f6eef723d761", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "conflict": { + "symfony/yaml": "<3.2" + }, + "require-dev": { + "symfony/config": "~2.8|~3.0", + "symfony/expression-language": "~2.8|~3.0", + "symfony/yaml": "~3.2" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2017-07-28T15:22:55+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "f5d2d7dcc33b89e20c2696ea9afcbddf6540081c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f5d2d7dcc33b89e20c2696ea9afcbddf6540081c", + "reference": "f5d2d7dcc33b89e20c2696ea9afcbddf6540081c", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2018-02-11T16:53:59+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "b2da5009d9bacbd91d83486aa1f44c793a8c380d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b2da5009d9bacbd91d83486aa1f44c793a8c380d", + "reference": "b2da5009d9bacbd91d83486aa1f44c793a8c380d", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2016-07-20T05:43:46+00:00" + }, + { + "name": "symfony/finder", + "version": "v2.8.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "c5c751ccd50230b4517393344080a0eaf968bf2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/c5c751ccd50230b4517393344080a0eaf968bf2d", + "reference": "c5c751ccd50230b4517393344080a0eaf968bf2d", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2018-03-05T18:27:59+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" + }, + { + "name": "symfony/process", + "version": "v2.8.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "756f614c5061729ea245ac6717231f7e3bfb74f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/756f614c5061729ea245ac6717231f7e3bfb74f9", + "reference": "756f614c5061729ea245ac6717231f7e3bfb74f9", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2018-02-12T17:44:58+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v2.8.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "57021208ad9830f8f8390c1a9d7bb390f32be89e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/57021208ad9830f8f8390c1a9d7bb390f32be89e", + "reference": "57021208ad9830f8f8390c1a9d7bb390f32be89e", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:36:31+00:00" + }, + { + "name": "symfony/translation", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/eee6c664853fd0576f21ae25725cfffeafe83f26", + "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/config": "<2.8" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0", + "symfony/intl": "~2.8|~3.0", + "symfony/yaml": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "time": "2016-07-30T07:22:48+00:00" + }, + { + "name": "symfony/validator", + "version": "v2.8.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "848ef2ed49b90998abe6804736e3297716248bbf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/848ef2ed49b90998abe6804736e3297716248bbf", + "reference": "848ef2ed49b90998abe6804736e3297716248bbf", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation": "~2.4|~3.0.0" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "egulias/email-validator": "^1.2.1", + "symfony/config": "~2.2|~3.0.0", + "symfony/expression-language": "~2.4|~3.0.0", + "symfony/http-foundation": "~2.3|~3.0.0", + "symfony/intl": "~2.7.25|^2.8.18|~3.2.5", + "symfony/property-access": "~2.3|~3.0.0", + "symfony/yaml": "^2.0.5|~3.0.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "egulias/email-validator": "Strict (RFC compliant) email validation", + "symfony/config": "", + "symfony/expression-language": "For using the 2.4 Expression validator", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For using the 2.4 Validator API", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Validator Component", + "homepage": "https://symfony.com", + "time": "2018-02-12T17:44:58+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.3.16", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "af615970e265543a26ee712c958404eb9b7ac93d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/af615970e265543a26ee712c958404eb9b7ac93d", + "reference": "af615970e265543a26ee712c958404eb9b7ac93d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2018-01-20T15:04:53+00:00" + }, + { + "name": "twig/twig", + "version": "v1.35.3", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/b48680b6eb7d16b5025b9bfc4108d86f6b8af86f", + "reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/debug": "^2.7", + "symfony/phpunit-bridge": "^3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.35-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ], + "time": "2018-03-20T04:25:58+00:00" + }, + { + "name": "zendframework/zend-cache", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-cache.git", + "reference": "c98331b96d3b9d9b24cf32d02660602edb34d039" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-cache/zipball/c98331b96d3b9d9b24cf32d02660602edb34d039", + "reference": "c98331b96d3b9d9b24cf32d02660602edb34d039", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpbench/phpbench": "^0.10.0", + "phpunit/phpunit": "^4.8", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-serializer": "^2.6", + "zendframework/zend-session": "^2.6.2" + }, + "suggest": { + "ext-apc": "APC or compatible extension, to use the APC storage adapter", + "ext-apcu": "APCU >= 5.1.0, to use the APCu storage adapter", + "ext-dba": "DBA, to use the DBA storage adapter", + "ext-memcache": "Memcache >= 2.0.0 to use the Memcache storage adapter", + "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter", + "ext-mongo": "Mongo, to use MongoDb storage adapter", + "ext-redis": "Redis, to use Redis storage adapter", + "ext-wincache": "WinCache, to use the WinCache storage adapter", + "ext-xcache": "XCache, to use the XCache storage adapter", + "mongofill/mongofill": "Alternative to ext-mongo - a pure PHP implementation designed as a drop in replacement", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-session": "Zend\\Session component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + }, + "zf": { + "component": "Zend\\Cache", + "config-provider": "Zend\\Cache\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a generic way to cache any data", + "homepage": "https://github.com/zendframework/zend-cache", + "keywords": [ + "cache", + "zf2" + ], + "time": "2016-12-16T11:35:47+00:00" + }, + { + "name": "zendframework/zend-config", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-config.git", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-config/zipball/2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-i18n": "^2.5", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", + "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://github.com/zendframework/zend-config", + "keywords": [ + "config", + "zf2" + ], + "time": "2016-02-04T23:01:10+00:00" + }, + { + "name": "zendframework/zend-eventmanager", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "9d72db10ceb6e42fb92350c0cb54460da61bd79c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/9d72db10ceb6e42fb92350c0cb54460da61bd79c", + "reference": "9d72db10ceb6e42fb92350c0cb54460da61bd79c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "^0.1", + "container-interop/container-interop": "^1.1.0", + "phpunit/phpunit": "^6.0.7 || ^5.7.14", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0" + }, + "suggest": { + "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev", + "dev-develop": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "event", + "eventmanager", + "events", + "zf2" + ], + "time": "2017-07-11T19:17:22+00:00" + }, + { + "name": "zendframework/zend-filter", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-filter.git", + "reference": "b8d0ff872f126631bf63a932e33aa2d22d467175" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/b8d0ff872f126631bf63a932e33aa2d22d467175", + "reference": "b8d0ff872f126631bf63a932e33aa2d22d467175", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "pear/archive_tar": "^1.4", + "phpunit/phpunit": "^6.0.10 || ^5.7.17", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-crypt": "^2.6 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "zendframework/zend-crypt": "Zend\\Crypt component, for encryption filters", + "zendframework/zend-i18n": "Zend\\I18n component for filters depending on i18n functionality", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for using the filter chain functionality", + "zendframework/zend-uri": "Zend\\Uri component, for the UriNormalize filter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + }, + "zf": { + "component": "Zend\\Filter", + "config-provider": "Zend\\Filter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Filter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed data filters", + "homepage": "https://github.com/zendframework/zend-filter", + "keywords": [ + "filter", + "zf2" + ], + "time": "2017-05-17T20:56:17+00:00" + }, + { + "name": "zendframework/zend-hydrator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-hydrator.git", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-hydrator/zipball/22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "^2.0@dev", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-inputfilter": "^2.6", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, to support aggregate hydrator usage", + "zendframework/zend-filter": "^2.6, to support naming strategy hydrator usage", + "zendframework/zend-serializer": "^2.6.1, to use the SerializableStrategy", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, to support hydrator plugin manager usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-release-1.0": "1.0-dev", + "dev-release-1.1": "1.1-dev", + "dev-master": "2.0-dev", + "dev-develop": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Hydrator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-hydrator", + "keywords": [ + "hydrator", + "zf2" + ], + "time": "2016-02-18T22:38:26+00:00" + }, + { + "name": "zendframework/zend-i18n", + "version": "2.7.4", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-i18n.git", + "reference": "d3431e29cc00c2a1c6704e601d4371dbf24f6a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/d3431e29cc00c2a1c6704e601d4371dbf24f6a31", + "reference": "d3431e29cc00c2a1c6704e601d4371dbf24f6a31", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^5.6", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-validator": "^2.6", + "zendframework/zend-view": "^2.6.3" + }, + "suggest": { + "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", + "zendframework/zend-filter": "You should install this package to use the provided filters", + "zendframework/zend-i18n-resources": "Translation resources", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "You should install this package to use the provided validators", + "zendframework/zend-view": "You should install this package to use the provided view helpers" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + }, + "zf": { + "component": "Zend\\I18n", + "config-provider": "Zend\\I18n\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\I18n\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-i18n", + "keywords": [ + "i18n", + "zf2" + ], + "time": "2017-05-17T17:00:12+00:00" + }, + { + "name": "zendframework/zend-json", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-json.git", + "reference": "4dd940e8e6f32f1d36ea6b0677ea57c540c7c19c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-json/zipball/4dd940e8e6f32f1d36ea6b0677ea57c540c7c19c", + "reference": "4dd940e8e6f32f1d36ea6b0677ea57c540c7c19c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" + }, + "suggest": { + "zendframework/zend-json-server": "For implementing JSON-RPC servers", + "zendframework/zend-xml2json": "For converting XML documents to JSON" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev", + "dev-develop": "3.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "keywords": [ + "ZendFramework", + "json", + "zf" + ], + "time": "2018-01-04T17:51:34+00:00" + }, + { + "name": "zendframework/zend-serializer", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-serializer.git", + "reference": "7ac42b9a47e9cb23895173a3096bc3b3fb7ac580" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/7ac42b9a47e9cb23895173a3096bc3b3fb7ac580", + "reference": "7ac42b9a47e9cb23895173a3096bc3b3fb7ac580", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-json": "^2.5 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "doctrine/instantiator": "1.0.*", + "phpunit/phpunit": "^5.5", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-math": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-math": "(^2.6 || ^3.0) To support Python Pickle serialization", + "zendframework/zend-servicemanager": "(^2.7.5 || ^3.0.3) To support plugin manager support" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev", + "dev-develop": "2.9-dev" + }, + "zf": { + "component": "Zend\\Serializer", + "config-provider": "Zend\\Serializer\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Serializer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", + "homepage": "https://github.com/zendframework/zend-serializer", + "keywords": [ + "serializer", + "zf2" + ], + "time": "2017-11-20T22:21:04+00:00" + }, + { + "name": "zendframework/zend-servicemanager", + "version": "2.7.10", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-servicemanager.git", + "reference": "ba7069c94c9af93122be9fa31cddd37f7707d5b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/ba7069c94c9af93122be9fa31cddd37f7707d5b4", + "reference": "ba7069c94c9af93122be9fa31cddd37f7707d5b4", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "dev-master", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-di": "~2.5", + "zendframework/zend-mvc": "~2.5" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", + "zendframework/zend-di": "Zend\\Di component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-servicemanager", + "keywords": [ + "servicemanager", + "zf2" + ], + "time": "2017-12-05T16:27:36+00:00" + }, + { + "name": "zendframework/zend-stdlib", + "version": "2.7.7", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-stdlib.git", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-hydrator": "~1.1" + }, + "require-dev": { + "athletic/athletic": "~0.1", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-inputfilter": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-eventmanager": "To support aggregate hydrator usage", + "zendframework/zend-filter": "To support naming strategy hydrator usage", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-release-2.7": "2.7-dev", + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-stdlib", + "keywords": [ + "stdlib", + "zf2" + ], + "time": "2016-04-12T21:17:31+00:00" + }, + { + "name": "zetacomponents/base", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Base.git", + "reference": "489e20235989ddc97fdd793af31ac803972454f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Base/zipball/489e20235989ddc97fdd793af31ac803972454f1", + "reference": "489e20235989ddc97fdd793af31ac803972454f1", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "zetacomponents/unit-test": "*" + }, + "type": "library", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sergey Alexeev" + }, + { + "name": "Sebastian Bergmann" + }, + { + "name": "Jan Borsodi" + }, + { + "name": "Raymond Bosman" + }, + { + "name": "Frederik Holljen" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Vadym Savchuk" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + } + ], + "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.", + "homepage": "https://github.com/zetacomponents", + "time": "2017-11-28T11:30:00+00:00" + }, + { + "name": "zetacomponents/document", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Document.git", + "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Document/zipball/688abfde573cf3fe0730f82538fbd7aa9fc95bc8", + "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8", + "shasum": "" + }, + "require": { + "zetacomponents/base": "*" + }, + "require-dev": { + "zetacomponents/unit-test": "dev-master" + }, + "type": "library", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sebastian Bergmann" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + } + ], + "description": "The Document components provides a general conversion framework for different semantic document markup languages like XHTML, Docbook, RST and similar.", + "homepage": "https://github.com/zetacomponents", + "time": "2013-12-19T11:40:00+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/sample/tpl.txt b/sample/tpl.txt index a6346a1..7d0fa4a 100644 --- a/sample/tpl.txt +++ b/sample/tpl.txt @@ -1,9 +1,9 @@ hello {{title}} {{name}} {{firstname}} The first primes numbers are: - + - {{primes.number}} - + Lets list all divisors of: diff --git a/test/TplBlockTest.php b/test/TplBlockTest.php index 659314d..04ee1ca 100644 --- a/test/TplBlockTest.php +++ b/test/TplBlockTest.php @@ -116,6 +116,33 @@ class TplBlockTest extends TestCase $this->assertFalse(strpos("WONT", $actual)); } + /** + * Test blocs with tabs spaces etc.. + * + * @return void + */ + public function testBlocsWithsWeirdSpaces() + { + $model = " + Bhah blah wpooie456 + + have to be shown + + + WONT to be shown + + "; + + $template = new TplBlock(); + + $actual = $template + ->addSubBlock(new TplBlock("bloc")) + ->applyTplStr($model); + + $this->assertContains("have", $actual); + $this->assertFalse(strpos("WONT", $actual)); + } + /** * Test if error on blocks names WTF. * diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 0000000..3a603f3 --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,7 @@ + "present", +} + +node default { + exec { "apt-get update": + command => "/usr/bin/apt-get update" + } + + package{["git", "python-setuptools", "wget", "make", "texlive-latex-recommended", "texlive-latex-extra", "texlive-fonts-recommended", "openjdk-6-jre", "php5-cli", "php5-xdebug"]: + ensure => present, + require => Exec["apt-get update"] + } + + exec { "sudo easy_install -U sphinx": + command => "/usr/bin/sudo /usr/bin/easy_install -U sphinx", + require => [ Package["python-setuptools"] ], + timeout => 0 + } + + exec { "get-composer": + command => "/usr/bin/wget -N http://getcomposer.org/composer.phar", + require => Package["wget"], + cwd => "/vagrant" + } + + exec { "composer-install": + command => "/usr/bin/php composer.phar install --dev", + require => Exec["get-composer"], + cwd => "/vagrant" + } +} \ No newline at end of file diff --git a/vendor/cilex/cilex/.travis.yml b/vendor/cilex/cilex/.travis.yml new file mode 100644 index 0000000..337969a --- /dev/null +++ b/vendor/cilex/cilex/.travis.yml @@ -0,0 +1,13 @@ +language: php +php: + - 5.3 + - 5.4 + +before_script: + - composer install + +script: phpunit --coverage-text + +notifications: + email: + - mike.vanriel@naenius.com \ No newline at end of file diff --git a/vendor/cilex/cilex/LICENSE b/vendor/cilex/cilex/LICENSE new file mode 100644 index 0000000..4a89ad7 --- /dev/null +++ b/vendor/cilex/cilex/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012 Mike van Riel + +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. \ No newline at end of file diff --git a/vendor/cilex/cilex/README.md b/vendor/cilex/cilex/README.md new file mode 100644 index 0000000..180208b --- /dev/null +++ b/vendor/cilex/cilex/README.md @@ -0,0 +1,70 @@ +Cilex, a simple Command Line Interface framework +================================================ + +Cilex is a simple command line application framework to develop simple tools +based on [Symfony2][1] components: + +```php +command(new \Cilex\Command\GreetCommand()); +$app->run(); +``` + +Cilex works with PHP 5.3.3 or later and is heavily inspired on the [Silex][2] +web micro-framework by Fabien Potencier. + +## Installation + + 1. `git clone` _this_ repository. + 2. Download composer: `curl -s https://getcomposer.org/installer | php` + 3. Install Cilex' dependencies: `php composer.phar install` + 4. Create the phar: `php ./compile` + + + +## Usage + + - Download composer: `curl -s https://getcomposer.org/installer | php` + - Add to your dependencies: `php composer.phar require cilex/cilex dev-master` + - Update the dependencies + - Create a `run.php` file + +```php +command(new \Cilex\Command\GreetCommand()); +$app->run(); +``` + - `php run.php` + - enjoy a lot. + +## License + +Cilex is licensed under the MIT license. + +[1]: http://symfony.com +[2]: http://silex.sensiolabs.org +[3]: http://cilex.github.com/get/cilex.phar +[4]: http://cilex.github.com/documentation + +## FAQ + +Q: How do I pass configuration into the application? + +A: You can do this by adding the following line, where $configPath is the path to the configuration file you want to use: + +```php +$app->register(new \Cilex\Provider\ConfigServiceProvider(), array('config.path' => $configPath)); +``` + +The formats currently supported are: YAML, XML and JSON diff --git a/vendor/cilex/cilex/Vagrantfile b/vendor/cilex/cilex/Vagrantfile new file mode 100644 index 0000000..77770fd --- /dev/null +++ b/vendor/cilex/cilex/Vagrantfile @@ -0,0 +1,13 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant::Config.run do |config| + config.vm.box = "precise64" + config.vm.box_url = "http://files.vagrantup.com/precise64.box" + + config.vm.provision :puppet do |puppet| + puppet.manifests_path = ".puppet/manifests" + puppet.manifest_file = "manifest.pp" + puppet.options = [ '--verbose' ] + end +end diff --git a/vendor/cilex/cilex/bin/compile b/vendor/cilex/cilex/bin/compile new file mode 100644 index 0000000..6af83f2 --- /dev/null +++ b/vendor/cilex/cilex/bin/compile @@ -0,0 +1,13 @@ +#!/usr/bin/env php +compile(); diff --git a/vendor/cilex/cilex/composer.json b/vendor/cilex/cilex/composer.json new file mode 100644 index 0000000..6b9dcb7 --- /dev/null +++ b/vendor/cilex/cilex/composer.json @@ -0,0 +1,32 @@ +{ + "name": "cilex/cilex", + "description": "The PHP micro-framework for Command line tools based on the Symfony2 Components", + "keywords": ["microframework","cli"], + "homepage": "http://cilex.github.com", + "license": "MIT", + "autoload":{ + "psr-0":{ "Cilex": "src/" } + }, + "authors":[ + { "name": "Mike van Riel", "email": "mike.vanriel@naenius.com" } + ], + "require":{ + "php": ">=5.3.3", + "pimple/pimple": "~1.0", + "symfony/process": "~2.1", + "symfony/finder": "~2.1", + "cilex/console-service-provider": "1.*" + }, + "require-dev":{ + "symfony/validator": "~2.1", + "phpunit/phpunit": "3.7.*" + }, + "suggest":{ + "monolog/monolog": ">=1.0.0", + "symfony/yaml": ">=1.0.0", + "symfony/validator": ">=1.0.0" + }, + "extra":{ + "branch-alias": { "dev-master": "1.0-dev" } + } +} diff --git a/vendor/cilex/cilex/composer.lock b/vendor/cilex/cilex/composer.lock new file mode 100644 index 0000000..821cfe5 --- /dev/null +++ b/vendor/cilex/cilex/composer.lock @@ -0,0 +1,884 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" + ], + "hash": "028ed7b39a4c2a5ccba9e34589868ee4", + "packages": [ + { + "name": "cilex/console-service-provider", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/Cilex/console-service-provider.git", + "reference": "1.0.0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Cilex/console-service-provider/zipball/1.0.0", + "reference": "1.0.0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "pimple/pimple": "1.*@dev", + "symfony/console": "~2.1" + }, + "require-dev": { + "cilex/cilex": "1.*@dev", + "silex/silex": "1.*@dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Cilex\\Provider\\Console": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "description": "Console Service Provider", + "keywords": [ + "cilex", + "console", + "pimple", + "service-provider", + "silex" + ], + "time": "2012-12-19 10:50:58" + }, + { + "name": "pimple/pimple", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/fabpot/Pimple.git", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fabpot/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "Pimple is a simple Dependency Injection Container for PHP 5.3", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2013-11-22 08:30:29" + }, + { + "name": "symfony/console", + "version": "v2.4.2", + "target-dir": "Symfony/Component/Console", + "source": { + "type": "git", + "url": "https://github.com/symfony/Console.git", + "reference": "940f217cbc3c8a33e5403e7c595495c4884400fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Console/zipball/940f217cbc3c8a33e5403e7c595495c4884400fe", + "reference": "940f217cbc3c8a33e5403e7c595495c4884400fe", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/event-dispatcher": "~2.1" + }, + "suggest": { + "symfony/event-dispatcher": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Console\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "http://symfony.com", + "time": "2014-02-11 13:52:09" + }, + { + "name": "symfony/finder", + "version": "v2.4.2", + "target-dir": "Symfony/Component/Finder", + "source": { + "type": "git", + "url": "https://github.com/symfony/Finder.git", + "reference": "b6735d1fc16da13c4c7dddfe78366a4a098cf011" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Finder/zipball/b6735d1fc16da13c4c7dddfe78366a4a098cf011", + "reference": "b6735d1fc16da13c4c7dddfe78366a4a098cf011", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Finder\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "http://symfony.com", + "time": "2014-01-07 13:28:54" + }, + { + "name": "symfony/process", + "version": "v2.4.2", + "target-dir": "Symfony/Component/Process", + "source": { + "type": "git", + "url": "https://github.com/symfony/Process.git", + "reference": "c175448bac997556f8ab972908a4e14c7291fb03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Process/zipball/c175448bac997556f8ab972908a4e14c7291fb03", + "reference": "c175448bac997556f8ab972908a4e14c7291fb03", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Process\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "http://symfony.com", + "time": "2014-02-11 13:52:09" + } + ], + "packages-dev": [ + { + "name": "phpunit/php-code-coverage", + "version": "1.2.17", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "6ef2bf3a1c47eca07ea95f0d8a902a6340390b34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6ef2bf3a1c47eca07ea95f0d8a902a6340390b34", + "reference": "6ef2bf3a1c47eca07ea95f0d8a902a6340390b34", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": ">=1.3.0@stable", + "phpunit/php-text-template": ">=1.2.0@stable", + "phpunit/php-token-stream": ">=1.1.3@stable" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*@dev" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "PHP/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.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" + ], + "time": "2014-03-28 10:53:45" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.3.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", + "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "File/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.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" + ], + "time": "2013-10-10 15:34:57" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", + "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "Text/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2014-01-30 17:20:04" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", + "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "PHP/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2013-08-02 07:42:54" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32", + "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "PHP/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2014-03-03 05:10:30" + }, + { + "name": "phpunit/phpunit", + "version": "3.7.34", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "248d6ce95e6ca7f0e3135252c0b984bbe1f52f19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/248d6ce95e6ca7f0e3135252c0b984bbe1f52f19", + "reference": "248d6ce95e6ca7f0e3135252c0b984bbe1f52f19", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpunit/php-code-coverage": "~1.2", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.1", + "phpunit/php-timer": "~1.0", + "phpunit/phpunit-mock-objects": "~1.2", + "symfony/yaml": "~2.0" + }, + "require-dev": { + "pear-pear.php.net/pear": "1.9.4" + }, + "suggest": { + "ext-json": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "composer/bin/phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.7.x-dev" + } + }, + "autoload": { + "classmap": [ + "PHPUnit/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "", + "../../symfony/yaml/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "http://www.phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2014-03-28 11:04:36" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "1.2.3", + "source": { + "type": "git", + "url": "git://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "1.2.3" + }, + "dist": { + "type": "zip", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects/archive/1.2.3.zip", + "reference": "1.2.3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-text-template": ">=1.1.1@stable" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "autoload": { + "classmap": [ + "PHPUnit/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2013-01-13 10:24:48" + }, + { + "name": "symfony/property-access", + "version": "v2.4.2", + "target-dir": "Symfony/Component/PropertyAccess", + "source": { + "type": "git", + "url": "https://github.com/symfony/PropertyAccess.git", + "reference": "37fe0c2dc494b47db4b0850e9dcba3a27cc45c0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/PropertyAccess/zipball/37fe0c2dc494b47db4b0850e9dcba3a27cc45c0c", + "reference": "37fe0c2dc494b47db4b0850e9dcba3a27cc45c0c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\PropertyAccess\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony PropertyAccess Component", + "homepage": "http://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "time": "2014-02-11 15:39:28" + }, + { + "name": "symfony/translation", + "version": "v2.4.2", + "target-dir": "Symfony/Component/Translation", + "source": { + "type": "git", + "url": "https://github.com/symfony/Translation.git", + "reference": "b00fd07417e493e08488e87bcebeb9681fc7323b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Translation/zipball/b00fd07417e493e08488e87bcebeb9681fc7323b", + "reference": "b00fd07417e493e08488e87bcebeb9681fc7323b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/config": "~2.0", + "symfony/yaml": "~2.2" + }, + "suggest": { + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "http://symfony.com", + "time": "2014-02-03 17:15:33" + }, + { + "name": "symfony/validator", + "version": "v2.4.2", + "target-dir": "Symfony/Component/Validator", + "source": { + "type": "git", + "url": "https://github.com/symfony/Validator.git", + "reference": "64d7a54f97a5f53a98864a7461822e341f9416b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Validator/zipball/64d7a54f97a5f53a98864a7461822e341f9416b5", + "reference": "64d7a54f97a5f53a98864a7461822e341f9416b5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/property-access": "~2.2", + "symfony/translation": "~2.0" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "symfony/config": "~2.2", + "symfony/http-foundation": "~2.1", + "symfony/intl": "~2.3", + "symfony/yaml": "~2.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader", + "symfony/config": "", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Validator\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Validator Component", + "homepage": "http://symfony.com", + "time": "2014-02-11 13:52:09" + }, + { + "name": "symfony/yaml", + "version": "v2.4.2", + "target-dir": "Symfony/Component/Yaml", + "source": { + "type": "git", + "url": "https://github.com/symfony/Yaml.git", + "reference": "bb6ddaf8956139d1b8c360b4b713ed0138e876b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Yaml/zipball/bb6ddaf8956139d1b8c360b4b713ed0138e876b3", + "reference": "bb6ddaf8956139d1b8c360b4b713ed0138e876b3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Yaml\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "http://symfony.com", + "time": "2014-01-07 13:28:54" + } + ], + "aliases": [ + + ], + "minimum-stability": "stable", + "stability-flags": [ + + ], + "platform": { + "php": ">=5.3.3" + }, + "platform-dev": [ + + ] +} diff --git a/vendor/cilex/cilex/docs/.static/logo.png b/vendor/cilex/cilex/docs/.static/logo.png new file mode 100644 index 0000000..443cb8d Binary files /dev/null and b/vendor/cilex/cilex/docs/.static/logo.png differ diff --git a/vendor/cilex/cilex/docs/Makefile b/vendor/cilex/cilex/docs/Makefile new file mode 100644 index 0000000..9e18768 --- /dev/null +++ b/vendor/cilex/cilex/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = .build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Cilex.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Cilex.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/Cilex" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Cilex" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/vendor/cilex/cilex/docs/conf.py b/vendor/cilex/cilex/docs/conf.py new file mode 100644 index 0000000..1b7d77f --- /dev/null +++ b/vendor/cilex/cilex/docs/conf.py @@ -0,0 +1,45 @@ +import sys, os + +templates_path = ['.templates'] +source_suffix = '.rst' +master_doc = 'index' +project = u'Cilex' +copyright = u'2013, Mike van Riel' + +version = '1.0' +release = '1.0.0-alpha1' +pygments_style = 'sphinx' + +html_theme = 'agogo' +html_static_path = ['.static'] +htmlhelp_basename = 'Cilexdoc' + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { + 'papersize': 'a4paper', + 'pointsize': '10pt', +} + +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'Cilex.tex', u'Cilex Documentation', u'Mike van Riel', 'manual'), +] + +latex_logo = '.static/logo.png' + +# -- Options for manual page output -------------------------------------------- + +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'cilex', u'Cilex Documentation', [u'Mike van Riel'], 1) +] + +# -- Options for Texinfo output ------------------------------------------------ + +# (source start file, target name, title, author, dir menu entry, description, +# category) +texinfo_documents = [ + ('index', 'Cilex', u'Cilex Documentation', u'Mike van Riel', 'Cilex', 'One line description of project.', + 'Miscellaneous'), +] \ No newline at end of file diff --git a/vendor/cilex/cilex/docs/index.rst b/vendor/cilex/cilex/docs/index.rst new file mode 100644 index 0000000..9f0518a --- /dev/null +++ b/vendor/cilex/cilex/docs/index.rst @@ -0,0 +1,9 @@ +Cilex' documentation +==================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + usage \ No newline at end of file diff --git a/vendor/cilex/cilex/docs/usage.rst b/vendor/cilex/cilex/docs/usage.rst new file mode 100644 index 0000000..5b1b070 --- /dev/null +++ b/vendor/cilex/cilex/docs/usage.rst @@ -0,0 +1,82 @@ +Usage +===== + +Installation +------------ + +The easiest way to get started is to use Composer_ using the following steps: + +1. Create a file name ``composer.json`` with the following contents: + + .. code-block:: json + + { + "require": { + "cilex/cilex": "1.0.*@dev" + } + } + +2. Download Composer_ and install the project + + .. code-block:: bash + + $ curl -s http://getcomposer.org/installer | php + $ php composer.phar install + +Upgrading +--------- + +Cilex can be upgraded using Composer_ by calling the update command: + + .. code-block:: bash + + $ php composer.phar update + +Bootstrap +--------- + +The simplest example of a Cilex application is by including the autoloader, instantiating the Cilex application class +and calling the ``run`` method. The following example demonstrates this principle: + +.. code-block:: php + + run(); + +Calling your new application is as simple as the following line: + +.. code-block:: bash + + $ php application.php + +Even without actual commands you are greeted with an informative description what to do next: + +.. code-block:: bash + + NameOfMyApplication version + + Usage: + [options] command [arguments] + + Options: + --help -h Display this help message. + --quiet -q Do not output any message. + --verbose -v Increase verbosity of messages. + --version -V Display this application version. + --ansi Force ANSI output. + --no-ansi Disable ANSI output. + --no-interaction -n Do not ask any interactive question. + + Available commands: + help Displays help for a command + list Lists commands + +.. _Composer: http://getcomposer.org diff --git a/vendor/cilex/cilex/example.php b/vendor/cilex/cilex/example.php new file mode 100644 index 0000000..98ab3c4 --- /dev/null +++ b/vendor/cilex/cilex/example.php @@ -0,0 +1,6 @@ +command(new \Cilex\Command\GreetCommand()); +$app->run(); \ No newline at end of file diff --git a/vendor/cilex/cilex/phpunit.xml.dist b/vendor/cilex/cilex/phpunit.xml.dist new file mode 100644 index 0000000..fd6bc9a --- /dev/null +++ b/vendor/cilex/cilex/phpunit.xml.dist @@ -0,0 +1,19 @@ + + + + + + ./tests/Cilex/ + + + \ No newline at end of file diff --git a/vendor/cilex/cilex/src/Cilex/Application.php b/vendor/cilex/cilex/src/Cilex/Application.php new file mode 100644 index 0000000..f78bed8 --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/Application.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex; + +use \Symfony\Component\Console; +use \Cilex\Provider\Console\ConsoleServiceProvider; + +/** + * The Cilex framework class. + * + * @author Mike van Riel + * + * @api + */ +class Application extends \Pimple +{ + /** + * Version number for Cilex + */ + const VERSION = '1.0.0'; + + /** + * Registers the autoloader and necessary components. + * + * @param string $name Name for this application. + * @param string|null $version Version number for this application. + */ + public function __construct($name, $version = null, array $values = array()) + { + parent::__construct(); + + $consoleConfig = array('console.name' => $name); + if (null !== $version) { + $consoleConfig['console.version'] = $version; + } + $this->register(new ConsoleServiceProvider(), $consoleConfig); + + foreach ($values as $key => $value) { + $this[$key] = $value; + } + } + + /** + * Executes this application. + * + * @param bool $interactive runs in an interactive shell if true. + * + * @return void + */ + public function run($interactive = false) + { + $app = $this['console']; + if ($interactive) { + $app = new Console\Shell($app); + } + + $app->run(); + } + + /** + * Adds a command object. + * + * If a command with the same name already exists, it will be overridden. + * + * @param \Cilex\Command\Command $command A Command object + * + * @api + * + * @return void + */ + public function command(Console\Command\Command $command) + { + $this['console']->add($command); + } + + /** + * Registers a service provider. + * + * @param \Cilex\ServiceProviderInterface|\Silex\ServiceProviderInterface $provider + * A ServiceProviderInterface instance + * @param mixed[] $values + * An array of values that customizes the provider + * + * @return void + */ + public function register($provider, array $values = array()) + { + if ((!$provider instanceof \Cilex\ServiceProviderInterface) + && (!$provider instanceof \Silex\ServiceProviderInterface) + ) { + throw new \InvalidArgumentException( + 'Extensions should implement either Cilex or Silex\' ServiceProviderInterface' + ); + } + + $provider->register($this); + + foreach ($values as $key => $value) { + $this[$key] = $value; + } + } +} diff --git a/vendor/cilex/cilex/src/Cilex/Command/Command.php b/vendor/cilex/cilex/src/Cilex/Command/Command.php new file mode 100644 index 0000000..c5fef0b --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/Command/Command.php @@ -0,0 +1,55 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Command; + +use \Symfony\Component\Console; + +/** + * Base class for Cilex commands. + * + * @author Mike van Riel + * + * @api + */ +abstract class Command extends Console\Command\Command +{ + /** + * Returns the application container. + * + * @return \Cilex\Application + */ + public function getContainer() + { + return $this->getApplication()->getContainer(); + } + + /** + * Returns a service contained in the application container or null if none + * is found with that name. + * + * This is a convenience method used to retrieve an element from the + * Application container without having to assign the results of the + * getContainer() method in every call. + * + * @param string $name Name of the service + * + * @see self::getContainer() + * + * @api + * + * @return \stdClass|null + */ + public function getService($name) + { + return $this->getApplication()->getService($name); + } +} diff --git a/vendor/cilex/cilex/src/Cilex/Command/DemoInfoCommand.php b/vendor/cilex/cilex/src/Cilex/Command/DemoInfoCommand.php new file mode 100644 index 0000000..4c88ac1 --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/Command/DemoInfoCommand.php @@ -0,0 +1,41 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Command; + +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Command\Command as BaseCommand; + +/** + * Example command for testing purposes. + */ +class DemoInfoCommand extends BaseCommand +{ + protected function configure() + { + $this + ->setName('demo:info') + ->setDescription('Get Application Information'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + // This is a contrived example to show accessing services + // from the container without needing the command itself + // to extend from anything but Symfony Console's base Command. + + $app = $this->getApplication()->getService('console'); + + $output->writeln('Name: ' . $app->getName()); + $output->writeln('Version: ' . $app->getVersion()); + } +} diff --git a/vendor/cilex/cilex/src/Cilex/Command/GreetCommand.php b/vendor/cilex/cilex/src/Cilex/Command/GreetCommand.php new file mode 100644 index 0000000..b7d8587 --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/Command/GreetCommand.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Command; + +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +/** + * Example command for testing purposes. + */ +class GreetCommand extends Command +{ + protected function configure() + { + $this + ->setName('demo:greet') + ->setDescription('Greet someone') + ->addArgument('name', InputArgument::OPTIONAL, 'Who do you want to greet?') + ->addOption('yell', null, InputOption::VALUE_NONE, 'If set, the task will yell in uppercase letters'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $text = 'Hello'; + $name = $input->getArgument('name'); + if ($name) { + $text .= ' '.$name; + } + + if ($input->getOption('yell')) { + $text = strtoupper($text); + } + + $output->writeln($text); + } +} diff --git a/vendor/cilex/cilex/src/Cilex/Compiler.php b/vendor/cilex/cilex/src/Cilex/Compiler.php new file mode 100644 index 0000000..259325b --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/Compiler.php @@ -0,0 +1,184 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex; + +use Symfony\Component\Finder\Finder; +use Symfony\Component\Process\Process; + +/** + * The Compiler class compiles the Cilex framework. + * + * This is an adapted version of the Silex\Compiler class. + * + * @author Fabien Potencier + * @author Mike van Riel + */ +class Compiler +{ + protected $version; + + /** + * Compiles the Cilex source code into one single Phar file. + * + * @param string $pharFile Name of the output Phar file + */ + public function compile($pharFile = 'cilex.phar') + { + if (file_exists($pharFile)) { + unlink($pharFile); + } + + $process = new Process('git log --pretty="%h %ci" -n1 HEAD'); + if ($process->run() > 0) { + throw new \RuntimeException('The git binary cannot be found.'); + } + $this->version = trim($process->getOutput()); + + $phar = new \Phar($pharFile, 0, 'cilex.phar'); + $phar->setSignatureAlgorithm(\Phar::SHA1); + + $phar->startBuffering(); + + $finder = new Finder(); + $finder->files() + ->ignoreVCS(true) + ->name('*.php') + ->notName('Compiler.php') + ->in(__DIR__.'/..') + ->in(__DIR__.'/../../vendor/pimple/pimple/lib') + ->in(__DIR__.'/../../vendor/cilex/console-service-provider') + ->in(__DIR__.'/../../vendor/symfony/console/Symfony/Component/Console'); + + foreach ($finder as $file) { + $this->addFile($phar, $file); + } + + $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../LICENSE'), false); + + $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/autoload.php')); + $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/ClassLoader.php')); + $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/autoload_real.php')); + $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/autoload_namespaces.php')); + $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../vendor/composer/autoload_classmap.php')); + + // Stubs + $phar->setStub($this->getStub()); + + $phar->stopBuffering(); + + // $phar->compressFiles(\Phar::GZ); + + unset($phar); + } + + protected function addFile(\Phar $phar, \splFileInfo $file, $strip = true) + { + $path = str_replace(dirname(dirname(__DIR__)).DIRECTORY_SEPARATOR, '', $file->getRealPath()); + + $content = file_get_contents($file); + if ($strip) { + $content = self::stripWhitespace($content); + } + $content = str_replace('@package_version@', $this->version, $content); + + $phar->addFromString($path, $content); + } + + protected function getStub() + { + return <<<'EOF' + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +Phar::mapPhar('cilex.phar'); + +require_once 'phar://cilex.phar/vendor/autoload.php'; + +if ('cli' === php_sapi_name() && basename(__FILE__) === basename($_SERVER['argv'][0]) && isset($_SERVER['argv'][1])) { + switch ($_SERVER['argv'][1]) { + case 'update': + $remoteFilename = 'http://cilex.github.com/get/cilex.phar'; + $localFilename = __DIR__.'/cilex.phar'; + + file_put_contents($localFilename, file_get_contents($remoteFilename)); + break; + + case 'check': + $latest = trim(file_get_contents('http://cilex.github.com/get/version')); + + if ($latest != Cilex\Application::VERSION) { + printf("A newer Cilex version is available (%s).\n", $latest); + } else { + print("You are using the latest Cilex version.\n"); + } + break; + + case 'version': + printf("Cilex version %s\n", Cilex\Application::VERSION); + break; + + default: + printf("Unknown command '%s' (available commands: version, check, and update).\n", $_SERVER['argv'][1]); + } + + exit(0); +} + +__HALT_COMPILER(); +EOF; + } + + /** + * Removes whitespace from a PHP source string while preserving line numbers. + * + * Based on Kernel::stripComments(), but keeps line numbers intact. + * + * @param string $source A PHP string + * + * @return string The PHP string with the whitespace removed + */ + public static function stripWhitespace($source) + { + if (!function_exists('token_get_all')) { + return $source; + } + + $output = ''; + foreach (token_get_all($source) as $token) { + if (is_string($token)) { + $output .= $token; + } elseif (in_array($token[0], array(T_COMMENT, T_DOC_COMMENT))) { + $output .= str_repeat("\n", substr_count($token[1], "\n")); + } elseif (T_WHITESPACE === $token[0]) { + // reduce wide spaces + $whitespace = preg_replace('{[ \t]+}', ' ', $token[1]); + // normalize newlines to \n + $whitespace = preg_replace('{(?:\r\n|\r|\n)}', "\n", $whitespace); + // trim leading spaces + $whitespace = preg_replace('{\n +}', "\n", $whitespace); + $output .= $whitespace; + } else { + $output .= $token[1]; + } + } + + return $output; + } +} diff --git a/vendor/cilex/cilex/src/Cilex/Provider/ConfigServiceProvider.php b/vendor/cilex/cilex/src/Cilex/Provider/ConfigServiceProvider.php new file mode 100644 index 0000000..96a8376 --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/Provider/ConfigServiceProvider.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Provider; + +use Cilex\Application; +use Cilex\ServiceProviderInterface; +use Symfony\Component\Yaml; + +class ConfigServiceProvider implements ServiceProviderInterface +{ + public function register(Application $app) + { + $app['config'] = $app->share( + function () use ($app) { + if (!file_exists($app['config.path'])) { + throw new \InvalidArgumentException( + $app['config.path'] . ' is not a valid path to the ' + .'configuration' + ); + } + + $fullpath = explode('.', $app['config.path']); + + switch (strtolower(end($fullpath))) { + case 'php': + $result = include($app['config.path']); + break; + case 'yml': + $parser = new Yaml\Parser(); + $result = new \ArrayObject( + $parser->parse(file_get_contents($app['config.path'])) + ); + break; + case 'xml': + $result = simplexml_load_file($app['config.path']); + break; + case 'json': + $result = json_decode(file_get_contents($app['config.path'])); + + if (null == $result) { + + throw new \InvalidArgumentException( + 'Unable to decode the configuration file: ' . $app['config.path'] + ); + } + break; + default: + throw new \InvalidArgumentException( + 'Unable to load configuration; the provided file extension was not recognized. ' + .'Only yml, xml or json allowed' + ); + break; + } + + return $result; + } + ); + } +} diff --git a/vendor/cilex/cilex/src/Cilex/Provider/DoctrineServiceProvider.php b/vendor/cilex/cilex/src/Cilex/Provider/DoctrineServiceProvider.php new file mode 100644 index 0000000..c1cb20e --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/Provider/DoctrineServiceProvider.php @@ -0,0 +1,148 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Provider; + +use Cilex\Application; +use Cilex\ServiceProviderInterface; +use Doctrine\DBAL\DriverManager; +use Doctrine\DBAL\Configuration; +use Doctrine\Common\EventManager; + +/** + * Doctrine DBAL Provider. + * + * This Service Provider is an adaptation of the DoctrineServiceProvider for + * Silex written by Fabien Potencier. + * + * @author Fabien Potencier + * @author Mike van Riel + */ +class DoctrineServiceProvider implements ServiceProviderInterface +{ + public function register(Application $app) + { + $app['db.default_options'] = array( + 'driver' => 'pdo_mysql', + 'dbname' => null, + 'host' => 'localhost', + 'user' => 'root', + 'password' => null, + ); + + $app['dbs.options.initializer'] = $app->protect( + function () use ($app) { + static $initialized = false; + + if ($initialized) { + return; + } + + $initialized = true; + + if (!isset($app['dbs.options'])) { + $app['dbs.options'] = array('default' => isset($app['db.options']) ? $app['db.options'] : array()); + } + + $tmp = $app['dbs.options']; + foreach ($tmp as $name => &$options) { + $options = array_replace($app['db.default_options'], $options); + + if (!isset($app['dbs.default'])) { + $app['dbs.default'] = $name; + } + } + $app['dbs.options'] = $tmp; + } + ); + + $app['dbs'] = $app->share( + function () use ($app) { + $app['dbs.options.initializer'](); + + $dbs = new \Pimple(); + foreach ($app['dbs.options'] as $name => $options) { + if ($app['dbs.default'] === $name) { + // we use shortcuts here in case the default has been overriden + $config = $app['db.config']; + $manager = $app['db.event_manager']; + } else { + $config = $app['dbs.config'][$name]; + $manager = $app['dbs.event_manager'][$name]; + } + + $dbs[$name] = DriverManager::getConnection($options, $config, $manager); + } + + return $dbs; + } + ); + + $app['dbs.config'] = $app->share( + function () use ($app) { + $app['dbs.options.initializer'](); + + $configs = new \Pimple(); + foreach ($app['dbs.options'] as $name => $options) { + $configs[$name] = new Configuration(); + } + + return $configs; + } + ); + + $app['dbs.event_manager'] = $app->share( + function () use ($app) { + $app['dbs.options.initializer'](); + + $managers = new \Pimple(); + foreach ($app['dbs.options'] as $name => $options) { + $managers[$name] = new EventManager(); + } + + return $managers; + } + ); + + // shortcuts for the "first" DB + $app['db'] = $app->share( + function () use ($app) { + $dbs = $app['dbs']; + + return $dbs[$app['dbs.default']]; + } + ); + + $app['db.config'] = $app->share( + function () use ($app) { + $dbs = $app['dbs.config']; + + return $dbs[$app['dbs.default']]; + } + ); + + $app['db.event_manager'] = $app->share( + function () use ($app) { + $dbs = $app['dbs.event_manager']; + + return $dbs[$app['dbs.default']]; + } + ); + + if (isset($app['db.dbal.class_path'])) { + $app['autoloader']->registerNamespace('Doctrine\\DBAL', $app['db.dbal.class_path']); + } + + if (isset($app['db.common.class_path'])) { + $app['autoloader']->registerNamespace('Doctrine\\Common', $app['db.common.class_path']); + } + } +} diff --git a/vendor/cilex/cilex/src/Cilex/Provider/MonologServiceProvider.php b/vendor/cilex/cilex/src/Cilex/Provider/MonologServiceProvider.php new file mode 100644 index 0000000..2ece7a9 --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/Provider/MonologServiceProvider.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Provider; + +use Monolog\Logger; +use Monolog\Handler\StreamHandler; + +use Cilex\Application; +use Cilex\ServiceProviderInterface; + +/** + * Monolog Provider. + * + * This class is an adaptation of the Silex MonologServiceProvider written by + * Fabien Potencier. + * + * @author Fabien Potencier + * @author Mike van Riel + */ +class MonologServiceProvider implements ServiceProviderInterface +{ + public function register(Application $app) + { + $app['monolog'] = $app->share( + function () use ($app) { + $log = new Logger(isset($app['monolog.name']) ? $app['monolog.name'] : 'myapp'); + $app['monolog.configure']($log); + + return $log; + } + ); + + $app['monolog.configure'] = $app->protect( + function ($log) use ($app) { + $log->pushHandler($app['monolog.handler']); + } + ); + + $app['monolog.handler'] = function () use ($app) { + return new StreamHandler($app['monolog.logfile'], $app['monolog.level']); + }; + + if (!isset($app['monolog.level'])) { + $app['monolog.level'] = function () { + return Logger::DEBUG; + }; + } + + if (isset($app['monolog.class_path'])) { + $app['autoloader']->registerNamespace('Monolog', $app['monolog.class_path']); + } + } +} diff --git a/vendor/cilex/cilex/src/Cilex/Provider/ValidatorServiceProvider.php b/vendor/cilex/cilex/src/Cilex/Provider/ValidatorServiceProvider.php new file mode 100644 index 0000000..66ae633 --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/Provider/ValidatorServiceProvider.php @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Provider; + +use Cilex\Application; +use Cilex\ServiceProviderInterface; + +use Symfony\Component\Validator\Validator; +use Symfony\Component\Validator\Mapping\ClassMetadataFactory; +use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader; +use Symfony\Component\Validator\ConstraintValidatorFactory; +use Symfony\Component\Validator\DefaultTranslator; + +/** + * Symfony Validator component Provider. + * + * This class is an adaptation of the Silex MonologServiceProvider written by + * Fabien Potencier. + * + * @author Fabien Potencier + * @author Mike van Riel + */ +class ValidatorServiceProvider implements ServiceProviderInterface +{ + public function register(Application $app) + { + $app['validator'] = $app->share( + function () use ($app) { + return new Validator( + $app['validator.mapping.class_metadata_factory'], + $app['validator.validator_factory'], + $app['validator.default_translator'] + ); + } + ); + + $app['validator.mapping.class_metadata_factory'] = $app->share( + function () use ($app) { + return new ClassMetadataFactory(new StaticMethodLoader()); + } + ); + + $app['validator.validator_factory'] = $app->share( + function () { + return new ConstraintValidatorFactory(); + } + ); + + $app['validator.default_translator'] = $app->share( + function () { + if (!class_exists('Symfony\\Component\\Validator\\DefaultTranslator')){ + return array(); + } + + return new DefaultTranslator(); + } + ); + + if (isset($app['validator.class_path'])) { + $app['autoloader']->registerNamespace('Symfony\\Component\\Validator', $app['validator.class_path']); + } + } +} diff --git a/vendor/cilex/cilex/src/Cilex/ServiceProviderInterface.php b/vendor/cilex/cilex/src/Cilex/ServiceProviderInterface.php new file mode 100644 index 0000000..8136df8 --- /dev/null +++ b/vendor/cilex/cilex/src/Cilex/ServiceProviderInterface.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex; + +/** + * Interface that must implement all Cilex service providers. + * + * @author Mike van Riel + */ +interface ServiceProviderInterface +{ + /** + * Registers services on the given app. + * + * @param Application $app An Application instance + */ + public function register(Application $app); +} diff --git a/vendor/cilex/cilex/tests/Cilex/Tests/ApplicationTest.php b/vendor/cilex/cilex/tests/Cilex/Tests/ApplicationTest.php new file mode 100644 index 0000000..d25a0cb --- /dev/null +++ b/vendor/cilex/cilex/tests/Cilex/Tests/ApplicationTest.php @@ -0,0 +1,99 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Tests; + +use \Cilex\Application; + +/** + * Mock class used to test the register method. + */ +class ServiceProviderMock implements \Cilex\ServiceProviderInterface +{ + /** + * Mock method to satisfy interface + * + * @param \Cilex\Application $app + * + * @return void + */ + function register(\Cilex\Application $app) + { + $app['mock.param'] = false; + $app['mock'] = $this; + } +} + +/** + * Application test cases. + * + * @author Mike van Riel + */ +class ApplicationTest extends \PHPUnit_Framework_TestCase +{ + const NAME = 'Test'; + const VERSION = '1.0.1'; + + /** @var \Cilex\Application */ + protected $fixture = null; + + /** + * Sets up the test fixture. + */ + public function setUp() + { + $this->fixture = new Application(self::NAME, self::VERSION); + } + + /** + * Tests whether the constructor instantiates the correct dependencies and + * correctly sets the name on the Console's Application. + */ + public function testConstruct() + { + $this->assertInstanceOf( + '\\Symfony\\Component\\Console\\Application', + $this->fixture['console'] + ); + + $this->assertEquals(self::NAME, $this->fixture['console']->getName()); + $this->assertEquals(self::VERSION, $this->fixture['console']->getVersion()); + } + + /** + * Tests the command method to see if the command is properly set and the + * Cilex application is added as container. + */ + public function testCommand() + { + $this->assertFalse($this->fixture['console']->has('demo:greet')); + $this->fixture->command(new \Cilex\Command\GreetCommand()); + $this->assertTrue($this->fixture['console']->has('demo:greet')); + + $this->assertSame( + $this->fixture, + $this->fixture['console']->get('demo:greet')->getContainer() + ); + } + + /** + * Tests whether the register method applies the provided parameters to this + * application and correctly registers the ServiceProvider. + */ + public function testRegister() + { + $provider = new ServiceProviderMock(); + $this->fixture->register($provider, array('mock.param' => true)); + + $this->assertTrue($this->fixture['mock.param']); + $this->assertSame($this->fixture['mock'], $provider); + } +} diff --git a/vendor/cilex/cilex/tests/Cilex/Tests/Command/CommandTest.php b/vendor/cilex/cilex/tests/Cilex/Tests/Command/CommandTest.php new file mode 100644 index 0000000..970013d --- /dev/null +++ b/vendor/cilex/cilex/tests/Cilex/Tests/Command/CommandTest.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Tests\Command; + +use \Cilex\Command; + +class CommandMock extends Command\Command {} + +/** + * Command\Command test cases. + * + * @author Mike van Riel + */ +class CommandTest extends \PHPUnit_Framework_TestCase +{ + /** @var \Cilex\Command\Command */ + protected $fixture = null; + + /** + * Sets up the test fixture. + */ + public function setUp() + { + $this->fixture = new CommandMock('demo:test'); + } + + /** + * Tests the getContainer method. + */ + public function testContainer() + { + $app = new \Cilex\Application('Test'); + $app->command($this->fixture); + + $this->assertSame($app, $this->fixture->getContainer()); + } + + /** + * Tests whether the getService method correctly retrieves an element from + * the container. + */ + public function testGetService() + { + $app = new \Cilex\Application('Test'); + $app->command($this->fixture); + + $this->assertInstanceOf( + '\Symfony\Component\Console\Application', + $this->fixture->getService('console') + ); + } +} diff --git a/vendor/cilex/cilex/tests/Cilex/Tests/Provider/ConfigServerProviderTest.php b/vendor/cilex/cilex/tests/Cilex/Tests/Provider/ConfigServerProviderTest.php new file mode 100644 index 0000000..9136ed1 --- /dev/null +++ b/vendor/cilex/cilex/tests/Cilex/Tests/Provider/ConfigServerProviderTest.php @@ -0,0 +1,136 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + * + * @author Ben Selby + */ + +namespace Cilex\Tests\Provider; + +use Cilex\Application; +use Cilex\Provider\ConfigServiceProvider; + +/** + * Test file for ConfigServiceProvider + * + * @author Ben Selby + */ +class ConfigServiceProviderTest extends \PHPUnit_Framework_TestCase +{ + /** + * Test that an exception is thrown if the config path is not present + * or valid + * + * @return void + */ + public function testRegisterWillThrowExceptionIfConfigPathIsNotThere() + { + $this->setExpectedException( + 'InvalidArgumentException', + __DIR__.'/../../../data/unknownfile is not a valid path to the configuration' + ); + + $app = new Application('Test'); + + $app->register( + new ConfigServiceProvider(), + array( + 'config.path' => __DIR__.'/../../../data/unknownfile' + ) + ); + + $config = $app['config']; + } + + /** + * Test that the config provider can parse a json + * configuration file + * + * @return void + */ + public function testRegisterCanParseAJsonConfigFile() + { + $app = new Application('Test'); + + $app->register( + new ConfigServiceProvider(), + array( + 'config.path' => __DIR__.'/../../../data/config.json' + ) + ); + + $config = $app['config']; + $this->assertEquals($config->key, 'value'); + } + + public function testCanParseAPhpConfigFile() + { + $app = new Application('Test'); + + $app->register( + new ConfigServiceProvider(), + array( + 'config.path' => __DIR__.'/../../../data/config.php' + ) + ); + $config = $app['config']; + $this->assertEquals($config['key'], 'value'); + } + + /** + * Test that the config provider can throw an exception if + * the json configuration file is invalid + * + * @return void + */ + public function testRegisterThrowsExceptionInCaseOfInvalidJsonConfigFile() + { + $configPath = __DIR__.'/../../../data/config-invalid.json'; + + $this->setExpectedException( + 'InvalidArgumentException', + 'Unable to decode the configuration file: ' . $configPath + ); + + $app = new Application('Test'); + + $app->register( + new ConfigServiceProvider(), + array( + 'config.path' => $configPath + ) + ); + + $config = $app['config']; + } + + /** + * Test that register will throw an exception if an unknown + * format is passed in + * + * @return void + */ + public function testRegisterThrowsExceptionIfAnUnknownFormatIsPassed() + { + $this->setExpectedException( + 'InvalidArgumentException', + 'Unable to load configuration; the provided file extension was not recognized. Only yml, xml or json allowed' + ); + + $app = new Application('Test'); + + $app->register( + new ConfigServiceProvider(), + array( + 'config.path' => __DIR__.'/../../../data/config.unknownfiletype' + ) + ); + + $config = $app['config']; + } +} diff --git a/vendor/cilex/cilex/tests/Cilex/Tests/Provider/ValidatorServiceProviderTest.php b/vendor/cilex/cilex/tests/Cilex/Tests/Provider/ValidatorServiceProviderTest.php new file mode 100644 index 0000000..3172fa9 --- /dev/null +++ b/vendor/cilex/cilex/tests/Cilex/Tests/Provider/ValidatorServiceProviderTest.php @@ -0,0 +1,52 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Tests\Provider; + +use Cilex\Application; +use Cilex\Provider\ValidatorServiceProvider; + +/** + * ValidatorServiceProvider. + * + * Originally provided with the Silex Framework; test has been adapted for Cilex. + * + * @author Javier Lopez + * @author Mike van Riel + */ +class ValidatorServiceProviderTest extends \PHPUnit_Framework_TestCase +{ + public function setUp() + { + if (!is_dir(__DIR__.'/../../../../vendor/symfony/validator/Symfony/Component/Validator')) { + $this->markTestSkipped('Validator submodule was not installed.'); + } + } + + public function testRegister() + { + $app = new Application('Test'); + + $app->register(new ValidatorServiceProvider(), array( + 'validator.class_path' => __DIR__.'/../../../../vendor/Symfony/Component/Validator' + )); + + return $app; + } + + /** + * @depends testRegister + */ + public function testValidatorServiceIsAValidator($app) + { + $this->assertInstanceOf('Symfony\Component\Validator\Validator', $app['validator']); + } +} \ No newline at end of file diff --git a/vendor/cilex/cilex/tests/data/config-invalid.json b/vendor/cilex/cilex/tests/data/config-invalid.json new file mode 100644 index 0000000..6d911da --- /dev/null +++ b/vendor/cilex/cilex/tests/data/config-invalid.json @@ -0,0 +1,4 @@ +{ + "key": "value" + "missing": "comma" +} \ No newline at end of file diff --git a/vendor/cilex/cilex/tests/data/config.json b/vendor/cilex/cilex/tests/data/config.json new file mode 100644 index 0000000..a977d99 --- /dev/null +++ b/vendor/cilex/cilex/tests/data/config.json @@ -0,0 +1,3 @@ +{ + "key": "value" +} \ No newline at end of file diff --git a/vendor/cilex/cilex/tests/data/config.php b/vendor/cilex/cilex/tests/data/config.php new file mode 100644 index 0000000..7d6a69c --- /dev/null +++ b/vendor/cilex/cilex/tests/data/config.php @@ -0,0 +1,4 @@ + 'value' +); diff --git a/vendor/cilex/cilex/tests/data/config.unknownfiletype b/vendor/cilex/cilex/tests/data/config.unknownfiletype new file mode 100644 index 0000000..e69de29 diff --git a/vendor/cilex/console-service-provider/.gitignore b/vendor/cilex/console-service-provider/.gitignore new file mode 100644 index 0000000..cb756e9 --- /dev/null +++ b/vendor/cilex/console-service-provider/.gitignore @@ -0,0 +1,2 @@ +vendor +.idea \ No newline at end of file diff --git a/vendor/cilex/console-service-provider/README.md b/vendor/cilex/console-service-provider/README.md new file mode 100644 index 0000000..9018cbb --- /dev/null +++ b/vendor/cilex/console-service-provider/README.md @@ -0,0 +1,163 @@ +Console Service Provider +======================== + +Provides [Console][symfony/console] as a service to [Pimple][pimple] applications. + + +Requirements +------------ + + * PHP 5.3+ + * Symfony Console ~2.1 + + + +Installation +------------ + +Through [Composer][composer] as [cilex/console-service-provider][cilex/console-service-provider]. + + +Usage +----- + +### Pimple + +```php +register($app); + +$app['console']->run(); +``` + + +### Silex + +To use the Console Service Provider in a Silex application register the +Console Service Provider Silex adapter. + +```php +register(new ConsoleServiceProvider(), array( + 'console.name' => 'MyApp', + 'console.version' => '1.0.5', +)); + +$app['console']->run(); +``` + +### Cilex + +The Console Service Provider is baked into the Cilex Application itself so +there is no need to register it manually. + +```php +run(); +``` + + +Configuration +------------- + +### Parameters + + * **console.name**: + Name for the console application. + * **console.version**: + Version for the console application. + * **console.class**: + Class for the console application to be created. + +### Services + + * **console**: + Console Application, instance `Symfony\Component\Console\Application`. + + +The Console Service Provider Application Class +---------------------------------------------- + +By default Console Service Provider will instantiate an instance of +`Cilex\Pimple\Provider\Console\Application`. + +### Methods + +#### getContainer() : \Pimple + +Returns the Pimple container. + +#### getService($name) : \stdClass|null + +Returns a service contained in the application container or null if none +is found with that name. Convenience method to avoid repeated calls to +`getContainer()` or having to assign the container. + + +Accessing the Container and Services from Commands +-------------------------------------------------- + +Here are some examples of accessing the Container and Services from a Command: + +```php +getApplication()->getContainer(); + + // Direct access to a service. + $service = $this->getApplication->getService('some.service'); + } +} +``` + + +Future +------ + +In the event that Pimple Service Providers become a reality, `ConsoleServiceProvider` +will implement the appropriate interface. As soon as Cilex and Silex become Pimple +Service Provider aware, their respective adapter classes can be bypassed and the +core `ConsoleServiceProvider` can be used directly. + + +License +------- + +MIT, see LICENSE. + + +[symfony/console]: http://symfony.com/doc/current/components/console/introduction.html +[pimple]: http://pimple.sensiolabs.org +[composer]: http://getcomposer.org +[cilex/console-service-provider]: https://packagist.org/packages/cilex/console-service-provider diff --git a/vendor/cilex/console-service-provider/composer.json b/vendor/cilex/console-service-provider/composer.json new file mode 100644 index 0000000..5de9f6d --- /dev/null +++ b/vendor/cilex/console-service-provider/composer.json @@ -0,0 +1,27 @@ +{ + "name": "cilex/console-service-provider", + "description": "Console Service Provider", + "keywords": ["pimple", "cilex", "silex", "console", "service-provider"], + "license": "MIT", + "authors": [ + { "name": "Mike van Riel", "email": "mike.vanriel@naenius.com" }, + { "name": "Beau Simensen", "email": "beau@dflydev.com" } + ], + "require": { + "php": ">=5.3.3", + "pimple/pimple": "1.*@dev", + "symfony/console": "~2.1" + }, + "require-dev": { + "cilex/cilex": "1.*@dev", + "silex/silex": "1.*@dev" + }, + "autoload": { + "psr-0": { "Cilex\\Provider\\Console": "src" } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + } +} diff --git a/vendor/cilex/console-service-provider/composer.lock b/vendor/cilex/console-service-provider/composer.lock new file mode 100644 index 0000000..d1e4c7c --- /dev/null +++ b/vendor/cilex/console-service-provider/composer.lock @@ -0,0 +1,110 @@ +{ + "hash": "52d1f50b5bb3e0f2626a352a0ed2a947", + "packages": [ + { + "name": "pimple/pimple", + "version": "dev-master", + "source": { + "type": "git", + "url": "git://github.com/fabpot/Pimple.git", + "reference": "v1.0.1" + }, + "dist": { + "type": "zip", + "url": "https://github.com/fabpot/Pimple/archive/v1.0.1.zip", + "reference": "v1.0.1", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2012-11-11 08:32:34", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "source", + "autoload": { + "psr-0": { + "Pimple": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple is a simple Dependency Injection Container for PHP 5.3", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "dependency injection", + "container" + ] + }, + { + "name": "symfony/console", + "version": "v2.1.4", + "target-dir": "Symfony/Component/Console", + "source": { + "type": "git", + "url": "https://github.com/symfony/Console", + "reference": "v2.1.4" + }, + "dist": { + "type": "zip", + "url": "https://github.com/symfony/Console/archive/v2.1.4.zip", + "reference": "v2.1.4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2012-11-09 08:52:51", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Symfony\\Component\\Console": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "http://symfony.com" + } + ], + "packages-dev": null, + "aliases": [ + + ], + "minimum-stability": "stable", + "stability-flags": { + "pimple/pimple": 20, + "cilex/cilex": 20, + "silex/silex": 20 + } +} diff --git a/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/Adapter/Silex/ConsoleServiceProvider.php b/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/Adapter/Silex/ConsoleServiceProvider.php new file mode 100644 index 0000000..d41245c --- /dev/null +++ b/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/Adapter/Silex/ConsoleServiceProvider.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Provider\Console\Adapter\Silex; + +use Cilex\Provider\Console\BaseConsoleServiceProvider; +use Silex\Application; +use Silex\ServiceProviderInterface; + +/** + * Silex Console Service Provider adapter + * + * @author Beau Simensen + */ +class ConsoleServiceProvider implements ServiceProviderInterface +{ + /** + * {@inheritdoc} + */ + public function boot(Application $app) + { + } + + /** + * {@inheritdoc} + */ + public function register(Application $app) + { + $serviceProvider = new BaseConsoleServiceProvider; + $serviceProvider->register($app); + } +} diff --git a/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/BaseConsoleServiceProvider.php b/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/BaseConsoleServiceProvider.php new file mode 100644 index 0000000..43da0d1 --- /dev/null +++ b/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/BaseConsoleServiceProvider.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Provider\Console; + +/** + * Pimple Console Service Provider + * + * @author Beau Simensen + */ +class BaseConsoleServiceProvider +{ + /** + * {@inheritdoc} + */ + public function register(\Pimple $container) + { + foreach ($this->getDefaults() as $key => $value) { + if (!isset($container[$key])) { + $container[$key] = $value; + } + } + + $container['console'] = $container->share(function() use ($container) { + $class = $container['console.class']; + $instance = new $class( + isset($container['console.name']) ? $container['console.name'] : '', + isset($container['console.version']) ? $container['console.version'] : null + ); + + if ($instance instanceof ContainerAwareApplication) { + $instance->setContainer($container); + } + + return $instance; + }); + } + + protected function getDefaults() + { + return array( + 'console.name' => 'Cilex Application', + 'console.class' => 'Cilex\Provider\Console\ContainerAwareApplication', + ); + } +} diff --git a/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/ConsoleServiceProvider.php b/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/ConsoleServiceProvider.php new file mode 100644 index 0000000..3336e16 --- /dev/null +++ b/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/ConsoleServiceProvider.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Provider\Console; + +use Cilex\Application; +use Cilex\ServiceProviderInterface; + +/** + * Cilex Console Service Provider + * + * @author Beau Simensen + */ +class ConsoleServiceProvider implements ServiceProviderInterface +{ + /** + * {@inheritdoc} + */ + public function register(Application $app) + { + $serviceProvider = new BaseConsoleServiceProvider(); + $serviceProvider->register($app); + } +} diff --git a/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/ContainerAwareApplication.php b/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/ContainerAwareApplication.php new file mode 100644 index 0000000..608c646 --- /dev/null +++ b/vendor/cilex/console-service-provider/src/Cilex/Provider/Console/ContainerAwareApplication.php @@ -0,0 +1,77 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Cilex\Provider\Console; + +use Symfony\Component\Console\Application; + +/** + * Cilex Pimple Console Application + * + * @author Beau Simensen + */ +class ContainerAwareApplication extends Application +{ + /** @var \Pimple */ + private $container; + + /** + * Constructor + * + * @param string $name The name of the application + * @param string $version The version of the application + */ + public function __construct($name = 'UNKNOWN', $version = 'UNKNOWN') + { + parent::__construct($name, $version); + } + + /** + * Sets a container instance onto this application. + * + * @param \Pimple $container + * + * @return void + */ + public function setContainer(\Pimple $container) + { + $this->container = $container; + } + + /** + * Get the Container. + * + * @return \Pimple + */ + public function getContainer() + { + return $this->container; + } + + /** + * Returns a service contained in the application container or null if none is found with that name. + * + * This is a convenience method used to retrieve an element from the Application container without having to assign + * the results of the getContainer() method in every call. + * + * @param string $name Name of the service. + * + * @see self::getContainer() + * + * @api + * + * @return mixed|null + */ + public function getService($name) + { + return isset($this->container[$name]) ? $this->container[$name] : null; + } +} diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php new file mode 100644 index 0000000..2c72175 --- /dev/null +++ b/vendor/composer/ClassLoader.php @@ -0,0 +1,445 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoritative = false; + private $missingClasses = array(); + private $apcuPrefix; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath.'\\'; + if (isset($this->prefixDirsPsr4[$search])) { + foreach ($this->prefixDirsPsr4[$search] as $dir) { + $length = $this->prefixLengthsPsr4[$first][$search]; + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE new file mode 100644 index 0000000..f0157a6 --- /dev/null +++ b/vendor/composer/LICENSE @@ -0,0 +1,56 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Composer +Upstream-Contact: Jordi Boggiano +Source: https://github.com/composer/composer + +Files: * +Copyright: 2016, Nils Adermann + 2016, Jordi Boggiano +License: Expat + +Files: src/Composer/Util/TlsHelper.php +Copyright: 2016, Nils Adermann + 2016, Jordi Boggiano + 2013, Evan Coury +License: Expat and BSD-2-Clause + +License: BSD-2-Clause + 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. + . + 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 OWNER 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. + +License: Expat + 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. diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..b5f1e84 --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,4788 @@ + $vendorDir . '/phpunit/php-token-stream/tests/_fixture/source2.php', + 'AbstractMockTestClass' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/AbstractMockTestClass.php', + 'AbstractTest' => $vendorDir . '/phpunit/phpunit/tests/_files/AbstractTest.php', + 'AbstractTrait' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/AbstractTrait.php', + 'Acme\\Tester' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/IntrospectionProcessorTest.php', + 'AnInterface' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/AnInterface.php', + 'AnInterfaceWithReturnType' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/AnInterfaceWithReturnType.php', + 'AnotherInterface' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/AnotherInterface.php', + 'AssertionExample' => $vendorDir . '/phpunit/phpunit/tests/_files/AssertionExample.php', + 'AssertionExampleTest' => $vendorDir . '/phpunit/phpunit/tests/_files/AssertionExampleTest.php', + 'Author' => $vendorDir . '/phpunit/phpunit/tests/_files/Author.php', + 'BankAccount' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/BankAccount.php', + 'BankAccountException' => $vendorDir . '/phpunit/phpunit/tests/_files/BankAccount.php', + 'BankAccountTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/BankAccountTest.php', + 'BankAccountWithCustomExtensionTest' => $vendorDir . '/phpunit/phpunit/tests/_files/BankAccountTest.test.php', + 'Bar' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/source_with_ignore.php', + 'BaseTestListenerSample' => $vendorDir . '/phpunit/phpunit/tests/_files/BaseTestListenerSample.php', + 'BeforeAndAfterTest' => $vendorDir . '/phpunit/phpunit/tests/_files/BeforeAndAfterTest.php', + 'BeforeClassAndAfterClassTest' => $vendorDir . '/phpunit/phpunit/tests/_files/BeforeClassAndAfterClassTest.php', + 'BeforeClassWithOnlyDataProviderTest' => $vendorDir . '/phpunit/phpunit/tests/_files/BeforeClassWithOnlyDataProviderTest.php', + 'Book' => $vendorDir . '/phpunit/phpunit/tests/_files/Book.php', + 'Bor' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/source_with_ignore.php', + 'CExtDisablingNodeVisitor' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Calculator' => $vendorDir . '/phpunit/phpunit/tests/_files/Calculator.php', + 'CallableTestClass' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/CallTest.php', + 'ChangeCurrentWorkingDirectoryTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ChangeCurrentWorkingDirectoryTest.php', + 'ChildProcessClass1351' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1351/ChildProcessClass1351.php', + 'ChildSuite' => $vendorDir . '/phpunit/phpunit/tests/Regression/Trac/783/ChildSuite.php', + 'Cilex\\Application' => $vendorDir . '/cilex/cilex/src/Cilex/Application.php', + 'Cilex\\Command\\Command' => $vendorDir . '/cilex/cilex/src/Cilex/Command/Command.php', + 'Cilex\\Command\\DemoInfoCommand' => $vendorDir . '/cilex/cilex/src/Cilex/Command/DemoInfoCommand.php', + 'Cilex\\Command\\GreetCommand' => $vendorDir . '/cilex/cilex/src/Cilex/Command/GreetCommand.php', + 'Cilex\\Compiler' => $vendorDir . '/cilex/cilex/src/Cilex/Compiler.php', + 'Cilex\\Provider\\ConfigServiceProvider' => $vendorDir . '/cilex/cilex/src/Cilex/Provider/ConfigServiceProvider.php', + 'Cilex\\Provider\\Console\\Adapter\\Silex\\ConsoleServiceProvider' => $vendorDir . '/cilex/console-service-provider/src/Cilex/Provider/Console/Adapter/Silex/ConsoleServiceProvider.php', + 'Cilex\\Provider\\Console\\BaseConsoleServiceProvider' => $vendorDir . '/cilex/console-service-provider/src/Cilex/Provider/Console/BaseConsoleServiceProvider.php', + 'Cilex\\Provider\\Console\\ConsoleServiceProvider' => $vendorDir . '/cilex/console-service-provider/src/Cilex/Provider/Console/ConsoleServiceProvider.php', + 'Cilex\\Provider\\Console\\ContainerAwareApplication' => $vendorDir . '/cilex/console-service-provider/src/Cilex/Provider/Console/ContainerAwareApplication.php', + 'Cilex\\Provider\\DoctrineServiceProvider' => $vendorDir . '/cilex/cilex/src/Cilex/Provider/DoctrineServiceProvider.php', + 'Cilex\\Provider\\JmsSerializerServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/Cilex/Provider/JmsSerializerServiceProvider.php', + 'Cilex\\Provider\\MonologServiceProvider' => $vendorDir . '/cilex/cilex/src/Cilex/Provider/MonologServiceProvider.php', + 'Cilex\\Provider\\ValidatorServiceProvider' => $vendorDir . '/cilex/cilex/src/Cilex/Provider/ValidatorServiceProvider.php', + 'Cilex\\ServiceProviderInterface' => $vendorDir . '/cilex/cilex/src/Cilex/ServiceProviderInterface.php', + 'Cilex\\Tests\\ApplicationTest' => $vendorDir . '/cilex/cilex/tests/Cilex/Tests/ApplicationTest.php', + 'Cilex\\Tests\\Command\\CommandMock' => $vendorDir . '/cilex/cilex/tests/Cilex/Tests/Command/CommandTest.php', + 'Cilex\\Tests\\Command\\CommandTest' => $vendorDir . '/cilex/cilex/tests/Cilex/Tests/Command/CommandTest.php', + 'Cilex\\Tests\\Provider\\ConfigServiceProviderTest' => $vendorDir . '/cilex/cilex/tests/Cilex/Tests/Provider/ConfigServerProviderTest.php', + 'Cilex\\Tests\\Provider\\ValidatorServiceProviderTest' => $vendorDir . '/cilex/cilex/tests/Cilex/Tests/Provider/ValidatorServiceProviderTest.php', + 'Cilex\\Tests\\ServiceProviderMock' => $vendorDir . '/cilex/cilex/tests/Cilex/Tests/ApplicationTest.php', + 'ClassThatImplementsSerializable' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/ClassThatImplementsSerializable.php', + 'ClassWithNonPublicAttributes' => $vendorDir . '/phpunit/phpunit/tests/_files/ClassWithNonPublicAttributes.php', + 'ClassWithScalarTypeDeclarations' => $vendorDir . '/phpunit/phpunit/tests/_files/ClassWithScalarTypeDeclarations.php', + 'ClassWithSelfTypeHint' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/ClassWithSelfTypeHint.php', + 'ClassWithStaticMethod' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/ClassWithStaticMethod.php', + 'ClassWithToString' => $vendorDir . '/phpunit/phpunit/tests/_files/ClassWithToString.php', + 'ClonedDependencyTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ClonedDependencyTest.php', + 'ConcreteTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ConcreteTest.php', + 'ConcreteWithMyCustomExtensionTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ConcreteTest.my.php', + 'CoreTestIterator' => $vendorDir . '/twig/twig/test/Twig/Tests/Extension/CoreTest.php', + 'CoreTestIteratorAggregate' => $vendorDir . '/twig/twig/test/Twig/Tests/Extension/CoreTest.php', + 'CoreTestIteratorAggregateAggregate' => $vendorDir . '/twig/twig/test/Twig/Tests/Extension/CoreTest.php', + 'CountTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/Constraint/CountTest.php', + 'CountableStub' => $vendorDir . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'CoverageClassExtendedTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageClassExtendedTest.php', + 'CoverageClassTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageClassTest.php', + 'CoverageFunctionParenthesesTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageFunctionParenthesesTest.php', + 'CoverageFunctionParenthesesWhitespaceTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageFunctionParenthesesWhitespaceTest.php', + 'CoverageFunctionTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageFunctionTest.php', + 'CoverageMethodOneLineAnnotationTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageMethodOneLineAnnotationTest.php', + 'CoverageMethodParenthesesTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageMethodParenthesesTest.php', + 'CoverageMethodParenthesesWhitespaceTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageMethodParenthesesWhitespaceTest.php', + 'CoverageMethodTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageMethodTest.php', + 'CoverageNamespacedFunctionTest' => $vendorDir . '/phpunit/phpunit/tests/_files/CoverageNamespacedFunctionTest.php', + 'CoverageNoneTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageNoneTest.php', + 'CoverageNotPrivateTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageNotPrivateTest.php', + 'CoverageNotProtectedTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageNotProtectedTest.php', + 'CoverageNotPublicTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageNotPublicTest.php', + 'CoverageNothingTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageNothingTest.php', + 'CoveragePrivateTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoveragePrivateTest.php', + 'CoverageProtectedTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageProtectedTest.php', + 'CoveragePublicTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoveragePublicTest.php', + 'CoverageTwoDefaultClassAnnotations' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoverageTwoDefaultClassAnnotations.php', + 'CoveredClass' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoveredClass.php', + 'CoveredClassWithAnonymousFunctionInStaticMethod' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/source_with_class_and_anonymous_function.php', + 'CoveredParentClass' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/CoveredClass.php', + 'CustomExtensionTest' => $vendorDir . '/twig/twig/test/Twig/Tests/CustomExtensionTest.php', + 'CustomPrinter' => $vendorDir . '/phpunit/phpunit/tests/_files/CustomPrinter.php', + 'D' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/D/D.php', + 'DataProviderDebugTest' => $vendorDir . '/phpunit/phpunit/tests/_files/DataProviderDebugTest.php', + 'DataProviderFilterTest' => $vendorDir . '/phpunit/phpunit/tests/_files/DataProviderFilterTest.php', + 'DataProviderIncompleteTest' => $vendorDir . '/phpunit/phpunit/tests/_files/DataProviderIncompleteTest.php', + 'DataProviderSkippedTest' => $vendorDir . '/phpunit/phpunit/tests/_files/DataProviderSkippedTest.php', + 'DataProviderTest' => $vendorDir . '/phpunit/phpunit/tests/_files/DataProviderTest.php', + 'DataProviderTestDoxTest' => $vendorDir . '/phpunit/phpunit/tests/_files/DataProviderTestDoxTest.php', + 'DeepCopy\\DeepCopy' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php', + 'DeepCopy\\Exception\\CloneException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php', + 'DeepCopy\\Exception\\PropertyException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php', + 'DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php', + 'DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php', + 'DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php', + 'DeepCopy\\Filter\\Filter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php', + 'DeepCopy\\Filter\\KeepFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php', + 'DeepCopy\\Filter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php', + 'DeepCopy\\Filter\\SetNullFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php', + 'DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php', + 'DeepCopy\\Matcher\\Matcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php', + 'DeepCopy\\Matcher\\PropertyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php', + 'DeepCopy\\Matcher\\PropertyNameMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php', + 'DeepCopy\\Matcher\\PropertyTypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php', + 'DeepCopy\\Reflection\\ReflectionHelper' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php', + 'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php', + 'DeepCopy\\TypeFilter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php', + 'DeepCopy\\TypeFilter\\ShallowCopyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php', + 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php', + 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', + 'DeepCopy\\TypeFilter\\TypeFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php', + 'DeepCopy\\TypeMatcher\\TypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php', + 'DeepCopy\\f001\\A' => $vendorDir . '/myclabs/deep-copy/fixtures/f001/A.php', + 'DeepCopy\\f001\\B' => $vendorDir . '/myclabs/deep-copy/fixtures/f001/B.php', + 'DeepCopy\\f002\\A' => $vendorDir . '/myclabs/deep-copy/fixtures/f002/A.php', + 'DeepCopy\\f003\\Foo' => $vendorDir . '/myclabs/deep-copy/fixtures/f003/Foo.php', + 'DeepCopy\\f004\\UnclonableItem' => $vendorDir . '/myclabs/deep-copy/fixtures/f004/UnclonableItem.php', + 'DeepCopy\\f005\\Foo' => $vendorDir . '/myclabs/deep-copy/fixtures/f005/Foo.php', + 'DeepCopy\\f006\\A' => $vendorDir . '/myclabs/deep-copy/fixtures/f006/A.php', + 'DeepCopy\\f006\\B' => $vendorDir . '/myclabs/deep-copy/fixtures/f006/B.php', + 'DeepCopy\\f007\\FooDateInterval' => $vendorDir . '/myclabs/deep-copy/fixtures/f007/FooDateInterval.php', + 'DeepCopy\\f007\\FooDateTimeZone' => $vendorDir . '/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php', + 'DeepCopy\\f008\\A' => $vendorDir . '/myclabs/deep-copy/fixtures/f008/A.php', + 'DeepCopy\\f008\\B' => $vendorDir . '/myclabs/deep-copy/fixtures/f008/B.php', + 'DependencyFailureTest' => $vendorDir . '/phpunit/phpunit/tests/_files/DependencyFailureTest.php', + 'DependencySuccessTest' => $vendorDir . '/phpunit/phpunit/tests/_files/DependencySuccessTest.php', + 'DependencyTestSuite' => $vendorDir . '/phpunit/phpunit/tests/_files/DependencyTestSuite.php', + 'Doctrine\\Common\\Annotations\\Annotation' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php', + 'Doctrine\\Common\\Annotations\\AnnotationException' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php', + 'Doctrine\\Common\\Annotations\\AnnotationReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php', + 'Doctrine\\Common\\Annotations\\AnnotationRegistry' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Attribute' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Attributes' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Enum' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php', + 'Doctrine\\Common\\Annotations\\Annotation\\IgnoreAnnotation' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Required' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Target' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php', + 'Doctrine\\Common\\Annotations\\CachedReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php', + 'Doctrine\\Common\\Annotations\\DocLexer' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php', + 'Doctrine\\Common\\Annotations\\DocParser' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php', + 'Doctrine\\Common\\Annotations\\FileCacheReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php', + 'Doctrine\\Common\\Annotations\\IndexedReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php', + 'Doctrine\\Common\\Annotations\\PhpParser' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php', + 'Doctrine\\Common\\Annotations\\Reader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php', + 'Doctrine\\Common\\Annotations\\SimpleAnnotationReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php', + 'Doctrine\\Common\\Annotations\\TokenParser' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php', + 'Doctrine\\Common\\Lexer\\AbstractLexer' => $vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php', + 'Doctrine\\Instantiator\\Exception\\ExceptionInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php', + 'Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php', + 'Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php', + 'Doctrine\\Instantiator\\Instantiator' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php', + 'Doctrine\\Instantiator\\InstantiatorInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', + 'DoubleTestCase' => $vendorDir . '/phpunit/phpunit/tests/_files/DoubleTestCase.php', + 'DummyException' => $vendorDir . '/phpunit/phpunit/tests/_files/DummyException.php', + 'EmptyTestCaseTest' => $vendorDir . '/phpunit/phpunit/tests/_files/EmptyTestCaseTest.php', + 'Example' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/php-code-coverage-issue-424.php', + 'ExceptionInAssertPostConditionsTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ExceptionInAssertPostConditionsTest.php', + 'ExceptionInAssertPreConditionsTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ExceptionInAssertPreConditionsTest.php', + 'ExceptionInSetUpTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ExceptionInSetUpTest.php', + 'ExceptionInTearDownTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ExceptionInTearDownTest.php', + 'ExceptionInTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ExceptionInTest.php', + 'ExceptionMessageRegExpTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/Constraint/ExceptionMessageRegExpTest.php', + 'ExceptionMessageTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/Constraint/ExceptionMessageTest.php', + 'ExceptionStackTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ExceptionStackTest.php', + 'ExceptionTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ExceptionTest.php', + 'Extensions_PhptTestCaseTest' => $vendorDir . '/phpunit/phpunit/tests/Extensions/PhptTestCaseTest.php', + 'Extensions_RepeatedTestTest' => $vendorDir . '/phpunit/phpunit/tests/Extensions/RepeatedTestTest.php', + 'Failure' => $vendorDir . '/phpunit/phpunit/tests/_files/Failure.php', + 'FailureTest' => $vendorDir . '/phpunit/phpunit/tests/_files/FailureTest.php', + 'FatalTest' => $vendorDir . '/phpunit/phpunit/tests/_files/FatalTest.php', + 'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php', + 'File_Iterator_Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php', + 'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php', + 'Foo' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/source_with_ignore.php', + 'FooObject' => $vendorDir . '/twig/twig/test/Twig/Tests/Extension/SandboxTest.php', + 'Foo\\BarScoped\\TestClass' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/classInScopedNamespace.php', + 'Foo\\Bar\\Baz' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/classExtendsNamespacedClass.php', + 'Foo\\Bar\\TestClass' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/classInNamespace.php', + 'Foo\\Bar\\TestClassInBar' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/multipleNamespacesWithOneClassUsingNonBraceSyntax.php', + 'Foo\\Baz\\TestClassInBaz' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/multipleNamespacesWithOneClassUsingNonBraceSyntax.php', + 'Foo\\CoveredClass' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoveredClass.php', + 'Foo\\CoveredParentClass' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoveredClass.php', + 'Foo_Bar_Issue684Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/Trac/684/Issue684Test.php', + 'Framework_AssertTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/AssertTest.php', + 'Framework_BaseTestListenerTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/BaseTestListenerTest.php', + 'Framework_ConstraintTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/ConstraintTest.php', + 'Framework_Constraint_IsJsonTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/Constraint/IsJsonTest.php', + 'Framework_Constraint_JsonMatchesTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/Constraint/JsonMatchesTest.php', + 'Framework_Constraint_JsonMatches_ErrorMessageProviderTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/Constraint/JsonMatches/ErrorMessageProviderTest.php', + 'Framework_MockBuilderTest' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/MockBuilderTest.php', + 'Framework_MockObjectTest' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/MockObjectTest.php', + 'Framework_MockObject_Builder_InvocationMockerTest' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/MockObject/Builder/InvocationMockerTest.php', + 'Framework_MockObject_GeneratorTest' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/GeneratorTest.php', + 'Framework_MockObject_Invocation_ObjectTest' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/MockObject/Invocation/ObjectTest.php', + 'Framework_MockObject_Invocation_StaticTest' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/MockObject/Invocation/StaticTest.php', + 'Framework_MockObject_Matcher_ConsecutiveParametersTest' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/MockObject/Matcher/ConsecutiveParametersTest.php', + 'Framework_ProxyObjectTest' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/ProxyObjectTest.php', + 'Framework_SuiteTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/SuiteTest.php', + 'Framework_TestCaseTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/TestCaseTest.php', + 'Framework_TestFailureTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/TestFailureTest.php', + 'Framework_TestImplementorTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/TestImplementorTest.php', + 'Framework_TestListenerTest' => $vendorDir . '/phpunit/phpunit/tests/Framework/TestListenerTest.php', + 'Gamegos\\CodeSniffer\\Helpers\\ClassHelper' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/ClassHelper.php', + 'Gamegos\\CodeSniffer\\Helpers\\RulesetHelper' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/RulesetHelper.php', + 'Gamegos\\Sniffs\\Arrays\\ArrayDeclarationSniff' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Arrays/ArrayDeclarationSniff.php', + 'Gamegos\\Sniffs\\Commenting\\DocCommentSniff' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/DocCommentSniff.php', + 'Gamegos\\Sniffs\\Commenting\\FunctionCommentSniff' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/FunctionCommentSniff.php', + 'Gamegos\\Sniffs\\Commenting\\VariableCommentSniff' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/VariableCommentSniff.php', + 'Gamegos\\Sniffs\\Formatting\\DisallowMultipleStatementsSniff' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Formatting/DisallowMultipleStatementsSniff.php', + 'Gamegos\\Sniffs\\Strings\\ConcatenationSpacingSniff' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Strings/ConcatenationSpacingSniff.php', + 'Gamegos\\Sniffs\\WhiteSpace\\FunctionSpacingSniff' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/FunctionSpacingSniff.php', + 'Gamegos\\Sniffs\\WhiteSpace\\MemberVarSpacingSniff' => $vendorDir . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/MemberVarSpacingSniff.php', + 'Herrera\\Json\\Exception\\Exception' => $vendorDir . '/herrera-io/json/src/lib/Herrera/Json/Exception/Exception.php', + 'Herrera\\Json\\Exception\\ExceptionInterface' => $vendorDir . '/herrera-io/json/src/lib/Herrera/Json/Exception/ExceptionInterface.php', + 'Herrera\\Json\\Exception\\FileException' => $vendorDir . '/herrera-io/json/src/lib/Herrera/Json/Exception/FileException.php', + 'Herrera\\Json\\Exception\\JsonException' => $vendorDir . '/herrera-io/json/src/lib/Herrera/Json/Exception/JsonException.php', + 'Herrera\\Json\\Json' => $vendorDir . '/herrera-io/json/src/lib/Herrera/Json/Json.php', + 'Herrera\\Json\\Tests\\Exception\\ExceptionTest' => $vendorDir . '/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/ExceptionTest.php', + 'Herrera\\Json\\Tests\\Exception\\JsonExceptionTest' => $vendorDir . '/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/JsonExceptionTest.php', + 'Herrera\\Json\\Tests\\JsonTest' => $vendorDir . '/herrera-io/json/src/tests/Herrera/Json/Tests/JsonTest.php', + 'Herrera\\Phar\\Update\\Exception\\Exception' => $vendorDir . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/Exception.php', + 'Herrera\\Phar\\Update\\Exception\\ExceptionInterface' => $vendorDir . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/ExceptionInterface.php', + 'Herrera\\Phar\\Update\\Exception\\FileException' => $vendorDir . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/FileException.php', + 'Herrera\\Phar\\Update\\Exception\\InvalidArgumentException' => $vendorDir . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/InvalidArgumentException.php', + 'Herrera\\Phar\\Update\\Exception\\LogicException' => $vendorDir . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/LogicException.php', + 'Herrera\\Phar\\Update\\Manager' => $vendorDir . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manager.php', + 'Herrera\\Phar\\Update\\ManagerTest' => $vendorDir . '/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManagerTest.php', + 'Herrera\\Phar\\Update\\Manifest' => $vendorDir . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manifest.php', + 'Herrera\\Phar\\Update\\Tests\\Exception\\ExceptionTest' => $vendorDir . '/herrera-io/phar-update/src/tests/Herrera/Phar/Update/Exception/ExceptionTest.php', + 'Herrera\\Phar\\Update\\Tests\\ManifestTest' => $vendorDir . '/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManifestTest.php', + 'Herrera\\Phar\\Update\\Tests\\UpdateTest' => $vendorDir . '/herrera-io/phar-update/src/tests/Herrera/Phar/Update/UpdateTest.php', + 'Herrera\\Phar\\Update\\Update' => $vendorDir . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Update.php', + 'IgnoreCodeCoverageClass' => $vendorDir . '/phpunit/phpunit/tests/_files/IgnoreCodeCoverageClass.php', + 'IgnoreCodeCoverageClassTest' => $vendorDir . '/phpunit/phpunit/tests/_files/IgnoreCodeCoverageClassTest.php', + 'IncompleteTest' => $vendorDir . '/phpunit/phpunit/tests/_files/IncompleteTest.php', + 'InheritanceA' => $vendorDir . '/phpunit/phpunit/tests/_files/Inheritance/InheritanceA.php', + 'InheritanceB' => $vendorDir . '/phpunit/phpunit/tests/_files/Inheritance/InheritanceB.php', + 'InheritedTestCase' => $vendorDir . '/phpunit/phpunit/tests/_files/InheritedTestCase.php', + 'IniTest' => $vendorDir . '/phpunit/phpunit/tests/_files/IniTest.php', + 'InterfaceWithSemiReservedMethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/InterfaceWithSemiReservedMethodName.php', + 'InterfaceWithStaticMethod' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/InterfaceWithStaticMethod.php', + 'Interop\\Container\\ContainerInterface' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/ContainerInterface.php', + 'Interop\\Container\\Exception\\ContainerException' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php', + 'Interop\\Container\\Exception\\NotFoundException' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php', + 'InvalidOperatorExtension' => $vendorDir . '/twig/twig/test/Twig/Tests/CustomExtensionTest.php', + 'IsolationTest' => $vendorDir . '/phpunit/phpunit/tests/_files/IsolationTest.php', + 'Issue1021Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/Trac/1021/Issue1021Test.php', + 'Issue1149Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1149/Issue1149Test.php', + 'Issue1216Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1216/Issue1216Test.php', + 'Issue1265Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1265/Issue1265Test.php', + 'Issue1330Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1330/Issue1330Test.php', + 'Issue1335Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1335/Issue1335Test.php', + 'Issue1337Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1337/Issue1337Test.php', + 'Issue1348Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1348/Issue1348Test.php', + 'Issue1351Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1351/Issue1351Test.php', + 'Issue1374Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1374/Issue1374Test.php', + 'Issue1437Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1437/Issue1437Test.php', + 'Issue1468Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1468/Issue1468Test.php', + 'Issue1471Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1471/Issue1471Test.php', + 'Issue1472Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1472/Issue1472Test.php', + 'Issue1570Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/1570/Issue1570Test.php', + 'Issue2158Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/2158/Issue2158Test.php', + 'Issue2366' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/2366/Issue2366Test.php', + 'Issue2366Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/2366/Issue2366Test.php', + 'Issue244Exception' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/244/Issue244Test.php', + 'Issue244ExceptionIntCode' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/244/Issue244Test.php', + 'Issue244Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/244/Issue244Test.php', + 'Issue322Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/322/Issue322Test.php', + 'Issue433Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/433/Issue433Test.php', + 'Issue445Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/445/Issue445Test.php', + 'Issue498Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/498/Issue498Test.php', + 'Issue503Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/503/Issue503Test.php', + 'Issue523' => $vendorDir . '/phpunit/phpunit/tests/Regression/Trac/523/Issue523Test.php', + 'Issue523Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/Trac/523/Issue523Test.php', + 'Issue578Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/Trac/578/Issue578Test.php', + 'Issue581Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/581/Issue581Test.php', + 'Issue74Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/74/Issue74Test.php', + 'Issue765Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/765/Issue765Test.php', + 'Issue797Test' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/797/Issue797Test.php', + 'IteratorAggregateStub' => $vendorDir . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'JMS\\Parser\\AbstractLexer' => $vendorDir . '/jms/parser-lib/src/JMS/Parser/AbstractLexer.php', + 'JMS\\Parser\\AbstractLexerTest' => $vendorDir . '/jms/parser-lib/tests/JMS/Parser/Tests/AbstractLexerTest.php', + 'JMS\\Parser\\AbstractParser' => $vendorDir . '/jms/parser-lib/src/JMS/Parser/AbstractParser.php', + 'JMS\\Parser\\SimpleLexer' => $vendorDir . '/jms/parser-lib/src/JMS/Parser/SimpleLexer.php', + 'JMS\\Parser\\SyntaxErrorException' => $vendorDir . '/jms/parser-lib/src/JMS/Parser/SyntaxErrorException.php', + 'JMS\\Parser\\Tests\\AbstractParserTest' => $vendorDir . '/jms/parser-lib/tests/JMS/Parser/Tests/AbstractParserTest.php', + 'JMS\\Serializer\\AbstractVisitor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/AbstractVisitor.php', + 'JMS\\Serializer\\Accessor\\AccessorStrategyInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Accessor/AccessorStrategyInterface.php', + 'JMS\\Serializer\\Accessor\\DefaultAccessorStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Accessor/DefaultAccessorStrategy.php', + 'JMS\\Serializer\\Accessor\\ExpressionAccessorStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Accessor/ExpressionAccessorStrategy.php', + 'JMS\\Serializer\\Annotation\\AccessType' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/AccessType.php', + 'JMS\\Serializer\\Annotation\\Accessor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Accessor.php', + 'JMS\\Serializer\\Annotation\\AccessorOrder' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/AccessorOrder.php', + 'JMS\\Serializer\\Annotation\\Discriminator' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Discriminator.php', + 'JMS\\Serializer\\Annotation\\Exclude' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Exclude.php', + 'JMS\\Serializer\\Annotation\\ExclusionPolicy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/ExclusionPolicy.php', + 'JMS\\Serializer\\Annotation\\Expose' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Expose.php', + 'JMS\\Serializer\\Annotation\\Groups' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Groups.php', + 'JMS\\Serializer\\Annotation\\HandlerCallback' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/HandlerCallback.php', + 'JMS\\Serializer\\Annotation\\Inline' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Inline.php', + 'JMS\\Serializer\\Annotation\\MaxDepth' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/MaxDepth.php', + 'JMS\\Serializer\\Annotation\\PostDeserialize' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/PostDeserialize.php', + 'JMS\\Serializer\\Annotation\\PostSerialize' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/PostSerialize.php', + 'JMS\\Serializer\\Annotation\\PreSerialize' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/PreSerialize.php', + 'JMS\\Serializer\\Annotation\\ReadOnly' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/ReadOnly.php', + 'JMS\\Serializer\\Annotation\\SerializedName' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/SerializedName.php', + 'JMS\\Serializer\\Annotation\\Since' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Since.php', + 'JMS\\Serializer\\Annotation\\SkipWhenEmpty' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/SkipWhenEmpty.php', + 'JMS\\Serializer\\Annotation\\Type' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Type.php', + 'JMS\\Serializer\\Annotation\\Until' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Until.php', + 'JMS\\Serializer\\Annotation\\Version' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/Version.php', + 'JMS\\Serializer\\Annotation\\VirtualProperty' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/VirtualProperty.php', + 'JMS\\Serializer\\Annotation\\XmlAttribute' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlAttribute.php', + 'JMS\\Serializer\\Annotation\\XmlAttributeMap' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlAttributeMap.php', + 'JMS\\Serializer\\Annotation\\XmlCollection' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlCollection.php', + 'JMS\\Serializer\\Annotation\\XmlDiscriminator' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlDiscriminator.php', + 'JMS\\Serializer\\Annotation\\XmlElement' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlElement.php', + 'JMS\\Serializer\\Annotation\\XmlKeyValuePairs' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlKeyValuePairs.php', + 'JMS\\Serializer\\Annotation\\XmlList' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlList.php', + 'JMS\\Serializer\\Annotation\\XmlMap' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlMap.php', + 'JMS\\Serializer\\Annotation\\XmlNamespace' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlNamespace.php', + 'JMS\\Serializer\\Annotation\\XmlRoot' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlRoot.php', + 'JMS\\Serializer\\Annotation\\XmlValue' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Annotation/XmlValue.php', + 'JMS\\Serializer\\ArrayTransformerInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/ArrayTransformerInterface.php', + 'JMS\\Serializer\\Builder\\CallbackDriverFactory' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Builder/CallbackDriverFactory.php', + 'JMS\\Serializer\\Builder\\DefaultDriverFactory' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Builder/DefaultDriverFactory.php', + 'JMS\\Serializer\\Builder\\DriverFactoryInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Builder/DriverFactoryInterface.php', + 'JMS\\Serializer\\Construction\\DoctrineObjectConstructor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Construction/DoctrineObjectConstructor.php', + 'JMS\\Serializer\\Construction\\ObjectConstructorInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Construction/ObjectConstructorInterface.php', + 'JMS\\Serializer\\Construction\\UnserializeObjectConstructor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Construction/UnserializeObjectConstructor.php', + 'JMS\\Serializer\\Context' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Context.php', + 'JMS\\Serializer\\ContextFactory\\CallableContextFactory' => $vendorDir . '/jms/serializer/src/JMS/Serializer/ContextFactory/CallableContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\CallableDeserializationContextFactory' => $vendorDir . '/jms/serializer/src/JMS/Serializer/ContextFactory/CallableDeserializationContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\CallableSerializationContextFactory' => $vendorDir . '/jms/serializer/src/JMS/Serializer/ContextFactory/CallableSerializationContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\DefaultDeserializationContextFactory' => $vendorDir . '/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultDeserializationContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\DefaultSerializationContextFactory' => $vendorDir . '/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultSerializationContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\DeserializationContextFactoryInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/ContextFactory/DeserializationContextFactoryInterface.php', + 'JMS\\Serializer\\ContextFactory\\SerializationContextFactoryInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/ContextFactory/SerializationContextFactoryInterface.php', + 'JMS\\Serializer\\DeserializationContext' => $vendorDir . '/jms/serializer/src/JMS/Serializer/DeserializationContext.php', + 'JMS\\Serializer\\EventDispatcher\\Event' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Event.php', + 'JMS\\Serializer\\EventDispatcher\\EventDispatcher' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcher.php', + 'JMS\\Serializer\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcherInterface.php', + 'JMS\\Serializer\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/EventSubscriberInterface.php', + 'JMS\\Serializer\\EventDispatcher\\Events' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Events.php', + 'JMS\\Serializer\\EventDispatcher\\LazyEventDispatcher' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/LazyEventDispatcher.php', + 'JMS\\Serializer\\EventDispatcher\\ObjectEvent' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/ObjectEvent.php', + 'JMS\\Serializer\\EventDispatcher\\PreDeserializeEvent' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/PreDeserializeEvent.php', + 'JMS\\Serializer\\EventDispatcher\\PreSerializeEvent' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/PreSerializeEvent.php', + 'JMS\\Serializer\\EventDispatcher\\Subscriber\\DoctrineProxySubscriber' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php', + 'JMS\\Serializer\\EventDispatcher\\Subscriber\\SymfonyValidatorSubscriber' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriber.php', + 'JMS\\Serializer\\EventDispatcher\\Subscriber\\SymfonyValidatorValidatorSubscriber' => $vendorDir . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriber.php', + 'JMS\\Serializer\\Exception\\Exception' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exception/Exception.php', + 'JMS\\Serializer\\Exception\\ExpressionLanguageRequiredException' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exception/ExpressionLanguageRequiredException.php', + 'JMS\\Serializer\\Exception\\InvalidArgumentException' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exception/InvalidArgumentException.php', + 'JMS\\Serializer\\Exception\\LogicException' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exception/LogicException.php', + 'JMS\\Serializer\\Exception\\ObjectConstructionException' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exception/ObjectConstructionException.php', + 'JMS\\Serializer\\Exception\\RuntimeException' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exception/RuntimeException.php', + 'JMS\\Serializer\\Exception\\UnsupportedFormatException' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exception/UnsupportedFormatException.php', + 'JMS\\Serializer\\Exception\\ValidationFailedException' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exception/ValidationFailedException.php', + 'JMS\\Serializer\\Exception\\XmlErrorException' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exception/XmlErrorException.php', + 'JMS\\Serializer\\Exclusion\\DepthExclusionStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exclusion/DepthExclusionStrategy.php', + 'JMS\\Serializer\\Exclusion\\DisjunctExclusionStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exclusion/DisjunctExclusionStrategy.php', + 'JMS\\Serializer\\Exclusion\\ExclusionStrategyInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exclusion/ExclusionStrategyInterface.php', + 'JMS\\Serializer\\Exclusion\\ExpressionLanguageExclusionStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exclusion/ExpressionLanguageExclusionStrategy.php', + 'JMS\\Serializer\\Exclusion\\GroupsExclusionStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exclusion/GroupsExclusionStrategy.php', + 'JMS\\Serializer\\Exclusion\\VersionExclusionStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Exclusion/VersionExclusionStrategy.php', + 'JMS\\Serializer\\Expression\\ExpressionEvaluator' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluator.php', + 'JMS\\Serializer\\Expression\\ExpressionEvaluatorInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluatorInterface.php', + 'JMS\\Serializer\\GenericDeserializationVisitor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/GenericDeserializationVisitor.php', + 'JMS\\Serializer\\GenericSerializationVisitor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/GenericSerializationVisitor.php', + 'JMS\\Serializer\\GraphNavigator' => $vendorDir . '/jms/serializer/src/JMS/Serializer/GraphNavigator.php', + 'JMS\\Serializer\\Handler\\ArrayCollectionHandler' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/ArrayCollectionHandler.php', + 'JMS\\Serializer\\Handler\\ConstraintViolationHandler' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/ConstraintViolationHandler.php', + 'JMS\\Serializer\\Handler\\DateHandler' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/DateHandler.php', + 'JMS\\Serializer\\Handler\\FormErrorHandler' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/FormErrorHandler.php', + 'JMS\\Serializer\\Handler\\HandlerRegistry' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistry.php', + 'JMS\\Serializer\\Handler\\HandlerRegistryInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistryInterface.php', + 'JMS\\Serializer\\Handler\\LazyHandlerRegistry' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/LazyHandlerRegistry.php', + 'JMS\\Serializer\\Handler\\PhpCollectionHandler' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/PhpCollectionHandler.php', + 'JMS\\Serializer\\Handler\\PropelCollectionHandler' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/PropelCollectionHandler.php', + 'JMS\\Serializer\\Handler\\StdClassHandler' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/StdClassHandler.php', + 'JMS\\Serializer\\Handler\\SubscribingHandlerInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Handler/SubscribingHandlerInterface.php', + 'JMS\\Serializer\\JsonDeserializationVisitor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/JsonDeserializationVisitor.php', + 'JMS\\Serializer\\JsonSerializationVisitor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/JsonSerializationVisitor.php', + 'JMS\\Serializer\\Metadata\\ClassMetadata' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/ClassMetadata.php', + 'JMS\\Serializer\\Metadata\\Driver\\AbstractDoctrineTypeDriver' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/AbstractDoctrineTypeDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\AnnotationDriver' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/AnnotationDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\DoctrinePHPCRTypeDriver' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrinePHPCRTypeDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\DoctrineTypeDriver' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrineTypeDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\NullDriver' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/NullDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\PhpDriver' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/PhpDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\XmlDriver' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/XmlDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\YamlDriver' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/YamlDriver.php', + 'JMS\\Serializer\\Metadata\\ExpressionPropertyMetadata' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/ExpressionPropertyMetadata.php', + 'JMS\\Serializer\\Metadata\\PropertyMetadata' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/PropertyMetadata.php', + 'JMS\\Serializer\\Metadata\\StaticPropertyMetadata' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/StaticPropertyMetadata.php', + 'JMS\\Serializer\\Metadata\\VirtualPropertyMetadata' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Metadata/VirtualPropertyMetadata.php', + 'JMS\\Serializer\\Naming\\AdvancedNamingStrategyInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Naming/AdvancedNamingStrategyInterface.php', + 'JMS\\Serializer\\Naming\\CacheNamingStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Naming/CacheNamingStrategy.php', + 'JMS\\Serializer\\Naming\\CamelCaseNamingStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Naming/CamelCaseNamingStrategy.php', + 'JMS\\Serializer\\Naming\\IdenticalPropertyNamingStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Naming/IdenticalPropertyNamingStrategy.php', + 'JMS\\Serializer\\Naming\\PropertyNamingStrategyInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Naming/PropertyNamingStrategyInterface.php', + 'JMS\\Serializer\\Naming\\SerializedNameAnnotationStrategy' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Naming/SerializedNameAnnotationStrategy.php', + 'JMS\\Serializer\\NullAwareVisitorInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/NullAwareVisitorInterface.php', + 'JMS\\Serializer\\SerializationContext' => $vendorDir . '/jms/serializer/src/JMS/Serializer/SerializationContext.php', + 'JMS\\Serializer\\Serializer' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Serializer.php', + 'JMS\\Serializer\\SerializerBuilder' => $vendorDir . '/jms/serializer/src/JMS/Serializer/SerializerBuilder.php', + 'JMS\\Serializer\\SerializerInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/SerializerInterface.php', + 'JMS\\Serializer\\Tests\\Exclusion\\DisjunctExclusionStrategyTest' => $vendorDir . '/jms/serializer/tests/Exclusion/DisjunctExclusionStrategyTest.php', + 'JMS\\Serializer\\Tests\\Exclusion\\ExpressionLanguageExclusionStrategyTest' => $vendorDir . '/jms/serializer/tests/Exclusion/ExpressionLanguageExclusionStrategyTest.php', + 'JMS\\Serializer\\Tests\\Exclusion\\GroupsExclusionStrategyTest' => $vendorDir . '/jms/serializer/tests/Exclusion/GroupsExclusionStrategyTest.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorOrderChild' => $vendorDir . '/jms/serializer/tests/Fixtures/AccessorOrderChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorOrderMethod' => $vendorDir . '/jms/serializer/tests/Fixtures/AccessorOrderMethod.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorOrderParent' => $vendorDir . '/jms/serializer/tests/Fixtures/AccessorOrderParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorSetter' => $vendorDir . '/jms/serializer/tests/Fixtures/AccessorSetter.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorSetterElement' => $vendorDir . '/jms/serializer/tests/Fixtures/AccessorSetter.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AllExcludedObject' => $vendorDir . '/jms/serializer/tests/Fixtures/AllExcludedObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Article' => $vendorDir . '/jms/serializer/tests/Fixtures/Article.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Author' => $vendorDir . '/jms/serializer/tests/Fixtures/Author.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AuthorExpressionAccess' => $vendorDir . '/jms/serializer/tests/Fixtures/AuthorExpressionAccess.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AuthorList' => $vendorDir . '/jms/serializer/tests/Fixtures/AuthorList.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AuthorReadOnly' => $vendorDir . '/jms/serializer/tests/Fixtures/AuthorReadOnly.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AuthorReadOnlyPerClass' => $vendorDir . '/jms/serializer/tests/Fixtures/AuthorReadOnlyPerClass.php', + 'JMS\\Serializer\\Tests\\Fixtures\\BlogPost' => $vendorDir . '/jms/serializer/tests/Fixtures/BlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CircularReferenceChild' => $vendorDir . '/jms/serializer/tests/Fixtures/CircularReferenceChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CircularReferenceParent' => $vendorDir . '/jms/serializer/tests/Fixtures/CircularReferenceParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Comment' => $vendorDir . '/jms/serializer/tests/Fixtures/Comment.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ContextualNamingStrategy' => $vendorDir . '/jms/serializer/tests/Fixtures/ContextualNamingStrategy.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CurrencyAwareOrder' => $vendorDir . '/jms/serializer/tests/Fixtures/CurrencyAwareOrder.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CurrencyAwarePrice' => $vendorDir . '/jms/serializer/tests/Fixtures/CurrencyAwarePrice.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CustomDeserializationObject' => $vendorDir . '/jms/serializer/tests/Fixtures/CustomDeserializationObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DateTimeArraysObject' => $vendorDir . '/jms/serializer/tests/Fixtures/DateTimeArraysObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DiscriminatorGroup\\Car' => $vendorDir . '/jms/serializer/tests/Fixtures/DiscriminatorGroup/Car.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DiscriminatorGroup\\Vehicle' => $vendorDir . '/jms/serializer/tests/Fixtures/DiscriminatorGroup/Vehicle.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Car' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/Car.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Moped' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/Moped.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlAttributeDiscriminatorChild' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlAttributeDiscriminatorParent' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlNamespaceDiscriminatorChild' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlNamespaceDiscriminatorParent' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlNotCDataDiscriminatorChild' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlNotCDataDiscriminatorParent' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Vehicle' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/Vehicle.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\VehicleInterface' => $vendorDir . '/jms/serializer/tests/Fixtures/Discriminator/VehicleInterface.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DoctrinePHPCR\\Author' => $vendorDir . '/jms/serializer/tests/Fixtures/DoctrinePHPCR/Author.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DoctrinePHPCR\\BlogPost' => $vendorDir . '/jms/serializer/tests/Fixtures/DoctrinePHPCR/BlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DoctrinePHPCR\\Comment' => $vendorDir . '/jms/serializer/tests/Fixtures/DoctrinePHPCR/Comment.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\Author' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/Author.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\BlogPost' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/BlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\Comment' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/Comment.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\AbstractModel' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/AbstractModel.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Clazz' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Clazz.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Organization' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Organization.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Person' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Person.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\School' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/School.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Student' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Student.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Teacher' => $vendorDir . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Teacher.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ExcludePublicAccessor' => $vendorDir . '/jms/serializer/tests/Fixtures/ExcludePublicAccessor.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ExclusionStrategy\\AlwaysExcludeExclusionStrategy' => $vendorDir . '/jms/serializer/tests/Fixtures/ExclusionStrategy/AlwaysExcludeExclusionStrategy.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Garage' => $vendorDir . '/jms/serializer/tests/Fixtures/Garage.php', + 'JMS\\Serializer\\Tests\\Fixtures\\GetSetObject' => $vendorDir . '/jms/serializer/tests/Fixtures/GetSetObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\GroupsObject' => $vendorDir . '/jms/serializer/tests/Fixtures/GroupsObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\GroupsTrim' => $vendorDir . '/jms/serializer/tests/Fixtures/GroupsTrim.php', + 'JMS\\Serializer\\Tests\\Fixtures\\GroupsUser' => $vendorDir . '/jms/serializer/tests/Fixtures/GroupsUser.php', + 'JMS\\Serializer\\Tests\\Fixtures\\IndexedCommentsBlogPost' => $vendorDir . '/jms/serializer/tests/Fixtures/IndexedCommentsBlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\IndexedCommentsList' => $vendorDir . '/jms/serializer/tests/Fixtures/IndexedCommentsBlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InitializedBlogPostConstructor' => $vendorDir . '/jms/serializer/tests/Fixtures/InitializedBlogPostConstructor.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InitializedObjectConstructor' => $vendorDir . '/jms/serializer/tests/Fixtures/InitializedObjectConstructor.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InlineChild' => $vendorDir . '/jms/serializer/tests/Fixtures/InlineChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InlineChildEmpty' => $vendorDir . '/jms/serializer/tests/Fixtures/InlineChildEmpty.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InlineChildWithGroups' => $vendorDir . '/jms/serializer/tests/Fixtures/InlineChildWithGroups.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InlineParent' => $vendorDir . '/jms/serializer/tests/Fixtures/InlineParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Input' => $vendorDir . '/jms/serializer/tests/Fixtures/Input.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InvalidGroupsObject' => $vendorDir . '/jms/serializer/tests/Fixtures/InvalidGroupsObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InvalidUsageOfXmlValue' => $vendorDir . '/jms/serializer/tests/Fixtures/InvalidUsageOfXmlValue.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Log' => $vendorDir . '/jms/serializer/tests/Fixtures/Log.php', + 'JMS\\Serializer\\Tests\\Fixtures\\MaxDepth\\Gh236Bar' => $vendorDir . '/jms/serializer/tests/Fixtures/MaxDepth/Gh236Bar.php', + 'JMS\\Serializer\\Tests\\Fixtures\\MaxDepth\\Gh236Foo' => $vendorDir . '/jms/serializer/tests/Fixtures/MaxDepth/Gh236Foo.php', + 'JMS\\Serializer\\Tests\\Fixtures\\MultilineGroupsFormat' => $vendorDir . '/jms/serializer/tests/Fixtures/MultilineGroupsFormat.php', + 'JMS\\Serializer\\Tests\\Fixtures\\NamedDateTimeArraysObject' => $vendorDir . '/jms/serializer/tests/Fixtures/NamedDateTimeArraysObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\NamedDateTimeImmutableArraysObject' => $vendorDir . '/jms/serializer/tests/Fixtures/NamedDateTimeImmutableArraysObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Node' => $vendorDir . '/jms/serializer/tests/Fixtures/Node.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithAbsentXmlListNode' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithAbsentXmlListNode.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithEmptyArrayAndHash' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithEmptyArrayAndHash.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithEmptyHash' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithEmptyHash.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithEmptyNullableAndEmptyArrays' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithEmptyNullableAndEmptyArrays.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithExpressionVirtualPropertiesAndExcludeAll' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithExpressionVirtualPropertiesAndExcludeAll.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithHandlerCallbacks' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithHandlerCallbacks.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithInlineArray' => $vendorDir . '/jms/serializer/tests/JMS/Serializer/Tests/Fixtures/ObjectWithInlineArray.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithIntListAndIntMap' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithIntListAndIntMap.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithLifecycleCallbacks' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithLifecycleCallbacks.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithNamespacesAndList' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndList.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithNamespacesAndNestedList' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndNestedList.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithNullProperty' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithNullProperty.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithObjectProperty' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithObjectProperty.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithToString' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithToString.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithVersionedVirtualProperties' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithVersionedVirtualProperties.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithVirtualProperties' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithVirtualProperties.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithVirtualPropertiesAndExcludeAll' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithVirtualPropertiesAndExcludeAll.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithVirtualXmlProperties' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithVirtualXmlProperties.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlKeyValuePairs' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairs.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlKeyValuePairsWithObjectType' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithObjectType.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlKeyValuePairsWithType' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithType.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespaces' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithXmlNamespaces.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespacesAndObjectProperty' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectProperty.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespacesAndObjectPropertyAuthor' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyAuthor.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespacesAndObjectPropertyVirtual' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyVirtual.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlRootNamespace' => $vendorDir . '/jms/serializer/tests/Fixtures/ObjectWithXmlRootNamespace.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Order' => $vendorDir . '/jms/serializer/tests/Fixtures/Order.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ParentDoNotSkipWithEmptyChild' => $vendorDir . '/jms/serializer/tests/Fixtures/ParentDoNotSkipWithEmptyChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ParentSkipWithEmptyChild' => $vendorDir . '/jms/serializer/tests/Fixtures/ParentSkipWithEmptyChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Person' => $vendorDir . '/jms/serializer/tests/Fixtures/Person.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonCollection' => $vendorDir . '/jms/serializer/tests/Fixtures/PersonCollection.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonLocation' => $vendorDir . '/jms/serializer/tests/Fixtures/PersonLocation.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecret' => $vendorDir . '/jms/serializer/tests/Fixtures/PersonSecret.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecretMore' => $vendorDir . '/jms/serializer/tests/Fixtures/PersonSecretMore.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecretMoreVirtual' => $vendorDir . '/jms/serializer/tests/Fixtures/PersonSecretMoreVirtual.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecretVirtual' => $vendorDir . '/jms/serializer/tests/Fixtures/PersonSecretVirtual.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecretWithVariables' => $vendorDir . '/jms/serializer/tests/Fixtures/PersonSecretWithVariables.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Price' => $vendorDir . '/jms/serializer/tests/Fixtures/Price.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Publisher' => $vendorDir . '/jms/serializer/tests/Fixtures/Publisher.php', + 'JMS\\Serializer\\Tests\\Fixtures\\SimpleClassObject' => $vendorDir . '/jms/serializer/tests/Fixtures/SimpleClassObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\SimpleObject' => $vendorDir . '/jms/serializer/tests/Fixtures/SimpleObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\SimpleObjectProxy' => $vendorDir . '/jms/serializer/tests/Fixtures/SimpleObjectProxy.php', + 'JMS\\Serializer\\Tests\\Fixtures\\SimpleSubClassObject' => $vendorDir . '/jms/serializer/tests/Fixtures/SimpleSubClassObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Tag' => $vendorDir . '/jms/serializer/tests/Fixtures/Tag.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Timestamp' => $vendorDir . '/jms/serializer/tests/Fixtures/Timestamp.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Tree' => $vendorDir . '/jms/serializer/tests/Fixtures/Tree.php', + 'JMS\\Serializer\\Tests\\Fixtures\\VehicleInterfaceGarage' => $vendorDir . '/jms/serializer/tests/Fixtures/VehicleInterfaceGarage.php', + 'JMS\\Serializer\\Tests\\Fixtures\\VersionedObject' => $vendorDir . '/jms/serializer/tests/Fixtures/VersionedObject.php', + 'JMS\\Serializer\\Tests\\Handler\\ArrayCollectionHandlerTest' => $vendorDir . '/jms/serializer/tests/Handler/ArrayCollectionHandlerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\DateHandlerTest' => $vendorDir . '/jms/serializer/tests/Handler/DateHandlerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\DummyHandler' => $vendorDir . '/jms/serializer/tests/Handler/HandlerRegistryTest.php', + 'JMS\\Serializer\\Tests\\Handler\\FormErrorHandlerTest' => $vendorDir . '/jms/serializer/tests/Handler/FormErrorHandlerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\HandlerRegistryTest' => $vendorDir . '/jms/serializer/tests/Handler/HandlerRegistryTest.php', + 'JMS\\Serializer\\Tests\\Handler\\HandlerService' => $vendorDir . '/jms/serializer/tests/Handler/LazyHandlerRegistryTest.php', + 'JMS\\Serializer\\Tests\\Handler\\LazyHandlerRegistryTest' => $vendorDir . '/jms/serializer/tests/Handler/LazyHandlerRegistryTest.php', + 'JMS\\Serializer\\Tests\\Handler\\LazyHandlerRegistryWithPsr11ContainerTest' => $vendorDir . '/jms/serializer/tests/Handler/LazyHandlerRegistryWithPsr11ContainerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\LazyHandlerRegistryWithSymfonyContainerTest' => $vendorDir . '/jms/serializer/tests/Handler/LazyHandlerRegistryWithSymfonyContainerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\PropelCollectionHandlerTest' => $vendorDir . '/jms/serializer/tests/Handler/PropelCollectionHandlerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\Psr11Container' => $vendorDir . '/jms/serializer/tests/Handler/LazyHandlerRegistryWithPsr11ContainerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\TestSubject' => $vendorDir . '/jms/serializer/tests/Handler/PropelCollectionHandlerTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\ClassMetadataTest' => $vendorDir . '/jms/serializer/tests/Metadata/ClassMetadataTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\AnnotationDriverTest' => $vendorDir . '/jms/serializer/tests/Metadata/Driver/AnnotationDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\BaseDriverTest' => $vendorDir . '/jms/serializer/tests/Metadata/Driver/BaseDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\DoctrineDriverTest' => $vendorDir . '/jms/serializer/tests/Metadata/Driver/DoctrineDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\DoctrinePHPCRDriverTest' => $vendorDir . '/jms/serializer/tests/Metadata/Driver/DoctrinePHPCRDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\NullDriverTest' => $vendorDir . '/jms/serializer/tests/Metadata/Driver/NullDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\PhpDriverTest' => $vendorDir . '/jms/serializer/tests/Metadata/Driver/PhpDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\XmlDriverTest' => $vendorDir . '/jms/serializer/tests/Metadata/Driver/XmlDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\YamlDriverTest' => $vendorDir . '/jms/serializer/tests/Metadata/Driver/YamlDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\PropertyMetadataOrder' => $vendorDir . '/jms/serializer/tests/Metadata/ClassMetadataTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\PropertyMetadataPublicMethod' => $vendorDir . '/jms/serializer/tests/Metadata/ClassMetadataTest.php', + 'JMS\\Serializer\\Tests\\SerializerBuilderTest' => $vendorDir . '/jms/serializer/tests/SerializerBuilderTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\ArrayTest' => $vendorDir . '/jms/serializer/tests/Serializer/ArrayTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\BaseSerializationTest' => $vendorDir . '/jms/serializer/tests/Serializer/BaseSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\ContextTest' => $vendorDir . '/jms/serializer/tests/Serializer/ContextTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\DateIntervalFormatTest' => $vendorDir . '/jms/serializer/tests/Serializer/DateIntervalFormatTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Doctrine\\IntegrationTest' => $vendorDir . '/jms/serializer/tests/Serializer/Doctrine/IntegrationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Doctrine\\ObjectConstructorTest' => $vendorDir . '/jms/serializer/tests/Serializer/Doctrine/ObjectConstructorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Doctrine\\SimpleBaseManagerRegistry' => $vendorDir . '/jms/serializer/tests/Serializer/Doctrine/ObjectConstructorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Doctrine\\SimpleManagerRegistry' => $vendorDir . '/jms/serializer/tests/Serializer/Doctrine/IntegrationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\EventDispatcherTest' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/EventDispatcherTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\LazyEventDispatcherTest' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\LazyEventDispatcherWithPsr11ContainerTest' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithPsr11ContainerTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\LazyEventDispatcherWithSymfonyContainerTest' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithSymfonyContainerTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\MockListener' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/EventDispatcherTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\MockSubscriber' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/EventDispatcherTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\Psr11Container' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithPsr11ContainerTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\Subscriber\\DoctrineProxySubscriberTest' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriberTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\Subscriber\\SymfonyValidatorSubscriberTest' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriberTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\Subscriber\\SymfonyValidatorValidatorSubscriberTest' => $vendorDir . '/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriberTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\GraphNavigatorTest' => $vendorDir . '/jms/serializer/tests/Serializer/GraphNavigatorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\JsonSerializationTest' => $vendorDir . '/jms/serializer/tests/Serializer/JsonSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\LinkAddingSubscriber' => $vendorDir . '/jms/serializer/tests/Serializer/JsonSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Naming\\IdenticalPropertyNamingStrategyTest' => $vendorDir . '/jms/serializer/tests/Serializer/Naming/IdenticalPropertyNamingStrategyTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\ReplaceNameSubscriber' => $vendorDir . '/jms/serializer/tests/Serializer/JsonSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\SerializableClass' => $vendorDir . '/jms/serializer/tests/Serializer/GraphNavigatorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\SerializationContextFactoryTest' => $vendorDir . '/jms/serializer/tests/Serializer/SerializationContextFactoryTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\TestSubscribingHandler' => $vendorDir . '/jms/serializer/tests/Serializer/GraphNavigatorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\TypeParserTest' => $vendorDir . '/jms/serializer/tests/Serializer/TypeParserTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\XmlSerializationTest' => $vendorDir . '/jms/serializer/tests/Serializer/XmlSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\YamlSerializationTest' => $vendorDir . '/jms/serializer/tests/Serializer/YamlSerializationTest.php', + 'JMS\\Serializer\\Tests\\Twig\\SerializerExtensionTest' => $vendorDir . '/jms/serializer/tests/Twig/SerializerExtensionTest.php', + 'JMS\\Serializer\\Twig\\SerializerExtension' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Twig/SerializerExtension.php', + 'JMS\\Serializer\\Twig\\SerializerRuntimeExtension' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeExtension.php', + 'JMS\\Serializer\\Twig\\SerializerRuntimeHelper' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeHelper.php', + 'JMS\\Serializer\\TypeParser' => $vendorDir . '/jms/serializer/src/JMS/Serializer/TypeParser.php', + 'JMS\\Serializer\\Util\\Writer' => $vendorDir . '/jms/serializer/src/JMS/Serializer/Util/Writer.php', + 'JMS\\Serializer\\VisitorInterface' => $vendorDir . '/jms/serializer/src/JMS/Serializer/VisitorInterface.php', + 'JMS\\Serializer\\XmlDeserializationVisitor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/XmlDeserializationVisitor.php', + 'JMS\\Serializer\\XmlSerializationVisitor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/XmlSerializationVisitor.php', + 'JMS\\Serializer\\YamlSerializationVisitor' => $vendorDir . '/jms/serializer/src/JMS/Serializer/YamlSerializationVisitor.php', + 'JsonParserTest' => $vendorDir . '/seld/jsonlint/tests/JsonParserTest.php', + 'JsonSchema\\Constraints\\CollectionConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php', + 'JsonSchema\\Constraints\\Constraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php', + 'JsonSchema\\Constraints\\ConstraintInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php', + 'JsonSchema\\Constraints\\EnumConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php', + 'JsonSchema\\Constraints\\Factory' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php', + 'JsonSchema\\Constraints\\FormatConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php', + 'JsonSchema\\Constraints\\NumberConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php', + 'JsonSchema\\Constraints\\ObjectConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php', + 'JsonSchema\\Constraints\\SchemaConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php', + 'JsonSchema\\Constraints\\StringConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php', + 'JsonSchema\\Constraints\\TypeConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php', + 'JsonSchema\\Constraints\\UndefinedConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php', + 'JsonSchema\\Exception\\InvalidArgumentException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php', + 'JsonSchema\\Exception\\InvalidSchemaMediaTypeException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php', + 'JsonSchema\\Exception\\InvalidSourceUriException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php', + 'JsonSchema\\Exception\\JsonDecodingException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php', + 'JsonSchema\\Exception\\ResourceNotFoundException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php', + 'JsonSchema\\Exception\\UriResolverException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php', + 'JsonSchema\\RefResolver' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/RefResolver.php', + 'JsonSchema\\Uri\\Retrievers\\AbstractRetriever' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php', + 'JsonSchema\\Uri\\Retrievers\\Curl' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php', + 'JsonSchema\\Uri\\Retrievers\\FileGetContents' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php', + 'JsonSchema\\Uri\\Retrievers\\PredefinedArray' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php', + 'JsonSchema\\Uri\\Retrievers\\UriRetrieverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php', + 'JsonSchema\\Uri\\UriResolver' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php', + 'JsonSchema\\Uri\\UriRetriever' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php', + 'JsonSchema\\Validator' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Validator.php', + 'KevinGH\\Version\\Version' => $vendorDir . '/kherge/version/src/lib/KevinGH/Version/Version.php', + 'KevinGH\\Version\\VersionTest' => $vendorDir . '/kherge/version/src/tests/KevinGH/Version/VersionTest.php', + 'LegacyTwigTestExtension' => $vendorDir . '/twig/twig/test/Twig/Tests/LegacyIntegrationTest.php', + 'MagicCallStub' => $vendorDir . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'Metadata\\AdvancedMetadataFactoryInterface' => $vendorDir . '/jms/metadata/src/Metadata/AdvancedMetadataFactoryInterface.php', + 'Metadata\\Cache\\CacheInterface' => $vendorDir . '/jms/metadata/src/Metadata/Cache/CacheInterface.php', + 'Metadata\\Cache\\DoctrineCacheAdapter' => $vendorDir . '/jms/metadata/src/Metadata/Cache/DoctrineCacheAdapter.php', + 'Metadata\\Cache\\FileCache' => $vendorDir . '/jms/metadata/src/Metadata/Cache/FileCache.php', + 'Metadata\\Cache\\PsrCacheAdapter' => $vendorDir . '/jms/metadata/src/Metadata/Cache/PsrCacheAdapter.php', + 'Metadata\\ClassHierarchyMetadata' => $vendorDir . '/jms/metadata/src/Metadata/ClassHierarchyMetadata.php', + 'Metadata\\ClassMetadata' => $vendorDir . '/jms/metadata/src/Metadata/ClassMetadata.php', + 'Metadata\\Driver\\AbstractFileDriver' => $vendorDir . '/jms/metadata/src/Metadata/Driver/AbstractFileDriver.php', + 'Metadata\\Driver\\AdvancedDriverInterface' => $vendorDir . '/jms/metadata/src/Metadata/Driver/AdvancedDriverInterface.php', + 'Metadata\\Driver\\AdvancedFileLocatorInterface' => $vendorDir . '/jms/metadata/src/Metadata/Driver/AdvancedFileLocatorInterface.php', + 'Metadata\\Driver\\DriverChain' => $vendorDir . '/jms/metadata/src/Metadata/Driver/DriverChain.php', + 'Metadata\\Driver\\DriverInterface' => $vendorDir . '/jms/metadata/src/Metadata/Driver/DriverInterface.php', + 'Metadata\\Driver\\FileLocator' => $vendorDir . '/jms/metadata/src/Metadata/Driver/FileLocator.php', + 'Metadata\\Driver\\FileLocatorInterface' => $vendorDir . '/jms/metadata/src/Metadata/Driver/FileLocatorInterface.php', + 'Metadata\\Driver\\LazyLoadingDriver' => $vendorDir . '/jms/metadata/src/Metadata/Driver/LazyLoadingDriver.php', + 'Metadata\\MergeableClassMetadata' => $vendorDir . '/jms/metadata/src/Metadata/MergeableClassMetadata.php', + 'Metadata\\MergeableInterface' => $vendorDir . '/jms/metadata/src/Metadata/MergeableInterface.php', + 'Metadata\\MetadataFactory' => $vendorDir . '/jms/metadata/src/Metadata/MetadataFactory.php', + 'Metadata\\MetadataFactoryInterface' => $vendorDir . '/jms/metadata/src/Metadata/MetadataFactoryInterface.php', + 'Metadata\\MethodMetadata' => $vendorDir . '/jms/metadata/src/Metadata/MethodMetadata.php', + 'Metadata\\NullMetadata' => $vendorDir . '/jms/metadata/src/Metadata/NullMetadata.php', + 'Metadata\\PropertyMetadata' => $vendorDir . '/jms/metadata/src/Metadata/PropertyMetadata.php', + 'Metadata\\Tests\\Cache\\DoctrineCacheAdapterTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Cache/DoctrineCacheAdapterTest.php', + 'Metadata\\Tests\\Cache\\FileCacheTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Cache/FileCacheTest.php', + 'Metadata\\Tests\\Cache\\PsrCacheAdapterTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Cache/PsrCacheAdapterTest.php', + 'Metadata\\Tests\\ClassMetadataTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/ClassMetadataTest.php', + 'Metadata\\Tests\\Driver\\AbstractFileDriverTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Driver/AbstractFileDriverTest.php', + 'Metadata\\Tests\\Driver\\DriverChainTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Driver/DriverChainTest.php', + 'Metadata\\Tests\\Driver\\FileLocatorTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Driver/FileLocatorTest.php', + 'Metadata\\Tests\\Driver\\Fixture\\A\\A' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/A/A.php', + 'Metadata\\Tests\\Driver\\Fixture\\B\\B' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/B/B.php', + 'Metadata\\Tests\\Driver\\Fixture\\C\\SubDir\\C' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/C/SubDir/C.php', + 'Metadata\\Tests\\Driver\\Fixture\\T\\T' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/T/T.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\BaseClass' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/BaseClass.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\InterfaceA' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/InterfaceA.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\InterfaceB' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/InterfaceB.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\SubClassA' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/SubClassA.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\SubClassB' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/SubClassB.php', + 'Metadata\\Tests\\Fixtures\\TestObject' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Fixtures/TestObject.php', + 'Metadata\\Tests\\Fixtures\\TestParent' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/Fixtures/TestParent.php', + 'Metadata\\Tests\\MergeableClassMetadataTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/MergeableClassMetadataTest.php', + 'Metadata\\Tests\\MetadataFactoryTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/MetadataFactoryTest.php', + 'Metadata\\Tests\\MethodMetadataTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/MethodMetadataTest.php', + 'Metadata\\Tests\\PropertyMetadataTest' => $vendorDir . '/jms/metadata/tests/Metadata/Tests/PropertyMetadataTest.php', + 'Metadata\\Version' => $vendorDir . '/jms/metadata/src/Metadata/Version.php', + 'MethodCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/MethodCallback.php', + 'MethodCallbackByReference' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/MethodCallbackByReference.php', + 'MockRunner' => $vendorDir . '/phpunit/phpunit/tests/_files/MockRunner.php', + 'MockTestInterface' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/MockTestInterface.php', + 'Mockable' => $vendorDir . '/phpunit/phpunit/tests/_files/Mockable.php', + 'Monolog\\ErrorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/ErrorHandler.php', + 'Monolog\\ErrorHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/ErrorHandlerTest.php', + 'Monolog\\Formatter\\ChromePHPFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php', + 'Monolog\\Formatter\\ChromePHPFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/ChromePHPFormatterTest.php', + 'Monolog\\Formatter\\ElasticaFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php', + 'Monolog\\Formatter\\ElasticaFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/ElasticaFormatterTest.php', + 'Monolog\\Formatter\\FlowdockFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php', + 'Monolog\\Formatter\\FlowdockFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/FlowdockFormatterTest.php', + 'Monolog\\Formatter\\FluentdFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php', + 'Monolog\\Formatter\\FluentdFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/FluentdFormatterTest.php', + 'Monolog\\Formatter\\FormatterInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', + 'Monolog\\Formatter\\GelfMessageFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php', + 'Monolog\\Formatter\\GelfMessageFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/GelfMessageFormatterTest.php', + 'Monolog\\Formatter\\HtmlFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php', + 'Monolog\\Formatter\\JsonFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php', + 'Monolog\\Formatter\\JsonFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/JsonFormatterTest.php', + 'Monolog\\Formatter\\LineFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', + 'Monolog\\Formatter\\LineFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php', + 'Monolog\\Formatter\\LogglyFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php', + 'Monolog\\Formatter\\LogglyFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/LogglyFormatterTest.php', + 'Monolog\\Formatter\\LogstashFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php', + 'Monolog\\Formatter\\LogstashFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/LogstashFormatterTest.php', + 'Monolog\\Formatter\\MongoDBFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php', + 'Monolog\\Formatter\\MongoDBFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/MongoDBFormatterTest.php', + 'Monolog\\Formatter\\NormalizerFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', + 'Monolog\\Formatter\\NormalizerFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\ScalarFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php', + 'Monolog\\Formatter\\ScalarFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/ScalarFormatterTest.php', + 'Monolog\\Formatter\\TestBar' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php', + 'Monolog\\Formatter\\TestBarNorm' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\TestFoo' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php', + 'Monolog\\Formatter\\TestFooNorm' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\TestStreamFoo' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\TestToStringError' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\WildfireFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php', + 'Monolog\\Formatter\\WildfireFormatterTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Formatter/WildfireFormatterTest.php', + 'Monolog\\Handler\\AbstractHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractHandler.php', + 'Monolog\\Handler\\AbstractHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/AbstractHandlerTest.php', + 'Monolog\\Handler\\AbstractProcessingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php', + 'Monolog\\Handler\\AbstractProcessingHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/AbstractProcessingHandlerTest.php', + 'Monolog\\Handler\\AbstractSyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php', + 'Monolog\\Handler\\AmqpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AmqpHandler.php', + 'Monolog\\Handler\\AmqpHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/AmqpHandlerTest.php', + 'Monolog\\Handler\\BrowserConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php', + 'Monolog\\Handler\\BrowserConsoleHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/BrowserConsoleHandlerTest.php', + 'Monolog\\Handler\\BufferHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/BufferHandler.php', + 'Monolog\\Handler\\BufferHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/BufferHandlerTest.php', + 'Monolog\\Handler\\ChromePHPHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php', + 'Monolog\\Handler\\ChromePHPHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/ChromePHPHandlerTest.php', + 'Monolog\\Handler\\CouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php', + 'Monolog\\Handler\\CouchDBHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/CouchDBHandlerTest.php', + 'Monolog\\Handler\\CubeHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/CubeHandler.php', + 'Monolog\\Handler\\Curl\\Util' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Curl/Util.php', + 'Monolog\\Handler\\DeduplicationHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php', + 'Monolog\\Handler\\DeduplicationHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/DeduplicationHandlerTest.php', + 'Monolog\\Handler\\DoctrineCouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php', + 'Monolog\\Handler\\DoctrineCouchDBHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php', + 'Monolog\\Handler\\DynamoDbHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php', + 'Monolog\\Handler\\DynamoDbHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/DynamoDbHandlerTest.php', + 'Monolog\\Handler\\ElasticSearchHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php', + 'Monolog\\Handler\\ElasticSearchHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/ElasticSearchHandlerTest.php', + 'Monolog\\Handler\\ErrorLogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php', + 'Monolog\\Handler\\ErrorLogHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/ErrorLogHandlerTest.php', + 'Monolog\\Handler\\ExceptionTestHandler' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php', + 'Monolog\\Handler\\FilterHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php', + 'Monolog\\Handler\\FilterHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/FilterHandlerTest.php', + 'Monolog\\Handler\\FingersCrossedHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php', + 'Monolog\\Handler\\FingersCrossedHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/FingersCrossedHandlerTest.php', + 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php', + 'Monolog\\Handler\\FingersCrossed\\ChannelLevelActivationStrategy' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php', + 'Monolog\\Handler\\FingersCrossed\\ErrorLevelActivationStrategy' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php', + 'Monolog\\Handler\\FirePHPHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php', + 'Monolog\\Handler\\FirePHPHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/FirePHPHandlerTest.php', + 'Monolog\\Handler\\FleepHookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php', + 'Monolog\\Handler\\FleepHookHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/FleepHookHandlerTest.php', + 'Monolog\\Handler\\FlowdockHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php', + 'Monolog\\Handler\\FlowdockHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php', + 'Monolog\\Handler\\GelfHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php', + 'Monolog\\Handler\\GelfHandlerLegacyTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/GelfHandlerLegacyTest.php', + 'Monolog\\Handler\\GelfHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/GelfHandlerTest.php', + 'Monolog\\Handler\\GelfMockMessagePublisher' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/GelfMockMessagePublisher.php', + 'Monolog\\Handler\\GroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php', + 'Monolog\\Handler\\GroupHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/GroupHandlerTest.php', + 'Monolog\\Handler\\HandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', + 'Monolog\\Handler\\HandlerWrapper' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php', + 'Monolog\\Handler\\HandlerWrapperTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/HandlerWrapperTest.php', + 'Monolog\\Handler\\HipChatHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php', + 'Monolog\\Handler\\HipChatHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php', + 'Monolog\\Handler\\IFTTTHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php', + 'Monolog\\Handler\\LogEntriesHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php', + 'Monolog\\Handler\\LogEntriesHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/LogEntriesHandlerTest.php', + 'Monolog\\Handler\\LogglyHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php', + 'Monolog\\Handler\\MailHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MailHandler.php', + 'Monolog\\Handler\\MailHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/MailHandlerTest.php', + 'Monolog\\Handler\\MandrillHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php', + 'Monolog\\Handler\\MissingExtensionException' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php', + 'Monolog\\Handler\\MockRavenClient' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/MockRavenClient.php', + 'Monolog\\Handler\\Mongo' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/MongoDBHandlerTest.php', + 'Monolog\\Handler\\MongoDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php', + 'Monolog\\Handler\\MongoDBHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/MongoDBHandlerTest.php', + 'Monolog\\Handler\\NativeMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php', + 'Monolog\\Handler\\NativeMailerHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/NativeMailerHandlerTest.php', + 'Monolog\\Handler\\NewRelicHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php', + 'Monolog\\Handler\\NewRelicHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php', + 'Monolog\\Handler\\NullHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NullHandler.php', + 'Monolog\\Handler\\NullHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/NullHandlerTest.php', + 'Monolog\\Handler\\PHPConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php', + 'Monolog\\Handler\\PHPConsoleHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/PHPConsoleHandlerTest.php', + 'Monolog\\Handler\\PsrHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php', + 'Monolog\\Handler\\PsrHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/PsrHandlerTest.php', + 'Monolog\\Handler\\PushoverHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php', + 'Monolog\\Handler\\PushoverHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php', + 'Monolog\\Handler\\RavenHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php', + 'Monolog\\Handler\\RavenHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/RavenHandlerTest.php', + 'Monolog\\Handler\\RedisHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php', + 'Monolog\\Handler\\RedisHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/RedisHandlerTest.php', + 'Monolog\\Handler\\RollbarHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php', + 'Monolog\\Handler\\RollbarHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/RollbarHandlerTest.php', + 'Monolog\\Handler\\RotatingFileHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php', + 'Monolog\\Handler\\RotatingFileHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/RotatingFileHandlerTest.php', + 'Monolog\\Handler\\SamplingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php', + 'Monolog\\Handler\\SamplingHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/SamplingHandlerTest.php', + 'Monolog\\Handler\\SlackHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php', + 'Monolog\\Handler\\SlackHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php', + 'Monolog\\Handler\\SlackWebhookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php', + 'Monolog\\Handler\\SlackWebhookHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/SlackWebhookHandlerTest.php', + 'Monolog\\Handler\\Slack\\SlackRecord' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php', + 'Monolog\\Handler\\Slack\\SlackRecordTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/Slack/SlackRecordTest.php', + 'Monolog\\Handler\\SlackbotHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php', + 'Monolog\\Handler\\SlackbotHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/SlackbotHandlerTest.php', + 'Monolog\\Handler\\SocketHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php', + 'Monolog\\Handler\\SocketHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/SocketHandlerTest.php', + 'Monolog\\Handler\\StreamHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php', + 'Monolog\\Handler\\StreamHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/StreamHandlerTest.php', + 'Monolog\\Handler\\StubNewRelicHandler' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php', + 'Monolog\\Handler\\StubNewRelicHandlerWithoutExtension' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php', + 'Monolog\\Handler\\SwiftMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php', + 'Monolog\\Handler\\SwiftMailerHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/SwiftMailerHandlerTest.php', + 'Monolog\\Handler\\SyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php', + 'Monolog\\Handler\\SyslogHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/SyslogHandlerTest.php', + 'Monolog\\Handler\\SyslogUdpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php', + 'Monolog\\Handler\\SyslogUdpHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/SyslogUdpHandlerTest.php', + 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php', + 'Monolog\\Handler\\TestChromePHPHandler' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/ChromePHPHandlerTest.php', + 'Monolog\\Handler\\TestFirePHPHandler' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/FirePHPHandlerTest.php', + 'Monolog\\Handler\\TestHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/TestHandler.php', + 'Monolog\\Handler\\TestHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/TestHandlerTest.php', + 'Monolog\\Handler\\UdpSocketTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/UdpSocketTest.php', + 'Monolog\\Handler\\WhatFailureGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php', + 'Monolog\\Handler\\WhatFailureGroupHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php', + 'Monolog\\Handler\\ZendMonitorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php', + 'Monolog\\Handler\\ZendMonitorHandlerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Handler/ZendMonitorHandlerTest.php', + 'Monolog\\Logger' => $vendorDir . '/monolog/monolog/src/Monolog/Logger.php', + 'Monolog\\LoggerTest' => $vendorDir . '/monolog/monolog/tests/Monolog/LoggerTest.php', + 'Monolog\\Processor\\GitProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php', + 'Monolog\\Processor\\GitProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/GitProcessorTest.php', + 'Monolog\\Processor\\IntrospectionProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', + 'Monolog\\Processor\\IntrospectionProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/IntrospectionProcessorTest.php', + 'Monolog\\Processor\\MemoryPeakUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', + 'Monolog\\Processor\\MemoryPeakUsageProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php', + 'Monolog\\Processor\\MemoryProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', + 'Monolog\\Processor\\MemoryUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php', + 'Monolog\\Processor\\MemoryUsageProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/MemoryUsageProcessorTest.php', + 'Monolog\\Processor\\MercurialProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php', + 'Monolog\\Processor\\MercurialProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/MercurialProcessorTest.php', + 'Monolog\\Processor\\ProcessIdProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php', + 'Monolog\\Processor\\ProcessIdProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/ProcessIdProcessorTest.php', + 'Monolog\\Processor\\PsrLogMessageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php', + 'Monolog\\Processor\\PsrLogMessageProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/PsrLogMessageProcessorTest.php', + 'Monolog\\Processor\\TagProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/TagProcessor.php', + 'Monolog\\Processor\\TagProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/TagProcessorTest.php', + 'Monolog\\Processor\\UidProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/UidProcessor.php', + 'Monolog\\Processor\\UidProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/UidProcessorTest.php', + 'Monolog\\Processor\\WebProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/WebProcessor.php', + 'Monolog\\Processor\\WebProcessorTest' => $vendorDir . '/monolog/monolog/tests/Monolog/Processor/WebProcessorTest.php', + 'Monolog\\PsrLogCompatTest' => $vendorDir . '/monolog/monolog/tests/Monolog/PsrLogCompatTest.php', + 'Monolog\\Registry' => $vendorDir . '/monolog/monolog/src/Monolog/Registry.php', + 'Monolog\\RegistryTest' => $vendorDir . '/monolog/monolog/tests/Monolog/RegistryTest.php', + 'Monolog\\TestCase' => $vendorDir . '/monolog/monolog/tests/Monolog/TestCase.php', + 'MultiDependencyTest' => $vendorDir . '/phpunit/phpunit/tests/_files/MultiDependencyTest.php', + 'MultipleDataProviderTest' => $vendorDir . '/phpunit/phpunit/tests/_files/MultipleDataProviderTest.php', + 'My\\Space\\ExceptionNamespaceTest' => $vendorDir . '/phpunit/phpunit/tests/_files/ExceptionNamespaceTest.php', + 'NamespaceCoverageClassExtendedTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageClassExtendedTest.php', + 'NamespaceCoverageClassTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageClassTest.php', + 'NamespaceCoverageCoversClassPublicTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageCoversClassPublicTest.php', + 'NamespaceCoverageCoversClassTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageCoversClassTest.php', + 'NamespaceCoverageMethodTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageMethodTest.php', + 'NamespaceCoverageNotPrivateTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageNotPrivateTest.php', + 'NamespaceCoverageNotProtectedTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageNotProtectedTest.php', + 'NamespaceCoverageNotPublicTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageNotPublicTest.php', + 'NamespaceCoveragePrivateTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoveragePrivateTest.php', + 'NamespaceCoverageProtectedTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageProtectedTest.php', + 'NamespaceCoveragePublicTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NamespaceCoveragePublicTest.php', + 'NewException' => $vendorDir . '/phpunit/phpunit/tests/Regression/GitHub/74/NewException.php', + 'NoArgTestCaseTest' => $vendorDir . '/phpunit/phpunit/tests/_files/NoArgTestCaseTest.php', + 'NoTestCaseClass' => $vendorDir . '/phpunit/phpunit/tests/_files/NoTestCaseClass.php', + 'NoTestCases' => $vendorDir . '/phpunit/phpunit/tests/_files/NoTestCases.php', + 'NonStatic' => $vendorDir . '/phpunit/phpunit/tests/_files/NonStatic.php', + 'NotExistingCoveredElementTest' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/NotExistingCoveredElementTest.php', + 'NotPublicTestCase' => $vendorDir . '/phpunit/phpunit/tests/_files/NotPublicTestCase.php', + 'NotVoidTestCase' => $vendorDir . '/phpunit/phpunit/tests/_files/NotVoidTestCase.php', + 'NothingTest' => $vendorDir . '/phpunit/phpunit/tests/_files/NothingTest.php', + 'Objet' => $vendorDir . '/zetacomponents/base/tests/test_repository/object/object.php', + 'OneTest' => $vendorDir . '/phpunit/phpunit/tests/_files/phpunit-example-extension/tests/OneTest.php', + 'OneTestCase' => $vendorDir . '/phpunit/phpunit/tests/_files/OneTestCase.php', + 'Other\\Space\\Extender' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/classExtendsNamespacedClass.php', + 'OutputTestCase' => $vendorDir . '/phpunit/phpunit/tests/_files/OutputTestCase.php', + 'OverrideTestCase' => $vendorDir . '/phpunit/phpunit/tests/_files/OverrideTestCase.php', + 'PDepend\\Application' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Application.php', + 'PDepend\\CacheVersionUpdater' => $vendorDir . '/pdepend/pdepend/scripts/update-version.php', + 'PDepend\\DbusUI\\ResultPrinter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/DbusUI/ResultPrinter.php', + 'PDepend\\DependencyInjection\\Compiler\\ProcessListenerPass' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/Compiler/ProcessListenerPass.php', + 'PDepend\\DependencyInjection\\Configuration' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/Configuration.php', + 'PDepend\\DependencyInjection\\Extension' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/Extension.php', + 'PDepend\\DependencyInjection\\ExtensionManager' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/ExtensionManager.php', + 'PDepend\\DependencyInjection\\PdependExtension' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/PdependExtension.php', + 'PDepend\\Engine' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Engine.php', + 'PDepend\\Input\\CompositeFilter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Input/CompositeFilter.php', + 'PDepend\\Input\\ExcludePathFilter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Input/ExcludePathFilter.php', + 'PDepend\\Input\\ExtensionFilter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Input/ExtensionFilter.php', + 'PDepend\\Input\\Filter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Input/Filter.php', + 'PDepend\\Input\\Iterator' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Input/Iterator.php', + 'PDepend\\Metrics\\AbstractAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AbstractAnalyzer.php', + 'PDepend\\Metrics\\AbstractCachingAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AbstractCachingAnalyzer.php', + 'PDepend\\Metrics\\AggregateAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AggregateAnalyzer.php', + 'PDepend\\Metrics\\Analyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer.php', + 'PDepend\\Metrics\\AnalyzerCacheAware' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerCacheAware.php', + 'PDepend\\Metrics\\AnalyzerFactory' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerFactory.php', + 'PDepend\\Metrics\\AnalyzerFilterAware' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerFilterAware.php', + 'PDepend\\Metrics\\AnalyzerIterator' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerIterator.php', + 'PDepend\\Metrics\\AnalyzerListener' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerListener.php', + 'PDepend\\Metrics\\AnalyzerNodeAware' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerNodeAware.php', + 'PDepend\\Metrics\\AnalyzerProjectAware' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerProjectAware.php', + 'PDepend\\Metrics\\Analyzer\\ClassDependencyAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/ClassDependencyAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\ClassLevelAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/ClassLevelAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\CodeRankStrategyI' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/CodeRankStrategyI.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\InheritanceStrategy' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/InheritanceStrategy.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\MethodStrategy' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/MethodStrategy.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\PropertyStrategy' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/PropertyStrategy.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\StrategyFactory' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/StrategyFactory.php', + 'PDepend\\Metrics\\Analyzer\\CohesionAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CohesionAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CouplingAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CouplingAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CrapIndexAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CrapIndexAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CyclomaticComplexityAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CyclomaticComplexityAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\DependencyAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/DependencyAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\HalsteadAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/HalsteadAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\HierarchyAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/HierarchyAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\InheritanceAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/InheritanceAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\MaintainabilityIndexAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/MaintainabilityIndexAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\NPathComplexityAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/NPathComplexityAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\NodeCountAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/NodeCountAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\NodeLocAnalyzer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/NodeLocAnalyzer.php', + 'PDepend\\ProcessListener' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/ProcessListener.php', + 'PDepend\\Report\\CodeAwareGenerator' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/CodeAwareGenerator.php', + 'PDepend\\Report\\Dependencies\\Xml' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/Dependencies/Xml.php', + 'PDepend\\Report\\FileAwareGenerator' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/FileAwareGenerator.php', + 'PDepend\\Report\\Jdepend\\Chart' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/Jdepend/Chart.php', + 'PDepend\\Report\\Jdepend\\Xml' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/Jdepend/Xml.php', + 'PDepend\\Report\\NoLogOutputException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/NoLogOutputException.php', + 'PDepend\\Report\\Overview\\Pyramid' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/Overview/Pyramid.php', + 'PDepend\\Report\\ReportGenerator' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/ReportGenerator.php', + 'PDepend\\Report\\ReportGeneratorFactory' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/ReportGeneratorFactory.php', + 'PDepend\\Report\\Summary\\Xml' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Report/Summary/Xml.php', + 'PDepend\\Source\\ASTVisitor\\ASTVisitListener' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/ASTVisitor/ASTVisitListener.php', + 'PDepend\\Source\\ASTVisitor\\ASTVisitor' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/ASTVisitor/ASTVisitor.php', + 'PDepend\\Source\\ASTVisitor\\AbstractASTVisitListener' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/ASTVisitor/AbstractASTVisitListener.php', + 'PDepend\\Source\\ASTVisitor\\AbstractASTVisitor' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/ASTVisitor/AbstractASTVisitor.php', + 'PDepend\\Source\\AST\\ASTAllocationExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTAllocationExpression.php', + 'PDepend\\Source\\AST\\ASTAnonymousClass' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTAnonymousClass.php', + 'PDepend\\Source\\AST\\ASTArguments' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArguments.php', + 'PDepend\\Source\\AST\\ASTArray' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArray.php', + 'PDepend\\Source\\AST\\ASTArrayElement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArrayElement.php', + 'PDepend\\Source\\AST\\ASTArrayIndexExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArrayIndexExpression.php', + 'PDepend\\Source\\AST\\ASTArtifact' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifact.php', + 'PDepend\\Source\\AST\\ASTArtifactList' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList.php', + 'PDepend\\Source\\AST\\ASTArtifactList\\ArtifactFilter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList/ArtifactFilter.php', + 'PDepend\\Source\\AST\\ASTArtifactList\\CollectionArtifactFilter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList/CollectionArtifactFilter.php', + 'PDepend\\Source\\AST\\ASTArtifactList\\NullArtifactFilter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList/NullArtifactFilter.php', + 'PDepend\\Source\\AST\\ASTArtifactList\\PackageArtifactFilter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList/PackageArtifactFilter.php', + 'PDepend\\Source\\AST\\ASTAssignmentExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTAssignmentExpression.php', + 'PDepend\\Source\\AST\\ASTBooleanAndExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTBooleanAndExpression.php', + 'PDepend\\Source\\AST\\ASTBooleanOrExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTBooleanOrExpression.php', + 'PDepend\\Source\\AST\\ASTBreakStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTBreakStatement.php', + 'PDepend\\Source\\AST\\ASTCallable' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCallable.php', + 'PDepend\\Source\\AST\\ASTCastExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCastExpression.php', + 'PDepend\\Source\\AST\\ASTCatchStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCatchStatement.php', + 'PDepend\\Source\\AST\\ASTClass' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClass.php', + 'PDepend\\Source\\AST\\ASTClassFqnPostfix' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassFqnPostfix.php', + 'PDepend\\Source\\AST\\ASTClassOrInterfaceRecursiveInheritanceException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassOrInterfaceRecursiveInheritanceException.php', + 'PDepend\\Source\\AST\\ASTClassOrInterfaceReference' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassOrInterfaceReference.php', + 'PDepend\\Source\\AST\\ASTClassOrInterfaceReferenceIterator' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassOrInterfaceReferenceIterator.php', + 'PDepend\\Source\\AST\\ASTClassReference' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassReference.php', + 'PDepend\\Source\\AST\\ASTCloneExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCloneExpression.php', + 'PDepend\\Source\\AST\\ASTClosure' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClosure.php', + 'PDepend\\Source\\AST\\ASTComment' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTComment.php', + 'PDepend\\Source\\AST\\ASTCompilationUnit' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCompilationUnit.php', + 'PDepend\\Source\\AST\\ASTCompilationUnitNotFoundException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCompilationUnitNotFoundException.php', + 'PDepend\\Source\\AST\\ASTCompoundExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCompoundExpression.php', + 'PDepend\\Source\\AST\\ASTCompoundVariable' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCompoundVariable.php', + 'PDepend\\Source\\AST\\ASTConditionalExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConditionalExpression.php', + 'PDepend\\Source\\AST\\ASTConstant' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConstant.php', + 'PDepend\\Source\\AST\\ASTConstantDeclarator' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConstantDeclarator.php', + 'PDepend\\Source\\AST\\ASTConstantDefinition' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConstantDefinition.php', + 'PDepend\\Source\\AST\\ASTConstantPostfix' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConstantPostfix.php', + 'PDepend\\Source\\AST\\ASTContinueStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTContinueStatement.php', + 'PDepend\\Source\\AST\\ASTDeclareStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTDeclareStatement.php', + 'PDepend\\Source\\AST\\ASTDoWhileStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTDoWhileStatement.php', + 'PDepend\\Source\\AST\\ASTEchoStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTEchoStatement.php', + 'PDepend\\Source\\AST\\ASTElseIfStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTElseIfStatement.php', + 'PDepend\\Source\\AST\\ASTEvalExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTEvalExpression.php', + 'PDepend\\Source\\AST\\ASTExitExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTExitExpression.php', + 'PDepend\\Source\\AST\\ASTExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTExpression.php', + 'PDepend\\Source\\AST\\ASTFieldDeclaration' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFieldDeclaration.php', + 'PDepend\\Source\\AST\\ASTFinallyStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFinallyStatement.php', + 'PDepend\\Source\\AST\\ASTForInit' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTForInit.php', + 'PDepend\\Source\\AST\\ASTForStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTForStatement.php', + 'PDepend\\Source\\AST\\ASTForUpdate' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTForUpdate.php', + 'PDepend\\Source\\AST\\ASTForeachStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTForeachStatement.php', + 'PDepend\\Source\\AST\\ASTFormalParameter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFormalParameter.php', + 'PDepend\\Source\\AST\\ASTFormalParameters' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFormalParameters.php', + 'PDepend\\Source\\AST\\ASTFunction' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFunction.php', + 'PDepend\\Source\\AST\\ASTFunctionPostfix' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFunctionPostfix.php', + 'PDepend\\Source\\AST\\ASTGlobalStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTGlobalStatement.php', + 'PDepend\\Source\\AST\\ASTGotoStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTGotoStatement.php', + 'PDepend\\Source\\AST\\ASTHeredoc' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTHeredoc.php', + 'PDepend\\Source\\AST\\ASTIdentifier' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIdentifier.php', + 'PDepend\\Source\\AST\\ASTIfStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIfStatement.php', + 'PDepend\\Source\\AST\\ASTIncludeExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIncludeExpression.php', + 'PDepend\\Source\\AST\\ASTIndexExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIndexExpression.php', + 'PDepend\\Source\\AST\\ASTInstanceOfExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTInstanceOfExpression.php', + 'PDepend\\Source\\AST\\ASTInterface' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTInterface.php', + 'PDepend\\Source\\AST\\ASTInvocation' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTInvocation.php', + 'PDepend\\Source\\AST\\ASTIssetExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIssetExpression.php', + 'PDepend\\Source\\AST\\ASTLabelStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLabelStatement.php', + 'PDepend\\Source\\AST\\ASTListExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTListExpression.php', + 'PDepend\\Source\\AST\\ASTLiteral' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLiteral.php', + 'PDepend\\Source\\AST\\ASTLogicalAndExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLogicalAndExpression.php', + 'PDepend\\Source\\AST\\ASTLogicalOrExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLogicalOrExpression.php', + 'PDepend\\Source\\AST\\ASTLogicalXorExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLogicalXorExpression.php', + 'PDepend\\Source\\AST\\ASTMemberPrimaryPrefix' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTMemberPrimaryPrefix.php', + 'PDepend\\Source\\AST\\ASTMethod' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTMethod.php', + 'PDepend\\Source\\AST\\ASTMethodPostfix' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTMethodPostfix.php', + 'PDepend\\Source\\AST\\ASTNamespace' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTNamespace.php', + 'PDepend\\Source\\AST\\ASTNode' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTNode.php', + 'PDepend\\Source\\AST\\ASTParameter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTParameter.php', + 'PDepend\\Source\\AST\\ASTParentReference' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTParentReference.php', + 'PDepend\\Source\\AST\\ASTPostfixExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPostfixExpression.php', + 'PDepend\\Source\\AST\\ASTPreDecrementExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPreDecrementExpression.php', + 'PDepend\\Source\\AST\\ASTPreIncrementExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPreIncrementExpression.php', + 'PDepend\\Source\\AST\\ASTPrintExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPrintExpression.php', + 'PDepend\\Source\\AST\\ASTProperty' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTProperty.php', + 'PDepend\\Source\\AST\\ASTPropertyPostfix' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPropertyPostfix.php', + 'PDepend\\Source\\AST\\ASTRequireExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTRequireExpression.php', + 'PDepend\\Source\\AST\\ASTReturnStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTReturnStatement.php', + 'PDepend\\Source\\AST\\ASTScalarType' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTScalarType.php', + 'PDepend\\Source\\AST\\ASTScope' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTScope.php', + 'PDepend\\Source\\AST\\ASTScopeStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTScopeStatement.php', + 'PDepend\\Source\\AST\\ASTSelfReference' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTSelfReference.php', + 'PDepend\\Source\\AST\\ASTShiftLeftExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTShiftLeftExpression.php', + 'PDepend\\Source\\AST\\ASTShiftRightExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTShiftRightExpression.php', + 'PDepend\\Source\\AST\\ASTStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTStatement.php', + 'PDepend\\Source\\AST\\ASTStaticReference' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTStaticReference.php', + 'PDepend\\Source\\AST\\ASTStaticVariableDeclaration' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTStaticVariableDeclaration.php', + 'PDepend\\Source\\AST\\ASTString' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTString.php', + 'PDepend\\Source\\AST\\ASTStringIndexExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTStringIndexExpression.php', + 'PDepend\\Source\\AST\\ASTSwitchLabel' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTSwitchLabel.php', + 'PDepend\\Source\\AST\\ASTSwitchStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTSwitchStatement.php', + 'PDepend\\Source\\AST\\ASTThrowStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTThrowStatement.php', + 'PDepend\\Source\\AST\\ASTTrait' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTrait.php', + 'PDepend\\Source\\AST\\ASTTraitAdaptation' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitAdaptation.php', + 'PDepend\\Source\\AST\\ASTTraitAdaptationAlias' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitAdaptationAlias.php', + 'PDepend\\Source\\AST\\ASTTraitAdaptationPrecedence' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitAdaptationPrecedence.php', + 'PDepend\\Source\\AST\\ASTTraitMethodCollisionException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitMethodCollisionException.php', + 'PDepend\\Source\\AST\\ASTTraitReference' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitReference.php', + 'PDepend\\Source\\AST\\ASTTraitUseStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitUseStatement.php', + 'PDepend\\Source\\AST\\ASTTryStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTryStatement.php', + 'PDepend\\Source\\AST\\ASTType' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTType.php', + 'PDepend\\Source\\AST\\ASTTypeArray' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTypeArray.php', + 'PDepend\\Source\\AST\\ASTTypeCallable' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTypeCallable.php', + 'PDepend\\Source\\AST\\ASTTypeIterable' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTypeIterable.php', + 'PDepend\\Source\\AST\\ASTUnaryExpression' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTUnaryExpression.php', + 'PDepend\\Source\\AST\\ASTUnsetStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTUnsetStatement.php', + 'PDepend\\Source\\AST\\ASTValue' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTValue.php', + 'PDepend\\Source\\AST\\ASTVariable' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTVariable.php', + 'PDepend\\Source\\AST\\ASTVariableDeclarator' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTVariableDeclarator.php', + 'PDepend\\Source\\AST\\ASTVariableVariable' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTVariableVariable.php', + 'PDepend\\Source\\AST\\ASTWhileStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTWhileStatement.php', + 'PDepend\\Source\\AST\\ASTYieldStatement' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTYieldStatement.php', + 'PDepend\\Source\\AST\\AbstractASTArtifact' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTArtifact.php', + 'PDepend\\Source\\AST\\AbstractASTCallable' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTCallable.php', + 'PDepend\\Source\\AST\\AbstractASTClassOrInterface' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTClassOrInterface.php', + 'PDepend\\Source\\AST\\AbstractASTNode' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTNode.php', + 'PDepend\\Source\\AST\\AbstractASTType' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTType.php', + 'PDepend\\Source\\AST\\State' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/State.php', + 'PDepend\\Source\\Builder\\Builder' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Builder/Builder.php', + 'PDepend\\Source\\Builder\\BuilderContext' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Builder/BuilderContext.php', + 'PDepend\\Source\\Builder\\BuilderContext\\GlobalBuilderContext' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Builder/BuilderContext/GlobalBuilderContext.php', + 'PDepend\\Source\\Language\\PHP\\AbstractPHPParser' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/AbstractPHPParser.php', + 'PDepend\\Source\\Language\\PHP\\PHPBuilder' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPBuilder.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserGeneric' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserGeneric.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion53' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion53.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion54' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion54.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion55' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion55.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion56' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion56.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion70' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion70.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion71' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion71.php', + 'PDepend\\Source\\Language\\PHP\\PHPTokenizerHelperVersion52' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPTokenizerHelperVersion52.php', + 'PDepend\\Source\\Language\\PHP\\PHPTokenizerInternal' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPTokenizerInternal.php', + 'PDepend\\Source\\Parser\\InvalidStateException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/InvalidStateException.php', + 'PDepend\\Source\\Parser\\MissingValueException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/MissingValueException.php', + 'PDepend\\Source\\Parser\\NoActiveScopeException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/NoActiveScopeException.php', + 'PDepend\\Source\\Parser\\ParserException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/ParserException.php', + 'PDepend\\Source\\Parser\\SymbolTable' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/SymbolTable.php', + 'PDepend\\Source\\Parser\\TokenException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/TokenException.php', + 'PDepend\\Source\\Parser\\TokenStack' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/TokenStack.php', + 'PDepend\\Source\\Parser\\TokenStreamEndException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/TokenStreamEndException.php', + 'PDepend\\Source\\Parser\\UnexpectedTokenException' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/UnexpectedTokenException.php', + 'PDepend\\Source\\Tokenizer\\Token' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Tokenizer/Token.php', + 'PDepend\\Source\\Tokenizer\\Tokenizer' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Tokenizer/Tokenizer.php', + 'PDepend\\Source\\Tokenizer\\Tokens' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Source/Tokenizer/Tokens.php', + 'PDepend\\TextUI\\Command' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/TextUI/Command.php', + 'PDepend\\TextUI\\ResultPrinter' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/TextUI/ResultPrinter.php', + 'PDepend\\TextUI\\Runner' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/TextUI/Runner.php', + 'PDepend\\Util\\Cache\\CacheDriver' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/CacheDriver.php', + 'PDepend\\Util\\Cache\\CacheFactory' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/CacheFactory.php', + 'PDepend\\Util\\Cache\\Driver\\FileCacheDriver' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/Driver/FileCacheDriver.php', + 'PDepend\\Util\\Cache\\Driver\\File\\FileCacheDirectory' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/Driver/File/FileCacheDirectory.php', + 'PDepend\\Util\\Cache\\Driver\\File\\FileCacheGarbageCollector' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/Driver/File/FileCacheGarbageCollector.php', + 'PDepend\\Util\\Cache\\Driver\\MemoryCacheDriver' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/Driver/MemoryCacheDriver.php', + 'PDepend\\Util\\Configuration' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Configuration.php', + 'PDepend\\Util\\ConfigurationInstance' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/ConfigurationInstance.php', + 'PDepend\\Util\\Coverage\\CloverReport' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Coverage/CloverReport.php', + 'PDepend\\Util\\Coverage\\Factory' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Coverage/Factory.php', + 'PDepend\\Util\\Coverage\\Report' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Coverage/Report.php', + 'PDepend\\Util\\FileUtil' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/FileUtil.php', + 'PDepend\\Util\\IdBuilder' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/IdBuilder.php', + 'PDepend\\Util\\ImageConvert' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/ImageConvert.php', + 'PDepend\\Util\\Log' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Log.php', + 'PDepend\\Util\\MathUtil' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/MathUtil.php', + 'PDepend\\Util\\Type' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Type.php', + 'PDepend\\Util\\Utf8Util' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Utf8Util.php', + 'PDepend\\Util\\Workarounds' => $vendorDir . '/pdepend/pdepend/src/main/php/PDepend/Util/Workarounds.php', + 'PHPMD\\AbstractNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/AbstractNode.php', + 'PHPMD\\AbstractRenderer' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/AbstractRenderer.php', + 'PHPMD\\AbstractRule' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/AbstractRule.php', + 'PHPMD\\AbstractWriter' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/AbstractWriter.php', + 'PHPMD\\Node\\ASTNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/ASTNode.php', + 'PHPMD\\Node\\AbstractCallableNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/AbstractCallableNode.php', + 'PHPMD\\Node\\AbstractNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/AbstractNode.php', + 'PHPMD\\Node\\AbstractTypeNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/AbstractTypeNode.php', + 'PHPMD\\Node\\Annotation' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/Annotation.php', + 'PHPMD\\Node\\Annotations' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/Annotations.php', + 'PHPMD\\Node\\ClassNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/ClassNode.php', + 'PHPMD\\Node\\FunctionNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/FunctionNode.php', + 'PHPMD\\Node\\InterfaceNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/InterfaceNode.php', + 'PHPMD\\Node\\MethodNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/MethodNode.php', + 'PHPMD\\Node\\TraitNode' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Node/TraitNode.php', + 'PHPMD\\PHPMD' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/PHPMD.php', + 'PHPMD\\Parser' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Parser.php', + 'PHPMD\\ParserFactory' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/ParserFactory.php', + 'PHPMD\\ProcessingError' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/ProcessingError.php', + 'PHPMD\\Renderer\\HTMLRenderer' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Renderer/HTMLRenderer.php', + 'PHPMD\\Renderer\\TextRenderer' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Renderer/TextRenderer.php', + 'PHPMD\\Renderer\\XMLRenderer' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Renderer/XMLRenderer.php', + 'PHPMD\\Report' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Report.php', + 'PHPMD\\Rule' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule.php', + 'PHPMD\\RuleClassFileNotFoundException' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/RuleClassFileNotFoundException.php', + 'PHPMD\\RuleClassNotFoundException' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/RuleClassNotFoundException.php', + 'PHPMD\\RuleSet' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/RuleSet.php', + 'PHPMD\\RuleSetFactory' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/RuleSetFactory.php', + 'PHPMD\\RuleSetNotFoundException' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/RuleSetNotFoundException.php', + 'PHPMD\\RuleViolation' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/RuleViolation.php', + 'PHPMD\\Rule\\AbstractLocalVariable' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/AbstractLocalVariable.php', + 'PHPMD\\Rule\\ClassAware' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/ClassAware.php', + 'PHPMD\\Rule\\CleanCode\\BooleanArgumentFlag' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/CleanCode/BooleanArgumentFlag.php', + 'PHPMD\\Rule\\CleanCode\\ElseExpression' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/CleanCode/ElseExpression.php', + 'PHPMD\\Rule\\CleanCode\\StaticAccess' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/CleanCode/StaticAccess.php', + 'PHPMD\\Rule\\Controversial\\CamelCaseClassName' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCaseClassName.php', + 'PHPMD\\Rule\\Controversial\\CamelCaseMethodName' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCaseMethodName.php', + 'PHPMD\\Rule\\Controversial\\CamelCaseParameterName' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCaseParameterName.php', + 'PHPMD\\Rule\\Controversial\\CamelCasePropertyName' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCasePropertyName.php', + 'PHPMD\\Rule\\Controversial\\CamelCaseVariableName' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCaseVariableName.php', + 'PHPMD\\Rule\\Controversial\\Superglobals' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/Superglobals.php', + 'PHPMD\\Rule\\CyclomaticComplexity' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/CyclomaticComplexity.php', + 'PHPMD\\Rule\\Design\\CouplingBetweenObjects' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/CouplingBetweenObjects.php', + 'PHPMD\\Rule\\Design\\DepthOfInheritance' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/DepthOfInheritance.php', + 'PHPMD\\Rule\\Design\\DevelopmentCodeFragment' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/DevelopmentCodeFragment.php', + 'PHPMD\\Rule\\Design\\EvalExpression' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/EvalExpression.php', + 'PHPMD\\Rule\\Design\\ExitExpression' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/ExitExpression.php', + 'PHPMD\\Rule\\Design\\GotoStatement' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/GotoStatement.php', + 'PHPMD\\Rule\\Design\\LongClass' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/LongClass.php', + 'PHPMD\\Rule\\Design\\LongMethod' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/LongMethod.php', + 'PHPMD\\Rule\\Design\\LongParameterList' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/LongParameterList.php', + 'PHPMD\\Rule\\Design\\NpathComplexity' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/NpathComplexity.php', + 'PHPMD\\Rule\\Design\\NumberOfChildren' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/NumberOfChildren.php', + 'PHPMD\\Rule\\Design\\TooManyFields' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/TooManyFields.php', + 'PHPMD\\Rule\\Design\\TooManyMethods' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/TooManyMethods.php', + 'PHPMD\\Rule\\Design\\TooManyPublicMethods' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/TooManyPublicMethods.php', + 'PHPMD\\Rule\\Design\\WeightedMethodCount' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/WeightedMethodCount.php', + 'PHPMD\\Rule\\ExcessivePublicCount' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/ExcessivePublicCount.php', + 'PHPMD\\Rule\\FunctionAware' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/FunctionAware.php', + 'PHPMD\\Rule\\InterfaceAware' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/InterfaceAware.php', + 'PHPMD\\Rule\\MethodAware' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/MethodAware.php', + 'PHPMD\\Rule\\Naming\\BooleanGetMethodName' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/BooleanGetMethodName.php', + 'PHPMD\\Rule\\Naming\\ConstantNamingConventions' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/ConstantNamingConventions.php', + 'PHPMD\\Rule\\Naming\\ConstructorWithNameAsEnclosingClass' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/ConstructorWithNameAsEnclosingClass.php', + 'PHPMD\\Rule\\Naming\\LongVariable' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/LongVariable.php', + 'PHPMD\\Rule\\Naming\\ShortMethodName' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/ShortMethodName.php', + 'PHPMD\\Rule\\Naming\\ShortVariable' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/ShortVariable.php', + 'PHPMD\\Rule\\UnusedFormalParameter' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/UnusedFormalParameter.php', + 'PHPMD\\Rule\\UnusedLocalVariable' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/UnusedLocalVariable.php', + 'PHPMD\\Rule\\UnusedPrivateField' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/UnusedPrivateField.php', + 'PHPMD\\Rule\\UnusedPrivateMethod' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Rule/UnusedPrivateMethod.php', + 'PHPMD\\TextUI\\Command' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/TextUI/Command.php', + 'PHPMD\\TextUI\\CommandLineOptions' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/TextUI/CommandLineOptions.php', + 'PHPMD\\Writer\\StreamWriter' => $vendorDir . '/phpmd/phpmd/src/main/php/PHPMD/Writer/StreamWriter.php', + 'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/ForwardCompatibility/Assert.php', + 'PHPUnit\\Framework\\BaseTestListener' => $vendorDir . '/phpunit/phpunit/src/ForwardCompatibility/BaseTestListener.php', + 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/ForwardCompatibility/TestCase.php', + 'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/ForwardCompatibility/TestListener.php', + 'PHPUnit_Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php', + 'PHPUnit_Extensions_GroupTestSuite' => $vendorDir . '/phpunit/phpunit/src/Extensions/GroupTestSuite.php', + 'PHPUnit_Extensions_PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Extensions/PhptTestCase.php', + 'PHPUnit_Extensions_PhptTestSuite' => $vendorDir . '/phpunit/phpunit/src/Extensions/PhptTestSuite.php', + 'PHPUnit_Extensions_RepeatedTest' => $vendorDir . '/phpunit/phpunit/src/Extensions/RepeatedTest.php', + 'PHPUnit_Extensions_TestDecorator' => $vendorDir . '/phpunit/phpunit/src/Extensions/TestDecorator.php', + 'PHPUnit_Extensions_TicketListener' => $vendorDir . '/phpunit/phpunit/src/Extensions/TicketListener.php', + 'PHPUnit_Framework_Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php', + 'PHPUnit_Framework_AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', + 'PHPUnit_Framework_BaseTestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/BaseTestListener.php', + 'PHPUnit_Framework_CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', + 'PHPUnit_Framework_Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint.php', + 'PHPUnit_Framework_Constraint_And' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/And.php', + 'PHPUnit_Framework_Constraint_ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', + 'PHPUnit_Framework_Constraint_ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', + 'PHPUnit_Framework_Constraint_Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', + 'PHPUnit_Framework_Constraint_Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', + 'PHPUnit_Framework_Constraint_ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', + 'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', + 'PHPUnit_Framework_Constraint_Composite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', + 'PHPUnit_Framework_Constraint_Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Count.php', + 'PHPUnit_Framework_Constraint_DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php', + 'PHPUnit_Framework_Constraint_Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', + 'PHPUnit_Framework_Constraint_ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', + 'PHPUnit_Framework_Constraint_ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', + 'PHPUnit_Framework_Constraint_ExceptionMessageRegExp' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegExp.php', + 'PHPUnit_Framework_Constraint_FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', + 'PHPUnit_Framework_Constraint_GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', + 'PHPUnit_Framework_Constraint_IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', + 'PHPUnit_Framework_Constraint_IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', + 'PHPUnit_Framework_Constraint_IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', + 'PHPUnit_Framework_Constraint_IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', + 'PHPUnit_Framework_Constraint_IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', + 'PHPUnit_Framework_Constraint_IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', + 'PHPUnit_Framework_Constraint_IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', + 'PHPUnit_Framework_Constraint_IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', + 'PHPUnit_Framework_Constraint_IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', + 'PHPUnit_Framework_Constraint_IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', + 'PHPUnit_Framework_Constraint_IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', + 'PHPUnit_Framework_Constraint_IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php', + 'PHPUnit_Framework_Constraint_IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', + 'PHPUnit_Framework_Constraint_IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', + 'PHPUnit_Framework_Constraint_IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php', + 'PHPUnit_Framework_Constraint_JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', + 'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches/ErrorMessageProvider.php', + 'PHPUnit_Framework_Constraint_LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', + 'PHPUnit_Framework_Constraint_Not' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Not.php', + 'PHPUnit_Framework_Constraint_ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', + 'PHPUnit_Framework_Constraint_Or' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Or.php', + 'PHPUnit_Framework_Constraint_PCREMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/PCREMatch.php', + 'PHPUnit_Framework_Constraint_SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', + 'PHPUnit_Framework_Constraint_StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', + 'PHPUnit_Framework_Constraint_StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', + 'PHPUnit_Framework_Constraint_StringMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatches.php', + 'PHPUnit_Framework_Constraint_StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', + 'PHPUnit_Framework_Constraint_TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', + 'PHPUnit_Framework_Constraint_TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', + 'PHPUnit_Framework_Constraint_Xor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Xor.php', + 'PHPUnit_Framework_CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_CoveredCodeNotExecutedException.php', + 'PHPUnit_Framework_Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error.php', + 'PHPUnit_Framework_Error_Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', + 'PHPUnit_Framework_Error_Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php', + 'PHPUnit_Framework_Error_Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php', + 'PHPUnit_Framework_Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception.php', + 'PHPUnit_Framework_ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', + 'PHPUnit_Framework_ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', + 'PHPUnit_Framework_IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php', + 'PHPUnit_Framework_IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', + 'PHPUnit_Framework_IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', + 'PHPUnit_Framework_InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', + 'PHPUnit_Framework_MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_MissingCoversAnnotationException.php', + 'PHPUnit_Framework_MockObject_BadMethodCallException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php', + 'PHPUnit_Framework_MockObject_Builder_Identity' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php', + 'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php', + 'PHPUnit_Framework_MockObject_Builder_Match' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php', + 'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php', + 'PHPUnit_Framework_MockObject_Builder_Namespace' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php', + 'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php', + 'PHPUnit_Framework_MockObject_Builder_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php', + 'PHPUnit_Framework_MockObject_Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php', + 'PHPUnit_Framework_MockObject_Generator' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php', + 'PHPUnit_Framework_MockObject_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php', + 'PHPUnit_Framework_MockObject_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php', + 'PHPUnit_Framework_MockObject_Invocation_Object' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php', + 'PHPUnit_Framework_MockObject_Invocation_Static' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php', + 'PHPUnit_Framework_MockObject_Invokable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php', + 'PHPUnit_Framework_MockObject_Matcher' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php', + 'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php', + 'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php', + 'PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php', + 'PHPUnit_Framework_MockObject_Matcher_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php', + 'PHPUnit_Framework_MockObject_Matcher_MethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php', + 'PHPUnit_Framework_MockObject_Matcher_Parameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php', + 'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php', + 'PHPUnit_Framework_MockObject_MockBuilder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php', + 'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php', + 'PHPUnit_Framework_MockObject_RuntimeException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php', + 'PHPUnit_Framework_MockObject_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php', + 'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php', + 'PHPUnit_Framework_MockObject_Stub_Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php', + 'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php', + 'PHPUnit_Framework_MockObject_Stub_Return' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnReference' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnReference.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php', + 'PHPUnit_Framework_MockObject_Verifiable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php', + 'PHPUnit_Framework_OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/OutputError.php', + 'PHPUnit_Framework_RiskyTest' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTest.php', + 'PHPUnit_Framework_RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTestError.php', + 'PHPUnit_Framework_SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', + 'PHPUnit_Framework_SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php', + 'PHPUnit_Framework_SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', + 'PHPUnit_Framework_SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestError.php', + 'PHPUnit_Framework_SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', + 'PHPUnit_Framework_SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/SyntheticError.php', + 'PHPUnit_Framework_Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php', + 'PHPUnit_Framework_TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', + 'PHPUnit_Framework_TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php', + 'PHPUnit_Framework_TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php', + 'PHPUnit_Framework_TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php', + 'PHPUnit_Framework_TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php', + 'PHPUnit_Framework_TestSuite_DataProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite/DataProvider.php', + 'PHPUnit_Framework_UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', + 'PHPUnit_Framework_Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Warning.php', + 'PHPUnit_Framework_WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php', + 'PHPUnit_Runner_BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', + 'PHPUnit_Runner_Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php', + 'PHPUnit_Runner_Filter_Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php', + 'PHPUnit_Runner_Filter_GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Group.php', + 'PHPUnit_Runner_Filter_Group_Exclude' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Group/Exclude.php', + 'PHPUnit_Runner_Filter_Group_Include' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Group/Include.php', + 'PHPUnit_Runner_Filter_Test' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Test.php', + 'PHPUnit_Runner_StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', + 'PHPUnit_Runner_TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', + 'PHPUnit_Runner_Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php', + 'PHPUnit_TextUI_Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php', + 'PHPUnit_TextUI_ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', + 'PHPUnit_TextUI_TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php', + 'PHPUnit_Util_Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php', + 'PHPUnit_Util_Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php', + 'PHPUnit_Util_ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', + 'PHPUnit_Util_ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php', + 'PHPUnit_Util_Fileloader' => $vendorDir . '/phpunit/phpunit/src/Util/Fileloader.php', + 'PHPUnit_Util_Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php', + 'PHPUnit_Util_Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php', + 'PHPUnit_Util_Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php', + 'PHPUnit_Util_GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php', + 'PHPUnit_Util_InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', + 'PHPUnit_Util_Log_JSON' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JSON.php', + 'PHPUnit_Util_Log_JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php', + 'PHPUnit_Util_Log_TAP' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TAP.php', + 'PHPUnit_Util_Log_TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php', + 'PHPUnit_Util_PHP' => $vendorDir . '/phpunit/phpunit/src/Util/PHP.php', + 'PHPUnit_Util_PHPTest' => $vendorDir . '/phpunit/phpunit/tests/Util/PHPTest.php', + 'PHPUnit_Util_PHP_Default' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/Default.php', + 'PHPUnit_Util_PHP_Windows' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/Windows.php', + 'PHPUnit_Util_Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php', + 'PHPUnit_Util_Regex' => $vendorDir . '/phpunit/phpunit/src/Util/Regex.php', + 'PHPUnit_Util_String' => $vendorDir . '/phpunit/phpunit/src/Util/String.php', + 'PHPUnit_Util_Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php', + 'PHPUnit_Util_TestDox_NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', + 'PHPUnit_Util_TestDox_ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', + 'PHPUnit_Util_TestDox_ResultPrinter_HTML' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/HTML.php', + 'PHPUnit_Util_TestDox_ResultPrinter_Text' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/Text.php', + 'PHPUnit_Util_TestDox_ResultPrinter_XML' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/XML.php', + 'PHPUnit_Util_TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Util/TestSuiteIterator.php', + 'PHPUnit_Util_Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php', + 'PHPUnit_Util_XML' => $vendorDir . '/phpunit/phpunit/src/Util/XML.php', + 'PHP_Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php', + 'PHP_TimerTest' => $vendorDir . '/phpunit/php-timer/tests/TimerTest.php', + 'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_TokenTest' => $vendorDir . '/phpunit/php-token-stream/tests/TokenTest.php', + 'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ABSTRACT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AMPERSAND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AND_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ARRAY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ARRAY_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ASYNC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AWAIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BACKTICK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BAD_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BOOLEAN_AND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BOOLEAN_OR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BOOL_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BREAK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CALLABLE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CARET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CASE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CATCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLASS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLASS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLASS_NAME_CONSTANT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLONE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLOSE_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLOSE_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLOSE_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLOSE_TAG' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COALESCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COMMA' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COMPILER_HALT_OFFSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CONCAT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CONST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CONSTANT_ENCAPSED_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CONTINUE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CURLY_OPEN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ClassTest' => $vendorDir . '/phpunit/php-token-stream/tests/Token/ClassTest.php', + 'PHP_Token_ClosureTest' => $vendorDir . '/phpunit/php-token-stream/tests/Token/ClosureTest.php', + 'PHP_Token_DEC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DEFAULT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DIR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DIV' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DIV_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOC_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOLLAR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOUBLE_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOUBLE_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOUBLE_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOUBLE_QUOTES' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ELLIPSIS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ELSE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ELSEIF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EMPTY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENCAPSED_AND_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDDECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDFOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDFOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDIF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDSWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDWHILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_END_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENUM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EQUALS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EVAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EXCLAMATION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EXIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EXTENDS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FINAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FINALLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FUNC_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FunctionTest' => $vendorDir . '/phpunit/php-token-stream/tests/Token/FunctionTest.php', + 'PHP_Token_GLOBAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_GOTO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INLINE_HTML' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INSTANCEOF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INSTEADOF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INTERFACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ISSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_GREATER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_NOT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IncludeTest' => $vendorDir . '/phpunit/php-token-stream/tests/Token/IncludeTest.php', + 'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_InterfaceTest' => $vendorDir . '/phpunit/php-token-stream/tests/Token/InterfaceTest.php', + 'PHP_Token_JOIN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LAMBDA_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LAMBDA_CP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LAMBDA_OP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LOGICAL_AND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LOGICAL_OR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LOGICAL_XOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_METHOD_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MINUS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MINUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MOD_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MULT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MUL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NAMESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NULLSAFE_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NamespaceTest' => $vendorDir . '/phpunit/php-token-stream/tests/Token/NamespaceTest.php', + 'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ONUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_TAG' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_TAG_WITH_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PERCENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PIPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PLUS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PLUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_POW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_POW_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PRINT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PRIVATE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PROTECTED' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PUBLIC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_QUESTION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_REQUIRE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SHAPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SPACESHIP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_START_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_STATIC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_STRING_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_STRING_VARNAME' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SUPER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_Stream' => $vendorDir . '/phpunit/php-token-stream/src/Token/Stream.php', + 'PHP_Token_Stream_CachingFactory' => $vendorDir . '/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php', + 'PHP_Token_THROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TILDE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TYPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TYPELIST_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TYPELIST_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_USE_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_VAR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_VARIABLE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_WHERE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_WHILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_ATTRIBUTE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_CATEGORY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_CATEGORY_LABEL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_CHILDREN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_LABEL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_REQUIRED' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_TAG_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_TAG_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_TEXT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'ParentClassWithPrivateAttributes' => $vendorDir . '/phpunit/phpunit/tests/_files/ClassWithNonPublicAttributes.php', + 'ParentClassWithProtectedAttributes' => $vendorDir . '/phpunit/phpunit/tests/_files/ClassWithNonPublicAttributes.php', + 'ParentSuite' => $vendorDir . '/phpunit/phpunit/tests/Regression/Trac/783/ParentSuite.php', + 'Parsedown' => $vendorDir . '/erusev/parsedown/Parsedown.php', + 'PartialMockTestClass' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/PartialMockTestClass.php', + 'PhpCollection\\AbstractCollection' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/AbstractCollection.php', + 'PhpCollection\\AbstractMap' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/AbstractMap.php', + 'PhpCollection\\AbstractSequence' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/AbstractSequence.php', + 'PhpCollection\\CollectionInterface' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/CollectionInterface.php', + 'PhpCollection\\EntityLikeObject' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/EntityLikeObject.php', + 'PhpCollection\\Map' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/Map.php', + 'PhpCollection\\MapInterface' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/MapInterface.php', + 'PhpCollection\\ObjectBasics' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasics.php', + 'PhpCollection\\ObjectBasicsHandler' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasicsHandler.php', + 'PhpCollection\\ObjectBasicsHandlerRegistry' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasicsHandlerRegistry.php', + 'PhpCollection\\ObjectBasicsHandler\\DateTimeHandler' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasicsHandler/DateTimeHandler.php', + 'PhpCollection\\ObjectBasicsHandler\\IdentityHandler' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasicsHandler/IdentityHandler.php', + 'PhpCollection\\Sequence' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/Sequence.php', + 'PhpCollection\\SequenceInterface' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/SequenceInterface.php', + 'PhpCollection\\Set' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/Set.php', + 'PhpCollection\\SetInterface' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/SetInterface.php', + 'PhpCollection\\SortableInterface' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/SortableInterface.php', + 'PhpCollection\\SortedSequence' => $vendorDir . '/phpcollection/phpcollection/src/PhpCollection/SortedSequence.php', + 'PhpCollection\\Tests\\MapTest' => $vendorDir . '/phpcollection/phpcollection/tests/PhpCollection/Tests/MapTest.php', + 'PhpCollection\\Tests\\ObjectThatImplementsBasics' => $vendorDir . '/phpcollection/phpcollection/tests/PhpCollection/Tests/SetTest.php', + 'PhpCollection\\Tests\\SequenceTest' => $vendorDir . '/phpcollection/phpcollection/tests/PhpCollection/Tests/SequenceTest.php', + 'PhpCollection\\Tests\\SetTest' => $vendorDir . '/phpcollection/phpcollection/tests/PhpCollection/Tests/SetTest.php', + 'PhpCollection\\Tests\\SortedSequenceTest' => $vendorDir . '/phpcollection/phpcollection/tests/PhpCollection/Tests/SortedSequenceTest.php', + 'PhpOption\\LazyOption' => $vendorDir . '/phpoption/phpoption/src/PhpOption/LazyOption.php', + 'PhpOption\\None' => $vendorDir . '/phpoption/phpoption/src/PhpOption/None.php', + 'PhpOption\\Option' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Option.php', + 'PhpOption\\Some' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Some.php', + 'PhpOption\\Tests\\EnsureTest' => $vendorDir . '/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php', + 'PhpOption\\Tests\\LazyOptionTest' => $vendorDir . '/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php', + 'PhpOption\\Tests\\NoneTest' => $vendorDir . '/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php', + 'PhpOption\\Tests\\OptionTest' => $vendorDir . '/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php', + 'PhpOption\\Tests\\PerformanceTest' => $vendorDir . '/phpoption/phpoption/tests/PhpOption/Tests/PerformanceTest.php', + 'PhpOption\\Tests\\PhpOptionRepo' => $vendorDir . '/phpoption/phpoption/tests/PhpOption/Tests/PerformanceTest.php', + 'PhpOption\\Tests\\Repository' => $vendorDir . '/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php', + 'PhpOption\\Tests\\SomeTest' => $vendorDir . '/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php', + 'PhpOption\\Tests\\TraditionalRepo' => $vendorDir . '/phpoption/phpoption/tests/PhpOption/Tests/PerformanceTest.php', + 'PhpParser\\Autoloader' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Autoloader.php', + 'PhpParser\\AutoloaderTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/AutoloaderTest.php', + 'PhpParser\\Builder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder.php', + 'PhpParser\\BuilderAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderAbstract.php', + 'PhpParser\\BuilderFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', + 'PhpParser\\BuilderFactoryTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php', + 'PhpParser\\Builder\\ClassTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Builder/ClassTest.php', + 'PhpParser\\Builder\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', + 'PhpParser\\Builder\\Declaration' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', + 'PhpParser\\Builder\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', + 'PhpParser\\Builder\\FunctionTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php', + 'PhpParser\\Builder\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', + 'PhpParser\\Builder\\InterfaceTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php', + 'PhpParser\\Builder\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', + 'PhpParser\\Builder\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Method.php', + 'PhpParser\\Builder\\MethodTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Builder/MethodTest.php', + 'PhpParser\\Builder\\NamespaceTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php', + 'PhpParser\\Builder\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php', + 'PhpParser\\Builder\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Param.php', + 'PhpParser\\Builder\\ParamTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Builder/ParamTest.php', + 'PhpParser\\Builder\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Property.php', + 'PhpParser\\Builder\\PropertyTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php', + 'PhpParser\\Builder\\TraitTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Builder/TraitTest.php', + 'PhpParser\\Builder\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php', + 'PhpParser\\Builder\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php', + 'PhpParser\\CodeTestAbstract' => $vendorDir . '/nikic/php-parser/test/PhpParser/CodeTestAbstract.php', + 'PhpParser\\Comment' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment.php', + 'PhpParser\\CommentTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/CommentTest.php', + 'PhpParser\\Comment\\Doc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php', + 'PhpParser\\DummyNode' => $vendorDir . '/nikic/php-parser/test/PhpParser/NodeAbstractTest.php', + 'PhpParser\\Error' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Error.php', + 'PhpParser\\ErrorTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/ErrorTest.php', + 'PhpParser\\InvalidTokenLexer' => $vendorDir . '/nikic/php-parser/test/PhpParser/ParserTest.php', + 'PhpParser\\Lexer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer.php', + 'PhpParser\\LexerTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/LexerTest.php', + 'PhpParser\\Lexer\\Emulative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', + 'PhpParser\\Lexer\\EmulativeTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php', + 'PhpParser\\Node' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node.php', + 'PhpParser\\NodeAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', + 'PhpParser\\NodeAbstractTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/NodeAbstractTest.php', + 'PhpParser\\NodeDumper' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeDumper.php', + 'PhpParser\\NodeDumperTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/NodeDumperTest.php', + 'PhpParser\\NodeTraverser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php', + 'PhpParser\\NodeTraverserInterface' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php', + 'PhpParser\\NodeTraverserTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/NodeTraverserTest.php', + 'PhpParser\\NodeVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php', + 'PhpParser\\NodeVisitorAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php', + 'PhpParser\\NodeVisitor\\NameResolver' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', + 'PhpParser\\NodeVisitor\\NameResolverTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php', + 'PhpParser\\Node\\Arg' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', + 'PhpParser\\Node\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', + 'PhpParser\\Node\\Expr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', + 'PhpParser\\Node\\Expr\\ArrayDimFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', + 'PhpParser\\Node\\Expr\\ArrayItem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php', + 'PhpParser\\Node\\Expr\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php', + 'PhpParser\\Node\\Expr\\Assign' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php', + 'PhpParser\\Node\\Expr\\AssignOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php', + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php', + 'PhpParser\\Node\\Expr\\AssignRef' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php', + 'PhpParser\\Node\\Expr\\BinaryOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', + 'PhpParser\\Node\\Expr\\BitwiseNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', + 'PhpParser\\Node\\Expr\\BooleanNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', + 'PhpParser\\Node\\Expr\\Cast' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', + 'PhpParser\\Node\\Expr\\Cast\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', + 'PhpParser\\Node\\Expr\\Cast\\Double' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php', + 'PhpParser\\Node\\Expr\\Cast\\Int_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php', + 'PhpParser\\Node\\Expr\\Cast\\Object_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php', + 'PhpParser\\Node\\Expr\\Cast\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php', + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php', + 'PhpParser\\Node\\Expr\\ClassConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php', + 'PhpParser\\Node\\Expr\\Clone_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php', + 'PhpParser\\Node\\Expr\\Closure' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php', + 'PhpParser\\Node\\Expr\\ClosureUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php', + 'PhpParser\\Node\\Expr\\ConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php', + 'PhpParser\\Node\\Expr\\Empty_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php', + 'PhpParser\\Node\\Expr\\ErrorSuppress' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php', + 'PhpParser\\Node\\Expr\\Eval_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php', + 'PhpParser\\Node\\Expr\\Exit_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php', + 'PhpParser\\Node\\Expr\\FuncCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php', + 'PhpParser\\Node\\Expr\\Include_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php', + 'PhpParser\\Node\\Expr\\Instanceof_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', + 'PhpParser\\Node\\Expr\\Isset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', + 'PhpParser\\Node\\Expr\\List_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', + 'PhpParser\\Node\\Expr\\MethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', + 'PhpParser\\Node\\Expr\\New_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', + 'PhpParser\\Node\\Expr\\PostDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', + 'PhpParser\\Node\\Expr\\PostInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', + 'PhpParser\\Node\\Expr\\PreDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', + 'PhpParser\\Node\\Expr\\PreInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php', + 'PhpParser\\Node\\Expr\\Print_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php', + 'PhpParser\\Node\\Expr\\PropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php', + 'PhpParser\\Node\\Expr\\ShellExec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php', + 'PhpParser\\Node\\Expr\\StaticCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', + 'PhpParser\\Node\\Expr\\Ternary' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', + 'PhpParser\\Node\\Expr\\UnaryMinus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', + 'PhpParser\\Node\\Expr\\UnaryPlus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', + 'PhpParser\\Node\\Expr\\Variable' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', + 'PhpParser\\Node\\Expr\\YieldFrom' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php', + 'PhpParser\\Node\\Expr\\Yield_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', + 'PhpParser\\Node\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', + 'PhpParser\\Node\\Name' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name.php', + 'PhpParser\\Node\\NameTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Node/NameTest.php', + 'PhpParser\\Node\\Name\\FullyQualified' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', + 'PhpParser\\Node\\Name\\Relative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', + 'PhpParser\\Node\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Param.php', + 'PhpParser\\Node\\Scalar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php', + 'PhpParser\\Node\\Scalar\\DNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php', + 'PhpParser\\Node\\Scalar\\Encapsed' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php', + 'PhpParser\\Node\\Scalar\\LNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php', + 'PhpParser\\Node\\Scalar\\MagicConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php', + 'PhpParser\\Node\\Scalar\\MagicConstTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php', + 'PhpParser\\Node\\Scalar\\StringTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php', + 'PhpParser\\Node\\Scalar\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php', + 'PhpParser\\Node\\Stmt' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php', + 'PhpParser\\Node\\Stmt\\Break_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php', + 'PhpParser\\Node\\Stmt\\Case_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php', + 'PhpParser\\Node\\Stmt\\Catch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php', + 'PhpParser\\Node\\Stmt\\ClassConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php', + 'PhpParser\\Node\\Stmt\\ClassLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php', + 'PhpParser\\Node\\Stmt\\ClassMethod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php', + 'PhpParser\\Node\\Stmt\\ClassMethodTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php', + 'PhpParser\\Node\\Stmt\\ClassTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php', + 'PhpParser\\Node\\Stmt\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php', + 'PhpParser\\Node\\Stmt\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php', + 'PhpParser\\Node\\Stmt\\Continue_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php', + 'PhpParser\\Node\\Stmt\\DeclareDeclare' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php', + 'PhpParser\\Node\\Stmt\\Declare_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php', + 'PhpParser\\Node\\Stmt\\Do_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php', + 'PhpParser\\Node\\Stmt\\Echo_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', + 'PhpParser\\Node\\Stmt\\ElseIf_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', + 'PhpParser\\Node\\Stmt\\Else_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', + 'PhpParser\\Node\\Stmt\\For_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', + 'PhpParser\\Node\\Stmt\\Foreach_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php', + 'PhpParser\\Node\\Stmt\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php', + 'PhpParser\\Node\\Stmt\\Global_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php', + 'PhpParser\\Node\\Stmt\\Goto_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php', + 'PhpParser\\Node\\Stmt\\HaltCompiler' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php', + 'PhpParser\\Node\\Stmt\\If_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php', + 'PhpParser\\Node\\Stmt\\InlineHTML' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php', + 'PhpParser\\Node\\Stmt\\InterfaceTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php', + 'PhpParser\\Node\\Stmt\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php', + 'PhpParser\\Node\\Stmt\\Label' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php', + 'PhpParser\\Node\\Stmt\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php', + 'PhpParser\\Node\\Stmt\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php', + 'PhpParser\\Node\\Stmt\\PropertyProperty' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php', + 'PhpParser\\Node\\Stmt\\PropertyTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php', + 'PhpParser\\Node\\Stmt\\Return_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php', + 'PhpParser\\Node\\Stmt\\StaticVar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php', + 'PhpParser\\Node\\Stmt\\Static_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php', + 'PhpParser\\Node\\Stmt\\Switch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php', + 'PhpParser\\Node\\Stmt\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php', + 'PhpParser\\Node\\Stmt\\TraitUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', + 'PhpParser\\Node\\Stmt\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php', + 'PhpParser\\Node\\Stmt\\TryCatch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php', + 'PhpParser\\Node\\Stmt\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php', + 'PhpParser\\Node\\Stmt\\UseUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', + 'PhpParser\\Node\\Stmt\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', + 'PhpParser\\Node\\Stmt\\While_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', + 'PhpParser\\Parser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser.php', + 'PhpParser\\ParserAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', + 'PhpParser\\ParserTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/ParserTest.php', + 'PhpParser\\PrettyPrinterAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', + 'PhpParser\\PrettyPrinterTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php', + 'PhpParser\\PrettyPrinter\\Standard' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', + 'PhpParser\\Serializer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Serializer.php', + 'PhpParser\\Serializer\\XML' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Serializer/XML.php', + 'PhpParser\\Serializer\\XMLTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Serializer/XMLTest.php', + 'PhpParser\\Unserializer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Unserializer.php', + 'PhpParser\\Unserializer\\XML' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Unserializer/XML.php', + 'PhpParser\\Unserializer\\XMLTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Unserializer/XMLTest.php', + 'PhpTestCaseProxy' => $vendorDir . '/phpunit/phpunit/tests/Extensions/PhptTestCaseTest.php', + 'Pimple' => $vendorDir . '/pimple/pimple/lib/Pimple.php', + 'Pimple\\Tests\\Invokable' => $vendorDir . '/pimple/pimple/tests/Pimple/Tests/Invokable.php', + 'Pimple\\Tests\\NonInvokable' => $vendorDir . '/pimple/pimple/tests/Pimple/Tests/NonInvokable.php', + 'Pimple\\Tests\\PimpleTest' => $vendorDir . '/pimple/pimple/tests/Pimple/Tests/PimpleTest.php', + 'Pimple\\Tests\\Service' => $vendorDir . '/pimple/pimple/tests/Pimple/Tests/Service.php', + 'Prophecy\\Argument' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument.php', + 'Prophecy\\Argument\\ArgumentsWildcard' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php', + 'Prophecy\\Argument\\Token\\AnyValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValueToken.php', + 'Prophecy\\Argument\\Token\\AnyValuesToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValuesToken.php', + 'Prophecy\\Argument\\Token\\ApproximateValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ApproximateValueToken.php', + 'Prophecy\\Argument\\Token\\ArrayCountToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayCountToken.php', + 'Prophecy\\Argument\\Token\\ArrayEntryToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEntryToken.php', + 'Prophecy\\Argument\\Token\\ArrayEveryEntryToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEveryEntryToken.php', + 'Prophecy\\Argument\\Token\\CallbackToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/CallbackToken.php', + 'Prophecy\\Argument\\Token\\ExactValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ExactValueToken.php', + 'Prophecy\\Argument\\Token\\IdenticalValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/IdenticalValueToken.php', + 'Prophecy\\Argument\\Token\\LogicalAndToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalAndToken.php', + 'Prophecy\\Argument\\Token\\LogicalNotToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalNotToken.php', + 'Prophecy\\Argument\\Token\\ObjectStateToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php', + 'Prophecy\\Argument\\Token\\StringContainsToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/StringContainsToken.php', + 'Prophecy\\Argument\\Token\\TokenInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/TokenInterface.php', + 'Prophecy\\Argument\\Token\\TypeToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/TypeToken.php', + 'Prophecy\\Call\\Call' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Call/Call.php', + 'Prophecy\\Call\\CallCenter' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Call/CallCenter.php', + 'Prophecy\\Comparator\\ClosureComparator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Comparator/ClosureComparator.php', + 'Prophecy\\Comparator\\Factory' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Comparator/Factory.php', + 'Prophecy\\Comparator\\ProphecyComparator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Comparator/ProphecyComparator.php', + 'Prophecy\\Doubler\\CachedDoubler' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/CachedDoubler.php', + 'Prophecy\\Doubler\\ClassPatch\\ClassPatchInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ClassPatchInterface.php', + 'Prophecy\\Doubler\\ClassPatch\\DisableConstructorPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/DisableConstructorPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\HhvmExceptionPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/HhvmExceptionPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\KeywordPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\MagicCallPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\ProphecySubjectPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\ReflectionClassNewInstancePatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatch.php', + 'Prophecy\\Doubler\\ClassPatch\\SplFileInfoPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\TraversablePatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/TraversablePatch.php', + 'Prophecy\\Doubler\\DoubleInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/DoubleInterface.php', + 'Prophecy\\Doubler\\Doubler' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Doubler.php', + 'Prophecy\\Doubler\\Generator\\ClassCodeGenerator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php', + 'Prophecy\\Doubler\\Generator\\ClassCreator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCreator.php', + 'Prophecy\\Doubler\\Generator\\ClassMirror' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php', + 'Prophecy\\Doubler\\Generator\\Node\\ArgumentNode' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php', + 'Prophecy\\Doubler\\Generator\\Node\\ClassNode' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php', + 'Prophecy\\Doubler\\Generator\\Node\\MethodNode' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php', + 'Prophecy\\Doubler\\Generator\\ReflectionInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ReflectionInterface.php', + 'Prophecy\\Doubler\\Generator\\TypeHintReference' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/TypeHintReference.php', + 'Prophecy\\Doubler\\LazyDouble' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/LazyDouble.php', + 'Prophecy\\Doubler\\NameGenerator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/NameGenerator.php', + 'Prophecy\\Exception\\Call\\UnexpectedCallException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Call/UnexpectedCallException.php', + 'Prophecy\\Exception\\Doubler\\ClassCreatorException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassCreatorException.php', + 'Prophecy\\Exception\\Doubler\\ClassMirrorException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassMirrorException.php', + 'Prophecy\\Exception\\Doubler\\ClassNotFoundException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassNotFoundException.php', + 'Prophecy\\Exception\\Doubler\\DoubleException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoubleException.php', + 'Prophecy\\Exception\\Doubler\\DoublerException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoublerException.php', + 'Prophecy\\Exception\\Doubler\\InterfaceNotFoundException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/InterfaceNotFoundException.php', + 'Prophecy\\Exception\\Doubler\\MethodNotExtendableException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotExtendableException.php', + 'Prophecy\\Exception\\Doubler\\MethodNotFoundException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotFoundException.php', + 'Prophecy\\Exception\\Doubler\\ReturnByReferenceException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ReturnByReferenceException.php', + 'Prophecy\\Exception\\Exception' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Exception.php', + 'Prophecy\\Exception\\InvalidArgumentException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/InvalidArgumentException.php', + 'Prophecy\\Exception\\Prediction\\AggregateException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/AggregateException.php', + 'Prophecy\\Exception\\Prediction\\FailedPredictionException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/FailedPredictionException.php', + 'Prophecy\\Exception\\Prediction\\NoCallsException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/NoCallsException.php', + 'Prophecy\\Exception\\Prediction\\PredictionException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/PredictionException.php', + 'Prophecy\\Exception\\Prediction\\UnexpectedCallsCountException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsCountException.php', + 'Prophecy\\Exception\\Prediction\\UnexpectedCallsException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsException.php', + 'Prophecy\\Exception\\Prophecy\\MethodProphecyException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/MethodProphecyException.php', + 'Prophecy\\Exception\\Prophecy\\ObjectProphecyException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ObjectProphecyException.php', + 'Prophecy\\Exception\\Prophecy\\ProphecyException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ProphecyException.php', + 'Prophecy\\PhpDocumentor\\ClassAndInterfaceTagRetriever' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassAndInterfaceTagRetriever.php', + 'Prophecy\\PhpDocumentor\\ClassTagRetriever' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassTagRetriever.php', + 'Prophecy\\PhpDocumentor\\LegacyClassTagRetriever' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/LegacyClassTagRetriever.php', + 'Prophecy\\PhpDocumentor\\MethodTagRetrieverInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/MethodTagRetrieverInterface.php', + 'Prophecy\\Prediction\\CallPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/CallPrediction.php', + 'Prophecy\\Prediction\\CallTimesPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/CallTimesPrediction.php', + 'Prophecy\\Prediction\\CallbackPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/CallbackPrediction.php', + 'Prophecy\\Prediction\\NoCallsPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/NoCallsPrediction.php', + 'Prophecy\\Prediction\\PredictionInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/PredictionInterface.php', + 'Prophecy\\Promise\\CallbackPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/CallbackPromise.php', + 'Prophecy\\Promise\\PromiseInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/PromiseInterface.php', + 'Prophecy\\Promise\\ReturnArgumentPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php', + 'Prophecy\\Promise\\ReturnPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/ReturnPromise.php', + 'Prophecy\\Promise\\ThrowPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php', + 'Prophecy\\Prophecy\\MethodProphecy' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php', + 'Prophecy\\Prophecy\\ObjectProphecy' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php', + 'Prophecy\\Prophecy\\ProphecyInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/ProphecyInterface.php', + 'Prophecy\\Prophecy\\ProphecySubjectInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/ProphecySubjectInterface.php', + 'Prophecy\\Prophecy\\Revealer' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/Revealer.php', + 'Prophecy\\Prophecy\\RevealerInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/RevealerInterface.php', + 'Prophecy\\Prophet' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophet.php', + 'Prophecy\\Util\\ExportUtil' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php', + 'Prophecy\\Util\\StringUtil' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Util/StringUtil.php', + 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', + 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', + 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', + 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php', + 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php', + 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php', + 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php', + 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php', + 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', + 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', + 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', + 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'RequirementsClassBeforeClassHookTest' => $vendorDir . '/phpunit/phpunit/tests/_files/RequirementsClassBeforeClassHookTest.php', + 'RequirementsClassDocBlockTest' => $vendorDir . '/phpunit/phpunit/tests/_files/RequirementsClassDocBlockTest.php', + 'RequirementsTest' => $vendorDir . '/phpunit/phpunit/tests/_files/RequirementsTest.php', + 'Runner_BaseTestRunnerTest' => $vendorDir . '/phpunit/phpunit/tests/Runner/BaseTestRunnerTest.php', + 'SampleArrayAccess' => $vendorDir . '/phpunit/phpunit/tests/_files/SampleArrayAccess.php', + 'SampleClass' => $vendorDir . '/phpunit/phpunit/tests/_files/SampleClass.php', + 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php', + 'SebastianBergmann\\CodeCoverage\\CodeCoverageTest' => $vendorDir . '/phpunit/php-code-coverage/tests/tests/CodeCoverageTest.php', + 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\HHVM' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/HHVM.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug.php', + 'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php', + 'SebastianBergmann\\CodeCoverage\\Filter' => $vendorDir . '/phpunit/php-code-coverage/src/Filter.php', + 'SebastianBergmann\\CodeCoverage\\FilterTest' => $vendorDir . '/phpunit/php-code-coverage/tests/tests/FilterTest.php', + 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php', + 'SebastianBergmann\\CodeCoverage\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.php', + 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php', + 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php', + 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php', + 'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php', + 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php', + 'SebastianBergmann\\CodeCoverage\\Report\\BuilderTest' => $vendorDir . '/phpunit/php-code-coverage/tests/tests/BuilderTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Clover.php', + 'SebastianBergmann\\CodeCoverage\\Report\\CloverTest' => $vendorDir . '/phpunit/php-code-coverage/tests/tests/CloverTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Crap4j.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Crap4jTest' => $vendorDir . '/phpunit/php-code-coverage/tests/tests/Crap4jTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Facade.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\HTMLTest' => $vendorDir . '/phpunit/php-code-coverage/tests/tests/HTMLTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', + 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php', + 'SebastianBergmann\\CodeCoverage\\Report\\TextTest' => $vendorDir . '/phpunit/php-code-coverage/tests/tests/TextTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/File.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Method.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\XMLTest' => $vendorDir . '/phpunit/php-code-coverage/tests/tests/XMLTest.php', + 'SebastianBergmann\\CodeCoverage\\RuntimeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php', + 'SebastianBergmann\\CodeCoverage\\TestCase' => $vendorDir . '/phpunit/php-code-coverage/tests/TestCase.php', + 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', + 'SebastianBergmann\\CodeCoverage\\Util' => $vendorDir . '/phpunit/php-code-coverage/src/Util.php', + 'SebastianBergmann\\CodeCoverage\\UtilTest' => $vendorDir . '/phpunit/php-code-coverage/tests/tests/UtilTest.php', + 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', + 'SebastianBergmann\\CodeUnitReverseLookup\\WizardTest' => $vendorDir . '/sebastian/code-unit-reverse-lookup/tests/WizardTest.php', + 'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php', + 'SebastianBergmann\\Comparator\\ArrayComparatorTest' => $vendorDir . '/sebastian/comparator/tests/ArrayComparatorTest.php', + 'SebastianBergmann\\Comparator\\Author' => $vendorDir . '/sebastian/comparator/tests/_files/Author.php', + 'SebastianBergmann\\Comparator\\Book' => $vendorDir . '/sebastian/comparator/tests/_files/Book.php', + 'SebastianBergmann\\Comparator\\ClassWithToString' => $vendorDir . '/sebastian/comparator/tests/_files/ClassWithToString.php', + 'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php', + 'SebastianBergmann\\Comparator\\ComparisonFailure' => $vendorDir . '/sebastian/comparator/src/ComparisonFailure.php', + 'SebastianBergmann\\Comparator\\DOMNodeComparator' => $vendorDir . '/sebastian/comparator/src/DOMNodeComparator.php', + 'SebastianBergmann\\Comparator\\DOMNodeComparatorTest' => $vendorDir . '/sebastian/comparator/tests/DOMNodeComparatorTest.php', + 'SebastianBergmann\\Comparator\\DateTimeComparator' => $vendorDir . '/sebastian/comparator/src/DateTimeComparator.php', + 'SebastianBergmann\\Comparator\\DateTimeComparatorTest' => $vendorDir . '/sebastian/comparator/tests/DateTimeComparatorTest.php', + 'SebastianBergmann\\Comparator\\DoubleComparator' => $vendorDir . '/sebastian/comparator/src/DoubleComparator.php', + 'SebastianBergmann\\Comparator\\DoubleComparatorTest' => $vendorDir . '/sebastian/comparator/tests/DoubleComparatorTest.php', + 'SebastianBergmann\\Comparator\\ExceptionComparator' => $vendorDir . '/sebastian/comparator/src/ExceptionComparator.php', + 'SebastianBergmann\\Comparator\\ExceptionComparatorTest' => $vendorDir . '/sebastian/comparator/tests/ExceptionComparatorTest.php', + 'SebastianBergmann\\Comparator\\Factory' => $vendorDir . '/sebastian/comparator/src/Factory.php', + 'SebastianBergmann\\Comparator\\FactoryTest' => $vendorDir . '/sebastian/comparator/tests/FactoryTest.php', + 'SebastianBergmann\\Comparator\\MockObjectComparator' => $vendorDir . '/sebastian/comparator/src/MockObjectComparator.php', + 'SebastianBergmann\\Comparator\\MockObjectComparatorTest' => $vendorDir . '/sebastian/comparator/tests/MockObjectComparatorTest.php', + 'SebastianBergmann\\Comparator\\NumericComparator' => $vendorDir . '/sebastian/comparator/src/NumericComparator.php', + 'SebastianBergmann\\Comparator\\NumericComparatorTest' => $vendorDir . '/sebastian/comparator/tests/NumericComparatorTest.php', + 'SebastianBergmann\\Comparator\\ObjectComparator' => $vendorDir . '/sebastian/comparator/src/ObjectComparator.php', + 'SebastianBergmann\\Comparator\\ObjectComparatorTest' => $vendorDir . '/sebastian/comparator/tests/ObjectComparatorTest.php', + 'SebastianBergmann\\Comparator\\ResourceComparator' => $vendorDir . '/sebastian/comparator/src/ResourceComparator.php', + 'SebastianBergmann\\Comparator\\ResourceComparatorTest' => $vendorDir . '/sebastian/comparator/tests/ResourceComparatorTest.php', + 'SebastianBergmann\\Comparator\\SampleClass' => $vendorDir . '/sebastian/comparator/tests/_files/SampleClass.php', + 'SebastianBergmann\\Comparator\\ScalarComparator' => $vendorDir . '/sebastian/comparator/src/ScalarComparator.php', + 'SebastianBergmann\\Comparator\\ScalarComparatorTest' => $vendorDir . '/sebastian/comparator/tests/ScalarComparatorTest.php', + 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => $vendorDir . '/sebastian/comparator/src/SplObjectStorageComparator.php', + 'SebastianBergmann\\Comparator\\SplObjectStorageComparatorTest' => $vendorDir . '/sebastian/comparator/tests/SplObjectStorageComparatorTest.php', + 'SebastianBergmann\\Comparator\\Struct' => $vendorDir . '/sebastian/comparator/tests/_files/Struct.php', + 'SebastianBergmann\\Comparator\\TestClass' => $vendorDir . '/sebastian/comparator/tests/_files/TestClass.php', + 'SebastianBergmann\\Comparator\\TestClassComparator' => $vendorDir . '/sebastian/comparator/tests/_files/TestClassComparator.php', + 'SebastianBergmann\\Comparator\\TypeComparator' => $vendorDir . '/sebastian/comparator/src/TypeComparator.php', + 'SebastianBergmann\\Comparator\\TypeComparatorTest' => $vendorDir . '/sebastian/comparator/tests/TypeComparatorTest.php', + 'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php', + 'SebastianBergmann\\Diff\\ChunkTest' => $vendorDir . '/sebastian/diff/tests/ChunkTest.php', + 'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php', + 'SebastianBergmann\\Diff\\DiffTest' => $vendorDir . '/sebastian/diff/tests/DiffTest.php', + 'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php', + 'SebastianBergmann\\Diff\\DifferTest' => $vendorDir . '/sebastian/diff/tests/DifferTest.php', + 'SebastianBergmann\\Diff\\LCS\\LongestCommonSubsequence' => $vendorDir . '/sebastian/diff/src/LCS/LongestCommonSubsequence.php', + 'SebastianBergmann\\Diff\\LCS\\LongestCommonSubsequenceTest' => $vendorDir . '/sebastian/diff/tests/LCS/LongestCommonSubsequenceTest.php', + 'SebastianBergmann\\Diff\\LCS\\MemoryEfficientImplementation' => $vendorDir . '/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php', + 'SebastianBergmann\\Diff\\LCS\\MemoryEfficientImplementationTest' => $vendorDir . '/sebastian/diff/tests/LCS/MemoryEfficientImplementationTest.php', + 'SebastianBergmann\\Diff\\LCS\\TimeEfficientImplementation' => $vendorDir . '/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php', + 'SebastianBergmann\\Diff\\LCS\\TimeEfficientImplementationTest' => $vendorDir . '/sebastian/diff/tests/LCS/TimeEfficientImplementationTest.php', + 'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php', + 'SebastianBergmann\\Diff\\LineTest' => $vendorDir . '/sebastian/diff/tests/LineTest.php', + 'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php', + 'SebastianBergmann\\Diff\\ParserTest' => $vendorDir . '/sebastian/diff/tests/ParserTest.php', + 'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php', + 'SebastianBergmann\\Environment\\ConsoleTest' => $vendorDir . '/sebastian/environment/tests/ConsoleTest.php', + 'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php', + 'SebastianBergmann\\Environment\\RuntimeTest' => $vendorDir . '/sebastian/environment/tests/RuntimeTest.php', + 'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php', + 'SebastianBergmann\\Exporter\\ExporterTest' => $vendorDir . '/sebastian/exporter/tests/ExporterTest.php', + 'SebastianBergmann\\GlobalState\\Blacklist' => $vendorDir . '/sebastian/global-state/src/Blacklist.php', + 'SebastianBergmann\\GlobalState\\BlacklistTest' => $vendorDir . '/sebastian/global-state/tests/BlacklistTest.php', + 'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php', + 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/Exception.php', + 'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php', + 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/RuntimeException.php', + 'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php', + 'SebastianBergmann\\GlobalState\\SnapshotTest' => $vendorDir . '/sebastian/global-state/tests/SnapshotTest.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedChildClass' => $vendorDir . '/sebastian/global-state/tests/_fixture/BlacklistedChildClass.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedClass' => $vendorDir . '/sebastian/global-state/tests/_fixture/BlacklistedClass.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedImplementor' => $vendorDir . '/sebastian/global-state/tests/_fixture/BlacklistedImplementor.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedInterface' => $vendorDir . '/sebastian/global-state/tests/_fixture/BlacklistedInterface.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\SnapshotClass' => $vendorDir . '/sebastian/global-state/tests/_fixture/SnapshotClass.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\SnapshotDomDocument' => $vendorDir . '/sebastian/global-state/tests/_fixture/SnapshotDomDocument.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\SnapshotTrait' => $vendorDir . '/sebastian/global-state/tests/_fixture/SnapshotTrait.php', + 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php', + 'SebastianBergmann\\ObjectEnumerator\\EnumeratorTest' => $vendorDir . '/sebastian/object-enumerator/tests/EnumeratorTest.php', + 'SebastianBergmann\\ObjectEnumerator\\Exception' => $vendorDir . '/sebastian/object-enumerator/src/Exception.php', + 'SebastianBergmann\\ObjectEnumerator\\Fixtures\\ExceptionThrower' => $vendorDir . '/sebastian/object-enumerator/tests/Fixtures/ExceptionThrower.php', + 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => $vendorDir . '/sebastian/object-enumerator/src/InvalidArgumentException.php', + 'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php', + 'SebastianBergmann\\RecursionContext\\ContextTest' => $vendorDir . '/sebastian/recursion-context/tests/ContextTest.php', + 'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php', + 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php', + 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php', + 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php', + 'Seld\\JsonLint\\DuplicateKeyException' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php', + 'Seld\\JsonLint\\JsonParser' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/JsonParser.php', + 'Seld\\JsonLint\\Lexer' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/Lexer.php', + 'Seld\\JsonLint\\ParsingException' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/ParsingException.php', + 'Seld\\JsonLint\\Undefined' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/Undefined.php', + 'Singleton' => $vendorDir . '/phpunit/phpunit/tests/_files/Singleton.php', + 'SingletonClass' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/SingletonClass.php', + 'SomeClass' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/SomeClass.php', + 'StackTest' => $vendorDir . '/phpunit/phpunit/tests/_files/StackTest.php', + 'StaticMockTestClass' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/StaticMockTestClass.php', + 'StopOnWarningTestSuite' => $vendorDir . '/phpunit/phpunit/tests/_files/StopOnWarningTestSuite.php', + 'StopsOnWarningTest' => $vendorDir . '/phpunit/phpunit/tests/_files/StopsOnWarningTest.php', + 'StringableClass' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/StringableClass.php', + 'Struct' => $vendorDir . '/phpunit/phpunit/tests/_files/Struct.php', + 'Success' => $vendorDir . '/phpunit/phpunit/tests/_files/Success.php', + 'Symfony\\Component\\Config\\ConfigCache' => $vendorDir . '/symfony/config/ConfigCache.php', + 'Symfony\\Component\\Config\\ConfigCacheFactory' => $vendorDir . '/symfony/config/ConfigCacheFactory.php', + 'Symfony\\Component\\Config\\ConfigCacheFactoryInterface' => $vendorDir . '/symfony/config/ConfigCacheFactoryInterface.php', + 'Symfony\\Component\\Config\\ConfigCacheInterface' => $vendorDir . '/symfony/config/ConfigCacheInterface.php', + 'Symfony\\Component\\Config\\Definition\\ArrayNode' => $vendorDir . '/symfony/config/Definition/ArrayNode.php', + 'Symfony\\Component\\Config\\Definition\\BaseNode' => $vendorDir . '/symfony/config/Definition/BaseNode.php', + 'Symfony\\Component\\Config\\Definition\\BooleanNode' => $vendorDir . '/symfony/config/Definition/BooleanNode.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ArrayNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/ArrayNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\BooleanNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/BooleanNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\EnumNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/EnumNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ExprBuilder' => $vendorDir . '/symfony/config/Definition/Builder/ExprBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\FloatNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/FloatNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\IntegerNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/IntegerNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\MergeBuilder' => $vendorDir . '/symfony/config/Definition/Builder/MergeBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NodeBuilder' => $vendorDir . '/symfony/config/Definition/Builder/NodeBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/NodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NodeParentInterface' => $vendorDir . '/symfony/config/Definition/Builder/NodeParentInterface.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NormalizationBuilder' => $vendorDir . '/symfony/config/Definition/Builder/NormalizationBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NumericNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/NumericNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ParentNodeDefinitionInterface' => $vendorDir . '/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ScalarNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/ScalarNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\TreeBuilder' => $vendorDir . '/symfony/config/Definition/Builder/TreeBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ValidationBuilder' => $vendorDir . '/symfony/config/Definition/Builder/ValidationBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\VariableNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/VariableNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\ConfigurationInterface' => $vendorDir . '/symfony/config/Definition/ConfigurationInterface.php', + 'Symfony\\Component\\Config\\Definition\\Dumper\\XmlReferenceDumper' => $vendorDir . '/symfony/config/Definition/Dumper/XmlReferenceDumper.php', + 'Symfony\\Component\\Config\\Definition\\Dumper\\YamlReferenceDumper' => $vendorDir . '/symfony/config/Definition/Dumper/YamlReferenceDumper.php', + 'Symfony\\Component\\Config\\Definition\\EnumNode' => $vendorDir . '/symfony/config/Definition/EnumNode.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\DuplicateKeyException' => $vendorDir . '/symfony/config/Definition/Exception/DuplicateKeyException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\Exception' => $vendorDir . '/symfony/config/Definition/Exception/Exception.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\ForbiddenOverwriteException' => $vendorDir . '/symfony/config/Definition/Exception/ForbiddenOverwriteException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\InvalidConfigurationException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidConfigurationException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\InvalidDefinitionException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidDefinitionException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\InvalidTypeException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidTypeException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\UnsetKeyException' => $vendorDir . '/symfony/config/Definition/Exception/UnsetKeyException.php', + 'Symfony\\Component\\Config\\Definition\\FloatNode' => $vendorDir . '/symfony/config/Definition/FloatNode.php', + 'Symfony\\Component\\Config\\Definition\\IntegerNode' => $vendorDir . '/symfony/config/Definition/IntegerNode.php', + 'Symfony\\Component\\Config\\Definition\\NodeInterface' => $vendorDir . '/symfony/config/Definition/NodeInterface.php', + 'Symfony\\Component\\Config\\Definition\\NumericNode' => $vendorDir . '/symfony/config/Definition/NumericNode.php', + 'Symfony\\Component\\Config\\Definition\\Processor' => $vendorDir . '/symfony/config/Definition/Processor.php', + 'Symfony\\Component\\Config\\Definition\\PrototypeNodeInterface' => $vendorDir . '/symfony/config/Definition/PrototypeNodeInterface.php', + 'Symfony\\Component\\Config\\Definition\\PrototypedArrayNode' => $vendorDir . '/symfony/config/Definition/PrototypedArrayNode.php', + 'Symfony\\Component\\Config\\Definition\\ReferenceDumper' => $vendorDir . '/symfony/config/Definition/ReferenceDumper.php', + 'Symfony\\Component\\Config\\Definition\\ScalarNode' => $vendorDir . '/symfony/config/Definition/ScalarNode.php', + 'Symfony\\Component\\Config\\Definition\\VariableNode' => $vendorDir . '/symfony/config/Definition/VariableNode.php', + 'Symfony\\Component\\Config\\Exception\\FileLoaderImportCircularReferenceException' => $vendorDir . '/symfony/config/Exception/FileLoaderImportCircularReferenceException.php', + 'Symfony\\Component\\Config\\Exception\\FileLoaderLoadException' => $vendorDir . '/symfony/config/Exception/FileLoaderLoadException.php', + 'Symfony\\Component\\Config\\FileLocator' => $vendorDir . '/symfony/config/FileLocator.php', + 'Symfony\\Component\\Config\\FileLocatorInterface' => $vendorDir . '/symfony/config/FileLocatorInterface.php', + 'Symfony\\Component\\Config\\Loader\\DelegatingLoader' => $vendorDir . '/symfony/config/Loader/DelegatingLoader.php', + 'Symfony\\Component\\Config\\Loader\\FileLoader' => $vendorDir . '/symfony/config/Loader/FileLoader.php', + 'Symfony\\Component\\Config\\Loader\\Loader' => $vendorDir . '/symfony/config/Loader/Loader.php', + 'Symfony\\Component\\Config\\Loader\\LoaderInterface' => $vendorDir . '/symfony/config/Loader/LoaderInterface.php', + 'Symfony\\Component\\Config\\Loader\\LoaderResolver' => $vendorDir . '/symfony/config/Loader/LoaderResolver.php', + 'Symfony\\Component\\Config\\Loader\\LoaderResolverInterface' => $vendorDir . '/symfony/config/Loader/LoaderResolverInterface.php', + 'Symfony\\Component\\Config\\ResourceCheckerConfigCache' => $vendorDir . '/symfony/config/ResourceCheckerConfigCache.php', + 'Symfony\\Component\\Config\\ResourceCheckerConfigCacheFactory' => $vendorDir . '/symfony/config/ResourceCheckerConfigCacheFactory.php', + 'Symfony\\Component\\Config\\ResourceCheckerInterface' => $vendorDir . '/symfony/config/ResourceCheckerInterface.php', + 'Symfony\\Component\\Config\\Resource\\BCResourceInterfaceChecker' => $vendorDir . '/symfony/config/Resource/BCResourceInterfaceChecker.php', + 'Symfony\\Component\\Config\\Resource\\DirectoryResource' => $vendorDir . '/symfony/config/Resource/DirectoryResource.php', + 'Symfony\\Component\\Config\\Resource\\FileExistenceResource' => $vendorDir . '/symfony/config/Resource/FileExistenceResource.php', + 'Symfony\\Component\\Config\\Resource\\FileResource' => $vendorDir . '/symfony/config/Resource/FileResource.php', + 'Symfony\\Component\\Config\\Resource\\ResourceInterface' => $vendorDir . '/symfony/config/Resource/ResourceInterface.php', + 'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceChecker' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceChecker.php', + 'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceInterface' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceInterface.php', + 'Symfony\\Component\\Config\\Util\\XmlUtils' => $vendorDir . '/symfony/config/Util/XmlUtils.php', + 'Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php', + 'Symfony\\Component\\Console\\Command\\Command' => $vendorDir . '/symfony/console/Command/Command.php', + 'Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php', + 'Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php', + 'Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php', + 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php', + 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => $vendorDir . '/symfony/console/Descriptor/DescriptorInterface.php', + 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => $vendorDir . '/symfony/console/Descriptor/JsonDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => $vendorDir . '/symfony/console/Descriptor/MarkdownDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/symfony/console/Descriptor/TextDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => $vendorDir . '/symfony/console/Descriptor/XmlDescriptor.php', + 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => $vendorDir . '/symfony/console/Event/ConsoleCommandEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => $vendorDir . '/symfony/console/Event/ConsoleEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleExceptionEvent' => $vendorDir . '/symfony/console/Event/ConsoleExceptionEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => $vendorDir . '/symfony/console/Event/ConsoleTerminateEvent.php', + 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php', + 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/console/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => $vendorDir . '/symfony/console/Exception/InvalidOptionException.php', + 'Symfony\\Component\\Console\\Exception\\LogicException' => $vendorDir . '/symfony/console/Exception/LogicException.php', + 'Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleStack.php', + 'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => $vendorDir . '/symfony/console/Helper/DebugFormatterHelper.php', + 'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => $vendorDir . '/symfony/console/Helper/DescriptorHelper.php', + 'Symfony\\Component\\Console\\Helper\\DialogHelper' => $vendorDir . '/symfony/console/Helper/DialogHelper.php', + 'Symfony\\Component\\Console\\Helper\\FormatterHelper' => $vendorDir . '/symfony/console/Helper/FormatterHelper.php', + 'Symfony\\Component\\Console\\Helper\\Helper' => $vendorDir . '/symfony/console/Helper/Helper.php', + 'Symfony\\Component\\Console\\Helper\\HelperInterface' => $vendorDir . '/symfony/console/Helper/HelperInterface.php', + 'Symfony\\Component\\Console\\Helper\\HelperSet' => $vendorDir . '/symfony/console/Helper/HelperSet.php', + 'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => $vendorDir . '/symfony/console/Helper/InputAwareHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProcessHelper' => $vendorDir . '/symfony/console/Helper/ProcessHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProgressBar' => $vendorDir . '/symfony/console/Helper/ProgressBar.php', + 'Symfony\\Component\\Console\\Helper\\ProgressHelper' => $vendorDir . '/symfony/console/Helper/ProgressHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => $vendorDir . '/symfony/console/Helper/ProgressIndicator.php', + 'Symfony\\Component\\Console\\Helper\\QuestionHelper' => $vendorDir . '/symfony/console/Helper/QuestionHelper.php', + 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php', + 'Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php', + 'Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php', + 'Symfony\\Component\\Console\\Helper\\TableHelper' => $vendorDir . '/symfony/console/Helper/TableHelper.php', + 'Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php', + 'Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php', + 'Symfony\\Component\\Console\\Input\\ArgvInput' => $vendorDir . '/symfony/console/Input/ArgvInput.php', + 'Symfony\\Component\\Console\\Input\\ArrayInput' => $vendorDir . '/symfony/console/Input/ArrayInput.php', + 'Symfony\\Component\\Console\\Input\\Input' => $vendorDir . '/symfony/console/Input/Input.php', + 'Symfony\\Component\\Console\\Input\\InputArgument' => $vendorDir . '/symfony/console/Input/InputArgument.php', + 'Symfony\\Component\\Console\\Input\\InputAwareInterface' => $vendorDir . '/symfony/console/Input/InputAwareInterface.php', + 'Symfony\\Component\\Console\\Input\\InputDefinition' => $vendorDir . '/symfony/console/Input/InputDefinition.php', + 'Symfony\\Component\\Console\\Input\\InputInterface' => $vendorDir . '/symfony/console/Input/InputInterface.php', + 'Symfony\\Component\\Console\\Input\\InputOption' => $vendorDir . '/symfony/console/Input/InputOption.php', + 'Symfony\\Component\\Console\\Input\\StringInput' => $vendorDir . '/symfony/console/Input/StringInput.php', + 'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => $vendorDir . '/symfony/console/Logger/ConsoleLogger.php', + 'Symfony\\Component\\Console\\Output\\BufferedOutput' => $vendorDir . '/symfony/console/Output/BufferedOutput.php', + 'Symfony\\Component\\Console\\Output\\ConsoleOutput' => $vendorDir . '/symfony/console/Output/ConsoleOutput.php', + 'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => $vendorDir . '/symfony/console/Output/ConsoleOutputInterface.php', + 'Symfony\\Component\\Console\\Output\\NullOutput' => $vendorDir . '/symfony/console/Output/NullOutput.php', + 'Symfony\\Component\\Console\\Output\\Output' => $vendorDir . '/symfony/console/Output/Output.php', + 'Symfony\\Component\\Console\\Output\\OutputInterface' => $vendorDir . '/symfony/console/Output/OutputInterface.php', + 'Symfony\\Component\\Console\\Output\\StreamOutput' => $vendorDir . '/symfony/console/Output/StreamOutput.php', + 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php', + 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php', + 'Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php', + 'Symfony\\Component\\Console\\Shell' => $vendorDir . '/symfony/console/Shell.php', + 'Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php', + 'Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php', + 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php', + 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => $vendorDir . '/symfony/console/Tester/ApplicationTester.php', + 'Symfony\\Component\\Console\\Tester\\CommandTester' => $vendorDir . '/symfony/console/Tester/CommandTester.php', + 'Symfony\\Component\\Debug\\BufferingLogger' => $vendorDir . '/symfony/debug/BufferingLogger.php', + 'Symfony\\Component\\Debug\\Debug' => $vendorDir . '/symfony/debug/Debug.php', + 'Symfony\\Component\\Debug\\DebugClassLoader' => $vendorDir . '/symfony/debug/DebugClassLoader.php', + 'Symfony\\Component\\Debug\\ErrorHandler' => $vendorDir . '/symfony/debug/ErrorHandler.php', + 'Symfony\\Component\\Debug\\ExceptionHandler' => $vendorDir . '/symfony/debug/ExceptionHandler.php', + 'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => $vendorDir . '/symfony/debug/Exception/ClassNotFoundException.php', + 'Symfony\\Component\\Debug\\Exception\\ContextErrorException' => $vendorDir . '/symfony/debug/Exception/ContextErrorException.php', + 'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => $vendorDir . '/symfony/debug/Exception/FatalErrorException.php', + 'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => $vendorDir . '/symfony/debug/Exception/FatalThrowableError.php', + 'Symfony\\Component\\Debug\\Exception\\FlattenException' => $vendorDir . '/symfony/debug/Exception/FlattenException.php', + 'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => $vendorDir . '/symfony/debug/Exception/OutOfMemoryException.php', + 'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => $vendorDir . '/symfony/debug/Exception/UndefinedFunctionException.php', + 'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => $vendorDir . '/symfony/debug/Exception/UndefinedMethodException.php', + 'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php', + 'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => $vendorDir . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php', + 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php', + 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php', + 'Symfony\\Component\\DependencyInjection\\Alias' => $vendorDir . '/symfony/dependency-injection/Alias.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\AnalyzeServiceReferencesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\AutoAliasServicePass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutoAliasServicePass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\AutowirePass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutowirePass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckCircularReferencesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckCircularReferencesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckDefinitionValidityPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckExceptionOnInvalidReferenceBehaviorPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckReferenceValidityPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckReferenceValidityPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\Compiler' => $vendorDir . '/symfony/dependency-injection/Compiler/Compiler.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface' => $vendorDir . '/symfony/dependency-injection/Compiler/CompilerPassInterface.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\DecoratorServicePass' => $vendorDir . '/symfony/dependency-injection/Compiler/DecoratorServicePass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ExtensionCompilerPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ExtensionCompilerPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\FactoryReturnTypePass' => $vendorDir . '/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\InlineServiceDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\LoggingFormatter' => $vendorDir . '/symfony/dependency-injection/Compiler/LoggingFormatter.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\MergeExtensionConfigurationPass' => $vendorDir . '/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\PassConfig' => $vendorDir . '/symfony/dependency-injection/Compiler/PassConfig.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\PriorityTaggedServiceTrait' => $vendorDir . '/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RemoveAbstractDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RemovePrivateAliasesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RemoveUnusedDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RepeatablePassInterface' => $vendorDir . '/symfony/dependency-injection/Compiler/RepeatablePassInterface.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RepeatedPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RepeatedPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ReplaceAliasByActualDefinitionPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveDefinitionTemplatesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveInvalidReferencesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveParameterPlaceHoldersPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveReferencesToAliasesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraph' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraphEdge' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraphNode' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php', + 'Symfony\\Component\\DependencyInjection\\Config\\AutowireServiceResource' => $vendorDir . '/symfony/dependency-injection/Config/AutowireServiceResource.php', + 'Symfony\\Component\\DependencyInjection\\Container' => $vendorDir . '/symfony/dependency-injection/Container.php', + 'Symfony\\Component\\DependencyInjection\\ContainerAwareInterface' => $vendorDir . '/symfony/dependency-injection/ContainerAwareInterface.php', + 'Symfony\\Component\\DependencyInjection\\ContainerAwareTrait' => $vendorDir . '/symfony/dependency-injection/ContainerAwareTrait.php', + 'Symfony\\Component\\DependencyInjection\\ContainerBuilder' => $vendorDir . '/symfony/dependency-injection/ContainerBuilder.php', + 'Symfony\\Component\\DependencyInjection\\ContainerInterface' => $vendorDir . '/symfony/dependency-injection/ContainerInterface.php', + 'Symfony\\Component\\DependencyInjection\\Definition' => $vendorDir . '/symfony/dependency-injection/Definition.php', + 'Symfony\\Component\\DependencyInjection\\DefinitionDecorator' => $vendorDir . '/symfony/dependency-injection/DefinitionDecorator.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\Dumper' => $vendorDir . '/symfony/dependency-injection/Dumper/Dumper.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\DumperInterface' => $vendorDir . '/symfony/dependency-injection/Dumper/DumperInterface.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\GraphvizDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/GraphvizDumper.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\PhpDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/PhpDumper.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\XmlDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/XmlDumper.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\YamlDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/YamlDumper.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\BadMethodCallException' => $vendorDir . '/symfony/dependency-injection/Exception/BadMethodCallException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\EnvNotFoundException' => $vendorDir . '/symfony/dependency-injection/Exception/EnvNotFoundException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\EnvParameterException' => $vendorDir . '/symfony/dependency-injection/Exception/EnvParameterException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/dependency-injection/Exception/ExceptionInterface.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/dependency-injection/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\LogicException' => $vendorDir . '/symfony/dependency-injection/Exception/LogicException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\OutOfBoundsException' => $vendorDir . '/symfony/dependency-injection/Exception/OutOfBoundsException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ParameterCircularReferenceException' => $vendorDir . '/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException' => $vendorDir . '/symfony/dependency-injection/Exception/ParameterNotFoundException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException' => $vendorDir . '/symfony/dependency-injection/Exception/RuntimeException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ServiceCircularReferenceException' => $vendorDir . '/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException' => $vendorDir . '/symfony/dependency-injection/Exception/ServiceNotFoundException.php', + 'Symfony\\Component\\DependencyInjection\\ExpressionLanguage' => $vendorDir . '/symfony/dependency-injection/ExpressionLanguage.php', + 'Symfony\\Component\\DependencyInjection\\ExpressionLanguageProvider' => $vendorDir . '/symfony/dependency-injection/ExpressionLanguageProvider.php', + 'Symfony\\Component\\DependencyInjection\\Extension\\ConfigurationExtensionInterface' => $vendorDir . '/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php', + 'Symfony\\Component\\DependencyInjection\\Extension\\Extension' => $vendorDir . '/symfony/dependency-injection/Extension/Extension.php', + 'Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface' => $vendorDir . '/symfony/dependency-injection/Extension/ExtensionInterface.php', + 'Symfony\\Component\\DependencyInjection\\Extension\\PrependExtensionInterface' => $vendorDir . '/symfony/dependency-injection/Extension/PrependExtensionInterface.php', + 'Symfony\\Component\\DependencyInjection\\LazyProxy\\Instantiator\\InstantiatorInterface' => $vendorDir . '/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php', + 'Symfony\\Component\\DependencyInjection\\LazyProxy\\Instantiator\\RealServiceInstantiator' => $vendorDir . '/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php', + 'Symfony\\Component\\DependencyInjection\\LazyProxy\\PhpDumper\\DumperInterface' => $vendorDir . '/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php', + 'Symfony\\Component\\DependencyInjection\\LazyProxy\\PhpDumper\\NullDumper' => $vendorDir . '/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\ClosureLoader' => $vendorDir . '/symfony/dependency-injection/Loader/ClosureLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\DirectoryLoader' => $vendorDir . '/symfony/dependency-injection/Loader/DirectoryLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\FileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/FileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\IniFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/IniFileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/PhpFileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\XmlFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/XmlFileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/YamlFileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Parameter' => $vendorDir . '/symfony/dependency-injection/Parameter.php', + 'Symfony\\Component\\DependencyInjection\\ParameterBag\\EnvPlaceholderParameterBag' => $vendorDir . '/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php', + 'Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag' => $vendorDir . '/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php', + 'Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag' => $vendorDir . '/symfony/dependency-injection/ParameterBag/ParameterBag.php', + 'Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface' => $vendorDir . '/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php', + 'Symfony\\Component\\DependencyInjection\\Reference' => $vendorDir . '/symfony/dependency-injection/Reference.php', + 'Symfony\\Component\\DependencyInjection\\ResettableContainerInterface' => $vendorDir . '/symfony/dependency-injection/ResettableContainerInterface.php', + 'Symfony\\Component\\DependencyInjection\\TaggedContainerInterface' => $vendorDir . '/symfony/dependency-injection/TaggedContainerInterface.php', + 'Symfony\\Component\\DependencyInjection\\Variable' => $vendorDir . '/symfony/dependency-injection/Variable.php', + 'Symfony\\Component\\EventDispatcher\\ContainerAwareEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ContainerAwareEventDispatcher.php', + 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php', + 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php', + 'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => $vendorDir . '/symfony/event-dispatcher/Debug/WrappedListener.php', + 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', + 'Symfony\\Component\\EventDispatcher\\Event' => $vendorDir . '/symfony/event-dispatcher/Event.php', + 'Symfony\\Component\\EventDispatcher\\EventDispatcher' => $vendorDir . '/symfony/event-dispatcher/EventDispatcher.php', + 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/EventDispatcherInterface.php', + 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/symfony/event-dispatcher/EventSubscriberInterface.php', + 'Symfony\\Component\\EventDispatcher\\GenericEvent' => $vendorDir . '/symfony/event-dispatcher/GenericEvent.php', + 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', + 'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php', + 'Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php', + 'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/IOExceptionInterface.php', + 'Symfony\\Component\\Filesystem\\Filesystem' => $vendorDir . '/symfony/filesystem/Filesystem.php', + 'Symfony\\Component\\Filesystem\\LockHandler' => $vendorDir . '/symfony/filesystem/LockHandler.php', + 'Symfony\\Component\\Finder\\Adapter\\AbstractAdapter' => $vendorDir . '/symfony/finder/Adapter/AbstractAdapter.php', + 'Symfony\\Component\\Finder\\Adapter\\AbstractFindAdapter' => $vendorDir . '/symfony/finder/Adapter/AbstractFindAdapter.php', + 'Symfony\\Component\\Finder\\Adapter\\AdapterInterface' => $vendorDir . '/symfony/finder/Adapter/AdapterInterface.php', + 'Symfony\\Component\\Finder\\Adapter\\BsdFindAdapter' => $vendorDir . '/symfony/finder/Adapter/BsdFindAdapter.php', + 'Symfony\\Component\\Finder\\Adapter\\GnuFindAdapter' => $vendorDir . '/symfony/finder/Adapter/GnuFindAdapter.php', + 'Symfony\\Component\\Finder\\Adapter\\PhpAdapter' => $vendorDir . '/symfony/finder/Adapter/PhpAdapter.php', + 'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php', + 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php', + 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php', + 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php', + 'Symfony\\Component\\Finder\\Exception\\AdapterFailureException' => $vendorDir . '/symfony/finder/Exception/AdapterFailureException.php', + 'Symfony\\Component\\Finder\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/finder/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Finder\\Exception\\OperationNotPermitedException' => $vendorDir . '/symfony/finder/Exception/OperationNotPermitedException.php', + 'Symfony\\Component\\Finder\\Exception\\ShellCommandFailureException' => $vendorDir . '/symfony/finder/Exception/ShellCommandFailureException.php', + 'Symfony\\Component\\Finder\\Expression\\Expression' => $vendorDir . '/symfony/finder/Expression/Expression.php', + 'Symfony\\Component\\Finder\\Expression\\Glob' => $vendorDir . '/symfony/finder/Expression/Glob.php', + 'Symfony\\Component\\Finder\\Expression\\Regex' => $vendorDir . '/symfony/finder/Expression/Regex.php', + 'Symfony\\Component\\Finder\\Expression\\ValueInterface' => $vendorDir . '/symfony/finder/Expression/ValueInterface.php', + 'Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php', + 'Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php', + 'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $vendorDir . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilePathsIterator' => $vendorDir . '/symfony/finder/Iterator/FilePathsIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php', + 'Symfony\\Component\\Finder\\Shell\\Command' => $vendorDir . '/symfony/finder/Shell/Command.php', + 'Symfony\\Component\\Finder\\Shell\\Shell' => $vendorDir . '/symfony/finder/Shell/Shell.php', + 'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php', + 'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/process/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/process/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Process\\Exception\\LogicException' => $vendorDir . '/symfony/process/Exception/LogicException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessFailedException' => $vendorDir . '/symfony/process/Exception/ProcessFailedException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => $vendorDir . '/symfony/process/Exception/ProcessTimedOutException.php', + 'Symfony\\Component\\Process\\Exception\\RuntimeException' => $vendorDir . '/symfony/process/Exception/RuntimeException.php', + 'Symfony\\Component\\Process\\ExecutableFinder' => $vendorDir . '/symfony/process/ExecutableFinder.php', + 'Symfony\\Component\\Process\\PhpExecutableFinder' => $vendorDir . '/symfony/process/PhpExecutableFinder.php', + 'Symfony\\Component\\Process\\PhpProcess' => $vendorDir . '/symfony/process/PhpProcess.php', + 'Symfony\\Component\\Process\\Pipes\\AbstractPipes' => $vendorDir . '/symfony/process/Pipes/AbstractPipes.php', + 'Symfony\\Component\\Process\\Pipes\\PipesInterface' => $vendorDir . '/symfony/process/Pipes/PipesInterface.php', + 'Symfony\\Component\\Process\\Pipes\\UnixPipes' => $vendorDir . '/symfony/process/Pipes/UnixPipes.php', + 'Symfony\\Component\\Process\\Pipes\\WindowsPipes' => $vendorDir . '/symfony/process/Pipes/WindowsPipes.php', + 'Symfony\\Component\\Process\\Process' => $vendorDir . '/symfony/process/Process.php', + 'Symfony\\Component\\Process\\ProcessBuilder' => $vendorDir . '/symfony/process/ProcessBuilder.php', + 'Symfony\\Component\\Process\\ProcessUtils' => $vendorDir . '/symfony/process/ProcessUtils.php', + 'Symfony\\Component\\Stopwatch\\Section' => $vendorDir . '/symfony/stopwatch/Section.php', + 'Symfony\\Component\\Stopwatch\\Stopwatch' => $vendorDir . '/symfony/stopwatch/Stopwatch.php', + 'Symfony\\Component\\Stopwatch\\StopwatchEvent' => $vendorDir . '/symfony/stopwatch/StopwatchEvent.php', + 'Symfony\\Component\\Stopwatch\\StopwatchPeriod' => $vendorDir . '/symfony/stopwatch/StopwatchPeriod.php', + 'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => $vendorDir . '/symfony/translation/Catalogue/AbstractOperation.php', + 'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => $vendorDir . '/symfony/translation/Catalogue/MergeOperation.php', + 'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => $vendorDir . '/symfony/translation/Catalogue/OperationInterface.php', + 'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => $vendorDir . '/symfony/translation/Catalogue/TargetOperation.php', + 'Symfony\\Component\\Translation\\DataCollectorTranslator' => $vendorDir . '/symfony/translation/DataCollectorTranslator.php', + 'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => $vendorDir . '/symfony/translation/DataCollector/TranslationDataCollector.php', + 'Symfony\\Component\\Translation\\Dumper\\CsvFileDumper' => $vendorDir . '/symfony/translation/Dumper/CsvFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\DumperInterface' => $vendorDir . '/symfony/translation/Dumper/DumperInterface.php', + 'Symfony\\Component\\Translation\\Dumper\\FileDumper' => $vendorDir . '/symfony/translation/Dumper/FileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\IcuResFileDumper' => $vendorDir . '/symfony/translation/Dumper/IcuResFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\IniFileDumper' => $vendorDir . '/symfony/translation/Dumper/IniFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\JsonFileDumper' => $vendorDir . '/symfony/translation/Dumper/JsonFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\MoFileDumper' => $vendorDir . '/symfony/translation/Dumper/MoFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\PhpFileDumper' => $vendorDir . '/symfony/translation/Dumper/PhpFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\PoFileDumper' => $vendorDir . '/symfony/translation/Dumper/PoFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\QtFileDumper' => $vendorDir . '/symfony/translation/Dumper/QtFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => $vendorDir . '/symfony/translation/Dumper/XliffFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => $vendorDir . '/symfony/translation/Dumper/YamlFileDumper.php', + 'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/translation/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => $vendorDir . '/symfony/translation/Exception/InvalidResourceException.php', + 'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => $vendorDir . '/symfony/translation/Exception/NotFoundResourceException.php', + 'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => $vendorDir . '/symfony/translation/Extractor/AbstractFileExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => $vendorDir . '/symfony/translation/Extractor/ChainExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => $vendorDir . '/symfony/translation/Extractor/ExtractorInterface.php', + 'Symfony\\Component\\Translation\\IdentityTranslator' => $vendorDir . '/symfony/translation/IdentityTranslator.php', + 'Symfony\\Component\\Translation\\Interval' => $vendorDir . '/symfony/translation/Interval.php', + 'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => $vendorDir . '/symfony/translation/Loader/ArrayLoader.php', + 'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => $vendorDir . '/symfony/translation/Loader/CsvFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\FileLoader' => $vendorDir . '/symfony/translation/Loader/FileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IcuDatFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuDatFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IcuResFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuResFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IniFileLoader' => $vendorDir . '/symfony/translation/Loader/IniFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\JsonFileLoader' => $vendorDir . '/symfony/translation/Loader/JsonFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\LoaderInterface' => $vendorDir . '/symfony/translation/Loader/LoaderInterface.php', + 'Symfony\\Component\\Translation\\Loader\\MoFileLoader' => $vendorDir . '/symfony/translation/Loader/MoFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/translation/Loader/PhpFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\PoFileLoader' => $vendorDir . '/symfony/translation/Loader/PoFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\QtFileLoader' => $vendorDir . '/symfony/translation/Loader/QtFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\XliffFileLoader' => $vendorDir . '/symfony/translation/Loader/XliffFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/translation/Loader/YamlFileLoader.php', + 'Symfony\\Component\\Translation\\LoggingTranslator' => $vendorDir . '/symfony/translation/LoggingTranslator.php', + 'Symfony\\Component\\Translation\\MessageCatalogue' => $vendorDir . '/symfony/translation/MessageCatalogue.php', + 'Symfony\\Component\\Translation\\MessageCatalogueInterface' => $vendorDir . '/symfony/translation/MessageCatalogueInterface.php', + 'Symfony\\Component\\Translation\\MessageSelector' => $vendorDir . '/symfony/translation/MessageSelector.php', + 'Symfony\\Component\\Translation\\MetadataAwareInterface' => $vendorDir . '/symfony/translation/MetadataAwareInterface.php', + 'Symfony\\Component\\Translation\\PluralizationRules' => $vendorDir . '/symfony/translation/PluralizationRules.php', + 'Symfony\\Component\\Translation\\Translator' => $vendorDir . '/symfony/translation/Translator.php', + 'Symfony\\Component\\Translation\\TranslatorBagInterface' => $vendorDir . '/symfony/translation/TranslatorBagInterface.php', + 'Symfony\\Component\\Translation\\TranslatorInterface' => $vendorDir . '/symfony/translation/TranslatorInterface.php', + 'Symfony\\Component\\Translation\\Util\\ArrayConverter' => $vendorDir . '/symfony/translation/Util/ArrayConverter.php', + 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => $vendorDir . '/symfony/translation/Writer/TranslationWriter.php', + 'Symfony\\Component\\Validator\\ClassBasedInterface' => $vendorDir . '/symfony/validator/ClassBasedInterface.php', + 'Symfony\\Component\\Validator\\Constraint' => $vendorDir . '/symfony/validator/Constraint.php', + 'Symfony\\Component\\Validator\\ConstraintValidator' => $vendorDir . '/symfony/validator/ConstraintValidator.php', + 'Symfony\\Component\\Validator\\ConstraintValidatorFactory' => $vendorDir . '/symfony/validator/ConstraintValidatorFactory.php', + 'Symfony\\Component\\Validator\\ConstraintValidatorFactoryInterface' => $vendorDir . '/symfony/validator/ConstraintValidatorFactoryInterface.php', + 'Symfony\\Component\\Validator\\ConstraintValidatorInterface' => $vendorDir . '/symfony/validator/ConstraintValidatorInterface.php', + 'Symfony\\Component\\Validator\\ConstraintViolation' => $vendorDir . '/symfony/validator/ConstraintViolation.php', + 'Symfony\\Component\\Validator\\ConstraintViolationInterface' => $vendorDir . '/symfony/validator/ConstraintViolationInterface.php', + 'Symfony\\Component\\Validator\\ConstraintViolationList' => $vendorDir . '/symfony/validator/ConstraintViolationList.php', + 'Symfony\\Component\\Validator\\ConstraintViolationListInterface' => $vendorDir . '/symfony/validator/ConstraintViolationListInterface.php', + 'Symfony\\Component\\Validator\\Constraints\\AbstractComparison' => $vendorDir . '/symfony/validator/Constraints/AbstractComparison.php', + 'Symfony\\Component\\Validator\\Constraints\\AbstractComparisonValidator' => $vendorDir . '/symfony/validator/Constraints/AbstractComparisonValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\All' => $vendorDir . '/symfony/validator/Constraints/All.php', + 'Symfony\\Component\\Validator\\Constraints\\AllValidator' => $vendorDir . '/symfony/validator/Constraints/AllValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Bic' => $vendorDir . '/symfony/validator/Constraints/Bic.php', + 'Symfony\\Component\\Validator\\Constraints\\BicValidator' => $vendorDir . '/symfony/validator/Constraints/BicValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Blank' => $vendorDir . '/symfony/validator/Constraints/Blank.php', + 'Symfony\\Component\\Validator\\Constraints\\BlankValidator' => $vendorDir . '/symfony/validator/Constraints/BlankValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Callback' => $vendorDir . '/symfony/validator/Constraints/Callback.php', + 'Symfony\\Component\\Validator\\Constraints\\CallbackValidator' => $vendorDir . '/symfony/validator/Constraints/CallbackValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\CardScheme' => $vendorDir . '/symfony/validator/Constraints/CardScheme.php', + 'Symfony\\Component\\Validator\\Constraints\\CardSchemeValidator' => $vendorDir . '/symfony/validator/Constraints/CardSchemeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Choice' => $vendorDir . '/symfony/validator/Constraints/Choice.php', + 'Symfony\\Component\\Validator\\Constraints\\ChoiceValidator' => $vendorDir . '/symfony/validator/Constraints/ChoiceValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Collection' => $vendorDir . '/symfony/validator/Constraints/Collection.php', + 'Symfony\\Component\\Validator\\Constraints\\CollectionValidator' => $vendorDir . '/symfony/validator/Constraints/CollectionValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Collection\\Optional' => $vendorDir . '/symfony/validator/Constraints/Collection/Optional.php', + 'Symfony\\Component\\Validator\\Constraints\\Collection\\Required' => $vendorDir . '/symfony/validator/Constraints/Collection/Required.php', + 'Symfony\\Component\\Validator\\Constraints\\Composite' => $vendorDir . '/symfony/validator/Constraints/Composite.php', + 'Symfony\\Component\\Validator\\Constraints\\Count' => $vendorDir . '/symfony/validator/Constraints/Count.php', + 'Symfony\\Component\\Validator\\Constraints\\CountValidator' => $vendorDir . '/symfony/validator/Constraints/CountValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Country' => $vendorDir . '/symfony/validator/Constraints/Country.php', + 'Symfony\\Component\\Validator\\Constraints\\CountryValidator' => $vendorDir . '/symfony/validator/Constraints/CountryValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Currency' => $vendorDir . '/symfony/validator/Constraints/Currency.php', + 'Symfony\\Component\\Validator\\Constraints\\CurrencyValidator' => $vendorDir . '/symfony/validator/Constraints/CurrencyValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Date' => $vendorDir . '/symfony/validator/Constraints/Date.php', + 'Symfony\\Component\\Validator\\Constraints\\DateTime' => $vendorDir . '/symfony/validator/Constraints/DateTime.php', + 'Symfony\\Component\\Validator\\Constraints\\DateTimeValidator' => $vendorDir . '/symfony/validator/Constraints/DateTimeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\DateValidator' => $vendorDir . '/symfony/validator/Constraints/DateValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Email' => $vendorDir . '/symfony/validator/Constraints/Email.php', + 'Symfony\\Component\\Validator\\Constraints\\EmailValidator' => $vendorDir . '/symfony/validator/Constraints/EmailValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\EqualTo' => $vendorDir . '/symfony/validator/Constraints/EqualTo.php', + 'Symfony\\Component\\Validator\\Constraints\\EqualToValidator' => $vendorDir . '/symfony/validator/Constraints/EqualToValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Existence' => $vendorDir . '/symfony/validator/Constraints/Existence.php', + 'Symfony\\Component\\Validator\\Constraints\\Expression' => $vendorDir . '/symfony/validator/Constraints/Expression.php', + 'Symfony\\Component\\Validator\\Constraints\\ExpressionValidator' => $vendorDir . '/symfony/validator/Constraints/ExpressionValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\False' => $vendorDir . '/symfony/validator/Constraints/False.php', + 'Symfony\\Component\\Validator\\Constraints\\FalseValidator' => $vendorDir . '/symfony/validator/Constraints/FalseValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\File' => $vendorDir . '/symfony/validator/Constraints/File.php', + 'Symfony\\Component\\Validator\\Constraints\\FileValidator' => $vendorDir . '/symfony/validator/Constraints/FileValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\GreaterThan' => $vendorDir . '/symfony/validator/Constraints/GreaterThan.php', + 'Symfony\\Component\\Validator\\Constraints\\GreaterThanOrEqual' => $vendorDir . '/symfony/validator/Constraints/GreaterThanOrEqual.php', + 'Symfony\\Component\\Validator\\Constraints\\GreaterThanOrEqualValidator' => $vendorDir . '/symfony/validator/Constraints/GreaterThanOrEqualValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\GreaterThanValidator' => $vendorDir . '/symfony/validator/Constraints/GreaterThanValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\GroupSequence' => $vendorDir . '/symfony/validator/Constraints/GroupSequence.php', + 'Symfony\\Component\\Validator\\Constraints\\GroupSequenceProvider' => $vendorDir . '/symfony/validator/Constraints/GroupSequenceProvider.php', + 'Symfony\\Component\\Validator\\Constraints\\Iban' => $vendorDir . '/symfony/validator/Constraints/Iban.php', + 'Symfony\\Component\\Validator\\Constraints\\IbanValidator' => $vendorDir . '/symfony/validator/Constraints/IbanValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\IdenticalTo' => $vendorDir . '/symfony/validator/Constraints/IdenticalTo.php', + 'Symfony\\Component\\Validator\\Constraints\\IdenticalToValidator' => $vendorDir . '/symfony/validator/Constraints/IdenticalToValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Image' => $vendorDir . '/symfony/validator/Constraints/Image.php', + 'Symfony\\Component\\Validator\\Constraints\\ImageValidator' => $vendorDir . '/symfony/validator/Constraints/ImageValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Ip' => $vendorDir . '/symfony/validator/Constraints/Ip.php', + 'Symfony\\Component\\Validator\\Constraints\\IpValidator' => $vendorDir . '/symfony/validator/Constraints/IpValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\IsFalse' => $vendorDir . '/symfony/validator/Constraints/IsFalse.php', + 'Symfony\\Component\\Validator\\Constraints\\IsFalseValidator' => $vendorDir . '/symfony/validator/Constraints/IsFalseValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\IsNull' => $vendorDir . '/symfony/validator/Constraints/IsNull.php', + 'Symfony\\Component\\Validator\\Constraints\\IsNullValidator' => $vendorDir . '/symfony/validator/Constraints/IsNullValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\IsTrue' => $vendorDir . '/symfony/validator/Constraints/IsTrue.php', + 'Symfony\\Component\\Validator\\Constraints\\IsTrueValidator' => $vendorDir . '/symfony/validator/Constraints/IsTrueValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Isbn' => $vendorDir . '/symfony/validator/Constraints/Isbn.php', + 'Symfony\\Component\\Validator\\Constraints\\IsbnValidator' => $vendorDir . '/symfony/validator/Constraints/IsbnValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Issn' => $vendorDir . '/symfony/validator/Constraints/Issn.php', + 'Symfony\\Component\\Validator\\Constraints\\IssnValidator' => $vendorDir . '/symfony/validator/Constraints/IssnValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Language' => $vendorDir . '/symfony/validator/Constraints/Language.php', + 'Symfony\\Component\\Validator\\Constraints\\LanguageValidator' => $vendorDir . '/symfony/validator/Constraints/LanguageValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Length' => $vendorDir . '/symfony/validator/Constraints/Length.php', + 'Symfony\\Component\\Validator\\Constraints\\LengthValidator' => $vendorDir . '/symfony/validator/Constraints/LengthValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\LessThan' => $vendorDir . '/symfony/validator/Constraints/LessThan.php', + 'Symfony\\Component\\Validator\\Constraints\\LessThanOrEqual' => $vendorDir . '/symfony/validator/Constraints/LessThanOrEqual.php', + 'Symfony\\Component\\Validator\\Constraints\\LessThanOrEqualValidator' => $vendorDir . '/symfony/validator/Constraints/LessThanOrEqualValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\LessThanValidator' => $vendorDir . '/symfony/validator/Constraints/LessThanValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Locale' => $vendorDir . '/symfony/validator/Constraints/Locale.php', + 'Symfony\\Component\\Validator\\Constraints\\LocaleValidator' => $vendorDir . '/symfony/validator/Constraints/LocaleValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Luhn' => $vendorDir . '/symfony/validator/Constraints/Luhn.php', + 'Symfony\\Component\\Validator\\Constraints\\LuhnValidator' => $vendorDir . '/symfony/validator/Constraints/LuhnValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\NotBlank' => $vendorDir . '/symfony/validator/Constraints/NotBlank.php', + 'Symfony\\Component\\Validator\\Constraints\\NotBlankValidator' => $vendorDir . '/symfony/validator/Constraints/NotBlankValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\NotEqualTo' => $vendorDir . '/symfony/validator/Constraints/NotEqualTo.php', + 'Symfony\\Component\\Validator\\Constraints\\NotEqualToValidator' => $vendorDir . '/symfony/validator/Constraints/NotEqualToValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\NotIdenticalTo' => $vendorDir . '/symfony/validator/Constraints/NotIdenticalTo.php', + 'Symfony\\Component\\Validator\\Constraints\\NotIdenticalToValidator' => $vendorDir . '/symfony/validator/Constraints/NotIdenticalToValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\NotNull' => $vendorDir . '/symfony/validator/Constraints/NotNull.php', + 'Symfony\\Component\\Validator\\Constraints\\NotNullValidator' => $vendorDir . '/symfony/validator/Constraints/NotNullValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Null' => $vendorDir . '/symfony/validator/Constraints/Null.php', + 'Symfony\\Component\\Validator\\Constraints\\NullValidator' => $vendorDir . '/symfony/validator/Constraints/NullValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Optional' => $vendorDir . '/symfony/validator/Constraints/Optional.php', + 'Symfony\\Component\\Validator\\Constraints\\Range' => $vendorDir . '/symfony/validator/Constraints/Range.php', + 'Symfony\\Component\\Validator\\Constraints\\RangeValidator' => $vendorDir . '/symfony/validator/Constraints/RangeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Regex' => $vendorDir . '/symfony/validator/Constraints/Regex.php', + 'Symfony\\Component\\Validator\\Constraints\\RegexValidator' => $vendorDir . '/symfony/validator/Constraints/RegexValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Required' => $vendorDir . '/symfony/validator/Constraints/Required.php', + 'Symfony\\Component\\Validator\\Constraints\\Time' => $vendorDir . '/symfony/validator/Constraints/Time.php', + 'Symfony\\Component\\Validator\\Constraints\\TimeValidator' => $vendorDir . '/symfony/validator/Constraints/TimeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Traverse' => $vendorDir . '/symfony/validator/Constraints/Traverse.php', + 'Symfony\\Component\\Validator\\Constraints\\True' => $vendorDir . '/symfony/validator/Constraints/True.php', + 'Symfony\\Component\\Validator\\Constraints\\TrueValidator' => $vendorDir . '/symfony/validator/Constraints/TrueValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Type' => $vendorDir . '/symfony/validator/Constraints/Type.php', + 'Symfony\\Component\\Validator\\Constraints\\TypeValidator' => $vendorDir . '/symfony/validator/Constraints/TypeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Url' => $vendorDir . '/symfony/validator/Constraints/Url.php', + 'Symfony\\Component\\Validator\\Constraints\\UrlValidator' => $vendorDir . '/symfony/validator/Constraints/UrlValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Uuid' => $vendorDir . '/symfony/validator/Constraints/Uuid.php', + 'Symfony\\Component\\Validator\\Constraints\\UuidValidator' => $vendorDir . '/symfony/validator/Constraints/UuidValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Valid' => $vendorDir . '/symfony/validator/Constraints/Valid.php', + 'Symfony\\Component\\Validator\\Context\\ExecutionContext' => $vendorDir . '/symfony/validator/Context/ExecutionContext.php', + 'Symfony\\Component\\Validator\\Context\\ExecutionContextFactory' => $vendorDir . '/symfony/validator/Context/ExecutionContextFactory.php', + 'Symfony\\Component\\Validator\\Context\\ExecutionContextFactoryInterface' => $vendorDir . '/symfony/validator/Context/ExecutionContextFactoryInterface.php', + 'Symfony\\Component\\Validator\\Context\\ExecutionContextInterface' => $vendorDir . '/symfony/validator/Context/ExecutionContextInterface.php', + 'Symfony\\Component\\Validator\\Context\\LegacyExecutionContext' => $vendorDir . '/symfony/validator/Context/LegacyExecutionContext.php', + 'Symfony\\Component\\Validator\\Context\\LegacyExecutionContextFactory' => $vendorDir . '/symfony/validator/Context/LegacyExecutionContextFactory.php', + 'Symfony\\Component\\Validator\\DefaultTranslator' => $vendorDir . '/symfony/validator/DefaultTranslator.php', + 'Symfony\\Component\\Validator\\Exception\\BadMethodCallException' => $vendorDir . '/symfony/validator/Exception/BadMethodCallException.php', + 'Symfony\\Component\\Validator\\Exception\\ConstraintDefinitionException' => $vendorDir . '/symfony/validator/Exception/ConstraintDefinitionException.php', + 'Symfony\\Component\\Validator\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/validator/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Validator\\Exception\\GroupDefinitionException' => $vendorDir . '/symfony/validator/Exception/GroupDefinitionException.php', + 'Symfony\\Component\\Validator\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/validator/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Validator\\Exception\\InvalidOptionsException' => $vendorDir . '/symfony/validator/Exception/InvalidOptionsException.php', + 'Symfony\\Component\\Validator\\Exception\\MappingException' => $vendorDir . '/symfony/validator/Exception/MappingException.php', + 'Symfony\\Component\\Validator\\Exception\\MissingOptionsException' => $vendorDir . '/symfony/validator/Exception/MissingOptionsException.php', + 'Symfony\\Component\\Validator\\Exception\\NoSuchMetadataException' => $vendorDir . '/symfony/validator/Exception/NoSuchMetadataException.php', + 'Symfony\\Component\\Validator\\Exception\\OutOfBoundsException' => $vendorDir . '/symfony/validator/Exception/OutOfBoundsException.php', + 'Symfony\\Component\\Validator\\Exception\\RuntimeException' => $vendorDir . '/symfony/validator/Exception/RuntimeException.php', + 'Symfony\\Component\\Validator\\Exception\\UnexpectedTypeException' => $vendorDir . '/symfony/validator/Exception/UnexpectedTypeException.php', + 'Symfony\\Component\\Validator\\Exception\\UnsupportedMetadataException' => $vendorDir . '/symfony/validator/Exception/UnsupportedMetadataException.php', + 'Symfony\\Component\\Validator\\Exception\\ValidatorException' => $vendorDir . '/symfony/validator/Exception/ValidatorException.php', + 'Symfony\\Component\\Validator\\ExecutionContext' => $vendorDir . '/symfony/validator/ExecutionContext.php', + 'Symfony\\Component\\Validator\\ExecutionContextInterface' => $vendorDir . '/symfony/validator/ExecutionContextInterface.php', + 'Symfony\\Component\\Validator\\GlobalExecutionContextInterface' => $vendorDir . '/symfony/validator/GlobalExecutionContextInterface.php', + 'Symfony\\Component\\Validator\\GroupSequenceProviderInterface' => $vendorDir . '/symfony/validator/GroupSequenceProviderInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\BlackholeMetadataFactory' => $vendorDir . '/symfony/validator/Mapping/BlackholeMetadataFactory.php', + 'Symfony\\Component\\Validator\\Mapping\\Cache\\ApcCache' => $vendorDir . '/symfony/validator/Mapping/Cache/ApcCache.php', + 'Symfony\\Component\\Validator\\Mapping\\Cache\\CacheInterface' => $vendorDir . '/symfony/validator/Mapping/Cache/CacheInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\Cache\\DoctrineCache' => $vendorDir . '/symfony/validator/Mapping/Cache/DoctrineCache.php', + 'Symfony\\Component\\Validator\\Mapping\\CascadingStrategy' => $vendorDir . '/symfony/validator/Mapping/CascadingStrategy.php', + 'Symfony\\Component\\Validator\\Mapping\\ClassMetadata' => $vendorDir . '/symfony/validator/Mapping/ClassMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\ClassMetadataFactory' => $vendorDir . '/symfony/validator/Mapping/ClassMetadataFactory.php', + 'Symfony\\Component\\Validator\\Mapping\\ClassMetadataInterface' => $vendorDir . '/symfony/validator/Mapping/ClassMetadataInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\ElementMetadata' => $vendorDir . '/symfony/validator/Mapping/ElementMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\Factory\\BlackHoleMetadataFactory' => $vendorDir . '/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php', + 'Symfony\\Component\\Validator\\Mapping\\Factory\\LazyLoadingMetadataFactory' => $vendorDir . '/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php', + 'Symfony\\Component\\Validator\\Mapping\\Factory\\MetadataFactoryInterface' => $vendorDir . '/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\GenericMetadata' => $vendorDir . '/symfony/validator/Mapping/GenericMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\GetterMetadata' => $vendorDir . '/symfony/validator/Mapping/GetterMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\AbstractLoader' => $vendorDir . '/symfony/validator/Mapping/Loader/AbstractLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\AnnotationLoader' => $vendorDir . '/symfony/validator/Mapping/Loader/AnnotationLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\FileLoader' => $vendorDir . '/symfony/validator/Mapping/Loader/FileLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\FilesLoader' => $vendorDir . '/symfony/validator/Mapping/Loader/FilesLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\LoaderChain' => $vendorDir . '/symfony/validator/Mapping/Loader/LoaderChain.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\LoaderInterface' => $vendorDir . '/symfony/validator/Mapping/Loader/LoaderInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\StaticMethodLoader' => $vendorDir . '/symfony/validator/Mapping/Loader/StaticMethodLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\XmlFileLoader' => $vendorDir . '/symfony/validator/Mapping/Loader/XmlFileLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\XmlFilesLoader' => $vendorDir . '/symfony/validator/Mapping/Loader/XmlFilesLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/validator/Mapping/Loader/YamlFileLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\YamlFilesLoader' => $vendorDir . '/symfony/validator/Mapping/Loader/YamlFilesLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\MemberMetadata' => $vendorDir . '/symfony/validator/Mapping/MemberMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\MetadataInterface' => $vendorDir . '/symfony/validator/Mapping/MetadataInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\PropertyMetadata' => $vendorDir . '/symfony/validator/Mapping/PropertyMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\PropertyMetadataInterface' => $vendorDir . '/symfony/validator/Mapping/PropertyMetadataInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\TraversalStrategy' => $vendorDir . '/symfony/validator/Mapping/TraversalStrategy.php', + 'Symfony\\Component\\Validator\\MetadataFactoryInterface' => $vendorDir . '/symfony/validator/MetadataFactoryInterface.php', + 'Symfony\\Component\\Validator\\MetadataInterface' => $vendorDir . '/symfony/validator/MetadataInterface.php', + 'Symfony\\Component\\Validator\\ObjectInitializerInterface' => $vendorDir . '/symfony/validator/ObjectInitializerInterface.php', + 'Symfony\\Component\\Validator\\PropertyMetadataContainerInterface' => $vendorDir . '/symfony/validator/PropertyMetadataContainerInterface.php', + 'Symfony\\Component\\Validator\\PropertyMetadataInterface' => $vendorDir . '/symfony/validator/PropertyMetadataInterface.php', + 'Symfony\\Component\\Validator\\Util\\PropertyPath' => $vendorDir . '/symfony/validator/Util/PropertyPath.php', + 'Symfony\\Component\\Validator\\Validation' => $vendorDir . '/symfony/validator/Validation.php', + 'Symfony\\Component\\Validator\\ValidationVisitor' => $vendorDir . '/symfony/validator/ValidationVisitor.php', + 'Symfony\\Component\\Validator\\ValidationVisitorInterface' => $vendorDir . '/symfony/validator/ValidationVisitorInterface.php', + 'Symfony\\Component\\Validator\\Validator' => $vendorDir . '/symfony/validator/Validator.php', + 'Symfony\\Component\\Validator\\ValidatorBuilder' => $vendorDir . '/symfony/validator/ValidatorBuilder.php', + 'Symfony\\Component\\Validator\\ValidatorBuilderInterface' => $vendorDir . '/symfony/validator/ValidatorBuilderInterface.php', + 'Symfony\\Component\\Validator\\ValidatorInterface' => $vendorDir . '/symfony/validator/ValidatorInterface.php', + 'Symfony\\Component\\Validator\\Validator\\ContextualValidatorInterface' => $vendorDir . '/symfony/validator/Validator/ContextualValidatorInterface.php', + 'Symfony\\Component\\Validator\\Validator\\LegacyValidator' => $vendorDir . '/symfony/validator/Validator/LegacyValidator.php', + 'Symfony\\Component\\Validator\\Validator\\RecursiveContextualValidator' => $vendorDir . '/symfony/validator/Validator/RecursiveContextualValidator.php', + 'Symfony\\Component\\Validator\\Validator\\RecursiveValidator' => $vendorDir . '/symfony/validator/Validator/RecursiveValidator.php', + 'Symfony\\Component\\Validator\\Validator\\ValidatorInterface' => $vendorDir . '/symfony/validator/Validator/ValidatorInterface.php', + 'Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilder' => $vendorDir . '/symfony/validator/Violation/ConstraintViolationBuilder.php', + 'Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilderInterface' => $vendorDir . '/symfony/validator/Violation/ConstraintViolationBuilderInterface.php', + 'Symfony\\Component\\Validator\\Violation\\LegacyConstraintViolationBuilder' => $vendorDir . '/symfony/validator/Violation/LegacyConstraintViolationBuilder.php', + 'Symfony\\Component\\Yaml\\Command\\LintCommand' => $vendorDir . '/symfony/yaml/Command/LintCommand.php', + 'Symfony\\Component\\Yaml\\Dumper' => $vendorDir . '/symfony/yaml/Dumper.php', + 'Symfony\\Component\\Yaml\\Escaper' => $vendorDir . '/symfony/yaml/Escaper.php', + 'Symfony\\Component\\Yaml\\Exception\\DumpException' => $vendorDir . '/symfony/yaml/Exception/DumpException.php', + 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/yaml/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Yaml\\Exception\\ParseException' => $vendorDir . '/symfony/yaml/Exception/ParseException.php', + 'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => $vendorDir . '/symfony/yaml/Exception/RuntimeException.php', + 'Symfony\\Component\\Yaml\\Inline' => $vendorDir . '/symfony/yaml/Inline.php', + 'Symfony\\Component\\Yaml\\Parser' => $vendorDir . '/symfony/yaml/Parser.php', + 'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => $vendorDir . '/symfony/yaml/Tag/TaggedValue.php', + 'Symfony\\Component\\Yaml\\Unescaper' => $vendorDir . '/symfony/yaml/Unescaper.php', + 'Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.php', + 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', + 'TemplateMethodsTest' => $vendorDir . '/phpunit/phpunit/tests/_files/TemplateMethodsTest.php', + 'Test' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class2.php', + 'TestClass' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/issue19.php', + 'TestDoxGroupTest' => $vendorDir . '/phpunit/phpunit/tests/_files/TestDoxGroupTest.php', + 'TestError' => $vendorDir . '/phpunit/phpunit/tests/_files/TestTestError.php', + 'TestIncomplete' => $vendorDir . '/phpunit/phpunit/tests/_files/TestIncomplete.php', + 'TestIterator' => $vendorDir . '/phpunit/phpunit/tests/_files/TestIterator.php', + 'TestIterator2' => $vendorDir . '/phpunit/phpunit/tests/_files/TestIterator2.php', + 'TestParser' => $vendorDir . '/twig/twig/test/Twig/Tests/ParserTest.php', + 'TestSkipped' => $vendorDir . '/phpunit/phpunit/tests/_files/TestSkipped.php', + 'TestTokenParser' => $vendorDir . '/twig/twig/test/Twig/Tests/ParserTest.php', + 'TestWithTest' => $vendorDir . '/phpunit/phpunit/tests/_files/TestWithTest.php', + 'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php', + 'ThrowExceptionTestCase' => $vendorDir . '/phpunit/phpunit/tests/_files/ThrowExceptionTestCase.php', + 'ThrowNoExceptionTestCase' => $vendorDir . '/phpunit/phpunit/tests/_files/ThrowNoExceptionTestCase.php', + 'ToStringStub' => $vendorDir . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'TplBlockTest\\TplBlockTest' => $baseDir . '/test/TplBlockTest.php', + 'TplBlock\\TplBlock' => $baseDir . '/TplBlock.php', + 'TraversableMockTestInterface' => $vendorDir . '/phpunit/phpunit-mock-objects/tests/_fixture/TraversableMockTestInterface.php', + 'TwigTestExtension' => $vendorDir . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'TwigTestFoo' => $vendorDir . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'TwigTestTokenParser_§' => $vendorDir . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'Twig\\Cache\\CacheInterface' => $vendorDir . '/twig/twig/src/Cache/CacheInterface.php', + 'Twig\\Cache\\FilesystemCache' => $vendorDir . '/twig/twig/src/Cache/FilesystemCache.php', + 'Twig\\Cache\\NullCache' => $vendorDir . '/twig/twig/src/Cache/NullCache.php', + 'Twig\\Compiler' => $vendorDir . '/twig/twig/src/Compiler.php', + 'Twig\\Environment' => $vendorDir . '/twig/twig/src/Environment.php', + 'Twig\\Error\\Error' => $vendorDir . '/twig/twig/src/Error/Error.php', + 'Twig\\Error\\LoaderError' => $vendorDir . '/twig/twig/src/Error/LoaderError.php', + 'Twig\\Error\\RuntimeError' => $vendorDir . '/twig/twig/src/Error/RuntimeError.php', + 'Twig\\Error\\SyntaxError' => $vendorDir . '/twig/twig/src/Error/SyntaxError.php', + 'Twig\\ExpressionParser' => $vendorDir . '/twig/twig/src/ExpressionParser.php', + 'Twig\\Extension\\AbstractExtension' => $vendorDir . '/twig/twig/src/Extension/AbstractExtension.php', + 'Twig\\Extension\\CoreExtension' => $vendorDir . '/twig/twig/src/Extension/CoreExtension.php', + 'Twig\\Extension\\DebugExtension' => $vendorDir . '/twig/twig/src/Extension/DebugExtension.php', + 'Twig\\Extension\\EscaperExtension' => $vendorDir . '/twig/twig/src/Extension/EscaperExtension.php', + 'Twig\\Extension\\ExtensionInterface' => $vendorDir . '/twig/twig/src/Extension/ExtensionInterface.php', + 'Twig\\Extension\\GlobalsInterface' => $vendorDir . '/twig/twig/src/Extension/GlobalsInterface.php', + 'Twig\\Extension\\InitRuntimeInterface' => $vendorDir . '/twig/twig/src/Extension/InitRuntimeInterface.php', + 'Twig\\Extension\\OptimizerExtension' => $vendorDir . '/twig/twig/src/Extension/OptimizerExtension.php', + 'Twig\\Extension\\ProfilerExtension' => $vendorDir . '/twig/twig/src/Extension/ProfilerExtension.php', + 'Twig\\Extension\\RuntimeExtensionInterface' => $vendorDir . '/twig/twig/src/Extension/RuntimeExtensionInterface.php', + 'Twig\\Extension\\SandboxExtension' => $vendorDir . '/twig/twig/src/Extension/SandboxExtension.php', + 'Twig\\Extension\\StagingExtension' => $vendorDir . '/twig/twig/src/Extension/StagingExtension.php', + 'Twig\\Extension\\StringLoaderExtension' => $vendorDir . '/twig/twig/src/Extension/StringLoaderExtension.php', + 'Twig\\FileExtensionEscapingStrategy' => $vendorDir . '/twig/twig/src/FileExtensionEscapingStrategy.php', + 'Twig\\Lexer' => $vendorDir . '/twig/twig/src/Lexer.php', + 'Twig\\Loader\\ArrayLoader' => $vendorDir . '/twig/twig/src/Loader/ArrayLoader.php', + 'Twig\\Loader\\ChainLoader' => $vendorDir . '/twig/twig/src/Loader/ChainLoader.php', + 'Twig\\Loader\\ExistsLoaderInterface' => $vendorDir . '/twig/twig/src/Loader/ExistsLoaderInterface.php', + 'Twig\\Loader\\FilesystemLoader' => $vendorDir . '/twig/twig/src/Loader/FilesystemLoader.php', + 'Twig\\Loader\\LoaderInterface' => $vendorDir . '/twig/twig/src/Loader/LoaderInterface.php', + 'Twig\\Loader\\SourceContextLoaderInterface' => $vendorDir . '/twig/twig/src/Loader/SourceContextLoaderInterface.php', + 'Twig\\Markup' => $vendorDir . '/twig/twig/src/Markup.php', + 'Twig\\NodeTraverser' => $vendorDir . '/twig/twig/src/NodeTraverser.php', + 'Twig\\NodeVisitor\\AbstractNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php', + 'Twig\\NodeVisitor\\EscaperNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php', + 'Twig\\NodeVisitor\\NodeVisitorInterface' => $vendorDir . '/twig/twig/src/NodeVisitor/NodeVisitorInterface.php', + 'Twig\\NodeVisitor\\OptimizerNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php', + 'Twig\\NodeVisitor\\SafeAnalysisNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php', + 'Twig\\NodeVisitor\\SandboxNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php', + 'Twig\\Node\\AutoEscapeNode' => $vendorDir . '/twig/twig/src/Node/AutoEscapeNode.php', + 'Twig\\Node\\BlockNode' => $vendorDir . '/twig/twig/src/Node/BlockNode.php', + 'Twig\\Node\\BlockReferenceNode' => $vendorDir . '/twig/twig/src/Node/BlockReferenceNode.php', + 'Twig\\Node\\BodyNode' => $vendorDir . '/twig/twig/src/Node/BodyNode.php', + 'Twig\\Node\\CheckSecurityNode' => $vendorDir . '/twig/twig/src/Node/CheckSecurityNode.php', + 'Twig\\Node\\DoNode' => $vendorDir . '/twig/twig/src/Node/DoNode.php', + 'Twig\\Node\\EmbedNode' => $vendorDir . '/twig/twig/src/Node/EmbedNode.php', + 'Twig\\Node\\Expression\\AbstractExpression' => $vendorDir . '/twig/twig/src/Node/Expression/AbstractExpression.php', + 'Twig\\Node\\Expression\\ArrayExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ArrayExpression.php', + 'Twig\\Node\\Expression\\AssignNameExpression' => $vendorDir . '/twig/twig/src/Node/Expression/AssignNameExpression.php', + 'Twig\\Node\\Expression\\Binary\\AbstractBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AbstractBinary.php', + 'Twig\\Node\\Expression\\Binary\\AddBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AddBinary.php', + 'Twig\\Node\\Expression\\Binary\\AndBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AndBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseAndBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseOrBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseXorBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php', + 'Twig\\Node\\Expression\\Binary\\ConcatBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/ConcatBinary.php', + 'Twig\\Node\\Expression\\Binary\\DivBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/DivBinary.php', + 'Twig\\Node\\Expression\\Binary\\EndsWithBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php', + 'Twig\\Node\\Expression\\Binary\\EqualBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/EqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\FloorDivBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php', + 'Twig\\Node\\Expression\\Binary\\GreaterBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/GreaterBinary.php', + 'Twig\\Node\\Expression\\Binary\\GreaterEqualBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\InBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/InBinary.php', + 'Twig\\Node\\Expression\\Binary\\LessBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/LessBinary.php', + 'Twig\\Node\\Expression\\Binary\\LessEqualBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\MatchesBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/MatchesBinary.php', + 'Twig\\Node\\Expression\\Binary\\ModBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/ModBinary.php', + 'Twig\\Node\\Expression\\Binary\\MulBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/MulBinary.php', + 'Twig\\Node\\Expression\\Binary\\NotEqualBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\NotInBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/NotInBinary.php', + 'Twig\\Node\\Expression\\Binary\\OrBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/OrBinary.php', + 'Twig\\Node\\Expression\\Binary\\PowerBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/PowerBinary.php', + 'Twig\\Node\\Expression\\Binary\\RangeBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/RangeBinary.php', + 'Twig\\Node\\Expression\\Binary\\StartsWithBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php', + 'Twig\\Node\\Expression\\Binary\\SubBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/SubBinary.php', + 'Twig\\Node\\Expression\\BlockReferenceExpression' => $vendorDir . '/twig/twig/src/Node/Expression/BlockReferenceExpression.php', + 'Twig\\Node\\Expression\\CallExpression' => $vendorDir . '/twig/twig/src/Node/Expression/CallExpression.php', + 'Twig\\Node\\Expression\\ConditionalExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ConditionalExpression.php', + 'Twig\\Node\\Expression\\ConstantExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ConstantExpression.php', + 'Twig\\Node\\Expression\\FilterExpression' => $vendorDir . '/twig/twig/src/Node/Expression/FilterExpression.php', + 'Twig\\Node\\Expression\\Filter\\DefaultFilter' => $vendorDir . '/twig/twig/src/Node/Expression/Filter/DefaultFilter.php', + 'Twig\\Node\\Expression\\FunctionExpression' => $vendorDir . '/twig/twig/src/Node/Expression/FunctionExpression.php', + 'Twig\\Node\\Expression\\GetAttrExpression' => $vendorDir . '/twig/twig/src/Node/Expression/GetAttrExpression.php', + 'Twig\\Node\\Expression\\MethodCallExpression' => $vendorDir . '/twig/twig/src/Node/Expression/MethodCallExpression.php', + 'Twig\\Node\\Expression\\NameExpression' => $vendorDir . '/twig/twig/src/Node/Expression/NameExpression.php', + 'Twig\\Node\\Expression\\NullCoalesceExpression' => $vendorDir . '/twig/twig/src/Node/Expression/NullCoalesceExpression.php', + 'Twig\\Node\\Expression\\ParentExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ParentExpression.php', + 'Twig\\Node\\Expression\\TempNameExpression' => $vendorDir . '/twig/twig/src/Node/Expression/TempNameExpression.php', + 'Twig\\Node\\Expression\\TestExpression' => $vendorDir . '/twig/twig/src/Node/Expression/TestExpression.php', + 'Twig\\Node\\Expression\\Test\\ConstantTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/ConstantTest.php', + 'Twig\\Node\\Expression\\Test\\DefinedTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/DefinedTest.php', + 'Twig\\Node\\Expression\\Test\\DivisiblebyTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php', + 'Twig\\Node\\Expression\\Test\\EvenTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/EvenTest.php', + 'Twig\\Node\\Expression\\Test\\NullTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/NullTest.php', + 'Twig\\Node\\Expression\\Test\\OddTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/OddTest.php', + 'Twig\\Node\\Expression\\Test\\SameasTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/SameasTest.php', + 'Twig\\Node\\Expression\\Unary\\AbstractUnary' => $vendorDir . '/twig/twig/src/Node/Expression/Unary/AbstractUnary.php', + 'Twig\\Node\\Expression\\Unary\\NegUnary' => $vendorDir . '/twig/twig/src/Node/Expression/Unary/NegUnary.php', + 'Twig\\Node\\Expression\\Unary\\NotUnary' => $vendorDir . '/twig/twig/src/Node/Expression/Unary/NotUnary.php', + 'Twig\\Node\\Expression\\Unary\\PosUnary' => $vendorDir . '/twig/twig/src/Node/Expression/Unary/PosUnary.php', + 'Twig\\Node\\FlushNode' => $vendorDir . '/twig/twig/src/Node/FlushNode.php', + 'Twig\\Node\\ForLoopNode' => $vendorDir . '/twig/twig/src/Node/ForLoopNode.php', + 'Twig\\Node\\ForNode' => $vendorDir . '/twig/twig/src/Node/ForNode.php', + 'Twig\\Node\\IfNode' => $vendorDir . '/twig/twig/src/Node/IfNode.php', + 'Twig\\Node\\ImportNode' => $vendorDir . '/twig/twig/src/Node/ImportNode.php', + 'Twig\\Node\\IncludeNode' => $vendorDir . '/twig/twig/src/Node/IncludeNode.php', + 'Twig\\Node\\MacroNode' => $vendorDir . '/twig/twig/src/Node/MacroNode.php', + 'Twig\\Node\\ModuleNode' => $vendorDir . '/twig/twig/src/Node/ModuleNode.php', + 'Twig\\Node\\Node' => $vendorDir . '/twig/twig/src/Node/Node.php', + 'Twig\\Node\\NodeCaptureInterface' => $vendorDir . '/twig/twig/src/Node/NodeCaptureInterface.php', + 'Twig\\Node\\NodeOutputInterface' => $vendorDir . '/twig/twig/src/Node/NodeOutputInterface.php', + 'Twig\\Node\\PrintNode' => $vendorDir . '/twig/twig/src/Node/PrintNode.php', + 'Twig\\Node\\SandboxNode' => $vendorDir . '/twig/twig/src/Node/SandboxNode.php', + 'Twig\\Node\\SandboxedPrintNode' => $vendorDir . '/twig/twig/src/Node/SandboxedPrintNode.php', + 'Twig\\Node\\SetNode' => $vendorDir . '/twig/twig/src/Node/SetNode.php', + 'Twig\\Node\\SetTempNode' => $vendorDir . '/twig/twig/src/Node/SetTempNode.php', + 'Twig\\Node\\SpacelessNode' => $vendorDir . '/twig/twig/src/Node/SpacelessNode.php', + 'Twig\\Node\\TextNode' => $vendorDir . '/twig/twig/src/Node/TextNode.php', + 'Twig\\Node\\WithNode' => $vendorDir . '/twig/twig/src/Node/WithNode.php', + 'Twig\\Parser' => $vendorDir . '/twig/twig/src/Parser.php', + 'Twig\\Profiler\\Dumper\\BaseDumper' => $vendorDir . '/twig/twig/src/Profiler/Dumper/BaseDumper.php', + 'Twig\\Profiler\\Dumper\\BlackfireDumper' => $vendorDir . '/twig/twig/src/Profiler/Dumper/BlackfireDumper.php', + 'Twig\\Profiler\\Dumper\\HtmlDumper' => $vendorDir . '/twig/twig/src/Profiler/Dumper/HtmlDumper.php', + 'Twig\\Profiler\\Dumper\\TextDumper' => $vendorDir . '/twig/twig/src/Profiler/Dumper/TextDumper.php', + 'Twig\\Profiler\\NodeVisitor\\ProfilerNodeVisitor' => $vendorDir . '/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php', + 'Twig\\Profiler\\Node\\EnterProfileNode' => $vendorDir . '/twig/twig/src/Profiler/Node/EnterProfileNode.php', + 'Twig\\Profiler\\Node\\LeaveProfileNode' => $vendorDir . '/twig/twig/src/Profiler/Node/LeaveProfileNode.php', + 'Twig\\Profiler\\Profile' => $vendorDir . '/twig/twig/src/Profiler/Profile.php', + 'Twig\\RuntimeLoader\\ContainerRuntimeLoader' => $vendorDir . '/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php', + 'Twig\\RuntimeLoader\\FactoryRuntimeLoader' => $vendorDir . '/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php', + 'Twig\\RuntimeLoader\\RuntimeLoaderInterface' => $vendorDir . '/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php', + 'Twig\\Sandbox\\SecurityError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityError.php', + 'Twig\\Sandbox\\SecurityNotAllowedFilterError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php', + 'Twig\\Sandbox\\SecurityNotAllowedFunctionError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php', + 'Twig\\Sandbox\\SecurityNotAllowedMethodError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php', + 'Twig\\Sandbox\\SecurityNotAllowedPropertyError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php', + 'Twig\\Sandbox\\SecurityNotAllowedTagError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php', + 'Twig\\Sandbox\\SecurityPolicy' => $vendorDir . '/twig/twig/src/Sandbox/SecurityPolicy.php', + 'Twig\\Sandbox\\SecurityPolicyInterface' => $vendorDir . '/twig/twig/src/Sandbox/SecurityPolicyInterface.php', + 'Twig\\Source' => $vendorDir . '/twig/twig/src/Source.php', + 'Twig\\Template' => $vendorDir . '/twig/twig/src/Template.php', + 'Twig\\TemplateWrapper' => $vendorDir . '/twig/twig/src/TemplateWrapper.php', + 'Twig\\Test\\IntegrationTestCase' => $vendorDir . '/twig/twig/src/Test/IntegrationTestCase.php', + 'Twig\\Test\\NodeTestCase' => $vendorDir . '/twig/twig/src/Test/NodeTestCase.php', + 'Twig\\Token' => $vendorDir . '/twig/twig/src/Token.php', + 'Twig\\TokenParser\\AbstractTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/AbstractTokenParser.php', + 'Twig\\TokenParser\\AutoEscapeTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/AutoEscapeTokenParser.php', + 'Twig\\TokenParser\\BlockTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/BlockTokenParser.php', + 'Twig\\TokenParser\\DoTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/DoTokenParser.php', + 'Twig\\TokenParser\\EmbedTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/EmbedTokenParser.php', + 'Twig\\TokenParser\\ExtendsTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/ExtendsTokenParser.php', + 'Twig\\TokenParser\\FilterTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/FilterTokenParser.php', + 'Twig\\TokenParser\\FlushTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/FlushTokenParser.php', + 'Twig\\TokenParser\\ForTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/ForTokenParser.php', + 'Twig\\TokenParser\\FromTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/FromTokenParser.php', + 'Twig\\TokenParser\\IfTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/IfTokenParser.php', + 'Twig\\TokenParser\\ImportTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/ImportTokenParser.php', + 'Twig\\TokenParser\\IncludeTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/IncludeTokenParser.php', + 'Twig\\TokenParser\\MacroTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/MacroTokenParser.php', + 'Twig\\TokenParser\\SandboxTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/SandboxTokenParser.php', + 'Twig\\TokenParser\\SetTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/SetTokenParser.php', + 'Twig\\TokenParser\\SpacelessTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/SpacelessTokenParser.php', + 'Twig\\TokenParser\\TokenParserInterface' => $vendorDir . '/twig/twig/src/TokenParser/TokenParserInterface.php', + 'Twig\\TokenParser\\UseTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/UseTokenParser.php', + 'Twig\\TokenParser\\WithTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/WithTokenParser.php', + 'Twig\\TokenStream' => $vendorDir . '/twig/twig/src/TokenStream.php', + 'Twig\\TwigFilter' => $vendorDir . '/twig/twig/src/TwigFilter.php', + 'Twig\\TwigFunction' => $vendorDir . '/twig/twig/src/TwigFunction.php', + 'Twig\\TwigTest' => $vendorDir . '/twig/twig/src/TwigTest.php', + 'Twig\\Util\\DeprecationCollector' => $vendorDir . '/twig/twig/src/Util/DeprecationCollector.php', + 'Twig\\Util\\TemplateDirIterator' => $vendorDir . '/twig/twig/src/Util/TemplateDirIterator.php', + 'Twig_Autoloader' => $vendorDir . '/twig/twig/lib/Twig/Autoloader.php', + 'Twig_BaseNodeVisitor' => $vendorDir . '/twig/twig/lib/Twig/BaseNodeVisitor.php', + 'Twig_CacheInterface' => $vendorDir . '/twig/twig/lib/Twig/CacheInterface.php', + 'Twig_Cache_Filesystem' => $vendorDir . '/twig/twig/lib/Twig/Cache/Filesystem.php', + 'Twig_Cache_Null' => $vendorDir . '/twig/twig/lib/Twig/Cache/Null.php', + 'Twig_ChainTestLoaderInterface' => $vendorDir . '/twig/twig/test/Twig/Tests/Loader/ChainTest.php', + 'Twig_ChainTestLoaderWithExistsInterface' => $vendorDir . '/twig/twig/test/Twig/Tests/Loader/ChainTest.php', + 'Twig_Compiler' => $vendorDir . '/twig/twig/lib/Twig/Compiler.php', + 'Twig_CompilerInterface' => $vendorDir . '/twig/twig/lib/Twig/CompilerInterface.php', + 'Twig_ContainerRuntimeLoader' => $vendorDir . '/twig/twig/lib/Twig/ContainerRuntimeLoader.php', + 'Twig_Environment' => $vendorDir . '/twig/twig/lib/Twig/Environment.php', + 'Twig_EnvironmentTestLoaderInterface' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Error' => $vendorDir . '/twig/twig/lib/Twig/Error.php', + 'Twig_Error_Loader' => $vendorDir . '/twig/twig/lib/Twig/Error/Loader.php', + 'Twig_Error_Runtime' => $vendorDir . '/twig/twig/lib/Twig/Error/Runtime.php', + 'Twig_Error_Syntax' => $vendorDir . '/twig/twig/lib/Twig/Error/Syntax.php', + 'Twig_ExistsLoaderInterface' => $vendorDir . '/twig/twig/lib/Twig/ExistsLoaderInterface.php', + 'Twig_ExpressionParser' => $vendorDir . '/twig/twig/lib/Twig/ExpressionParser.php', + 'Twig_Extension' => $vendorDir . '/twig/twig/lib/Twig/Extension.php', + 'Twig_ExtensionInterface' => $vendorDir . '/twig/twig/lib/Twig/ExtensionInterface.php', + 'Twig_Extension_Core' => $vendorDir . '/twig/twig/lib/Twig/Extension/Core.php', + 'Twig_Extension_Debug' => $vendorDir . '/twig/twig/lib/Twig/Extension/Debug.php', + 'Twig_Extension_Escaper' => $vendorDir . '/twig/twig/lib/Twig/Extension/Escaper.php', + 'Twig_Extension_GlobalsInterface' => $vendorDir . '/twig/twig/lib/Twig/Extension/GlobalsInterface.php', + 'Twig_Extension_InitRuntimeInterface' => $vendorDir . '/twig/twig/lib/Twig/Extension/InitRuntimeInterface.php', + 'Twig_Extension_Optimizer' => $vendorDir . '/twig/twig/lib/Twig/Extension/Optimizer.php', + 'Twig_Extension_Profiler' => $vendorDir . '/twig/twig/lib/Twig/Extension/Profiler.php', + 'Twig_Extension_Sandbox' => $vendorDir . '/twig/twig/lib/Twig/Extension/Sandbox.php', + 'Twig_Extension_Staging' => $vendorDir . '/twig/twig/lib/Twig/Extension/Staging.php', + 'Twig_Extension_StringLoader' => $vendorDir . '/twig/twig/lib/Twig/Extension/StringLoader.php', + 'Twig_FactoryRuntimeLoader' => $vendorDir . '/twig/twig/lib/Twig/FactoryRuntimeLoader.php', + 'Twig_FileExtensionEscapingStrategy' => $vendorDir . '/twig/twig/lib/Twig/FileExtensionEscapingStrategy.php', + 'Twig_Filter' => $vendorDir . '/twig/twig/lib/Twig/Filter.php', + 'Twig_FilterCallableInterface' => $vendorDir . '/twig/twig/lib/Twig/FilterCallableInterface.php', + 'Twig_FilterInterface' => $vendorDir . '/twig/twig/lib/Twig/FilterInterface.php', + 'Twig_Filter_Function' => $vendorDir . '/twig/twig/lib/Twig/Filter/Function.php', + 'Twig_Filter_Method' => $vendorDir . '/twig/twig/lib/Twig/Filter/Method.php', + 'Twig_Filter_Node' => $vendorDir . '/twig/twig/lib/Twig/Filter/Node.php', + 'Twig_Function' => $vendorDir . '/twig/twig/lib/Twig/Function.php', + 'Twig_FunctionCallableInterface' => $vendorDir . '/twig/twig/lib/Twig/FunctionCallableInterface.php', + 'Twig_FunctionInterface' => $vendorDir . '/twig/twig/lib/Twig/FunctionInterface.php', + 'Twig_Function_Function' => $vendorDir . '/twig/twig/lib/Twig/Function/Function.php', + 'Twig_Function_Method' => $vendorDir . '/twig/twig/lib/Twig/Function/Method.php', + 'Twig_Function_Node' => $vendorDir . '/twig/twig/lib/Twig/Function/Node.php', + 'Twig_Lexer' => $vendorDir . '/twig/twig/lib/Twig/Lexer.php', + 'Twig_LexerInterface' => $vendorDir . '/twig/twig/lib/Twig/LexerInterface.php', + 'Twig_LoaderInterface' => $vendorDir . '/twig/twig/lib/Twig/LoaderInterface.php', + 'Twig_Loader_Array' => $vendorDir . '/twig/twig/lib/Twig/Loader/Array.php', + 'Twig_Loader_Chain' => $vendorDir . '/twig/twig/lib/Twig/Loader/Chain.php', + 'Twig_Loader_Filesystem' => $vendorDir . '/twig/twig/lib/Twig/Loader/Filesystem.php', + 'Twig_Loader_String' => $vendorDir . '/twig/twig/lib/Twig/Loader/String.php', + 'Twig_Markup' => $vendorDir . '/twig/twig/lib/Twig/Markup.php', + 'Twig_Node' => $vendorDir . '/twig/twig/lib/Twig/Node.php', + 'Twig_NodeCaptureInterface' => $vendorDir . '/twig/twig/lib/Twig/NodeCaptureInterface.php', + 'Twig_NodeInterface' => $vendorDir . '/twig/twig/lib/Twig/NodeInterface.php', + 'Twig_NodeOutputInterface' => $vendorDir . '/twig/twig/lib/Twig/NodeOutputInterface.php', + 'Twig_NodeTraverser' => $vendorDir . '/twig/twig/lib/Twig/NodeTraverser.php', + 'Twig_NodeVisitorInterface' => $vendorDir . '/twig/twig/lib/Twig/NodeVisitorInterface.php', + 'Twig_NodeVisitor_Escaper' => $vendorDir . '/twig/twig/lib/Twig/NodeVisitor/Escaper.php', + 'Twig_NodeVisitor_Optimizer' => $vendorDir . '/twig/twig/lib/Twig/NodeVisitor/Optimizer.php', + 'Twig_NodeVisitor_SafeAnalysis' => $vendorDir . '/twig/twig/lib/Twig/NodeVisitor/SafeAnalysis.php', + 'Twig_NodeVisitor_Sandbox' => $vendorDir . '/twig/twig/lib/Twig/NodeVisitor/Sandbox.php', + 'Twig_Node_AutoEscape' => $vendorDir . '/twig/twig/lib/Twig/Node/AutoEscape.php', + 'Twig_Node_Block' => $vendorDir . '/twig/twig/lib/Twig/Node/Block.php', + 'Twig_Node_BlockReference' => $vendorDir . '/twig/twig/lib/Twig/Node/BlockReference.php', + 'Twig_Node_Body' => $vendorDir . '/twig/twig/lib/Twig/Node/Body.php', + 'Twig_Node_CheckSecurity' => $vendorDir . '/twig/twig/lib/Twig/Node/CheckSecurity.php', + 'Twig_Node_Do' => $vendorDir . '/twig/twig/lib/Twig/Node/Do.php', + 'Twig_Node_Embed' => $vendorDir . '/twig/twig/lib/Twig/Node/Embed.php', + 'Twig_Node_Expression' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression.php', + 'Twig_Node_Expression_Array' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Array.php', + 'Twig_Node_Expression_AssignName' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/AssignName.php', + 'Twig_Node_Expression_Binary' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary.php', + 'Twig_Node_Expression_Binary_Add' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Add.php', + 'Twig_Node_Expression_Binary_And' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/And.php', + 'Twig_Node_Expression_Binary_BitwiseAnd' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseAnd.php', + 'Twig_Node_Expression_Binary_BitwiseOr' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseOr.php', + 'Twig_Node_Expression_Binary_BitwiseXor' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseXor.php', + 'Twig_Node_Expression_Binary_Concat' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Concat.php', + 'Twig_Node_Expression_Binary_Div' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Div.php', + 'Twig_Node_Expression_Binary_EndsWith' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/EndsWith.php', + 'Twig_Node_Expression_Binary_Equal' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Equal.php', + 'Twig_Node_Expression_Binary_FloorDiv' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/FloorDiv.php', + 'Twig_Node_Expression_Binary_Greater' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Greater.php', + 'Twig_Node_Expression_Binary_GreaterEqual' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/GreaterEqual.php', + 'Twig_Node_Expression_Binary_In' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/In.php', + 'Twig_Node_Expression_Binary_Less' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Less.php', + 'Twig_Node_Expression_Binary_LessEqual' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/LessEqual.php', + 'Twig_Node_Expression_Binary_Matches' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Matches.php', + 'Twig_Node_Expression_Binary_Mod' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Mod.php', + 'Twig_Node_Expression_Binary_Mul' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Mul.php', + 'Twig_Node_Expression_Binary_NotEqual' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/NotEqual.php', + 'Twig_Node_Expression_Binary_NotIn' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/NotIn.php', + 'Twig_Node_Expression_Binary_Or' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Or.php', + 'Twig_Node_Expression_Binary_Power' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Power.php', + 'Twig_Node_Expression_Binary_Range' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Range.php', + 'Twig_Node_Expression_Binary_StartsWith' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/StartsWith.php', + 'Twig_Node_Expression_Binary_Sub' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Binary/Sub.php', + 'Twig_Node_Expression_BlockReference' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/BlockReference.php', + 'Twig_Node_Expression_Call' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Call.php', + 'Twig_Node_Expression_Conditional' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Conditional.php', + 'Twig_Node_Expression_Constant' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Constant.php', + 'Twig_Node_Expression_ExtensionReference' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/ExtensionReference.php', + 'Twig_Node_Expression_Filter' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Filter.php', + 'Twig_Node_Expression_Filter_Default' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Filter/Default.php', + 'Twig_Node_Expression_Function' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Function.php', + 'Twig_Node_Expression_GetAttr' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/GetAttr.php', + 'Twig_Node_Expression_MethodCall' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/MethodCall.php', + 'Twig_Node_Expression_Name' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Name.php', + 'Twig_Node_Expression_NullCoalesce' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/NullCoalesce.php', + 'Twig_Node_Expression_Parent' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Parent.php', + 'Twig_Node_Expression_TempName' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/TempName.php', + 'Twig_Node_Expression_Test' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Test.php', + 'Twig_Node_Expression_Test_Constant' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Test/Constant.php', + 'Twig_Node_Expression_Test_Defined' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Test/Defined.php', + 'Twig_Node_Expression_Test_Divisibleby' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Test/Divisibleby.php', + 'Twig_Node_Expression_Test_Even' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Test/Even.php', + 'Twig_Node_Expression_Test_Null' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Test/Null.php', + 'Twig_Node_Expression_Test_Odd' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Test/Odd.php', + 'Twig_Node_Expression_Test_Sameas' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Test/Sameas.php', + 'Twig_Node_Expression_Unary' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Unary.php', + 'Twig_Node_Expression_Unary_Neg' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Unary/Neg.php', + 'Twig_Node_Expression_Unary_Not' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Unary/Not.php', + 'Twig_Node_Expression_Unary_Pos' => $vendorDir . '/twig/twig/lib/Twig/Node/Expression/Unary/Pos.php', + 'Twig_Node_Flush' => $vendorDir . '/twig/twig/lib/Twig/Node/Flush.php', + 'Twig_Node_For' => $vendorDir . '/twig/twig/lib/Twig/Node/For.php', + 'Twig_Node_ForLoop' => $vendorDir . '/twig/twig/lib/Twig/Node/ForLoop.php', + 'Twig_Node_If' => $vendorDir . '/twig/twig/lib/Twig/Node/If.php', + 'Twig_Node_Import' => $vendorDir . '/twig/twig/lib/Twig/Node/Import.php', + 'Twig_Node_Include' => $vendorDir . '/twig/twig/lib/Twig/Node/Include.php', + 'Twig_Node_Macro' => $vendorDir . '/twig/twig/lib/Twig/Node/Macro.php', + 'Twig_Node_Module' => $vendorDir . '/twig/twig/lib/Twig/Node/Module.php', + 'Twig_Node_Print' => $vendorDir . '/twig/twig/lib/Twig/Node/Print.php', + 'Twig_Node_Sandbox' => $vendorDir . '/twig/twig/lib/Twig/Node/Sandbox.php', + 'Twig_Node_SandboxedPrint' => $vendorDir . '/twig/twig/lib/Twig/Node/SandboxedPrint.php', + 'Twig_Node_Set' => $vendorDir . '/twig/twig/lib/Twig/Node/Set.php', + 'Twig_Node_SetTemp' => $vendorDir . '/twig/twig/lib/Twig/Node/SetTemp.php', + 'Twig_Node_Spaceless' => $vendorDir . '/twig/twig/lib/Twig/Node/Spaceless.php', + 'Twig_Node_Text' => $vendorDir . '/twig/twig/lib/Twig/Node/Text.php', + 'Twig_Node_With' => $vendorDir . '/twig/twig/lib/Twig/Node/With.php', + 'Twig_Parser' => $vendorDir . '/twig/twig/lib/Twig/Parser.php', + 'Twig_ParserInterface' => $vendorDir . '/twig/twig/lib/Twig/ParserInterface.php', + 'Twig_Profiler_Dumper_Base' => $vendorDir . '/twig/twig/lib/Twig/Profiler/Dumper/Base.php', + 'Twig_Profiler_Dumper_Blackfire' => $vendorDir . '/twig/twig/lib/Twig/Profiler/Dumper/Blackfire.php', + 'Twig_Profiler_Dumper_Html' => $vendorDir . '/twig/twig/lib/Twig/Profiler/Dumper/Html.php', + 'Twig_Profiler_Dumper_Text' => $vendorDir . '/twig/twig/lib/Twig/Profiler/Dumper/Text.php', + 'Twig_Profiler_NodeVisitor_Profiler' => $vendorDir . '/twig/twig/lib/Twig/Profiler/NodeVisitor/Profiler.php', + 'Twig_Profiler_Node_EnterProfile' => $vendorDir . '/twig/twig/lib/Twig/Profiler/Node/EnterProfile.php', + 'Twig_Profiler_Node_LeaveProfile' => $vendorDir . '/twig/twig/lib/Twig/Profiler/Node/LeaveProfile.php', + 'Twig_Profiler_Profile' => $vendorDir . '/twig/twig/lib/Twig/Profiler/Profile.php', + 'Twig_RuntimeLoaderInterface' => $vendorDir . '/twig/twig/lib/Twig/RuntimeLoaderInterface.php', + 'Twig_Sandbox_SecurityError' => $vendorDir . '/twig/twig/lib/Twig/Sandbox/SecurityError.php', + 'Twig_Sandbox_SecurityNotAllowedFilterError' => $vendorDir . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedFilterError.php', + 'Twig_Sandbox_SecurityNotAllowedFunctionError' => $vendorDir . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedFunctionError.php', + 'Twig_Sandbox_SecurityNotAllowedMethodError' => $vendorDir . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedMethodError.php', + 'Twig_Sandbox_SecurityNotAllowedPropertyError' => $vendorDir . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedPropertyError.php', + 'Twig_Sandbox_SecurityNotAllowedTagError' => $vendorDir . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedTagError.php', + 'Twig_Sandbox_SecurityPolicy' => $vendorDir . '/twig/twig/lib/Twig/Sandbox/SecurityPolicy.php', + 'Twig_Sandbox_SecurityPolicyInterface' => $vendorDir . '/twig/twig/lib/Twig/Sandbox/SecurityPolicyInterface.php', + 'Twig_SimpleFilter' => $vendorDir . '/twig/twig/lib/Twig/SimpleFilter.php', + 'Twig_SimpleFunction' => $vendorDir . '/twig/twig/lib/Twig/SimpleFunction.php', + 'Twig_SimpleTest' => $vendorDir . '/twig/twig/lib/Twig/SimpleTest.php', + 'Twig_Source' => $vendorDir . '/twig/twig/lib/Twig/Source.php', + 'Twig_SourceContextLoaderInterface' => $vendorDir . '/twig/twig/lib/Twig/SourceContextLoaderInterface.php', + 'Twig_Template' => $vendorDir . '/twig/twig/lib/Twig/Template.php', + 'Twig_TemplateArrayAccessObject' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateGetIsMethods' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateInterface' => $vendorDir . '/twig/twig/lib/Twig/TemplateInterface.php', + 'Twig_TemplateMagicMethodExceptionObject' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMagicMethodObject' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMagicPropertyObject' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMagicPropertyObjectWithException' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMethodAndPropObject' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMethodObject' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplatePropertyObject' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplatePropertyObjectAndArrayAccess' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplatePropertyObjectAndIterator' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplatePropertyObjectDefinedWithUndefinedValue' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateTest' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateTestLoaderInterface' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateWrapper' => $vendorDir . '/twig/twig/lib/Twig/TemplateWrapper.php', + 'Twig_Test' => $vendorDir . '/twig/twig/lib/Twig/Test.php', + 'Twig_TestCallableInterface' => $vendorDir . '/twig/twig/lib/Twig/TestCallableInterface.php', + 'Twig_TestInterface' => $vendorDir . '/twig/twig/lib/Twig/TestInterface.php', + 'Twig_Test_EscapingTest' => $vendorDir . '/twig/twig/test/Twig/Tests/escapingTest.php', + 'Twig_Test_Function' => $vendorDir . '/twig/twig/lib/Twig/Test/Function.php', + 'Twig_Test_IntegrationTestCase' => $vendorDir . '/twig/twig/lib/Twig/Test/IntegrationTestCase.php', + 'Twig_Test_Loader_TemplateReference' => $vendorDir . '/twig/twig/test/Twig/Tests/Loader/ArrayTest.php', + 'Twig_Test_Method' => $vendorDir . '/twig/twig/lib/Twig/Test/Method.php', + 'Twig_Test_Node' => $vendorDir . '/twig/twig/lib/Twig/Test/Node.php', + 'Twig_Test_NodeTestCase' => $vendorDir . '/twig/twig/lib/Twig/Test/NodeTestCase.php', + 'Twig_Tests_AutoloaderTest' => $vendorDir . '/twig/twig/test/Twig/Tests/AutoloaderTest.php', + 'Twig_Tests_Cache_FilesystemTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Cache/FilesystemTest.php', + 'Twig_Tests_CompilerTest' => $vendorDir . '/twig/twig/test/Twig/Tests/CompilerTest.php', + 'Twig_Tests_ContainerRuntimeLoaderTest' => $vendorDir . '/twig/twig/test/Twig/Tests/ContainerRuntimeLoaderTest.php', + 'Twig_Tests_EnvironmentTest' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Extension' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_ExtensionWithDeprecationInitRuntime' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_ExtensionWithoutDeprecationInitRuntime' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_ExtensionWithoutRuntime' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Extension_DynamicWithDeprecatedName' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Extension_WithDeprecatedName' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Extension_WithGlobals' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_NodeVisitor' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Runtime' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_TokenParser' => $vendorDir . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_ErrorTest' => $vendorDir . '/twig/twig/test/Twig/Tests/ErrorTest.php', + 'Twig_Tests_ErrorTest_Foo' => $vendorDir . '/twig/twig/test/Twig/Tests/ErrorTest.php', + 'Twig_Tests_ExpressionParserTest' => $vendorDir . '/twig/twig/test/Twig/Tests/ExpressionParserTest.php', + 'Twig_Tests_Extension_CoreTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Extension/CoreTest.php', + 'Twig_Tests_Extension_SandboxTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Extension/SandboxTest.php', + 'Twig_Tests_FactoryRuntimeLoaderTest' => $vendorDir . '/twig/twig/test/Twig/Tests/FactoryRuntimeLoaderTest.php', + 'Twig_Tests_FileCachingTest' => $vendorDir . '/twig/twig/test/Twig/Tests/FileCachingTest.php', + 'Twig_Tests_FileExtensionEscapingStrategyTest' => $vendorDir . '/twig/twig/test/Twig/Tests/FileExtensionEscapingStrategyTest.php', + 'Twig_Tests_FilesystemHelper' => $vendorDir . '/twig/twig/test/Twig/Tests/FilesystemHelper.php', + 'Twig_Tests_IntegrationTest' => $vendorDir . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'Twig_Tests_LegacyIntegrationTest' => $vendorDir . '/twig/twig/test/Twig/Tests/LegacyIntegrationTest.php', + 'Twig_Tests_LexerTest' => $vendorDir . '/twig/twig/test/Twig/Tests/LexerTest.php', + 'Twig_Tests_Loader_ArrayTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Loader/ArrayTest.php', + 'Twig_Tests_Loader_ChainTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Loader/ChainTest.php', + 'Twig_Tests_Loader_FilesystemTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Loader/FilesystemTest.php', + 'Twig_Tests_NativeExtensionTest' => $vendorDir . '/twig/twig/test/Twig/Tests/NativeExtensionTest.php', + 'Twig_Tests_NodeVisitor_OptimizerTest' => $vendorDir . '/twig/twig/test/Twig/Tests/NodeVisitor/OptimizerTest.php', + 'Twig_Tests_Node_AutoEscapeTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/AutoEscapeTest.php', + 'Twig_Tests_Node_BlockReferenceTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/BlockReferenceTest.php', + 'Twig_Tests_Node_BlockTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/BlockTest.php', + 'Twig_Tests_Node_DoTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/DoTest.php', + 'Twig_Tests_Node_Expression_ArrayTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/ArrayTest.php', + 'Twig_Tests_Node_Expression_AssignNameTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/AssignNameTest.php', + 'Twig_Tests_Node_Expression_Binary_AddTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/AddTest.php', + 'Twig_Tests_Node_Expression_Binary_AndTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/AndTest.php', + 'Twig_Tests_Node_Expression_Binary_ConcatTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/ConcatTest.php', + 'Twig_Tests_Node_Expression_Binary_DivTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/DivTest.php', + 'Twig_Tests_Node_Expression_Binary_FloorDivTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/FloorDivTest.php', + 'Twig_Tests_Node_Expression_Binary_ModTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/ModTest.php', + 'Twig_Tests_Node_Expression_Binary_MulTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/MulTest.php', + 'Twig_Tests_Node_Expression_Binary_OrTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/OrTest.php', + 'Twig_Tests_Node_Expression_Binary_SubTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/SubTest.php', + 'Twig_Tests_Node_Expression_Call' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/CallTest.php', + 'Twig_Tests_Node_Expression_CallTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/CallTest.php', + 'Twig_Tests_Node_Expression_ConditionalTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/ConditionalTest.php', + 'Twig_Tests_Node_Expression_ConstantTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/ConstantTest.php', + 'Twig_Tests_Node_Expression_FilterTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/FilterTest.php', + 'Twig_Tests_Node_Expression_FunctionTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/FunctionTest.php', + 'Twig_Tests_Node_Expression_GetAttrTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/GetAttrTest.php', + 'Twig_Tests_Node_Expression_NameTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/NameTest.php', + 'Twig_Tests_Node_Expression_NullCoalesceTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/NullCoalesceTest.php', + 'Twig_Tests_Node_Expression_ParentTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/ParentTest.php', + 'Twig_Tests_Node_Expression_TestTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/TestTest.php', + 'Twig_Tests_Node_Expression_Unary_NegTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Unary/NegTest.php', + 'Twig_Tests_Node_Expression_Unary_NotTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Unary/NotTest.php', + 'Twig_Tests_Node_Expression_Unary_PosTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/Expression/Unary/PosTest.php', + 'Twig_Tests_Node_ForTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/ForTest.php', + 'Twig_Tests_Node_IfTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/IfTest.php', + 'Twig_Tests_Node_ImportTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/ImportTest.php', + 'Twig_Tests_Node_IncludeTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/IncludeTest.php', + 'Twig_Tests_Node_MacroTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/MacroTest.php', + 'Twig_Tests_Node_ModuleTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/ModuleTest.php', + 'Twig_Tests_Node_PrintTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/PrintTest.php', + 'Twig_Tests_Node_SandboxTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/SandboxTest.php', + 'Twig_Tests_Node_SandboxedPrintTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/SandboxedPrintTest.php', + 'Twig_Tests_Node_SetTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/SetTest.php', + 'Twig_Tests_Node_SpacelessTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/SpacelessTest.php', + 'Twig_Tests_Node_TextTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Node/TextTest.php', + 'Twig_Tests_ParserTest' => $vendorDir . '/twig/twig/test/Twig/Tests/ParserTest.php', + 'Twig_Tests_Profiler_Dumper_AbstractTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Profiler/Dumper/AbstractTest.php', + 'Twig_Tests_Profiler_Dumper_BlackfireTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Profiler/Dumper/BlackfireTest.php', + 'Twig_Tests_Profiler_Dumper_HtmlTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Profiler/Dumper/HtmlTest.php', + 'Twig_Tests_Profiler_Dumper_TextTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Profiler/Dumper/TextTest.php', + 'Twig_Tests_Profiler_ProfileTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Profiler/ProfileTest.php', + 'Twig_Tests_TemplateTest' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_Tests_TemplateWrapperTest' => $vendorDir . '/twig/twig/test/Twig/Tests/TemplateWrapperTest.php', + 'Twig_Tests_TokenStreamTest' => $vendorDir . '/twig/twig/test/Twig/Tests/TokenStreamTest.php', + 'Twig_Tests_Util_DeprecationCollectorTest' => $vendorDir . '/twig/twig/test/Twig/Tests/Util/DeprecationCollectorTest.php', + 'Twig_Tests_Util_Iterator' => $vendorDir . '/twig/twig/test/Twig/Tests/Util/DeprecationCollectorTest.php', + 'Twig_Token' => $vendorDir . '/twig/twig/lib/Twig/Token.php', + 'Twig_TokenParser' => $vendorDir . '/twig/twig/lib/Twig/TokenParser.php', + 'Twig_TokenParserBroker' => $vendorDir . '/twig/twig/lib/Twig/TokenParserBroker.php', + 'Twig_TokenParserBrokerInterface' => $vendorDir . '/twig/twig/lib/Twig/TokenParserBrokerInterface.php', + 'Twig_TokenParserInterface' => $vendorDir . '/twig/twig/lib/Twig/TokenParserInterface.php', + 'Twig_TokenParser_AutoEscape' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/AutoEscape.php', + 'Twig_TokenParser_Block' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Block.php', + 'Twig_TokenParser_Do' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Do.php', + 'Twig_TokenParser_Embed' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Embed.php', + 'Twig_TokenParser_Extends' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Extends.php', + 'Twig_TokenParser_Filter' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Filter.php', + 'Twig_TokenParser_Flush' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Flush.php', + 'Twig_TokenParser_For' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/For.php', + 'Twig_TokenParser_From' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/From.php', + 'Twig_TokenParser_If' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/If.php', + 'Twig_TokenParser_Import' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Import.php', + 'Twig_TokenParser_Include' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Include.php', + 'Twig_TokenParser_Macro' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Macro.php', + 'Twig_TokenParser_Sandbox' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Sandbox.php', + 'Twig_TokenParser_Set' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Set.php', + 'Twig_TokenParser_Spaceless' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Spaceless.php', + 'Twig_TokenParser_Use' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/Use.php', + 'Twig_TokenParser_With' => $vendorDir . '/twig/twig/lib/Twig/TokenParser/With.php', + 'Twig_TokenStream' => $vendorDir . '/twig/twig/lib/Twig/TokenStream.php', + 'Twig_Util_DeprecationCollector' => $vendorDir . '/twig/twig/lib/Twig/Util/DeprecationCollector.php', + 'Twig_Util_TemplateDirIterator' => $vendorDir . '/twig/twig/lib/Twig/Util/TemplateDirIterator.php', + 'TwoTest' => $vendorDir . '/phpunit/phpunit/tests/Regression/Trac/783/TwoTest.php', + 'UseTest' => $vendorDir . '/nikic/php-parser/test/PhpParser/Builder/UseTest.php', + 'Util_ConfigurationTest' => $vendorDir . '/phpunit/phpunit/tests/Util/ConfigurationTest.php', + 'Util_GetoptTest' => $vendorDir . '/phpunit/phpunit/tests/Util/GetoptTest.php', + 'Util_GlobalStateTest' => $vendorDir . '/phpunit/phpunit/tests/Util/GlobalStateTest.php', + 'Util_RegexTest' => $vendorDir . '/phpunit/phpunit/tests/Util/RegexTest.php', + 'Util_TestDox_NamePrettifierTest' => $vendorDir . '/phpunit/phpunit/tests/Util/TestDox/NamePrettifierTest.php', + 'Util_TestTest' => $vendorDir . '/phpunit/phpunit/tests/Util/TestTest.php', + 'Util_XMLTest' => $vendorDir . '/phpunit/phpunit/tests/Util/XMLTest.php', + 'WasRun' => $vendorDir . '/phpunit/phpunit/tests/_files/WasRun.php', + 'ZendBench\\Cache\\CommonStorageAdapterBench' => $vendorDir . '/zendframework/zend-cache/benchmark/CommonStorageAdapterBench.php', + 'ZendBench\\Cache\\FilesystemStorageAdapterBench' => $vendorDir . '/zendframework/zend-cache/benchmark/FilesystemStorageAdapterBench.php', + 'ZendBench\\Cache\\MemoryStorageAdapterBench' => $vendorDir . '/zendframework/zend-cache/benchmark/MemoryStorageAdapterBench.php', + 'ZendBench\\ServiceManager\\BenchAsset\\AbstractFactoryFoo' => $vendorDir . '/zendframework/zend-servicemanager/benchmarks/BenchAsset/AbstractFactoryFoo.php', + 'ZendBench\\ServiceManager\\BenchAsset\\FactoryFoo' => $vendorDir . '/zendframework/zend-servicemanager/benchmarks/BenchAsset/FactoryFoo.php', + 'ZendBench\\ServiceManager\\BenchAsset\\Foo' => $vendorDir . '/zendframework/zend-servicemanager/benchmarks/BenchAsset/Foo.php', + 'ZendBench\\ServiceManager\\FetchServices' => $vendorDir . '/zendframework/zend-servicemanager/benchmarks/FetchServices.php', + 'ZendBench\\Stdlib\\ExtractPriorityQueue' => $vendorDir . '/zendframework/zend-stdlib/benchmark/ExtractPriorityQueue.php', + 'ZendBench\\Stdlib\\InsertPriorityQueue' => $vendorDir . '/zendframework/zend-stdlib/benchmark/InsertPriorityQueue.php', + 'ZendBench\\Stdlib\\RemovePriorityQueue' => $vendorDir . '/zendframework/zend-stdlib/benchmark/RemovePriorityQueue.php', + 'Zend\\Cache\\ConfigProvider' => $vendorDir . '/zendframework/zend-cache/src/ConfigProvider.php', + 'Zend\\Cache\\Exception\\BadMethodCallException' => $vendorDir . '/zendframework/zend-cache/src/Exception/BadMethodCallException.php', + 'Zend\\Cache\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-cache/src/Exception/ExceptionInterface.php', + 'Zend\\Cache\\Exception\\ExtensionNotLoadedException' => $vendorDir . '/zendframework/zend-cache/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Cache\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-cache/src/Exception/InvalidArgumentException.php', + 'Zend\\Cache\\Exception\\LogicException' => $vendorDir . '/zendframework/zend-cache/src/Exception/LogicException.php', + 'Zend\\Cache\\Exception\\MissingDependencyException' => $vendorDir . '/zendframework/zend-cache/src/Exception/MissingDependencyException.php', + 'Zend\\Cache\\Exception\\MissingKeyException' => $vendorDir . '/zendframework/zend-cache/src/Exception/MissingKeyException.php', + 'Zend\\Cache\\Exception\\OutOfSpaceException' => $vendorDir . '/zendframework/zend-cache/src/Exception/OutOfSpaceException.php', + 'Zend\\Cache\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-cache/src/Exception/RuntimeException.php', + 'Zend\\Cache\\Exception\\UnexpectedValueException' => $vendorDir . '/zendframework/zend-cache/src/Exception/UnexpectedValueException.php', + 'Zend\\Cache\\Exception\\UnsupportedMethodCallException' => $vendorDir . '/zendframework/zend-cache/src/Exception/UnsupportedMethodCallException.php', + 'Zend\\Cache\\Module' => $vendorDir . '/zendframework/zend-cache/src/Module.php', + 'Zend\\Cache\\PatternFactory' => $vendorDir . '/zendframework/zend-cache/src/PatternFactory.php', + 'Zend\\Cache\\PatternPluginManager' => $vendorDir . '/zendframework/zend-cache/src/PatternPluginManager.php', + 'Zend\\Cache\\Pattern\\AbstractPattern' => $vendorDir . '/zendframework/zend-cache/src/Pattern/AbstractPattern.php', + 'Zend\\Cache\\Pattern\\CallbackCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/CallbackCache.php', + 'Zend\\Cache\\Pattern\\CaptureCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/CaptureCache.php', + 'Zend\\Cache\\Pattern\\ClassCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/ClassCache.php', + 'Zend\\Cache\\Pattern\\ObjectCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/ObjectCache.php', + 'Zend\\Cache\\Pattern\\OutputCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/OutputCache.php', + 'Zend\\Cache\\Pattern\\PatternInterface' => $vendorDir . '/zendframework/zend-cache/src/Pattern/PatternInterface.php', + 'Zend\\Cache\\Pattern\\PatternOptions' => $vendorDir . '/zendframework/zend-cache/src/Pattern/PatternOptions.php', + 'Zend\\Cache\\Service\\PatternPluginManagerFactory' => $vendorDir . '/zendframework/zend-cache/src/Service/PatternPluginManagerFactory.php', + 'Zend\\Cache\\Service\\PluginManagerLookupTrait' => $vendorDir . '/zendframework/zend-cache/src/Service/PluginManagerLookupTrait.php', + 'Zend\\Cache\\Service\\StorageAdapterPluginManagerFactory' => $vendorDir . '/zendframework/zend-cache/src/Service/StorageAdapterPluginManagerFactory.php', + 'Zend\\Cache\\Service\\StorageCacheAbstractServiceFactory' => $vendorDir . '/zendframework/zend-cache/src/Service/StorageCacheAbstractServiceFactory.php', + 'Zend\\Cache\\Service\\StorageCacheFactory' => $vendorDir . '/zendframework/zend-cache/src/Service/StorageCacheFactory.php', + 'Zend\\Cache\\Service\\StoragePluginManagerFactory' => $vendorDir . '/zendframework/zend-cache/src/Service/StoragePluginManagerFactory.php', + 'Zend\\Cache\\StorageFactory' => $vendorDir . '/zendframework/zend-cache/src/StorageFactory.php', + 'Zend\\Cache\\Storage\\AdapterPluginManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/AdapterPluginManager.php', + 'Zend\\Cache\\Storage\\Adapter\\AbstractAdapter' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/AbstractAdapter.php', + 'Zend\\Cache\\Storage\\Adapter\\AbstractZendServer' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/AbstractZendServer.php', + 'Zend\\Cache\\Storage\\Adapter\\AdapterOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/AdapterOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\Apc' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Apc.php', + 'Zend\\Cache\\Storage\\Adapter\\ApcIterator' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ApcIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\ApcOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ApcOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\Apcu' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Apcu.php', + 'Zend\\Cache\\Storage\\Adapter\\ApcuIterator' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ApcuIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\ApcuOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ApcuOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\BlackHole' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/BlackHole.php', + 'Zend\\Cache\\Storage\\Adapter\\Dba' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Dba.php', + 'Zend\\Cache\\Storage\\Adapter\\DbaIterator' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/DbaIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\DbaOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/DbaOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\Filesystem' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Filesystem.php', + 'Zend\\Cache\\Storage\\Adapter\\FilesystemIterator' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/FilesystemIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\FilesystemOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/FilesystemOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\KeyListIterator' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/KeyListIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\Memcache' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Memcache.php', + 'Zend\\Cache\\Storage\\Adapter\\MemcacheOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemcacheOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\MemcacheResourceManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemcacheResourceManager.php', + 'Zend\\Cache\\Storage\\Adapter\\Memcached' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Memcached.php', + 'Zend\\Cache\\Storage\\Adapter\\MemcachedOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemcachedOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\MemcachedResourceManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemcachedResourceManager.php', + 'Zend\\Cache\\Storage\\Adapter\\Memory' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Memory.php', + 'Zend\\Cache\\Storage\\Adapter\\MemoryOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemoryOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\MongoDb' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MongoDb.php', + 'Zend\\Cache\\Storage\\Adapter\\MongoDbOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MongoDbOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\MongoDbResourceManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MongoDbResourceManager.php', + 'Zend\\Cache\\Storage\\Adapter\\Redis' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Redis.php', + 'Zend\\Cache\\Storage\\Adapter\\RedisOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/RedisOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\RedisResourceManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/RedisResourceManager.php', + 'Zend\\Cache\\Storage\\Adapter\\Session' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Session.php', + 'Zend\\Cache\\Storage\\Adapter\\SessionOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/SessionOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\WinCache' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/WinCache.php', + 'Zend\\Cache\\Storage\\Adapter\\WinCacheOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/WinCacheOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\XCache' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/XCache.php', + 'Zend\\Cache\\Storage\\Adapter\\XCacheOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/XCacheOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\ZendServerDisk' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ZendServerDisk.php', + 'Zend\\Cache\\Storage\\Adapter\\ZendServerShm' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ZendServerShm.php', + 'Zend\\Cache\\Storage\\AvailableSpaceCapableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/AvailableSpaceCapableInterface.php', + 'Zend\\Cache\\Storage\\Capabilities' => $vendorDir . '/zendframework/zend-cache/src/Storage/Capabilities.php', + 'Zend\\Cache\\Storage\\ClearByNamespaceInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/ClearByNamespaceInterface.php', + 'Zend\\Cache\\Storage\\ClearByPrefixInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/ClearByPrefixInterface.php', + 'Zend\\Cache\\Storage\\ClearExpiredInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/ClearExpiredInterface.php', + 'Zend\\Cache\\Storage\\Event' => $vendorDir . '/zendframework/zend-cache/src/Storage/Event.php', + 'Zend\\Cache\\Storage\\ExceptionEvent' => $vendorDir . '/zendframework/zend-cache/src/Storage/ExceptionEvent.php', + 'Zend\\Cache\\Storage\\FlushableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/FlushableInterface.php', + 'Zend\\Cache\\Storage\\IterableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/IterableInterface.php', + 'Zend\\Cache\\Storage\\IteratorInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/IteratorInterface.php', + 'Zend\\Cache\\Storage\\OptimizableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/OptimizableInterface.php', + 'Zend\\Cache\\Storage\\PluginManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/PluginManager.php', + 'Zend\\Cache\\Storage\\Plugin\\AbstractPlugin' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/AbstractPlugin.php', + 'Zend\\Cache\\Storage\\Plugin\\ClearExpiredByFactor' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/ClearExpiredByFactor.php', + 'Zend\\Cache\\Storage\\Plugin\\ExceptionHandler' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/ExceptionHandler.php', + 'Zend\\Cache\\Storage\\Plugin\\IgnoreUserAbort' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/IgnoreUserAbort.php', + 'Zend\\Cache\\Storage\\Plugin\\OptimizeByFactor' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/OptimizeByFactor.php', + 'Zend\\Cache\\Storage\\Plugin\\PluginInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/PluginInterface.php', + 'Zend\\Cache\\Storage\\Plugin\\PluginOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/PluginOptions.php', + 'Zend\\Cache\\Storage\\Plugin\\Serializer' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/Serializer.php', + 'Zend\\Cache\\Storage\\PostEvent' => $vendorDir . '/zendframework/zend-cache/src/Storage/PostEvent.php', + 'Zend\\Cache\\Storage\\StorageInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/StorageInterface.php', + 'Zend\\Cache\\Storage\\TaggableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/TaggableInterface.php', + 'Zend\\Cache\\Storage\\TotalSpaceCapableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/TotalSpaceCapableInterface.php', + 'Zend\\Config\\AbstractConfigFactory' => $vendorDir . '/zendframework/zend-config/src/AbstractConfigFactory.php', + 'Zend\\Config\\Config' => $vendorDir . '/zendframework/zend-config/src/Config.php', + 'Zend\\Config\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-config/src/Exception/ExceptionInterface.php', + 'Zend\\Config\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-config/src/Exception/InvalidArgumentException.php', + 'Zend\\Config\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-config/src/Exception/RuntimeException.php', + 'Zend\\Config\\Factory' => $vendorDir . '/zendframework/zend-config/src/Factory.php', + 'Zend\\Config\\Processor\\Constant' => $vendorDir . '/zendframework/zend-config/src/Processor/Constant.php', + 'Zend\\Config\\Processor\\Filter' => $vendorDir . '/zendframework/zend-config/src/Processor/Filter.php', + 'Zend\\Config\\Processor\\ProcessorInterface' => $vendorDir . '/zendframework/zend-config/src/Processor/ProcessorInterface.php', + 'Zend\\Config\\Processor\\Queue' => $vendorDir . '/zendframework/zend-config/src/Processor/Queue.php', + 'Zend\\Config\\Processor\\Token' => $vendorDir . '/zendframework/zend-config/src/Processor/Token.php', + 'Zend\\Config\\Processor\\Translator' => $vendorDir . '/zendframework/zend-config/src/Processor/Translator.php', + 'Zend\\Config\\ReaderPluginManager' => $vendorDir . '/zendframework/zend-config/src/ReaderPluginManager.php', + 'Zend\\Config\\Reader\\Ini' => $vendorDir . '/zendframework/zend-config/src/Reader/Ini.php', + 'Zend\\Config\\Reader\\JavaProperties' => $vendorDir . '/zendframework/zend-config/src/Reader/JavaProperties.php', + 'Zend\\Config\\Reader\\Json' => $vendorDir . '/zendframework/zend-config/src/Reader/Json.php', + 'Zend\\Config\\Reader\\ReaderInterface' => $vendorDir . '/zendframework/zend-config/src/Reader/ReaderInterface.php', + 'Zend\\Config\\Reader\\Xml' => $vendorDir . '/zendframework/zend-config/src/Reader/Xml.php', + 'Zend\\Config\\Reader\\Yaml' => $vendorDir . '/zendframework/zend-config/src/Reader/Yaml.php', + 'Zend\\Config\\WriterPluginManager' => $vendorDir . '/zendframework/zend-config/src/WriterPluginManager.php', + 'Zend\\Config\\Writer\\AbstractWriter' => $vendorDir . '/zendframework/zend-config/src/Writer/AbstractWriter.php', + 'Zend\\Config\\Writer\\Ini' => $vendorDir . '/zendframework/zend-config/src/Writer/Ini.php', + 'Zend\\Config\\Writer\\Json' => $vendorDir . '/zendframework/zend-config/src/Writer/Json.php', + 'Zend\\Config\\Writer\\PhpArray' => $vendorDir . '/zendframework/zend-config/src/Writer/PhpArray.php', + 'Zend\\Config\\Writer\\WriterInterface' => $vendorDir . '/zendframework/zend-config/src/Writer/WriterInterface.php', + 'Zend\\Config\\Writer\\Xml' => $vendorDir . '/zendframework/zend-config/src/Writer/Xml.php', + 'Zend\\Config\\Writer\\Yaml' => $vendorDir . '/zendframework/zend-config/src/Writer/Yaml.php', + 'Zend\\EventManager\\AbstractListenerAggregate' => $vendorDir . '/zendframework/zend-eventmanager/src/AbstractListenerAggregate.php', + 'Zend\\EventManager\\Event' => $vendorDir . '/zendframework/zend-eventmanager/src/Event.php', + 'Zend\\EventManager\\EventInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/EventInterface.php', + 'Zend\\EventManager\\EventManager' => $vendorDir . '/zendframework/zend-eventmanager/src/EventManager.php', + 'Zend\\EventManager\\EventManagerAwareInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/EventManagerAwareInterface.php', + 'Zend\\EventManager\\EventManagerAwareTrait' => $vendorDir . '/zendframework/zend-eventmanager/src/EventManagerAwareTrait.php', + 'Zend\\EventManager\\EventManagerInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/EventManagerInterface.php', + 'Zend\\EventManager\\EventsCapableInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/EventsCapableInterface.php', + 'Zend\\EventManager\\Exception\\DomainException' => $vendorDir . '/zendframework/zend-eventmanager/src/Exception/DomainException.php', + 'Zend\\EventManager\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/Exception/ExceptionInterface.php', + 'Zend\\EventManager\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-eventmanager/src/Exception/InvalidArgumentException.php', + 'Zend\\EventManager\\Exception\\InvalidCallbackException' => $vendorDir . '/zendframework/zend-eventmanager/src/Exception/InvalidCallbackException.php', + 'Zend\\EventManager\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-eventmanager/src/Exception/RuntimeException.php', + 'Zend\\EventManager\\FilterChain' => $vendorDir . '/zendframework/zend-eventmanager/src/FilterChain.php', + 'Zend\\EventManager\\Filter\\FilterInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/Filter/FilterInterface.php', + 'Zend\\EventManager\\Filter\\FilterIterator' => $vendorDir . '/zendframework/zend-eventmanager/src/Filter/FilterIterator.php', + 'Zend\\EventManager\\LazyEventListener' => $vendorDir . '/zendframework/zend-eventmanager/src/LazyEventListener.php', + 'Zend\\EventManager\\LazyListener' => $vendorDir . '/zendframework/zend-eventmanager/src/LazyListener.php', + 'Zend\\EventManager\\LazyListenerAggregate' => $vendorDir . '/zendframework/zend-eventmanager/src/LazyListenerAggregate.php', + 'Zend\\EventManager\\ListenerAggregateInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/ListenerAggregateInterface.php', + 'Zend\\EventManager\\ListenerAggregateTrait' => $vendorDir . '/zendframework/zend-eventmanager/src/ListenerAggregateTrait.php', + 'Zend\\EventManager\\ResponseCollection' => $vendorDir . '/zendframework/zend-eventmanager/src/ResponseCollection.php', + 'Zend\\EventManager\\SharedEventManager' => $vendorDir . '/zendframework/zend-eventmanager/src/SharedEventManager.php', + 'Zend\\EventManager\\SharedEventManagerInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/SharedEventManagerInterface.php', + 'Zend\\EventManager\\SharedEventsCapableInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/SharedEventsCapableInterface.php', + 'Zend\\EventManager\\Test\\EventListenerIntrospectionTrait' => $vendorDir . '/zendframework/zend-eventmanager/src/Test/EventListenerIntrospectionTrait.php', + 'Zend\\Filter\\AbstractDateDropdown' => $vendorDir . '/zendframework/zend-filter/src/AbstractDateDropdown.php', + 'Zend\\Filter\\AbstractFilter' => $vendorDir . '/zendframework/zend-filter/src/AbstractFilter.php', + 'Zend\\Filter\\AbstractUnicode' => $vendorDir . '/zendframework/zend-filter/src/AbstractUnicode.php', + 'Zend\\Filter\\BaseName' => $vendorDir . '/zendframework/zend-filter/src/BaseName.php', + 'Zend\\Filter\\Blacklist' => $vendorDir . '/zendframework/zend-filter/src/Blacklist.php', + 'Zend\\Filter\\Boolean' => $vendorDir . '/zendframework/zend-filter/src/Boolean.php', + 'Zend\\Filter\\Callback' => $vendorDir . '/zendframework/zend-filter/src/Callback.php', + 'Zend\\Filter\\Compress' => $vendorDir . '/zendframework/zend-filter/src/Compress.php', + 'Zend\\Filter\\Compress\\AbstractCompressionAlgorithm' => $vendorDir . '/zendframework/zend-filter/src/Compress/AbstractCompressionAlgorithm.php', + 'Zend\\Filter\\Compress\\Bz2' => $vendorDir . '/zendframework/zend-filter/src/Compress/Bz2.php', + 'Zend\\Filter\\Compress\\CompressionAlgorithmInterface' => $vendorDir . '/zendframework/zend-filter/src/Compress/CompressionAlgorithmInterface.php', + 'Zend\\Filter\\Compress\\Gz' => $vendorDir . '/zendframework/zend-filter/src/Compress/Gz.php', + 'Zend\\Filter\\Compress\\Lzf' => $vendorDir . '/zendframework/zend-filter/src/Compress/Lzf.php', + 'Zend\\Filter\\Compress\\Rar' => $vendorDir . '/zendframework/zend-filter/src/Compress/Rar.php', + 'Zend\\Filter\\Compress\\Snappy' => $vendorDir . '/zendframework/zend-filter/src/Compress/Snappy.php', + 'Zend\\Filter\\Compress\\Tar' => $vendorDir . '/zendframework/zend-filter/src/Compress/Tar.php', + 'Zend\\Filter\\Compress\\Zip' => $vendorDir . '/zendframework/zend-filter/src/Compress/Zip.php', + 'Zend\\Filter\\ConfigProvider' => $vendorDir . '/zendframework/zend-filter/src/ConfigProvider.php', + 'Zend\\Filter\\DataUnitFormatter' => $vendorDir . '/zendframework/zend-filter/src/DataUnitFormatter.php', + 'Zend\\Filter\\DateSelect' => $vendorDir . '/zendframework/zend-filter/src/DateSelect.php', + 'Zend\\Filter\\DateTimeFormatter' => $vendorDir . '/zendframework/zend-filter/src/DateTimeFormatter.php', + 'Zend\\Filter\\DateTimeSelect' => $vendorDir . '/zendframework/zend-filter/src/DateTimeSelect.php', + 'Zend\\Filter\\Decompress' => $vendorDir . '/zendframework/zend-filter/src/Decompress.php', + 'Zend\\Filter\\Decrypt' => $vendorDir . '/zendframework/zend-filter/src/Decrypt.php', + 'Zend\\Filter\\Digits' => $vendorDir . '/zendframework/zend-filter/src/Digits.php', + 'Zend\\Filter\\Dir' => $vendorDir . '/zendframework/zend-filter/src/Dir.php', + 'Zend\\Filter\\Encrypt' => $vendorDir . '/zendframework/zend-filter/src/Encrypt.php', + 'Zend\\Filter\\Encrypt\\BlockCipher' => $vendorDir . '/zendframework/zend-filter/src/Encrypt/BlockCipher.php', + 'Zend\\Filter\\Encrypt\\EncryptionAlgorithmInterface' => $vendorDir . '/zendframework/zend-filter/src/Encrypt/EncryptionAlgorithmInterface.php', + 'Zend\\Filter\\Encrypt\\Openssl' => $vendorDir . '/zendframework/zend-filter/src/Encrypt/Openssl.php', + 'Zend\\Filter\\Exception\\BadMethodCallException' => $vendorDir . '/zendframework/zend-filter/src/Exception/BadMethodCallException.php', + 'Zend\\Filter\\Exception\\DomainException' => $vendorDir . '/zendframework/zend-filter/src/Exception/DomainException.php', + 'Zend\\Filter\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-filter/src/Exception/ExceptionInterface.php', + 'Zend\\Filter\\Exception\\ExtensionNotLoadedException' => $vendorDir . '/zendframework/zend-filter/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Filter\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-filter/src/Exception/InvalidArgumentException.php', + 'Zend\\Filter\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-filter/src/Exception/RuntimeException.php', + 'Zend\\Filter\\File\\Decrypt' => $vendorDir . '/zendframework/zend-filter/src/File/Decrypt.php', + 'Zend\\Filter\\File\\Encrypt' => $vendorDir . '/zendframework/zend-filter/src/File/Encrypt.php', + 'Zend\\Filter\\File\\LowerCase' => $vendorDir . '/zendframework/zend-filter/src/File/LowerCase.php', + 'Zend\\Filter\\File\\Rename' => $vendorDir . '/zendframework/zend-filter/src/File/Rename.php', + 'Zend\\Filter\\File\\RenameUpload' => $vendorDir . '/zendframework/zend-filter/src/File/RenameUpload.php', + 'Zend\\Filter\\File\\UpperCase' => $vendorDir . '/zendframework/zend-filter/src/File/UpperCase.php', + 'Zend\\Filter\\FilterChain' => $vendorDir . '/zendframework/zend-filter/src/FilterChain.php', + 'Zend\\Filter\\FilterInterface' => $vendorDir . '/zendframework/zend-filter/src/FilterInterface.php', + 'Zend\\Filter\\FilterPluginManager' => $vendorDir . '/zendframework/zend-filter/src/FilterPluginManager.php', + 'Zend\\Filter\\FilterPluginManagerFactory' => $vendorDir . '/zendframework/zend-filter/src/FilterPluginManagerFactory.php', + 'Zend\\Filter\\HtmlEntities' => $vendorDir . '/zendframework/zend-filter/src/HtmlEntities.php', + 'Zend\\Filter\\Inflector' => $vendorDir . '/zendframework/zend-filter/src/Inflector.php', + 'Zend\\Filter\\Int' => $vendorDir . '/zendframework/zend-filter/src/Int.php', + 'Zend\\Filter\\Module' => $vendorDir . '/zendframework/zend-filter/src/Module.php', + 'Zend\\Filter\\MonthSelect' => $vendorDir . '/zendframework/zend-filter/src/MonthSelect.php', + 'Zend\\Filter\\Null' => $vendorDir . '/zendframework/zend-filter/src/Null.php', + 'Zend\\Filter\\PregReplace' => $vendorDir . '/zendframework/zend-filter/src/PregReplace.php', + 'Zend\\Filter\\RealPath' => $vendorDir . '/zendframework/zend-filter/src/RealPath.php', + 'Zend\\Filter\\StaticFilter' => $vendorDir . '/zendframework/zend-filter/src/StaticFilter.php', + 'Zend\\Filter\\StringToLower' => $vendorDir . '/zendframework/zend-filter/src/StringToLower.php', + 'Zend\\Filter\\StringToUpper' => $vendorDir . '/zendframework/zend-filter/src/StringToUpper.php', + 'Zend\\Filter\\StringTrim' => $vendorDir . '/zendframework/zend-filter/src/StringTrim.php', + 'Zend\\Filter\\StripNewlines' => $vendorDir . '/zendframework/zend-filter/src/StripNewlines.php', + 'Zend\\Filter\\StripTags' => $vendorDir . '/zendframework/zend-filter/src/StripTags.php', + 'Zend\\Filter\\ToInt' => $vendorDir . '/zendframework/zend-filter/src/ToInt.php', + 'Zend\\Filter\\ToNull' => $vendorDir . '/zendframework/zend-filter/src/ToNull.php', + 'Zend\\Filter\\UpperCaseWords' => $vendorDir . '/zendframework/zend-filter/src/UpperCaseWords.php', + 'Zend\\Filter\\UriNormalize' => $vendorDir . '/zendframework/zend-filter/src/UriNormalize.php', + 'Zend\\Filter\\Whitelist' => $vendorDir . '/zendframework/zend-filter/src/Whitelist.php', + 'Zend\\Filter\\Word\\AbstractSeparator' => $vendorDir . '/zendframework/zend-filter/src/Word/AbstractSeparator.php', + 'Zend\\Filter\\Word\\CamelCaseToDash' => $vendorDir . '/zendframework/zend-filter/src/Word/CamelCaseToDash.php', + 'Zend\\Filter\\Word\\CamelCaseToSeparator' => $vendorDir . '/zendframework/zend-filter/src/Word/CamelCaseToSeparator.php', + 'Zend\\Filter\\Word\\CamelCaseToUnderscore' => $vendorDir . '/zendframework/zend-filter/src/Word/CamelCaseToUnderscore.php', + 'Zend\\Filter\\Word\\DashToCamelCase' => $vendorDir . '/zendframework/zend-filter/src/Word/DashToCamelCase.php', + 'Zend\\Filter\\Word\\DashToSeparator' => $vendorDir . '/zendframework/zend-filter/src/Word/DashToSeparator.php', + 'Zend\\Filter\\Word\\DashToUnderscore' => $vendorDir . '/zendframework/zend-filter/src/Word/DashToUnderscore.php', + 'Zend\\Filter\\Word\\SeparatorToCamelCase' => $vendorDir . '/zendframework/zend-filter/src/Word/SeparatorToCamelCase.php', + 'Zend\\Filter\\Word\\SeparatorToDash' => $vendorDir . '/zendframework/zend-filter/src/Word/SeparatorToDash.php', + 'Zend\\Filter\\Word\\SeparatorToSeparator' => $vendorDir . '/zendframework/zend-filter/src/Word/SeparatorToSeparator.php', + 'Zend\\Filter\\Word\\Service\\SeparatorToSeparatorFactory' => $vendorDir . '/zendframework/zend-filter/src/Word/Service/SeparatorToSeparatorFactory.php', + 'Zend\\Filter\\Word\\UnderscoreToCamelCase' => $vendorDir . '/zendframework/zend-filter/src/Word/UnderscoreToCamelCase.php', + 'Zend\\Filter\\Word\\UnderscoreToDash' => $vendorDir . '/zendframework/zend-filter/src/Word/UnderscoreToDash.php', + 'Zend\\Filter\\Word\\UnderscoreToSeparator' => $vendorDir . '/zendframework/zend-filter/src/Word/UnderscoreToSeparator.php', + 'Zend\\Filter\\Word\\UnderscoreToStudlyCase' => $vendorDir . '/zendframework/zend-filter/src/Word/UnderscoreToStudlyCase.php', + 'Zend\\Hydrator\\AbstractHydrator' => $vendorDir . '/zendframework/zend-hydrator/src/AbstractHydrator.php', + 'Zend\\Hydrator\\Aggregate\\AggregateHydrator' => $vendorDir . '/zendframework/zend-hydrator/src/Aggregate/AggregateHydrator.php', + 'Zend\\Hydrator\\Aggregate\\ExtractEvent' => $vendorDir . '/zendframework/zend-hydrator/src/Aggregate/ExtractEvent.php', + 'Zend\\Hydrator\\Aggregate\\HydrateEvent' => $vendorDir . '/zendframework/zend-hydrator/src/Aggregate/HydrateEvent.php', + 'Zend\\Hydrator\\Aggregate\\HydratorListener' => $vendorDir . '/zendframework/zend-hydrator/src/Aggregate/HydratorListener.php', + 'Zend\\Hydrator\\ArraySerializable' => $vendorDir . '/zendframework/zend-hydrator/src/ArraySerializable.php', + 'Zend\\Hydrator\\ClassMethods' => $vendorDir . '/zendframework/zend-hydrator/src/ClassMethods.php', + 'Zend\\Hydrator\\DelegatingHydrator' => $vendorDir . '/zendframework/zend-hydrator/src/DelegatingHydrator.php', + 'Zend\\Hydrator\\DelegatingHydratorFactory' => $vendorDir . '/zendframework/zend-hydrator/src/DelegatingHydratorFactory.php', + 'Zend\\Hydrator\\Exception\\BadMethodCallException' => $vendorDir . '/zendframework/zend-hydrator/src/Exception/BadMethodCallException.php', + 'Zend\\Hydrator\\Exception\\DomainException' => $vendorDir . '/zendframework/zend-hydrator/src/Exception/DomainException.php', + 'Zend\\Hydrator\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-hydrator/src/Exception/ExceptionInterface.php', + 'Zend\\Hydrator\\Exception\\ExtensionNotLoadedException' => $vendorDir . '/zendframework/zend-hydrator/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Hydrator\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-hydrator/src/Exception/InvalidArgumentException.php', + 'Zend\\Hydrator\\Exception\\InvalidCallbackException' => $vendorDir . '/zendframework/zend-hydrator/src/Exception/InvalidCallbackException.php', + 'Zend\\Hydrator\\Exception\\LogicException' => $vendorDir . '/zendframework/zend-hydrator/src/Exception/LogicException.php', + 'Zend\\Hydrator\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-hydrator/src/Exception/RuntimeException.php', + 'Zend\\Hydrator\\ExtractionInterface' => $vendorDir . '/zendframework/zend-hydrator/src/ExtractionInterface.php', + 'Zend\\Hydrator\\FilterEnabledInterface' => $vendorDir . '/zendframework/zend-hydrator/src/FilterEnabledInterface.php', + 'Zend\\Hydrator\\Filter\\FilterComposite' => $vendorDir . '/zendframework/zend-hydrator/src/Filter/FilterComposite.php', + 'Zend\\Hydrator\\Filter\\FilterInterface' => $vendorDir . '/zendframework/zend-hydrator/src/Filter/FilterInterface.php', + 'Zend\\Hydrator\\Filter\\FilterProviderInterface' => $vendorDir . '/zendframework/zend-hydrator/src/Filter/FilterProviderInterface.php', + 'Zend\\Hydrator\\Filter\\GetFilter' => $vendorDir . '/zendframework/zend-hydrator/src/Filter/GetFilter.php', + 'Zend\\Hydrator\\Filter\\HasFilter' => $vendorDir . '/zendframework/zend-hydrator/src/Filter/HasFilter.php', + 'Zend\\Hydrator\\Filter\\IsFilter' => $vendorDir . '/zendframework/zend-hydrator/src/Filter/IsFilter.php', + 'Zend\\Hydrator\\Filter\\MethodMatchFilter' => $vendorDir . '/zendframework/zend-hydrator/src/Filter/MethodMatchFilter.php', + 'Zend\\Hydrator\\Filter\\NumberOfParameterFilter' => $vendorDir . '/zendframework/zend-hydrator/src/Filter/NumberOfParameterFilter.php', + 'Zend\\Hydrator\\Filter\\OptionalParametersFilter' => $vendorDir . '/zendframework/zend-hydrator/src/Filter/OptionalParametersFilter.php', + 'Zend\\Hydrator\\HydrationInterface' => $vendorDir . '/zendframework/zend-hydrator/src/HydrationInterface.php', + 'Zend\\Hydrator\\HydratorAwareInterface' => $vendorDir . '/zendframework/zend-hydrator/src/HydratorAwareInterface.php', + 'Zend\\Hydrator\\HydratorAwareTrait' => $vendorDir . '/zendframework/zend-hydrator/src/HydratorAwareTrait.php', + 'Zend\\Hydrator\\HydratorInterface' => $vendorDir . '/zendframework/zend-hydrator/src/HydratorInterface.php', + 'Zend\\Hydrator\\HydratorOptionsInterface' => $vendorDir . '/zendframework/zend-hydrator/src/HydratorOptionsInterface.php', + 'Zend\\Hydrator\\HydratorPluginManager' => $vendorDir . '/zendframework/zend-hydrator/src/HydratorPluginManager.php', + 'Zend\\Hydrator\\Iterator\\HydratingArrayIterator' => $vendorDir . '/zendframework/zend-hydrator/src/Iterator/HydratingArrayIterator.php', + 'Zend\\Hydrator\\Iterator\\HydratingIteratorInterface' => $vendorDir . '/zendframework/zend-hydrator/src/Iterator/HydratingIteratorInterface.php', + 'Zend\\Hydrator\\Iterator\\HydratingIteratorIterator' => $vendorDir . '/zendframework/zend-hydrator/src/Iterator/HydratingIteratorIterator.php', + 'Zend\\Hydrator\\NamingStrategyEnabledInterface' => $vendorDir . '/zendframework/zend-hydrator/src/NamingStrategyEnabledInterface.php', + 'Zend\\Hydrator\\NamingStrategy\\ArrayMapNamingStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/NamingStrategy/ArrayMapNamingStrategy.php', + 'Zend\\Hydrator\\NamingStrategy\\CompositeNamingStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/NamingStrategy/CompositeNamingStrategy.php', + 'Zend\\Hydrator\\NamingStrategy\\IdentityNamingStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/NamingStrategy/IdentityNamingStrategy.php', + 'Zend\\Hydrator\\NamingStrategy\\MapNamingStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/NamingStrategy/MapNamingStrategy.php', + 'Zend\\Hydrator\\NamingStrategy\\NamingStrategyInterface' => $vendorDir . '/zendframework/zend-hydrator/src/NamingStrategy/NamingStrategyInterface.php', + 'Zend\\Hydrator\\NamingStrategy\\UnderscoreNamingStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/NamingStrategy/UnderscoreNamingStrategy.php', + 'Zend\\Hydrator\\ObjectProperty' => $vendorDir . '/zendframework/zend-hydrator/src/ObjectProperty.php', + 'Zend\\Hydrator\\Reflection' => $vendorDir . '/zendframework/zend-hydrator/src/Reflection.php', + 'Zend\\Hydrator\\StrategyEnabledInterface' => $vendorDir . '/zendframework/zend-hydrator/src/StrategyEnabledInterface.php', + 'Zend\\Hydrator\\Strategy\\BooleanStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/BooleanStrategy.php', + 'Zend\\Hydrator\\Strategy\\ClosureStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/ClosureStrategy.php', + 'Zend\\Hydrator\\Strategy\\DateTimeFormatterStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/DateTimeFormatterStrategy.php', + 'Zend\\Hydrator\\Strategy\\DefaultStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/DefaultStrategy.php', + 'Zend\\Hydrator\\Strategy\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/Exception/ExceptionInterface.php', + 'Zend\\Hydrator\\Strategy\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/Exception/InvalidArgumentException.php', + 'Zend\\Hydrator\\Strategy\\ExplodeStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/ExplodeStrategy.php', + 'Zend\\Hydrator\\Strategy\\SerializableStrategy' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/SerializableStrategy.php', + 'Zend\\Hydrator\\Strategy\\StrategyChain' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/StrategyChain.php', + 'Zend\\Hydrator\\Strategy\\StrategyInterface' => $vendorDir . '/zendframework/zend-hydrator/src/Strategy/StrategyInterface.php', + 'Zend\\I18n\\ConfigProvider' => $vendorDir . '/zendframework/zend-i18n/src/ConfigProvider.php', + 'Zend\\I18n\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-i18n/src/Exception/ExceptionInterface.php', + 'Zend\\I18n\\Exception\\ExtensionNotLoadedException' => $vendorDir . '/zendframework/zend-i18n/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\I18n\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-i18n/src/Exception/InvalidArgumentException.php', + 'Zend\\I18n\\Exception\\OutOfBoundsException' => $vendorDir . '/zendframework/zend-i18n/src/Exception/OutOfBoundsException.php', + 'Zend\\I18n\\Exception\\ParseException' => $vendorDir . '/zendframework/zend-i18n/src/Exception/ParseException.php', + 'Zend\\I18n\\Exception\\RangeException' => $vendorDir . '/zendframework/zend-i18n/src/Exception/RangeException.php', + 'Zend\\I18n\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-i18n/src/Exception/RuntimeException.php', + 'Zend\\I18n\\Filter\\AbstractLocale' => $vendorDir . '/zendframework/zend-i18n/src/Filter/AbstractLocale.php', + 'Zend\\I18n\\Filter\\Alnum' => $vendorDir . '/zendframework/zend-i18n/src/Filter/Alnum.php', + 'Zend\\I18n\\Filter\\Alpha' => $vendorDir . '/zendframework/zend-i18n/src/Filter/Alpha.php', + 'Zend\\I18n\\Filter\\NumberFormat' => $vendorDir . '/zendframework/zend-i18n/src/Filter/NumberFormat.php', + 'Zend\\I18n\\Filter\\NumberParse' => $vendorDir . '/zendframework/zend-i18n/src/Filter/NumberParse.php', + 'Zend\\I18n\\Module' => $vendorDir . '/zendframework/zend-i18n/src/Module.php', + 'Zend\\I18n\\Translator\\LoaderPluginManager' => $vendorDir . '/zendframework/zend-i18n/src/Translator/LoaderPluginManager.php', + 'Zend\\I18n\\Translator\\LoaderPluginManagerFactory' => $vendorDir . '/zendframework/zend-i18n/src/Translator/LoaderPluginManagerFactory.php', + 'Zend\\I18n\\Translator\\Loader\\AbstractFileLoader' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Loader/AbstractFileLoader.php', + 'Zend\\I18n\\Translator\\Loader\\FileLoaderInterface' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Loader/FileLoaderInterface.php', + 'Zend\\I18n\\Translator\\Loader\\Gettext' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Loader/Gettext.php', + 'Zend\\I18n\\Translator\\Loader\\Ini' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Loader/Ini.php', + 'Zend\\I18n\\Translator\\Loader\\PhpArray' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Loader/PhpArray.php', + 'Zend\\I18n\\Translator\\Loader\\PhpMemoryArray' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Loader/PhpMemoryArray.php', + 'Zend\\I18n\\Translator\\Loader\\RemoteLoaderInterface' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Loader/RemoteLoaderInterface.php', + 'Zend\\I18n\\Translator\\Plural\\Parser' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Plural/Parser.php', + 'Zend\\I18n\\Translator\\Plural\\Rule' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Plural/Rule.php', + 'Zend\\I18n\\Translator\\Plural\\Symbol' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Plural/Symbol.php', + 'Zend\\I18n\\Translator\\TextDomain' => $vendorDir . '/zendframework/zend-i18n/src/Translator/TextDomain.php', + 'Zend\\I18n\\Translator\\Translator' => $vendorDir . '/zendframework/zend-i18n/src/Translator/Translator.php', + 'Zend\\I18n\\Translator\\TranslatorAwareInterface' => $vendorDir . '/zendframework/zend-i18n/src/Translator/TranslatorAwareInterface.php', + 'Zend\\I18n\\Translator\\TranslatorAwareTrait' => $vendorDir . '/zendframework/zend-i18n/src/Translator/TranslatorAwareTrait.php', + 'Zend\\I18n\\Translator\\TranslatorInterface' => $vendorDir . '/zendframework/zend-i18n/src/Translator/TranslatorInterface.php', + 'Zend\\I18n\\Translator\\TranslatorServiceFactory' => $vendorDir . '/zendframework/zend-i18n/src/Translator/TranslatorServiceFactory.php', + 'Zend\\I18n\\Validator\\Alnum' => $vendorDir . '/zendframework/zend-i18n/src/Validator/Alnum.php', + 'Zend\\I18n\\Validator\\Alpha' => $vendorDir . '/zendframework/zend-i18n/src/Validator/Alpha.php', + 'Zend\\I18n\\Validator\\DateTime' => $vendorDir . '/zendframework/zend-i18n/src/Validator/DateTime.php', + 'Zend\\I18n\\Validator\\Float' => $vendorDir . '/zendframework/zend-i18n/src/Validator/Float.php', + 'Zend\\I18n\\Validator\\Int' => $vendorDir . '/zendframework/zend-i18n/src/Validator/Int.php', + 'Zend\\I18n\\Validator\\IsFloat' => $vendorDir . '/zendframework/zend-i18n/src/Validator/IsFloat.php', + 'Zend\\I18n\\Validator\\IsInt' => $vendorDir . '/zendframework/zend-i18n/src/Validator/IsInt.php', + 'Zend\\I18n\\Validator\\PhoneNumber' => $vendorDir . '/zendframework/zend-i18n/src/Validator/PhoneNumber.php', + 'Zend\\I18n\\Validator\\PostCode' => $vendorDir . '/zendframework/zend-i18n/src/Validator/PostCode.php', + 'Zend\\I18n\\View\\HelperConfig' => $vendorDir . '/zendframework/zend-i18n/src/View/HelperConfig.php', + 'Zend\\I18n\\View\\Helper\\AbstractTranslatorHelper' => $vendorDir . '/zendframework/zend-i18n/src/View/Helper/AbstractTranslatorHelper.php', + 'Zend\\I18n\\View\\Helper\\CurrencyFormat' => $vendorDir . '/zendframework/zend-i18n/src/View/Helper/CurrencyFormat.php', + 'Zend\\I18n\\View\\Helper\\DateFormat' => $vendorDir . '/zendframework/zend-i18n/src/View/Helper/DateFormat.php', + 'Zend\\I18n\\View\\Helper\\NumberFormat' => $vendorDir . '/zendframework/zend-i18n/src/View/Helper/NumberFormat.php', + 'Zend\\I18n\\View\\Helper\\Plural' => $vendorDir . '/zendframework/zend-i18n/src/View/Helper/Plural.php', + 'Zend\\I18n\\View\\Helper\\Translate' => $vendorDir . '/zendframework/zend-i18n/src/View/Helper/Translate.php', + 'Zend\\I18n\\View\\Helper\\TranslatePlural' => $vendorDir . '/zendframework/zend-i18n/src/View/Helper/TranslatePlural.php', + 'Zend\\Json\\Decoder' => $vendorDir . '/zendframework/zend-json/src/Decoder.php', + 'Zend\\Json\\Encoder' => $vendorDir . '/zendframework/zend-json/src/Encoder.php', + 'Zend\\Json\\Exception\\BadMethodCallException' => $vendorDir . '/zendframework/zend-json/src/Exception/BadMethodCallException.php', + 'Zend\\Json\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-json/src/Exception/ExceptionInterface.php', + 'Zend\\Json\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-json/src/Exception/InvalidArgumentException.php', + 'Zend\\Json\\Exception\\RecursionException' => $vendorDir . '/zendframework/zend-json/src/Exception/RecursionException.php', + 'Zend\\Json\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-json/src/Exception/RuntimeException.php', + 'Zend\\Json\\Expr' => $vendorDir . '/zendframework/zend-json/src/Expr.php', + 'Zend\\Json\\Json' => $vendorDir . '/zendframework/zend-json/src/Json.php', + 'Zend\\Serializer\\AdapterPluginManager' => $vendorDir . '/zendframework/zend-serializer/src/AdapterPluginManager.php', + 'Zend\\Serializer\\AdapterPluginManagerFactory' => $vendorDir . '/zendframework/zend-serializer/src/AdapterPluginManagerFactory.php', + 'Zend\\Serializer\\Adapter\\AbstractAdapter' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/AbstractAdapter.php', + 'Zend\\Serializer\\Adapter\\AdapterInterface' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/AdapterInterface.php', + 'Zend\\Serializer\\Adapter\\AdapterOptions' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/AdapterOptions.php', + 'Zend\\Serializer\\Adapter\\IgBinary' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/IgBinary.php', + 'Zend\\Serializer\\Adapter\\Json' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/Json.php', + 'Zend\\Serializer\\Adapter\\JsonOptions' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/JsonOptions.php', + 'Zend\\Serializer\\Adapter\\MsgPack' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/MsgPack.php', + 'Zend\\Serializer\\Adapter\\PhpCode' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/PhpCode.php', + 'Zend\\Serializer\\Adapter\\PhpSerialize' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/PhpSerialize.php', + 'Zend\\Serializer\\Adapter\\PythonPickle' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/PythonPickle.php', + 'Zend\\Serializer\\Adapter\\PythonPickleOptions' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/PythonPickleOptions.php', + 'Zend\\Serializer\\Adapter\\Wddx' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/Wddx.php', + 'Zend\\Serializer\\Adapter\\WddxOptions' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/WddxOptions.php', + 'Zend\\Serializer\\ConfigProvider' => $vendorDir . '/zendframework/zend-serializer/src/ConfigProvider.php', + 'Zend\\Serializer\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-serializer/src/Exception/ExceptionInterface.php', + 'Zend\\Serializer\\Exception\\ExtensionNotLoadedException' => $vendorDir . '/zendframework/zend-serializer/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Serializer\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-serializer/src/Exception/InvalidArgumentException.php', + 'Zend\\Serializer\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-serializer/src/Exception/RuntimeException.php', + 'Zend\\Serializer\\Module' => $vendorDir . '/zendframework/zend-serializer/src/Module.php', + 'Zend\\Serializer\\Serializer' => $vendorDir . '/zendframework/zend-serializer/src/Serializer.php', + 'Zend\\ServiceManager\\AbstractFactoryInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/AbstractFactoryInterface.php', + 'Zend\\ServiceManager\\AbstractPluginManager' => $vendorDir . '/zendframework/zend-servicemanager/src/AbstractPluginManager.php', + 'Zend\\ServiceManager\\Config' => $vendorDir . '/zendframework/zend-servicemanager/src/Config.php', + 'Zend\\ServiceManager\\ConfigInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/ConfigInterface.php', + 'Zend\\ServiceManager\\DelegatorFactoryInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/DelegatorFactoryInterface.php', + 'Zend\\ServiceManager\\Di\\DiAbstractServiceFactory' => $vendorDir . '/zendframework/zend-servicemanager/src/Di/DiAbstractServiceFactory.php', + 'Zend\\ServiceManager\\Di\\DiInstanceManagerProxy' => $vendorDir . '/zendframework/zend-servicemanager/src/Di/DiInstanceManagerProxy.php', + 'Zend\\ServiceManager\\Di\\DiServiceFactory' => $vendorDir . '/zendframework/zend-servicemanager/src/Di/DiServiceFactory.php', + 'Zend\\ServiceManager\\Di\\DiServiceInitializer' => $vendorDir . '/zendframework/zend-servicemanager/src/Di/DiServiceInitializer.php', + 'Zend\\ServiceManager\\Exception\\CircularDependencyFoundException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/CircularDependencyFoundException.php', + 'Zend\\ServiceManager\\Exception\\CircularReferenceException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/CircularReferenceException.php', + 'Zend\\ServiceManager\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/ExceptionInterface.php', + 'Zend\\ServiceManager\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/InvalidArgumentException.php', + 'Zend\\ServiceManager\\Exception\\InvalidServiceException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/InvalidServiceException.php', + 'Zend\\ServiceManager\\Exception\\InvalidServiceNameException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/InvalidServiceNameException.php', + 'Zend\\ServiceManager\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/RuntimeException.php', + 'Zend\\ServiceManager\\Exception\\ServiceLocatorUsageException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/ServiceLocatorUsageException.php', + 'Zend\\ServiceManager\\Exception\\ServiceNotCreatedException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/ServiceNotCreatedException.php', + 'Zend\\ServiceManager\\Exception\\ServiceNotFoundException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/ServiceNotFoundException.php', + 'Zend\\ServiceManager\\FactoryInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/FactoryInterface.php', + 'Zend\\ServiceManager\\Factory\\InvokableFactory' => $vendorDir . '/zendframework/zend-servicemanager/src/Factory/InvokableFactory.php', + 'Zend\\ServiceManager\\InitializerInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/InitializerInterface.php', + 'Zend\\ServiceManager\\MutableCreationOptionsInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/MutableCreationOptionsInterface.php', + 'Zend\\ServiceManager\\MutableCreationOptionsTrait' => $vendorDir . '/zendframework/zend-servicemanager/src/MutableCreationOptionsTrait.php', + 'Zend\\ServiceManager\\Proxy\\LazyServiceFactory' => $vendorDir . '/zendframework/zend-servicemanager/src/Proxy/LazyServiceFactory.php', + 'Zend\\ServiceManager\\Proxy\\LazyServiceFactoryFactory' => $vendorDir . '/zendframework/zend-servicemanager/src/Proxy/LazyServiceFactoryFactory.php', + 'Zend\\ServiceManager\\ServiceLocatorAwareInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceLocatorAwareInterface.php', + 'Zend\\ServiceManager\\ServiceLocatorAwareTrait' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceLocatorAwareTrait.php', + 'Zend\\ServiceManager\\ServiceLocatorInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceLocatorInterface.php', + 'Zend\\ServiceManager\\ServiceManager' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceManager.php', + 'Zend\\ServiceManager\\ServiceManagerAwareInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceManagerAwareInterface.php', + 'Zend\\ServiceManager\\Test\\CommonPluginManagerTrait' => $vendorDir . '/zendframework/zend-servicemanager/src/Test/CommonPluginManagerTrait.php', + 'Zend\\Stdlib\\AbstractOptions' => $vendorDir . '/zendframework/zend-stdlib/src/AbstractOptions.php', + 'Zend\\Stdlib\\ArrayObject' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayObject.php', + 'Zend\\Stdlib\\ArraySerializableInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ArraySerializableInterface.php', + 'Zend\\Stdlib\\ArrayStack' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayStack.php', + 'Zend\\Stdlib\\ArrayUtils' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayUtils.php', + 'Zend\\Stdlib\\ArrayUtils\\MergeRemoveKey' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php', + 'Zend\\Stdlib\\ArrayUtils\\MergeReplaceKey' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php', + 'Zend\\Stdlib\\ArrayUtils\\MergeReplaceKeyInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php', + 'Zend\\Stdlib\\CallbackHandler' => $vendorDir . '/zendframework/zend-stdlib/src/CallbackHandler.php', + 'Zend\\Stdlib\\DateTime' => $vendorDir . '/zendframework/zend-stdlib/src/DateTime.php', + 'Zend\\Stdlib\\DispatchableInterface' => $vendorDir . '/zendframework/zend-stdlib/src/DispatchableInterface.php', + 'Zend\\Stdlib\\ErrorHandler' => $vendorDir . '/zendframework/zend-stdlib/src/ErrorHandler.php', + 'Zend\\Stdlib\\Exception\\BadMethodCallException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php', + 'Zend\\Stdlib\\Exception\\DomainException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/DomainException.php', + 'Zend\\Stdlib\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php', + 'Zend\\Stdlib\\Exception\\ExtensionNotLoadedException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Stdlib\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php', + 'Zend\\Stdlib\\Exception\\InvalidCallbackException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php', + 'Zend\\Stdlib\\Exception\\LogicException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/LogicException.php', + 'Zend\\Stdlib\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/RuntimeException.php', + 'Zend\\Stdlib\\Extractor\\ExtractionInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php', + 'Zend\\Stdlib\\FastPriorityQueue' => $vendorDir . '/zendframework/zend-stdlib/src/FastPriorityQueue.php', + 'Zend\\Stdlib\\Glob' => $vendorDir . '/zendframework/zend-stdlib/src/Glob.php', + 'Zend\\Stdlib\\Guard\\AllGuardsTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php', + 'Zend\\Stdlib\\Guard\\ArrayOrTraversableGuardTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php', + 'Zend\\Stdlib\\Guard\\EmptyGuardTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php', + 'Zend\\Stdlib\\Guard\\GuardUtils' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/GuardUtils.php', + 'Zend\\Stdlib\\Guard\\NullGuardTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php', + 'Zend\\Stdlib\\Hydrator\\AbstractHydrator' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php', + 'Zend\\Stdlib\\Hydrator\\Aggregate\\AggregateHydrator' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php', + 'Zend\\Stdlib\\Hydrator\\Aggregate\\ExtractEvent' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php', + 'Zend\\Stdlib\\Hydrator\\Aggregate\\HydrateEvent' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php', + 'Zend\\Stdlib\\Hydrator\\Aggregate\\HydratorListener' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php', + 'Zend\\Stdlib\\Hydrator\\ArraySerializable' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php', + 'Zend\\Stdlib\\Hydrator\\ClassMethods' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php', + 'Zend\\Stdlib\\Hydrator\\DelegatingHydrator' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php', + 'Zend\\Stdlib\\Hydrator\\DelegatingHydratorFactory' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php', + 'Zend\\Stdlib\\Hydrator\\FilterEnabledInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\FilterComposite' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\FilterInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\FilterProviderInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\GetFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\HasFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\IsFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\MethodMatchFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\NumberOfParameterFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\OptionalParametersFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php', + 'Zend\\Stdlib\\Hydrator\\HydrationInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php', + 'Zend\\Stdlib\\Hydrator\\HydratorAwareInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php', + 'Zend\\Stdlib\\Hydrator\\HydratorAwareTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php', + 'Zend\\Stdlib\\Hydrator\\HydratorInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php', + 'Zend\\Stdlib\\Hydrator\\HydratorOptionsInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php', + 'Zend\\Stdlib\\Hydrator\\HydratorPluginManager' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php', + 'Zend\\Stdlib\\Hydrator\\Iterator\\HydratingArrayIterator' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Iterator/HydratingArrayIterator.php', + 'Zend\\Stdlib\\Hydrator\\Iterator\\HydratingIteratorInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Iterator/HydratingIteratorInterface.php', + 'Zend\\Stdlib\\Hydrator\\Iterator\\HydratingIteratorIterator' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Iterator/HydratingIteratorIterator.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategyEnabledInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\ArrayMapNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\CompositeNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\IdentityNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\MapNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\NamingStrategyInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\UnderscoreNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\ObjectProperty' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php', + 'Zend\\Stdlib\\Hydrator\\Reflection' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Reflection.php', + 'Zend\\Stdlib\\Hydrator\\StrategyEnabledInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\BooleanStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\ClosureStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\DateTimeFormatterStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\DefaultStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\ExplodeStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\SerializableStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\StrategyChain' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\StrategyInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php', + 'Zend\\Stdlib\\InitializableInterface' => $vendorDir . '/zendframework/zend-stdlib/src/InitializableInterface.php', + 'Zend\\Stdlib\\JsonSerializable' => $vendorDir . '/zendframework/zend-stdlib/src/JsonSerializable.php', + 'Zend\\Stdlib\\Message' => $vendorDir . '/zendframework/zend-stdlib/src/Message.php', + 'Zend\\Stdlib\\MessageInterface' => $vendorDir . '/zendframework/zend-stdlib/src/MessageInterface.php', + 'Zend\\Stdlib\\ParameterObjectInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ParameterObjectInterface.php', + 'Zend\\Stdlib\\Parameters' => $vendorDir . '/zendframework/zend-stdlib/src/Parameters.php', + 'Zend\\Stdlib\\ParametersInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ParametersInterface.php', + 'Zend\\Stdlib\\PriorityList' => $vendorDir . '/zendframework/zend-stdlib/src/PriorityList.php', + 'Zend\\Stdlib\\PriorityQueue' => $vendorDir . '/zendframework/zend-stdlib/src/PriorityQueue.php', + 'Zend\\Stdlib\\Request' => $vendorDir . '/zendframework/zend-stdlib/src/Request.php', + 'Zend\\Stdlib\\RequestInterface' => $vendorDir . '/zendframework/zend-stdlib/src/RequestInterface.php', + 'Zend\\Stdlib\\Response' => $vendorDir . '/zendframework/zend-stdlib/src/Response.php', + 'Zend\\Stdlib\\ResponseInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ResponseInterface.php', + 'Zend\\Stdlib\\SplPriorityQueue' => $vendorDir . '/zendframework/zend-stdlib/src/SplPriorityQueue.php', + 'Zend\\Stdlib\\SplQueue' => $vendorDir . '/zendframework/zend-stdlib/src/SplQueue.php', + 'Zend\\Stdlib\\SplStack' => $vendorDir . '/zendframework/zend-stdlib/src/SplStack.php', + 'Zend\\Stdlib\\StringUtils' => $vendorDir . '/zendframework/zend-stdlib/src/StringUtils.php', + 'Zend\\Stdlib\\StringWrapper\\AbstractStringWrapper' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php', + 'Zend\\Stdlib\\StringWrapper\\Iconv' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/Iconv.php', + 'Zend\\Stdlib\\StringWrapper\\Intl' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/Intl.php', + 'Zend\\Stdlib\\StringWrapper\\MbString' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/MbString.php', + 'Zend\\Stdlib\\StringWrapper\\Native' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/Native.php', + 'Zend\\Stdlib\\StringWrapper\\StringWrapperInterface' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php', + 'a' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/source4.php', + 'ab' => $vendorDir . '/zetacomponents/base/tests/issue15896/ab.php', + 'b' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/source4.php', + 'bar\\baz\\source_with_namespace' => $vendorDir . '/phpunit/php-code-coverage/tests/_files/source_with_namespace.php', + 'c' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/source4.php', + 'class_with_method_named_empty' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/class_with_method_named_empty.php', + 'class_with_method_that_declares_anonymous_class' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class.php', + 'class_with_multiple_anonymous_classes_and_functions' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/class_with_multiple_anonymous_classes_and_functions.php', + 'customSingleton' => $vendorDir . '/zetacomponents/base/docs/tutorial_lazy_initialization.php', + 'customSingletonConfiguration' => $vendorDir . '/zetacomponents/base/docs/tutorial_lazy_initialization.php', + 'erMyClass1' => $vendorDir . '/zetacomponents/base/docs/repos/Me/myclass1.php', + 'erMyClass2' => $vendorDir . '/zetacomponents/base/docs/repos/Me/myclass2.php', + 'erYourClass1' => $vendorDir . '/zetacomponents/base/docs/repos/You/yourclass1.php', + 'erYourClass2' => $vendorDir . '/zetacomponents/base/docs/repos/You/yourclass2.php', + 'extTranslationTest' => $vendorDir . '/zetacomponents/base/tests/extra_repository/Translation/test.php', + 'ezcBase' => $vendorDir . '/zetacomponents/base/src/base.php', + 'ezcBaseAutoloadException' => $vendorDir . '/zetacomponents/base/src/exceptions/autoload.php', + 'ezcBaseAutoloadOptions' => $vendorDir . '/zetacomponents/base/src/options/autoload.php', + 'ezcBaseConfigurationInitializer' => $vendorDir . '/zetacomponents/base/src/interfaces/configuration_initializer.php', + 'ezcBaseDoubleClassRepositoryPrefixException' => $vendorDir . '/zetacomponents/base/src/exceptions/double_class_repository_prefix.php', + 'ezcBaseException' => $vendorDir . '/zetacomponents/base/src/exceptions/exception.php', + 'ezcBaseExportable' => $vendorDir . '/zetacomponents/base/src/interfaces/exportable.php', + 'ezcBaseExtensionNotFoundException' => $vendorDir . '/zetacomponents/base/src/exceptions/extension_not_found.php', + 'ezcBaseFeatures' => $vendorDir . '/zetacomponents/base/src/features.php', + 'ezcBaseFeaturesUnixTest' => $vendorDir . '/zetacomponents/base/tests/features_unix_test.php', + 'ezcBaseFeaturesWindowsTest' => $vendorDir . '/zetacomponents/base/tests/features_windows_test.php', + 'ezcBaseFile' => $vendorDir . '/zetacomponents/base/src/file.php', + 'ezcBaseFileCalculateRelativePathTest' => $vendorDir . '/zetacomponents/base/tests/file_calculate_relative_path_test.php', + 'ezcBaseFileCopyRecursiveTest' => $vendorDir . '/zetacomponents/base/tests/file_copy_recursive_test.php', + 'ezcBaseFileException' => $vendorDir . '/zetacomponents/base/src/exceptions/file_exception.php', + 'ezcBaseFileFindContext' => $vendorDir . '/zetacomponents/base/src/structs/file_find_context.php', + 'ezcBaseFileFindRecursiveTest' => $vendorDir . '/zetacomponents/base/tests/file_find_recursive_test.php', + 'ezcBaseFileIoException' => $vendorDir . '/zetacomponents/base/src/exceptions/file_io.php', + 'ezcBaseFileIsAbsoluteTest' => $vendorDir . '/zetacomponents/base/tests/file_is_absolute_path.php', + 'ezcBaseFileNotFoundException' => $vendorDir . '/zetacomponents/base/src/exceptions/file_not_found.php', + 'ezcBaseFilePermissionException' => $vendorDir . '/zetacomponents/base/src/exceptions/file_permission.php', + 'ezcBaseFileRemoveRecursiveTest' => $vendorDir . '/zetacomponents/base/tests/file_remove_recursive_test.php', + 'ezcBaseFunctionalityNotSupportedException' => $vendorDir . '/zetacomponents/base/src/exceptions/functionality_not_supported.php', + 'ezcBaseInit' => $vendorDir . '/zetacomponents/base/src/init.php', + 'ezcBaseInitCallbackConfiguredException' => $vendorDir . '/zetacomponents/base/src/exceptions/init_callback_configured.php', + 'ezcBaseInitInvalidCallbackClassException' => $vendorDir . '/zetacomponents/base/src/exceptions/invalid_callback_class.php', + 'ezcBaseInitTest' => $vendorDir . '/zetacomponents/base/tests/base_init_test.php', + 'ezcBaseInvalidParentClassException' => $vendorDir . '/zetacomponents/base/src/exceptions/invalid_parent_class.php', + 'ezcBaseMetaData' => $vendorDir . '/zetacomponents/base/src/metadata.php', + 'ezcBaseMetaDataPearReader' => $vendorDir . '/zetacomponents/base/src/metadata/pear.php', + 'ezcBaseMetaDataPearTest' => $vendorDir . '/zetacomponents/base/tests/metadata_pear_test.php', + 'ezcBaseMetaDataTarballReader' => $vendorDir . '/zetacomponents/base/src/metadata/tarball.php', + 'ezcBaseOptions' => $vendorDir . '/zetacomponents/base/src/options.php', + 'ezcBaseOptionsTest' => $vendorDir . '/zetacomponents/base/tests/base_options_test.php', + 'ezcBasePersistable' => $vendorDir . '/zetacomponents/base/src/interfaces/persistable.php', + 'ezcBasePropertyNotFoundException' => $vendorDir . '/zetacomponents/base/src/exceptions/property_not_found.php', + 'ezcBasePropertyPermissionException' => $vendorDir . '/zetacomponents/base/src/exceptions/property_permission.php', + 'ezcBaseRepositoryDirectory' => $vendorDir . '/zetacomponents/base/src/structs/repository_directory.php', + 'ezcBaseSettingNotFoundException' => $vendorDir . '/zetacomponents/base/src/exceptions/setting_not_found.php', + 'ezcBaseSettingValueException' => $vendorDir . '/zetacomponents/base/src/exceptions/setting_value.php', + 'ezcBaseStruct' => $vendorDir . '/zetacomponents/base/src/struct.php', + 'ezcBaseStructTest' => $vendorDir . '/zetacomponents/base/tests/struct_test.php', + 'ezcBaseTest' => $vendorDir . '/zetacomponents/base/tests/base_test.php', + 'ezcBaseTestOptions' => $vendorDir . '/zetacomponents/base/tests/test_options.php', + 'ezcBaseValueException' => $vendorDir . '/zetacomponents/base/src/exceptions/value.php', + 'ezcBaseWhateverException' => $vendorDir . '/zetacomponents/base/src/exceptions/whatever.php', + 'ezcConverterDocbookEzXmlOptionsTests' => $vendorDir . '/zetacomponents/document/tests/converter_options_docbook_ezxml_tests.php', + 'ezcConverterEzXmlDocbookOptionsTests' => $vendorDir . '/zetacomponents/document/tests/converter_options_ezxml_docbook_tests.php', + 'ezcConverterOdtOptionsTests' => $vendorDir . '/zetacomponents/document/tests/converter_options_odt_tests.php', + 'ezcConverterOptionsTests' => $vendorDir . '/zetacomponents/document/tests/converter_options_tests.php', + 'ezcConverterRstOptionsTests' => $vendorDir . '/zetacomponents/document/tests/converter_options_rst_tests.php', + 'ezcConverterWikiOptionsTests' => $vendorDir . '/zetacomponents/document/tests/converter_options_wiki_tests.php', + 'ezcConverterXsltOptionsTests' => $vendorDir . '/zetacomponents/document/tests/converter_options_xslt_tests.php', + 'ezcDocument' => $vendorDir . '/zetacomponents/document/src/interfaces/document.php', + 'ezcDocumentAlnumListItemGenerator' => $vendorDir . '/zetacomponents/document/src/document/pdf/item_generator/alnum.php', + 'ezcDocumentAlphaListItemGenerator' => $vendorDir . '/zetacomponents/document/src/document/pdf/item_generator/alpha.php', + 'ezcDocumentBBCode' => $vendorDir . '/zetacomponents/document/src/document/bbcode.php', + 'ezcDocumentBBCodeBlockLevelNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/block.php', + 'ezcDocumentBBCodeBulletListNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/bullet_list.php', + 'ezcDocumentBBCodeClosingTagNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/tag_close.php', + 'ezcDocumentBBCodeDocbookVisitor' => $vendorDir . '/zetacomponents/document/src/document/bbcode/visitor/docbook.php', + 'ezcDocumentBBCodeDocbookVisitorTests' => $vendorDir . '/zetacomponents/document/tests/bbcode/docbook_visitor_test.php', + 'ezcDocumentBBCodeDocumentNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/document.php', + 'ezcDocumentBBCodeEmailPlugin' => $vendorDir . '/zetacomponents/document/src/document/bbcode/plugins/email.php', + 'ezcDocumentBBCodeEmphasisPlugin' => $vendorDir . '/zetacomponents/document/src/document/bbcode/plugins/emphasis.php', + 'ezcDocumentBBCodeEndOfFileToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/end_of_file.php', + 'ezcDocumentBBCodeEnumeratedListNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/enumerated_list.php', + 'ezcDocumentBBCodeImagePlugin' => $vendorDir . '/zetacomponents/document/src/document/bbcode/plugins/image.php', + 'ezcDocumentBBCodeInlineLiteralNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/inline_literal.php', + 'ezcDocumentBBCodeLineBreakToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/line_break.php', + 'ezcDocumentBBCodeListEndNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/list_end.php', + 'ezcDocumentBBCodeListItemNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/list_item.php', + 'ezcDocumentBBCodeListItemToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/list_item.php', + 'ezcDocumentBBCodeListNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/list.php', + 'ezcDocumentBBCodeLiteralBlockNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/literal_block.php', + 'ezcDocumentBBCodeLiteralBlockToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/literal_block.php', + 'ezcDocumentBBCodeNewLineToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/new_line.php', + 'ezcDocumentBBCodeNoMarkupPlugin' => $vendorDir . '/zetacomponents/document/src/document/bbcode/plugins/no.php', + 'ezcDocumentBBCodeNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/node.php', + 'ezcDocumentBBCodeOptions' => $vendorDir . '/zetacomponents/document/src/options/document_bbcode.php', + 'ezcDocumentBBCodeParagraphNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/paragraph.php', + 'ezcDocumentBBCodeParser' => $vendorDir . '/zetacomponents/document/src/document/bbcode/parser.php', + 'ezcDocumentBBCodeParserTests' => $vendorDir . '/zetacomponents/document/tests/bbcode/parser_test.php', + 'ezcDocumentBBCodePlugin' => $vendorDir . '/zetacomponents/document/src/document/bbcode/plugin.php', + 'ezcDocumentBBCodeQuotePlugin' => $vendorDir . '/zetacomponents/document/src/document/bbcode/plugins/quote.php', + 'ezcDocumentBBCodeSpecialCharsToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/special_chars.php', + 'ezcDocumentBBCodeTagCloseToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/tag_clsoe.php', + 'ezcDocumentBBCodeTagNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/tag.php', + 'ezcDocumentBBCodeTagOpenToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/tag_open.php', + 'ezcDocumentBBCodeTextLineToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/text_line.php', + 'ezcDocumentBBCodeTextNode' => $vendorDir . '/zetacomponents/document/src/document/bbcode/nodes/text.php', + 'ezcDocumentBBCodeToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token.php', + 'ezcDocumentBBCodeTokenizer' => $vendorDir . '/zetacomponents/document/src/document/bbcode/tokenizer.php', + 'ezcDocumentBBCodeTokenizerTests' => $vendorDir . '/zetacomponents/document/tests/bbcode/tokenizer_test.php', + 'ezcDocumentBBCodeUrlPlugin' => $vendorDir . '/zetacomponents/document/src/document/bbcode/plugins/url.php', + 'ezcDocumentBBCodeVisitor' => $vendorDir . '/zetacomponents/document/src/document/bbcode/visitor.php', + 'ezcDocumentBBCodeWhitespaceToken' => $vendorDir . '/zetacomponents/document/src/document/bbcode/token/whitespace.php', + 'ezcDocumentBulletListItemGenerator' => $vendorDir . '/zetacomponents/document/src/document/pdf/item_generator/bullet.php', + 'ezcDocumentConfluenceWiki' => $vendorDir . '/zetacomponents/document/src/document/wiki/confluence.php', + 'ezcDocumentConversionException' => $vendorDir . '/zetacomponents/document/src/exceptions/conversion.php', + 'ezcDocumentConverter' => $vendorDir . '/zetacomponents/document/src/interfaces/converter.php', + 'ezcDocumentConverterDocbookToEzXmlTests' => $vendorDir . '/zetacomponents/document/tests/converter_docbook_ezxml_test.php', + 'ezcDocumentConverterDocbookToHtmlTests' => $vendorDir . '/zetacomponents/document/tests/converter_docbook_html_test.php', + 'ezcDocumentConverterDocbookToHtmlXsltTests' => $vendorDir . '/zetacomponents/document/tests/converter_docbook_html_xsl_test.php', + 'ezcDocumentConverterDocbookToOdtTests' => $vendorDir . '/zetacomponents/document/tests/converter_docbook_odt_test.php', + 'ezcDocumentConverterDocbookToRstTests' => $vendorDir . '/zetacomponents/document/tests/converter_docbook_rst_test.php', + 'ezcDocumentConverterDocbookToWikiTests' => $vendorDir . '/zetacomponents/document/tests/converter_docbook_wiki_test.php', + 'ezcDocumentConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/converter.php', + 'ezcDocumentConverterTests' => $vendorDir . '/zetacomponents/document/tests/converter_test.php', + 'ezcDocumentCreoleWiki' => $vendorDir . '/zetacomponents/document/src/document/wiki/creole.php', + 'ezcDocumentDocbook' => $vendorDir . '/zetacomponents/document/src/document/xml/docbook.php', + 'ezcDocumentDocbookOptions' => $vendorDir . '/zetacomponents/document/src/options/document_docbook.php', + 'ezcDocumentDocbookOptionsTests' => $vendorDir . '/zetacomponents/document/tests/document_docbook_options_tests.php', + 'ezcDocumentDocbookTests' => $vendorDir . '/zetacomponents/document/tests/document_docbook_test.php', + 'ezcDocumentDocbookToEzXmlAnchorHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/anchor.php', + 'ezcDocumentDocbookToEzXmlCommentHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/comment.php', + 'ezcDocumentDocbookToEzXmlConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook_ezxml.php', + 'ezcDocumentDocbookToEzXmlConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/converter_docbook_ezxml.php', + 'ezcDocumentDocbookToEzXmlEmphasisHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/emphasis.php', + 'ezcDocumentDocbookToEzXmlExternalLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/external_link.php', + 'ezcDocumentDocbookToEzXmlFootnoteHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/footnote.php', + 'ezcDocumentDocbookToEzXmlIgnoreHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/ignore.php', + 'ezcDocumentDocbookToEzXmlInternalLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/internal_link.php', + 'ezcDocumentDocbookToEzXmlItemizedListHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/itemized_list.php', + 'ezcDocumentDocbookToEzXmlLiteralLayoutHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/literal_layout.php', + 'ezcDocumentDocbookToEzXmlMappingHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/mapper.php', + 'ezcDocumentDocbookToEzXmlOrderedListHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/ordered_list.php', + 'ezcDocumentDocbookToEzXmlParagraphHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/paragraph.php', + 'ezcDocumentDocbookToEzXmlRecurseHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/recurse.php', + 'ezcDocumentDocbookToEzXmlSectionHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/section.php', + 'ezcDocumentDocbookToEzXmlTableCellHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/table_cell.php', + 'ezcDocumentDocbookToEzXmlTableHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/table.php', + 'ezcDocumentDocbookToEzXmlTitleHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/title.php', + 'ezcDocumentDocbookToHtmlAnchorHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/anchor.php', + 'ezcDocumentDocbookToHtmlBaseHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/handler.php', + 'ezcDocumentDocbookToHtmlBlockquoteHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/blockquote.php', + 'ezcDocumentDocbookToHtmlCommentHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/comment.php', + 'ezcDocumentDocbookToHtmlConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook_html.php', + 'ezcDocumentDocbookToHtmlConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/converter_docbook_html.php', + 'ezcDocumentDocbookToHtmlDefinitionListEntryHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/definition_list_entry.php', + 'ezcDocumentDocbookToHtmlEmphasisHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/emphasis.php', + 'ezcDocumentDocbookToHtmlExternalLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/external_link.php', + 'ezcDocumentDocbookToHtmlFootnoteHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/footnote.php', + 'ezcDocumentDocbookToHtmlHeadHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/head.php', + 'ezcDocumentDocbookToHtmlIgnoreHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/ignore.php', + 'ezcDocumentDocbookToHtmlInternalLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/internal_link.php', + 'ezcDocumentDocbookToHtmlLiteralLayoutHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/literal_layout.php', + 'ezcDocumentDocbookToHtmlMappingHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/mapper.php', + 'ezcDocumentDocbookToHtmlMediaObjectHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/mediaobject.php', + 'ezcDocumentDocbookToHtmlParagraphHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/paragraph.php', + 'ezcDocumentDocbookToHtmlSectionHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/section.php', + 'ezcDocumentDocbookToHtmlSpecialParagraphHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/special_paragraph.php', + 'ezcDocumentDocbookToHtmlTableCellHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/table_cell.php', + 'ezcDocumentDocbookToHtmlXsltConverter' => $vendorDir . '/zetacomponents/document/src/converters/xslt/docbook_html.php', + 'ezcDocumentDocbookToHtmlXsltConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/converter_docbook_html_xslt.php', + 'ezcDocumentDocbookToOdtAnchorHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/anchor.php', + 'ezcDocumentDocbookToOdtBaseHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/handler.php', + 'ezcDocumentDocbookToOdtCommentHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/comment.php', + 'ezcDocumentDocbookToOdtConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook_odt.php', + 'ezcDocumentDocbookToOdtConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/converter_docbook_odt.php', + 'ezcDocumentDocbookToOdtFootnoteHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/footnote.php', + 'ezcDocumentDocbookToOdtIgnoreHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/ignore.php', + 'ezcDocumentDocbookToOdtInlineHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/inline.php', + 'ezcDocumentDocbookToOdtLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/link.php', + 'ezcDocumentDocbookToOdtListHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/list.php', + 'ezcDocumentDocbookToOdtLiteralLayoutHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/literal_layout.php', + 'ezcDocumentDocbookToOdtMappingHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/mapper.php', + 'ezcDocumentDocbookToOdtMediaObjectHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/media_object.php', + 'ezcDocumentDocbookToOdtPageBreakHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/page_break.php', + 'ezcDocumentDocbookToOdtParagraphHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/paragraph.php', + 'ezcDocumentDocbookToOdtSectionHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/section.php', + 'ezcDocumentDocbookToOdtTableHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/table.php', + 'ezcDocumentDocbookToOdtUlinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/ulink.php', + 'ezcDocumentDocbookToRstBaseHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/handler.php', + 'ezcDocumentDocbookToRstBeginPageHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/begin_page.php', + 'ezcDocumentDocbookToRstBlockquoteHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/blockquote.php', + 'ezcDocumentDocbookToRstCitationHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/citation.php', + 'ezcDocumentDocbookToRstCommentHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/comment.php', + 'ezcDocumentDocbookToRstConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook_rst.php', + 'ezcDocumentDocbookToRstConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/converter_docbook_rst.php', + 'ezcDocumentDocbookToRstEmphasisHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/emphasis.php', + 'ezcDocumentDocbookToRstExternalLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/external_link.php', + 'ezcDocumentDocbookToRstFootnoteHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/footnote.php', + 'ezcDocumentDocbookToRstHeadHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/head.php', + 'ezcDocumentDocbookToRstIgnoreHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/ignore.php', + 'ezcDocumentDocbookToRstInlineMediaObjectHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/inlinemediaobject.php', + 'ezcDocumentDocbookToRstInternalLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/internal_link.php', + 'ezcDocumentDocbookToRstItemizedListHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/itemized_list.php', + 'ezcDocumentDocbookToRstLiteralHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/literal.php', + 'ezcDocumentDocbookToRstLiteralLayoutHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/literal_layout.php', + 'ezcDocumentDocbookToRstMediaObjectHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/mediaobject.php', + 'ezcDocumentDocbookToRstOrderedListHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/ordered_list.php', + 'ezcDocumentDocbookToRstParagraphHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/paragraph.php', + 'ezcDocumentDocbookToRstRecurseHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/recurse.php', + 'ezcDocumentDocbookToRstSectionHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/section.php', + 'ezcDocumentDocbookToRstSpecialParagraphHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/special_paragraph.php', + 'ezcDocumentDocbookToRstTableHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/table.php', + 'ezcDocumentDocbookToRstVariableListHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/variable_list.php', + 'ezcDocumentDocbookToWikiBaseHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/handler.php', + 'ezcDocumentDocbookToWikiBeginPageHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/begin_page.php', + 'ezcDocumentDocbookToWikiConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook_wiki.php', + 'ezcDocumentDocbookToWikiConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/converter_docbook_wiki.php', + 'ezcDocumentDocbookToWikiEmphasisHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/emphasis.php', + 'ezcDocumentDocbookToWikiExternalLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/external_link.php', + 'ezcDocumentDocbookToWikiIgnoreHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/ignore.php', + 'ezcDocumentDocbookToWikiInlineMediaObjectHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/inlinemediaobject.php', + 'ezcDocumentDocbookToWikiInternalLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/internal_link.php', + 'ezcDocumentDocbookToWikiItemizedListHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/itemized_list.php', + 'ezcDocumentDocbookToWikiLiteralHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/literal.php', + 'ezcDocumentDocbookToWikiLiteralLayoutHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/literal_layout.php', + 'ezcDocumentDocbookToWikiMediaObjectHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/mediaobject.php', + 'ezcDocumentDocbookToWikiOrderedListHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/ordered_list.php', + 'ezcDocumentDocbookToWikiParagraphHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/paragraph.php', + 'ezcDocumentDocbookToWikiRecurseHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/recurse.php', + 'ezcDocumentDocbookToWikiSectionHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/section.php', + 'ezcDocumentDocbookToWikiTableHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/table.php', + 'ezcDocumentDocumentTests' => $vendorDir . '/zetacomponents/document/tests/document_test.php', + 'ezcDocumentDokuwikiWiki' => $vendorDir . '/zetacomponents/document/src/document/wiki/dokuwiki.php', + 'ezcDocumentElementVisitorConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor.php', + 'ezcDocumentElementVisitorHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor_handler.php', + 'ezcDocumentErroneousXmlException' => $vendorDir . '/zetacomponents/document/src/exceptions/erroneous_xml.php', + 'ezcDocumentErrorReporting' => $vendorDir . '/zetacomponents/document/src/interfaces/error_reporting.php', + 'ezcDocumentException' => $vendorDir . '/zetacomponents/document/src/exceptions/exception.php', + 'ezcDocumentEzXml' => $vendorDir . '/zetacomponents/document/src/document/xml/ezxml.php', + 'ezcDocumentEzXmlDummyLinkConverter' => $vendorDir . '/zetacomponents/document/src/document/xml/ezxml/dummy_link_converter.php', + 'ezcDocumentEzXmlDummyLinkProvider' => $vendorDir . '/zetacomponents/document/src/document/xml/ezxml/dummy_link_provider.php', + 'ezcDocumentEzXmlLinkConverter' => $vendorDir . '/zetacomponents/document/src/interfaces/ezxml_link_converter.php', + 'ezcDocumentEzXmlLinkProvider' => $vendorDir . '/zetacomponents/document/src/interfaces/ezxml_link_provider.php', + 'ezcDocumentEzXmlOptions' => $vendorDir . '/zetacomponents/document/src/options/document_ezxml.php', + 'ezcDocumentEzXmlOptionsTests' => $vendorDir . '/zetacomponents/document/tests/document_ezxml_options_tests.php', + 'ezcDocumentEzXmlTests' => $vendorDir . '/zetacomponents/document/tests/document_ezxml_test.php', + 'ezcDocumentEzXmlToDocbookAnchorHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/anchor.php', + 'ezcDocumentEzXmlToDocbookConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml_docbook.php', + 'ezcDocumentEzXmlToDocbookConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/converter_ezxml_docbook.php', + 'ezcDocumentEzXmlToDocbookEmphasisHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/emphasis.php', + 'ezcDocumentEzXmlToDocbookHeaderHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/header.php', + 'ezcDocumentEzXmlToDocbookLineHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/line.php', + 'ezcDocumentEzXmlToDocbookLinkHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/link.php', + 'ezcDocumentEzXmlToDocbookListHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/list.php', + 'ezcDocumentEzXmlToDocbookLiteralHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/literal.php', + 'ezcDocumentEzXmlToDocbookMappingHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/mapper.php', + 'ezcDocumentEzXmlToDocbookTableCellHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/table_cell.php', + 'ezcDocumentEzXmlToDocbookTableHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/table.php', + 'ezcDocumentEzXmlToDocbookTableRowHandler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/table_row.php', + 'ezcDocumentHtmlConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/html_rendering.php', + 'ezcDocumentInvalidDocbookException' => $vendorDir . '/zetacomponents/document/src/exceptions/invalid_docbook.php', + 'ezcDocumentInvalidFontException' => $vendorDir . '/zetacomponents/document/src/exceptions/unknown_font.php', + 'ezcDocumentInvalidOdtException' => $vendorDir . '/zetacomponents/document/src/exceptions/invalid_odt.php', + 'ezcDocumentListBulletGuesser' => $vendorDir . '/zetacomponents/document/src/tools/list_bullet_guesser.php', + 'ezcDocumentListBulletGuesserTest' => $vendorDir . '/zetacomponents/document/tests/list_bullet_guesser_test.php', + 'ezcDocumentListItemGenerator' => $vendorDir . '/zetacomponents/document/src/document/pdf/item_generator.php', + 'ezcDocumentLocateable' => $vendorDir . '/zetacomponents/document/src/interfaces/locateable.php', + 'ezcDocumentLocateableDomElement' => $vendorDir . '/zetacomponents/document/src/dom_elements/locateable.php', + 'ezcDocumentMissingVisitorException' => $vendorDir . '/zetacomponents/document/src/exceptions/missing_visitor.php', + 'ezcDocumentNoListItemGenerator' => $vendorDir . '/zetacomponents/document/src/document/pdf/item_generator/no.php', + 'ezcDocumentNumberedListItemGenerator' => $vendorDir . '/zetacomponents/document/src/document/pdf/item_generator/number.php', + 'ezcDocumentOdt' => $vendorDir . '/zetacomponents/document/src/document/xml/odt.php', + 'ezcDocumentOdtBaseFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/base.php', + 'ezcDocumentOdtDefaultPcssConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/default.php', + 'ezcDocumentOdtDocbookTests' => $vendorDir . '/zetacomponents/document/tests/document_odt_docbook_test.php', + 'ezcDocumentOdtElementBaseFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/base.php', + 'ezcDocumentOdtElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element.php', + 'ezcDocumentOdtElementFootnoteFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/footnote.php', + 'ezcDocumentOdtElementFrameFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/frame.php', + 'ezcDocumentOdtElementHeaderFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/header.php', + 'ezcDocumentOdtElementHtmlTableFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/html_table.php', + 'ezcDocumentOdtElementImageFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/image.php', + 'ezcDocumentOdtElementLinkFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/link.php', + 'ezcDocumentOdtElementListFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/list.php', + 'ezcDocumentOdtElementParagraphFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/paragraph.php', + 'ezcDocumentOdtElementTableFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/table.php', + 'ezcDocumentOdtElementWhitespaceFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/element/whitespace.php', + 'ezcDocumentOdtEmphasisStyleFilterRule' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/style/rule/emphasis.php', + 'ezcDocumentOdtFormattingProperties' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/formatting/properties.php', + 'ezcDocumentOdtFormattingPropertiesExistException' => $vendorDir . '/zetacomponents/document/src/exceptions/odt/formatting_properties_exist.php', + 'ezcDocumentOdtFormattingPropertiesTest' => $vendorDir . '/zetacomponents/document/tests/odt/formatting_properties_test.php', + 'ezcDocumentOdtFormattingPropertyCollection' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/formatting/property_collection.php', + 'ezcDocumentOdtFormattingPropertyCollectionTest' => $vendorDir . '/zetacomponents/document/tests/odt/formatting_property_collection_test.php', + 'ezcDocumentOdtImageFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/image.php', + 'ezcDocumentOdtImageLocator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/image_locator.php', + 'ezcDocumentOdtListLevelStyle' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/list_level_style.php', + 'ezcDocumentOdtListLevelStyleBullet' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/list_level_style/bullet.php', + 'ezcDocumentOdtListLevelStyleFilterRule' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/style/rule/list_level.php', + 'ezcDocumentOdtListLevelStyleNumber' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/list_level_style/number.php', + 'ezcDocumentOdtListLevelStyleTest' => $vendorDir . '/zetacomponents/document/tests/odt/list_level_style_test.php', + 'ezcDocumentOdtListStyle' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/list_style.php', + 'ezcDocumentOdtListStyleGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/list.php', + 'ezcDocumentOdtMetaGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/meta_generator.php', + 'ezcDocumentOdtMetaGeneratorTest' => $vendorDir . '/zetacomponents/document/tests/odt/meta_generator_test.php', + 'ezcDocumentOdtOptions' => $vendorDir . '/zetacomponents/document/src/options/document_odt.php', + 'ezcDocumentOdtParagraphStyleGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/paragraph.php', + 'ezcDocumentOdtPcssBorderConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/border.php', + 'ezcDocumentOdtPcssColorConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/color.php', + 'ezcDocumentOdtPcssConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter.php', + 'ezcDocumentOdtPcssConverterManager' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter_manager.php', + 'ezcDocumentOdtPcssConverterTools' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter_tools.php', + 'ezcDocumentOdtPcssConvertersTest' => $vendorDir . '/zetacomponents/document/tests/odt/style_converters_test.php', + 'ezcDocumentOdtPcssFontConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/font.php', + 'ezcDocumentOdtPcssFontNameConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/font_name.php', + 'ezcDocumentOdtPcssFontSizeConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/font_size.php', + 'ezcDocumentOdtPcssFontStylePreprocessor' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/preprocessor/font.php', + 'ezcDocumentOdtPcssListStylePreprocessor' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/preprocessor/list.php', + 'ezcDocumentOdtPcssMarginConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/margin.php', + 'ezcDocumentOdtPcssParagraphStylePreprocessor' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/preprocessor/paragraph.php', + 'ezcDocumentOdtPcssPreprocessor' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/preprocessor.php', + 'ezcDocumentOdtPcssStyler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss.php', + 'ezcDocumentOdtPcssTextDecorationConverter' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/text_decoration.php', + 'ezcDocumentOdtStyle' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/style.php', + 'ezcDocumentOdtStyleExtractor' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/style/extractor.php', + 'ezcDocumentOdtStyleExtractorTest' => $vendorDir . '/zetacomponents/document/tests/odt/style_extractor_test.php', + 'ezcDocumentOdtStyleFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/style.php', + 'ezcDocumentOdtStyleFilterRule' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/filter/style/rule.php', + 'ezcDocumentOdtStyleGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator.php', + 'ezcDocumentOdtStyleInferencer' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/style/inferencer.php', + 'ezcDocumentOdtStyleInformation' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/style_information.php', + 'ezcDocumentOdtStyleListPropertyGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/list.php', + 'ezcDocumentOdtStyleParagraphPropertyGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/paragraph.php', + 'ezcDocumentOdtStyleParagraphPropertyGeneratorTest' => $vendorDir . '/zetacomponents/document/tests/odt/paragraph_property_generator_test.php', + 'ezcDocumentOdtStyleParser' => $vendorDir . '/zetacomponents/document/src/document/xml/odt/style/parser.php', + 'ezcDocumentOdtStyleParserTest' => $vendorDir . '/zetacomponents/document/tests/odt/style_parser_test.php', + 'ezcDocumentOdtStylePropertyGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator.php', + 'ezcDocumentOdtStylePropertyGeneratorTest' => $vendorDir . '/zetacomponents/document/tests/odt/property_generator_test.php', + 'ezcDocumentOdtStyleTableCellPropertyGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/table_cell.php', + 'ezcDocumentOdtStyleTablePropertyGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/table.php', + 'ezcDocumentOdtStyleTableRowPropertyGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/table_row.php', + 'ezcDocumentOdtStyleTest' => $vendorDir . '/zetacomponents/document/tests/odt/style_test.php', + 'ezcDocumentOdtStyleTextPropertyGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/text.php', + 'ezcDocumentOdtStyleTextPropertyGeneratorTest' => $vendorDir . '/zetacomponents/document/tests/odt/text_property_generator_test.php', + 'ezcDocumentOdtStyler' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler.php', + 'ezcDocumentOdtTableCellStyleGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/table_cell.php', + 'ezcDocumentOdtTableRowStyleGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/table_row.php', + 'ezcDocumentOdtTableStyleGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/table.php', + 'ezcDocumentOdtTestStyler' => $vendorDir . '/zetacomponents/document/tests/odt/test_classes/styler.php', + 'ezcDocumentOdtTextProcessor' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/text_processor.php', + 'ezcDocumentOdtTextProcessorTest' => $vendorDir . '/zetacomponents/document/tests/odt/text_processor_test.php', + 'ezcDocumentOdtTextStyleGenerator' => $vendorDir . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/text.php', + 'ezcDocumentOptions' => $vendorDir . '/zetacomponents/document/src/options/document.php', + 'ezcDocumentOptionsOdtTests' => $vendorDir . '/zetacomponents/document/tests/document_options_odt_test.php', + 'ezcDocumentOptionsTestCase' => $vendorDir . '/zetacomponents/document/tests/options_test_case.php', + 'ezcDocumentOptionsTests' => $vendorDir . '/zetacomponents/document/tests/document_options_tests.php', + 'ezcDocumentOptionsXmlBaseTests' => $vendorDir . '/zetacomponents/document/tests/document_options_xml_base_test.php', + 'ezcDocumentParser' => $vendorDir . '/zetacomponents/document/src/interfaces/parser.php', + 'ezcDocumentParserException' => $vendorDir . '/zetacomponents/document/src/exceptions/parser.php', + 'ezcDocumentParserOptions' => $vendorDir . '/zetacomponents/document/src/options/document_parser.php', + 'ezcDocumentParserTests' => $vendorDir . '/zetacomponents/document/tests/parser_test.php', + 'ezcDocumentPcssDeclarationDirective' => $vendorDir . '/zetacomponents/document/src/pcss/declaration_directive.php', + 'ezcDocumentPcssDirective' => $vendorDir . '/zetacomponents/document/src/pcss/directive.php', + 'ezcDocumentPcssLayoutDirective' => $vendorDir . '/zetacomponents/document/src/pcss/layout_directive.php', + 'ezcDocumentPcssLocationIdTests' => $vendorDir . '/zetacomponents/document/tests/pcss/location_id_test.php', + 'ezcDocumentPcssMatchLocationIdTests' => $vendorDir . '/zetacomponents/document/tests/pcss/match_location_id_test.php', + 'ezcDocumentPcssMeasure' => $vendorDir . '/zetacomponents/document/src/pcss/measure.php', + 'ezcDocumentPcssMeasureTests' => $vendorDir . '/zetacomponents/document/tests/pcss/measure_test.php', + 'ezcDocumentPcssParser' => $vendorDir . '/zetacomponents/document/src/pcss/parser.php', + 'ezcDocumentPcssParserTests' => $vendorDir . '/zetacomponents/document/tests/pcss/parser_test.php', + 'ezcDocumentPcssStyleBorderBoxValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/border_box_value.php', + 'ezcDocumentPcssStyleBorderValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/border_value.php', + 'ezcDocumentPcssStyleBoxValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/box_value.php', + 'ezcDocumentPcssStyleColorBoxValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/color_box_value.php', + 'ezcDocumentPcssStyleColorValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/color_value.php', + 'ezcDocumentPcssStyleInferenceTests' => $vendorDir . '/zetacomponents/document/tests/pcss/style_inference_test.php', + 'ezcDocumentPcssStyleInferencer' => $vendorDir . '/zetacomponents/document/src/pcss/style_inferencer.php', + 'ezcDocumentPcssStyleIntValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/int_value.php', + 'ezcDocumentPcssStyleLineBoxValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/line_box_value.php', + 'ezcDocumentPcssStyleLineValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/line_value.php', + 'ezcDocumentPcssStyleListValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/list_value.php', + 'ezcDocumentPcssStyleMeasureBoxValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/measure_box_value.php', + 'ezcDocumentPcssStyleMeasureValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/measure_value.php', + 'ezcDocumentPcssStyleSrcValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/src_value.php', + 'ezcDocumentPcssStyleStringValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/string_value.php', + 'ezcDocumentPcssStyleValue' => $vendorDir . '/zetacomponents/document/src/pcss/style/value.php', + 'ezcDocumentPcssValueParserTests' => $vendorDir . '/zetacomponents/document/tests/pcss/value_parser_test.php', + 'ezcDocumentPdf' => $vendorDir . '/zetacomponents/document/src/document/pdf.php', + 'ezcDocumentPdfBlockRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/block.php', + 'ezcDocumentPdfBlockquoteRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/blockquote.php', + 'ezcDocumentPdfBlockquoteRendererTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_blockquote_tests.php', + 'ezcDocumentPdfBoundingBox' => $vendorDir . '/zetacomponents/document/src/document/pdf/box.php', + 'ezcDocumentPdfDefaultHyphenator' => $vendorDir . '/zetacomponents/document/src/document/pdf/hyphenator/default.php', + 'ezcDocumentPdfDefaultTableColumnWidthCalculator' => $vendorDir . '/zetacomponents/document/src/document/pdf/default_table_column_width_calculator.php', + 'ezcDocumentPdfDefaultTokenizer' => $vendorDir . '/zetacomponents/document/src/document/pdf/tokenizer/default.php', + 'ezcDocumentPdfDriver' => $vendorDir . '/zetacomponents/document/src/document/pdf/driver.php', + 'ezcDocumentPdfDriverHaruTests' => $vendorDir . '/zetacomponents/document/tests/pdf/driver_haru_tests.php', + 'ezcDocumentPdfDriverSvgTests' => $vendorDir . '/zetacomponents/document/tests/pdf/driver_svg_tests.php', + 'ezcDocumentPdfDriverTcpdfTests' => $vendorDir . '/zetacomponents/document/tests/pdf/driver_tcpdf_tests.php', + 'ezcDocumentPdfDriverTests' => $vendorDir . '/zetacomponents/document/tests/pdf/driver_tests.php', + 'ezcDocumentPdfFooterOptions' => $vendorDir . '/zetacomponents/document/src/options/document_pdf_footer.php', + 'ezcDocumentPdfFooterOptionsTests' => $vendorDir . '/zetacomponents/document/tests/document_pdf_footer_options_tests.php', + 'ezcDocumentPdfFooterPdfPart' => $vendorDir . '/zetacomponents/document/src/document/pdf/part/footer.php', + 'ezcDocumentPdfHaruDriver' => $vendorDir . '/zetacomponents/document/src/document/pdf/driver/haru.php', + 'ezcDocumentPdfHeaderPdfPart' => $vendorDir . '/zetacomponents/document/src/document/pdf/part/header.php', + 'ezcDocumentPdfHyphenator' => $vendorDir . '/zetacomponents/document/src/document/pdf/hyphenator.php', + 'ezcDocumentPdfHyphenatorTests' => $vendorDir . '/zetacomponents/document/tests/pdf/hyphenator_test.php', + 'ezcDocumentPdfImage' => $vendorDir . '/zetacomponents/document/src/document/pdf/image.php', + 'ezcDocumentPdfImageHandler' => $vendorDir . '/zetacomponents/document/src/document/pdf/image/handler.php', + 'ezcDocumentPdfImageHandlerTests' => $vendorDir . '/zetacomponents/document/tests/pdf/image_handler.php', + 'ezcDocumentPdfListItemGeneratorTests' => $vendorDir . '/zetacomponents/document/tests/pdf/list_item_generator_test.php', + 'ezcDocumentPdfListItemRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/list_item.php', + 'ezcDocumentPdfListRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/list.php', + 'ezcDocumentPdfListRendererTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_list_tests.php', + 'ezcDocumentPdfLiteralBlockRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/literal_block.php', + 'ezcDocumentPdfLiteralTokenizer' => $vendorDir . '/zetacomponents/document/src/document/pdf/tokenizer/literal.php', + 'ezcDocumentPdfLiteralTokenizerTests' => $vendorDir . '/zetacomponents/document/tests/pdf/literal_tokenizer_test.php', + 'ezcDocumentPdfLiterallayoutRendererTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_literallayout_tests.php', + 'ezcDocumentPdfMainRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/main.php', + 'ezcDocumentPdfMainRendererTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_main_tests.php', + 'ezcDocumentPdfMediaObjectRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/mediaobject.php', + 'ezcDocumentPdfMediaObjectRendererTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_mediaobject_tests.php', + 'ezcDocumentPdfOptions' => $vendorDir . '/zetacomponents/document/src/options/document_pdf.php', + 'ezcDocumentPdfOptionsTests' => $vendorDir . '/zetacomponents/document/tests/document_pdf_options_tests.php', + 'ezcDocumentPdfPage' => $vendorDir . '/zetacomponents/document/src/document/pdf/page.php', + 'ezcDocumentPdfPageTests' => $vendorDir . '/zetacomponents/document/tests/pdf/page_test.php', + 'ezcDocumentPdfParagraphRendererTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_paragraph_tests.php', + 'ezcDocumentPdfPart' => $vendorDir . '/zetacomponents/document/src/document/pdf/part.php', + 'ezcDocumentPdfPhpImageHandler' => $vendorDir . '/zetacomponents/document/src/document/pdf/image/php.php', + 'ezcDocumentPdfRenderRtlTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_rtl_tests.php', + 'ezcDocumentPdfRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer.php', + 'ezcDocumentPdfRendererFooterPartTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_footer_part_tests.php', + 'ezcDocumentPdfRendererTextDecorationsTests' => $vendorDir . '/zetacomponents/document/tests/pdf/render_text_decorations_tests.php', + 'ezcDocumentPdfSvgDriver' => $vendorDir . '/zetacomponents/document/src/document/pdf/driver/svg.php', + 'ezcDocumentPdfTableColumnWidthCalculator' => $vendorDir . '/zetacomponents/document/src/document/pdf/table_column_width_calculator.php', + 'ezcDocumentPdfTableColumnWidthCalculatorTests' => $vendorDir . '/zetacomponents/document/tests/pdf/table_column_width_test.php', + 'ezcDocumentPdfTableRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/table.php', + 'ezcDocumentPdfTableRendererTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_table_tests.php', + 'ezcDocumentPdfTcpdfDriver' => $vendorDir . '/zetacomponents/document/src/document/pdf/driver/tcpdf.php', + 'ezcDocumentPdfTestCase' => $vendorDir . '/zetacomponents/document/tests/pdf/base.php', + 'ezcDocumentPdfTests' => $vendorDir . '/zetacomponents/document/tests/pdf/tests.php', + 'ezcDocumentPdfTextBlockRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/text_block.php', + 'ezcDocumentPdfTextBoxRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/text_box.php', + 'ezcDocumentPdfTextBoxRendererBaseTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_text_box_base_tests.php', + 'ezcDocumentPdfTextBoxRendererTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_text_box_tests.php', + 'ezcDocumentPdfTitleRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/title.php', + 'ezcDocumentPdfTokenizer' => $vendorDir . '/zetacomponents/document/src/document/pdf/tokenizer.php', + 'ezcDocumentPdfTokenizerTests' => $vendorDir . '/zetacomponents/document/tests/pdf/tokenizer_test.php', + 'ezcDocumentPdfTransactionalDriverWrapper' => $vendorDir . '/zetacomponents/document/src/document/pdf/driver/wrapper.php', + 'ezcDocumentPdfTransactionalDriverWrapperState' => $vendorDir . '/zetacomponents/document/src/document/pdf/driver/wrapper_state.php', + 'ezcDocumentPdfTransactionalDriverWrapperTests' => $vendorDir . '/zetacomponents/document/tests/pdf/driver_transactions_tests.php', + 'ezcDocumentPdfVariableListRendererTests' => $vendorDir . '/zetacomponents/document/tests/pdf/renderer_variablelist_tests.php', + 'ezcDocumentPdfWrappingTextBoxRenderer' => $vendorDir . '/zetacomponents/document/src/document/pdf/renderer/paragraph.php', + 'ezcDocumentPropertyContainerDomElement' => $vendorDir . '/zetacomponents/document/src/dom_elements/property_container.php', + 'ezcDocumentRomanListItemGenerator' => $vendorDir . '/zetacomponents/document/src/document/pdf/item_generator/roman.php', + 'ezcDocumentRst' => $vendorDir . '/zetacomponents/document/src/document/rst.php', + 'ezcDocumentRstAnonymousLinkNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/link_anonymous.php', + 'ezcDocumentRstAnonymousReferenceNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/anon_reference.php', + 'ezcDocumentRstAttentionDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive/attention.php', + 'ezcDocumentRstBlockNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/block.php', + 'ezcDocumentRstBlockquoteAnnotationNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/blockquote_annotation.php', + 'ezcDocumentRstBlockquoteNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/blockquote.php', + 'ezcDocumentRstBulletListListNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/bullet_list_list.php', + 'ezcDocumentRstBulletListNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/bullet_list.php', + 'ezcDocumentRstCommentNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/comment.php', + 'ezcDocumentRstContentsDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive/contents.php', + 'ezcDocumentRstDangerDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive/danger.php', + 'ezcDocumentRstDefinitionListListNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/definition_list_list.php', + 'ezcDocumentRstDefinitionListNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/definition_list.php', + 'ezcDocumentRstDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive.php', + 'ezcDocumentRstDirectiveNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/directive.php', + 'ezcDocumentRstDocbookVisitor' => $vendorDir . '/zetacomponents/document/src/document/rst/visitor/docbook.php', + 'ezcDocumentRstDocbookVisitorTests' => $vendorDir . '/zetacomponents/document/tests/document_rst_visitor_docbook_test.php', + 'ezcDocumentRstDocumentNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/document.php', + 'ezcDocumentRstEmphasisTextRole' => $vendorDir . '/zetacomponents/document/src/document/rst/role/emphasis.php', + 'ezcDocumentRstEnumeratedListListNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/enumerated_list_list.php', + 'ezcDocumentRstEnumeratedListNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/enumerated_list.php', + 'ezcDocumentRstExternalReferenceNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/link_reference.php', + 'ezcDocumentRstFieldListNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/field_list.php', + 'ezcDocumentRstFigureDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive/figure.php', + 'ezcDocumentRstFootnoteNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/footnote.php', + 'ezcDocumentRstImageDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive/image.php', + 'ezcDocumentRstIncludeDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive/include.php', + 'ezcDocumentRstLineBlockLineNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/line_block_line.php', + 'ezcDocumentRstLineBlockNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/line_block.php', + 'ezcDocumentRstLinkNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/link.php', + 'ezcDocumentRstLiteralBlockNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/literal_block.php', + 'ezcDocumentRstLiteralNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/literal.php', + 'ezcDocumentRstLiteralTextRole' => $vendorDir . '/zetacomponents/document/src/document/rst/role/literal.php', + 'ezcDocumentRstMarkupEmphasisNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/markup_emphasis.php', + 'ezcDocumentRstMarkupInlineLiteralNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/markup_inline_literal.php', + 'ezcDocumentRstMarkupInterpretedTextNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/markup_interpreted_text.php', + 'ezcDocumentRstMarkupNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/markup.php', + 'ezcDocumentRstMarkupStrongEmphasisNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/markup_strong_emphasis.php', + 'ezcDocumentRstMarkupSubstitutionNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/markup_substitution.php', + 'ezcDocumentRstMissingDirectiveHandlerException' => $vendorDir . '/zetacomponents/document/src/exceptions/missing_directive_handler.php', + 'ezcDocumentRstMissingTextRoleHandlerException' => $vendorDir . '/zetacomponents/document/src/exceptions/missing_text_role_handler.php', + 'ezcDocumentRstNamedReferenceNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/named_reference.php', + 'ezcDocumentRstNode' => $vendorDir . '/zetacomponents/document/src/document/rst/node.php', + 'ezcDocumentRstNoteDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive/note.php', + 'ezcDocumentRstNoticeDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive/notice.php', + 'ezcDocumentRstOptions' => $vendorDir . '/zetacomponents/document/src/options/document_rst.php', + 'ezcDocumentRstOptionsTests' => $vendorDir . '/zetacomponents/document/tests/document_rst_options_tests.php', + 'ezcDocumentRstParagraphNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/paragraph.php', + 'ezcDocumentRstParser' => $vendorDir . '/zetacomponents/document/src/document/rst/parser.php', + 'ezcDocumentRstParserTests' => $vendorDir . '/zetacomponents/document/tests/document_rst_parser_test.php', + 'ezcDocumentRstReferenceNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/reference.php', + 'ezcDocumentRstSectionNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/section.php', + 'ezcDocumentRstStack' => $vendorDir . '/zetacomponents/document/src/document/rst/document_stack.php', + 'ezcDocumentRstStackTests' => $vendorDir . '/zetacomponents/document/tests/document_rst_stack_test.php', + 'ezcDocumentRstStrongTextRole' => $vendorDir . '/zetacomponents/document/src/document/rst/role/strong.php', + 'ezcDocumentRstSubscriptTextRole' => $vendorDir . '/zetacomponents/document/src/document/rst/role/subscript.php', + 'ezcDocumentRstSubstitutionNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/substitution.php', + 'ezcDocumentRstSuperscriptTextRole' => $vendorDir . '/zetacomponents/document/src/document/rst/role/superscript.php', + 'ezcDocumentRstTableBodyNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/table_body.php', + 'ezcDocumentRstTableCellNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/table_cell.php', + 'ezcDocumentRstTableHeadNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/table_head.php', + 'ezcDocumentRstTableNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/table.php', + 'ezcDocumentRstTableRowNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/table_row.php', + 'ezcDocumentRstTargetNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/target.php', + 'ezcDocumentRstTextLineNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/text_line.php', + 'ezcDocumentRstTextRole' => $vendorDir . '/zetacomponents/document/src/document/rst/role.php', + 'ezcDocumentRstTitleNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/title.php', + 'ezcDocumentRstTitleReferenceTextRole' => $vendorDir . '/zetacomponents/document/src/document/rst/role/title_reference.php', + 'ezcDocumentRstToken' => $vendorDir . '/zetacomponents/document/src/document/rst/token.php', + 'ezcDocumentRstTokenizer' => $vendorDir . '/zetacomponents/document/src/document/rst/tokenizer.php', + 'ezcDocumentRstTokenizerException' => $vendorDir . '/zetacomponents/document/src/exceptions/rst_tokenizer.php', + 'ezcDocumentRstTokenizerTests' => $vendorDir . '/zetacomponents/document/tests/document_rst_tokenizer_test.php', + 'ezcDocumentRstTransitionNode' => $vendorDir . '/zetacomponents/document/src/document/rst/nodes/transition.php', + 'ezcDocumentRstValidationTests' => $vendorDir . '/zetacomponents/document/tests/document_rst_validation_test.php', + 'ezcDocumentRstVisitor' => $vendorDir . '/zetacomponents/document/src/document/rst/visitor.php', + 'ezcDocumentRstWarningDirective' => $vendorDir . '/zetacomponents/document/src/document/rst/directive/warning.php', + 'ezcDocumentRstXhtmlBodyVisitor' => $vendorDir . '/zetacomponents/document/src/document/rst/visitor/xhtml_body.php', + 'ezcDocumentRstXhtmlBodyVisitorTests' => $vendorDir . '/zetacomponents/document/tests/document_rst_visitor_xhtml_body_test.php', + 'ezcDocumentRstXhtmlDirective' => $vendorDir . '/zetacomponents/document/src/interfaces/rst_xhtml_directive.php', + 'ezcDocumentRstXhtmlTextRole' => $vendorDir . '/zetacomponents/document/src/interfaces/rst_xhtml_role.php', + 'ezcDocumentRstXhtmlVisitor' => $vendorDir . '/zetacomponents/document/src/document/rst/visitor/xhtml.php', + 'ezcDocumentRstXhtmlVisitorTests' => $vendorDir . '/zetacomponents/document/tests/document_rst_visitor_xhtml_test.php', + 'ezcDocumentTestDummyDirective' => $vendorDir . '/zetacomponents/document/tests/helper/rst_dummy_directives.php', + 'ezcDocumentTestDummyPlugin' => $vendorDir . '/zetacomponents/document/tests/helper/wiki_dummy_directives.php', + 'ezcDocumentTestDummyRole' => $vendorDir . '/zetacomponents/document/tests/helper/rst_dummy_directives.php', + 'ezcDocumentTestDummyXhtmlDirective' => $vendorDir . '/zetacomponents/document/tests/helper/rst_dummy_directives.php', + 'ezcDocumentTestParagraphDirective' => $vendorDir . '/zetacomponents/document/tests/helper/rst_paragraph_directive.php', + 'ezcDocumentValidation' => $vendorDir . '/zetacomponents/document/src/interfaces/validation.php', + 'ezcDocumentValidationError' => $vendorDir . '/zetacomponents/document/src/validation_error.php', + 'ezcDocumentVisitException' => $vendorDir . '/zetacomponents/document/src/exceptions/visitor.php', + 'ezcDocumentWiki' => $vendorDir . '/zetacomponents/document/src/document/wiki.php', + 'ezcDocumentWikiBlockLevelNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/block.php', + 'ezcDocumentWikiBlockMarkupToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/block_markup.php', + 'ezcDocumentWikiBlockquoteNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/blockquote.php', + 'ezcDocumentWikiBoldNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/bold.php', + 'ezcDocumentWikiBoldToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/bold.php', + 'ezcDocumentWikiBulletListItemNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/bullet_list_item.php', + 'ezcDocumentWikiBulletListItemToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/bullet_list.php', + 'ezcDocumentWikiBulletListNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/bullet_list.php', + 'ezcDocumentWikiCodePlugin' => $vendorDir . '/zetacomponents/document/src/document/wiki/plugin/code.php', + 'ezcDocumentWikiConfluenceLinkStartToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/confluence_link_start.php', + 'ezcDocumentWikiConfluenceTokenizer' => $vendorDir . '/zetacomponents/document/src/document/wiki/tokenizer/confluence.php', + 'ezcDocumentWikiConfluenceTokenizerTests' => $vendorDir . '/zetacomponents/document/tests/document_wiki_confluence_tokenizer_test.php', + 'ezcDocumentWikiCreoleTokenizer' => $vendorDir . '/zetacomponents/document/src/document/wiki/tokenizer/creole.php', + 'ezcDocumentWikiCreoleTokenizerTests' => $vendorDir . '/zetacomponents/document/tests/document_wiki_creole_tokenizer_test.php', + 'ezcDocumentWikiDefinitionListItemToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/definition_list.php', + 'ezcDocumentWikiDeletedNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/deleted.php', + 'ezcDocumentWikiDeletedToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/deleted.php', + 'ezcDocumentWikiDocbookVisitor' => $vendorDir . '/zetacomponents/document/src/document/wiki/visitor/docbook.php', + 'ezcDocumentWikiDocbookVisitorTests' => $vendorDir . '/zetacomponents/document/tests/document_wiki_visitor_docbook_test.php', + 'ezcDocumentWikiDocumentNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/document.php', + 'ezcDocumentWikiDokuwikiTokenizer' => $vendorDir . '/zetacomponents/document/src/document/wiki/tokenizer/dokuwiki.php', + 'ezcDocumentWikiDokuwikiTokenizerTests' => $vendorDir . '/zetacomponents/document/tests/document_wiki_dokuwiki_tokenizer_test.php', + 'ezcDocumentWikiEndOfFileToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/end_of_file.php', + 'ezcDocumentWikiEnumeratedListItemNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/enumerated_list_item.php', + 'ezcDocumentWikiEnumeratedListItemToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/enumerated_list.php', + 'ezcDocumentWikiEnumeratedListNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/enumerated_list.php', + 'ezcDocumentWikiEscapeCharacterToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/escape_character.php', + 'ezcDocumentWikiExternalLinkNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/external_link.php', + 'ezcDocumentWikiExternalLinkToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/external_link.php', + 'ezcDocumentWikiFootnoteEndNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/footnote_end.php', + 'ezcDocumentWikiFootnoteEndToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/footnote_end.php', + 'ezcDocumentWikiFootnoteNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/footnote.php', + 'ezcDocumentWikiFootnoteStartToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/footnote_start.php', + 'ezcDocumentWikiImageEndNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/image_end.php', + 'ezcDocumentWikiImageEndToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/image_end.php', + 'ezcDocumentWikiImageNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/image.php', + 'ezcDocumentWikiImageStartToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/image_start.php', + 'ezcDocumentWikiInlineLiteralNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/inline_literal.php', + 'ezcDocumentWikiInlineLiteralToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/inline_literal.php', + 'ezcDocumentWikiInlineMarkupToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/inline_markup.php', + 'ezcDocumentWikiInlineNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/inline.php', + 'ezcDocumentWikiInlineQuoteNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/inline_quote.php', + 'ezcDocumentWikiInlineQuoteToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/inline_quote.php', + 'ezcDocumentWikiInterWikiLinkNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/inter_wiki_link.php', + 'ezcDocumentWikiInterWikiLinkToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/inter_wiki_link.php', + 'ezcDocumentWikiInternalLinkNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/internal_link.php', + 'ezcDocumentWikiInternalLinkToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/internal_link.php', + 'ezcDocumentWikiInvisibleBreakNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/invisible_break.php', + 'ezcDocumentWikiItalicNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/italic.php', + 'ezcDocumentWikiItalicToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/italic.php', + 'ezcDocumentWikiLineBreakNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/line_break.php', + 'ezcDocumentWikiLineBreakToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/line_break.php', + 'ezcDocumentWikiLineLevelNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/line.php', + 'ezcDocumentWikiLineMarkupToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/line_markup.php', + 'ezcDocumentWikiLinkEndNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/link_end.php', + 'ezcDocumentWikiLinkEndToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/link_end.php', + 'ezcDocumentWikiLinkNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/link.php', + 'ezcDocumentWikiLinkStartToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/link_start.php', + 'ezcDocumentWikiListNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/list.php', + 'ezcDocumentWikiLiteralBlockNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/literal_block.php', + 'ezcDocumentWikiLiteralBlockToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/literal_block.php', + 'ezcDocumentWikiLiteralLineToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/literal_line.php', + 'ezcDocumentWikiMatchingInlineNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/matching_inline.php', + 'ezcDocumentWikiMediawikiEmphasisToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/mediawiki_emphasis.php', + 'ezcDocumentWikiMediawikiTokenizer' => $vendorDir . '/zetacomponents/document/src/document/wiki/tokenizer/mediawiki.php', + 'ezcDocumentWikiMediawikiTokenizerTests' => $vendorDir . '/zetacomponents/document/tests/document_wiki_mediawiki_tokenizer_test.php', + 'ezcDocumentWikiMissingPluginHandlerException' => $vendorDir . '/zetacomponents/document/src/exceptions/missing_plugin_handler.php', + 'ezcDocumentWikiMonospaceNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/monospace.php', + 'ezcDocumentWikiMonospaceToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/monospace.php', + 'ezcDocumentWikiNewLineToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/new_line.php', + 'ezcDocumentWikiNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/node.php', + 'ezcDocumentWikiOptions' => $vendorDir . '/zetacomponents/document/src/options/document_wiki.php', + 'ezcDocumentWikiOptionsTests' => $vendorDir . '/zetacomponents/document/tests/document_wiki_options_tests.php', + 'ezcDocumentWikiPageBreakNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/page_break.php', + 'ezcDocumentWikiPageBreakToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/page_break.php', + 'ezcDocumentWikiParagraphIndentationToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/indentation.php', + 'ezcDocumentWikiParagraphNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/paragraph.php', + 'ezcDocumentWikiParser' => $vendorDir . '/zetacomponents/document/src/document/wiki/parser.php', + 'ezcDocumentWikiParserTests' => $vendorDir . '/zetacomponents/document/tests/document_wiki_parser_test.php', + 'ezcDocumentWikiPlugin' => $vendorDir . '/zetacomponents/document/src/document/wiki/plugin.php', + 'ezcDocumentWikiPluginNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/plugin.php', + 'ezcDocumentWikiPluginToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/plugin.php', + 'ezcDocumentWikiQuoteToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/quote.php', + 'ezcDocumentWikiSectionNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/section.php', + 'ezcDocumentWikiSeparatorNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/separator.php', + 'ezcDocumentWikiSeparatorToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/separator.php', + 'ezcDocumentWikiSpecialCharsToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/special_chars.php', + 'ezcDocumentWikiStrikeToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/strike.php', + 'ezcDocumentWikiSubscriptNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/subscript.php', + 'ezcDocumentWikiSubscriptToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/subscript.php', + 'ezcDocumentWikiSuperscriptNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/superscript.php', + 'ezcDocumentWikiSuperscriptToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/superscript.php', + 'ezcDocumentWikiTableCellNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/table_cell.php', + 'ezcDocumentWikiTableHeaderSeparatorNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/table_header_separator.php', + 'ezcDocumentWikiTableHeaderToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/table_header.php', + 'ezcDocumentWikiTableNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/table.php', + 'ezcDocumentWikiTableRowNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/table_row.php', + 'ezcDocumentWikiTableRowToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/table_row.php', + 'ezcDocumentWikiTests' => $vendorDir . '/zetacomponents/document/tests/document_wiki_test.php', + 'ezcDocumentWikiTextLineToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/text_line.php', + 'ezcDocumentWikiTextNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/text.php', + 'ezcDocumentWikiTitleNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/title.php', + 'ezcDocumentWikiTitleToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/title.php', + 'ezcDocumentWikiToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token.php', + 'ezcDocumentWikiTokenizer' => $vendorDir . '/zetacomponents/document/src/document/wiki/tokenizer.php', + 'ezcDocumentWikiTokenizerException' => $vendorDir . '/zetacomponents/document/src/exceptions/wiki_tokenizer.php', + 'ezcDocumentWikiUnderlineNode' => $vendorDir . '/zetacomponents/document/src/document/wiki/nodes/underline.php', + 'ezcDocumentWikiUnderlineToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/underline.php', + 'ezcDocumentWikiVisitor' => $vendorDir . '/zetacomponents/document/src/document/wiki/visitor.php', + 'ezcDocumentWikiWhitespaceToken' => $vendorDir . '/zetacomponents/document/src/document/wiki/token/whitespace.php', + 'ezcDocumentXhtml' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml.php', + 'ezcDocumentXhtmlBaseFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/base.php', + 'ezcDocumentXhtmlBlockquoteElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/blockquote.php', + 'ezcDocumentXhtmlContentLocatorFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/content_locator.php', + 'ezcDocumentXhtmlConversion' => $vendorDir . '/zetacomponents/document/src/interfaces/conversions/xhtml.php', + 'ezcDocumentXhtmlDefinitionListElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/definitionlist.php', + 'ezcDocumentXhtmlDocbookTests' => $vendorDir . '/zetacomponents/document/tests/document_xhtml_docbook_test.php', + 'ezcDocumentXhtmlElementBaseFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/base.php', + 'ezcDocumentXhtmlElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element.php', + 'ezcDocumentXhtmlElementMappingFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/mapping.php', + 'ezcDocumentXhtmlEnumeratedElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/enumerated.php', + 'ezcDocumentXhtmlFootnoteElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/footnote.php', + 'ezcDocumentXhtmlHeaderElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/header.php', + 'ezcDocumentXhtmlImageElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/image.php', + 'ezcDocumentXhtmlLineBlockElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/lineblock.php', + 'ezcDocumentXhtmlLinkElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/link.php', + 'ezcDocumentXhtmlLiteralElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/literal.php', + 'ezcDocumentXhtmlMetadataFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/metadata.php', + 'ezcDocumentXhtmlOptions' => $vendorDir . '/zetacomponents/document/src/options/document_xhtml.php', + 'ezcDocumentXhtmlOptionsTests' => $vendorDir . '/zetacomponents/document/tests/document_xhtml_options_tests.php', + 'ezcDocumentXhtmlParagraphElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/paragraph.php', + 'ezcDocumentXhtmlSpecialParagraphElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/special_paragraph.php', + 'ezcDocumentXhtmlStrongElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/strong.php', + 'ezcDocumentXhtmlTableCellElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/tablecell.php', + 'ezcDocumentXhtmlTableElementFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/table.php', + 'ezcDocumentXhtmlTablesFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/tables.php', + 'ezcDocumentXhtmlTextToParagraphFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/element/text.php', + 'ezcDocumentXhtmlValidationTests' => $vendorDir . '/zetacomponents/document/tests/document_xhtml_validation_test.php', + 'ezcDocumentXhtmlXpathFilter' => $vendorDir . '/zetacomponents/document/src/document/xml/xhtml/filter/xpath.php', + 'ezcDocumentXmlBase' => $vendorDir . '/zetacomponents/document/src/document/xml_base.php', + 'ezcDocumentXmlBaseTests' => $vendorDir . '/zetacomponents/document/tests/document_xml_base_test.php', + 'ezcDocumentXmlOptions' => $vendorDir . '/zetacomponents/document/src/options/document_xml.php', + 'ezcDocumentXsltConverter' => $vendorDir . '/zetacomponents/document/src/converters/xslt.php', + 'ezcDocumentXsltConverterOptions' => $vendorDir . '/zetacomponents/document/src/options/converter_xslt.php', + 'ezcTestDocumentPdfHyphenator' => $vendorDir . '/zetacomponents/document/tests/helper/pdf_test_hyphenator.php', + 'ezcTestDocumentPdfMockDriver' => $vendorDir . '/zetacomponents/document/tests/helper/pdf_mocked_driver.php', + 'foo' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class.php', + 'foo\\Foo' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/classUsesNamespacedFunction.php', + 'i' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/source5.php', + 'iTemplate' => $vendorDir . '/phpunit/php-token-stream/tests/_fixture/source4.php', + 'myAddressDirective' => $vendorDir . '/zetacomponents/document/docs/tutorial/00_01_address_directive.php', + 'myAddressElementHandler' => $vendorDir . '/zetacomponents/document/tests/helper/docbook_rst_address_element.php', + 'myLinkProvider' => $vendorDir . '/zetacomponents/document/docs/tutorial/02_01_link_provider.php', + 'myProgressFinder' => $vendorDir . '/zetacomponents/base/docs/tutorial_example_04.php', + 'phpDocumentor\\Application' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Application.php', + 'phpDocumentor\\Bootstrap' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Bootstrap.php', + 'phpDocumentor\\Command\\Command' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Command.php', + 'phpDocumentor\\Command\\Helper\\ConfigurationHelper' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Helper/ConfigurationHelper.php', + 'phpDocumentor\\Command\\Helper\\LoggerHelper' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Helper/LoggerHelper.php', + 'phpDocumentor\\Command\\Phar\\UpdateCommand' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Phar/UpdateCommand.php', + 'phpDocumentor\\Command\\Project\\RunCommand' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Project/RunCommand.php', + 'phpDocumentor\\Compiler\\Compiler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Compiler.php', + 'phpDocumentor\\Compiler\\CompilerPassInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/CompilerPassInterface.php', + 'phpDocumentor\\Compiler\\Linker\\Linker' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Linker/Linker.php', + 'phpDocumentor\\Compiler\\Pass\\Debug' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/Debug.php', + 'phpDocumentor\\Compiler\\Pass\\ElementsIndexBuilder' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/ElementsIndexBuilder.php', + 'phpDocumentor\\Compiler\\Pass\\ExampleTagsEnricher' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/ExampleTagsEnricher.php', + 'phpDocumentor\\Compiler\\Pass\\MarkerFromTagsExtractor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/MarkerFromTagsExtractor.php', + 'phpDocumentor\\Compiler\\Pass\\NamespaceTreeBuilder' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/NamespaceTreeBuilder.php', + 'phpDocumentor\\Compiler\\Pass\\PackageTreeBuilder' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/PackageTreeBuilder.php', + 'phpDocumentor\\Compiler\\Pass\\ResolveInlineLinkAndSeeTags' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/ResolveInlineLinkAndSeeTags.php', + 'phpDocumentor\\Configuration' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration.php', + 'phpDocumentor\\Configuration\\Loader' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/Loader.php', + 'phpDocumentor\\Configuration\\Logging' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/Logging.php', + 'phpDocumentor\\Configuration\\Merger' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/Merger.php', + 'phpDocumentor\\Configuration\\Merger\\Annotation\\Replace' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/Merger/Annotation/Replace.php', + 'phpDocumentor\\Configuration\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/ServiceProvider.php', + 'phpDocumentor\\Console\\Input\\ArgvInput' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Console/Input/ArgvInput.php', + 'phpDocumentor\\Console\\Output\\Output' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Console/Output/Output.php', + 'phpDocumentor\\Descriptor\\ArgumentDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ArgumentDescriptor.php', + 'phpDocumentor\\Descriptor\\Builder\\AssemblerAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/AssemblerAbstract.php', + 'phpDocumentor\\Descriptor\\Builder\\AssemblerFactory' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/AssemblerFactory.php', + 'phpDocumentor\\Descriptor\\Builder\\AssemblerInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/AssemblerInterface.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\ArgumentAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/ArgumentAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\AssemblerAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/AssemblerAbstract.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\ClassAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/ClassAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\ConstantAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/ConstantAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\FileAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/FileAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\FunctionAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/FunctionAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\InterfaceAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/InterfaceAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\MethodAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/MethodAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\PropertyAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/PropertyAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\AuthorAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/AuthorAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\DeprecatedAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/DeprecatedAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\ExampleAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/ExampleAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\GenericTagAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/GenericTagAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\LinkAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/LinkAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\MethodAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/MethodAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\ParamAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/ParamAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\PropertyAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/PropertyAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\ReturnAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/ReturnAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\SeeAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/SeeAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\SinceAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/SinceAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\ThrowsAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/ThrowsAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\TypeCollectionAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/TypeCollectionAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\UsesAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/UsesAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\VarAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/VarAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\VersionAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/VersionAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\TraitAssembler' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/TraitAssembler.php', + 'phpDocumentor\\Descriptor\\Cache\\ProjectDescriptorMapper' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Cache/ProjectDescriptorMapper.php', + 'phpDocumentor\\Descriptor\\ClassDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ClassDescriptor.php', + 'phpDocumentor\\Descriptor\\Collection' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Collection.php', + 'phpDocumentor\\Descriptor\\ConstantDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ConstantDescriptor.php', + 'phpDocumentor\\Descriptor\\DescriptorAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/DescriptorAbstract.php', + 'phpDocumentor\\Descriptor\\Example\\Finder' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Example/Finder.php', + 'phpDocumentor\\Descriptor\\Exception\\MissingDependencyException' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Exception/MissingDependencyException.php', + 'phpDocumentor\\Descriptor\\FileDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/FileDescriptor.php', + 'phpDocumentor\\Descriptor\\Filter\\ClassFactory' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/ClassFactory.php', + 'phpDocumentor\\Descriptor\\Filter\\Filter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/Filter.php', + 'phpDocumentor\\Descriptor\\Filter\\Filterable' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/Filterable.php', + 'phpDocumentor\\Descriptor\\Filter\\StripIgnore' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/StripIgnore.php', + 'phpDocumentor\\Descriptor\\Filter\\StripInternal' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/StripInternal.php', + 'phpDocumentor\\Descriptor\\Filter\\StripOnVisibility' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/StripOnVisibility.php', + 'phpDocumentor\\Descriptor\\FunctionDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/FunctionDescriptor.php', + 'phpDocumentor\\Descriptor\\InterfaceDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/InterfaceDescriptor.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ArgumentInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ArgumentInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ChildInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ChildInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ClassInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ClassInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ConstantInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ConstantInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ContainerInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ContainerInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ElementInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ElementInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\FileInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/FileInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\FunctionInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/FunctionInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\InterfaceInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/InterfaceInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\MethodInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/MethodInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\NamespaceInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/NamespaceInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\PackageInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/PackageInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ProjectInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ProjectInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\PropertyInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/PropertyInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\TraitInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/TraitInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\TypeInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/TypeInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\VisibilityInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/VisibilityInterface.php', + 'phpDocumentor\\Descriptor\\MethodDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/MethodDescriptor.php', + 'phpDocumentor\\Descriptor\\NamespaceDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/NamespaceDescriptor.php', + 'phpDocumentor\\Descriptor\\PackageDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/PackageDescriptor.php', + 'phpDocumentor\\Descriptor\\ProjectAnalyzer' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ProjectAnalyzer.php', + 'phpDocumentor\\Descriptor\\ProjectDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ProjectDescriptor.php', + 'phpDocumentor\\Descriptor\\ProjectDescriptorBuilder' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ProjectDescriptorBuilder.php', + 'phpDocumentor\\Descriptor\\ProjectDescriptor\\Settings' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ProjectDescriptor/Settings.php', + 'phpDocumentor\\Descriptor\\PropertyDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/PropertyDescriptor.php', + 'phpDocumentor\\Descriptor\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ServiceProvider.php', + 'phpDocumentor\\Descriptor\\TagDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/TagDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\AuthorDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/AuthorDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\BaseTypes\\TypedAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/BaseTypes/TypedAbstract.php', + 'phpDocumentor\\Descriptor\\Tag\\BaseTypes\\TypedVariableAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/BaseTypes/TypedVariableAbstract.php', + 'phpDocumentor\\Descriptor\\Tag\\DeprecatedDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/DeprecatedDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\ExampleDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/ExampleDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\LinkDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/LinkDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\MethodDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/MethodDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\ParamDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/ParamDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\PropertyDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/PropertyDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\ReturnDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/ReturnDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\SeeDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/SeeDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\SinceDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/SinceDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\ThrowsDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/ThrowsDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\UsesDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/UsesDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\VarDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/VarDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\VersionDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/VersionDescriptor.php', + 'phpDocumentor\\Descriptor\\TraitDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/TraitDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\BooleanDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/BooleanDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\CollectionDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/CollectionDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\FloatDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/FloatDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\IntegerDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/IntegerDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\StringDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/StringDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\UnknownTypeDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/UnknownTypeDescriptor.php', + 'phpDocumentor\\Descriptor\\Validator\\Error' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Validator/Error.php', + 'phpDocumentor\\Event\\DebugEvent' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Event/DebugEvent.php', + 'phpDocumentor\\Event\\Dispatcher' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Event/Dispatcher.php', + 'phpDocumentor\\Event\\EventAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Event/EventAbstract.php', + 'phpDocumentor\\Event\\LogEvent' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Event/LogEvent.php', + 'phpDocumentor\\Fileset\\Collection' => $vendorDir . '/phpdocumentor/fileset/src/phpDocumentor/Fileset/Collection.php', + 'phpDocumentor\\Fileset\\CollectionTest' => $vendorDir . '/phpdocumentor/fileset/tests/unit/phpDocumentor/Fileset/CollectionTest.php', + 'phpDocumentor\\Fileset\\Collection\\IgnorePatterns' => $vendorDir . '/phpdocumentor/fileset/src/phpDocumentor/Fileset/Collection/IgnorePatterns.php', + 'phpDocumentor\\Fileset\\Collection\\IgnorePatternsTest' => $vendorDir . '/phpdocumentor/fileset/tests/unit/phpDocumentor/Fileset/Collection/IgnorePatternsTest.php', + 'phpDocumentor\\Fileset\\File' => $vendorDir . '/phpdocumentor/fileset/src/phpDocumentor/Fileset/File.php', + 'phpDocumentor\\Fileset\\FileTest' => $vendorDir . '/phpdocumentor/fileset/tests/unit/phpDocumentor/Fileset/FileTest.php', + 'phpDocumentor\\GraphViz\\Attribute' => $vendorDir . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Attribute.php', + 'phpDocumentor\\GraphViz\\Edge' => $vendorDir . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Edge.php', + 'phpDocumentor\\GraphViz\\Exception' => $vendorDir . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Exception.php', + 'phpDocumentor\\GraphViz\\Graph' => $vendorDir . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Graph.php', + 'phpDocumentor\\GraphViz\\GraphTest' => $vendorDir . '/phpdocumentor/graphviz/tests/phpDocumentor/GraphViz/Test/GraphTest.php', + 'phpDocumentor\\GraphViz\\Node' => $vendorDir . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Node.php', + 'phpDocumentor\\GraphViz\\Test\\AttributeTest' => $vendorDir . '/phpdocumentor/graphviz/tests/phpDocumentor/GraphViz/Test/AttributeTest.php', + 'phpDocumentor\\GraphViz\\Test\\EdgeTest' => $vendorDir . '/phpdocumentor/graphviz/tests/phpDocumentor/GraphViz/Test/EdgeTest.php', + 'phpDocumentor\\GraphViz\\Test\\NodeTest' => $vendorDir . '/phpdocumentor/graphviz/tests/phpDocumentor/GraphViz/Test/NodeTest.php', + 'phpDocumentor\\Parser\\Command\\Project\\ParseCommand' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Command/Project/ParseCommand.php', + 'phpDocumentor\\Parser\\Configuration' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Configuration.php', + 'phpDocumentor\\Parser\\Configuration\\Files' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Configuration/Files.php', + 'phpDocumentor\\Parser\\Event\\PreFileEvent' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Event/PreFileEvent.php', + 'phpDocumentor\\Parser\\Exception' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Exception.php', + 'phpDocumentor\\Parser\\Exception\\FilesNotFoundException' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Exception/FilesNotFoundException.php', + 'phpDocumentor\\Parser\\Exception\\MissingDependencyException' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Exception/MissingDependencyException.php', + 'phpDocumentor\\Parser\\File' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/File.php', + 'phpDocumentor\\Parser\\Parser' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Parser.php', + 'phpDocumentor\\Parser\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/ServiceProvider.php', + 'phpDocumentor\\Parser\\Util\\ParserPopulator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Util/ParserPopulator.php', + 'phpDocumentor\\Partials\\Collection' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Partials/Collection.php', + 'phpDocumentor\\Partials\\Exception\\MissingNameForPartialException' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Partials/Exception/MissingNameForPartialException.php', + 'phpDocumentor\\Partials\\Partial' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Partials/Partial.php', + 'phpDocumentor\\Partials\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Partials/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasPackageWithSubpackage' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasPackageWithSubpackage.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasPackageWithSubpackageValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasPackageWithSubpackageValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasSinglePackage' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasSinglePackage.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasSinglePackageValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasSinglePackageValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasSingleSubpackage' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasSingleSubpackage.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasSingleSubpackageValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasSingleSubpackageValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\AreAllArgumentsValid' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/AreAllArgumentsValid.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\AreAllArgumentsValidValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/AreAllArgumentsValidValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesArgumentNameMatchParam' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesArgumentNameMatchParam.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesArgumentNameMatchParamValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesArgumentNameMatchParamValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesArgumentTypehintMatchParam' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesArgumentTypehintMatchParam.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesArgumentTypehintMatchParamValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesArgumentTypehintMatchParamValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesParamsExists' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesParamsExists.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesParamsExistsValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesParamsExistsValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsArgumentInDocBlock' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsArgumentInDocBlock.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsArgumentInDocBlockValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsArgumentInDocBlockValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsParamTypeNotAnIdeDefault' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsParamTypeNotAnIdeDefault.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsParamTypeNotAnIdeDefaultValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsParamTypeNotAnIdeDefaultValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsReturnTypeNotAnIdeDefault' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsReturnTypeNotAnIdeDefault.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsReturnTypeNotAnIdeDefaultValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsReturnTypeNotAnIdeDefaultValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Property\\HasSummary' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Property/HasSummary.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Property\\HasSummaryValidator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Property/HasSummaryValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Functions\\AreAllArgumentsValid' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Functions/AreAllArgumentsValid.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\ValidationValueObject' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/ValidationValueObject.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\ValidatorAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/ValidatorAbstract.php', + 'phpDocumentor\\Plugin\\Core\\Exception' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Exception.php', + 'phpDocumentor\\Plugin\\Core\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\AuthorTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/AuthorTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\CoversTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/CoversTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\IgnoreTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/IgnoreTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\InternalTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/InternalTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\LicenseTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/LicenseTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\MethodTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/MethodTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\ParamTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/ParamTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\PropertyTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/PropertyTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\ReturnTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/ReturnTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\UsesTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/UsesTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\VarTag' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/VarTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Checkstyle' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Checkstyle.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\FileIo' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/FileIo.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Pathfinder' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Pathfinder.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Sourcecode' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Sourcecode.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Statistics' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Statistics.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\ArgumentConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/ArgumentConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\ConstantConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/ConstantConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\DocBlockConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/DocBlockConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\InterfaceConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/InterfaceConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\MethodConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/MethodConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\PropertyConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/PropertyConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\TagConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/TagConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\TraitConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/TraitConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xsl' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xsl.php', + 'phpDocumentor\\Plugin\\Core\\Xslt\\Extension' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Xslt/Extension.php', + 'phpDocumentor\\Plugin\\Graphs\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Graphs/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Graphs\\Writer\\Graph' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Graphs/Writer/Graph.php', + 'phpDocumentor\\Plugin\\LegacyNamespaceConverter\\LegacyNamespaceFilter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/LegacyNamespaceConverter/LegacyNamespaceFilter.php', + 'phpDocumentor\\Plugin\\LegacyNamespaceConverter\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/LegacyNamespaceConverter/ServiceProvider.php', + 'phpDocumentor\\Plugin\\LegacyNamespaceConverter\\Tests\\LegacyNamespaceFilterTest' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/LegacyNamespaceConverter/Tests/LegacyNamespaceFilterTest.php', + 'phpDocumentor\\Plugin\\Parameter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Parameter.php', + 'phpDocumentor\\Plugin\\Plugin' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Plugin.php', + 'phpDocumentor\\Plugin\\Scrybe\\ApplicationTest' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/ApplicationTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Command\\Manual\\BaseConvertCommand' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Command/Manual/BaseConvertCommand.php', + 'phpDocumentor\\Plugin\\Scrybe\\Command\\Manual\\ToHtmlCommand' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Command/Manual/ToHtmlCommand.php', + 'phpDocumentor\\Plugin\\Scrybe\\Command\\Manual\\ToLatexCommand' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Command/Manual/ToLatexCommand.php', + 'phpDocumentor\\Plugin\\Scrybe\\Command\\Manual\\ToPdfCommand' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Command/Manual/ToPdfCommand.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\BaseConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/BaseConverter.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\ConverterInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/ConverterInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Definition\\Definition' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Definition/Definition.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Definition\\Factory' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Definition/Factory.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Exception\\ConverterNotFoundException' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Exception/ConverterNotFoundException.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Factory' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Factory.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Format\\Collection' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Format/Collection.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Format\\Exception\\FormatNotFoundException' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Format/Exception/FormatNotFoundException.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Format\\Format' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Format/Format.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\Assets' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/Assets.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\Glossary' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/Glossary.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContentsTest' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/Metadata/TableOfContentsTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\BaseEntry' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents/BaseEntry.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\BaseEntryTest' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/Metadata/TableOfContents/BaseEntryTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\File' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents/File.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\FileTest' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/Metadata/TableOfContents/FileTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\Heading' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents/Heading.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\Module' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents/Module.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\ModuleTest' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/Metadata/TableOfContents/ModuleTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Directives\\CodeBlock' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Directives/CodeBlock.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Directives\\Figure' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Directives/Figure.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Directives\\Image' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Directives/Image.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Directives\\Toctree' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Directives/Toctree.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Document' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Document.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Roles\\Doc' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Roles/Doc.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\ToHtml' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/ToHtml.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Visitors\\Creator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Visitors/Creator.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Visitors\\Discover' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Visitors/Discover.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Visitors\\DiscoverTest' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/RestructuredText/Visitors/DiscoverTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\ToHtmlInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/ToHtmlInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\ToLatexInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/ToLatexInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\ToPdfInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/ToPdfInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\Factory' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Template/Factory.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\FactoryTest' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Template/FactoryTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\Mock\\Template' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Template/Mock/Template.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\TemplateInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Template/TemplateInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\Twig' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Template/Twig.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\TwigTest' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Template/TwigTest.php', + 'phpDocumentor\\Plugin\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Twig\\Extension' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Twig/Extension.php', + 'phpDocumentor\\Plugin\\Twig\\ExtensionInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Twig/ExtensionInterface.php', + 'phpDocumentor\\Plugin\\Twig\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Twig/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Twig\\Writer\\Twig' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Twig/Writer/Twig.php', + 'phpDocumentor\\Reflection\\BaseReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/BaseReflector.php', + 'phpDocumentor\\Reflection\\BaseReflectorMock' => $vendorDir . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/BaseReflectorMock.php', + 'phpDocumentor\\Reflection\\BaseReflectorTest' => $vendorDir . '/phpdocumentor/reflection/tests/unit/phpDocumentor/Reflection/BaseReflectorTest.php', + 'phpDocumentor\\Reflection\\ClassReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ClassReflector.php', + 'phpDocumentor\\Reflection\\ClassReflectorMock' => $vendorDir . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/ClassReflectorMock.php', + 'phpDocumentor\\Reflection\\ClassReflectorTest' => $vendorDir . '/phpdocumentor/reflection/tests/unit/phpDocumentor/Reflection/ClassReflectorTest.php', + 'phpDocumentor\\Reflection\\ClassReflector\\ConstantReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ClassReflector/ConstantReflector.php', + 'phpDocumentor\\Reflection\\ClassReflector\\MethodReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ClassReflector/MethodReflector.php', + 'phpDocumentor\\Reflection\\ClassReflector\\PropertyReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ClassReflector/PropertyReflector.php', + 'phpDocumentor\\Reflection\\ConstantReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ConstantReflector.php', + 'phpDocumentor\\Reflection\\DocBlock' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php', + 'phpDocumentor\\Reflection\\DocBlockTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Context' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php', + 'phpDocumentor\\Reflection\\DocBlock\\Description' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php', + 'phpDocumentor\\Reflection\\DocBlock\\DescriptionTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Location' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php', + 'phpDocumentor\\Reflection\\DocBlock\\Serializer' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Serializer.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php', + 'phpDocumentor\\Reflection\\DocBlock\\TagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\AuthorTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\CoversTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\CoversTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\DeprecatedTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\DeprecatedTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ExampleTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ExampleTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\LinkTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\LinkTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\MethodTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\MethodTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ParamTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ParamTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\PropertyReadTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\PropertyTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\PropertyWriteTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ReturnTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ReturnTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SeeTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SeeTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SinceTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SinceTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SourceTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SourceTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ThrowsTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ThrowsTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\UsesTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\UsesTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\VarTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\VarTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\VersionTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\VersionTagTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Type\\Collection' => $vendorDir . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php', + 'phpDocumentor\\Reflection\\DocBlock\\Type\\CollectionTest' => $vendorDir . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php', + 'phpDocumentor\\Reflection\\Event\\ExportDocBlockTagEvent' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Event/ExportDocBlockTagEvent.php', + 'phpDocumentor\\Reflection\\Event\\PostDocBlockExtractionEvent' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Event/PostDocBlockExtractionEvent.php', + 'phpDocumentor\\Reflection\\Exception' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Exception.php', + 'phpDocumentor\\Reflection\\Exception\\UnparsableFile' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Exception/UnparsableFile.php', + 'phpDocumentor\\Reflection\\Exception\\UnreadableFile' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Exception/UnreadableFile.php', + 'phpDocumentor\\Reflection\\FileReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/FileReflector.php', + 'phpDocumentor\\Reflection\\FunctionReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/FunctionReflector.php', + 'phpDocumentor\\Reflection\\FunctionReflector\\ArgumentReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/FunctionReflector/ArgumentReflector.php', + 'phpDocumentor\\Reflection\\IncludeReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/IncludeReflector.php', + 'phpDocumentor\\Reflection\\InterfaceReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/InterfaceReflector.php', + 'phpDocumentor\\Reflection\\Lexer' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Lexer.php', + 'phpDocumentor\\Reflection\\NodeExprMock' => $vendorDir . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/NodeExprMock.php', + 'phpDocumentor\\Reflection\\NodeStmtMock' => $vendorDir . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/NodeStmtMock.php', + 'phpDocumentor\\Reflection\\NodeStmtMock2' => $vendorDir . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/NodeStmtMock2.php', + 'phpDocumentor\\Reflection\\PrettyPrinter' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/PrettyPrinter.php', + 'phpDocumentor\\Reflection\\PrettyPrinterTest' => $vendorDir . '/phpdocumentor/reflection/tests/unit/phpDocumentor/Reflection/PrettyPrinterTest.php', + 'phpDocumentor\\Reflection\\ReflectionAbstract' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ReflectionAbstract.php', + 'phpDocumentor\\Reflection\\TraitReflector' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/TraitReflector.php', + 'phpDocumentor\\Reflection\\Traverser' => $vendorDir . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Traverser.php', + 'phpDocumentor\\Transformer\\Behaviour\\BehaviourAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Behaviour/BehaviourAbstract.php', + 'phpDocumentor\\Transformer\\Behaviour\\Collection' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Behaviour/Collection.php', + 'phpDocumentor\\Transformer\\Command\\Project\\TransformCommand' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Command/Project/TransformCommand.php', + 'phpDocumentor\\Transformer\\Command\\Template\\ListCommand' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Command/Template/ListCommand.php', + 'phpDocumentor\\Transformer\\Configuration' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Configuration.php', + 'phpDocumentor\\Transformer\\Configuration\\ExternalClassDocumentation' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Configuration/ExternalClassDocumentation.php', + 'phpDocumentor\\Transformer\\Configuration\\Transformations' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Configuration/Transformations.php', + 'phpDocumentor\\Transformer\\Configuration\\Transformations\\Template' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Configuration/Transformations/Template.php', + 'phpDocumentor\\Transformer\\Event\\PostTransformEvent' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PostTransformEvent.php', + 'phpDocumentor\\Transformer\\Event\\PostTransformationEvent' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PostTransformationEvent.php', + 'phpDocumentor\\Transformer\\Event\\PreTransformEvent' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PreTransformEvent.php', + 'phpDocumentor\\Transformer\\Event\\PreTransformationEvent' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PreTransformationEvent.php', + 'phpDocumentor\\Transformer\\Event\\PreXslWriterEvent' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PreXslWriterEvent.php', + 'phpDocumentor\\Transformer\\Event\\WriterInitializationEvent' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/WriterInitializationEvent.php', + 'phpDocumentor\\Transformer\\Exception' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Exception.php', + 'phpDocumentor\\Transformer\\Exception\\MissingDependencyException' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Exception/MissingDependencyException.php', + 'phpDocumentor\\Transformer\\Exception\\UnknownWriter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Exception/UnknownWriter.php', + 'phpDocumentor\\Transformer\\Router\\ExternalRouter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/ExternalRouter.php', + 'phpDocumentor\\Transformer\\Router\\ForFileProxy' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/ForFileProxy.php', + 'phpDocumentor\\Transformer\\Router\\Matcher\\MatcherInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/Matcher/MatcherInterface.php', + 'phpDocumentor\\Transformer\\Router\\Queue' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/Queue.php', + 'phpDocumentor\\Transformer\\Router\\Renderer' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/Renderer.php', + 'phpDocumentor\\Transformer\\Router\\RouterAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/RouterAbstract.php', + 'phpDocumentor\\Transformer\\Router\\Rule' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/Rule.php', + 'phpDocumentor\\Transformer\\Router\\StandardRouter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/StandardRouter.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\ClassDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/ClassDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\ConstantDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/ConstantDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\FileDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/FileDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\FunctionDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/FunctionDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\MethodDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/MethodDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\NamespaceDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/NamespaceDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\PackageDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/PackageDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\PropertyDescriptor' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/PropertyDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\QualifiedNameToUrlConverter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/QualifiedNameToUrlConverter.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\UrlGeneratorInterface' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/UrlGeneratorInterface.php', + 'phpDocumentor\\Transformer\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/ServiceProvider.php', + 'phpDocumentor\\Transformer\\Template' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template.php', + 'phpDocumentor\\Transformer\\Template\\Collection' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template/Collection.php', + 'phpDocumentor\\Transformer\\Template\\Factory' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template/Factory.php', + 'phpDocumentor\\Transformer\\Template\\Parameter' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template/Parameter.php', + 'phpDocumentor\\Transformer\\Template\\PathResolver' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template/PathResolver.php', + 'phpDocumentor\\Transformer\\Transformation' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Transformation.php', + 'phpDocumentor\\Transformer\\Transformer' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Transformer.php', + 'phpDocumentor\\Transformer\\Writer\\Collection' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Collection.php', + 'phpDocumentor\\Transformer\\Writer\\Exception\\RequirementMissing' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Exception/RequirementMissing.php', + 'phpDocumentor\\Transformer\\Writer\\Initializable' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Initializable.php', + 'phpDocumentor\\Transformer\\Writer\\Routable' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Routable.php', + 'phpDocumentor\\Transformer\\Writer\\Translatable' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Translatable.php', + 'phpDocumentor\\Transformer\\Writer\\WriterAbstract' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/WriterAbstract.php', + 'phpDocumentor\\Translator\\Configuration' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Translator/Configuration.php', + 'phpDocumentor\\Translator\\ServiceProvider' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Translator/ServiceProvider.php', + 'phpDocumentor\\Translator\\Translator' => $vendorDir . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Translator/Translator.php', + 'testBaseInitCallback' => $vendorDir . '/zetacomponents/base/tests/init/base_init_callback.php', + 'testBaseInitClass' => $vendorDir . '/zetacomponents/base/tests/init/base_init_class.php', + 'trBasetestClass' => $vendorDir . '/zetacomponents/base/tests/test_repository/TestClasses/base_test_class.php', + 'trBasetestClass2' => $vendorDir . '/zetacomponents/base/tests/test_repository/TestClasses/base_test_class_number_two.php', + 'trBasetestLongClass' => $vendorDir . '/zetacomponents/base/tests/test_repository/TestClasses/base_test_long_class.php', +); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php new file mode 100644 index 0000000..604f9d3 --- /dev/null +++ b/vendor/composer/autoload_files.php @@ -0,0 +1,14 @@ + $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + 'fe1bcd0336136e435eaf197895daf81a' => $vendorDir . '/nikic/php-parser/lib/bootstrap.php', + '742b7e606e92b28dd726e835467f413a' => $vendorDir . '/herrera-io/json/src/lib/json_version.php', + '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', + 'f0e9d233388e461ee3c460665eb265f0' => $vendorDir . '/herrera-io/phar-update/src/lib/constants.php', +); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..a9217fd --- /dev/null +++ b/vendor/composer/autoload_namespaces.php @@ -0,0 +1,27 @@ + array($vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/reflection/src', $vendorDir . '/phpdocumentor/reflection/tests/unit', $vendorDir . '/phpdocumentor/reflection/tests/mocks', $vendorDir . '/phpdocumentor/fileset/src', $vendorDir . '/phpdocumentor/fileset/tests/unit', $vendorDir . '/phpdocumentor/graphviz/src', $vendorDir . '/phpdocumentor/graphviz/tests/unit', $vendorDir . '/phpdocumentor/phpdocumentor/src', $vendorDir . '/phpdocumentor/phpdocumentor/tests/unit'), + 'Twig_' => array($vendorDir . '/twig/twig/lib'), + 'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'), + 'Pimple' => array($vendorDir . '/pimple/pimple/lib'), + 'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src'), + 'PhpCollection' => array($vendorDir . '/phpcollection/phpcollection/src'), + 'Parsedown' => array($vendorDir . '/erusev/parsedown'), + 'PHPMD\\' => array($vendorDir . '/phpmd/phpmd/src/main/php'), + 'Metadata\\' => array($vendorDir . '/jms/metadata/src'), + 'KevinGH\\Version' => array($vendorDir . '/kherge/version/src/lib'), + 'JMS\\Serializer' => array($vendorDir . '/jms/serializer/src'), + 'JMS\\' => array($vendorDir . '/jms/parser-lib/src'), + 'Herrera\\Phar\\Update' => array($vendorDir . '/herrera-io/phar-update/src/lib'), + 'Herrera\\Json' => array($vendorDir . '/herrera-io/json/src/lib'), + 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib'), + 'Cilex\\Provider\\Console' => array($vendorDir . '/cilex/console-service-provider/src'), + 'Cilex\\Provider' => array($vendorDir . '/phpdocumentor/phpdocumentor/src'), + 'Cilex' => array($vendorDir . '/cilex/cilex/src'), +); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php new file mode 100644 index 0000000..e334d6f --- /dev/null +++ b/vendor/composer/autoload_psr4.php @@ -0,0 +1,44 @@ + array($vendorDir . '/zendframework/zend-stdlib/src'), + 'Zend\\ServiceManager\\' => array($vendorDir . '/zendframework/zend-servicemanager/src'), + 'Zend\\Serializer\\' => array($vendorDir . '/zendframework/zend-serializer/src'), + 'Zend\\Json\\' => array($vendorDir . '/zendframework/zend-json/src'), + 'Zend\\I18n\\' => array($vendorDir . '/zendframework/zend-i18n/src'), + 'Zend\\Hydrator\\' => array($vendorDir . '/zendframework/zend-hydrator/src'), + 'Zend\\Filter\\' => array($vendorDir . '/zendframework/zend-filter/src'), + 'Zend\\EventManager\\' => array($vendorDir . '/zendframework/zend-eventmanager/src'), + 'Zend\\Config\\' => array($vendorDir . '/zendframework/zend-config/src'), + 'Zend\\Cache\\' => array($vendorDir . '/zendframework/zend-cache/src'), + 'Twig\\' => array($vendorDir . '/twig/twig/src'), + 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), + 'Symfony\\Component\\Validator\\' => array($vendorDir . '/symfony/validator'), + 'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'), + 'Symfony\\Component\\Stopwatch\\' => array($vendorDir . '/symfony/stopwatch'), + 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), + 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), + 'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'), + 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'), + 'Symfony\\Component\\DependencyInjection\\' => array($vendorDir . '/symfony/dependency-injection'), + 'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'), + 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), + 'Symfony\\Component\\Config\\' => array($vendorDir . '/symfony/config'), + 'Seld\\JsonLint\\' => array($vendorDir . '/seld/jsonlint/src/Seld/JsonLint'), + 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), + 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), + 'PDepend\\' => array($vendorDir . '/pdepend/pdepend/src/main/php/PDepend'), + 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), + 'JsonSchema\\' => array($vendorDir . '/justinrainbow/json-schema/src/JsonSchema'), + 'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'), + 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), + 'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations'), + 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), + '' => array($vendorDir . '/gamegos/php-code-sniffer/src'), +); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php new file mode 100644 index 0000000..ca2564a --- /dev/null +++ b/vendor/composer/autoload_real.php @@ -0,0 +1,70 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit0e1e438512d55b8565ec2867ac0ed110::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInit0e1e438512d55b8565ec2867ac0ed110::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire0e1e438512d55b8565ec2867ac0ed110($fileIdentifier, $file); + } + + return $loader; + } +} + +function composerRequire0e1e438512d55b8565ec2867ac0ed110($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + require $file; + + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 0000000..291f0fc --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,5125 @@ + __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + 'fe1bcd0336136e435eaf197895daf81a' => __DIR__ . '/..' . '/nikic/php-parser/lib/bootstrap.php', + '742b7e606e92b28dd726e835467f413a' => __DIR__ . '/..' . '/herrera-io/json/src/lib/json_version.php', + '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', + 'f0e9d233388e461ee3c460665eb265f0' => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib/constants.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'Z' => + array ( + 'Zend\\Stdlib\\' => 12, + 'Zend\\ServiceManager\\' => 20, + 'Zend\\Serializer\\' => 16, + 'Zend\\Json\\' => 10, + 'Zend\\I18n\\' => 10, + 'Zend\\Hydrator\\' => 14, + 'Zend\\Filter\\' => 12, + 'Zend\\EventManager\\' => 18, + 'Zend\\Config\\' => 12, + 'Zend\\Cache\\' => 11, + ), + 'T' => + array ( + 'Twig\\' => 5, + ), + 'S' => + array ( + 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Component\\Yaml\\' => 23, + 'Symfony\\Component\\Validator\\' => 28, + 'Symfony\\Component\\Translation\\' => 30, + 'Symfony\\Component\\Stopwatch\\' => 28, + 'Symfony\\Component\\Process\\' => 26, + 'Symfony\\Component\\Finder\\' => 25, + 'Symfony\\Component\\Filesystem\\' => 29, + 'Symfony\\Component\\EventDispatcher\\' => 34, + 'Symfony\\Component\\DependencyInjection\\' => 38, + 'Symfony\\Component\\Debug\\' => 24, + 'Symfony\\Component\\Console\\' => 26, + 'Symfony\\Component\\Config\\' => 25, + 'Seld\\JsonLint\\' => 14, + ), + 'P' => + array ( + 'Psr\\Log\\' => 8, + 'Psr\\Container\\' => 14, + 'PDepend\\' => 8, + ), + 'M' => + array ( + 'Monolog\\' => 8, + ), + 'J' => + array ( + 'JsonSchema\\' => 11, + ), + 'I' => + array ( + 'Interop\\Container\\' => 18, + ), + 'D' => + array ( + 'Doctrine\\Instantiator\\' => 22, + 'Doctrine\\Common\\Annotations\\' => 28, + 'DeepCopy\\' => 9, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Zend\\Stdlib\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-stdlib/src', + ), + 'Zend\\ServiceManager\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src', + ), + 'Zend\\Serializer\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-serializer/src', + ), + 'Zend\\Json\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-json/src', + ), + 'Zend\\I18n\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-i18n/src', + ), + 'Zend\\Hydrator\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-hydrator/src', + ), + 'Zend\\Filter\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-filter/src', + ), + 'Zend\\EventManager\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src', + ), + 'Zend\\Config\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-config/src', + ), + 'Zend\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/zendframework/zend-cache/src', + ), + 'Twig\\' => + array ( + 0 => __DIR__ . '/..' . '/twig/twig/src', + ), + 'Symfony\\Polyfill\\Mbstring\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', + ), + 'Symfony\\Component\\Yaml\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/yaml', + ), + 'Symfony\\Component\\Validator\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/validator', + ), + 'Symfony\\Component\\Translation\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/translation', + ), + 'Symfony\\Component\\Stopwatch\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/stopwatch', + ), + 'Symfony\\Component\\Process\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/process', + ), + 'Symfony\\Component\\Finder\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/finder', + ), + 'Symfony\\Component\\Filesystem\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/filesystem', + ), + 'Symfony\\Component\\EventDispatcher\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/event-dispatcher', + ), + 'Symfony\\Component\\DependencyInjection\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/dependency-injection', + ), + 'Symfony\\Component\\Debug\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/debug', + ), + 'Symfony\\Component\\Console\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/console', + ), + 'Symfony\\Component\\Config\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/config', + ), + 'Seld\\JsonLint\\' => + array ( + 0 => __DIR__ . '/..' . '/seld/jsonlint/src/Seld/JsonLint', + ), + 'Psr\\Log\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', + ), + 'Psr\\Container\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/container/src', + ), + 'PDepend\\' => + array ( + 0 => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend', + ), + 'Monolog\\' => + array ( + 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog', + ), + 'JsonSchema\\' => + array ( + 0 => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema', + ), + 'Interop\\Container\\' => + array ( + 0 => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container', + ), + 'Doctrine\\Instantiator\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator', + ), + 'Doctrine\\Common\\Annotations\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations', + ), + 'DeepCopy\\' => + array ( + 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy', + ), + ); + + public static $fallbackDirsPsr4 = array ( + 0 => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src', + ); + + public static $prefixesPsr0 = array ( + 'p' => + array ( + 'phpDocumentor' => + array ( + 0 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src', + 1 => __DIR__ . '/..' . '/phpdocumentor/reflection/src', + 2 => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/unit', + 3 => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/mocks', + 4 => __DIR__ . '/..' . '/phpdocumentor/fileset/src', + 5 => __DIR__ . '/..' . '/phpdocumentor/fileset/tests/unit', + 6 => __DIR__ . '/..' . '/phpdocumentor/graphviz/src', + 7 => __DIR__ . '/..' . '/phpdocumentor/graphviz/tests/unit', + 8 => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src', + 9 => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/tests/unit', + ), + ), + 'T' => + array ( + 'Twig_' => + array ( + 0 => __DIR__ . '/..' . '/twig/twig/lib', + ), + ), + 'P' => + array ( + 'Prophecy\\' => + array ( + 0 => __DIR__ . '/..' . '/phpspec/prophecy/src', + ), + 'Pimple' => + array ( + 0 => __DIR__ . '/..' . '/pimple/pimple/lib', + ), + 'PhpOption\\' => + array ( + 0 => __DIR__ . '/..' . '/phpoption/phpoption/src', + ), + 'PhpCollection' => + array ( + 0 => __DIR__ . '/..' . '/phpcollection/phpcollection/src', + ), + 'Parsedown' => + array ( + 0 => __DIR__ . '/..' . '/erusev/parsedown', + ), + 'PHPMD\\' => + array ( + 0 => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php', + ), + ), + 'M' => + array ( + 'Metadata\\' => + array ( + 0 => __DIR__ . '/..' . '/jms/metadata/src', + ), + ), + 'K' => + array ( + 'KevinGH\\Version' => + array ( + 0 => __DIR__ . '/..' . '/kherge/version/src/lib', + ), + ), + 'J' => + array ( + 'JMS\\Serializer' => + array ( + 0 => __DIR__ . '/..' . '/jms/serializer/src', + ), + 'JMS\\' => + array ( + 0 => __DIR__ . '/..' . '/jms/parser-lib/src', + ), + ), + 'H' => + array ( + 'Herrera\\Phar\\Update' => + array ( + 0 => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib', + ), + 'Herrera\\Json' => + array ( + 0 => __DIR__ . '/..' . '/herrera-io/json/src/lib', + ), + ), + 'D' => + array ( + 'Doctrine\\Common\\Lexer\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/lexer/lib', + ), + ), + 'C' => + array ( + 'Cilex\\Provider\\Console' => + array ( + 0 => __DIR__ . '/..' . '/cilex/console-service-provider/src', + ), + 'Cilex\\Provider' => + array ( + 0 => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src', + ), + 'Cilex' => + array ( + 0 => __DIR__ . '/..' . '/cilex/cilex/src', + ), + ), + ); + + public static $classMap = array ( + 'A' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/source2.php', + 'AbstractMockTestClass' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/AbstractMockTestClass.php', + 'AbstractTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/AbstractTest.php', + 'AbstractTrait' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/AbstractTrait.php', + 'Acme\\Tester' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/IntrospectionProcessorTest.php', + 'AnInterface' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/AnInterface.php', + 'AnInterfaceWithReturnType' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/AnInterfaceWithReturnType.php', + 'AnotherInterface' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/AnotherInterface.php', + 'AssertionExample' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/AssertionExample.php', + 'AssertionExampleTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/AssertionExampleTest.php', + 'Author' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Author.php', + 'BankAccount' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/BankAccount.php', + 'BankAccountException' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/BankAccount.php', + 'BankAccountTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/BankAccountTest.php', + 'BankAccountWithCustomExtensionTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/BankAccountTest.test.php', + 'Bar' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/source_with_ignore.php', + 'BaseTestListenerSample' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/BaseTestListenerSample.php', + 'BeforeAndAfterTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/BeforeAndAfterTest.php', + 'BeforeClassAndAfterClassTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/BeforeClassAndAfterClassTest.php', + 'BeforeClassWithOnlyDataProviderTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/BeforeClassWithOnlyDataProviderTest.php', + 'Book' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Book.php', + 'Bor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/source_with_ignore.php', + 'CExtDisablingNodeVisitor' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Calculator' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Calculator.php', + 'CallableTestClass' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/CallTest.php', + 'ChangeCurrentWorkingDirectoryTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ChangeCurrentWorkingDirectoryTest.php', + 'ChildProcessClass1351' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1351/ChildProcessClass1351.php', + 'ChildSuite' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/Trac/783/ChildSuite.php', + 'Cilex\\Application' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/Application.php', + 'Cilex\\Command\\Command' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/Command/Command.php', + 'Cilex\\Command\\DemoInfoCommand' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/Command/DemoInfoCommand.php', + 'Cilex\\Command\\GreetCommand' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/Command/GreetCommand.php', + 'Cilex\\Compiler' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/Compiler.php', + 'Cilex\\Provider\\ConfigServiceProvider' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/Provider/ConfigServiceProvider.php', + 'Cilex\\Provider\\Console\\Adapter\\Silex\\ConsoleServiceProvider' => __DIR__ . '/..' . '/cilex/console-service-provider/src/Cilex/Provider/Console/Adapter/Silex/ConsoleServiceProvider.php', + 'Cilex\\Provider\\Console\\BaseConsoleServiceProvider' => __DIR__ . '/..' . '/cilex/console-service-provider/src/Cilex/Provider/Console/BaseConsoleServiceProvider.php', + 'Cilex\\Provider\\Console\\ConsoleServiceProvider' => __DIR__ . '/..' . '/cilex/console-service-provider/src/Cilex/Provider/Console/ConsoleServiceProvider.php', + 'Cilex\\Provider\\Console\\ContainerAwareApplication' => __DIR__ . '/..' . '/cilex/console-service-provider/src/Cilex/Provider/Console/ContainerAwareApplication.php', + 'Cilex\\Provider\\DoctrineServiceProvider' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/Provider/DoctrineServiceProvider.php', + 'Cilex\\Provider\\JmsSerializerServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/Cilex/Provider/JmsSerializerServiceProvider.php', + 'Cilex\\Provider\\MonologServiceProvider' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/Provider/MonologServiceProvider.php', + 'Cilex\\Provider\\ValidatorServiceProvider' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/Provider/ValidatorServiceProvider.php', + 'Cilex\\ServiceProviderInterface' => __DIR__ . '/..' . '/cilex/cilex/src/Cilex/ServiceProviderInterface.php', + 'Cilex\\Tests\\ApplicationTest' => __DIR__ . '/..' . '/cilex/cilex/tests/Cilex/Tests/ApplicationTest.php', + 'Cilex\\Tests\\Command\\CommandMock' => __DIR__ . '/..' . '/cilex/cilex/tests/Cilex/Tests/Command/CommandTest.php', + 'Cilex\\Tests\\Command\\CommandTest' => __DIR__ . '/..' . '/cilex/cilex/tests/Cilex/Tests/Command/CommandTest.php', + 'Cilex\\Tests\\Provider\\ConfigServiceProviderTest' => __DIR__ . '/..' . '/cilex/cilex/tests/Cilex/Tests/Provider/ConfigServerProviderTest.php', + 'Cilex\\Tests\\Provider\\ValidatorServiceProviderTest' => __DIR__ . '/..' . '/cilex/cilex/tests/Cilex/Tests/Provider/ValidatorServiceProviderTest.php', + 'Cilex\\Tests\\ServiceProviderMock' => __DIR__ . '/..' . '/cilex/cilex/tests/Cilex/Tests/ApplicationTest.php', + 'ClassThatImplementsSerializable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/ClassThatImplementsSerializable.php', + 'ClassWithNonPublicAttributes' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ClassWithNonPublicAttributes.php', + 'ClassWithScalarTypeDeclarations' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ClassWithScalarTypeDeclarations.php', + 'ClassWithSelfTypeHint' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/ClassWithSelfTypeHint.php', + 'ClassWithStaticMethod' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/ClassWithStaticMethod.php', + 'ClassWithToString' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ClassWithToString.php', + 'ClonedDependencyTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ClonedDependencyTest.php', + 'ConcreteTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ConcreteTest.php', + 'ConcreteWithMyCustomExtensionTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ConcreteTest.my.php', + 'CoreTestIterator' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Extension/CoreTest.php', + 'CoreTestIteratorAggregate' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Extension/CoreTest.php', + 'CoreTestIteratorAggregateAggregate' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Extension/CoreTest.php', + 'CountTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/Constraint/CountTest.php', + 'CountableStub' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'CoverageClassExtendedTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageClassExtendedTest.php', + 'CoverageClassTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageClassTest.php', + 'CoverageFunctionParenthesesTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageFunctionParenthesesTest.php', + 'CoverageFunctionParenthesesWhitespaceTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageFunctionParenthesesWhitespaceTest.php', + 'CoverageFunctionTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageFunctionTest.php', + 'CoverageMethodOneLineAnnotationTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageMethodOneLineAnnotationTest.php', + 'CoverageMethodParenthesesTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageMethodParenthesesTest.php', + 'CoverageMethodParenthesesWhitespaceTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageMethodParenthesesWhitespaceTest.php', + 'CoverageMethodTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageMethodTest.php', + 'CoverageNamespacedFunctionTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/CoverageNamespacedFunctionTest.php', + 'CoverageNoneTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageNoneTest.php', + 'CoverageNotPrivateTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageNotPrivateTest.php', + 'CoverageNotProtectedTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageNotProtectedTest.php', + 'CoverageNotPublicTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageNotPublicTest.php', + 'CoverageNothingTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageNothingTest.php', + 'CoveragePrivateTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoveragePrivateTest.php', + 'CoverageProtectedTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageProtectedTest.php', + 'CoveragePublicTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoveragePublicTest.php', + 'CoverageTwoDefaultClassAnnotations' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoverageTwoDefaultClassAnnotations.php', + 'CoveredClass' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoveredClass.php', + 'CoveredClassWithAnonymousFunctionInStaticMethod' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/source_with_class_and_anonymous_function.php', + 'CoveredParentClass' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/CoveredClass.php', + 'CustomExtensionTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/CustomExtensionTest.php', + 'CustomPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/CustomPrinter.php', + 'D' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/D/D.php', + 'DataProviderDebugTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DataProviderDebugTest.php', + 'DataProviderFilterTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DataProviderFilterTest.php', + 'DataProviderIncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DataProviderIncompleteTest.php', + 'DataProviderSkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DataProviderSkippedTest.php', + 'DataProviderTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DataProviderTest.php', + 'DataProviderTestDoxTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DataProviderTestDoxTest.php', + 'DeepCopy\\DeepCopy' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php', + 'DeepCopy\\Exception\\CloneException' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php', + 'DeepCopy\\Exception\\PropertyException' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php', + 'DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php', + 'DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php', + 'DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php', + 'DeepCopy\\Filter\\Filter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php', + 'DeepCopy\\Filter\\KeepFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php', + 'DeepCopy\\Filter\\ReplaceFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php', + 'DeepCopy\\Filter\\SetNullFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php', + 'DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php', + 'DeepCopy\\Matcher\\Matcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php', + 'DeepCopy\\Matcher\\PropertyMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php', + 'DeepCopy\\Matcher\\PropertyNameMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php', + 'DeepCopy\\Matcher\\PropertyTypeMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php', + 'DeepCopy\\Reflection\\ReflectionHelper' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php', + 'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php', + 'DeepCopy\\TypeFilter\\ReplaceFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php', + 'DeepCopy\\TypeFilter\\ShallowCopyFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php', + 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php', + 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', + 'DeepCopy\\TypeFilter\\TypeFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php', + 'DeepCopy\\TypeMatcher\\TypeMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php', + 'DeepCopy\\f001\\A' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f001/A.php', + 'DeepCopy\\f001\\B' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f001/B.php', + 'DeepCopy\\f002\\A' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f002/A.php', + 'DeepCopy\\f003\\Foo' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f003/Foo.php', + 'DeepCopy\\f004\\UnclonableItem' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f004/UnclonableItem.php', + 'DeepCopy\\f005\\Foo' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f005/Foo.php', + 'DeepCopy\\f006\\A' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f006/A.php', + 'DeepCopy\\f006\\B' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f006/B.php', + 'DeepCopy\\f007\\FooDateInterval' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f007/FooDateInterval.php', + 'DeepCopy\\f007\\FooDateTimeZone' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php', + 'DeepCopy\\f008\\A' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f008/A.php', + 'DeepCopy\\f008\\B' => __DIR__ . '/..' . '/myclabs/deep-copy/fixtures/f008/B.php', + 'DependencyFailureTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DependencyFailureTest.php', + 'DependencySuccessTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DependencySuccessTest.php', + 'DependencyTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DependencyTestSuite.php', + 'Doctrine\\Common\\Annotations\\Annotation' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php', + 'Doctrine\\Common\\Annotations\\AnnotationException' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php', + 'Doctrine\\Common\\Annotations\\AnnotationReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php', + 'Doctrine\\Common\\Annotations\\AnnotationRegistry' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Attribute' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Attributes' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Enum' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php', + 'Doctrine\\Common\\Annotations\\Annotation\\IgnoreAnnotation' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Required' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php', + 'Doctrine\\Common\\Annotations\\Annotation\\Target' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php', + 'Doctrine\\Common\\Annotations\\CachedReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php', + 'Doctrine\\Common\\Annotations\\DocLexer' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php', + 'Doctrine\\Common\\Annotations\\DocParser' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php', + 'Doctrine\\Common\\Annotations\\FileCacheReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php', + 'Doctrine\\Common\\Annotations\\IndexedReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php', + 'Doctrine\\Common\\Annotations\\PhpParser' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php', + 'Doctrine\\Common\\Annotations\\Reader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php', + 'Doctrine\\Common\\Annotations\\SimpleAnnotationReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php', + 'Doctrine\\Common\\Annotations\\TokenParser' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php', + 'Doctrine\\Common\\Lexer\\AbstractLexer' => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php', + 'Doctrine\\Instantiator\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php', + 'Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php', + 'Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php', + 'Doctrine\\Instantiator\\Instantiator' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php', + 'Doctrine\\Instantiator\\InstantiatorInterface' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', + 'DoubleTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DoubleTestCase.php', + 'DummyException' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/DummyException.php', + 'EmptyTestCaseTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/EmptyTestCaseTest.php', + 'Example' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/php-code-coverage-issue-424.php', + 'ExceptionInAssertPostConditionsTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ExceptionInAssertPostConditionsTest.php', + 'ExceptionInAssertPreConditionsTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ExceptionInAssertPreConditionsTest.php', + 'ExceptionInSetUpTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ExceptionInSetUpTest.php', + 'ExceptionInTearDownTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ExceptionInTearDownTest.php', + 'ExceptionInTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ExceptionInTest.php', + 'ExceptionMessageRegExpTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/Constraint/ExceptionMessageRegExpTest.php', + 'ExceptionMessageTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/Constraint/ExceptionMessageTest.php', + 'ExceptionStackTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ExceptionStackTest.php', + 'ExceptionTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ExceptionTest.php', + 'Extensions_PhptTestCaseTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Extensions/PhptTestCaseTest.php', + 'Extensions_RepeatedTestTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Extensions/RepeatedTestTest.php', + 'Failure' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Failure.php', + 'FailureTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/FailureTest.php', + 'FatalTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/FatalTest.php', + 'File_Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php', + 'File_Iterator_Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php', + 'File_Iterator_Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php', + 'Foo' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/source_with_ignore.php', + 'FooObject' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Extension/SandboxTest.php', + 'Foo\\BarScoped\\TestClass' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/classInScopedNamespace.php', + 'Foo\\Bar\\Baz' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/classExtendsNamespacedClass.php', + 'Foo\\Bar\\TestClass' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/classInNamespace.php', + 'Foo\\Bar\\TestClassInBar' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/multipleNamespacesWithOneClassUsingNonBraceSyntax.php', + 'Foo\\Baz\\TestClassInBaz' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/multipleNamespacesWithOneClassUsingNonBraceSyntax.php', + 'Foo\\CoveredClass' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoveredClass.php', + 'Foo\\CoveredParentClass' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoveredClass.php', + 'Foo_Bar_Issue684Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/Trac/684/Issue684Test.php', + 'Framework_AssertTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/AssertTest.php', + 'Framework_BaseTestListenerTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/BaseTestListenerTest.php', + 'Framework_ConstraintTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/ConstraintTest.php', + 'Framework_Constraint_IsJsonTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/Constraint/IsJsonTest.php', + 'Framework_Constraint_JsonMatchesTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/Constraint/JsonMatchesTest.php', + 'Framework_Constraint_JsonMatches_ErrorMessageProviderTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/Constraint/JsonMatches/ErrorMessageProviderTest.php', + 'Framework_MockBuilderTest' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/MockBuilderTest.php', + 'Framework_MockObjectTest' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/MockObjectTest.php', + 'Framework_MockObject_Builder_InvocationMockerTest' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/MockObject/Builder/InvocationMockerTest.php', + 'Framework_MockObject_GeneratorTest' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/GeneratorTest.php', + 'Framework_MockObject_Invocation_ObjectTest' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/MockObject/Invocation/ObjectTest.php', + 'Framework_MockObject_Invocation_StaticTest' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/MockObject/Invocation/StaticTest.php', + 'Framework_MockObject_Matcher_ConsecutiveParametersTest' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/MockObject/Matcher/ConsecutiveParametersTest.php', + 'Framework_ProxyObjectTest' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/ProxyObjectTest.php', + 'Framework_SuiteTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/SuiteTest.php', + 'Framework_TestCaseTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/TestCaseTest.php', + 'Framework_TestFailureTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/TestFailureTest.php', + 'Framework_TestImplementorTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/TestImplementorTest.php', + 'Framework_TestListenerTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Framework/TestListenerTest.php', + 'Gamegos\\CodeSniffer\\Helpers\\ClassHelper' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/ClassHelper.php', + 'Gamegos\\CodeSniffer\\Helpers\\RulesetHelper' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/RulesetHelper.php', + 'Gamegos\\Sniffs\\Arrays\\ArrayDeclarationSniff' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Arrays/ArrayDeclarationSniff.php', + 'Gamegos\\Sniffs\\Commenting\\DocCommentSniff' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/DocCommentSniff.php', + 'Gamegos\\Sniffs\\Commenting\\FunctionCommentSniff' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/FunctionCommentSniff.php', + 'Gamegos\\Sniffs\\Commenting\\VariableCommentSniff' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/VariableCommentSniff.php', + 'Gamegos\\Sniffs\\Formatting\\DisallowMultipleStatementsSniff' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Formatting/DisallowMultipleStatementsSniff.php', + 'Gamegos\\Sniffs\\Strings\\ConcatenationSpacingSniff' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Strings/ConcatenationSpacingSniff.php', + 'Gamegos\\Sniffs\\WhiteSpace\\FunctionSpacingSniff' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/FunctionSpacingSniff.php', + 'Gamegos\\Sniffs\\WhiteSpace\\MemberVarSpacingSniff' => __DIR__ . '/..' . '/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/MemberVarSpacingSniff.php', + 'Herrera\\Json\\Exception\\Exception' => __DIR__ . '/..' . '/herrera-io/json/src/lib/Herrera/Json/Exception/Exception.php', + 'Herrera\\Json\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/herrera-io/json/src/lib/Herrera/Json/Exception/ExceptionInterface.php', + 'Herrera\\Json\\Exception\\FileException' => __DIR__ . '/..' . '/herrera-io/json/src/lib/Herrera/Json/Exception/FileException.php', + 'Herrera\\Json\\Exception\\JsonException' => __DIR__ . '/..' . '/herrera-io/json/src/lib/Herrera/Json/Exception/JsonException.php', + 'Herrera\\Json\\Json' => __DIR__ . '/..' . '/herrera-io/json/src/lib/Herrera/Json/Json.php', + 'Herrera\\Json\\Tests\\Exception\\ExceptionTest' => __DIR__ . '/..' . '/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/ExceptionTest.php', + 'Herrera\\Json\\Tests\\Exception\\JsonExceptionTest' => __DIR__ . '/..' . '/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/JsonExceptionTest.php', + 'Herrera\\Json\\Tests\\JsonTest' => __DIR__ . '/..' . '/herrera-io/json/src/tests/Herrera/Json/Tests/JsonTest.php', + 'Herrera\\Phar\\Update\\Exception\\Exception' => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/Exception.php', + 'Herrera\\Phar\\Update\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/ExceptionInterface.php', + 'Herrera\\Phar\\Update\\Exception\\FileException' => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/FileException.php', + 'Herrera\\Phar\\Update\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/InvalidArgumentException.php', + 'Herrera\\Phar\\Update\\Exception\\LogicException' => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/LogicException.php', + 'Herrera\\Phar\\Update\\Manager' => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manager.php', + 'Herrera\\Phar\\Update\\ManagerTest' => __DIR__ . '/..' . '/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManagerTest.php', + 'Herrera\\Phar\\Update\\Manifest' => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manifest.php', + 'Herrera\\Phar\\Update\\Tests\\Exception\\ExceptionTest' => __DIR__ . '/..' . '/herrera-io/phar-update/src/tests/Herrera/Phar/Update/Exception/ExceptionTest.php', + 'Herrera\\Phar\\Update\\Tests\\ManifestTest' => __DIR__ . '/..' . '/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManifestTest.php', + 'Herrera\\Phar\\Update\\Tests\\UpdateTest' => __DIR__ . '/..' . '/herrera-io/phar-update/src/tests/Herrera/Phar/Update/UpdateTest.php', + 'Herrera\\Phar\\Update\\Update' => __DIR__ . '/..' . '/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Update.php', + 'IgnoreCodeCoverageClass' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/IgnoreCodeCoverageClass.php', + 'IgnoreCodeCoverageClassTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/IgnoreCodeCoverageClassTest.php', + 'IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/IncompleteTest.php', + 'InheritanceA' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Inheritance/InheritanceA.php', + 'InheritanceB' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Inheritance/InheritanceB.php', + 'InheritedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/InheritedTestCase.php', + 'IniTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/IniTest.php', + 'InterfaceWithSemiReservedMethodName' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/InterfaceWithSemiReservedMethodName.php', + 'InterfaceWithStaticMethod' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/InterfaceWithStaticMethod.php', + 'Interop\\Container\\ContainerInterface' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/ContainerInterface.php', + 'Interop\\Container\\Exception\\ContainerException' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php', + 'Interop\\Container\\Exception\\NotFoundException' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php', + 'InvalidOperatorExtension' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/CustomExtensionTest.php', + 'IsolationTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/IsolationTest.php', + 'Issue1021Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/Trac/1021/Issue1021Test.php', + 'Issue1149Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1149/Issue1149Test.php', + 'Issue1216Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1216/Issue1216Test.php', + 'Issue1265Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1265/Issue1265Test.php', + 'Issue1330Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1330/Issue1330Test.php', + 'Issue1335Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1335/Issue1335Test.php', + 'Issue1337Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1337/Issue1337Test.php', + 'Issue1348Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1348/Issue1348Test.php', + 'Issue1351Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1351/Issue1351Test.php', + 'Issue1374Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1374/Issue1374Test.php', + 'Issue1437Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1437/Issue1437Test.php', + 'Issue1468Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1468/Issue1468Test.php', + 'Issue1471Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1471/Issue1471Test.php', + 'Issue1472Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1472/Issue1472Test.php', + 'Issue1570Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/1570/Issue1570Test.php', + 'Issue2158Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/2158/Issue2158Test.php', + 'Issue2366' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/2366/Issue2366Test.php', + 'Issue2366Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/2366/Issue2366Test.php', + 'Issue244Exception' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/244/Issue244Test.php', + 'Issue244ExceptionIntCode' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/244/Issue244Test.php', + 'Issue244Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/244/Issue244Test.php', + 'Issue322Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/322/Issue322Test.php', + 'Issue433Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/433/Issue433Test.php', + 'Issue445Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/445/Issue445Test.php', + 'Issue498Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/498/Issue498Test.php', + 'Issue503Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/503/Issue503Test.php', + 'Issue523' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/Trac/523/Issue523Test.php', + 'Issue523Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/Trac/523/Issue523Test.php', + 'Issue578Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/Trac/578/Issue578Test.php', + 'Issue581Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/581/Issue581Test.php', + 'Issue74Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/74/Issue74Test.php', + 'Issue765Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/765/Issue765Test.php', + 'Issue797Test' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/797/Issue797Test.php', + 'IteratorAggregateStub' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'JMS\\Parser\\AbstractLexer' => __DIR__ . '/..' . '/jms/parser-lib/src/JMS/Parser/AbstractLexer.php', + 'JMS\\Parser\\AbstractLexerTest' => __DIR__ . '/..' . '/jms/parser-lib/tests/JMS/Parser/Tests/AbstractLexerTest.php', + 'JMS\\Parser\\AbstractParser' => __DIR__ . '/..' . '/jms/parser-lib/src/JMS/Parser/AbstractParser.php', + 'JMS\\Parser\\SimpleLexer' => __DIR__ . '/..' . '/jms/parser-lib/src/JMS/Parser/SimpleLexer.php', + 'JMS\\Parser\\SyntaxErrorException' => __DIR__ . '/..' . '/jms/parser-lib/src/JMS/Parser/SyntaxErrorException.php', + 'JMS\\Parser\\Tests\\AbstractParserTest' => __DIR__ . '/..' . '/jms/parser-lib/tests/JMS/Parser/Tests/AbstractParserTest.php', + 'JMS\\Serializer\\AbstractVisitor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/AbstractVisitor.php', + 'JMS\\Serializer\\Accessor\\AccessorStrategyInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Accessor/AccessorStrategyInterface.php', + 'JMS\\Serializer\\Accessor\\DefaultAccessorStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Accessor/DefaultAccessorStrategy.php', + 'JMS\\Serializer\\Accessor\\ExpressionAccessorStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Accessor/ExpressionAccessorStrategy.php', + 'JMS\\Serializer\\Annotation\\AccessType' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/AccessType.php', + 'JMS\\Serializer\\Annotation\\Accessor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Accessor.php', + 'JMS\\Serializer\\Annotation\\AccessorOrder' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/AccessorOrder.php', + 'JMS\\Serializer\\Annotation\\Discriminator' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Discriminator.php', + 'JMS\\Serializer\\Annotation\\Exclude' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Exclude.php', + 'JMS\\Serializer\\Annotation\\ExclusionPolicy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/ExclusionPolicy.php', + 'JMS\\Serializer\\Annotation\\Expose' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Expose.php', + 'JMS\\Serializer\\Annotation\\Groups' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Groups.php', + 'JMS\\Serializer\\Annotation\\HandlerCallback' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/HandlerCallback.php', + 'JMS\\Serializer\\Annotation\\Inline' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Inline.php', + 'JMS\\Serializer\\Annotation\\MaxDepth' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/MaxDepth.php', + 'JMS\\Serializer\\Annotation\\PostDeserialize' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/PostDeserialize.php', + 'JMS\\Serializer\\Annotation\\PostSerialize' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/PostSerialize.php', + 'JMS\\Serializer\\Annotation\\PreSerialize' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/PreSerialize.php', + 'JMS\\Serializer\\Annotation\\ReadOnly' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/ReadOnly.php', + 'JMS\\Serializer\\Annotation\\SerializedName' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/SerializedName.php', + 'JMS\\Serializer\\Annotation\\Since' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Since.php', + 'JMS\\Serializer\\Annotation\\SkipWhenEmpty' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/SkipWhenEmpty.php', + 'JMS\\Serializer\\Annotation\\Type' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Type.php', + 'JMS\\Serializer\\Annotation\\Until' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Until.php', + 'JMS\\Serializer\\Annotation\\Version' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/Version.php', + 'JMS\\Serializer\\Annotation\\VirtualProperty' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/VirtualProperty.php', + 'JMS\\Serializer\\Annotation\\XmlAttribute' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlAttribute.php', + 'JMS\\Serializer\\Annotation\\XmlAttributeMap' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlAttributeMap.php', + 'JMS\\Serializer\\Annotation\\XmlCollection' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlCollection.php', + 'JMS\\Serializer\\Annotation\\XmlDiscriminator' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlDiscriminator.php', + 'JMS\\Serializer\\Annotation\\XmlElement' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlElement.php', + 'JMS\\Serializer\\Annotation\\XmlKeyValuePairs' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlKeyValuePairs.php', + 'JMS\\Serializer\\Annotation\\XmlList' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlList.php', + 'JMS\\Serializer\\Annotation\\XmlMap' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlMap.php', + 'JMS\\Serializer\\Annotation\\XmlNamespace' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlNamespace.php', + 'JMS\\Serializer\\Annotation\\XmlRoot' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlRoot.php', + 'JMS\\Serializer\\Annotation\\XmlValue' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Annotation/XmlValue.php', + 'JMS\\Serializer\\ArrayTransformerInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/ArrayTransformerInterface.php', + 'JMS\\Serializer\\Builder\\CallbackDriverFactory' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Builder/CallbackDriverFactory.php', + 'JMS\\Serializer\\Builder\\DefaultDriverFactory' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Builder/DefaultDriverFactory.php', + 'JMS\\Serializer\\Builder\\DriverFactoryInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Builder/DriverFactoryInterface.php', + 'JMS\\Serializer\\Construction\\DoctrineObjectConstructor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Construction/DoctrineObjectConstructor.php', + 'JMS\\Serializer\\Construction\\ObjectConstructorInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Construction/ObjectConstructorInterface.php', + 'JMS\\Serializer\\Construction\\UnserializeObjectConstructor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Construction/UnserializeObjectConstructor.php', + 'JMS\\Serializer\\Context' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Context.php', + 'JMS\\Serializer\\ContextFactory\\CallableContextFactory' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/ContextFactory/CallableContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\CallableDeserializationContextFactory' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/ContextFactory/CallableDeserializationContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\CallableSerializationContextFactory' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/ContextFactory/CallableSerializationContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\DefaultDeserializationContextFactory' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultDeserializationContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\DefaultSerializationContextFactory' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultSerializationContextFactory.php', + 'JMS\\Serializer\\ContextFactory\\DeserializationContextFactoryInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/ContextFactory/DeserializationContextFactoryInterface.php', + 'JMS\\Serializer\\ContextFactory\\SerializationContextFactoryInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/ContextFactory/SerializationContextFactoryInterface.php', + 'JMS\\Serializer\\DeserializationContext' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/DeserializationContext.php', + 'JMS\\Serializer\\EventDispatcher\\Event' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Event.php', + 'JMS\\Serializer\\EventDispatcher\\EventDispatcher' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcher.php', + 'JMS\\Serializer\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcherInterface.php', + 'JMS\\Serializer\\EventDispatcher\\EventSubscriberInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/EventSubscriberInterface.php', + 'JMS\\Serializer\\EventDispatcher\\Events' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Events.php', + 'JMS\\Serializer\\EventDispatcher\\LazyEventDispatcher' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/LazyEventDispatcher.php', + 'JMS\\Serializer\\EventDispatcher\\ObjectEvent' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/ObjectEvent.php', + 'JMS\\Serializer\\EventDispatcher\\PreDeserializeEvent' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/PreDeserializeEvent.php', + 'JMS\\Serializer\\EventDispatcher\\PreSerializeEvent' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/PreSerializeEvent.php', + 'JMS\\Serializer\\EventDispatcher\\Subscriber\\DoctrineProxySubscriber' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php', + 'JMS\\Serializer\\EventDispatcher\\Subscriber\\SymfonyValidatorSubscriber' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriber.php', + 'JMS\\Serializer\\EventDispatcher\\Subscriber\\SymfonyValidatorValidatorSubscriber' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriber.php', + 'JMS\\Serializer\\Exception\\Exception' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exception/Exception.php', + 'JMS\\Serializer\\Exception\\ExpressionLanguageRequiredException' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exception/ExpressionLanguageRequiredException.php', + 'JMS\\Serializer\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exception/InvalidArgumentException.php', + 'JMS\\Serializer\\Exception\\LogicException' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exception/LogicException.php', + 'JMS\\Serializer\\Exception\\ObjectConstructionException' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exception/ObjectConstructionException.php', + 'JMS\\Serializer\\Exception\\RuntimeException' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exception/RuntimeException.php', + 'JMS\\Serializer\\Exception\\UnsupportedFormatException' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exception/UnsupportedFormatException.php', + 'JMS\\Serializer\\Exception\\ValidationFailedException' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exception/ValidationFailedException.php', + 'JMS\\Serializer\\Exception\\XmlErrorException' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exception/XmlErrorException.php', + 'JMS\\Serializer\\Exclusion\\DepthExclusionStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exclusion/DepthExclusionStrategy.php', + 'JMS\\Serializer\\Exclusion\\DisjunctExclusionStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exclusion/DisjunctExclusionStrategy.php', + 'JMS\\Serializer\\Exclusion\\ExclusionStrategyInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exclusion/ExclusionStrategyInterface.php', + 'JMS\\Serializer\\Exclusion\\ExpressionLanguageExclusionStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exclusion/ExpressionLanguageExclusionStrategy.php', + 'JMS\\Serializer\\Exclusion\\GroupsExclusionStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exclusion/GroupsExclusionStrategy.php', + 'JMS\\Serializer\\Exclusion\\VersionExclusionStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Exclusion/VersionExclusionStrategy.php', + 'JMS\\Serializer\\Expression\\ExpressionEvaluator' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluator.php', + 'JMS\\Serializer\\Expression\\ExpressionEvaluatorInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluatorInterface.php', + 'JMS\\Serializer\\GenericDeserializationVisitor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/GenericDeserializationVisitor.php', + 'JMS\\Serializer\\GenericSerializationVisitor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/GenericSerializationVisitor.php', + 'JMS\\Serializer\\GraphNavigator' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/GraphNavigator.php', + 'JMS\\Serializer\\Handler\\ArrayCollectionHandler' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/ArrayCollectionHandler.php', + 'JMS\\Serializer\\Handler\\ConstraintViolationHandler' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/ConstraintViolationHandler.php', + 'JMS\\Serializer\\Handler\\DateHandler' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/DateHandler.php', + 'JMS\\Serializer\\Handler\\FormErrorHandler' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/FormErrorHandler.php', + 'JMS\\Serializer\\Handler\\HandlerRegistry' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistry.php', + 'JMS\\Serializer\\Handler\\HandlerRegistryInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistryInterface.php', + 'JMS\\Serializer\\Handler\\LazyHandlerRegistry' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/LazyHandlerRegistry.php', + 'JMS\\Serializer\\Handler\\PhpCollectionHandler' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/PhpCollectionHandler.php', + 'JMS\\Serializer\\Handler\\PropelCollectionHandler' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/PropelCollectionHandler.php', + 'JMS\\Serializer\\Handler\\StdClassHandler' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/StdClassHandler.php', + 'JMS\\Serializer\\Handler\\SubscribingHandlerInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Handler/SubscribingHandlerInterface.php', + 'JMS\\Serializer\\JsonDeserializationVisitor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/JsonDeserializationVisitor.php', + 'JMS\\Serializer\\JsonSerializationVisitor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/JsonSerializationVisitor.php', + 'JMS\\Serializer\\Metadata\\ClassMetadata' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/ClassMetadata.php', + 'JMS\\Serializer\\Metadata\\Driver\\AbstractDoctrineTypeDriver' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/AbstractDoctrineTypeDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\AnnotationDriver' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/AnnotationDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\DoctrinePHPCRTypeDriver' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrinePHPCRTypeDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\DoctrineTypeDriver' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrineTypeDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\NullDriver' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/NullDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\PhpDriver' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/PhpDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\XmlDriver' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/XmlDriver.php', + 'JMS\\Serializer\\Metadata\\Driver\\YamlDriver' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/Driver/YamlDriver.php', + 'JMS\\Serializer\\Metadata\\ExpressionPropertyMetadata' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/ExpressionPropertyMetadata.php', + 'JMS\\Serializer\\Metadata\\PropertyMetadata' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/PropertyMetadata.php', + 'JMS\\Serializer\\Metadata\\StaticPropertyMetadata' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/StaticPropertyMetadata.php', + 'JMS\\Serializer\\Metadata\\VirtualPropertyMetadata' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Metadata/VirtualPropertyMetadata.php', + 'JMS\\Serializer\\Naming\\AdvancedNamingStrategyInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Naming/AdvancedNamingStrategyInterface.php', + 'JMS\\Serializer\\Naming\\CacheNamingStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Naming/CacheNamingStrategy.php', + 'JMS\\Serializer\\Naming\\CamelCaseNamingStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Naming/CamelCaseNamingStrategy.php', + 'JMS\\Serializer\\Naming\\IdenticalPropertyNamingStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Naming/IdenticalPropertyNamingStrategy.php', + 'JMS\\Serializer\\Naming\\PropertyNamingStrategyInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Naming/PropertyNamingStrategyInterface.php', + 'JMS\\Serializer\\Naming\\SerializedNameAnnotationStrategy' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Naming/SerializedNameAnnotationStrategy.php', + 'JMS\\Serializer\\NullAwareVisitorInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/NullAwareVisitorInterface.php', + 'JMS\\Serializer\\SerializationContext' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/SerializationContext.php', + 'JMS\\Serializer\\Serializer' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Serializer.php', + 'JMS\\Serializer\\SerializerBuilder' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/SerializerBuilder.php', + 'JMS\\Serializer\\SerializerInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/SerializerInterface.php', + 'JMS\\Serializer\\Tests\\Exclusion\\DisjunctExclusionStrategyTest' => __DIR__ . '/..' . '/jms/serializer/tests/Exclusion/DisjunctExclusionStrategyTest.php', + 'JMS\\Serializer\\Tests\\Exclusion\\ExpressionLanguageExclusionStrategyTest' => __DIR__ . '/..' . '/jms/serializer/tests/Exclusion/ExpressionLanguageExclusionStrategyTest.php', + 'JMS\\Serializer\\Tests\\Exclusion\\GroupsExclusionStrategyTest' => __DIR__ . '/..' . '/jms/serializer/tests/Exclusion/GroupsExclusionStrategyTest.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorOrderChild' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AccessorOrderChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorOrderMethod' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AccessorOrderMethod.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorOrderParent' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AccessorOrderParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorSetter' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AccessorSetter.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AccessorSetterElement' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AccessorSetter.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AllExcludedObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AllExcludedObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Article' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Article.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Author' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Author.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AuthorExpressionAccess' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AuthorExpressionAccess.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AuthorList' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AuthorList.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AuthorReadOnly' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AuthorReadOnly.php', + 'JMS\\Serializer\\Tests\\Fixtures\\AuthorReadOnlyPerClass' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/AuthorReadOnlyPerClass.php', + 'JMS\\Serializer\\Tests\\Fixtures\\BlogPost' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/BlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CircularReferenceChild' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/CircularReferenceChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CircularReferenceParent' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/CircularReferenceParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Comment' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Comment.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ContextualNamingStrategy' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ContextualNamingStrategy.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CurrencyAwareOrder' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/CurrencyAwareOrder.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CurrencyAwarePrice' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/CurrencyAwarePrice.php', + 'JMS\\Serializer\\Tests\\Fixtures\\CustomDeserializationObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/CustomDeserializationObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DateTimeArraysObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/DateTimeArraysObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DiscriminatorGroup\\Car' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/DiscriminatorGroup/Car.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DiscriminatorGroup\\Vehicle' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/DiscriminatorGroup/Vehicle.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Car' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/Car.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Moped' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/Moped.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlAttributeDiscriminatorChild' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlAttributeDiscriminatorParent' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlNamespaceDiscriminatorChild' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlNamespaceDiscriminatorParent' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlNotCDataDiscriminatorChild' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\ObjectWithXmlNotCDataDiscriminatorParent' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\Vehicle' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/Vehicle.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Discriminator\\VehicleInterface' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Discriminator/VehicleInterface.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DoctrinePHPCR\\Author' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/DoctrinePHPCR/Author.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DoctrinePHPCR\\BlogPost' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/DoctrinePHPCR/BlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\DoctrinePHPCR\\Comment' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/DoctrinePHPCR/Comment.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\Author' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/Author.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\BlogPost' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/BlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\Comment' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/Comment.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\AbstractModel' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/AbstractModel.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Clazz' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Clazz.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Organization' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Organization.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Person' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Person.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\School' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/School.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Student' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Student.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Doctrine\\SingleTableInheritance\\Teacher' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Teacher.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ExcludePublicAccessor' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ExcludePublicAccessor.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ExclusionStrategy\\AlwaysExcludeExclusionStrategy' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ExclusionStrategy/AlwaysExcludeExclusionStrategy.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Garage' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Garage.php', + 'JMS\\Serializer\\Tests\\Fixtures\\GetSetObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/GetSetObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\GroupsObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/GroupsObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\GroupsTrim' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/GroupsTrim.php', + 'JMS\\Serializer\\Tests\\Fixtures\\GroupsUser' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/GroupsUser.php', + 'JMS\\Serializer\\Tests\\Fixtures\\IndexedCommentsBlogPost' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/IndexedCommentsBlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\IndexedCommentsList' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/IndexedCommentsBlogPost.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InitializedBlogPostConstructor' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/InitializedBlogPostConstructor.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InitializedObjectConstructor' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/InitializedObjectConstructor.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InlineChild' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/InlineChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InlineChildEmpty' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/InlineChildEmpty.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InlineChildWithGroups' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/InlineChildWithGroups.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InlineParent' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/InlineParent.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Input' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Input.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InvalidGroupsObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/InvalidGroupsObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\InvalidUsageOfXmlValue' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/InvalidUsageOfXmlValue.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Log' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Log.php', + 'JMS\\Serializer\\Tests\\Fixtures\\MaxDepth\\Gh236Bar' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/MaxDepth/Gh236Bar.php', + 'JMS\\Serializer\\Tests\\Fixtures\\MaxDepth\\Gh236Foo' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/MaxDepth/Gh236Foo.php', + 'JMS\\Serializer\\Tests\\Fixtures\\MultilineGroupsFormat' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/MultilineGroupsFormat.php', + 'JMS\\Serializer\\Tests\\Fixtures\\NamedDateTimeArraysObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/NamedDateTimeArraysObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\NamedDateTimeImmutableArraysObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/NamedDateTimeImmutableArraysObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Node' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Node.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithAbsentXmlListNode' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithAbsentXmlListNode.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithEmptyArrayAndHash' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithEmptyArrayAndHash.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithEmptyHash' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithEmptyHash.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithEmptyNullableAndEmptyArrays' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithEmptyNullableAndEmptyArrays.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithExpressionVirtualPropertiesAndExcludeAll' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithExpressionVirtualPropertiesAndExcludeAll.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithHandlerCallbacks' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithHandlerCallbacks.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithInlineArray' => __DIR__ . '/..' . '/jms/serializer/tests/JMS/Serializer/Tests/Fixtures/ObjectWithInlineArray.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithIntListAndIntMap' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithIntListAndIntMap.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithLifecycleCallbacks' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithLifecycleCallbacks.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithNamespacesAndList' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndList.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithNamespacesAndNestedList' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndNestedList.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithNullProperty' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithNullProperty.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithObjectProperty' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithObjectProperty.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithToString' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithToString.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithVersionedVirtualProperties' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithVersionedVirtualProperties.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithVirtualProperties' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithVirtualProperties.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithVirtualPropertiesAndExcludeAll' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithVirtualPropertiesAndExcludeAll.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithVirtualXmlProperties' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithVirtualXmlProperties.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlKeyValuePairs' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairs.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlKeyValuePairsWithObjectType' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithObjectType.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlKeyValuePairsWithType' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithType.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespaces' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithXmlNamespaces.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespacesAndObjectProperty' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectProperty.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespacesAndObjectPropertyAuthor' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyAuthor.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlNamespacesAndObjectPropertyVirtual' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyVirtual.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ObjectWithXmlRootNamespace' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ObjectWithXmlRootNamespace.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Order' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Order.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ParentDoNotSkipWithEmptyChild' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ParentDoNotSkipWithEmptyChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\ParentSkipWithEmptyChild' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/ParentSkipWithEmptyChild.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Person' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Person.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonCollection' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/PersonCollection.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonLocation' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/PersonLocation.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecret' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/PersonSecret.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecretMore' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/PersonSecretMore.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecretMoreVirtual' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/PersonSecretMoreVirtual.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecretVirtual' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/PersonSecretVirtual.php', + 'JMS\\Serializer\\Tests\\Fixtures\\PersonSecretWithVariables' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/PersonSecretWithVariables.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Price' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Price.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Publisher' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Publisher.php', + 'JMS\\Serializer\\Tests\\Fixtures\\SimpleClassObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/SimpleClassObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\SimpleObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/SimpleObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\SimpleObjectProxy' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/SimpleObjectProxy.php', + 'JMS\\Serializer\\Tests\\Fixtures\\SimpleSubClassObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/SimpleSubClassObject.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Tag' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Tag.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Timestamp' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Timestamp.php', + 'JMS\\Serializer\\Tests\\Fixtures\\Tree' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/Tree.php', + 'JMS\\Serializer\\Tests\\Fixtures\\VehicleInterfaceGarage' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/VehicleInterfaceGarage.php', + 'JMS\\Serializer\\Tests\\Fixtures\\VersionedObject' => __DIR__ . '/..' . '/jms/serializer/tests/Fixtures/VersionedObject.php', + 'JMS\\Serializer\\Tests\\Handler\\ArrayCollectionHandlerTest' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/ArrayCollectionHandlerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\DateHandlerTest' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/DateHandlerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\DummyHandler' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/HandlerRegistryTest.php', + 'JMS\\Serializer\\Tests\\Handler\\FormErrorHandlerTest' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/FormErrorHandlerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\HandlerRegistryTest' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/HandlerRegistryTest.php', + 'JMS\\Serializer\\Tests\\Handler\\HandlerService' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/LazyHandlerRegistryTest.php', + 'JMS\\Serializer\\Tests\\Handler\\LazyHandlerRegistryTest' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/LazyHandlerRegistryTest.php', + 'JMS\\Serializer\\Tests\\Handler\\LazyHandlerRegistryWithPsr11ContainerTest' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/LazyHandlerRegistryWithPsr11ContainerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\LazyHandlerRegistryWithSymfonyContainerTest' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/LazyHandlerRegistryWithSymfonyContainerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\PropelCollectionHandlerTest' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/PropelCollectionHandlerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\Psr11Container' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/LazyHandlerRegistryWithPsr11ContainerTest.php', + 'JMS\\Serializer\\Tests\\Handler\\TestSubject' => __DIR__ . '/..' . '/jms/serializer/tests/Handler/PropelCollectionHandlerTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\ClassMetadataTest' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/ClassMetadataTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\AnnotationDriverTest' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/Driver/AnnotationDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\BaseDriverTest' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/Driver/BaseDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\DoctrineDriverTest' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/Driver/DoctrineDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\DoctrinePHPCRDriverTest' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/Driver/DoctrinePHPCRDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\NullDriverTest' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/Driver/NullDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\PhpDriverTest' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/Driver/PhpDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\XmlDriverTest' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/Driver/XmlDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\Driver\\YamlDriverTest' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/Driver/YamlDriverTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\PropertyMetadataOrder' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/ClassMetadataTest.php', + 'JMS\\Serializer\\Tests\\Metadata\\PropertyMetadataPublicMethod' => __DIR__ . '/..' . '/jms/serializer/tests/Metadata/ClassMetadataTest.php', + 'JMS\\Serializer\\Tests\\SerializerBuilderTest' => __DIR__ . '/..' . '/jms/serializer/tests/SerializerBuilderTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\ArrayTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/ArrayTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\BaseSerializationTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/BaseSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\ContextTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/ContextTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\DateIntervalFormatTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/DateIntervalFormatTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Doctrine\\IntegrationTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/Doctrine/IntegrationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Doctrine\\ObjectConstructorTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/Doctrine/ObjectConstructorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Doctrine\\SimpleBaseManagerRegistry' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/Doctrine/ObjectConstructorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Doctrine\\SimpleManagerRegistry' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/Doctrine/IntegrationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\EventDispatcherTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/EventDispatcherTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\LazyEventDispatcherTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\LazyEventDispatcherWithPsr11ContainerTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithPsr11ContainerTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\LazyEventDispatcherWithSymfonyContainerTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithSymfonyContainerTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\MockListener' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/EventDispatcherTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\MockSubscriber' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/EventDispatcherTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\Psr11Container' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithPsr11ContainerTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\Subscriber\\DoctrineProxySubscriberTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriberTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\Subscriber\\SymfonyValidatorSubscriberTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriberTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\EventDispatcher\\Subscriber\\SymfonyValidatorValidatorSubscriberTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriberTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\GraphNavigatorTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/GraphNavigatorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\JsonSerializationTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/JsonSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\LinkAddingSubscriber' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/JsonSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\Naming\\IdenticalPropertyNamingStrategyTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/Naming/IdenticalPropertyNamingStrategyTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\ReplaceNameSubscriber' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/JsonSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\SerializableClass' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/GraphNavigatorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\SerializationContextFactoryTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/SerializationContextFactoryTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\TestSubscribingHandler' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/GraphNavigatorTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\TypeParserTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/TypeParserTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\XmlSerializationTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/XmlSerializationTest.php', + 'JMS\\Serializer\\Tests\\Serializer\\YamlSerializationTest' => __DIR__ . '/..' . '/jms/serializer/tests/Serializer/YamlSerializationTest.php', + 'JMS\\Serializer\\Tests\\Twig\\SerializerExtensionTest' => __DIR__ . '/..' . '/jms/serializer/tests/Twig/SerializerExtensionTest.php', + 'JMS\\Serializer\\Twig\\SerializerExtension' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Twig/SerializerExtension.php', + 'JMS\\Serializer\\Twig\\SerializerRuntimeExtension' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeExtension.php', + 'JMS\\Serializer\\Twig\\SerializerRuntimeHelper' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeHelper.php', + 'JMS\\Serializer\\TypeParser' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/TypeParser.php', + 'JMS\\Serializer\\Util\\Writer' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/Util/Writer.php', + 'JMS\\Serializer\\VisitorInterface' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/VisitorInterface.php', + 'JMS\\Serializer\\XmlDeserializationVisitor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/XmlDeserializationVisitor.php', + 'JMS\\Serializer\\XmlSerializationVisitor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/XmlSerializationVisitor.php', + 'JMS\\Serializer\\YamlSerializationVisitor' => __DIR__ . '/..' . '/jms/serializer/src/JMS/Serializer/YamlSerializationVisitor.php', + 'JsonParserTest' => __DIR__ . '/..' . '/seld/jsonlint/tests/JsonParserTest.php', + 'JsonSchema\\Constraints\\CollectionConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php', + 'JsonSchema\\Constraints\\Constraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php', + 'JsonSchema\\Constraints\\ConstraintInterface' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php', + 'JsonSchema\\Constraints\\EnumConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php', + 'JsonSchema\\Constraints\\Factory' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php', + 'JsonSchema\\Constraints\\FormatConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php', + 'JsonSchema\\Constraints\\NumberConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php', + 'JsonSchema\\Constraints\\ObjectConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php', + 'JsonSchema\\Constraints\\SchemaConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php', + 'JsonSchema\\Constraints\\StringConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php', + 'JsonSchema\\Constraints\\TypeConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php', + 'JsonSchema\\Constraints\\UndefinedConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php', + 'JsonSchema\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php', + 'JsonSchema\\Exception\\InvalidSchemaMediaTypeException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php', + 'JsonSchema\\Exception\\InvalidSourceUriException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php', + 'JsonSchema\\Exception\\JsonDecodingException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php', + 'JsonSchema\\Exception\\ResourceNotFoundException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php', + 'JsonSchema\\Exception\\UriResolverException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php', + 'JsonSchema\\RefResolver' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/RefResolver.php', + 'JsonSchema\\Uri\\Retrievers\\AbstractRetriever' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php', + 'JsonSchema\\Uri\\Retrievers\\Curl' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php', + 'JsonSchema\\Uri\\Retrievers\\FileGetContents' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php', + 'JsonSchema\\Uri\\Retrievers\\PredefinedArray' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php', + 'JsonSchema\\Uri\\Retrievers\\UriRetrieverInterface' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php', + 'JsonSchema\\Uri\\UriResolver' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php', + 'JsonSchema\\Uri\\UriRetriever' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php', + 'JsonSchema\\Validator' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Validator.php', + 'KevinGH\\Version\\Version' => __DIR__ . '/..' . '/kherge/version/src/lib/KevinGH/Version/Version.php', + 'KevinGH\\Version\\VersionTest' => __DIR__ . '/..' . '/kherge/version/src/tests/KevinGH/Version/VersionTest.php', + 'LegacyTwigTestExtension' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/LegacyIntegrationTest.php', + 'MagicCallStub' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'Metadata\\AdvancedMetadataFactoryInterface' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/AdvancedMetadataFactoryInterface.php', + 'Metadata\\Cache\\CacheInterface' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Cache/CacheInterface.php', + 'Metadata\\Cache\\DoctrineCacheAdapter' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Cache/DoctrineCacheAdapter.php', + 'Metadata\\Cache\\FileCache' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Cache/FileCache.php', + 'Metadata\\Cache\\PsrCacheAdapter' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Cache/PsrCacheAdapter.php', + 'Metadata\\ClassHierarchyMetadata' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/ClassHierarchyMetadata.php', + 'Metadata\\ClassMetadata' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/ClassMetadata.php', + 'Metadata\\Driver\\AbstractFileDriver' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Driver/AbstractFileDriver.php', + 'Metadata\\Driver\\AdvancedDriverInterface' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Driver/AdvancedDriverInterface.php', + 'Metadata\\Driver\\AdvancedFileLocatorInterface' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Driver/AdvancedFileLocatorInterface.php', + 'Metadata\\Driver\\DriverChain' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Driver/DriverChain.php', + 'Metadata\\Driver\\DriverInterface' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Driver/DriverInterface.php', + 'Metadata\\Driver\\FileLocator' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Driver/FileLocator.php', + 'Metadata\\Driver\\FileLocatorInterface' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Driver/FileLocatorInterface.php', + 'Metadata\\Driver\\LazyLoadingDriver' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Driver/LazyLoadingDriver.php', + 'Metadata\\MergeableClassMetadata' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/MergeableClassMetadata.php', + 'Metadata\\MergeableInterface' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/MergeableInterface.php', + 'Metadata\\MetadataFactory' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/MetadataFactory.php', + 'Metadata\\MetadataFactoryInterface' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/MetadataFactoryInterface.php', + 'Metadata\\MethodMetadata' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/MethodMetadata.php', + 'Metadata\\NullMetadata' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/NullMetadata.php', + 'Metadata\\PropertyMetadata' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/PropertyMetadata.php', + 'Metadata\\Tests\\Cache\\DoctrineCacheAdapterTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Cache/DoctrineCacheAdapterTest.php', + 'Metadata\\Tests\\Cache\\FileCacheTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Cache/FileCacheTest.php', + 'Metadata\\Tests\\Cache\\PsrCacheAdapterTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Cache/PsrCacheAdapterTest.php', + 'Metadata\\Tests\\ClassMetadataTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/ClassMetadataTest.php', + 'Metadata\\Tests\\Driver\\AbstractFileDriverTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Driver/AbstractFileDriverTest.php', + 'Metadata\\Tests\\Driver\\DriverChainTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Driver/DriverChainTest.php', + 'Metadata\\Tests\\Driver\\FileLocatorTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Driver/FileLocatorTest.php', + 'Metadata\\Tests\\Driver\\Fixture\\A\\A' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/A/A.php', + 'Metadata\\Tests\\Driver\\Fixture\\B\\B' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/B/B.php', + 'Metadata\\Tests\\Driver\\Fixture\\C\\SubDir\\C' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/C/SubDir/C.php', + 'Metadata\\Tests\\Driver\\Fixture\\T\\T' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Driver/Fixture/T/T.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\BaseClass' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/BaseClass.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\InterfaceA' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/InterfaceA.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\InterfaceB' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/InterfaceB.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\SubClassA' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/SubClassA.php', + 'Metadata\\Tests\\Fixtures\\ComplexHierarchy\\SubClassB' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Fixtures/ComplexHierarchy/SubClassB.php', + 'Metadata\\Tests\\Fixtures\\TestObject' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Fixtures/TestObject.php', + 'Metadata\\Tests\\Fixtures\\TestParent' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/Fixtures/TestParent.php', + 'Metadata\\Tests\\MergeableClassMetadataTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/MergeableClassMetadataTest.php', + 'Metadata\\Tests\\MetadataFactoryTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/MetadataFactoryTest.php', + 'Metadata\\Tests\\MethodMetadataTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/MethodMetadataTest.php', + 'Metadata\\Tests\\PropertyMetadataTest' => __DIR__ . '/..' . '/jms/metadata/tests/Metadata/Tests/PropertyMetadataTest.php', + 'Metadata\\Version' => __DIR__ . '/..' . '/jms/metadata/src/Metadata/Version.php', + 'MethodCallback' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/MethodCallback.php', + 'MethodCallbackByReference' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/MethodCallbackByReference.php', + 'MockRunner' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/MockRunner.php', + 'MockTestInterface' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/MockTestInterface.php', + 'Mockable' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Mockable.php', + 'Monolog\\ErrorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ErrorHandler.php', + 'Monolog\\ErrorHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/ErrorHandlerTest.php', + 'Monolog\\Formatter\\ChromePHPFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php', + 'Monolog\\Formatter\\ChromePHPFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/ChromePHPFormatterTest.php', + 'Monolog\\Formatter\\ElasticaFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php', + 'Monolog\\Formatter\\ElasticaFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/ElasticaFormatterTest.php', + 'Monolog\\Formatter\\FlowdockFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php', + 'Monolog\\Formatter\\FlowdockFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/FlowdockFormatterTest.php', + 'Monolog\\Formatter\\FluentdFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php', + 'Monolog\\Formatter\\FluentdFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/FluentdFormatterTest.php', + 'Monolog\\Formatter\\FormatterInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', + 'Monolog\\Formatter\\GelfMessageFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php', + 'Monolog\\Formatter\\GelfMessageFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/GelfMessageFormatterTest.php', + 'Monolog\\Formatter\\HtmlFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php', + 'Monolog\\Formatter\\JsonFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php', + 'Monolog\\Formatter\\JsonFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/JsonFormatterTest.php', + 'Monolog\\Formatter\\LineFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', + 'Monolog\\Formatter\\LineFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php', + 'Monolog\\Formatter\\LogglyFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php', + 'Monolog\\Formatter\\LogglyFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/LogglyFormatterTest.php', + 'Monolog\\Formatter\\LogstashFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php', + 'Monolog\\Formatter\\LogstashFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/LogstashFormatterTest.php', + 'Monolog\\Formatter\\MongoDBFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php', + 'Monolog\\Formatter\\MongoDBFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/MongoDBFormatterTest.php', + 'Monolog\\Formatter\\NormalizerFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', + 'Monolog\\Formatter\\NormalizerFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\ScalarFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php', + 'Monolog\\Formatter\\ScalarFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/ScalarFormatterTest.php', + 'Monolog\\Formatter\\TestBar' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php', + 'Monolog\\Formatter\\TestBarNorm' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\TestFoo' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php', + 'Monolog\\Formatter\\TestFooNorm' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\TestStreamFoo' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\TestToStringError' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php', + 'Monolog\\Formatter\\WildfireFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php', + 'Monolog\\Formatter\\WildfireFormatterTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Formatter/WildfireFormatterTest.php', + 'Monolog\\Handler\\AbstractHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractHandler.php', + 'Monolog\\Handler\\AbstractHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/AbstractHandlerTest.php', + 'Monolog\\Handler\\AbstractProcessingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php', + 'Monolog\\Handler\\AbstractProcessingHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/AbstractProcessingHandlerTest.php', + 'Monolog\\Handler\\AbstractSyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php', + 'Monolog\\Handler\\AmqpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AmqpHandler.php', + 'Monolog\\Handler\\AmqpHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/AmqpHandlerTest.php', + 'Monolog\\Handler\\BrowserConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php', + 'Monolog\\Handler\\BrowserConsoleHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/BrowserConsoleHandlerTest.php', + 'Monolog\\Handler\\BufferHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/BufferHandler.php', + 'Monolog\\Handler\\BufferHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/BufferHandlerTest.php', + 'Monolog\\Handler\\ChromePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php', + 'Monolog\\Handler\\ChromePHPHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/ChromePHPHandlerTest.php', + 'Monolog\\Handler\\CouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php', + 'Monolog\\Handler\\CouchDBHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/CouchDBHandlerTest.php', + 'Monolog\\Handler\\CubeHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/CubeHandler.php', + 'Monolog\\Handler\\Curl\\Util' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Curl/Util.php', + 'Monolog\\Handler\\DeduplicationHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php', + 'Monolog\\Handler\\DeduplicationHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/DeduplicationHandlerTest.php', + 'Monolog\\Handler\\DoctrineCouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php', + 'Monolog\\Handler\\DoctrineCouchDBHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php', + 'Monolog\\Handler\\DynamoDbHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php', + 'Monolog\\Handler\\DynamoDbHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/DynamoDbHandlerTest.php', + 'Monolog\\Handler\\ElasticSearchHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php', + 'Monolog\\Handler\\ElasticSearchHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/ElasticSearchHandlerTest.php', + 'Monolog\\Handler\\ErrorLogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php', + 'Monolog\\Handler\\ErrorLogHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/ErrorLogHandlerTest.php', + 'Monolog\\Handler\\ExceptionTestHandler' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php', + 'Monolog\\Handler\\FilterHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php', + 'Monolog\\Handler\\FilterHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/FilterHandlerTest.php', + 'Monolog\\Handler\\FingersCrossedHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php', + 'Monolog\\Handler\\FingersCrossedHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/FingersCrossedHandlerTest.php', + 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php', + 'Monolog\\Handler\\FingersCrossed\\ChannelLevelActivationStrategy' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php', + 'Monolog\\Handler\\FingersCrossed\\ErrorLevelActivationStrategy' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php', + 'Monolog\\Handler\\FirePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php', + 'Monolog\\Handler\\FirePHPHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/FirePHPHandlerTest.php', + 'Monolog\\Handler\\FleepHookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php', + 'Monolog\\Handler\\FleepHookHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/FleepHookHandlerTest.php', + 'Monolog\\Handler\\FlowdockHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php', + 'Monolog\\Handler\\FlowdockHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php', + 'Monolog\\Handler\\GelfHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php', + 'Monolog\\Handler\\GelfHandlerLegacyTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/GelfHandlerLegacyTest.php', + 'Monolog\\Handler\\GelfHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/GelfHandlerTest.php', + 'Monolog\\Handler\\GelfMockMessagePublisher' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/GelfMockMessagePublisher.php', + 'Monolog\\Handler\\GroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php', + 'Monolog\\Handler\\GroupHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/GroupHandlerTest.php', + 'Monolog\\Handler\\HandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', + 'Monolog\\Handler\\HandlerWrapper' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php', + 'Monolog\\Handler\\HandlerWrapperTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/HandlerWrapperTest.php', + 'Monolog\\Handler\\HipChatHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php', + 'Monolog\\Handler\\HipChatHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php', + 'Monolog\\Handler\\IFTTTHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php', + 'Monolog\\Handler\\LogEntriesHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php', + 'Monolog\\Handler\\LogEntriesHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/LogEntriesHandlerTest.php', + 'Monolog\\Handler\\LogglyHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php', + 'Monolog\\Handler\\MailHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MailHandler.php', + 'Monolog\\Handler\\MailHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/MailHandlerTest.php', + 'Monolog\\Handler\\MandrillHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php', + 'Monolog\\Handler\\MissingExtensionException' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php', + 'Monolog\\Handler\\MockRavenClient' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/MockRavenClient.php', + 'Monolog\\Handler\\Mongo' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/MongoDBHandlerTest.php', + 'Monolog\\Handler\\MongoDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php', + 'Monolog\\Handler\\MongoDBHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/MongoDBHandlerTest.php', + 'Monolog\\Handler\\NativeMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php', + 'Monolog\\Handler\\NativeMailerHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/NativeMailerHandlerTest.php', + 'Monolog\\Handler\\NewRelicHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php', + 'Monolog\\Handler\\NewRelicHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php', + 'Monolog\\Handler\\NullHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NullHandler.php', + 'Monolog\\Handler\\NullHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/NullHandlerTest.php', + 'Monolog\\Handler\\PHPConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php', + 'Monolog\\Handler\\PHPConsoleHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/PHPConsoleHandlerTest.php', + 'Monolog\\Handler\\PsrHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php', + 'Monolog\\Handler\\PsrHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/PsrHandlerTest.php', + 'Monolog\\Handler\\PushoverHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php', + 'Monolog\\Handler\\PushoverHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php', + 'Monolog\\Handler\\RavenHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php', + 'Monolog\\Handler\\RavenHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/RavenHandlerTest.php', + 'Monolog\\Handler\\RedisHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php', + 'Monolog\\Handler\\RedisHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/RedisHandlerTest.php', + 'Monolog\\Handler\\RollbarHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php', + 'Monolog\\Handler\\RollbarHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/RollbarHandlerTest.php', + 'Monolog\\Handler\\RotatingFileHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php', + 'Monolog\\Handler\\RotatingFileHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/RotatingFileHandlerTest.php', + 'Monolog\\Handler\\SamplingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php', + 'Monolog\\Handler\\SamplingHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/SamplingHandlerTest.php', + 'Monolog\\Handler\\SlackHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php', + 'Monolog\\Handler\\SlackHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php', + 'Monolog\\Handler\\SlackWebhookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php', + 'Monolog\\Handler\\SlackWebhookHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/SlackWebhookHandlerTest.php', + 'Monolog\\Handler\\Slack\\SlackRecord' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php', + 'Monolog\\Handler\\Slack\\SlackRecordTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/Slack/SlackRecordTest.php', + 'Monolog\\Handler\\SlackbotHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php', + 'Monolog\\Handler\\SlackbotHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/SlackbotHandlerTest.php', + 'Monolog\\Handler\\SocketHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php', + 'Monolog\\Handler\\SocketHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/SocketHandlerTest.php', + 'Monolog\\Handler\\StreamHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php', + 'Monolog\\Handler\\StreamHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/StreamHandlerTest.php', + 'Monolog\\Handler\\StubNewRelicHandler' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php', + 'Monolog\\Handler\\StubNewRelicHandlerWithoutExtension' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php', + 'Monolog\\Handler\\SwiftMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php', + 'Monolog\\Handler\\SwiftMailerHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/SwiftMailerHandlerTest.php', + 'Monolog\\Handler\\SyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php', + 'Monolog\\Handler\\SyslogHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/SyslogHandlerTest.php', + 'Monolog\\Handler\\SyslogUdpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php', + 'Monolog\\Handler\\SyslogUdpHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/SyslogUdpHandlerTest.php', + 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php', + 'Monolog\\Handler\\TestChromePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/ChromePHPHandlerTest.php', + 'Monolog\\Handler\\TestFirePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/FirePHPHandlerTest.php', + 'Monolog\\Handler\\TestHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/TestHandler.php', + 'Monolog\\Handler\\TestHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/TestHandlerTest.php', + 'Monolog\\Handler\\UdpSocketTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/UdpSocketTest.php', + 'Monolog\\Handler\\WhatFailureGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php', + 'Monolog\\Handler\\WhatFailureGroupHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php', + 'Monolog\\Handler\\ZendMonitorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php', + 'Monolog\\Handler\\ZendMonitorHandlerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Handler/ZendMonitorHandlerTest.php', + 'Monolog\\Logger' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Logger.php', + 'Monolog\\LoggerTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/LoggerTest.php', + 'Monolog\\Processor\\GitProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php', + 'Monolog\\Processor\\GitProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/GitProcessorTest.php', + 'Monolog\\Processor\\IntrospectionProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', + 'Monolog\\Processor\\IntrospectionProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/IntrospectionProcessorTest.php', + 'Monolog\\Processor\\MemoryPeakUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', + 'Monolog\\Processor\\MemoryPeakUsageProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php', + 'Monolog\\Processor\\MemoryProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', + 'Monolog\\Processor\\MemoryUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php', + 'Monolog\\Processor\\MemoryUsageProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/MemoryUsageProcessorTest.php', + 'Monolog\\Processor\\MercurialProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php', + 'Monolog\\Processor\\MercurialProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/MercurialProcessorTest.php', + 'Monolog\\Processor\\ProcessIdProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php', + 'Monolog\\Processor\\ProcessIdProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/ProcessIdProcessorTest.php', + 'Monolog\\Processor\\PsrLogMessageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php', + 'Monolog\\Processor\\PsrLogMessageProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/PsrLogMessageProcessorTest.php', + 'Monolog\\Processor\\TagProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/TagProcessor.php', + 'Monolog\\Processor\\TagProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/TagProcessorTest.php', + 'Monolog\\Processor\\UidProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/UidProcessor.php', + 'Monolog\\Processor\\UidProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/UidProcessorTest.php', + 'Monolog\\Processor\\WebProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/WebProcessor.php', + 'Monolog\\Processor\\WebProcessorTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/Processor/WebProcessorTest.php', + 'Monolog\\PsrLogCompatTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/PsrLogCompatTest.php', + 'Monolog\\Registry' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Registry.php', + 'Monolog\\RegistryTest' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/RegistryTest.php', + 'Monolog\\TestCase' => __DIR__ . '/..' . '/monolog/monolog/tests/Monolog/TestCase.php', + 'MultiDependencyTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/MultiDependencyTest.php', + 'MultipleDataProviderTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/MultipleDataProviderTest.php', + 'My\\Space\\ExceptionNamespaceTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ExceptionNamespaceTest.php', + 'NamespaceCoverageClassExtendedTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageClassExtendedTest.php', + 'NamespaceCoverageClassTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageClassTest.php', + 'NamespaceCoverageCoversClassPublicTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageCoversClassPublicTest.php', + 'NamespaceCoverageCoversClassTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageCoversClassTest.php', + 'NamespaceCoverageMethodTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageMethodTest.php', + 'NamespaceCoverageNotPrivateTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageNotPrivateTest.php', + 'NamespaceCoverageNotProtectedTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageNotProtectedTest.php', + 'NamespaceCoverageNotPublicTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageNotPublicTest.php', + 'NamespaceCoveragePrivateTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoveragePrivateTest.php', + 'NamespaceCoverageProtectedTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoverageProtectedTest.php', + 'NamespaceCoveragePublicTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NamespaceCoveragePublicTest.php', + 'NewException' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/GitHub/74/NewException.php', + 'NoArgTestCaseTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/NoArgTestCaseTest.php', + 'NoTestCaseClass' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/NoTestCaseClass.php', + 'NoTestCases' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/NoTestCases.php', + 'NonStatic' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/NonStatic.php', + 'NotExistingCoveredElementTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/NotExistingCoveredElementTest.php', + 'NotPublicTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/NotPublicTestCase.php', + 'NotVoidTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/NotVoidTestCase.php', + 'NothingTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/NothingTest.php', + 'Objet' => __DIR__ . '/..' . '/zetacomponents/base/tests/test_repository/object/object.php', + 'OneTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/phpunit-example-extension/tests/OneTest.php', + 'OneTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/OneTestCase.php', + 'Other\\Space\\Extender' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/classExtendsNamespacedClass.php', + 'OutputTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/OutputTestCase.php', + 'OverrideTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/OverrideTestCase.php', + 'PDepend\\Application' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Application.php', + 'PDepend\\CacheVersionUpdater' => __DIR__ . '/..' . '/pdepend/pdepend/scripts/update-version.php', + 'PDepend\\DbusUI\\ResultPrinter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/DbusUI/ResultPrinter.php', + 'PDepend\\DependencyInjection\\Compiler\\ProcessListenerPass' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/Compiler/ProcessListenerPass.php', + 'PDepend\\DependencyInjection\\Configuration' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/Configuration.php', + 'PDepend\\DependencyInjection\\Extension' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/Extension.php', + 'PDepend\\DependencyInjection\\ExtensionManager' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/ExtensionManager.php', + 'PDepend\\DependencyInjection\\PdependExtension' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/DependencyInjection/PdependExtension.php', + 'PDepend\\Engine' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Engine.php', + 'PDepend\\Input\\CompositeFilter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Input/CompositeFilter.php', + 'PDepend\\Input\\ExcludePathFilter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Input/ExcludePathFilter.php', + 'PDepend\\Input\\ExtensionFilter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Input/ExtensionFilter.php', + 'PDepend\\Input\\Filter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Input/Filter.php', + 'PDepend\\Input\\Iterator' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Input/Iterator.php', + 'PDepend\\Metrics\\AbstractAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AbstractAnalyzer.php', + 'PDepend\\Metrics\\AbstractCachingAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AbstractCachingAnalyzer.php', + 'PDepend\\Metrics\\AggregateAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AggregateAnalyzer.php', + 'PDepend\\Metrics\\Analyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer.php', + 'PDepend\\Metrics\\AnalyzerCacheAware' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerCacheAware.php', + 'PDepend\\Metrics\\AnalyzerFactory' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerFactory.php', + 'PDepend\\Metrics\\AnalyzerFilterAware' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerFilterAware.php', + 'PDepend\\Metrics\\AnalyzerIterator' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerIterator.php', + 'PDepend\\Metrics\\AnalyzerListener' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerListener.php', + 'PDepend\\Metrics\\AnalyzerNodeAware' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerNodeAware.php', + 'PDepend\\Metrics\\AnalyzerProjectAware' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/AnalyzerProjectAware.php', + 'PDepend\\Metrics\\Analyzer\\ClassDependencyAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/ClassDependencyAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\ClassLevelAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/ClassLevelAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\CodeRankStrategyI' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/CodeRankStrategyI.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\InheritanceStrategy' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/InheritanceStrategy.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\MethodStrategy' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/MethodStrategy.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\PropertyStrategy' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/PropertyStrategy.php', + 'PDepend\\Metrics\\Analyzer\\CodeRankAnalyzer\\StrategyFactory' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CodeRankAnalyzer/StrategyFactory.php', + 'PDepend\\Metrics\\Analyzer\\CohesionAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CohesionAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CouplingAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CouplingAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CrapIndexAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CrapIndexAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\CyclomaticComplexityAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/CyclomaticComplexityAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\DependencyAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/DependencyAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\HalsteadAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/HalsteadAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\HierarchyAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/HierarchyAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\InheritanceAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/InheritanceAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\MaintainabilityIndexAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/MaintainabilityIndexAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\NPathComplexityAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/NPathComplexityAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\NodeCountAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/NodeCountAnalyzer.php', + 'PDepend\\Metrics\\Analyzer\\NodeLocAnalyzer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Metrics/Analyzer/NodeLocAnalyzer.php', + 'PDepend\\ProcessListener' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/ProcessListener.php', + 'PDepend\\Report\\CodeAwareGenerator' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/CodeAwareGenerator.php', + 'PDepend\\Report\\Dependencies\\Xml' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/Dependencies/Xml.php', + 'PDepend\\Report\\FileAwareGenerator' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/FileAwareGenerator.php', + 'PDepend\\Report\\Jdepend\\Chart' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/Jdepend/Chart.php', + 'PDepend\\Report\\Jdepend\\Xml' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/Jdepend/Xml.php', + 'PDepend\\Report\\NoLogOutputException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/NoLogOutputException.php', + 'PDepend\\Report\\Overview\\Pyramid' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/Overview/Pyramid.php', + 'PDepend\\Report\\ReportGenerator' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/ReportGenerator.php', + 'PDepend\\Report\\ReportGeneratorFactory' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/ReportGeneratorFactory.php', + 'PDepend\\Report\\Summary\\Xml' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Report/Summary/Xml.php', + 'PDepend\\Source\\ASTVisitor\\ASTVisitListener' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/ASTVisitor/ASTVisitListener.php', + 'PDepend\\Source\\ASTVisitor\\ASTVisitor' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/ASTVisitor/ASTVisitor.php', + 'PDepend\\Source\\ASTVisitor\\AbstractASTVisitListener' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/ASTVisitor/AbstractASTVisitListener.php', + 'PDepend\\Source\\ASTVisitor\\AbstractASTVisitor' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/ASTVisitor/AbstractASTVisitor.php', + 'PDepend\\Source\\AST\\ASTAllocationExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTAllocationExpression.php', + 'PDepend\\Source\\AST\\ASTAnonymousClass' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTAnonymousClass.php', + 'PDepend\\Source\\AST\\ASTArguments' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArguments.php', + 'PDepend\\Source\\AST\\ASTArray' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArray.php', + 'PDepend\\Source\\AST\\ASTArrayElement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArrayElement.php', + 'PDepend\\Source\\AST\\ASTArrayIndexExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArrayIndexExpression.php', + 'PDepend\\Source\\AST\\ASTArtifact' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifact.php', + 'PDepend\\Source\\AST\\ASTArtifactList' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList.php', + 'PDepend\\Source\\AST\\ASTArtifactList\\ArtifactFilter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList/ArtifactFilter.php', + 'PDepend\\Source\\AST\\ASTArtifactList\\CollectionArtifactFilter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList/CollectionArtifactFilter.php', + 'PDepend\\Source\\AST\\ASTArtifactList\\NullArtifactFilter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList/NullArtifactFilter.php', + 'PDepend\\Source\\AST\\ASTArtifactList\\PackageArtifactFilter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTArtifactList/PackageArtifactFilter.php', + 'PDepend\\Source\\AST\\ASTAssignmentExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTAssignmentExpression.php', + 'PDepend\\Source\\AST\\ASTBooleanAndExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTBooleanAndExpression.php', + 'PDepend\\Source\\AST\\ASTBooleanOrExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTBooleanOrExpression.php', + 'PDepend\\Source\\AST\\ASTBreakStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTBreakStatement.php', + 'PDepend\\Source\\AST\\ASTCallable' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCallable.php', + 'PDepend\\Source\\AST\\ASTCastExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCastExpression.php', + 'PDepend\\Source\\AST\\ASTCatchStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCatchStatement.php', + 'PDepend\\Source\\AST\\ASTClass' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClass.php', + 'PDepend\\Source\\AST\\ASTClassFqnPostfix' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassFqnPostfix.php', + 'PDepend\\Source\\AST\\ASTClassOrInterfaceRecursiveInheritanceException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassOrInterfaceRecursiveInheritanceException.php', + 'PDepend\\Source\\AST\\ASTClassOrInterfaceReference' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassOrInterfaceReference.php', + 'PDepend\\Source\\AST\\ASTClassOrInterfaceReferenceIterator' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassOrInterfaceReferenceIterator.php', + 'PDepend\\Source\\AST\\ASTClassReference' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClassReference.php', + 'PDepend\\Source\\AST\\ASTCloneExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCloneExpression.php', + 'PDepend\\Source\\AST\\ASTClosure' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTClosure.php', + 'PDepend\\Source\\AST\\ASTComment' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTComment.php', + 'PDepend\\Source\\AST\\ASTCompilationUnit' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCompilationUnit.php', + 'PDepend\\Source\\AST\\ASTCompilationUnitNotFoundException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCompilationUnitNotFoundException.php', + 'PDepend\\Source\\AST\\ASTCompoundExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCompoundExpression.php', + 'PDepend\\Source\\AST\\ASTCompoundVariable' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTCompoundVariable.php', + 'PDepend\\Source\\AST\\ASTConditionalExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConditionalExpression.php', + 'PDepend\\Source\\AST\\ASTConstant' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConstant.php', + 'PDepend\\Source\\AST\\ASTConstantDeclarator' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConstantDeclarator.php', + 'PDepend\\Source\\AST\\ASTConstantDefinition' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConstantDefinition.php', + 'PDepend\\Source\\AST\\ASTConstantPostfix' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTConstantPostfix.php', + 'PDepend\\Source\\AST\\ASTContinueStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTContinueStatement.php', + 'PDepend\\Source\\AST\\ASTDeclareStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTDeclareStatement.php', + 'PDepend\\Source\\AST\\ASTDoWhileStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTDoWhileStatement.php', + 'PDepend\\Source\\AST\\ASTEchoStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTEchoStatement.php', + 'PDepend\\Source\\AST\\ASTElseIfStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTElseIfStatement.php', + 'PDepend\\Source\\AST\\ASTEvalExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTEvalExpression.php', + 'PDepend\\Source\\AST\\ASTExitExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTExitExpression.php', + 'PDepend\\Source\\AST\\ASTExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTExpression.php', + 'PDepend\\Source\\AST\\ASTFieldDeclaration' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFieldDeclaration.php', + 'PDepend\\Source\\AST\\ASTFinallyStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFinallyStatement.php', + 'PDepend\\Source\\AST\\ASTForInit' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTForInit.php', + 'PDepend\\Source\\AST\\ASTForStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTForStatement.php', + 'PDepend\\Source\\AST\\ASTForUpdate' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTForUpdate.php', + 'PDepend\\Source\\AST\\ASTForeachStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTForeachStatement.php', + 'PDepend\\Source\\AST\\ASTFormalParameter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFormalParameter.php', + 'PDepend\\Source\\AST\\ASTFormalParameters' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFormalParameters.php', + 'PDepend\\Source\\AST\\ASTFunction' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFunction.php', + 'PDepend\\Source\\AST\\ASTFunctionPostfix' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTFunctionPostfix.php', + 'PDepend\\Source\\AST\\ASTGlobalStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTGlobalStatement.php', + 'PDepend\\Source\\AST\\ASTGotoStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTGotoStatement.php', + 'PDepend\\Source\\AST\\ASTHeredoc' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTHeredoc.php', + 'PDepend\\Source\\AST\\ASTIdentifier' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIdentifier.php', + 'PDepend\\Source\\AST\\ASTIfStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIfStatement.php', + 'PDepend\\Source\\AST\\ASTIncludeExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIncludeExpression.php', + 'PDepend\\Source\\AST\\ASTIndexExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIndexExpression.php', + 'PDepend\\Source\\AST\\ASTInstanceOfExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTInstanceOfExpression.php', + 'PDepend\\Source\\AST\\ASTInterface' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTInterface.php', + 'PDepend\\Source\\AST\\ASTInvocation' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTInvocation.php', + 'PDepend\\Source\\AST\\ASTIssetExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTIssetExpression.php', + 'PDepend\\Source\\AST\\ASTLabelStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLabelStatement.php', + 'PDepend\\Source\\AST\\ASTListExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTListExpression.php', + 'PDepend\\Source\\AST\\ASTLiteral' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLiteral.php', + 'PDepend\\Source\\AST\\ASTLogicalAndExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLogicalAndExpression.php', + 'PDepend\\Source\\AST\\ASTLogicalOrExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLogicalOrExpression.php', + 'PDepend\\Source\\AST\\ASTLogicalXorExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTLogicalXorExpression.php', + 'PDepend\\Source\\AST\\ASTMemberPrimaryPrefix' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTMemberPrimaryPrefix.php', + 'PDepend\\Source\\AST\\ASTMethod' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTMethod.php', + 'PDepend\\Source\\AST\\ASTMethodPostfix' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTMethodPostfix.php', + 'PDepend\\Source\\AST\\ASTNamespace' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTNamespace.php', + 'PDepend\\Source\\AST\\ASTNode' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTNode.php', + 'PDepend\\Source\\AST\\ASTParameter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTParameter.php', + 'PDepend\\Source\\AST\\ASTParentReference' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTParentReference.php', + 'PDepend\\Source\\AST\\ASTPostfixExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPostfixExpression.php', + 'PDepend\\Source\\AST\\ASTPreDecrementExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPreDecrementExpression.php', + 'PDepend\\Source\\AST\\ASTPreIncrementExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPreIncrementExpression.php', + 'PDepend\\Source\\AST\\ASTPrintExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPrintExpression.php', + 'PDepend\\Source\\AST\\ASTProperty' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTProperty.php', + 'PDepend\\Source\\AST\\ASTPropertyPostfix' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTPropertyPostfix.php', + 'PDepend\\Source\\AST\\ASTRequireExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTRequireExpression.php', + 'PDepend\\Source\\AST\\ASTReturnStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTReturnStatement.php', + 'PDepend\\Source\\AST\\ASTScalarType' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTScalarType.php', + 'PDepend\\Source\\AST\\ASTScope' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTScope.php', + 'PDepend\\Source\\AST\\ASTScopeStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTScopeStatement.php', + 'PDepend\\Source\\AST\\ASTSelfReference' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTSelfReference.php', + 'PDepend\\Source\\AST\\ASTShiftLeftExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTShiftLeftExpression.php', + 'PDepend\\Source\\AST\\ASTShiftRightExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTShiftRightExpression.php', + 'PDepend\\Source\\AST\\ASTStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTStatement.php', + 'PDepend\\Source\\AST\\ASTStaticReference' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTStaticReference.php', + 'PDepend\\Source\\AST\\ASTStaticVariableDeclaration' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTStaticVariableDeclaration.php', + 'PDepend\\Source\\AST\\ASTString' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTString.php', + 'PDepend\\Source\\AST\\ASTStringIndexExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTStringIndexExpression.php', + 'PDepend\\Source\\AST\\ASTSwitchLabel' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTSwitchLabel.php', + 'PDepend\\Source\\AST\\ASTSwitchStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTSwitchStatement.php', + 'PDepend\\Source\\AST\\ASTThrowStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTThrowStatement.php', + 'PDepend\\Source\\AST\\ASTTrait' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTrait.php', + 'PDepend\\Source\\AST\\ASTTraitAdaptation' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitAdaptation.php', + 'PDepend\\Source\\AST\\ASTTraitAdaptationAlias' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitAdaptationAlias.php', + 'PDepend\\Source\\AST\\ASTTraitAdaptationPrecedence' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitAdaptationPrecedence.php', + 'PDepend\\Source\\AST\\ASTTraitMethodCollisionException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitMethodCollisionException.php', + 'PDepend\\Source\\AST\\ASTTraitReference' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitReference.php', + 'PDepend\\Source\\AST\\ASTTraitUseStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTraitUseStatement.php', + 'PDepend\\Source\\AST\\ASTTryStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTryStatement.php', + 'PDepend\\Source\\AST\\ASTType' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTType.php', + 'PDepend\\Source\\AST\\ASTTypeArray' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTypeArray.php', + 'PDepend\\Source\\AST\\ASTTypeCallable' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTypeCallable.php', + 'PDepend\\Source\\AST\\ASTTypeIterable' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTTypeIterable.php', + 'PDepend\\Source\\AST\\ASTUnaryExpression' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTUnaryExpression.php', + 'PDepend\\Source\\AST\\ASTUnsetStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTUnsetStatement.php', + 'PDepend\\Source\\AST\\ASTValue' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTValue.php', + 'PDepend\\Source\\AST\\ASTVariable' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTVariable.php', + 'PDepend\\Source\\AST\\ASTVariableDeclarator' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTVariableDeclarator.php', + 'PDepend\\Source\\AST\\ASTVariableVariable' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTVariableVariable.php', + 'PDepend\\Source\\AST\\ASTWhileStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTWhileStatement.php', + 'PDepend\\Source\\AST\\ASTYieldStatement' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/ASTYieldStatement.php', + 'PDepend\\Source\\AST\\AbstractASTArtifact' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTArtifact.php', + 'PDepend\\Source\\AST\\AbstractASTCallable' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTCallable.php', + 'PDepend\\Source\\AST\\AbstractASTClassOrInterface' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTClassOrInterface.php', + 'PDepend\\Source\\AST\\AbstractASTNode' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTNode.php', + 'PDepend\\Source\\AST\\AbstractASTType' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/AbstractASTType.php', + 'PDepend\\Source\\AST\\State' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/AST/State.php', + 'PDepend\\Source\\Builder\\Builder' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Builder/Builder.php', + 'PDepend\\Source\\Builder\\BuilderContext' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Builder/BuilderContext.php', + 'PDepend\\Source\\Builder\\BuilderContext\\GlobalBuilderContext' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Builder/BuilderContext/GlobalBuilderContext.php', + 'PDepend\\Source\\Language\\PHP\\AbstractPHPParser' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/AbstractPHPParser.php', + 'PDepend\\Source\\Language\\PHP\\PHPBuilder' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPBuilder.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserGeneric' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserGeneric.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion53' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion53.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion54' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion54.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion55' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion55.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion56' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion56.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion70' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion70.php', + 'PDepend\\Source\\Language\\PHP\\PHPParserVersion71' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPParserVersion71.php', + 'PDepend\\Source\\Language\\PHP\\PHPTokenizerHelperVersion52' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPTokenizerHelperVersion52.php', + 'PDepend\\Source\\Language\\PHP\\PHPTokenizerInternal' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Language/PHP/PHPTokenizerInternal.php', + 'PDepend\\Source\\Parser\\InvalidStateException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/InvalidStateException.php', + 'PDepend\\Source\\Parser\\MissingValueException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/MissingValueException.php', + 'PDepend\\Source\\Parser\\NoActiveScopeException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/NoActiveScopeException.php', + 'PDepend\\Source\\Parser\\ParserException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/ParserException.php', + 'PDepend\\Source\\Parser\\SymbolTable' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/SymbolTable.php', + 'PDepend\\Source\\Parser\\TokenException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/TokenException.php', + 'PDepend\\Source\\Parser\\TokenStack' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/TokenStack.php', + 'PDepend\\Source\\Parser\\TokenStreamEndException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/TokenStreamEndException.php', + 'PDepend\\Source\\Parser\\UnexpectedTokenException' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Parser/UnexpectedTokenException.php', + 'PDepend\\Source\\Tokenizer\\Token' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Tokenizer/Token.php', + 'PDepend\\Source\\Tokenizer\\Tokenizer' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Tokenizer/Tokenizer.php', + 'PDepend\\Source\\Tokenizer\\Tokens' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Source/Tokenizer/Tokens.php', + 'PDepend\\TextUI\\Command' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/TextUI/Command.php', + 'PDepend\\TextUI\\ResultPrinter' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/TextUI/ResultPrinter.php', + 'PDepend\\TextUI\\Runner' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/TextUI/Runner.php', + 'PDepend\\Util\\Cache\\CacheDriver' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/CacheDriver.php', + 'PDepend\\Util\\Cache\\CacheFactory' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/CacheFactory.php', + 'PDepend\\Util\\Cache\\Driver\\FileCacheDriver' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/Driver/FileCacheDriver.php', + 'PDepend\\Util\\Cache\\Driver\\File\\FileCacheDirectory' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/Driver/File/FileCacheDirectory.php', + 'PDepend\\Util\\Cache\\Driver\\File\\FileCacheGarbageCollector' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/Driver/File/FileCacheGarbageCollector.php', + 'PDepend\\Util\\Cache\\Driver\\MemoryCacheDriver' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Cache/Driver/MemoryCacheDriver.php', + 'PDepend\\Util\\Configuration' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Configuration.php', + 'PDepend\\Util\\ConfigurationInstance' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/ConfigurationInstance.php', + 'PDepend\\Util\\Coverage\\CloverReport' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Coverage/CloverReport.php', + 'PDepend\\Util\\Coverage\\Factory' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Coverage/Factory.php', + 'PDepend\\Util\\Coverage\\Report' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Coverage/Report.php', + 'PDepend\\Util\\FileUtil' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/FileUtil.php', + 'PDepend\\Util\\IdBuilder' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/IdBuilder.php', + 'PDepend\\Util\\ImageConvert' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/ImageConvert.php', + 'PDepend\\Util\\Log' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Log.php', + 'PDepend\\Util\\MathUtil' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/MathUtil.php', + 'PDepend\\Util\\Type' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Type.php', + 'PDepend\\Util\\Utf8Util' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Utf8Util.php', + 'PDepend\\Util\\Workarounds' => __DIR__ . '/..' . '/pdepend/pdepend/src/main/php/PDepend/Util/Workarounds.php', + 'PHPMD\\AbstractNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/AbstractNode.php', + 'PHPMD\\AbstractRenderer' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/AbstractRenderer.php', + 'PHPMD\\AbstractRule' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/AbstractRule.php', + 'PHPMD\\AbstractWriter' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/AbstractWriter.php', + 'PHPMD\\Node\\ASTNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/ASTNode.php', + 'PHPMD\\Node\\AbstractCallableNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/AbstractCallableNode.php', + 'PHPMD\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/AbstractNode.php', + 'PHPMD\\Node\\AbstractTypeNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/AbstractTypeNode.php', + 'PHPMD\\Node\\Annotation' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/Annotation.php', + 'PHPMD\\Node\\Annotations' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/Annotations.php', + 'PHPMD\\Node\\ClassNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/ClassNode.php', + 'PHPMD\\Node\\FunctionNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/FunctionNode.php', + 'PHPMD\\Node\\InterfaceNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/InterfaceNode.php', + 'PHPMD\\Node\\MethodNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/MethodNode.php', + 'PHPMD\\Node\\TraitNode' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Node/TraitNode.php', + 'PHPMD\\PHPMD' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/PHPMD.php', + 'PHPMD\\Parser' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Parser.php', + 'PHPMD\\ParserFactory' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/ParserFactory.php', + 'PHPMD\\ProcessingError' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/ProcessingError.php', + 'PHPMD\\Renderer\\HTMLRenderer' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Renderer/HTMLRenderer.php', + 'PHPMD\\Renderer\\TextRenderer' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Renderer/TextRenderer.php', + 'PHPMD\\Renderer\\XMLRenderer' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Renderer/XMLRenderer.php', + 'PHPMD\\Report' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Report.php', + 'PHPMD\\Rule' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule.php', + 'PHPMD\\RuleClassFileNotFoundException' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/RuleClassFileNotFoundException.php', + 'PHPMD\\RuleClassNotFoundException' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/RuleClassNotFoundException.php', + 'PHPMD\\RuleSet' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/RuleSet.php', + 'PHPMD\\RuleSetFactory' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/RuleSetFactory.php', + 'PHPMD\\RuleSetNotFoundException' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/RuleSetNotFoundException.php', + 'PHPMD\\RuleViolation' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/RuleViolation.php', + 'PHPMD\\Rule\\AbstractLocalVariable' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/AbstractLocalVariable.php', + 'PHPMD\\Rule\\ClassAware' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/ClassAware.php', + 'PHPMD\\Rule\\CleanCode\\BooleanArgumentFlag' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/CleanCode/BooleanArgumentFlag.php', + 'PHPMD\\Rule\\CleanCode\\ElseExpression' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/CleanCode/ElseExpression.php', + 'PHPMD\\Rule\\CleanCode\\StaticAccess' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/CleanCode/StaticAccess.php', + 'PHPMD\\Rule\\Controversial\\CamelCaseClassName' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCaseClassName.php', + 'PHPMD\\Rule\\Controversial\\CamelCaseMethodName' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCaseMethodName.php', + 'PHPMD\\Rule\\Controversial\\CamelCaseParameterName' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCaseParameterName.php', + 'PHPMD\\Rule\\Controversial\\CamelCasePropertyName' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCasePropertyName.php', + 'PHPMD\\Rule\\Controversial\\CamelCaseVariableName' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/CamelCaseVariableName.php', + 'PHPMD\\Rule\\Controversial\\Superglobals' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Controversial/Superglobals.php', + 'PHPMD\\Rule\\CyclomaticComplexity' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/CyclomaticComplexity.php', + 'PHPMD\\Rule\\Design\\CouplingBetweenObjects' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/CouplingBetweenObjects.php', + 'PHPMD\\Rule\\Design\\DepthOfInheritance' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/DepthOfInheritance.php', + 'PHPMD\\Rule\\Design\\DevelopmentCodeFragment' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/DevelopmentCodeFragment.php', + 'PHPMD\\Rule\\Design\\EvalExpression' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/EvalExpression.php', + 'PHPMD\\Rule\\Design\\ExitExpression' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/ExitExpression.php', + 'PHPMD\\Rule\\Design\\GotoStatement' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/GotoStatement.php', + 'PHPMD\\Rule\\Design\\LongClass' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/LongClass.php', + 'PHPMD\\Rule\\Design\\LongMethod' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/LongMethod.php', + 'PHPMD\\Rule\\Design\\LongParameterList' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/LongParameterList.php', + 'PHPMD\\Rule\\Design\\NpathComplexity' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/NpathComplexity.php', + 'PHPMD\\Rule\\Design\\NumberOfChildren' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/NumberOfChildren.php', + 'PHPMD\\Rule\\Design\\TooManyFields' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/TooManyFields.php', + 'PHPMD\\Rule\\Design\\TooManyMethods' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/TooManyMethods.php', + 'PHPMD\\Rule\\Design\\TooManyPublicMethods' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/TooManyPublicMethods.php', + 'PHPMD\\Rule\\Design\\WeightedMethodCount' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Design/WeightedMethodCount.php', + 'PHPMD\\Rule\\ExcessivePublicCount' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/ExcessivePublicCount.php', + 'PHPMD\\Rule\\FunctionAware' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/FunctionAware.php', + 'PHPMD\\Rule\\InterfaceAware' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/InterfaceAware.php', + 'PHPMD\\Rule\\MethodAware' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/MethodAware.php', + 'PHPMD\\Rule\\Naming\\BooleanGetMethodName' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/BooleanGetMethodName.php', + 'PHPMD\\Rule\\Naming\\ConstantNamingConventions' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/ConstantNamingConventions.php', + 'PHPMD\\Rule\\Naming\\ConstructorWithNameAsEnclosingClass' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/ConstructorWithNameAsEnclosingClass.php', + 'PHPMD\\Rule\\Naming\\LongVariable' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/LongVariable.php', + 'PHPMD\\Rule\\Naming\\ShortMethodName' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/ShortMethodName.php', + 'PHPMD\\Rule\\Naming\\ShortVariable' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/Naming/ShortVariable.php', + 'PHPMD\\Rule\\UnusedFormalParameter' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/UnusedFormalParameter.php', + 'PHPMD\\Rule\\UnusedLocalVariable' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/UnusedLocalVariable.php', + 'PHPMD\\Rule\\UnusedPrivateField' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/UnusedPrivateField.php', + 'PHPMD\\Rule\\UnusedPrivateMethod' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Rule/UnusedPrivateMethod.php', + 'PHPMD\\TextUI\\Command' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/TextUI/Command.php', + 'PHPMD\\TextUI\\CommandLineOptions' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/TextUI/CommandLineOptions.php', + 'PHPMD\\Writer\\StreamWriter' => __DIR__ . '/..' . '/phpmd/phpmd/src/main/php/PHPMD/Writer/StreamWriter.php', + 'PHPUnit\\Framework\\Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/ForwardCompatibility/Assert.php', + 'PHPUnit\\Framework\\BaseTestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/ForwardCompatibility/BaseTestListener.php', + 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/ForwardCompatibility/TestCase.php', + 'PHPUnit\\Framework\\TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/ForwardCompatibility/TestListener.php', + 'PHPUnit_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php', + 'PHPUnit_Extensions_GroupTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/GroupTestSuite.php', + 'PHPUnit_Extensions_PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/PhptTestCase.php', + 'PHPUnit_Extensions_PhptTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/PhptTestSuite.php', + 'PHPUnit_Extensions_RepeatedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/RepeatedTest.php', + 'PHPUnit_Extensions_TestDecorator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/TestDecorator.php', + 'PHPUnit_Extensions_TicketListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/TicketListener.php', + 'PHPUnit_Framework_Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php', + 'PHPUnit_Framework_AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', + 'PHPUnit_Framework_BaseTestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/BaseTestListener.php', + 'PHPUnit_Framework_CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', + 'PHPUnit_Framework_Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint.php', + 'PHPUnit_Framework_Constraint_And' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/And.php', + 'PHPUnit_Framework_Constraint_ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', + 'PHPUnit_Framework_Constraint_ArraySubset' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', + 'PHPUnit_Framework_Constraint_Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', + 'PHPUnit_Framework_Constraint_Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', + 'PHPUnit_Framework_Constraint_ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', + 'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', + 'PHPUnit_Framework_Constraint_Composite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', + 'PHPUnit_Framework_Constraint_Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Count.php', + 'PHPUnit_Framework_Constraint_DirectoryExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php', + 'PHPUnit_Framework_Constraint_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', + 'PHPUnit_Framework_Constraint_ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', + 'PHPUnit_Framework_Constraint_ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', + 'PHPUnit_Framework_Constraint_ExceptionMessageRegExp' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegExp.php', + 'PHPUnit_Framework_Constraint_FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', + 'PHPUnit_Framework_Constraint_GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', + 'PHPUnit_Framework_Constraint_IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', + 'PHPUnit_Framework_Constraint_IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', + 'PHPUnit_Framework_Constraint_IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', + 'PHPUnit_Framework_Constraint_IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', + 'PHPUnit_Framework_Constraint_IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', + 'PHPUnit_Framework_Constraint_IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', + 'PHPUnit_Framework_Constraint_IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', + 'PHPUnit_Framework_Constraint_IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', + 'PHPUnit_Framework_Constraint_IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', + 'PHPUnit_Framework_Constraint_IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', + 'PHPUnit_Framework_Constraint_IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', + 'PHPUnit_Framework_Constraint_IsReadable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php', + 'PHPUnit_Framework_Constraint_IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', + 'PHPUnit_Framework_Constraint_IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', + 'PHPUnit_Framework_Constraint_IsWritable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php', + 'PHPUnit_Framework_Constraint_JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', + 'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches/ErrorMessageProvider.php', + 'PHPUnit_Framework_Constraint_LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', + 'PHPUnit_Framework_Constraint_Not' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Not.php', + 'PHPUnit_Framework_Constraint_ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', + 'PHPUnit_Framework_Constraint_Or' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Or.php', + 'PHPUnit_Framework_Constraint_PCREMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/PCREMatch.php', + 'PHPUnit_Framework_Constraint_SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', + 'PHPUnit_Framework_Constraint_StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', + 'PHPUnit_Framework_Constraint_StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', + 'PHPUnit_Framework_Constraint_StringMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringMatches.php', + 'PHPUnit_Framework_Constraint_StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', + 'PHPUnit_Framework_Constraint_TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', + 'PHPUnit_Framework_Constraint_TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', + 'PHPUnit_Framework_Constraint_Xor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Xor.php', + 'PHPUnit_Framework_CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_CoveredCodeNotExecutedException.php', + 'PHPUnit_Framework_Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error.php', + 'PHPUnit_Framework_Error_Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', + 'PHPUnit_Framework_Error_Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php', + 'PHPUnit_Framework_Error_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php', + 'PHPUnit_Framework_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception.php', + 'PHPUnit_Framework_ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', + 'PHPUnit_Framework_ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', + 'PHPUnit_Framework_IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php', + 'PHPUnit_Framework_IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', + 'PHPUnit_Framework_IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', + 'PHPUnit_Framework_InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', + 'PHPUnit_Framework_MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_MissingCoversAnnotationException.php', + 'PHPUnit_Framework_MockObject_BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php', + 'PHPUnit_Framework_MockObject_Builder_Identity' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php', + 'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php', + 'PHPUnit_Framework_MockObject_Builder_Match' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php', + 'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php', + 'PHPUnit_Framework_MockObject_Builder_Namespace' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php', + 'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php', + 'PHPUnit_Framework_MockObject_Builder_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php', + 'PHPUnit_Framework_MockObject_Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php', + 'PHPUnit_Framework_MockObject_Generator' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php', + 'PHPUnit_Framework_MockObject_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php', + 'PHPUnit_Framework_MockObject_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php', + 'PHPUnit_Framework_MockObject_Invocation_Object' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php', + 'PHPUnit_Framework_MockObject_Invocation_Static' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php', + 'PHPUnit_Framework_MockObject_Invokable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php', + 'PHPUnit_Framework_MockObject_Matcher' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php', + 'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php', + 'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php', + 'PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php', + 'PHPUnit_Framework_MockObject_Matcher_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php', + 'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php', + 'PHPUnit_Framework_MockObject_Matcher_MethodName' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php', + 'PHPUnit_Framework_MockObject_Matcher_Parameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php', + 'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php', + 'PHPUnit_Framework_MockObject_MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php', + 'PHPUnit_Framework_MockObject_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php', + 'PHPUnit_Framework_MockObject_RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php', + 'PHPUnit_Framework_MockObject_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php', + 'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php', + 'PHPUnit_Framework_MockObject_Stub_Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php', + 'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php', + 'PHPUnit_Framework_MockObject_Stub_Return' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnReference.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php', + 'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php', + 'PHPUnit_Framework_MockObject_Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php', + 'PHPUnit_Framework_OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/OutputError.php', + 'PHPUnit_Framework_RiskyTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTest.php', + 'PHPUnit_Framework_RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTestError.php', + 'PHPUnit_Framework_SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', + 'PHPUnit_Framework_SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php', + 'PHPUnit_Framework_SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', + 'PHPUnit_Framework_SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestError.php', + 'PHPUnit_Framework_SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', + 'PHPUnit_Framework_SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SyntheticError.php', + 'PHPUnit_Framework_Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php', + 'PHPUnit_Framework_TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php', + 'PHPUnit_Framework_TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php', + 'PHPUnit_Framework_TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php', + 'PHPUnit_Framework_TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php', + 'PHPUnit_Framework_TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php', + 'PHPUnit_Framework_TestSuite_DataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite/DataProvider.php', + 'PHPUnit_Framework_UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', + 'PHPUnit_Framework_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Warning.php', + 'PHPUnit_Framework_WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php', + 'PHPUnit_Runner_BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', + 'PHPUnit_Runner_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php', + 'PHPUnit_Runner_Filter_Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php', + 'PHPUnit_Runner_Filter_GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Group.php', + 'PHPUnit_Runner_Filter_Group_Exclude' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Group/Exclude.php', + 'PHPUnit_Runner_Filter_Group_Include' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Group/Include.php', + 'PHPUnit_Runner_Filter_Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Test.php', + 'PHPUnit_Runner_StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', + 'PHPUnit_Runner_TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', + 'PHPUnit_Runner_Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php', + 'PHPUnit_TextUI_Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php', + 'PHPUnit_TextUI_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', + 'PHPUnit_TextUI_TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php', + 'PHPUnit_Util_Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php', + 'PHPUnit_Util_Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Configuration.php', + 'PHPUnit_Util_ConfigurationGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', + 'PHPUnit_Util_ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php', + 'PHPUnit_Util_Fileloader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Fileloader.php', + 'PHPUnit_Util_Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php', + 'PHPUnit_Util_Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php', + 'PHPUnit_Util_Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Getopt.php', + 'PHPUnit_Util_GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php', + 'PHPUnit_Util_InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', + 'PHPUnit_Util_Log_JSON' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JSON.php', + 'PHPUnit_Util_Log_JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php', + 'PHPUnit_Util_Log_TAP' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TAP.php', + 'PHPUnit_Util_Log_TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php', + 'PHPUnit_Util_PHP' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP.php', + 'PHPUnit_Util_PHPTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Util/PHPTest.php', + 'PHPUnit_Util_PHP_Default' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/Default.php', + 'PHPUnit_Util_PHP_Windows' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/Windows.php', + 'PHPUnit_Util_Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Printer.php', + 'PHPUnit_Util_Regex' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Regex.php', + 'PHPUnit_Util_String' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/String.php', + 'PHPUnit_Util_Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php', + 'PHPUnit_Util_TestDox_NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', + 'PHPUnit_Util_TestDox_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', + 'PHPUnit_Util_TestDox_ResultPrinter_HTML' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/HTML.php', + 'PHPUnit_Util_TestDox_ResultPrinter_Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/Text.php', + 'PHPUnit_Util_TestDox_ResultPrinter_XML' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/XML.php', + 'PHPUnit_Util_TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestSuiteIterator.php', + 'PHPUnit_Util_Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php', + 'PHPUnit_Util_XML' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XML.php', + 'PHP_Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php', + 'PHP_TimerTest' => __DIR__ . '/..' . '/phpunit/php-timer/tests/TimerTest.php', + 'PHP_Token' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_TokenTest' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/TokenTest.php', + 'PHP_TokenWithScope' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_TokenWithScopeAndVisibility' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ABSTRACT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AMPERSAND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AND_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ARRAY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ARRAY_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ASYNC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_AWAIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BACKTICK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BAD_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BOOLEAN_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BOOLEAN_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BOOL_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_BREAK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CALLABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CARET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CASE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CATCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLASS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLASS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLASS_NAME_CONSTANT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLONE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLOSE_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLOSE_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLOSE_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CLOSE_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COALESCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COMMA' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_COMPILER_HALT_OFFSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CONCAT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CONST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CONSTANT_ENCAPSED_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CONTINUE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_CURLY_OPEN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ClassTest' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/Token/ClassTest.php', + 'PHP_Token_ClosureTest' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/Token/ClosureTest.php', + 'PHP_Token_DEC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DEFAULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DIR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DIV' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DIV_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOC_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOLLAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOUBLE_ARROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOUBLE_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOUBLE_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_DOUBLE_QUOTES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ELLIPSIS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ELSE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ELSEIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EMPTY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENCAPSED_AND_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDDECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDFOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDFOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDSWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENDWHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_END_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ENUM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EQUALS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EVAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EXCLAMATION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EXIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_EXTENDS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FINAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FINALLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FUNC_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_FunctionTest' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/Token/FunctionTest.php', + 'PHP_Token_GLOBAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_GOTO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_GT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_HALT_COMPILER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IMPLEMENTS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INCLUDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INCLUDE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INLINE_HTML' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INSTANCEOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INSTEADOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INTERFACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_INT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ISSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_GREATER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_NOT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_NOT_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IS_SMALLER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_IncludeTest' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/Token/IncludeTest.php', + 'PHP_Token_Includes' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_InterfaceTest' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/Token/InterfaceTest.php', + 'PHP_Token_JOIN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LAMBDA_ARROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LAMBDA_CP' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LAMBDA_OP' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LINE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LIST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LOGICAL_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LOGICAL_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LOGICAL_XOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_LT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_METHOD_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MINUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MINUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MOD_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_MUL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NAMESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NEW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NS_SEPARATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NULLSAFE_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NUM_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NamespaceTest' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/Token/NamespaceTest.php', + 'PHP_Token_OBJECT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_ONUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OPEN_TAG_WITH_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PERCENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PIPE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PLUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PLUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_POW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_POW_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PRINT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PRIVATE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PROTECTED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_PUBLIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_QUESTION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_REQUIRE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_REQUIRE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_RETURN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SEMICOLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SHAPE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SPACESHIP' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_START_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_STATIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_STRING_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_STRING_VARNAME' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SUPER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_SWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_Stream' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token/Stream.php', + 'PHP_Token_Stream_CachingFactory' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php', + 'PHP_Token_THROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TILDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TRAIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TRAIT_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TRY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TYPE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TYPELIST_GT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_TYPELIST_LT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_UNSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_UNSET_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_USE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_USE_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_VAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_VARIABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_WHERE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_WHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_ATTRIBUTE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_CATEGORY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_CATEGORY_LABEL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_CHILDREN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_LABEL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_REQUIRED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_TAG_GT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_TAG_LT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XHP_TEXT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_YIELD_FROM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'ParentClassWithPrivateAttributes' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ClassWithNonPublicAttributes.php', + 'ParentClassWithProtectedAttributes' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ClassWithNonPublicAttributes.php', + 'ParentSuite' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/Trac/783/ParentSuite.php', + 'Parsedown' => __DIR__ . '/..' . '/erusev/parsedown/Parsedown.php', + 'PartialMockTestClass' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/PartialMockTestClass.php', + 'PhpCollection\\AbstractCollection' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/AbstractCollection.php', + 'PhpCollection\\AbstractMap' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/AbstractMap.php', + 'PhpCollection\\AbstractSequence' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/AbstractSequence.php', + 'PhpCollection\\CollectionInterface' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/CollectionInterface.php', + 'PhpCollection\\EntityLikeObject' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/EntityLikeObject.php', + 'PhpCollection\\Map' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/Map.php', + 'PhpCollection\\MapInterface' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/MapInterface.php', + 'PhpCollection\\ObjectBasics' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasics.php', + 'PhpCollection\\ObjectBasicsHandler' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasicsHandler.php', + 'PhpCollection\\ObjectBasicsHandlerRegistry' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasicsHandlerRegistry.php', + 'PhpCollection\\ObjectBasicsHandler\\DateTimeHandler' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasicsHandler/DateTimeHandler.php', + 'PhpCollection\\ObjectBasicsHandler\\IdentityHandler' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/ObjectBasicsHandler/IdentityHandler.php', + 'PhpCollection\\Sequence' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/Sequence.php', + 'PhpCollection\\SequenceInterface' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/SequenceInterface.php', + 'PhpCollection\\Set' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/Set.php', + 'PhpCollection\\SetInterface' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/SetInterface.php', + 'PhpCollection\\SortableInterface' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/SortableInterface.php', + 'PhpCollection\\SortedSequence' => __DIR__ . '/..' . '/phpcollection/phpcollection/src/PhpCollection/SortedSequence.php', + 'PhpCollection\\Tests\\MapTest' => __DIR__ . '/..' . '/phpcollection/phpcollection/tests/PhpCollection/Tests/MapTest.php', + 'PhpCollection\\Tests\\ObjectThatImplementsBasics' => __DIR__ . '/..' . '/phpcollection/phpcollection/tests/PhpCollection/Tests/SetTest.php', + 'PhpCollection\\Tests\\SequenceTest' => __DIR__ . '/..' . '/phpcollection/phpcollection/tests/PhpCollection/Tests/SequenceTest.php', + 'PhpCollection\\Tests\\SetTest' => __DIR__ . '/..' . '/phpcollection/phpcollection/tests/PhpCollection/Tests/SetTest.php', + 'PhpCollection\\Tests\\SortedSequenceTest' => __DIR__ . '/..' . '/phpcollection/phpcollection/tests/PhpCollection/Tests/SortedSequenceTest.php', + 'PhpOption\\LazyOption' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/LazyOption.php', + 'PhpOption\\None' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/None.php', + 'PhpOption\\Option' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Option.php', + 'PhpOption\\Some' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Some.php', + 'PhpOption\\Tests\\EnsureTest' => __DIR__ . '/..' . '/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php', + 'PhpOption\\Tests\\LazyOptionTest' => __DIR__ . '/..' . '/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php', + 'PhpOption\\Tests\\NoneTest' => __DIR__ . '/..' . '/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php', + 'PhpOption\\Tests\\OptionTest' => __DIR__ . '/..' . '/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php', + 'PhpOption\\Tests\\PerformanceTest' => __DIR__ . '/..' . '/phpoption/phpoption/tests/PhpOption/Tests/PerformanceTest.php', + 'PhpOption\\Tests\\PhpOptionRepo' => __DIR__ . '/..' . '/phpoption/phpoption/tests/PhpOption/Tests/PerformanceTest.php', + 'PhpOption\\Tests\\Repository' => __DIR__ . '/..' . '/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php', + 'PhpOption\\Tests\\SomeTest' => __DIR__ . '/..' . '/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php', + 'PhpOption\\Tests\\TraditionalRepo' => __DIR__ . '/..' . '/phpoption/phpoption/tests/PhpOption/Tests/PerformanceTest.php', + 'PhpParser\\Autoloader' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Autoloader.php', + 'PhpParser\\AutoloaderTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/AutoloaderTest.php', + 'PhpParser\\Builder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder.php', + 'PhpParser\\BuilderAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderAbstract.php', + 'PhpParser\\BuilderFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', + 'PhpParser\\BuilderFactoryTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php', + 'PhpParser\\Builder\\ClassTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Builder/ClassTest.php', + 'PhpParser\\Builder\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', + 'PhpParser\\Builder\\Declaration' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', + 'PhpParser\\Builder\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', + 'PhpParser\\Builder\\FunctionTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php', + 'PhpParser\\Builder\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', + 'PhpParser\\Builder\\InterfaceTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php', + 'PhpParser\\Builder\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', + 'PhpParser\\Builder\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Method.php', + 'PhpParser\\Builder\\MethodTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Builder/MethodTest.php', + 'PhpParser\\Builder\\NamespaceTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php', + 'PhpParser\\Builder\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php', + 'PhpParser\\Builder\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Param.php', + 'PhpParser\\Builder\\ParamTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Builder/ParamTest.php', + 'PhpParser\\Builder\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Property.php', + 'PhpParser\\Builder\\PropertyTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php', + 'PhpParser\\Builder\\TraitTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Builder/TraitTest.php', + 'PhpParser\\Builder\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php', + 'PhpParser\\Builder\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php', + 'PhpParser\\CodeTestAbstract' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/CodeTestAbstract.php', + 'PhpParser\\Comment' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment.php', + 'PhpParser\\CommentTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/CommentTest.php', + 'PhpParser\\Comment\\Doc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php', + 'PhpParser\\DummyNode' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/NodeAbstractTest.php', + 'PhpParser\\Error' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Error.php', + 'PhpParser\\ErrorTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/ErrorTest.php', + 'PhpParser\\InvalidTokenLexer' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/ParserTest.php', + 'PhpParser\\Lexer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer.php', + 'PhpParser\\LexerTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/LexerTest.php', + 'PhpParser\\Lexer\\Emulative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', + 'PhpParser\\Lexer\\EmulativeTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php', + 'PhpParser\\Node' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node.php', + 'PhpParser\\NodeAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', + 'PhpParser\\NodeAbstractTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/NodeAbstractTest.php', + 'PhpParser\\NodeDumper' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeDumper.php', + 'PhpParser\\NodeDumperTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/NodeDumperTest.php', + 'PhpParser\\NodeTraverser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php', + 'PhpParser\\NodeTraverserInterface' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php', + 'PhpParser\\NodeTraverserTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/NodeTraverserTest.php', + 'PhpParser\\NodeVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php', + 'PhpParser\\NodeVisitorAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php', + 'PhpParser\\NodeVisitor\\NameResolver' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', + 'PhpParser\\NodeVisitor\\NameResolverTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php', + 'PhpParser\\Node\\Arg' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', + 'PhpParser\\Node\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', + 'PhpParser\\Node\\Expr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', + 'PhpParser\\Node\\Expr\\ArrayDimFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', + 'PhpParser\\Node\\Expr\\ArrayItem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php', + 'PhpParser\\Node\\Expr\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php', + 'PhpParser\\Node\\Expr\\Assign' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php', + 'PhpParser\\Node\\Expr\\AssignOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php', + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php', + 'PhpParser\\Node\\Expr\\AssignRef' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php', + 'PhpParser\\Node\\Expr\\BinaryOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', + 'PhpParser\\Node\\Expr\\BitwiseNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', + 'PhpParser\\Node\\Expr\\BooleanNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', + 'PhpParser\\Node\\Expr\\Cast' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', + 'PhpParser\\Node\\Expr\\Cast\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', + 'PhpParser\\Node\\Expr\\Cast\\Double' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php', + 'PhpParser\\Node\\Expr\\Cast\\Int_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php', + 'PhpParser\\Node\\Expr\\Cast\\Object_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php', + 'PhpParser\\Node\\Expr\\Cast\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php', + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php', + 'PhpParser\\Node\\Expr\\ClassConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php', + 'PhpParser\\Node\\Expr\\Clone_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php', + 'PhpParser\\Node\\Expr\\Closure' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php', + 'PhpParser\\Node\\Expr\\ClosureUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php', + 'PhpParser\\Node\\Expr\\ConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php', + 'PhpParser\\Node\\Expr\\Empty_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php', + 'PhpParser\\Node\\Expr\\ErrorSuppress' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php', + 'PhpParser\\Node\\Expr\\Eval_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php', + 'PhpParser\\Node\\Expr\\Exit_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php', + 'PhpParser\\Node\\Expr\\FuncCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php', + 'PhpParser\\Node\\Expr\\Include_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php', + 'PhpParser\\Node\\Expr\\Instanceof_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', + 'PhpParser\\Node\\Expr\\Isset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', + 'PhpParser\\Node\\Expr\\List_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', + 'PhpParser\\Node\\Expr\\MethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', + 'PhpParser\\Node\\Expr\\New_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', + 'PhpParser\\Node\\Expr\\PostDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', + 'PhpParser\\Node\\Expr\\PostInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', + 'PhpParser\\Node\\Expr\\PreDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', + 'PhpParser\\Node\\Expr\\PreInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php', + 'PhpParser\\Node\\Expr\\Print_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php', + 'PhpParser\\Node\\Expr\\PropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php', + 'PhpParser\\Node\\Expr\\ShellExec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php', + 'PhpParser\\Node\\Expr\\StaticCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', + 'PhpParser\\Node\\Expr\\Ternary' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', + 'PhpParser\\Node\\Expr\\UnaryMinus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', + 'PhpParser\\Node\\Expr\\UnaryPlus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', + 'PhpParser\\Node\\Expr\\Variable' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', + 'PhpParser\\Node\\Expr\\YieldFrom' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php', + 'PhpParser\\Node\\Expr\\Yield_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', + 'PhpParser\\Node\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', + 'PhpParser\\Node\\Name' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name.php', + 'PhpParser\\Node\\NameTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Node/NameTest.php', + 'PhpParser\\Node\\Name\\FullyQualified' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', + 'PhpParser\\Node\\Name\\Relative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', + 'PhpParser\\Node\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Param.php', + 'PhpParser\\Node\\Scalar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php', + 'PhpParser\\Node\\Scalar\\DNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php', + 'PhpParser\\Node\\Scalar\\Encapsed' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php', + 'PhpParser\\Node\\Scalar\\LNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php', + 'PhpParser\\Node\\Scalar\\MagicConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php', + 'PhpParser\\Node\\Scalar\\MagicConstTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php', + 'PhpParser\\Node\\Scalar\\StringTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php', + 'PhpParser\\Node\\Scalar\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php', + 'PhpParser\\Node\\Stmt' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php', + 'PhpParser\\Node\\Stmt\\Break_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php', + 'PhpParser\\Node\\Stmt\\Case_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php', + 'PhpParser\\Node\\Stmt\\Catch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php', + 'PhpParser\\Node\\Stmt\\ClassConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php', + 'PhpParser\\Node\\Stmt\\ClassLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php', + 'PhpParser\\Node\\Stmt\\ClassMethod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php', + 'PhpParser\\Node\\Stmt\\ClassMethodTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php', + 'PhpParser\\Node\\Stmt\\ClassTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php', + 'PhpParser\\Node\\Stmt\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php', + 'PhpParser\\Node\\Stmt\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php', + 'PhpParser\\Node\\Stmt\\Continue_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php', + 'PhpParser\\Node\\Stmt\\DeclareDeclare' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php', + 'PhpParser\\Node\\Stmt\\Declare_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php', + 'PhpParser\\Node\\Stmt\\Do_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php', + 'PhpParser\\Node\\Stmt\\Echo_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', + 'PhpParser\\Node\\Stmt\\ElseIf_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', + 'PhpParser\\Node\\Stmt\\Else_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', + 'PhpParser\\Node\\Stmt\\For_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', + 'PhpParser\\Node\\Stmt\\Foreach_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php', + 'PhpParser\\Node\\Stmt\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php', + 'PhpParser\\Node\\Stmt\\Global_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php', + 'PhpParser\\Node\\Stmt\\Goto_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php', + 'PhpParser\\Node\\Stmt\\HaltCompiler' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php', + 'PhpParser\\Node\\Stmt\\If_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php', + 'PhpParser\\Node\\Stmt\\InlineHTML' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php', + 'PhpParser\\Node\\Stmt\\InterfaceTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php', + 'PhpParser\\Node\\Stmt\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php', + 'PhpParser\\Node\\Stmt\\Label' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php', + 'PhpParser\\Node\\Stmt\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php', + 'PhpParser\\Node\\Stmt\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php', + 'PhpParser\\Node\\Stmt\\PropertyProperty' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php', + 'PhpParser\\Node\\Stmt\\PropertyTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php', + 'PhpParser\\Node\\Stmt\\Return_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php', + 'PhpParser\\Node\\Stmt\\StaticVar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php', + 'PhpParser\\Node\\Stmt\\Static_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php', + 'PhpParser\\Node\\Stmt\\Switch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php', + 'PhpParser\\Node\\Stmt\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php', + 'PhpParser\\Node\\Stmt\\TraitUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', + 'PhpParser\\Node\\Stmt\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php', + 'PhpParser\\Node\\Stmt\\TryCatch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php', + 'PhpParser\\Node\\Stmt\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php', + 'PhpParser\\Node\\Stmt\\UseUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', + 'PhpParser\\Node\\Stmt\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', + 'PhpParser\\Node\\Stmt\\While_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', + 'PhpParser\\Parser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser.php', + 'PhpParser\\ParserAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', + 'PhpParser\\ParserTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/ParserTest.php', + 'PhpParser\\PrettyPrinterAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', + 'PhpParser\\PrettyPrinterTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php', + 'PhpParser\\PrettyPrinter\\Standard' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', + 'PhpParser\\Serializer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Serializer.php', + 'PhpParser\\Serializer\\XML' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Serializer/XML.php', + 'PhpParser\\Serializer\\XMLTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Serializer/XMLTest.php', + 'PhpParser\\Unserializer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Unserializer.php', + 'PhpParser\\Unserializer\\XML' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Unserializer/XML.php', + 'PhpParser\\Unserializer\\XMLTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Unserializer/XMLTest.php', + 'PhpTestCaseProxy' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Extensions/PhptTestCaseTest.php', + 'Pimple' => __DIR__ . '/..' . '/pimple/pimple/lib/Pimple.php', + 'Pimple\\Tests\\Invokable' => __DIR__ . '/..' . '/pimple/pimple/tests/Pimple/Tests/Invokable.php', + 'Pimple\\Tests\\NonInvokable' => __DIR__ . '/..' . '/pimple/pimple/tests/Pimple/Tests/NonInvokable.php', + 'Pimple\\Tests\\PimpleTest' => __DIR__ . '/..' . '/pimple/pimple/tests/Pimple/Tests/PimpleTest.php', + 'Pimple\\Tests\\Service' => __DIR__ . '/..' . '/pimple/pimple/tests/Pimple/Tests/Service.php', + 'Prophecy\\Argument' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument.php', + 'Prophecy\\Argument\\ArgumentsWildcard' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php', + 'Prophecy\\Argument\\Token\\AnyValueToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValueToken.php', + 'Prophecy\\Argument\\Token\\AnyValuesToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValuesToken.php', + 'Prophecy\\Argument\\Token\\ApproximateValueToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/ApproximateValueToken.php', + 'Prophecy\\Argument\\Token\\ArrayCountToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayCountToken.php', + 'Prophecy\\Argument\\Token\\ArrayEntryToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEntryToken.php', + 'Prophecy\\Argument\\Token\\ArrayEveryEntryToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEveryEntryToken.php', + 'Prophecy\\Argument\\Token\\CallbackToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/CallbackToken.php', + 'Prophecy\\Argument\\Token\\ExactValueToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/ExactValueToken.php', + 'Prophecy\\Argument\\Token\\IdenticalValueToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/IdenticalValueToken.php', + 'Prophecy\\Argument\\Token\\LogicalAndToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalAndToken.php', + 'Prophecy\\Argument\\Token\\LogicalNotToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalNotToken.php', + 'Prophecy\\Argument\\Token\\ObjectStateToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php', + 'Prophecy\\Argument\\Token\\StringContainsToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/StringContainsToken.php', + 'Prophecy\\Argument\\Token\\TokenInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/TokenInterface.php', + 'Prophecy\\Argument\\Token\\TypeToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/TypeToken.php', + 'Prophecy\\Call\\Call' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Call/Call.php', + 'Prophecy\\Call\\CallCenter' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Call/CallCenter.php', + 'Prophecy\\Comparator\\ClosureComparator' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Comparator/ClosureComparator.php', + 'Prophecy\\Comparator\\Factory' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Comparator/Factory.php', + 'Prophecy\\Comparator\\ProphecyComparator' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Comparator/ProphecyComparator.php', + 'Prophecy\\Doubler\\CachedDoubler' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/CachedDoubler.php', + 'Prophecy\\Doubler\\ClassPatch\\ClassPatchInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ClassPatchInterface.php', + 'Prophecy\\Doubler\\ClassPatch\\DisableConstructorPatch' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/DisableConstructorPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\HhvmExceptionPatch' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/HhvmExceptionPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\KeywordPatch' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\MagicCallPatch' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\ProphecySubjectPatch' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\ReflectionClassNewInstancePatch' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatch.php', + 'Prophecy\\Doubler\\ClassPatch\\SplFileInfoPatch' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php', + 'Prophecy\\Doubler\\ClassPatch\\TraversablePatch' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/TraversablePatch.php', + 'Prophecy\\Doubler\\DoubleInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/DoubleInterface.php', + 'Prophecy\\Doubler\\Doubler' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/Doubler.php', + 'Prophecy\\Doubler\\Generator\\ClassCodeGenerator' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php', + 'Prophecy\\Doubler\\Generator\\ClassCreator' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCreator.php', + 'Prophecy\\Doubler\\Generator\\ClassMirror' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php', + 'Prophecy\\Doubler\\Generator\\Node\\ArgumentNode' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php', + 'Prophecy\\Doubler\\Generator\\Node\\ClassNode' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php', + 'Prophecy\\Doubler\\Generator\\Node\\MethodNode' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php', + 'Prophecy\\Doubler\\Generator\\ReflectionInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ReflectionInterface.php', + 'Prophecy\\Doubler\\Generator\\TypeHintReference' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/TypeHintReference.php', + 'Prophecy\\Doubler\\LazyDouble' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/LazyDouble.php', + 'Prophecy\\Doubler\\NameGenerator' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Doubler/NameGenerator.php', + 'Prophecy\\Exception\\Call\\UnexpectedCallException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Call/UnexpectedCallException.php', + 'Prophecy\\Exception\\Doubler\\ClassCreatorException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassCreatorException.php', + 'Prophecy\\Exception\\Doubler\\ClassMirrorException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassMirrorException.php', + 'Prophecy\\Exception\\Doubler\\ClassNotFoundException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassNotFoundException.php', + 'Prophecy\\Exception\\Doubler\\DoubleException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoubleException.php', + 'Prophecy\\Exception\\Doubler\\DoublerException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoublerException.php', + 'Prophecy\\Exception\\Doubler\\InterfaceNotFoundException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/InterfaceNotFoundException.php', + 'Prophecy\\Exception\\Doubler\\MethodNotExtendableException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotExtendableException.php', + 'Prophecy\\Exception\\Doubler\\MethodNotFoundException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotFoundException.php', + 'Prophecy\\Exception\\Doubler\\ReturnByReferenceException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ReturnByReferenceException.php', + 'Prophecy\\Exception\\Exception' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Exception.php', + 'Prophecy\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/InvalidArgumentException.php', + 'Prophecy\\Exception\\Prediction\\AggregateException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/AggregateException.php', + 'Prophecy\\Exception\\Prediction\\FailedPredictionException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/FailedPredictionException.php', + 'Prophecy\\Exception\\Prediction\\NoCallsException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/NoCallsException.php', + 'Prophecy\\Exception\\Prediction\\PredictionException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/PredictionException.php', + 'Prophecy\\Exception\\Prediction\\UnexpectedCallsCountException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsCountException.php', + 'Prophecy\\Exception\\Prediction\\UnexpectedCallsException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsException.php', + 'Prophecy\\Exception\\Prophecy\\MethodProphecyException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/MethodProphecyException.php', + 'Prophecy\\Exception\\Prophecy\\ObjectProphecyException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ObjectProphecyException.php', + 'Prophecy\\Exception\\Prophecy\\ProphecyException' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ProphecyException.php', + 'Prophecy\\PhpDocumentor\\ClassAndInterfaceTagRetriever' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassAndInterfaceTagRetriever.php', + 'Prophecy\\PhpDocumentor\\ClassTagRetriever' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassTagRetriever.php', + 'Prophecy\\PhpDocumentor\\LegacyClassTagRetriever' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/LegacyClassTagRetriever.php', + 'Prophecy\\PhpDocumentor\\MethodTagRetrieverInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/MethodTagRetrieverInterface.php', + 'Prophecy\\Prediction\\CallPrediction' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prediction/CallPrediction.php', + 'Prophecy\\Prediction\\CallTimesPrediction' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prediction/CallTimesPrediction.php', + 'Prophecy\\Prediction\\CallbackPrediction' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prediction/CallbackPrediction.php', + 'Prophecy\\Prediction\\NoCallsPrediction' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prediction/NoCallsPrediction.php', + 'Prophecy\\Prediction\\PredictionInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prediction/PredictionInterface.php', + 'Prophecy\\Promise\\CallbackPromise' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Promise/CallbackPromise.php', + 'Prophecy\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Promise/PromiseInterface.php', + 'Prophecy\\Promise\\ReturnArgumentPromise' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php', + 'Prophecy\\Promise\\ReturnPromise' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Promise/ReturnPromise.php', + 'Prophecy\\Promise\\ThrowPromise' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php', + 'Prophecy\\Prophecy\\MethodProphecy' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php', + 'Prophecy\\Prophecy\\ObjectProphecy' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php', + 'Prophecy\\Prophecy\\ProphecyInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prophecy/ProphecyInterface.php', + 'Prophecy\\Prophecy\\ProphecySubjectInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prophecy/ProphecySubjectInterface.php', + 'Prophecy\\Prophecy\\Revealer' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prophecy/Revealer.php', + 'Prophecy\\Prophecy\\RevealerInterface' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prophecy/RevealerInterface.php', + 'Prophecy\\Prophet' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prophet.php', + 'Prophecy\\Util\\ExportUtil' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php', + 'Prophecy\\Util\\StringUtil' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Util/StringUtil.php', + 'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', + 'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', + 'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', + 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php', + 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php', + 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php', + 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareInterface.php', + 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareTrait.php', + 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', + 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', + 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', + 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'RequirementsClassBeforeClassHookTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/RequirementsClassBeforeClassHookTest.php', + 'RequirementsClassDocBlockTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/RequirementsClassDocBlockTest.php', + 'RequirementsTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/RequirementsTest.php', + 'Runner_BaseTestRunnerTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Runner/BaseTestRunnerTest.php', + 'SampleArrayAccess' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/SampleArrayAccess.php', + 'SampleClass' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/SampleClass.php', + 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php', + 'SebastianBergmann\\CodeCoverage\\CodeCoverageTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/tests/CodeCoverageTest.php', + 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\HHVM' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/HHVM.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Xdebug.php', + 'SebastianBergmann\\CodeCoverage\\Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Exception.php', + 'SebastianBergmann\\CodeCoverage\\Filter' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Filter.php', + 'SebastianBergmann\\CodeCoverage\\FilterTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/tests/FilterTest.php', + 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php', + 'SebastianBergmann\\CodeCoverage\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.php', + 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/AbstractNode.php', + 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Builder.php', + 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Directory.php', + 'SebastianBergmann\\CodeCoverage\\Node\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/File.php', + 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Iterator.php', + 'SebastianBergmann\\CodeCoverage\\Report\\BuilderTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/tests/BuilderTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Clover.php', + 'SebastianBergmann\\CodeCoverage\\Report\\CloverTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/tests/CloverTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Crap4j.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Crap4jTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/tests/Crap4jTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Facade.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\HTMLTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/tests/HTMLTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', + 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/PHP.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Text.php', + 'SebastianBergmann\\CodeCoverage\\Report\\TextTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/tests/TextTest.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/File.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Method.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\XMLTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/tests/XMLTest.php', + 'SebastianBergmann\\CodeCoverage\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php', + 'SebastianBergmann\\CodeCoverage\\TestCase' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/TestCase.php', + 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', + 'SebastianBergmann\\CodeCoverage\\Util' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util.php', + 'SebastianBergmann\\CodeCoverage\\UtilTest' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/tests/UtilTest.php', + 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', + 'SebastianBergmann\\CodeUnitReverseLookup\\WizardTest' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/tests/WizardTest.php', + 'SebastianBergmann\\Comparator\\ArrayComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ArrayComparator.php', + 'SebastianBergmann\\Comparator\\ArrayComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/ArrayComparatorTest.php', + 'SebastianBergmann\\Comparator\\Author' => __DIR__ . '/..' . '/sebastian/comparator/tests/_files/Author.php', + 'SebastianBergmann\\Comparator\\Book' => __DIR__ . '/..' . '/sebastian/comparator/tests/_files/Book.php', + 'SebastianBergmann\\Comparator\\ClassWithToString' => __DIR__ . '/..' . '/sebastian/comparator/tests/_files/ClassWithToString.php', + 'SebastianBergmann\\Comparator\\Comparator' => __DIR__ . '/..' . '/sebastian/comparator/src/Comparator.php', + 'SebastianBergmann\\Comparator\\ComparisonFailure' => __DIR__ . '/..' . '/sebastian/comparator/src/ComparisonFailure.php', + 'SebastianBergmann\\Comparator\\DOMNodeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DOMNodeComparator.php', + 'SebastianBergmann\\Comparator\\DOMNodeComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/DOMNodeComparatorTest.php', + 'SebastianBergmann\\Comparator\\DateTimeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DateTimeComparator.php', + 'SebastianBergmann\\Comparator\\DateTimeComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/DateTimeComparatorTest.php', + 'SebastianBergmann\\Comparator\\DoubleComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DoubleComparator.php', + 'SebastianBergmann\\Comparator\\DoubleComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/DoubleComparatorTest.php', + 'SebastianBergmann\\Comparator\\ExceptionComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ExceptionComparator.php', + 'SebastianBergmann\\Comparator\\ExceptionComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/ExceptionComparatorTest.php', + 'SebastianBergmann\\Comparator\\Factory' => __DIR__ . '/..' . '/sebastian/comparator/src/Factory.php', + 'SebastianBergmann\\Comparator\\FactoryTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/FactoryTest.php', + 'SebastianBergmann\\Comparator\\MockObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/MockObjectComparator.php', + 'SebastianBergmann\\Comparator\\MockObjectComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/MockObjectComparatorTest.php', + 'SebastianBergmann\\Comparator\\NumericComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/NumericComparator.php', + 'SebastianBergmann\\Comparator\\NumericComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/NumericComparatorTest.php', + 'SebastianBergmann\\Comparator\\ObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ObjectComparator.php', + 'SebastianBergmann\\Comparator\\ObjectComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/ObjectComparatorTest.php', + 'SebastianBergmann\\Comparator\\ResourceComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ResourceComparator.php', + 'SebastianBergmann\\Comparator\\ResourceComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/ResourceComparatorTest.php', + 'SebastianBergmann\\Comparator\\SampleClass' => __DIR__ . '/..' . '/sebastian/comparator/tests/_files/SampleClass.php', + 'SebastianBergmann\\Comparator\\ScalarComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ScalarComparator.php', + 'SebastianBergmann\\Comparator\\ScalarComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/ScalarComparatorTest.php', + 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/SplObjectStorageComparator.php', + 'SebastianBergmann\\Comparator\\SplObjectStorageComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/SplObjectStorageComparatorTest.php', + 'SebastianBergmann\\Comparator\\Struct' => __DIR__ . '/..' . '/sebastian/comparator/tests/_files/Struct.php', + 'SebastianBergmann\\Comparator\\TestClass' => __DIR__ . '/..' . '/sebastian/comparator/tests/_files/TestClass.php', + 'SebastianBergmann\\Comparator\\TestClassComparator' => __DIR__ . '/..' . '/sebastian/comparator/tests/_files/TestClassComparator.php', + 'SebastianBergmann\\Comparator\\TypeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/TypeComparator.php', + 'SebastianBergmann\\Comparator\\TypeComparatorTest' => __DIR__ . '/..' . '/sebastian/comparator/tests/TypeComparatorTest.php', + 'SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php', + 'SebastianBergmann\\Diff\\ChunkTest' => __DIR__ . '/..' . '/sebastian/diff/tests/ChunkTest.php', + 'SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php', + 'SebastianBergmann\\Diff\\DiffTest' => __DIR__ . '/..' . '/sebastian/diff/tests/DiffTest.php', + 'SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php', + 'SebastianBergmann\\Diff\\DifferTest' => __DIR__ . '/..' . '/sebastian/diff/tests/DifferTest.php', + 'SebastianBergmann\\Diff\\LCS\\LongestCommonSubsequence' => __DIR__ . '/..' . '/sebastian/diff/src/LCS/LongestCommonSubsequence.php', + 'SebastianBergmann\\Diff\\LCS\\LongestCommonSubsequenceTest' => __DIR__ . '/..' . '/sebastian/diff/tests/LCS/LongestCommonSubsequenceTest.php', + 'SebastianBergmann\\Diff\\LCS\\MemoryEfficientImplementation' => __DIR__ . '/..' . '/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php', + 'SebastianBergmann\\Diff\\LCS\\MemoryEfficientImplementationTest' => __DIR__ . '/..' . '/sebastian/diff/tests/LCS/MemoryEfficientImplementationTest.php', + 'SebastianBergmann\\Diff\\LCS\\TimeEfficientImplementation' => __DIR__ . '/..' . '/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php', + 'SebastianBergmann\\Diff\\LCS\\TimeEfficientImplementationTest' => __DIR__ . '/..' . '/sebastian/diff/tests/LCS/TimeEfficientImplementationTest.php', + 'SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php', + 'SebastianBergmann\\Diff\\LineTest' => __DIR__ . '/..' . '/sebastian/diff/tests/LineTest.php', + 'SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php', + 'SebastianBergmann\\Diff\\ParserTest' => __DIR__ . '/..' . '/sebastian/diff/tests/ParserTest.php', + 'SebastianBergmann\\Environment\\Console' => __DIR__ . '/..' . '/sebastian/environment/src/Console.php', + 'SebastianBergmann\\Environment\\ConsoleTest' => __DIR__ . '/..' . '/sebastian/environment/tests/ConsoleTest.php', + 'SebastianBergmann\\Environment\\Runtime' => __DIR__ . '/..' . '/sebastian/environment/src/Runtime.php', + 'SebastianBergmann\\Environment\\RuntimeTest' => __DIR__ . '/..' . '/sebastian/environment/tests/RuntimeTest.php', + 'SebastianBergmann\\Exporter\\Exporter' => __DIR__ . '/..' . '/sebastian/exporter/src/Exporter.php', + 'SebastianBergmann\\Exporter\\ExporterTest' => __DIR__ . '/..' . '/sebastian/exporter/tests/ExporterTest.php', + 'SebastianBergmann\\GlobalState\\Blacklist' => __DIR__ . '/..' . '/sebastian/global-state/src/Blacklist.php', + 'SebastianBergmann\\GlobalState\\BlacklistTest' => __DIR__ . '/..' . '/sebastian/global-state/tests/BlacklistTest.php', + 'SebastianBergmann\\GlobalState\\CodeExporter' => __DIR__ . '/..' . '/sebastian/global-state/src/CodeExporter.php', + 'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/Exception.php', + 'SebastianBergmann\\GlobalState\\Restorer' => __DIR__ . '/..' . '/sebastian/global-state/src/Restorer.php', + 'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/RuntimeException.php', + 'SebastianBergmann\\GlobalState\\Snapshot' => __DIR__ . '/..' . '/sebastian/global-state/src/Snapshot.php', + 'SebastianBergmann\\GlobalState\\SnapshotTest' => __DIR__ . '/..' . '/sebastian/global-state/tests/SnapshotTest.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedChildClass' => __DIR__ . '/..' . '/sebastian/global-state/tests/_fixture/BlacklistedChildClass.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedClass' => __DIR__ . '/..' . '/sebastian/global-state/tests/_fixture/BlacklistedClass.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedImplementor' => __DIR__ . '/..' . '/sebastian/global-state/tests/_fixture/BlacklistedImplementor.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedInterface' => __DIR__ . '/..' . '/sebastian/global-state/tests/_fixture/BlacklistedInterface.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\SnapshotClass' => __DIR__ . '/..' . '/sebastian/global-state/tests/_fixture/SnapshotClass.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\SnapshotDomDocument' => __DIR__ . '/..' . '/sebastian/global-state/tests/_fixture/SnapshotDomDocument.php', + 'SebastianBergmann\\GlobalState\\TestFixture\\SnapshotTrait' => __DIR__ . '/..' . '/sebastian/global-state/tests/_fixture/SnapshotTrait.php', + 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Enumerator.php', + 'SebastianBergmann\\ObjectEnumerator\\EnumeratorTest' => __DIR__ . '/..' . '/sebastian/object-enumerator/tests/EnumeratorTest.php', + 'SebastianBergmann\\ObjectEnumerator\\Exception' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Exception.php', + 'SebastianBergmann\\ObjectEnumerator\\Fixtures\\ExceptionThrower' => __DIR__ . '/..' . '/sebastian/object-enumerator/tests/Fixtures/ExceptionThrower.php', + 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/InvalidArgumentException.php', + 'SebastianBergmann\\RecursionContext\\Context' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Context.php', + 'SebastianBergmann\\RecursionContext\\ContextTest' => __DIR__ . '/..' . '/sebastian/recursion-context/tests/ContextTest.php', + 'SebastianBergmann\\RecursionContext\\Exception' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Exception.php', + 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/recursion-context/src/InvalidArgumentException.php', + 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => __DIR__ . '/..' . '/sebastian/resource-operations/src/ResourceOperations.php', + 'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php', + 'Seld\\JsonLint\\DuplicateKeyException' => __DIR__ . '/..' . '/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php', + 'Seld\\JsonLint\\JsonParser' => __DIR__ . '/..' . '/seld/jsonlint/src/Seld/JsonLint/JsonParser.php', + 'Seld\\JsonLint\\Lexer' => __DIR__ . '/..' . '/seld/jsonlint/src/Seld/JsonLint/Lexer.php', + 'Seld\\JsonLint\\ParsingException' => __DIR__ . '/..' . '/seld/jsonlint/src/Seld/JsonLint/ParsingException.php', + 'Seld\\JsonLint\\Undefined' => __DIR__ . '/..' . '/seld/jsonlint/src/Seld/JsonLint/Undefined.php', + 'Singleton' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Singleton.php', + 'SingletonClass' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/SingletonClass.php', + 'SomeClass' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/SomeClass.php', + 'StackTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/StackTest.php', + 'StaticMockTestClass' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/StaticMockTestClass.php', + 'StopOnWarningTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/StopOnWarningTestSuite.php', + 'StopsOnWarningTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/StopsOnWarningTest.php', + 'StringableClass' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/StringableClass.php', + 'Struct' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Struct.php', + 'Success' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/Success.php', + 'Symfony\\Component\\Config\\ConfigCache' => __DIR__ . '/..' . '/symfony/config/ConfigCache.php', + 'Symfony\\Component\\Config\\ConfigCacheFactory' => __DIR__ . '/..' . '/symfony/config/ConfigCacheFactory.php', + 'Symfony\\Component\\Config\\ConfigCacheFactoryInterface' => __DIR__ . '/..' . '/symfony/config/ConfigCacheFactoryInterface.php', + 'Symfony\\Component\\Config\\ConfigCacheInterface' => __DIR__ . '/..' . '/symfony/config/ConfigCacheInterface.php', + 'Symfony\\Component\\Config\\Definition\\ArrayNode' => __DIR__ . '/..' . '/symfony/config/Definition/ArrayNode.php', + 'Symfony\\Component\\Config\\Definition\\BaseNode' => __DIR__ . '/..' . '/symfony/config/Definition/BaseNode.php', + 'Symfony\\Component\\Config\\Definition\\BooleanNode' => __DIR__ . '/..' . '/symfony/config/Definition/BooleanNode.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ArrayNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/ArrayNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\BooleanNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/BooleanNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\EnumNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/EnumNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ExprBuilder' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/ExprBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\FloatNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/FloatNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\IntegerNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/IntegerNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\MergeBuilder' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/MergeBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NodeBuilder' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/NodeBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/NodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NodeParentInterface' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/NodeParentInterface.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NormalizationBuilder' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/NormalizationBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\NumericNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/NumericNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ParentNodeDefinitionInterface' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ScalarNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/ScalarNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\TreeBuilder' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/TreeBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\ValidationBuilder' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/ValidationBuilder.php', + 'Symfony\\Component\\Config\\Definition\\Builder\\VariableNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/VariableNodeDefinition.php', + 'Symfony\\Component\\Config\\Definition\\ConfigurationInterface' => __DIR__ . '/..' . '/symfony/config/Definition/ConfigurationInterface.php', + 'Symfony\\Component\\Config\\Definition\\Dumper\\XmlReferenceDumper' => __DIR__ . '/..' . '/symfony/config/Definition/Dumper/XmlReferenceDumper.php', + 'Symfony\\Component\\Config\\Definition\\Dumper\\YamlReferenceDumper' => __DIR__ . '/..' . '/symfony/config/Definition/Dumper/YamlReferenceDumper.php', + 'Symfony\\Component\\Config\\Definition\\EnumNode' => __DIR__ . '/..' . '/symfony/config/Definition/EnumNode.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\DuplicateKeyException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/DuplicateKeyException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\Exception' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/Exception.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\ForbiddenOverwriteException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/ForbiddenOverwriteException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\InvalidConfigurationException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/InvalidConfigurationException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\InvalidDefinitionException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/InvalidDefinitionException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\InvalidTypeException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/InvalidTypeException.php', + 'Symfony\\Component\\Config\\Definition\\Exception\\UnsetKeyException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/UnsetKeyException.php', + 'Symfony\\Component\\Config\\Definition\\FloatNode' => __DIR__ . '/..' . '/symfony/config/Definition/FloatNode.php', + 'Symfony\\Component\\Config\\Definition\\IntegerNode' => __DIR__ . '/..' . '/symfony/config/Definition/IntegerNode.php', + 'Symfony\\Component\\Config\\Definition\\NodeInterface' => __DIR__ . '/..' . '/symfony/config/Definition/NodeInterface.php', + 'Symfony\\Component\\Config\\Definition\\NumericNode' => __DIR__ . '/..' . '/symfony/config/Definition/NumericNode.php', + 'Symfony\\Component\\Config\\Definition\\Processor' => __DIR__ . '/..' . '/symfony/config/Definition/Processor.php', + 'Symfony\\Component\\Config\\Definition\\PrototypeNodeInterface' => __DIR__ . '/..' . '/symfony/config/Definition/PrototypeNodeInterface.php', + 'Symfony\\Component\\Config\\Definition\\PrototypedArrayNode' => __DIR__ . '/..' . '/symfony/config/Definition/PrototypedArrayNode.php', + 'Symfony\\Component\\Config\\Definition\\ReferenceDumper' => __DIR__ . '/..' . '/symfony/config/Definition/ReferenceDumper.php', + 'Symfony\\Component\\Config\\Definition\\ScalarNode' => __DIR__ . '/..' . '/symfony/config/Definition/ScalarNode.php', + 'Symfony\\Component\\Config\\Definition\\VariableNode' => __DIR__ . '/..' . '/symfony/config/Definition/VariableNode.php', + 'Symfony\\Component\\Config\\Exception\\FileLoaderImportCircularReferenceException' => __DIR__ . '/..' . '/symfony/config/Exception/FileLoaderImportCircularReferenceException.php', + 'Symfony\\Component\\Config\\Exception\\FileLoaderLoadException' => __DIR__ . '/..' . '/symfony/config/Exception/FileLoaderLoadException.php', + 'Symfony\\Component\\Config\\FileLocator' => __DIR__ . '/..' . '/symfony/config/FileLocator.php', + 'Symfony\\Component\\Config\\FileLocatorInterface' => __DIR__ . '/..' . '/symfony/config/FileLocatorInterface.php', + 'Symfony\\Component\\Config\\Loader\\DelegatingLoader' => __DIR__ . '/..' . '/symfony/config/Loader/DelegatingLoader.php', + 'Symfony\\Component\\Config\\Loader\\FileLoader' => __DIR__ . '/..' . '/symfony/config/Loader/FileLoader.php', + 'Symfony\\Component\\Config\\Loader\\Loader' => __DIR__ . '/..' . '/symfony/config/Loader/Loader.php', + 'Symfony\\Component\\Config\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/symfony/config/Loader/LoaderInterface.php', + 'Symfony\\Component\\Config\\Loader\\LoaderResolver' => __DIR__ . '/..' . '/symfony/config/Loader/LoaderResolver.php', + 'Symfony\\Component\\Config\\Loader\\LoaderResolverInterface' => __DIR__ . '/..' . '/symfony/config/Loader/LoaderResolverInterface.php', + 'Symfony\\Component\\Config\\ResourceCheckerConfigCache' => __DIR__ . '/..' . '/symfony/config/ResourceCheckerConfigCache.php', + 'Symfony\\Component\\Config\\ResourceCheckerConfigCacheFactory' => __DIR__ . '/..' . '/symfony/config/ResourceCheckerConfigCacheFactory.php', + 'Symfony\\Component\\Config\\ResourceCheckerInterface' => __DIR__ . '/..' . '/symfony/config/ResourceCheckerInterface.php', + 'Symfony\\Component\\Config\\Resource\\BCResourceInterfaceChecker' => __DIR__ . '/..' . '/symfony/config/Resource/BCResourceInterfaceChecker.php', + 'Symfony\\Component\\Config\\Resource\\DirectoryResource' => __DIR__ . '/..' . '/symfony/config/Resource/DirectoryResource.php', + 'Symfony\\Component\\Config\\Resource\\FileExistenceResource' => __DIR__ . '/..' . '/symfony/config/Resource/FileExistenceResource.php', + 'Symfony\\Component\\Config\\Resource\\FileResource' => __DIR__ . '/..' . '/symfony/config/Resource/FileResource.php', + 'Symfony\\Component\\Config\\Resource\\ResourceInterface' => __DIR__ . '/..' . '/symfony/config/Resource/ResourceInterface.php', + 'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceChecker' => __DIR__ . '/..' . '/symfony/config/Resource/SelfCheckingResourceChecker.php', + 'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceInterface' => __DIR__ . '/..' . '/symfony/config/Resource/SelfCheckingResourceInterface.php', + 'Symfony\\Component\\Config\\Util\\XmlUtils' => __DIR__ . '/..' . '/symfony/config/Util/XmlUtils.php', + 'Symfony\\Component\\Console\\Application' => __DIR__ . '/..' . '/symfony/console/Application.php', + 'Symfony\\Component\\Console\\Command\\Command' => __DIR__ . '/..' . '/symfony/console/Command/Command.php', + 'Symfony\\Component\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/symfony/console/Command/HelpCommand.php', + 'Symfony\\Component\\Console\\Command\\ListCommand' => __DIR__ . '/..' . '/symfony/console/Command/ListCommand.php', + 'Symfony\\Component\\Console\\ConsoleEvents' => __DIR__ . '/..' . '/symfony/console/ConsoleEvents.php', + 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => __DIR__ . '/..' . '/symfony/console/Descriptor/ApplicationDescription.php', + 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/Descriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => __DIR__ . '/..' . '/symfony/console/Descriptor/DescriptorInterface.php', + 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/JsonDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/MarkdownDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/TextDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/XmlDescriptor.php', + 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleCommandEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleExceptionEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleExceptionEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleTerminateEvent.php', + 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/CommandNotFoundException.php', + 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/console/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidOptionException.php', + 'Symfony\\Component\\Console\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/console/Exception/LogicException.php', + 'Symfony\\Component\\Console\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/console/Exception/RuntimeException.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatter.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterInterface.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyle.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleStack.php', + 'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DebugFormatterHelper.php', + 'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DescriptorHelper.php', + 'Symfony\\Component\\Console\\Helper\\DialogHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DialogHelper.php', + 'Symfony\\Component\\Console\\Helper\\FormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/FormatterHelper.php', + 'Symfony\\Component\\Console\\Helper\\Helper' => __DIR__ . '/..' . '/symfony/console/Helper/Helper.php', + 'Symfony\\Component\\Console\\Helper\\HelperInterface' => __DIR__ . '/..' . '/symfony/console/Helper/HelperInterface.php', + 'Symfony\\Component\\Console\\Helper\\HelperSet' => __DIR__ . '/..' . '/symfony/console/Helper/HelperSet.php', + 'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => __DIR__ . '/..' . '/symfony/console/Helper/InputAwareHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProcessHelper' => __DIR__ . '/..' . '/symfony/console/Helper/ProcessHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProgressBar' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressBar.php', + 'Symfony\\Component\\Console\\Helper\\ProgressHelper' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressIndicator.php', + 'Symfony\\Component\\Console\\Helper\\QuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/QuestionHelper.php', + 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/SymfonyQuestionHelper.php', + 'Symfony\\Component\\Console\\Helper\\Table' => __DIR__ . '/..' . '/symfony/console/Helper/Table.php', + 'Symfony\\Component\\Console\\Helper\\TableCell' => __DIR__ . '/..' . '/symfony/console/Helper/TableCell.php', + 'Symfony\\Component\\Console\\Helper\\TableHelper' => __DIR__ . '/..' . '/symfony/console/Helper/TableHelper.php', + 'Symfony\\Component\\Console\\Helper\\TableSeparator' => __DIR__ . '/..' . '/symfony/console/Helper/TableSeparator.php', + 'Symfony\\Component\\Console\\Helper\\TableStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableStyle.php', + 'Symfony\\Component\\Console\\Input\\ArgvInput' => __DIR__ . '/..' . '/symfony/console/Input/ArgvInput.php', + 'Symfony\\Component\\Console\\Input\\ArrayInput' => __DIR__ . '/..' . '/symfony/console/Input/ArrayInput.php', + 'Symfony\\Component\\Console\\Input\\Input' => __DIR__ . '/..' . '/symfony/console/Input/Input.php', + 'Symfony\\Component\\Console\\Input\\InputArgument' => __DIR__ . '/..' . '/symfony/console/Input/InputArgument.php', + 'Symfony\\Component\\Console\\Input\\InputAwareInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputAwareInterface.php', + 'Symfony\\Component\\Console\\Input\\InputDefinition' => __DIR__ . '/..' . '/symfony/console/Input/InputDefinition.php', + 'Symfony\\Component\\Console\\Input\\InputInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputInterface.php', + 'Symfony\\Component\\Console\\Input\\InputOption' => __DIR__ . '/..' . '/symfony/console/Input/InputOption.php', + 'Symfony\\Component\\Console\\Input\\StringInput' => __DIR__ . '/..' . '/symfony/console/Input/StringInput.php', + 'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => __DIR__ . '/..' . '/symfony/console/Logger/ConsoleLogger.php', + 'Symfony\\Component\\Console\\Output\\BufferedOutput' => __DIR__ . '/..' . '/symfony/console/Output/BufferedOutput.php', + 'Symfony\\Component\\Console\\Output\\ConsoleOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutput.php', + 'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutputInterface.php', + 'Symfony\\Component\\Console\\Output\\NullOutput' => __DIR__ . '/..' . '/symfony/console/Output/NullOutput.php', + 'Symfony\\Component\\Console\\Output\\Output' => __DIR__ . '/..' . '/symfony/console/Output/Output.php', + 'Symfony\\Component\\Console\\Output\\OutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/OutputInterface.php', + 'Symfony\\Component\\Console\\Output\\StreamOutput' => __DIR__ . '/..' . '/symfony/console/Output/StreamOutput.php', + 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ChoiceQuestion.php', + 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ConfirmationQuestion.php', + 'Symfony\\Component\\Console\\Question\\Question' => __DIR__ . '/..' . '/symfony/console/Question/Question.php', + 'Symfony\\Component\\Console\\Shell' => __DIR__ . '/..' . '/symfony/console/Shell.php', + 'Symfony\\Component\\Console\\Style\\OutputStyle' => __DIR__ . '/..' . '/symfony/console/Style/OutputStyle.php', + 'Symfony\\Component\\Console\\Style\\StyleInterface' => __DIR__ . '/..' . '/symfony/console/Style/StyleInterface.php', + 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => __DIR__ . '/..' . '/symfony/console/Style/SymfonyStyle.php', + 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => __DIR__ . '/..' . '/symfony/console/Tester/ApplicationTester.php', + 'Symfony\\Component\\Console\\Tester\\CommandTester' => __DIR__ . '/..' . '/symfony/console/Tester/CommandTester.php', + 'Symfony\\Component\\Debug\\BufferingLogger' => __DIR__ . '/..' . '/symfony/debug/BufferingLogger.php', + 'Symfony\\Component\\Debug\\Debug' => __DIR__ . '/..' . '/symfony/debug/Debug.php', + 'Symfony\\Component\\Debug\\DebugClassLoader' => __DIR__ . '/..' . '/symfony/debug/DebugClassLoader.php', + 'Symfony\\Component\\Debug\\ErrorHandler' => __DIR__ . '/..' . '/symfony/debug/ErrorHandler.php', + 'Symfony\\Component\\Debug\\ExceptionHandler' => __DIR__ . '/..' . '/symfony/debug/ExceptionHandler.php', + 'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => __DIR__ . '/..' . '/symfony/debug/Exception/ClassNotFoundException.php', + 'Symfony\\Component\\Debug\\Exception\\ContextErrorException' => __DIR__ . '/..' . '/symfony/debug/Exception/ContextErrorException.php', + 'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => __DIR__ . '/..' . '/symfony/debug/Exception/FatalErrorException.php', + 'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => __DIR__ . '/..' . '/symfony/debug/Exception/FatalThrowableError.php', + 'Symfony\\Component\\Debug\\Exception\\FlattenException' => __DIR__ . '/..' . '/symfony/debug/Exception/FlattenException.php', + 'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => __DIR__ . '/..' . '/symfony/debug/Exception/OutOfMemoryException.php', + 'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => __DIR__ . '/..' . '/symfony/debug/Exception/UndefinedFunctionException.php', + 'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => __DIR__ . '/..' . '/symfony/debug/Exception/UndefinedMethodException.php', + 'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php', + 'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php', + 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php', + 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php', + 'Symfony\\Component\\DependencyInjection\\Alias' => __DIR__ . '/..' . '/symfony/dependency-injection/Alias.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\AnalyzeServiceReferencesPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\AutoAliasServicePass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/AutoAliasServicePass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\AutowirePass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/AutowirePass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckCircularReferencesPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/CheckCircularReferencesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckDefinitionValidityPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckExceptionOnInvalidReferenceBehaviorPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckReferenceValidityPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/CheckReferenceValidityPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\Compiler' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/Compiler.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/CompilerPassInterface.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\DecoratorServicePass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/DecoratorServicePass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ExtensionCompilerPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/ExtensionCompilerPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\FactoryReturnTypePass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\InlineServiceDefinitionsPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\LoggingFormatter' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/LoggingFormatter.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\MergeExtensionConfigurationPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\PassConfig' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/PassConfig.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\PriorityTaggedServiceTrait' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RemoveAbstractDefinitionsPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RemovePrivateAliasesPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RemoveUnusedDefinitionsPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RepeatablePassInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/RepeatablePassInterface.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\RepeatedPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/RepeatedPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ReplaceAliasByActualDefinitionPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveDefinitionTemplatesPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveInvalidReferencesPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveParameterPlaceHoldersPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveReferencesToAliasesPass' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraph' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraphEdge' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php', + 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraphNode' => __DIR__ . '/..' . '/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php', + 'Symfony\\Component\\DependencyInjection\\Config\\AutowireServiceResource' => __DIR__ . '/..' . '/symfony/dependency-injection/Config/AutowireServiceResource.php', + 'Symfony\\Component\\DependencyInjection\\Container' => __DIR__ . '/..' . '/symfony/dependency-injection/Container.php', + 'Symfony\\Component\\DependencyInjection\\ContainerAwareInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/ContainerAwareInterface.php', + 'Symfony\\Component\\DependencyInjection\\ContainerAwareTrait' => __DIR__ . '/..' . '/symfony/dependency-injection/ContainerAwareTrait.php', + 'Symfony\\Component\\DependencyInjection\\ContainerBuilder' => __DIR__ . '/..' . '/symfony/dependency-injection/ContainerBuilder.php', + 'Symfony\\Component\\DependencyInjection\\ContainerInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/ContainerInterface.php', + 'Symfony\\Component\\DependencyInjection\\Definition' => __DIR__ . '/..' . '/symfony/dependency-injection/Definition.php', + 'Symfony\\Component\\DependencyInjection\\DefinitionDecorator' => __DIR__ . '/..' . '/symfony/dependency-injection/DefinitionDecorator.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\Dumper' => __DIR__ . '/..' . '/symfony/dependency-injection/Dumper/Dumper.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\DumperInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/Dumper/DumperInterface.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\GraphvizDumper' => __DIR__ . '/..' . '/symfony/dependency-injection/Dumper/GraphvizDumper.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\PhpDumper' => __DIR__ . '/..' . '/symfony/dependency-injection/Dumper/PhpDumper.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\XmlDumper' => __DIR__ . '/..' . '/symfony/dependency-injection/Dumper/XmlDumper.php', + 'Symfony\\Component\\DependencyInjection\\Dumper\\YamlDumper' => __DIR__ . '/..' . '/symfony/dependency-injection/Dumper/YamlDumper.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\BadMethodCallException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/BadMethodCallException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\EnvNotFoundException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/EnvNotFoundException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\EnvParameterException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/EnvParameterException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/ExceptionInterface.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/LogicException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\OutOfBoundsException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/OutOfBoundsException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ParameterCircularReferenceException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/ParameterNotFoundException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/RuntimeException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ServiceCircularReferenceException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php', + 'Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException' => __DIR__ . '/..' . '/symfony/dependency-injection/Exception/ServiceNotFoundException.php', + 'Symfony\\Component\\DependencyInjection\\ExpressionLanguage' => __DIR__ . '/..' . '/symfony/dependency-injection/ExpressionLanguage.php', + 'Symfony\\Component\\DependencyInjection\\ExpressionLanguageProvider' => __DIR__ . '/..' . '/symfony/dependency-injection/ExpressionLanguageProvider.php', + 'Symfony\\Component\\DependencyInjection\\Extension\\ConfigurationExtensionInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php', + 'Symfony\\Component\\DependencyInjection\\Extension\\Extension' => __DIR__ . '/..' . '/symfony/dependency-injection/Extension/Extension.php', + 'Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/Extension/ExtensionInterface.php', + 'Symfony\\Component\\DependencyInjection\\Extension\\PrependExtensionInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/Extension/PrependExtensionInterface.php', + 'Symfony\\Component\\DependencyInjection\\LazyProxy\\Instantiator\\InstantiatorInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php', + 'Symfony\\Component\\DependencyInjection\\LazyProxy\\Instantiator\\RealServiceInstantiator' => __DIR__ . '/..' . '/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php', + 'Symfony\\Component\\DependencyInjection\\LazyProxy\\PhpDumper\\DumperInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php', + 'Symfony\\Component\\DependencyInjection\\LazyProxy\\PhpDumper\\NullDumper' => __DIR__ . '/..' . '/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\ClosureLoader' => __DIR__ . '/..' . '/symfony/dependency-injection/Loader/ClosureLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\DirectoryLoader' => __DIR__ . '/..' . '/symfony/dependency-injection/Loader/DirectoryLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\FileLoader' => __DIR__ . '/..' . '/symfony/dependency-injection/Loader/FileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\IniFileLoader' => __DIR__ . '/..' . '/symfony/dependency-injection/Loader/IniFileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\PhpFileLoader' => __DIR__ . '/..' . '/symfony/dependency-injection/Loader/PhpFileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\XmlFileLoader' => __DIR__ . '/..' . '/symfony/dependency-injection/Loader/XmlFileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Loader\\YamlFileLoader' => __DIR__ . '/..' . '/symfony/dependency-injection/Loader/YamlFileLoader.php', + 'Symfony\\Component\\DependencyInjection\\Parameter' => __DIR__ . '/..' . '/symfony/dependency-injection/Parameter.php', + 'Symfony\\Component\\DependencyInjection\\ParameterBag\\EnvPlaceholderParameterBag' => __DIR__ . '/..' . '/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php', + 'Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag' => __DIR__ . '/..' . '/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php', + 'Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag' => __DIR__ . '/..' . '/symfony/dependency-injection/ParameterBag/ParameterBag.php', + 'Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php', + 'Symfony\\Component\\DependencyInjection\\Reference' => __DIR__ . '/..' . '/symfony/dependency-injection/Reference.php', + 'Symfony\\Component\\DependencyInjection\\ResettableContainerInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/ResettableContainerInterface.php', + 'Symfony\\Component\\DependencyInjection\\TaggedContainerInterface' => __DIR__ . '/..' . '/symfony/dependency-injection/TaggedContainerInterface.php', + 'Symfony\\Component\\DependencyInjection\\Variable' => __DIR__ . '/..' . '/symfony/dependency-injection/Variable.php', + 'Symfony\\Component\\EventDispatcher\\ContainerAwareEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/ContainerAwareEventDispatcher.php', + 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php', + 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php', + 'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/WrappedListener.php', + 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => __DIR__ . '/..' . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', + 'Symfony\\Component\\EventDispatcher\\Event' => __DIR__ . '/..' . '/symfony/event-dispatcher/Event.php', + 'Symfony\\Component\\EventDispatcher\\EventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventDispatcher.php', + 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventDispatcherInterface.php', + 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventSubscriberInterface.php', + 'Symfony\\Component\\EventDispatcher\\GenericEvent' => __DIR__ . '/..' . '/symfony/event-dispatcher/GenericEvent.php', + 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', + 'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/FileNotFoundException.php', + 'Symfony\\Component\\Filesystem\\Exception\\IOException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOException.php', + 'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOExceptionInterface.php', + 'Symfony\\Component\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/symfony/filesystem/Filesystem.php', + 'Symfony\\Component\\Filesystem\\LockHandler' => __DIR__ . '/..' . '/symfony/filesystem/LockHandler.php', + 'Symfony\\Component\\Finder\\Adapter\\AbstractAdapter' => __DIR__ . '/..' . '/symfony/finder/Adapter/AbstractAdapter.php', + 'Symfony\\Component\\Finder\\Adapter\\AbstractFindAdapter' => __DIR__ . '/..' . '/symfony/finder/Adapter/AbstractFindAdapter.php', + 'Symfony\\Component\\Finder\\Adapter\\AdapterInterface' => __DIR__ . '/..' . '/symfony/finder/Adapter/AdapterInterface.php', + 'Symfony\\Component\\Finder\\Adapter\\BsdFindAdapter' => __DIR__ . '/..' . '/symfony/finder/Adapter/BsdFindAdapter.php', + 'Symfony\\Component\\Finder\\Adapter\\GnuFindAdapter' => __DIR__ . '/..' . '/symfony/finder/Adapter/GnuFindAdapter.php', + 'Symfony\\Component\\Finder\\Adapter\\PhpAdapter' => __DIR__ . '/..' . '/symfony/finder/Adapter/PhpAdapter.php', + 'Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php', + 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php', + 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php', + 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/symfony/finder/Exception/AccessDeniedException.php', + 'Symfony\\Component\\Finder\\Exception\\AdapterFailureException' => __DIR__ . '/..' . '/symfony/finder/Exception/AdapterFailureException.php', + 'Symfony\\Component\\Finder\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/finder/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Finder\\Exception\\OperationNotPermitedException' => __DIR__ . '/..' . '/symfony/finder/Exception/OperationNotPermitedException.php', + 'Symfony\\Component\\Finder\\Exception\\ShellCommandFailureException' => __DIR__ . '/..' . '/symfony/finder/Exception/ShellCommandFailureException.php', + 'Symfony\\Component\\Finder\\Expression\\Expression' => __DIR__ . '/..' . '/symfony/finder/Expression/Expression.php', + 'Symfony\\Component\\Finder\\Expression\\Glob' => __DIR__ . '/..' . '/symfony/finder/Expression/Glob.php', + 'Symfony\\Component\\Finder\\Expression\\Regex' => __DIR__ . '/..' . '/symfony/finder/Expression/Regex.php', + 'Symfony\\Component\\Finder\\Expression\\ValueInterface' => __DIR__ . '/..' . '/symfony/finder/Expression/ValueInterface.php', + 'Symfony\\Component\\Finder\\Finder' => __DIR__ . '/..' . '/symfony/finder/Finder.php', + 'Symfony\\Component\\Finder\\Glob' => __DIR__ . '/..' . '/symfony/finder/Glob.php', + 'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/CustomFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DateRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilePathsIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilePathsIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FileTypeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilecontentFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/PathFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SortableIterator.php', + 'Symfony\\Component\\Finder\\Shell\\Command' => __DIR__ . '/..' . '/symfony/finder/Shell/Command.php', + 'Symfony\\Component\\Finder\\Shell\\Shell' => __DIR__ . '/..' . '/symfony/finder/Shell/Shell.php', + 'Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php', + 'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/process/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/process/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Process\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/process/Exception/LogicException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessFailedException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessFailedException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessTimedOutException.php', + 'Symfony\\Component\\Process\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/process/Exception/RuntimeException.php', + 'Symfony\\Component\\Process\\ExecutableFinder' => __DIR__ . '/..' . '/symfony/process/ExecutableFinder.php', + 'Symfony\\Component\\Process\\PhpExecutableFinder' => __DIR__ . '/..' . '/symfony/process/PhpExecutableFinder.php', + 'Symfony\\Component\\Process\\PhpProcess' => __DIR__ . '/..' . '/symfony/process/PhpProcess.php', + 'Symfony\\Component\\Process\\Pipes\\AbstractPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/AbstractPipes.php', + 'Symfony\\Component\\Process\\Pipes\\PipesInterface' => __DIR__ . '/..' . '/symfony/process/Pipes/PipesInterface.php', + 'Symfony\\Component\\Process\\Pipes\\UnixPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/UnixPipes.php', + 'Symfony\\Component\\Process\\Pipes\\WindowsPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/WindowsPipes.php', + 'Symfony\\Component\\Process\\Process' => __DIR__ . '/..' . '/symfony/process/Process.php', + 'Symfony\\Component\\Process\\ProcessBuilder' => __DIR__ . '/..' . '/symfony/process/ProcessBuilder.php', + 'Symfony\\Component\\Process\\ProcessUtils' => __DIR__ . '/..' . '/symfony/process/ProcessUtils.php', + 'Symfony\\Component\\Stopwatch\\Section' => __DIR__ . '/..' . '/symfony/stopwatch/Section.php', + 'Symfony\\Component\\Stopwatch\\Stopwatch' => __DIR__ . '/..' . '/symfony/stopwatch/Stopwatch.php', + 'Symfony\\Component\\Stopwatch\\StopwatchEvent' => __DIR__ . '/..' . '/symfony/stopwatch/StopwatchEvent.php', + 'Symfony\\Component\\Stopwatch\\StopwatchPeriod' => __DIR__ . '/..' . '/symfony/stopwatch/StopwatchPeriod.php', + 'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/AbstractOperation.php', + 'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/MergeOperation.php', + 'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => __DIR__ . '/..' . '/symfony/translation/Catalogue/OperationInterface.php', + 'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/TargetOperation.php', + 'Symfony\\Component\\Translation\\DataCollectorTranslator' => __DIR__ . '/..' . '/symfony/translation/DataCollectorTranslator.php', + 'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => __DIR__ . '/..' . '/symfony/translation/DataCollector/TranslationDataCollector.php', + 'Symfony\\Component\\Translation\\Dumper\\CsvFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/CsvFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\DumperInterface' => __DIR__ . '/..' . '/symfony/translation/Dumper/DumperInterface.php', + 'Symfony\\Component\\Translation\\Dumper\\FileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/FileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\IcuResFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/IcuResFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\IniFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/IniFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\JsonFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/JsonFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\MoFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/MoFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\PhpFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/PhpFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\PoFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/PoFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\QtFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/QtFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/XliffFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/YamlFileDumper.php', + 'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/translation/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => __DIR__ . '/..' . '/symfony/translation/Exception/InvalidResourceException.php', + 'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => __DIR__ . '/..' . '/symfony/translation/Exception/NotFoundResourceException.php', + 'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/AbstractFileExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/ChainExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => __DIR__ . '/..' . '/symfony/translation/Extractor/ExtractorInterface.php', + 'Symfony\\Component\\Translation\\IdentityTranslator' => __DIR__ . '/..' . '/symfony/translation/IdentityTranslator.php', + 'Symfony\\Component\\Translation\\Interval' => __DIR__ . '/..' . '/symfony/translation/Interval.php', + 'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/ArrayLoader.php', + 'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/CsvFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\FileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/FileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IcuDatFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/IcuDatFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IcuResFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/IcuResFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IniFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/IniFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\JsonFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/JsonFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/symfony/translation/Loader/LoaderInterface.php', + 'Symfony\\Component\\Translation\\Loader\\MoFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/MoFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\PhpFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/PhpFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\PoFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/PoFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\QtFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/QtFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\XliffFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/XliffFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\YamlFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/YamlFileLoader.php', + 'Symfony\\Component\\Translation\\LoggingTranslator' => __DIR__ . '/..' . '/symfony/translation/LoggingTranslator.php', + 'Symfony\\Component\\Translation\\MessageCatalogue' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogue.php', + 'Symfony\\Component\\Translation\\MessageCatalogueInterface' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogueInterface.php', + 'Symfony\\Component\\Translation\\MessageSelector' => __DIR__ . '/..' . '/symfony/translation/MessageSelector.php', + 'Symfony\\Component\\Translation\\MetadataAwareInterface' => __DIR__ . '/..' . '/symfony/translation/MetadataAwareInterface.php', + 'Symfony\\Component\\Translation\\PluralizationRules' => __DIR__ . '/..' . '/symfony/translation/PluralizationRules.php', + 'Symfony\\Component\\Translation\\Translator' => __DIR__ . '/..' . '/symfony/translation/Translator.php', + 'Symfony\\Component\\Translation\\TranslatorBagInterface' => __DIR__ . '/..' . '/symfony/translation/TranslatorBagInterface.php', + 'Symfony\\Component\\Translation\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/translation/TranslatorInterface.php', + 'Symfony\\Component\\Translation\\Util\\ArrayConverter' => __DIR__ . '/..' . '/symfony/translation/Util/ArrayConverter.php', + 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => __DIR__ . '/..' . '/symfony/translation/Writer/TranslationWriter.php', + 'Symfony\\Component\\Validator\\ClassBasedInterface' => __DIR__ . '/..' . '/symfony/validator/ClassBasedInterface.php', + 'Symfony\\Component\\Validator\\Constraint' => __DIR__ . '/..' . '/symfony/validator/Constraint.php', + 'Symfony\\Component\\Validator\\ConstraintValidator' => __DIR__ . '/..' . '/symfony/validator/ConstraintValidator.php', + 'Symfony\\Component\\Validator\\ConstraintValidatorFactory' => __DIR__ . '/..' . '/symfony/validator/ConstraintValidatorFactory.php', + 'Symfony\\Component\\Validator\\ConstraintValidatorFactoryInterface' => __DIR__ . '/..' . '/symfony/validator/ConstraintValidatorFactoryInterface.php', + 'Symfony\\Component\\Validator\\ConstraintValidatorInterface' => __DIR__ . '/..' . '/symfony/validator/ConstraintValidatorInterface.php', + 'Symfony\\Component\\Validator\\ConstraintViolation' => __DIR__ . '/..' . '/symfony/validator/ConstraintViolation.php', + 'Symfony\\Component\\Validator\\ConstraintViolationInterface' => __DIR__ . '/..' . '/symfony/validator/ConstraintViolationInterface.php', + 'Symfony\\Component\\Validator\\ConstraintViolationList' => __DIR__ . '/..' . '/symfony/validator/ConstraintViolationList.php', + 'Symfony\\Component\\Validator\\ConstraintViolationListInterface' => __DIR__ . '/..' . '/symfony/validator/ConstraintViolationListInterface.php', + 'Symfony\\Component\\Validator\\Constraints\\AbstractComparison' => __DIR__ . '/..' . '/symfony/validator/Constraints/AbstractComparison.php', + 'Symfony\\Component\\Validator\\Constraints\\AbstractComparisonValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/AbstractComparisonValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\All' => __DIR__ . '/..' . '/symfony/validator/Constraints/All.php', + 'Symfony\\Component\\Validator\\Constraints\\AllValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/AllValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Bic' => __DIR__ . '/..' . '/symfony/validator/Constraints/Bic.php', + 'Symfony\\Component\\Validator\\Constraints\\BicValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/BicValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Blank' => __DIR__ . '/..' . '/symfony/validator/Constraints/Blank.php', + 'Symfony\\Component\\Validator\\Constraints\\BlankValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/BlankValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Callback' => __DIR__ . '/..' . '/symfony/validator/Constraints/Callback.php', + 'Symfony\\Component\\Validator\\Constraints\\CallbackValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/CallbackValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\CardScheme' => __DIR__ . '/..' . '/symfony/validator/Constraints/CardScheme.php', + 'Symfony\\Component\\Validator\\Constraints\\CardSchemeValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/CardSchemeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Choice' => __DIR__ . '/..' . '/symfony/validator/Constraints/Choice.php', + 'Symfony\\Component\\Validator\\Constraints\\ChoiceValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/ChoiceValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Collection' => __DIR__ . '/..' . '/symfony/validator/Constraints/Collection.php', + 'Symfony\\Component\\Validator\\Constraints\\CollectionValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/CollectionValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Collection\\Optional' => __DIR__ . '/..' . '/symfony/validator/Constraints/Collection/Optional.php', + 'Symfony\\Component\\Validator\\Constraints\\Collection\\Required' => __DIR__ . '/..' . '/symfony/validator/Constraints/Collection/Required.php', + 'Symfony\\Component\\Validator\\Constraints\\Composite' => __DIR__ . '/..' . '/symfony/validator/Constraints/Composite.php', + 'Symfony\\Component\\Validator\\Constraints\\Count' => __DIR__ . '/..' . '/symfony/validator/Constraints/Count.php', + 'Symfony\\Component\\Validator\\Constraints\\CountValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/CountValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Country' => __DIR__ . '/..' . '/symfony/validator/Constraints/Country.php', + 'Symfony\\Component\\Validator\\Constraints\\CountryValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/CountryValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Currency' => __DIR__ . '/..' . '/symfony/validator/Constraints/Currency.php', + 'Symfony\\Component\\Validator\\Constraints\\CurrencyValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/CurrencyValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Date' => __DIR__ . '/..' . '/symfony/validator/Constraints/Date.php', + 'Symfony\\Component\\Validator\\Constraints\\DateTime' => __DIR__ . '/..' . '/symfony/validator/Constraints/DateTime.php', + 'Symfony\\Component\\Validator\\Constraints\\DateTimeValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/DateTimeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\DateValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/DateValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Email' => __DIR__ . '/..' . '/symfony/validator/Constraints/Email.php', + 'Symfony\\Component\\Validator\\Constraints\\EmailValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/EmailValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\EqualTo' => __DIR__ . '/..' . '/symfony/validator/Constraints/EqualTo.php', + 'Symfony\\Component\\Validator\\Constraints\\EqualToValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/EqualToValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Existence' => __DIR__ . '/..' . '/symfony/validator/Constraints/Existence.php', + 'Symfony\\Component\\Validator\\Constraints\\Expression' => __DIR__ . '/..' . '/symfony/validator/Constraints/Expression.php', + 'Symfony\\Component\\Validator\\Constraints\\ExpressionValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/ExpressionValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\False' => __DIR__ . '/..' . '/symfony/validator/Constraints/False.php', + 'Symfony\\Component\\Validator\\Constraints\\FalseValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/FalseValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\File' => __DIR__ . '/..' . '/symfony/validator/Constraints/File.php', + 'Symfony\\Component\\Validator\\Constraints\\FileValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/FileValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\GreaterThan' => __DIR__ . '/..' . '/symfony/validator/Constraints/GreaterThan.php', + 'Symfony\\Component\\Validator\\Constraints\\GreaterThanOrEqual' => __DIR__ . '/..' . '/symfony/validator/Constraints/GreaterThanOrEqual.php', + 'Symfony\\Component\\Validator\\Constraints\\GreaterThanOrEqualValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/GreaterThanOrEqualValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\GreaterThanValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/GreaterThanValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\GroupSequence' => __DIR__ . '/..' . '/symfony/validator/Constraints/GroupSequence.php', + 'Symfony\\Component\\Validator\\Constraints\\GroupSequenceProvider' => __DIR__ . '/..' . '/symfony/validator/Constraints/GroupSequenceProvider.php', + 'Symfony\\Component\\Validator\\Constraints\\Iban' => __DIR__ . '/..' . '/symfony/validator/Constraints/Iban.php', + 'Symfony\\Component\\Validator\\Constraints\\IbanValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/IbanValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\IdenticalTo' => __DIR__ . '/..' . '/symfony/validator/Constraints/IdenticalTo.php', + 'Symfony\\Component\\Validator\\Constraints\\IdenticalToValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/IdenticalToValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Image' => __DIR__ . '/..' . '/symfony/validator/Constraints/Image.php', + 'Symfony\\Component\\Validator\\Constraints\\ImageValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/ImageValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Ip' => __DIR__ . '/..' . '/symfony/validator/Constraints/Ip.php', + 'Symfony\\Component\\Validator\\Constraints\\IpValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/IpValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\IsFalse' => __DIR__ . '/..' . '/symfony/validator/Constraints/IsFalse.php', + 'Symfony\\Component\\Validator\\Constraints\\IsFalseValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/IsFalseValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\IsNull' => __DIR__ . '/..' . '/symfony/validator/Constraints/IsNull.php', + 'Symfony\\Component\\Validator\\Constraints\\IsNullValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/IsNullValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\IsTrue' => __DIR__ . '/..' . '/symfony/validator/Constraints/IsTrue.php', + 'Symfony\\Component\\Validator\\Constraints\\IsTrueValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/IsTrueValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Isbn' => __DIR__ . '/..' . '/symfony/validator/Constraints/Isbn.php', + 'Symfony\\Component\\Validator\\Constraints\\IsbnValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/IsbnValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Issn' => __DIR__ . '/..' . '/symfony/validator/Constraints/Issn.php', + 'Symfony\\Component\\Validator\\Constraints\\IssnValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/IssnValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Language' => __DIR__ . '/..' . '/symfony/validator/Constraints/Language.php', + 'Symfony\\Component\\Validator\\Constraints\\LanguageValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/LanguageValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Length' => __DIR__ . '/..' . '/symfony/validator/Constraints/Length.php', + 'Symfony\\Component\\Validator\\Constraints\\LengthValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/LengthValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\LessThan' => __DIR__ . '/..' . '/symfony/validator/Constraints/LessThan.php', + 'Symfony\\Component\\Validator\\Constraints\\LessThanOrEqual' => __DIR__ . '/..' . '/symfony/validator/Constraints/LessThanOrEqual.php', + 'Symfony\\Component\\Validator\\Constraints\\LessThanOrEqualValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/LessThanOrEqualValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\LessThanValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/LessThanValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Locale' => __DIR__ . '/..' . '/symfony/validator/Constraints/Locale.php', + 'Symfony\\Component\\Validator\\Constraints\\LocaleValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/LocaleValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Luhn' => __DIR__ . '/..' . '/symfony/validator/Constraints/Luhn.php', + 'Symfony\\Component\\Validator\\Constraints\\LuhnValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/LuhnValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\NotBlank' => __DIR__ . '/..' . '/symfony/validator/Constraints/NotBlank.php', + 'Symfony\\Component\\Validator\\Constraints\\NotBlankValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/NotBlankValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\NotEqualTo' => __DIR__ . '/..' . '/symfony/validator/Constraints/NotEqualTo.php', + 'Symfony\\Component\\Validator\\Constraints\\NotEqualToValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/NotEqualToValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\NotIdenticalTo' => __DIR__ . '/..' . '/symfony/validator/Constraints/NotIdenticalTo.php', + 'Symfony\\Component\\Validator\\Constraints\\NotIdenticalToValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/NotIdenticalToValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\NotNull' => __DIR__ . '/..' . '/symfony/validator/Constraints/NotNull.php', + 'Symfony\\Component\\Validator\\Constraints\\NotNullValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/NotNullValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Null' => __DIR__ . '/..' . '/symfony/validator/Constraints/Null.php', + 'Symfony\\Component\\Validator\\Constraints\\NullValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/NullValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Optional' => __DIR__ . '/..' . '/symfony/validator/Constraints/Optional.php', + 'Symfony\\Component\\Validator\\Constraints\\Range' => __DIR__ . '/..' . '/symfony/validator/Constraints/Range.php', + 'Symfony\\Component\\Validator\\Constraints\\RangeValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/RangeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Regex' => __DIR__ . '/..' . '/symfony/validator/Constraints/Regex.php', + 'Symfony\\Component\\Validator\\Constraints\\RegexValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/RegexValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Required' => __DIR__ . '/..' . '/symfony/validator/Constraints/Required.php', + 'Symfony\\Component\\Validator\\Constraints\\Time' => __DIR__ . '/..' . '/symfony/validator/Constraints/Time.php', + 'Symfony\\Component\\Validator\\Constraints\\TimeValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/TimeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Traverse' => __DIR__ . '/..' . '/symfony/validator/Constraints/Traverse.php', + 'Symfony\\Component\\Validator\\Constraints\\True' => __DIR__ . '/..' . '/symfony/validator/Constraints/True.php', + 'Symfony\\Component\\Validator\\Constraints\\TrueValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/TrueValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Type' => __DIR__ . '/..' . '/symfony/validator/Constraints/Type.php', + 'Symfony\\Component\\Validator\\Constraints\\TypeValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/TypeValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Url' => __DIR__ . '/..' . '/symfony/validator/Constraints/Url.php', + 'Symfony\\Component\\Validator\\Constraints\\UrlValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/UrlValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Uuid' => __DIR__ . '/..' . '/symfony/validator/Constraints/Uuid.php', + 'Symfony\\Component\\Validator\\Constraints\\UuidValidator' => __DIR__ . '/..' . '/symfony/validator/Constraints/UuidValidator.php', + 'Symfony\\Component\\Validator\\Constraints\\Valid' => __DIR__ . '/..' . '/symfony/validator/Constraints/Valid.php', + 'Symfony\\Component\\Validator\\Context\\ExecutionContext' => __DIR__ . '/..' . '/symfony/validator/Context/ExecutionContext.php', + 'Symfony\\Component\\Validator\\Context\\ExecutionContextFactory' => __DIR__ . '/..' . '/symfony/validator/Context/ExecutionContextFactory.php', + 'Symfony\\Component\\Validator\\Context\\ExecutionContextFactoryInterface' => __DIR__ . '/..' . '/symfony/validator/Context/ExecutionContextFactoryInterface.php', + 'Symfony\\Component\\Validator\\Context\\ExecutionContextInterface' => __DIR__ . '/..' . '/symfony/validator/Context/ExecutionContextInterface.php', + 'Symfony\\Component\\Validator\\Context\\LegacyExecutionContext' => __DIR__ . '/..' . '/symfony/validator/Context/LegacyExecutionContext.php', + 'Symfony\\Component\\Validator\\Context\\LegacyExecutionContextFactory' => __DIR__ . '/..' . '/symfony/validator/Context/LegacyExecutionContextFactory.php', + 'Symfony\\Component\\Validator\\DefaultTranslator' => __DIR__ . '/..' . '/symfony/validator/DefaultTranslator.php', + 'Symfony\\Component\\Validator\\Exception\\BadMethodCallException' => __DIR__ . '/..' . '/symfony/validator/Exception/BadMethodCallException.php', + 'Symfony\\Component\\Validator\\Exception\\ConstraintDefinitionException' => __DIR__ . '/..' . '/symfony/validator/Exception/ConstraintDefinitionException.php', + 'Symfony\\Component\\Validator\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/validator/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Validator\\Exception\\GroupDefinitionException' => __DIR__ . '/..' . '/symfony/validator/Exception/GroupDefinitionException.php', + 'Symfony\\Component\\Validator\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/validator/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Validator\\Exception\\InvalidOptionsException' => __DIR__ . '/..' . '/symfony/validator/Exception/InvalidOptionsException.php', + 'Symfony\\Component\\Validator\\Exception\\MappingException' => __DIR__ . '/..' . '/symfony/validator/Exception/MappingException.php', + 'Symfony\\Component\\Validator\\Exception\\MissingOptionsException' => __DIR__ . '/..' . '/symfony/validator/Exception/MissingOptionsException.php', + 'Symfony\\Component\\Validator\\Exception\\NoSuchMetadataException' => __DIR__ . '/..' . '/symfony/validator/Exception/NoSuchMetadataException.php', + 'Symfony\\Component\\Validator\\Exception\\OutOfBoundsException' => __DIR__ . '/..' . '/symfony/validator/Exception/OutOfBoundsException.php', + 'Symfony\\Component\\Validator\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/validator/Exception/RuntimeException.php', + 'Symfony\\Component\\Validator\\Exception\\UnexpectedTypeException' => __DIR__ . '/..' . '/symfony/validator/Exception/UnexpectedTypeException.php', + 'Symfony\\Component\\Validator\\Exception\\UnsupportedMetadataException' => __DIR__ . '/..' . '/symfony/validator/Exception/UnsupportedMetadataException.php', + 'Symfony\\Component\\Validator\\Exception\\ValidatorException' => __DIR__ . '/..' . '/symfony/validator/Exception/ValidatorException.php', + 'Symfony\\Component\\Validator\\ExecutionContext' => __DIR__ . '/..' . '/symfony/validator/ExecutionContext.php', + 'Symfony\\Component\\Validator\\ExecutionContextInterface' => __DIR__ . '/..' . '/symfony/validator/ExecutionContextInterface.php', + 'Symfony\\Component\\Validator\\GlobalExecutionContextInterface' => __DIR__ . '/..' . '/symfony/validator/GlobalExecutionContextInterface.php', + 'Symfony\\Component\\Validator\\GroupSequenceProviderInterface' => __DIR__ . '/..' . '/symfony/validator/GroupSequenceProviderInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\BlackholeMetadataFactory' => __DIR__ . '/..' . '/symfony/validator/Mapping/BlackholeMetadataFactory.php', + 'Symfony\\Component\\Validator\\Mapping\\Cache\\ApcCache' => __DIR__ . '/..' . '/symfony/validator/Mapping/Cache/ApcCache.php', + 'Symfony\\Component\\Validator\\Mapping\\Cache\\CacheInterface' => __DIR__ . '/..' . '/symfony/validator/Mapping/Cache/CacheInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\Cache\\DoctrineCache' => __DIR__ . '/..' . '/symfony/validator/Mapping/Cache/DoctrineCache.php', + 'Symfony\\Component\\Validator\\Mapping\\CascadingStrategy' => __DIR__ . '/..' . '/symfony/validator/Mapping/CascadingStrategy.php', + 'Symfony\\Component\\Validator\\Mapping\\ClassMetadata' => __DIR__ . '/..' . '/symfony/validator/Mapping/ClassMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\ClassMetadataFactory' => __DIR__ . '/..' . '/symfony/validator/Mapping/ClassMetadataFactory.php', + 'Symfony\\Component\\Validator\\Mapping\\ClassMetadataInterface' => __DIR__ . '/..' . '/symfony/validator/Mapping/ClassMetadataInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\ElementMetadata' => __DIR__ . '/..' . '/symfony/validator/Mapping/ElementMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\Factory\\BlackHoleMetadataFactory' => __DIR__ . '/..' . '/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php', + 'Symfony\\Component\\Validator\\Mapping\\Factory\\LazyLoadingMetadataFactory' => __DIR__ . '/..' . '/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php', + 'Symfony\\Component\\Validator\\Mapping\\Factory\\MetadataFactoryInterface' => __DIR__ . '/..' . '/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\GenericMetadata' => __DIR__ . '/..' . '/symfony/validator/Mapping/GenericMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\GetterMetadata' => __DIR__ . '/..' . '/symfony/validator/Mapping/GetterMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\AbstractLoader' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/AbstractLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\AnnotationLoader' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/AnnotationLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\FileLoader' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/FileLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\FilesLoader' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/FilesLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\LoaderChain' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/LoaderChain.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/LoaderInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\StaticMethodLoader' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/StaticMethodLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\XmlFileLoader' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/XmlFileLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\XmlFilesLoader' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/XmlFilesLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\YamlFileLoader' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/YamlFileLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\Loader\\YamlFilesLoader' => __DIR__ . '/..' . '/symfony/validator/Mapping/Loader/YamlFilesLoader.php', + 'Symfony\\Component\\Validator\\Mapping\\MemberMetadata' => __DIR__ . '/..' . '/symfony/validator/Mapping/MemberMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\MetadataInterface' => __DIR__ . '/..' . '/symfony/validator/Mapping/MetadataInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\PropertyMetadata' => __DIR__ . '/..' . '/symfony/validator/Mapping/PropertyMetadata.php', + 'Symfony\\Component\\Validator\\Mapping\\PropertyMetadataInterface' => __DIR__ . '/..' . '/symfony/validator/Mapping/PropertyMetadataInterface.php', + 'Symfony\\Component\\Validator\\Mapping\\TraversalStrategy' => __DIR__ . '/..' . '/symfony/validator/Mapping/TraversalStrategy.php', + 'Symfony\\Component\\Validator\\MetadataFactoryInterface' => __DIR__ . '/..' . '/symfony/validator/MetadataFactoryInterface.php', + 'Symfony\\Component\\Validator\\MetadataInterface' => __DIR__ . '/..' . '/symfony/validator/MetadataInterface.php', + 'Symfony\\Component\\Validator\\ObjectInitializerInterface' => __DIR__ . '/..' . '/symfony/validator/ObjectInitializerInterface.php', + 'Symfony\\Component\\Validator\\PropertyMetadataContainerInterface' => __DIR__ . '/..' . '/symfony/validator/PropertyMetadataContainerInterface.php', + 'Symfony\\Component\\Validator\\PropertyMetadataInterface' => __DIR__ . '/..' . '/symfony/validator/PropertyMetadataInterface.php', + 'Symfony\\Component\\Validator\\Util\\PropertyPath' => __DIR__ . '/..' . '/symfony/validator/Util/PropertyPath.php', + 'Symfony\\Component\\Validator\\Validation' => __DIR__ . '/..' . '/symfony/validator/Validation.php', + 'Symfony\\Component\\Validator\\ValidationVisitor' => __DIR__ . '/..' . '/symfony/validator/ValidationVisitor.php', + 'Symfony\\Component\\Validator\\ValidationVisitorInterface' => __DIR__ . '/..' . '/symfony/validator/ValidationVisitorInterface.php', + 'Symfony\\Component\\Validator\\Validator' => __DIR__ . '/..' . '/symfony/validator/Validator.php', + 'Symfony\\Component\\Validator\\ValidatorBuilder' => __DIR__ . '/..' . '/symfony/validator/ValidatorBuilder.php', + 'Symfony\\Component\\Validator\\ValidatorBuilderInterface' => __DIR__ . '/..' . '/symfony/validator/ValidatorBuilderInterface.php', + 'Symfony\\Component\\Validator\\ValidatorInterface' => __DIR__ . '/..' . '/symfony/validator/ValidatorInterface.php', + 'Symfony\\Component\\Validator\\Validator\\ContextualValidatorInterface' => __DIR__ . '/..' . '/symfony/validator/Validator/ContextualValidatorInterface.php', + 'Symfony\\Component\\Validator\\Validator\\LegacyValidator' => __DIR__ . '/..' . '/symfony/validator/Validator/LegacyValidator.php', + 'Symfony\\Component\\Validator\\Validator\\RecursiveContextualValidator' => __DIR__ . '/..' . '/symfony/validator/Validator/RecursiveContextualValidator.php', + 'Symfony\\Component\\Validator\\Validator\\RecursiveValidator' => __DIR__ . '/..' . '/symfony/validator/Validator/RecursiveValidator.php', + 'Symfony\\Component\\Validator\\Validator\\ValidatorInterface' => __DIR__ . '/..' . '/symfony/validator/Validator/ValidatorInterface.php', + 'Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilder' => __DIR__ . '/..' . '/symfony/validator/Violation/ConstraintViolationBuilder.php', + 'Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilderInterface' => __DIR__ . '/..' . '/symfony/validator/Violation/ConstraintViolationBuilderInterface.php', + 'Symfony\\Component\\Validator\\Violation\\LegacyConstraintViolationBuilder' => __DIR__ . '/..' . '/symfony/validator/Violation/LegacyConstraintViolationBuilder.php', + 'Symfony\\Component\\Yaml\\Command\\LintCommand' => __DIR__ . '/..' . '/symfony/yaml/Command/LintCommand.php', + 'Symfony\\Component\\Yaml\\Dumper' => __DIR__ . '/..' . '/symfony/yaml/Dumper.php', + 'Symfony\\Component\\Yaml\\Escaper' => __DIR__ . '/..' . '/symfony/yaml/Escaper.php', + 'Symfony\\Component\\Yaml\\Exception\\DumpException' => __DIR__ . '/..' . '/symfony/yaml/Exception/DumpException.php', + 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/yaml/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Yaml\\Exception\\ParseException' => __DIR__ . '/..' . '/symfony/yaml/Exception/ParseException.php', + 'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/yaml/Exception/RuntimeException.php', + 'Symfony\\Component\\Yaml\\Inline' => __DIR__ . '/..' . '/symfony/yaml/Inline.php', + 'Symfony\\Component\\Yaml\\Parser' => __DIR__ . '/..' . '/symfony/yaml/Parser.php', + 'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => __DIR__ . '/..' . '/symfony/yaml/Tag/TaggedValue.php', + 'Symfony\\Component\\Yaml\\Unescaper' => __DIR__ . '/..' . '/symfony/yaml/Unescaper.php', + 'Symfony\\Component\\Yaml\\Yaml' => __DIR__ . '/..' . '/symfony/yaml/Yaml.php', + 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', + 'TemplateMethodsTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/TemplateMethodsTest.php', + 'Test' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class2.php', + 'TestClass' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/issue19.php', + 'TestDoxGroupTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/TestDoxGroupTest.php', + 'TestError' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/TestTestError.php', + 'TestIncomplete' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/TestIncomplete.php', + 'TestIterator' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/TestIterator.php', + 'TestIterator2' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/TestIterator2.php', + 'TestParser' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/ParserTest.php', + 'TestSkipped' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/TestSkipped.php', + 'TestTokenParser' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/ParserTest.php', + 'TestWithTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/TestWithTest.php', + 'Text_Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php', + 'ThrowExceptionTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ThrowExceptionTestCase.php', + 'ThrowNoExceptionTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/ThrowNoExceptionTestCase.php', + 'ToStringStub' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'TplBlockTest\\TplBlockTest' => __DIR__ . '/../..' . '/test/TplBlockTest.php', + 'TplBlock\\TplBlock' => __DIR__ . '/../..' . '/TplBlock.php', + 'TraversableMockTestInterface' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/tests/_fixture/TraversableMockTestInterface.php', + 'TwigTestExtension' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'TwigTestFoo' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'TwigTestTokenParser_§' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'Twig\\Cache\\CacheInterface' => __DIR__ . '/..' . '/twig/twig/src/Cache/CacheInterface.php', + 'Twig\\Cache\\FilesystemCache' => __DIR__ . '/..' . '/twig/twig/src/Cache/FilesystemCache.php', + 'Twig\\Cache\\NullCache' => __DIR__ . '/..' . '/twig/twig/src/Cache/NullCache.php', + 'Twig\\Compiler' => __DIR__ . '/..' . '/twig/twig/src/Compiler.php', + 'Twig\\Environment' => __DIR__ . '/..' . '/twig/twig/src/Environment.php', + 'Twig\\Error\\Error' => __DIR__ . '/..' . '/twig/twig/src/Error/Error.php', + 'Twig\\Error\\LoaderError' => __DIR__ . '/..' . '/twig/twig/src/Error/LoaderError.php', + 'Twig\\Error\\RuntimeError' => __DIR__ . '/..' . '/twig/twig/src/Error/RuntimeError.php', + 'Twig\\Error\\SyntaxError' => __DIR__ . '/..' . '/twig/twig/src/Error/SyntaxError.php', + 'Twig\\ExpressionParser' => __DIR__ . '/..' . '/twig/twig/src/ExpressionParser.php', + 'Twig\\Extension\\AbstractExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/AbstractExtension.php', + 'Twig\\Extension\\CoreExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/CoreExtension.php', + 'Twig\\Extension\\DebugExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/DebugExtension.php', + 'Twig\\Extension\\EscaperExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/EscaperExtension.php', + 'Twig\\Extension\\ExtensionInterface' => __DIR__ . '/..' . '/twig/twig/src/Extension/ExtensionInterface.php', + 'Twig\\Extension\\GlobalsInterface' => __DIR__ . '/..' . '/twig/twig/src/Extension/GlobalsInterface.php', + 'Twig\\Extension\\InitRuntimeInterface' => __DIR__ . '/..' . '/twig/twig/src/Extension/InitRuntimeInterface.php', + 'Twig\\Extension\\OptimizerExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/OptimizerExtension.php', + 'Twig\\Extension\\ProfilerExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/ProfilerExtension.php', + 'Twig\\Extension\\RuntimeExtensionInterface' => __DIR__ . '/..' . '/twig/twig/src/Extension/RuntimeExtensionInterface.php', + 'Twig\\Extension\\SandboxExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/SandboxExtension.php', + 'Twig\\Extension\\StagingExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/StagingExtension.php', + 'Twig\\Extension\\StringLoaderExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/StringLoaderExtension.php', + 'Twig\\FileExtensionEscapingStrategy' => __DIR__ . '/..' . '/twig/twig/src/FileExtensionEscapingStrategy.php', + 'Twig\\Lexer' => __DIR__ . '/..' . '/twig/twig/src/Lexer.php', + 'Twig\\Loader\\ArrayLoader' => __DIR__ . '/..' . '/twig/twig/src/Loader/ArrayLoader.php', + 'Twig\\Loader\\ChainLoader' => __DIR__ . '/..' . '/twig/twig/src/Loader/ChainLoader.php', + 'Twig\\Loader\\ExistsLoaderInterface' => __DIR__ . '/..' . '/twig/twig/src/Loader/ExistsLoaderInterface.php', + 'Twig\\Loader\\FilesystemLoader' => __DIR__ . '/..' . '/twig/twig/src/Loader/FilesystemLoader.php', + 'Twig\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/twig/twig/src/Loader/LoaderInterface.php', + 'Twig\\Loader\\SourceContextLoaderInterface' => __DIR__ . '/..' . '/twig/twig/src/Loader/SourceContextLoaderInterface.php', + 'Twig\\Markup' => __DIR__ . '/..' . '/twig/twig/src/Markup.php', + 'Twig\\NodeTraverser' => __DIR__ . '/..' . '/twig/twig/src/NodeTraverser.php', + 'Twig\\NodeVisitor\\AbstractNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php', + 'Twig\\NodeVisitor\\EscaperNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php', + 'Twig\\NodeVisitor\\NodeVisitorInterface' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/NodeVisitorInterface.php', + 'Twig\\NodeVisitor\\OptimizerNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php', + 'Twig\\NodeVisitor\\SafeAnalysisNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php', + 'Twig\\NodeVisitor\\SandboxNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php', + 'Twig\\Node\\AutoEscapeNode' => __DIR__ . '/..' . '/twig/twig/src/Node/AutoEscapeNode.php', + 'Twig\\Node\\BlockNode' => __DIR__ . '/..' . '/twig/twig/src/Node/BlockNode.php', + 'Twig\\Node\\BlockReferenceNode' => __DIR__ . '/..' . '/twig/twig/src/Node/BlockReferenceNode.php', + 'Twig\\Node\\BodyNode' => __DIR__ . '/..' . '/twig/twig/src/Node/BodyNode.php', + 'Twig\\Node\\CheckSecurityNode' => __DIR__ . '/..' . '/twig/twig/src/Node/CheckSecurityNode.php', + 'Twig\\Node\\DoNode' => __DIR__ . '/..' . '/twig/twig/src/Node/DoNode.php', + 'Twig\\Node\\EmbedNode' => __DIR__ . '/..' . '/twig/twig/src/Node/EmbedNode.php', + 'Twig\\Node\\Expression\\AbstractExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/AbstractExpression.php', + 'Twig\\Node\\Expression\\ArrayExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ArrayExpression.php', + 'Twig\\Node\\Expression\\AssignNameExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/AssignNameExpression.php', + 'Twig\\Node\\Expression\\Binary\\AbstractBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AbstractBinary.php', + 'Twig\\Node\\Expression\\Binary\\AddBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AddBinary.php', + 'Twig\\Node\\Expression\\Binary\\AndBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AndBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseAndBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseOrBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseXorBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php', + 'Twig\\Node\\Expression\\Binary\\ConcatBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/ConcatBinary.php', + 'Twig\\Node\\Expression\\Binary\\DivBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/DivBinary.php', + 'Twig\\Node\\Expression\\Binary\\EndsWithBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php', + 'Twig\\Node\\Expression\\Binary\\EqualBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/EqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\FloorDivBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php', + 'Twig\\Node\\Expression\\Binary\\GreaterBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/GreaterBinary.php', + 'Twig\\Node\\Expression\\Binary\\GreaterEqualBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\InBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/InBinary.php', + 'Twig\\Node\\Expression\\Binary\\LessBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/LessBinary.php', + 'Twig\\Node\\Expression\\Binary\\LessEqualBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\MatchesBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/MatchesBinary.php', + 'Twig\\Node\\Expression\\Binary\\ModBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/ModBinary.php', + 'Twig\\Node\\Expression\\Binary\\MulBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/MulBinary.php', + 'Twig\\Node\\Expression\\Binary\\NotEqualBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\NotInBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/NotInBinary.php', + 'Twig\\Node\\Expression\\Binary\\OrBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/OrBinary.php', + 'Twig\\Node\\Expression\\Binary\\PowerBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/PowerBinary.php', + 'Twig\\Node\\Expression\\Binary\\RangeBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/RangeBinary.php', + 'Twig\\Node\\Expression\\Binary\\StartsWithBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php', + 'Twig\\Node\\Expression\\Binary\\SubBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/SubBinary.php', + 'Twig\\Node\\Expression\\BlockReferenceExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/BlockReferenceExpression.php', + 'Twig\\Node\\Expression\\CallExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/CallExpression.php', + 'Twig\\Node\\Expression\\ConditionalExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ConditionalExpression.php', + 'Twig\\Node\\Expression\\ConstantExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ConstantExpression.php', + 'Twig\\Node\\Expression\\FilterExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/FilterExpression.php', + 'Twig\\Node\\Expression\\Filter\\DefaultFilter' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Filter/DefaultFilter.php', + 'Twig\\Node\\Expression\\FunctionExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/FunctionExpression.php', + 'Twig\\Node\\Expression\\GetAttrExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/GetAttrExpression.php', + 'Twig\\Node\\Expression\\MethodCallExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/MethodCallExpression.php', + 'Twig\\Node\\Expression\\NameExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/NameExpression.php', + 'Twig\\Node\\Expression\\NullCoalesceExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/NullCoalesceExpression.php', + 'Twig\\Node\\Expression\\ParentExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ParentExpression.php', + 'Twig\\Node\\Expression\\TempNameExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/TempNameExpression.php', + 'Twig\\Node\\Expression\\TestExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/TestExpression.php', + 'Twig\\Node\\Expression\\Test\\ConstantTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/ConstantTest.php', + 'Twig\\Node\\Expression\\Test\\DefinedTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/DefinedTest.php', + 'Twig\\Node\\Expression\\Test\\DivisiblebyTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php', + 'Twig\\Node\\Expression\\Test\\EvenTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/EvenTest.php', + 'Twig\\Node\\Expression\\Test\\NullTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/NullTest.php', + 'Twig\\Node\\Expression\\Test\\OddTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/OddTest.php', + 'Twig\\Node\\Expression\\Test\\SameasTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/SameasTest.php', + 'Twig\\Node\\Expression\\Unary\\AbstractUnary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Unary/AbstractUnary.php', + 'Twig\\Node\\Expression\\Unary\\NegUnary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Unary/NegUnary.php', + 'Twig\\Node\\Expression\\Unary\\NotUnary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Unary/NotUnary.php', + 'Twig\\Node\\Expression\\Unary\\PosUnary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Unary/PosUnary.php', + 'Twig\\Node\\FlushNode' => __DIR__ . '/..' . '/twig/twig/src/Node/FlushNode.php', + 'Twig\\Node\\ForLoopNode' => __DIR__ . '/..' . '/twig/twig/src/Node/ForLoopNode.php', + 'Twig\\Node\\ForNode' => __DIR__ . '/..' . '/twig/twig/src/Node/ForNode.php', + 'Twig\\Node\\IfNode' => __DIR__ . '/..' . '/twig/twig/src/Node/IfNode.php', + 'Twig\\Node\\ImportNode' => __DIR__ . '/..' . '/twig/twig/src/Node/ImportNode.php', + 'Twig\\Node\\IncludeNode' => __DIR__ . '/..' . '/twig/twig/src/Node/IncludeNode.php', + 'Twig\\Node\\MacroNode' => __DIR__ . '/..' . '/twig/twig/src/Node/MacroNode.php', + 'Twig\\Node\\ModuleNode' => __DIR__ . '/..' . '/twig/twig/src/Node/ModuleNode.php', + 'Twig\\Node\\Node' => __DIR__ . '/..' . '/twig/twig/src/Node/Node.php', + 'Twig\\Node\\NodeCaptureInterface' => __DIR__ . '/..' . '/twig/twig/src/Node/NodeCaptureInterface.php', + 'Twig\\Node\\NodeOutputInterface' => __DIR__ . '/..' . '/twig/twig/src/Node/NodeOutputInterface.php', + 'Twig\\Node\\PrintNode' => __DIR__ . '/..' . '/twig/twig/src/Node/PrintNode.php', + 'Twig\\Node\\SandboxNode' => __DIR__ . '/..' . '/twig/twig/src/Node/SandboxNode.php', + 'Twig\\Node\\SandboxedPrintNode' => __DIR__ . '/..' . '/twig/twig/src/Node/SandboxedPrintNode.php', + 'Twig\\Node\\SetNode' => __DIR__ . '/..' . '/twig/twig/src/Node/SetNode.php', + 'Twig\\Node\\SetTempNode' => __DIR__ . '/..' . '/twig/twig/src/Node/SetTempNode.php', + 'Twig\\Node\\SpacelessNode' => __DIR__ . '/..' . '/twig/twig/src/Node/SpacelessNode.php', + 'Twig\\Node\\TextNode' => __DIR__ . '/..' . '/twig/twig/src/Node/TextNode.php', + 'Twig\\Node\\WithNode' => __DIR__ . '/..' . '/twig/twig/src/Node/WithNode.php', + 'Twig\\Parser' => __DIR__ . '/..' . '/twig/twig/src/Parser.php', + 'Twig\\Profiler\\Dumper\\BaseDumper' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Dumper/BaseDumper.php', + 'Twig\\Profiler\\Dumper\\BlackfireDumper' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Dumper/BlackfireDumper.php', + 'Twig\\Profiler\\Dumper\\HtmlDumper' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Dumper/HtmlDumper.php', + 'Twig\\Profiler\\Dumper\\TextDumper' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Dumper/TextDumper.php', + 'Twig\\Profiler\\NodeVisitor\\ProfilerNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php', + 'Twig\\Profiler\\Node\\EnterProfileNode' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Node/EnterProfileNode.php', + 'Twig\\Profiler\\Node\\LeaveProfileNode' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Node/LeaveProfileNode.php', + 'Twig\\Profiler\\Profile' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Profile.php', + 'Twig\\RuntimeLoader\\ContainerRuntimeLoader' => __DIR__ . '/..' . '/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php', + 'Twig\\RuntimeLoader\\FactoryRuntimeLoader' => __DIR__ . '/..' . '/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php', + 'Twig\\RuntimeLoader\\RuntimeLoaderInterface' => __DIR__ . '/..' . '/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php', + 'Twig\\Sandbox\\SecurityError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityError.php', + 'Twig\\Sandbox\\SecurityNotAllowedFilterError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php', + 'Twig\\Sandbox\\SecurityNotAllowedFunctionError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php', + 'Twig\\Sandbox\\SecurityNotAllowedMethodError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php', + 'Twig\\Sandbox\\SecurityNotAllowedPropertyError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php', + 'Twig\\Sandbox\\SecurityNotAllowedTagError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php', + 'Twig\\Sandbox\\SecurityPolicy' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityPolicy.php', + 'Twig\\Sandbox\\SecurityPolicyInterface' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityPolicyInterface.php', + 'Twig\\Source' => __DIR__ . '/..' . '/twig/twig/src/Source.php', + 'Twig\\Template' => __DIR__ . '/..' . '/twig/twig/src/Template.php', + 'Twig\\TemplateWrapper' => __DIR__ . '/..' . '/twig/twig/src/TemplateWrapper.php', + 'Twig\\Test\\IntegrationTestCase' => __DIR__ . '/..' . '/twig/twig/src/Test/IntegrationTestCase.php', + 'Twig\\Test\\NodeTestCase' => __DIR__ . '/..' . '/twig/twig/src/Test/NodeTestCase.php', + 'Twig\\Token' => __DIR__ . '/..' . '/twig/twig/src/Token.php', + 'Twig\\TokenParser\\AbstractTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/AbstractTokenParser.php', + 'Twig\\TokenParser\\AutoEscapeTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/AutoEscapeTokenParser.php', + 'Twig\\TokenParser\\BlockTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/BlockTokenParser.php', + 'Twig\\TokenParser\\DoTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/DoTokenParser.php', + 'Twig\\TokenParser\\EmbedTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/EmbedTokenParser.php', + 'Twig\\TokenParser\\ExtendsTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/ExtendsTokenParser.php', + 'Twig\\TokenParser\\FilterTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/FilterTokenParser.php', + 'Twig\\TokenParser\\FlushTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/FlushTokenParser.php', + 'Twig\\TokenParser\\ForTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/ForTokenParser.php', + 'Twig\\TokenParser\\FromTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/FromTokenParser.php', + 'Twig\\TokenParser\\IfTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/IfTokenParser.php', + 'Twig\\TokenParser\\ImportTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/ImportTokenParser.php', + 'Twig\\TokenParser\\IncludeTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/IncludeTokenParser.php', + 'Twig\\TokenParser\\MacroTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/MacroTokenParser.php', + 'Twig\\TokenParser\\SandboxTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/SandboxTokenParser.php', + 'Twig\\TokenParser\\SetTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/SetTokenParser.php', + 'Twig\\TokenParser\\SpacelessTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/SpacelessTokenParser.php', + 'Twig\\TokenParser\\TokenParserInterface' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/TokenParserInterface.php', + 'Twig\\TokenParser\\UseTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/UseTokenParser.php', + 'Twig\\TokenParser\\WithTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/WithTokenParser.php', + 'Twig\\TokenStream' => __DIR__ . '/..' . '/twig/twig/src/TokenStream.php', + 'Twig\\TwigFilter' => __DIR__ . '/..' . '/twig/twig/src/TwigFilter.php', + 'Twig\\TwigFunction' => __DIR__ . '/..' . '/twig/twig/src/TwigFunction.php', + 'Twig\\TwigTest' => __DIR__ . '/..' . '/twig/twig/src/TwigTest.php', + 'Twig\\Util\\DeprecationCollector' => __DIR__ . '/..' . '/twig/twig/src/Util/DeprecationCollector.php', + 'Twig\\Util\\TemplateDirIterator' => __DIR__ . '/..' . '/twig/twig/src/Util/TemplateDirIterator.php', + 'Twig_Autoloader' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Autoloader.php', + 'Twig_BaseNodeVisitor' => __DIR__ . '/..' . '/twig/twig/lib/Twig/BaseNodeVisitor.php', + 'Twig_CacheInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/CacheInterface.php', + 'Twig_Cache_Filesystem' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Cache/Filesystem.php', + 'Twig_Cache_Null' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Cache/Null.php', + 'Twig_ChainTestLoaderInterface' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Loader/ChainTest.php', + 'Twig_ChainTestLoaderWithExistsInterface' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Loader/ChainTest.php', + 'Twig_Compiler' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Compiler.php', + 'Twig_CompilerInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/CompilerInterface.php', + 'Twig_ContainerRuntimeLoader' => __DIR__ . '/..' . '/twig/twig/lib/Twig/ContainerRuntimeLoader.php', + 'Twig_Environment' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Environment.php', + 'Twig_EnvironmentTestLoaderInterface' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Error' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Error.php', + 'Twig_Error_Loader' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Error/Loader.php', + 'Twig_Error_Runtime' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Error/Runtime.php', + 'Twig_Error_Syntax' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Error/Syntax.php', + 'Twig_ExistsLoaderInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/ExistsLoaderInterface.php', + 'Twig_ExpressionParser' => __DIR__ . '/..' . '/twig/twig/lib/Twig/ExpressionParser.php', + 'Twig_Extension' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension.php', + 'Twig_ExtensionInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/ExtensionInterface.php', + 'Twig_Extension_Core' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/Core.php', + 'Twig_Extension_Debug' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/Debug.php', + 'Twig_Extension_Escaper' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/Escaper.php', + 'Twig_Extension_GlobalsInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/GlobalsInterface.php', + 'Twig_Extension_InitRuntimeInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/InitRuntimeInterface.php', + 'Twig_Extension_Optimizer' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/Optimizer.php', + 'Twig_Extension_Profiler' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/Profiler.php', + 'Twig_Extension_Sandbox' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/Sandbox.php', + 'Twig_Extension_Staging' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/Staging.php', + 'Twig_Extension_StringLoader' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Extension/StringLoader.php', + 'Twig_FactoryRuntimeLoader' => __DIR__ . '/..' . '/twig/twig/lib/Twig/FactoryRuntimeLoader.php', + 'Twig_FileExtensionEscapingStrategy' => __DIR__ . '/..' . '/twig/twig/lib/Twig/FileExtensionEscapingStrategy.php', + 'Twig_Filter' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Filter.php', + 'Twig_FilterCallableInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/FilterCallableInterface.php', + 'Twig_FilterInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/FilterInterface.php', + 'Twig_Filter_Function' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Filter/Function.php', + 'Twig_Filter_Method' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Filter/Method.php', + 'Twig_Filter_Node' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Filter/Node.php', + 'Twig_Function' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Function.php', + 'Twig_FunctionCallableInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/FunctionCallableInterface.php', + 'Twig_FunctionInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/FunctionInterface.php', + 'Twig_Function_Function' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Function/Function.php', + 'Twig_Function_Method' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Function/Method.php', + 'Twig_Function_Node' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Function/Node.php', + 'Twig_Lexer' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Lexer.php', + 'Twig_LexerInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/LexerInterface.php', + 'Twig_LoaderInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/LoaderInterface.php', + 'Twig_Loader_Array' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Loader/Array.php', + 'Twig_Loader_Chain' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Loader/Chain.php', + 'Twig_Loader_Filesystem' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Loader/Filesystem.php', + 'Twig_Loader_String' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Loader/String.php', + 'Twig_Markup' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Markup.php', + 'Twig_Node' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node.php', + 'Twig_NodeCaptureInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/NodeCaptureInterface.php', + 'Twig_NodeInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/NodeInterface.php', + 'Twig_NodeOutputInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/NodeOutputInterface.php', + 'Twig_NodeTraverser' => __DIR__ . '/..' . '/twig/twig/lib/Twig/NodeTraverser.php', + 'Twig_NodeVisitorInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/NodeVisitorInterface.php', + 'Twig_NodeVisitor_Escaper' => __DIR__ . '/..' . '/twig/twig/lib/Twig/NodeVisitor/Escaper.php', + 'Twig_NodeVisitor_Optimizer' => __DIR__ . '/..' . '/twig/twig/lib/Twig/NodeVisitor/Optimizer.php', + 'Twig_NodeVisitor_SafeAnalysis' => __DIR__ . '/..' . '/twig/twig/lib/Twig/NodeVisitor/SafeAnalysis.php', + 'Twig_NodeVisitor_Sandbox' => __DIR__ . '/..' . '/twig/twig/lib/Twig/NodeVisitor/Sandbox.php', + 'Twig_Node_AutoEscape' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/AutoEscape.php', + 'Twig_Node_Block' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Block.php', + 'Twig_Node_BlockReference' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/BlockReference.php', + 'Twig_Node_Body' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Body.php', + 'Twig_Node_CheckSecurity' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/CheckSecurity.php', + 'Twig_Node_Do' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Do.php', + 'Twig_Node_Embed' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Embed.php', + 'Twig_Node_Expression' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression.php', + 'Twig_Node_Expression_Array' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Array.php', + 'Twig_Node_Expression_AssignName' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/AssignName.php', + 'Twig_Node_Expression_Binary' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary.php', + 'Twig_Node_Expression_Binary_Add' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Add.php', + 'Twig_Node_Expression_Binary_And' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/And.php', + 'Twig_Node_Expression_Binary_BitwiseAnd' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseAnd.php', + 'Twig_Node_Expression_Binary_BitwiseOr' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseOr.php', + 'Twig_Node_Expression_Binary_BitwiseXor' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseXor.php', + 'Twig_Node_Expression_Binary_Concat' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Concat.php', + 'Twig_Node_Expression_Binary_Div' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Div.php', + 'Twig_Node_Expression_Binary_EndsWith' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/EndsWith.php', + 'Twig_Node_Expression_Binary_Equal' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Equal.php', + 'Twig_Node_Expression_Binary_FloorDiv' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/FloorDiv.php', + 'Twig_Node_Expression_Binary_Greater' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Greater.php', + 'Twig_Node_Expression_Binary_GreaterEqual' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/GreaterEqual.php', + 'Twig_Node_Expression_Binary_In' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/In.php', + 'Twig_Node_Expression_Binary_Less' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Less.php', + 'Twig_Node_Expression_Binary_LessEqual' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/LessEqual.php', + 'Twig_Node_Expression_Binary_Matches' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Matches.php', + 'Twig_Node_Expression_Binary_Mod' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Mod.php', + 'Twig_Node_Expression_Binary_Mul' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Mul.php', + 'Twig_Node_Expression_Binary_NotEqual' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/NotEqual.php', + 'Twig_Node_Expression_Binary_NotIn' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/NotIn.php', + 'Twig_Node_Expression_Binary_Or' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Or.php', + 'Twig_Node_Expression_Binary_Power' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Power.php', + 'Twig_Node_Expression_Binary_Range' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Range.php', + 'Twig_Node_Expression_Binary_StartsWith' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/StartsWith.php', + 'Twig_Node_Expression_Binary_Sub' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Binary/Sub.php', + 'Twig_Node_Expression_BlockReference' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/BlockReference.php', + 'Twig_Node_Expression_Call' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Call.php', + 'Twig_Node_Expression_Conditional' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Conditional.php', + 'Twig_Node_Expression_Constant' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Constant.php', + 'Twig_Node_Expression_ExtensionReference' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/ExtensionReference.php', + 'Twig_Node_Expression_Filter' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Filter.php', + 'Twig_Node_Expression_Filter_Default' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Filter/Default.php', + 'Twig_Node_Expression_Function' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Function.php', + 'Twig_Node_Expression_GetAttr' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/GetAttr.php', + 'Twig_Node_Expression_MethodCall' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/MethodCall.php', + 'Twig_Node_Expression_Name' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Name.php', + 'Twig_Node_Expression_NullCoalesce' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/NullCoalesce.php', + 'Twig_Node_Expression_Parent' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Parent.php', + 'Twig_Node_Expression_TempName' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/TempName.php', + 'Twig_Node_Expression_Test' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Test.php', + 'Twig_Node_Expression_Test_Constant' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Test/Constant.php', + 'Twig_Node_Expression_Test_Defined' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Test/Defined.php', + 'Twig_Node_Expression_Test_Divisibleby' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Test/Divisibleby.php', + 'Twig_Node_Expression_Test_Even' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Test/Even.php', + 'Twig_Node_Expression_Test_Null' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Test/Null.php', + 'Twig_Node_Expression_Test_Odd' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Test/Odd.php', + 'Twig_Node_Expression_Test_Sameas' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Test/Sameas.php', + 'Twig_Node_Expression_Unary' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Unary.php', + 'Twig_Node_Expression_Unary_Neg' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Unary/Neg.php', + 'Twig_Node_Expression_Unary_Not' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Unary/Not.php', + 'Twig_Node_Expression_Unary_Pos' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Expression/Unary/Pos.php', + 'Twig_Node_Flush' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Flush.php', + 'Twig_Node_For' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/For.php', + 'Twig_Node_ForLoop' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/ForLoop.php', + 'Twig_Node_If' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/If.php', + 'Twig_Node_Import' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Import.php', + 'Twig_Node_Include' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Include.php', + 'Twig_Node_Macro' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Macro.php', + 'Twig_Node_Module' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Module.php', + 'Twig_Node_Print' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Print.php', + 'Twig_Node_Sandbox' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Sandbox.php', + 'Twig_Node_SandboxedPrint' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/SandboxedPrint.php', + 'Twig_Node_Set' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Set.php', + 'Twig_Node_SetTemp' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/SetTemp.php', + 'Twig_Node_Spaceless' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Spaceless.php', + 'Twig_Node_Text' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/Text.php', + 'Twig_Node_With' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Node/With.php', + 'Twig_Parser' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Parser.php', + 'Twig_ParserInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/ParserInterface.php', + 'Twig_Profiler_Dumper_Base' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Profiler/Dumper/Base.php', + 'Twig_Profiler_Dumper_Blackfire' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Profiler/Dumper/Blackfire.php', + 'Twig_Profiler_Dumper_Html' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Profiler/Dumper/Html.php', + 'Twig_Profiler_Dumper_Text' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Profiler/Dumper/Text.php', + 'Twig_Profiler_NodeVisitor_Profiler' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Profiler/NodeVisitor/Profiler.php', + 'Twig_Profiler_Node_EnterProfile' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Profiler/Node/EnterProfile.php', + 'Twig_Profiler_Node_LeaveProfile' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Profiler/Node/LeaveProfile.php', + 'Twig_Profiler_Profile' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Profiler/Profile.php', + 'Twig_RuntimeLoaderInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/RuntimeLoaderInterface.php', + 'Twig_Sandbox_SecurityError' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Sandbox/SecurityError.php', + 'Twig_Sandbox_SecurityNotAllowedFilterError' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedFilterError.php', + 'Twig_Sandbox_SecurityNotAllowedFunctionError' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedFunctionError.php', + 'Twig_Sandbox_SecurityNotAllowedMethodError' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedMethodError.php', + 'Twig_Sandbox_SecurityNotAllowedPropertyError' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedPropertyError.php', + 'Twig_Sandbox_SecurityNotAllowedTagError' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedTagError.php', + 'Twig_Sandbox_SecurityPolicy' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Sandbox/SecurityPolicy.php', + 'Twig_Sandbox_SecurityPolicyInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Sandbox/SecurityPolicyInterface.php', + 'Twig_SimpleFilter' => __DIR__ . '/..' . '/twig/twig/lib/Twig/SimpleFilter.php', + 'Twig_SimpleFunction' => __DIR__ . '/..' . '/twig/twig/lib/Twig/SimpleFunction.php', + 'Twig_SimpleTest' => __DIR__ . '/..' . '/twig/twig/lib/Twig/SimpleTest.php', + 'Twig_Source' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Source.php', + 'Twig_SourceContextLoaderInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/SourceContextLoaderInterface.php', + 'Twig_Template' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Template.php', + 'Twig_TemplateArrayAccessObject' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateGetIsMethods' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TemplateInterface.php', + 'Twig_TemplateMagicMethodExceptionObject' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMagicMethodObject' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMagicPropertyObject' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMagicPropertyObjectWithException' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMethodAndPropObject' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateMethodObject' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplatePropertyObject' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplatePropertyObjectAndArrayAccess' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplatePropertyObjectAndIterator' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplatePropertyObjectDefinedWithUndefinedValue' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateTestLoaderInterface' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_TemplateWrapper' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TemplateWrapper.php', + 'Twig_Test' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Test.php', + 'Twig_TestCallableInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TestCallableInterface.php', + 'Twig_TestInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TestInterface.php', + 'Twig_Test_EscapingTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/escapingTest.php', + 'Twig_Test_Function' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Test/Function.php', + 'Twig_Test_IntegrationTestCase' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Test/IntegrationTestCase.php', + 'Twig_Test_Loader_TemplateReference' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Loader/ArrayTest.php', + 'Twig_Test_Method' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Test/Method.php', + 'Twig_Test_Node' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Test/Node.php', + 'Twig_Test_NodeTestCase' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Test/NodeTestCase.php', + 'Twig_Tests_AutoloaderTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/AutoloaderTest.php', + 'Twig_Tests_Cache_FilesystemTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Cache/FilesystemTest.php', + 'Twig_Tests_CompilerTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/CompilerTest.php', + 'Twig_Tests_ContainerRuntimeLoaderTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/ContainerRuntimeLoaderTest.php', + 'Twig_Tests_EnvironmentTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Extension' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_ExtensionWithDeprecationInitRuntime' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_ExtensionWithoutDeprecationInitRuntime' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_ExtensionWithoutRuntime' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Extension_DynamicWithDeprecatedName' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Extension_WithDeprecatedName' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Extension_WithGlobals' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_NodeVisitor' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_Runtime' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_EnvironmentTest_TokenParser' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/EnvironmentTest.php', + 'Twig_Tests_ErrorTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/ErrorTest.php', + 'Twig_Tests_ErrorTest_Foo' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/ErrorTest.php', + 'Twig_Tests_ExpressionParserTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/ExpressionParserTest.php', + 'Twig_Tests_Extension_CoreTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Extension/CoreTest.php', + 'Twig_Tests_Extension_SandboxTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Extension/SandboxTest.php', + 'Twig_Tests_FactoryRuntimeLoaderTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/FactoryRuntimeLoaderTest.php', + 'Twig_Tests_FileCachingTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/FileCachingTest.php', + 'Twig_Tests_FileExtensionEscapingStrategyTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/FileExtensionEscapingStrategyTest.php', + 'Twig_Tests_FilesystemHelper' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/FilesystemHelper.php', + 'Twig_Tests_IntegrationTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/IntegrationTest.php', + 'Twig_Tests_LegacyIntegrationTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/LegacyIntegrationTest.php', + 'Twig_Tests_LexerTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/LexerTest.php', + 'Twig_Tests_Loader_ArrayTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Loader/ArrayTest.php', + 'Twig_Tests_Loader_ChainTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Loader/ChainTest.php', + 'Twig_Tests_Loader_FilesystemTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Loader/FilesystemTest.php', + 'Twig_Tests_NativeExtensionTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/NativeExtensionTest.php', + 'Twig_Tests_NodeVisitor_OptimizerTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/NodeVisitor/OptimizerTest.php', + 'Twig_Tests_Node_AutoEscapeTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/AutoEscapeTest.php', + 'Twig_Tests_Node_BlockReferenceTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/BlockReferenceTest.php', + 'Twig_Tests_Node_BlockTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/BlockTest.php', + 'Twig_Tests_Node_DoTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/DoTest.php', + 'Twig_Tests_Node_Expression_ArrayTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/ArrayTest.php', + 'Twig_Tests_Node_Expression_AssignNameTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/AssignNameTest.php', + 'Twig_Tests_Node_Expression_Binary_AddTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/AddTest.php', + 'Twig_Tests_Node_Expression_Binary_AndTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/AndTest.php', + 'Twig_Tests_Node_Expression_Binary_ConcatTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/ConcatTest.php', + 'Twig_Tests_Node_Expression_Binary_DivTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/DivTest.php', + 'Twig_Tests_Node_Expression_Binary_FloorDivTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/FloorDivTest.php', + 'Twig_Tests_Node_Expression_Binary_ModTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/ModTest.php', + 'Twig_Tests_Node_Expression_Binary_MulTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/MulTest.php', + 'Twig_Tests_Node_Expression_Binary_OrTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/OrTest.php', + 'Twig_Tests_Node_Expression_Binary_SubTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Binary/SubTest.php', + 'Twig_Tests_Node_Expression_Call' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/CallTest.php', + 'Twig_Tests_Node_Expression_CallTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/CallTest.php', + 'Twig_Tests_Node_Expression_ConditionalTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/ConditionalTest.php', + 'Twig_Tests_Node_Expression_ConstantTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/ConstantTest.php', + 'Twig_Tests_Node_Expression_FilterTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/FilterTest.php', + 'Twig_Tests_Node_Expression_FunctionTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/FunctionTest.php', + 'Twig_Tests_Node_Expression_GetAttrTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/GetAttrTest.php', + 'Twig_Tests_Node_Expression_NameTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/NameTest.php', + 'Twig_Tests_Node_Expression_NullCoalesceTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/NullCoalesceTest.php', + 'Twig_Tests_Node_Expression_ParentTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/ParentTest.php', + 'Twig_Tests_Node_Expression_TestTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/TestTest.php', + 'Twig_Tests_Node_Expression_Unary_NegTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Unary/NegTest.php', + 'Twig_Tests_Node_Expression_Unary_NotTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Unary/NotTest.php', + 'Twig_Tests_Node_Expression_Unary_PosTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/Expression/Unary/PosTest.php', + 'Twig_Tests_Node_ForTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/ForTest.php', + 'Twig_Tests_Node_IfTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/IfTest.php', + 'Twig_Tests_Node_ImportTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/ImportTest.php', + 'Twig_Tests_Node_IncludeTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/IncludeTest.php', + 'Twig_Tests_Node_MacroTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/MacroTest.php', + 'Twig_Tests_Node_ModuleTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/ModuleTest.php', + 'Twig_Tests_Node_PrintTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/PrintTest.php', + 'Twig_Tests_Node_SandboxTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/SandboxTest.php', + 'Twig_Tests_Node_SandboxedPrintTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/SandboxedPrintTest.php', + 'Twig_Tests_Node_SetTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/SetTest.php', + 'Twig_Tests_Node_SpacelessTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/SpacelessTest.php', + 'Twig_Tests_Node_TextTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Node/TextTest.php', + 'Twig_Tests_ParserTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/ParserTest.php', + 'Twig_Tests_Profiler_Dumper_AbstractTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Profiler/Dumper/AbstractTest.php', + 'Twig_Tests_Profiler_Dumper_BlackfireTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Profiler/Dumper/BlackfireTest.php', + 'Twig_Tests_Profiler_Dumper_HtmlTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Profiler/Dumper/HtmlTest.php', + 'Twig_Tests_Profiler_Dumper_TextTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Profiler/Dumper/TextTest.php', + 'Twig_Tests_Profiler_ProfileTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Profiler/ProfileTest.php', + 'Twig_Tests_TemplateTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateTest.php', + 'Twig_Tests_TemplateWrapperTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TemplateWrapperTest.php', + 'Twig_Tests_TokenStreamTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/TokenStreamTest.php', + 'Twig_Tests_Util_DeprecationCollectorTest' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Util/DeprecationCollectorTest.php', + 'Twig_Tests_Util_Iterator' => __DIR__ . '/..' . '/twig/twig/test/Twig/Tests/Util/DeprecationCollectorTest.php', + 'Twig_Token' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Token.php', + 'Twig_TokenParser' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser.php', + 'Twig_TokenParserBroker' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParserBroker.php', + 'Twig_TokenParserBrokerInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParserBrokerInterface.php', + 'Twig_TokenParserInterface' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParserInterface.php', + 'Twig_TokenParser_AutoEscape' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/AutoEscape.php', + 'Twig_TokenParser_Block' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Block.php', + 'Twig_TokenParser_Do' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Do.php', + 'Twig_TokenParser_Embed' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Embed.php', + 'Twig_TokenParser_Extends' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Extends.php', + 'Twig_TokenParser_Filter' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Filter.php', + 'Twig_TokenParser_Flush' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Flush.php', + 'Twig_TokenParser_For' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/For.php', + 'Twig_TokenParser_From' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/From.php', + 'Twig_TokenParser_If' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/If.php', + 'Twig_TokenParser_Import' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Import.php', + 'Twig_TokenParser_Include' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Include.php', + 'Twig_TokenParser_Macro' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Macro.php', + 'Twig_TokenParser_Sandbox' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Sandbox.php', + 'Twig_TokenParser_Set' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Set.php', + 'Twig_TokenParser_Spaceless' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Spaceless.php', + 'Twig_TokenParser_Use' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/Use.php', + 'Twig_TokenParser_With' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenParser/With.php', + 'Twig_TokenStream' => __DIR__ . '/..' . '/twig/twig/lib/Twig/TokenStream.php', + 'Twig_Util_DeprecationCollector' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Util/DeprecationCollector.php', + 'Twig_Util_TemplateDirIterator' => __DIR__ . '/..' . '/twig/twig/lib/Twig/Util/TemplateDirIterator.php', + 'TwoTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Regression/Trac/783/TwoTest.php', + 'UseTest' => __DIR__ . '/..' . '/nikic/php-parser/test/PhpParser/Builder/UseTest.php', + 'Util_ConfigurationTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Util/ConfigurationTest.php', + 'Util_GetoptTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Util/GetoptTest.php', + 'Util_GlobalStateTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Util/GlobalStateTest.php', + 'Util_RegexTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Util/RegexTest.php', + 'Util_TestDox_NamePrettifierTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Util/TestDox/NamePrettifierTest.php', + 'Util_TestTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Util/TestTest.php', + 'Util_XMLTest' => __DIR__ . '/..' . '/phpunit/phpunit/tests/Util/XMLTest.php', + 'WasRun' => __DIR__ . '/..' . '/phpunit/phpunit/tests/_files/WasRun.php', + 'ZendBench\\Cache\\CommonStorageAdapterBench' => __DIR__ . '/..' . '/zendframework/zend-cache/benchmark/CommonStorageAdapterBench.php', + 'ZendBench\\Cache\\FilesystemStorageAdapterBench' => __DIR__ . '/..' . '/zendframework/zend-cache/benchmark/FilesystemStorageAdapterBench.php', + 'ZendBench\\Cache\\MemoryStorageAdapterBench' => __DIR__ . '/..' . '/zendframework/zend-cache/benchmark/MemoryStorageAdapterBench.php', + 'ZendBench\\ServiceManager\\BenchAsset\\AbstractFactoryFoo' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/benchmarks/BenchAsset/AbstractFactoryFoo.php', + 'ZendBench\\ServiceManager\\BenchAsset\\FactoryFoo' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/benchmarks/BenchAsset/FactoryFoo.php', + 'ZendBench\\ServiceManager\\BenchAsset\\Foo' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/benchmarks/BenchAsset/Foo.php', + 'ZendBench\\ServiceManager\\FetchServices' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/benchmarks/FetchServices.php', + 'ZendBench\\Stdlib\\ExtractPriorityQueue' => __DIR__ . '/..' . '/zendframework/zend-stdlib/benchmark/ExtractPriorityQueue.php', + 'ZendBench\\Stdlib\\InsertPriorityQueue' => __DIR__ . '/..' . '/zendframework/zend-stdlib/benchmark/InsertPriorityQueue.php', + 'ZendBench\\Stdlib\\RemovePriorityQueue' => __DIR__ . '/..' . '/zendframework/zend-stdlib/benchmark/RemovePriorityQueue.php', + 'Zend\\Cache\\ConfigProvider' => __DIR__ . '/..' . '/zendframework/zend-cache/src/ConfigProvider.php', + 'Zend\\Cache\\Exception\\BadMethodCallException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/BadMethodCallException.php', + 'Zend\\Cache\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/ExceptionInterface.php', + 'Zend\\Cache\\Exception\\ExtensionNotLoadedException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Cache\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/InvalidArgumentException.php', + 'Zend\\Cache\\Exception\\LogicException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/LogicException.php', + 'Zend\\Cache\\Exception\\MissingDependencyException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/MissingDependencyException.php', + 'Zend\\Cache\\Exception\\MissingKeyException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/MissingKeyException.php', + 'Zend\\Cache\\Exception\\OutOfSpaceException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/OutOfSpaceException.php', + 'Zend\\Cache\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/RuntimeException.php', + 'Zend\\Cache\\Exception\\UnexpectedValueException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/UnexpectedValueException.php', + 'Zend\\Cache\\Exception\\UnsupportedMethodCallException' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Exception/UnsupportedMethodCallException.php', + 'Zend\\Cache\\Module' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Module.php', + 'Zend\\Cache\\PatternFactory' => __DIR__ . '/..' . '/zendframework/zend-cache/src/PatternFactory.php', + 'Zend\\Cache\\PatternPluginManager' => __DIR__ . '/..' . '/zendframework/zend-cache/src/PatternPluginManager.php', + 'Zend\\Cache\\Pattern\\AbstractPattern' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Pattern/AbstractPattern.php', + 'Zend\\Cache\\Pattern\\CallbackCache' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Pattern/CallbackCache.php', + 'Zend\\Cache\\Pattern\\CaptureCache' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Pattern/CaptureCache.php', + 'Zend\\Cache\\Pattern\\ClassCache' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Pattern/ClassCache.php', + 'Zend\\Cache\\Pattern\\ObjectCache' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Pattern/ObjectCache.php', + 'Zend\\Cache\\Pattern\\OutputCache' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Pattern/OutputCache.php', + 'Zend\\Cache\\Pattern\\PatternInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Pattern/PatternInterface.php', + 'Zend\\Cache\\Pattern\\PatternOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Pattern/PatternOptions.php', + 'Zend\\Cache\\Service\\PatternPluginManagerFactory' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Service/PatternPluginManagerFactory.php', + 'Zend\\Cache\\Service\\PluginManagerLookupTrait' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Service/PluginManagerLookupTrait.php', + 'Zend\\Cache\\Service\\StorageAdapterPluginManagerFactory' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Service/StorageAdapterPluginManagerFactory.php', + 'Zend\\Cache\\Service\\StorageCacheAbstractServiceFactory' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Service/StorageCacheAbstractServiceFactory.php', + 'Zend\\Cache\\Service\\StorageCacheFactory' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Service/StorageCacheFactory.php', + 'Zend\\Cache\\Service\\StoragePluginManagerFactory' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Service/StoragePluginManagerFactory.php', + 'Zend\\Cache\\StorageFactory' => __DIR__ . '/..' . '/zendframework/zend-cache/src/StorageFactory.php', + 'Zend\\Cache\\Storage\\AdapterPluginManager' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/AdapterPluginManager.php', + 'Zend\\Cache\\Storage\\Adapter\\AbstractAdapter' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/AbstractAdapter.php', + 'Zend\\Cache\\Storage\\Adapter\\AbstractZendServer' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/AbstractZendServer.php', + 'Zend\\Cache\\Storage\\Adapter\\AdapterOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/AdapterOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\Apc' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/Apc.php', + 'Zend\\Cache\\Storage\\Adapter\\ApcIterator' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/ApcIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\ApcOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/ApcOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\Apcu' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/Apcu.php', + 'Zend\\Cache\\Storage\\Adapter\\ApcuIterator' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/ApcuIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\ApcuOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/ApcuOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\BlackHole' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/BlackHole.php', + 'Zend\\Cache\\Storage\\Adapter\\Dba' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/Dba.php', + 'Zend\\Cache\\Storage\\Adapter\\DbaIterator' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/DbaIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\DbaOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/DbaOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\Filesystem' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/Filesystem.php', + 'Zend\\Cache\\Storage\\Adapter\\FilesystemIterator' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/FilesystemIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\FilesystemOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/FilesystemOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\KeyListIterator' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/KeyListIterator.php', + 'Zend\\Cache\\Storage\\Adapter\\Memcache' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/Memcache.php', + 'Zend\\Cache\\Storage\\Adapter\\MemcacheOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/MemcacheOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\MemcacheResourceManager' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/MemcacheResourceManager.php', + 'Zend\\Cache\\Storage\\Adapter\\Memcached' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/Memcached.php', + 'Zend\\Cache\\Storage\\Adapter\\MemcachedOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/MemcachedOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\MemcachedResourceManager' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/MemcachedResourceManager.php', + 'Zend\\Cache\\Storage\\Adapter\\Memory' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/Memory.php', + 'Zend\\Cache\\Storage\\Adapter\\MemoryOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/MemoryOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\MongoDb' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/MongoDb.php', + 'Zend\\Cache\\Storage\\Adapter\\MongoDbOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/MongoDbOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\MongoDbResourceManager' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/MongoDbResourceManager.php', + 'Zend\\Cache\\Storage\\Adapter\\Redis' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/Redis.php', + 'Zend\\Cache\\Storage\\Adapter\\RedisOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/RedisOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\RedisResourceManager' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/RedisResourceManager.php', + 'Zend\\Cache\\Storage\\Adapter\\Session' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/Session.php', + 'Zend\\Cache\\Storage\\Adapter\\SessionOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/SessionOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\WinCache' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/WinCache.php', + 'Zend\\Cache\\Storage\\Adapter\\WinCacheOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/WinCacheOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\XCache' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/XCache.php', + 'Zend\\Cache\\Storage\\Adapter\\XCacheOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/XCacheOptions.php', + 'Zend\\Cache\\Storage\\Adapter\\ZendServerDisk' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/ZendServerDisk.php', + 'Zend\\Cache\\Storage\\Adapter\\ZendServerShm' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Adapter/ZendServerShm.php', + 'Zend\\Cache\\Storage\\AvailableSpaceCapableInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/AvailableSpaceCapableInterface.php', + 'Zend\\Cache\\Storage\\Capabilities' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Capabilities.php', + 'Zend\\Cache\\Storage\\ClearByNamespaceInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/ClearByNamespaceInterface.php', + 'Zend\\Cache\\Storage\\ClearByPrefixInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/ClearByPrefixInterface.php', + 'Zend\\Cache\\Storage\\ClearExpiredInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/ClearExpiredInterface.php', + 'Zend\\Cache\\Storage\\Event' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Event.php', + 'Zend\\Cache\\Storage\\ExceptionEvent' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/ExceptionEvent.php', + 'Zend\\Cache\\Storage\\FlushableInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/FlushableInterface.php', + 'Zend\\Cache\\Storage\\IterableInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/IterableInterface.php', + 'Zend\\Cache\\Storage\\IteratorInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/IteratorInterface.php', + 'Zend\\Cache\\Storage\\OptimizableInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/OptimizableInterface.php', + 'Zend\\Cache\\Storage\\PluginManager' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/PluginManager.php', + 'Zend\\Cache\\Storage\\Plugin\\AbstractPlugin' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Plugin/AbstractPlugin.php', + 'Zend\\Cache\\Storage\\Plugin\\ClearExpiredByFactor' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Plugin/ClearExpiredByFactor.php', + 'Zend\\Cache\\Storage\\Plugin\\ExceptionHandler' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Plugin/ExceptionHandler.php', + 'Zend\\Cache\\Storage\\Plugin\\IgnoreUserAbort' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Plugin/IgnoreUserAbort.php', + 'Zend\\Cache\\Storage\\Plugin\\OptimizeByFactor' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Plugin/OptimizeByFactor.php', + 'Zend\\Cache\\Storage\\Plugin\\PluginInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Plugin/PluginInterface.php', + 'Zend\\Cache\\Storage\\Plugin\\PluginOptions' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Plugin/PluginOptions.php', + 'Zend\\Cache\\Storage\\Plugin\\Serializer' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/Plugin/Serializer.php', + 'Zend\\Cache\\Storage\\PostEvent' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/PostEvent.php', + 'Zend\\Cache\\Storage\\StorageInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/StorageInterface.php', + 'Zend\\Cache\\Storage\\TaggableInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/TaggableInterface.php', + 'Zend\\Cache\\Storage\\TotalSpaceCapableInterface' => __DIR__ . '/..' . '/zendframework/zend-cache/src/Storage/TotalSpaceCapableInterface.php', + 'Zend\\Config\\AbstractConfigFactory' => __DIR__ . '/..' . '/zendframework/zend-config/src/AbstractConfigFactory.php', + 'Zend\\Config\\Config' => __DIR__ . '/..' . '/zendframework/zend-config/src/Config.php', + 'Zend\\Config\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-config/src/Exception/ExceptionInterface.php', + 'Zend\\Config\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-config/src/Exception/InvalidArgumentException.php', + 'Zend\\Config\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-config/src/Exception/RuntimeException.php', + 'Zend\\Config\\Factory' => __DIR__ . '/..' . '/zendframework/zend-config/src/Factory.php', + 'Zend\\Config\\Processor\\Constant' => __DIR__ . '/..' . '/zendframework/zend-config/src/Processor/Constant.php', + 'Zend\\Config\\Processor\\Filter' => __DIR__ . '/..' . '/zendframework/zend-config/src/Processor/Filter.php', + 'Zend\\Config\\Processor\\ProcessorInterface' => __DIR__ . '/..' . '/zendframework/zend-config/src/Processor/ProcessorInterface.php', + 'Zend\\Config\\Processor\\Queue' => __DIR__ . '/..' . '/zendframework/zend-config/src/Processor/Queue.php', + 'Zend\\Config\\Processor\\Token' => __DIR__ . '/..' . '/zendframework/zend-config/src/Processor/Token.php', + 'Zend\\Config\\Processor\\Translator' => __DIR__ . '/..' . '/zendframework/zend-config/src/Processor/Translator.php', + 'Zend\\Config\\ReaderPluginManager' => __DIR__ . '/..' . '/zendframework/zend-config/src/ReaderPluginManager.php', + 'Zend\\Config\\Reader\\Ini' => __DIR__ . '/..' . '/zendframework/zend-config/src/Reader/Ini.php', + 'Zend\\Config\\Reader\\JavaProperties' => __DIR__ . '/..' . '/zendframework/zend-config/src/Reader/JavaProperties.php', + 'Zend\\Config\\Reader\\Json' => __DIR__ . '/..' . '/zendframework/zend-config/src/Reader/Json.php', + 'Zend\\Config\\Reader\\ReaderInterface' => __DIR__ . '/..' . '/zendframework/zend-config/src/Reader/ReaderInterface.php', + 'Zend\\Config\\Reader\\Xml' => __DIR__ . '/..' . '/zendframework/zend-config/src/Reader/Xml.php', + 'Zend\\Config\\Reader\\Yaml' => __DIR__ . '/..' . '/zendframework/zend-config/src/Reader/Yaml.php', + 'Zend\\Config\\WriterPluginManager' => __DIR__ . '/..' . '/zendframework/zend-config/src/WriterPluginManager.php', + 'Zend\\Config\\Writer\\AbstractWriter' => __DIR__ . '/..' . '/zendframework/zend-config/src/Writer/AbstractWriter.php', + 'Zend\\Config\\Writer\\Ini' => __DIR__ . '/..' . '/zendframework/zend-config/src/Writer/Ini.php', + 'Zend\\Config\\Writer\\Json' => __DIR__ . '/..' . '/zendframework/zend-config/src/Writer/Json.php', + 'Zend\\Config\\Writer\\PhpArray' => __DIR__ . '/..' . '/zendframework/zend-config/src/Writer/PhpArray.php', + 'Zend\\Config\\Writer\\WriterInterface' => __DIR__ . '/..' . '/zendframework/zend-config/src/Writer/WriterInterface.php', + 'Zend\\Config\\Writer\\Xml' => __DIR__ . '/..' . '/zendframework/zend-config/src/Writer/Xml.php', + 'Zend\\Config\\Writer\\Yaml' => __DIR__ . '/..' . '/zendframework/zend-config/src/Writer/Yaml.php', + 'Zend\\EventManager\\AbstractListenerAggregate' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/AbstractListenerAggregate.php', + 'Zend\\EventManager\\Event' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/Event.php', + 'Zend\\EventManager\\EventInterface' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/EventInterface.php', + 'Zend\\EventManager\\EventManager' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/EventManager.php', + 'Zend\\EventManager\\EventManagerAwareInterface' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/EventManagerAwareInterface.php', + 'Zend\\EventManager\\EventManagerAwareTrait' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/EventManagerAwareTrait.php', + 'Zend\\EventManager\\EventManagerInterface' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/EventManagerInterface.php', + 'Zend\\EventManager\\EventsCapableInterface' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/EventsCapableInterface.php', + 'Zend\\EventManager\\Exception\\DomainException' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/Exception/DomainException.php', + 'Zend\\EventManager\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/Exception/ExceptionInterface.php', + 'Zend\\EventManager\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/Exception/InvalidArgumentException.php', + 'Zend\\EventManager\\Exception\\InvalidCallbackException' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/Exception/InvalidCallbackException.php', + 'Zend\\EventManager\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/Exception/RuntimeException.php', + 'Zend\\EventManager\\FilterChain' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/FilterChain.php', + 'Zend\\EventManager\\Filter\\FilterInterface' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/Filter/FilterInterface.php', + 'Zend\\EventManager\\Filter\\FilterIterator' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/Filter/FilterIterator.php', + 'Zend\\EventManager\\LazyEventListener' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/LazyEventListener.php', + 'Zend\\EventManager\\LazyListener' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/LazyListener.php', + 'Zend\\EventManager\\LazyListenerAggregate' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/LazyListenerAggregate.php', + 'Zend\\EventManager\\ListenerAggregateInterface' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/ListenerAggregateInterface.php', + 'Zend\\EventManager\\ListenerAggregateTrait' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/ListenerAggregateTrait.php', + 'Zend\\EventManager\\ResponseCollection' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/ResponseCollection.php', + 'Zend\\EventManager\\SharedEventManager' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/SharedEventManager.php', + 'Zend\\EventManager\\SharedEventManagerInterface' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/SharedEventManagerInterface.php', + 'Zend\\EventManager\\SharedEventsCapableInterface' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/SharedEventsCapableInterface.php', + 'Zend\\EventManager\\Test\\EventListenerIntrospectionTrait' => __DIR__ . '/..' . '/zendframework/zend-eventmanager/src/Test/EventListenerIntrospectionTrait.php', + 'Zend\\Filter\\AbstractDateDropdown' => __DIR__ . '/..' . '/zendframework/zend-filter/src/AbstractDateDropdown.php', + 'Zend\\Filter\\AbstractFilter' => __DIR__ . '/..' . '/zendframework/zend-filter/src/AbstractFilter.php', + 'Zend\\Filter\\AbstractUnicode' => __DIR__ . '/..' . '/zendframework/zend-filter/src/AbstractUnicode.php', + 'Zend\\Filter\\BaseName' => __DIR__ . '/..' . '/zendframework/zend-filter/src/BaseName.php', + 'Zend\\Filter\\Blacklist' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Blacklist.php', + 'Zend\\Filter\\Boolean' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Boolean.php', + 'Zend\\Filter\\Callback' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Callback.php', + 'Zend\\Filter\\Compress' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress.php', + 'Zend\\Filter\\Compress\\AbstractCompressionAlgorithm' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress/AbstractCompressionAlgorithm.php', + 'Zend\\Filter\\Compress\\Bz2' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress/Bz2.php', + 'Zend\\Filter\\Compress\\CompressionAlgorithmInterface' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress/CompressionAlgorithmInterface.php', + 'Zend\\Filter\\Compress\\Gz' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress/Gz.php', + 'Zend\\Filter\\Compress\\Lzf' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress/Lzf.php', + 'Zend\\Filter\\Compress\\Rar' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress/Rar.php', + 'Zend\\Filter\\Compress\\Snappy' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress/Snappy.php', + 'Zend\\Filter\\Compress\\Tar' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress/Tar.php', + 'Zend\\Filter\\Compress\\Zip' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Compress/Zip.php', + 'Zend\\Filter\\ConfigProvider' => __DIR__ . '/..' . '/zendframework/zend-filter/src/ConfigProvider.php', + 'Zend\\Filter\\DataUnitFormatter' => __DIR__ . '/..' . '/zendframework/zend-filter/src/DataUnitFormatter.php', + 'Zend\\Filter\\DateSelect' => __DIR__ . '/..' . '/zendframework/zend-filter/src/DateSelect.php', + 'Zend\\Filter\\DateTimeFormatter' => __DIR__ . '/..' . '/zendframework/zend-filter/src/DateTimeFormatter.php', + 'Zend\\Filter\\DateTimeSelect' => __DIR__ . '/..' . '/zendframework/zend-filter/src/DateTimeSelect.php', + 'Zend\\Filter\\Decompress' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Decompress.php', + 'Zend\\Filter\\Decrypt' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Decrypt.php', + 'Zend\\Filter\\Digits' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Digits.php', + 'Zend\\Filter\\Dir' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Dir.php', + 'Zend\\Filter\\Encrypt' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Encrypt.php', + 'Zend\\Filter\\Encrypt\\BlockCipher' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Encrypt/BlockCipher.php', + 'Zend\\Filter\\Encrypt\\EncryptionAlgorithmInterface' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Encrypt/EncryptionAlgorithmInterface.php', + 'Zend\\Filter\\Encrypt\\Openssl' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Encrypt/Openssl.php', + 'Zend\\Filter\\Exception\\BadMethodCallException' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Exception/BadMethodCallException.php', + 'Zend\\Filter\\Exception\\DomainException' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Exception/DomainException.php', + 'Zend\\Filter\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Exception/ExceptionInterface.php', + 'Zend\\Filter\\Exception\\ExtensionNotLoadedException' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Filter\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Exception/InvalidArgumentException.php', + 'Zend\\Filter\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Exception/RuntimeException.php', + 'Zend\\Filter\\File\\Decrypt' => __DIR__ . '/..' . '/zendframework/zend-filter/src/File/Decrypt.php', + 'Zend\\Filter\\File\\Encrypt' => __DIR__ . '/..' . '/zendframework/zend-filter/src/File/Encrypt.php', + 'Zend\\Filter\\File\\LowerCase' => __DIR__ . '/..' . '/zendframework/zend-filter/src/File/LowerCase.php', + 'Zend\\Filter\\File\\Rename' => __DIR__ . '/..' . '/zendframework/zend-filter/src/File/Rename.php', + 'Zend\\Filter\\File\\RenameUpload' => __DIR__ . '/..' . '/zendframework/zend-filter/src/File/RenameUpload.php', + 'Zend\\Filter\\File\\UpperCase' => __DIR__ . '/..' . '/zendframework/zend-filter/src/File/UpperCase.php', + 'Zend\\Filter\\FilterChain' => __DIR__ . '/..' . '/zendframework/zend-filter/src/FilterChain.php', + 'Zend\\Filter\\FilterInterface' => __DIR__ . '/..' . '/zendframework/zend-filter/src/FilterInterface.php', + 'Zend\\Filter\\FilterPluginManager' => __DIR__ . '/..' . '/zendframework/zend-filter/src/FilterPluginManager.php', + 'Zend\\Filter\\FilterPluginManagerFactory' => __DIR__ . '/..' . '/zendframework/zend-filter/src/FilterPluginManagerFactory.php', + 'Zend\\Filter\\HtmlEntities' => __DIR__ . '/..' . '/zendframework/zend-filter/src/HtmlEntities.php', + 'Zend\\Filter\\Inflector' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Inflector.php', + 'Zend\\Filter\\Int' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Int.php', + 'Zend\\Filter\\Module' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Module.php', + 'Zend\\Filter\\MonthSelect' => __DIR__ . '/..' . '/zendframework/zend-filter/src/MonthSelect.php', + 'Zend\\Filter\\Null' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Null.php', + 'Zend\\Filter\\PregReplace' => __DIR__ . '/..' . '/zendframework/zend-filter/src/PregReplace.php', + 'Zend\\Filter\\RealPath' => __DIR__ . '/..' . '/zendframework/zend-filter/src/RealPath.php', + 'Zend\\Filter\\StaticFilter' => __DIR__ . '/..' . '/zendframework/zend-filter/src/StaticFilter.php', + 'Zend\\Filter\\StringToLower' => __DIR__ . '/..' . '/zendframework/zend-filter/src/StringToLower.php', + 'Zend\\Filter\\StringToUpper' => __DIR__ . '/..' . '/zendframework/zend-filter/src/StringToUpper.php', + 'Zend\\Filter\\StringTrim' => __DIR__ . '/..' . '/zendframework/zend-filter/src/StringTrim.php', + 'Zend\\Filter\\StripNewlines' => __DIR__ . '/..' . '/zendframework/zend-filter/src/StripNewlines.php', + 'Zend\\Filter\\StripTags' => __DIR__ . '/..' . '/zendframework/zend-filter/src/StripTags.php', + 'Zend\\Filter\\ToInt' => __DIR__ . '/..' . '/zendframework/zend-filter/src/ToInt.php', + 'Zend\\Filter\\ToNull' => __DIR__ . '/..' . '/zendframework/zend-filter/src/ToNull.php', + 'Zend\\Filter\\UpperCaseWords' => __DIR__ . '/..' . '/zendframework/zend-filter/src/UpperCaseWords.php', + 'Zend\\Filter\\UriNormalize' => __DIR__ . '/..' . '/zendframework/zend-filter/src/UriNormalize.php', + 'Zend\\Filter\\Whitelist' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Whitelist.php', + 'Zend\\Filter\\Word\\AbstractSeparator' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/AbstractSeparator.php', + 'Zend\\Filter\\Word\\CamelCaseToDash' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/CamelCaseToDash.php', + 'Zend\\Filter\\Word\\CamelCaseToSeparator' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/CamelCaseToSeparator.php', + 'Zend\\Filter\\Word\\CamelCaseToUnderscore' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/CamelCaseToUnderscore.php', + 'Zend\\Filter\\Word\\DashToCamelCase' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/DashToCamelCase.php', + 'Zend\\Filter\\Word\\DashToSeparator' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/DashToSeparator.php', + 'Zend\\Filter\\Word\\DashToUnderscore' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/DashToUnderscore.php', + 'Zend\\Filter\\Word\\SeparatorToCamelCase' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/SeparatorToCamelCase.php', + 'Zend\\Filter\\Word\\SeparatorToDash' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/SeparatorToDash.php', + 'Zend\\Filter\\Word\\SeparatorToSeparator' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/SeparatorToSeparator.php', + 'Zend\\Filter\\Word\\Service\\SeparatorToSeparatorFactory' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/Service/SeparatorToSeparatorFactory.php', + 'Zend\\Filter\\Word\\UnderscoreToCamelCase' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/UnderscoreToCamelCase.php', + 'Zend\\Filter\\Word\\UnderscoreToDash' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/UnderscoreToDash.php', + 'Zend\\Filter\\Word\\UnderscoreToSeparator' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/UnderscoreToSeparator.php', + 'Zend\\Filter\\Word\\UnderscoreToStudlyCase' => __DIR__ . '/..' . '/zendframework/zend-filter/src/Word/UnderscoreToStudlyCase.php', + 'Zend\\Hydrator\\AbstractHydrator' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/AbstractHydrator.php', + 'Zend\\Hydrator\\Aggregate\\AggregateHydrator' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Aggregate/AggregateHydrator.php', + 'Zend\\Hydrator\\Aggregate\\ExtractEvent' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Aggregate/ExtractEvent.php', + 'Zend\\Hydrator\\Aggregate\\HydrateEvent' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Aggregate/HydrateEvent.php', + 'Zend\\Hydrator\\Aggregate\\HydratorListener' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Aggregate/HydratorListener.php', + 'Zend\\Hydrator\\ArraySerializable' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/ArraySerializable.php', + 'Zend\\Hydrator\\ClassMethods' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/ClassMethods.php', + 'Zend\\Hydrator\\DelegatingHydrator' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/DelegatingHydrator.php', + 'Zend\\Hydrator\\DelegatingHydratorFactory' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/DelegatingHydratorFactory.php', + 'Zend\\Hydrator\\Exception\\BadMethodCallException' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Exception/BadMethodCallException.php', + 'Zend\\Hydrator\\Exception\\DomainException' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Exception/DomainException.php', + 'Zend\\Hydrator\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Exception/ExceptionInterface.php', + 'Zend\\Hydrator\\Exception\\ExtensionNotLoadedException' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Hydrator\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Exception/InvalidArgumentException.php', + 'Zend\\Hydrator\\Exception\\InvalidCallbackException' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Exception/InvalidCallbackException.php', + 'Zend\\Hydrator\\Exception\\LogicException' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Exception/LogicException.php', + 'Zend\\Hydrator\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Exception/RuntimeException.php', + 'Zend\\Hydrator\\ExtractionInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/ExtractionInterface.php', + 'Zend\\Hydrator\\FilterEnabledInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/FilterEnabledInterface.php', + 'Zend\\Hydrator\\Filter\\FilterComposite' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Filter/FilterComposite.php', + 'Zend\\Hydrator\\Filter\\FilterInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Filter/FilterInterface.php', + 'Zend\\Hydrator\\Filter\\FilterProviderInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Filter/FilterProviderInterface.php', + 'Zend\\Hydrator\\Filter\\GetFilter' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Filter/GetFilter.php', + 'Zend\\Hydrator\\Filter\\HasFilter' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Filter/HasFilter.php', + 'Zend\\Hydrator\\Filter\\IsFilter' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Filter/IsFilter.php', + 'Zend\\Hydrator\\Filter\\MethodMatchFilter' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Filter/MethodMatchFilter.php', + 'Zend\\Hydrator\\Filter\\NumberOfParameterFilter' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Filter/NumberOfParameterFilter.php', + 'Zend\\Hydrator\\Filter\\OptionalParametersFilter' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Filter/OptionalParametersFilter.php', + 'Zend\\Hydrator\\HydrationInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/HydrationInterface.php', + 'Zend\\Hydrator\\HydratorAwareInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/HydratorAwareInterface.php', + 'Zend\\Hydrator\\HydratorAwareTrait' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/HydratorAwareTrait.php', + 'Zend\\Hydrator\\HydratorInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/HydratorInterface.php', + 'Zend\\Hydrator\\HydratorOptionsInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/HydratorOptionsInterface.php', + 'Zend\\Hydrator\\HydratorPluginManager' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/HydratorPluginManager.php', + 'Zend\\Hydrator\\Iterator\\HydratingArrayIterator' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Iterator/HydratingArrayIterator.php', + 'Zend\\Hydrator\\Iterator\\HydratingIteratorInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Iterator/HydratingIteratorInterface.php', + 'Zend\\Hydrator\\Iterator\\HydratingIteratorIterator' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Iterator/HydratingIteratorIterator.php', + 'Zend\\Hydrator\\NamingStrategyEnabledInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/NamingStrategyEnabledInterface.php', + 'Zend\\Hydrator\\NamingStrategy\\ArrayMapNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/NamingStrategy/ArrayMapNamingStrategy.php', + 'Zend\\Hydrator\\NamingStrategy\\CompositeNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/NamingStrategy/CompositeNamingStrategy.php', + 'Zend\\Hydrator\\NamingStrategy\\IdentityNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/NamingStrategy/IdentityNamingStrategy.php', + 'Zend\\Hydrator\\NamingStrategy\\MapNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/NamingStrategy/MapNamingStrategy.php', + 'Zend\\Hydrator\\NamingStrategy\\NamingStrategyInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/NamingStrategy/NamingStrategyInterface.php', + 'Zend\\Hydrator\\NamingStrategy\\UnderscoreNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/NamingStrategy/UnderscoreNamingStrategy.php', + 'Zend\\Hydrator\\ObjectProperty' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/ObjectProperty.php', + 'Zend\\Hydrator\\Reflection' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Reflection.php', + 'Zend\\Hydrator\\StrategyEnabledInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/StrategyEnabledInterface.php', + 'Zend\\Hydrator\\Strategy\\BooleanStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/BooleanStrategy.php', + 'Zend\\Hydrator\\Strategy\\ClosureStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/ClosureStrategy.php', + 'Zend\\Hydrator\\Strategy\\DateTimeFormatterStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/DateTimeFormatterStrategy.php', + 'Zend\\Hydrator\\Strategy\\DefaultStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/DefaultStrategy.php', + 'Zend\\Hydrator\\Strategy\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/Exception/ExceptionInterface.php', + 'Zend\\Hydrator\\Strategy\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/Exception/InvalidArgumentException.php', + 'Zend\\Hydrator\\Strategy\\ExplodeStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/ExplodeStrategy.php', + 'Zend\\Hydrator\\Strategy\\SerializableStrategy' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/SerializableStrategy.php', + 'Zend\\Hydrator\\Strategy\\StrategyChain' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/StrategyChain.php', + 'Zend\\Hydrator\\Strategy\\StrategyInterface' => __DIR__ . '/..' . '/zendframework/zend-hydrator/src/Strategy/StrategyInterface.php', + 'Zend\\I18n\\ConfigProvider' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/ConfigProvider.php', + 'Zend\\I18n\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Exception/ExceptionInterface.php', + 'Zend\\I18n\\Exception\\ExtensionNotLoadedException' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\I18n\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Exception/InvalidArgumentException.php', + 'Zend\\I18n\\Exception\\OutOfBoundsException' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Exception/OutOfBoundsException.php', + 'Zend\\I18n\\Exception\\ParseException' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Exception/ParseException.php', + 'Zend\\I18n\\Exception\\RangeException' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Exception/RangeException.php', + 'Zend\\I18n\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Exception/RuntimeException.php', + 'Zend\\I18n\\Filter\\AbstractLocale' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Filter/AbstractLocale.php', + 'Zend\\I18n\\Filter\\Alnum' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Filter/Alnum.php', + 'Zend\\I18n\\Filter\\Alpha' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Filter/Alpha.php', + 'Zend\\I18n\\Filter\\NumberFormat' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Filter/NumberFormat.php', + 'Zend\\I18n\\Filter\\NumberParse' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Filter/NumberParse.php', + 'Zend\\I18n\\Module' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Module.php', + 'Zend\\I18n\\Translator\\LoaderPluginManager' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/LoaderPluginManager.php', + 'Zend\\I18n\\Translator\\LoaderPluginManagerFactory' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/LoaderPluginManagerFactory.php', + 'Zend\\I18n\\Translator\\Loader\\AbstractFileLoader' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Loader/AbstractFileLoader.php', + 'Zend\\I18n\\Translator\\Loader\\FileLoaderInterface' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Loader/FileLoaderInterface.php', + 'Zend\\I18n\\Translator\\Loader\\Gettext' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Loader/Gettext.php', + 'Zend\\I18n\\Translator\\Loader\\Ini' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Loader/Ini.php', + 'Zend\\I18n\\Translator\\Loader\\PhpArray' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Loader/PhpArray.php', + 'Zend\\I18n\\Translator\\Loader\\PhpMemoryArray' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Loader/PhpMemoryArray.php', + 'Zend\\I18n\\Translator\\Loader\\RemoteLoaderInterface' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Loader/RemoteLoaderInterface.php', + 'Zend\\I18n\\Translator\\Plural\\Parser' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Plural/Parser.php', + 'Zend\\I18n\\Translator\\Plural\\Rule' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Plural/Rule.php', + 'Zend\\I18n\\Translator\\Plural\\Symbol' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Plural/Symbol.php', + 'Zend\\I18n\\Translator\\TextDomain' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/TextDomain.php', + 'Zend\\I18n\\Translator\\Translator' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/Translator.php', + 'Zend\\I18n\\Translator\\TranslatorAwareInterface' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/TranslatorAwareInterface.php', + 'Zend\\I18n\\Translator\\TranslatorAwareTrait' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/TranslatorAwareTrait.php', + 'Zend\\I18n\\Translator\\TranslatorInterface' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/TranslatorInterface.php', + 'Zend\\I18n\\Translator\\TranslatorServiceFactory' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Translator/TranslatorServiceFactory.php', + 'Zend\\I18n\\Validator\\Alnum' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Validator/Alnum.php', + 'Zend\\I18n\\Validator\\Alpha' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Validator/Alpha.php', + 'Zend\\I18n\\Validator\\DateTime' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Validator/DateTime.php', + 'Zend\\I18n\\Validator\\Float' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Validator/Float.php', + 'Zend\\I18n\\Validator\\Int' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Validator/Int.php', + 'Zend\\I18n\\Validator\\IsFloat' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Validator/IsFloat.php', + 'Zend\\I18n\\Validator\\IsInt' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Validator/IsInt.php', + 'Zend\\I18n\\Validator\\PhoneNumber' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Validator/PhoneNumber.php', + 'Zend\\I18n\\Validator\\PostCode' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/Validator/PostCode.php', + 'Zend\\I18n\\View\\HelperConfig' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/View/HelperConfig.php', + 'Zend\\I18n\\View\\Helper\\AbstractTranslatorHelper' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/View/Helper/AbstractTranslatorHelper.php', + 'Zend\\I18n\\View\\Helper\\CurrencyFormat' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/View/Helper/CurrencyFormat.php', + 'Zend\\I18n\\View\\Helper\\DateFormat' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/View/Helper/DateFormat.php', + 'Zend\\I18n\\View\\Helper\\NumberFormat' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/View/Helper/NumberFormat.php', + 'Zend\\I18n\\View\\Helper\\Plural' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/View/Helper/Plural.php', + 'Zend\\I18n\\View\\Helper\\Translate' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/View/Helper/Translate.php', + 'Zend\\I18n\\View\\Helper\\TranslatePlural' => __DIR__ . '/..' . '/zendframework/zend-i18n/src/View/Helper/TranslatePlural.php', + 'Zend\\Json\\Decoder' => __DIR__ . '/..' . '/zendframework/zend-json/src/Decoder.php', + 'Zend\\Json\\Encoder' => __DIR__ . '/..' . '/zendframework/zend-json/src/Encoder.php', + 'Zend\\Json\\Exception\\BadMethodCallException' => __DIR__ . '/..' . '/zendframework/zend-json/src/Exception/BadMethodCallException.php', + 'Zend\\Json\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-json/src/Exception/ExceptionInterface.php', + 'Zend\\Json\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-json/src/Exception/InvalidArgumentException.php', + 'Zend\\Json\\Exception\\RecursionException' => __DIR__ . '/..' . '/zendframework/zend-json/src/Exception/RecursionException.php', + 'Zend\\Json\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-json/src/Exception/RuntimeException.php', + 'Zend\\Json\\Expr' => __DIR__ . '/..' . '/zendframework/zend-json/src/Expr.php', + 'Zend\\Json\\Json' => __DIR__ . '/..' . '/zendframework/zend-json/src/Json.php', + 'Zend\\Serializer\\AdapterPluginManager' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/AdapterPluginManager.php', + 'Zend\\Serializer\\AdapterPluginManagerFactory' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/AdapterPluginManagerFactory.php', + 'Zend\\Serializer\\Adapter\\AbstractAdapter' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/AbstractAdapter.php', + 'Zend\\Serializer\\Adapter\\AdapterInterface' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/AdapterInterface.php', + 'Zend\\Serializer\\Adapter\\AdapterOptions' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/AdapterOptions.php', + 'Zend\\Serializer\\Adapter\\IgBinary' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/IgBinary.php', + 'Zend\\Serializer\\Adapter\\Json' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/Json.php', + 'Zend\\Serializer\\Adapter\\JsonOptions' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/JsonOptions.php', + 'Zend\\Serializer\\Adapter\\MsgPack' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/MsgPack.php', + 'Zend\\Serializer\\Adapter\\PhpCode' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/PhpCode.php', + 'Zend\\Serializer\\Adapter\\PhpSerialize' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/PhpSerialize.php', + 'Zend\\Serializer\\Adapter\\PythonPickle' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/PythonPickle.php', + 'Zend\\Serializer\\Adapter\\PythonPickleOptions' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/PythonPickleOptions.php', + 'Zend\\Serializer\\Adapter\\Wddx' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/Wddx.php', + 'Zend\\Serializer\\Adapter\\WddxOptions' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Adapter/WddxOptions.php', + 'Zend\\Serializer\\ConfigProvider' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/ConfigProvider.php', + 'Zend\\Serializer\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Exception/ExceptionInterface.php', + 'Zend\\Serializer\\Exception\\ExtensionNotLoadedException' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Serializer\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Exception/InvalidArgumentException.php', + 'Zend\\Serializer\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Exception/RuntimeException.php', + 'Zend\\Serializer\\Module' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Module.php', + 'Zend\\Serializer\\Serializer' => __DIR__ . '/..' . '/zendframework/zend-serializer/src/Serializer.php', + 'Zend\\ServiceManager\\AbstractFactoryInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/AbstractFactoryInterface.php', + 'Zend\\ServiceManager\\AbstractPluginManager' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/AbstractPluginManager.php', + 'Zend\\ServiceManager\\Config' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Config.php', + 'Zend\\ServiceManager\\ConfigInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/ConfigInterface.php', + 'Zend\\ServiceManager\\DelegatorFactoryInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/DelegatorFactoryInterface.php', + 'Zend\\ServiceManager\\Di\\DiAbstractServiceFactory' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Di/DiAbstractServiceFactory.php', + 'Zend\\ServiceManager\\Di\\DiInstanceManagerProxy' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Di/DiInstanceManagerProxy.php', + 'Zend\\ServiceManager\\Di\\DiServiceFactory' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Di/DiServiceFactory.php', + 'Zend\\ServiceManager\\Di\\DiServiceInitializer' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Di/DiServiceInitializer.php', + 'Zend\\ServiceManager\\Exception\\CircularDependencyFoundException' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/CircularDependencyFoundException.php', + 'Zend\\ServiceManager\\Exception\\CircularReferenceException' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/CircularReferenceException.php', + 'Zend\\ServiceManager\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/ExceptionInterface.php', + 'Zend\\ServiceManager\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/InvalidArgumentException.php', + 'Zend\\ServiceManager\\Exception\\InvalidServiceException' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/InvalidServiceException.php', + 'Zend\\ServiceManager\\Exception\\InvalidServiceNameException' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/InvalidServiceNameException.php', + 'Zend\\ServiceManager\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/RuntimeException.php', + 'Zend\\ServiceManager\\Exception\\ServiceLocatorUsageException' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/ServiceLocatorUsageException.php', + 'Zend\\ServiceManager\\Exception\\ServiceNotCreatedException' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/ServiceNotCreatedException.php', + 'Zend\\ServiceManager\\Exception\\ServiceNotFoundException' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Exception/ServiceNotFoundException.php', + 'Zend\\ServiceManager\\FactoryInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/FactoryInterface.php', + 'Zend\\ServiceManager\\Factory\\InvokableFactory' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Factory/InvokableFactory.php', + 'Zend\\ServiceManager\\InitializerInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/InitializerInterface.php', + 'Zend\\ServiceManager\\MutableCreationOptionsInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/MutableCreationOptionsInterface.php', + 'Zend\\ServiceManager\\MutableCreationOptionsTrait' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/MutableCreationOptionsTrait.php', + 'Zend\\ServiceManager\\Proxy\\LazyServiceFactory' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Proxy/LazyServiceFactory.php', + 'Zend\\ServiceManager\\Proxy\\LazyServiceFactoryFactory' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Proxy/LazyServiceFactoryFactory.php', + 'Zend\\ServiceManager\\ServiceLocatorAwareInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/ServiceLocatorAwareInterface.php', + 'Zend\\ServiceManager\\ServiceLocatorAwareTrait' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/ServiceLocatorAwareTrait.php', + 'Zend\\ServiceManager\\ServiceLocatorInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/ServiceLocatorInterface.php', + 'Zend\\ServiceManager\\ServiceManager' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/ServiceManager.php', + 'Zend\\ServiceManager\\ServiceManagerAwareInterface' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/ServiceManagerAwareInterface.php', + 'Zend\\ServiceManager\\Test\\CommonPluginManagerTrait' => __DIR__ . '/..' . '/zendframework/zend-servicemanager/src/Test/CommonPluginManagerTrait.php', + 'Zend\\Stdlib\\AbstractOptions' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/AbstractOptions.php', + 'Zend\\Stdlib\\ArrayObject' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ArrayObject.php', + 'Zend\\Stdlib\\ArraySerializableInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ArraySerializableInterface.php', + 'Zend\\Stdlib\\ArrayStack' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ArrayStack.php', + 'Zend\\Stdlib\\ArrayUtils' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ArrayUtils.php', + 'Zend\\Stdlib\\ArrayUtils\\MergeRemoveKey' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php', + 'Zend\\Stdlib\\ArrayUtils\\MergeReplaceKey' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php', + 'Zend\\Stdlib\\ArrayUtils\\MergeReplaceKeyInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php', + 'Zend\\Stdlib\\CallbackHandler' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/CallbackHandler.php', + 'Zend\\Stdlib\\DateTime' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/DateTime.php', + 'Zend\\Stdlib\\DispatchableInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/DispatchableInterface.php', + 'Zend\\Stdlib\\ErrorHandler' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ErrorHandler.php', + 'Zend\\Stdlib\\Exception\\BadMethodCallException' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php', + 'Zend\\Stdlib\\Exception\\DomainException' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Exception/DomainException.php', + 'Zend\\Stdlib\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php', + 'Zend\\Stdlib\\Exception\\ExtensionNotLoadedException' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php', + 'Zend\\Stdlib\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php', + 'Zend\\Stdlib\\Exception\\InvalidCallbackException' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php', + 'Zend\\Stdlib\\Exception\\LogicException' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Exception/LogicException.php', + 'Zend\\Stdlib\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Exception/RuntimeException.php', + 'Zend\\Stdlib\\Extractor\\ExtractionInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php', + 'Zend\\Stdlib\\FastPriorityQueue' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/FastPriorityQueue.php', + 'Zend\\Stdlib\\Glob' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Glob.php', + 'Zend\\Stdlib\\Guard\\AllGuardsTrait' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php', + 'Zend\\Stdlib\\Guard\\ArrayOrTraversableGuardTrait' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php', + 'Zend\\Stdlib\\Guard\\EmptyGuardTrait' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php', + 'Zend\\Stdlib\\Guard\\GuardUtils' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Guard/GuardUtils.php', + 'Zend\\Stdlib\\Guard\\NullGuardTrait' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php', + 'Zend\\Stdlib\\Hydrator\\AbstractHydrator' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php', + 'Zend\\Stdlib\\Hydrator\\Aggregate\\AggregateHydrator' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php', + 'Zend\\Stdlib\\Hydrator\\Aggregate\\ExtractEvent' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php', + 'Zend\\Stdlib\\Hydrator\\Aggregate\\HydrateEvent' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php', + 'Zend\\Stdlib\\Hydrator\\Aggregate\\HydratorListener' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php', + 'Zend\\Stdlib\\Hydrator\\ArraySerializable' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php', + 'Zend\\Stdlib\\Hydrator\\ClassMethods' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php', + 'Zend\\Stdlib\\Hydrator\\DelegatingHydrator' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php', + 'Zend\\Stdlib\\Hydrator\\DelegatingHydratorFactory' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php', + 'Zend\\Stdlib\\Hydrator\\FilterEnabledInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\FilterComposite' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\FilterInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\FilterProviderInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\GetFilter' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\HasFilter' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\IsFilter' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\MethodMatchFilter' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\NumberOfParameterFilter' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php', + 'Zend\\Stdlib\\Hydrator\\Filter\\OptionalParametersFilter' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php', + 'Zend\\Stdlib\\Hydrator\\HydrationInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php', + 'Zend\\Stdlib\\Hydrator\\HydratorAwareInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php', + 'Zend\\Stdlib\\Hydrator\\HydratorAwareTrait' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php', + 'Zend\\Stdlib\\Hydrator\\HydratorInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php', + 'Zend\\Stdlib\\Hydrator\\HydratorOptionsInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php', + 'Zend\\Stdlib\\Hydrator\\HydratorPluginManager' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php', + 'Zend\\Stdlib\\Hydrator\\Iterator\\HydratingArrayIterator' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Iterator/HydratingArrayIterator.php', + 'Zend\\Stdlib\\Hydrator\\Iterator\\HydratingIteratorInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Iterator/HydratingIteratorInterface.php', + 'Zend\\Stdlib\\Hydrator\\Iterator\\HydratingIteratorIterator' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Iterator/HydratingIteratorIterator.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategyEnabledInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\ArrayMapNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\CompositeNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\IdentityNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\MapNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\NamingStrategyInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php', + 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\UnderscoreNamingStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php', + 'Zend\\Stdlib\\Hydrator\\ObjectProperty' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php', + 'Zend\\Stdlib\\Hydrator\\Reflection' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Reflection.php', + 'Zend\\Stdlib\\Hydrator\\StrategyEnabledInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\BooleanStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\ClosureStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\DateTimeFormatterStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\DefaultStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\ExplodeStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\SerializableStrategy' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\StrategyChain' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php', + 'Zend\\Stdlib\\Hydrator\\Strategy\\StrategyInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php', + 'Zend\\Stdlib\\InitializableInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/InitializableInterface.php', + 'Zend\\Stdlib\\JsonSerializable' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/JsonSerializable.php', + 'Zend\\Stdlib\\Message' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Message.php', + 'Zend\\Stdlib\\MessageInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/MessageInterface.php', + 'Zend\\Stdlib\\ParameterObjectInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ParameterObjectInterface.php', + 'Zend\\Stdlib\\Parameters' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Parameters.php', + 'Zend\\Stdlib\\ParametersInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ParametersInterface.php', + 'Zend\\Stdlib\\PriorityList' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/PriorityList.php', + 'Zend\\Stdlib\\PriorityQueue' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/PriorityQueue.php', + 'Zend\\Stdlib\\Request' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Request.php', + 'Zend\\Stdlib\\RequestInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/RequestInterface.php', + 'Zend\\Stdlib\\Response' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/Response.php', + 'Zend\\Stdlib\\ResponseInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/ResponseInterface.php', + 'Zend\\Stdlib\\SplPriorityQueue' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/SplPriorityQueue.php', + 'Zend\\Stdlib\\SplQueue' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/SplQueue.php', + 'Zend\\Stdlib\\SplStack' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/SplStack.php', + 'Zend\\Stdlib\\StringUtils' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/StringUtils.php', + 'Zend\\Stdlib\\StringWrapper\\AbstractStringWrapper' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php', + 'Zend\\Stdlib\\StringWrapper\\Iconv' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/StringWrapper/Iconv.php', + 'Zend\\Stdlib\\StringWrapper\\Intl' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/StringWrapper/Intl.php', + 'Zend\\Stdlib\\StringWrapper\\MbString' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/StringWrapper/MbString.php', + 'Zend\\Stdlib\\StringWrapper\\Native' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/StringWrapper/Native.php', + 'Zend\\Stdlib\\StringWrapper\\StringWrapperInterface' => __DIR__ . '/..' . '/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php', + 'a' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/source4.php', + 'ab' => __DIR__ . '/..' . '/zetacomponents/base/tests/issue15896/ab.php', + 'b' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/source4.php', + 'bar\\baz\\source_with_namespace' => __DIR__ . '/..' . '/phpunit/php-code-coverage/tests/_files/source_with_namespace.php', + 'c' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/source4.php', + 'class_with_method_named_empty' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/class_with_method_named_empty.php', + 'class_with_method_that_declares_anonymous_class' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class.php', + 'class_with_multiple_anonymous_classes_and_functions' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/class_with_multiple_anonymous_classes_and_functions.php', + 'customSingleton' => __DIR__ . '/..' . '/zetacomponents/base/docs/tutorial_lazy_initialization.php', + 'customSingletonConfiguration' => __DIR__ . '/..' . '/zetacomponents/base/docs/tutorial_lazy_initialization.php', + 'erMyClass1' => __DIR__ . '/..' . '/zetacomponents/base/docs/repos/Me/myclass1.php', + 'erMyClass2' => __DIR__ . '/..' . '/zetacomponents/base/docs/repos/Me/myclass2.php', + 'erYourClass1' => __DIR__ . '/..' . '/zetacomponents/base/docs/repos/You/yourclass1.php', + 'erYourClass2' => __DIR__ . '/..' . '/zetacomponents/base/docs/repos/You/yourclass2.php', + 'extTranslationTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/extra_repository/Translation/test.php', + 'ezcBase' => __DIR__ . '/..' . '/zetacomponents/base/src/base.php', + 'ezcBaseAutoloadException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/autoload.php', + 'ezcBaseAutoloadOptions' => __DIR__ . '/..' . '/zetacomponents/base/src/options/autoload.php', + 'ezcBaseConfigurationInitializer' => __DIR__ . '/..' . '/zetacomponents/base/src/interfaces/configuration_initializer.php', + 'ezcBaseDoubleClassRepositoryPrefixException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/double_class_repository_prefix.php', + 'ezcBaseException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/exception.php', + 'ezcBaseExportable' => __DIR__ . '/..' . '/zetacomponents/base/src/interfaces/exportable.php', + 'ezcBaseExtensionNotFoundException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/extension_not_found.php', + 'ezcBaseFeatures' => __DIR__ . '/..' . '/zetacomponents/base/src/features.php', + 'ezcBaseFeaturesUnixTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/features_unix_test.php', + 'ezcBaseFeaturesWindowsTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/features_windows_test.php', + 'ezcBaseFile' => __DIR__ . '/..' . '/zetacomponents/base/src/file.php', + 'ezcBaseFileCalculateRelativePathTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/file_calculate_relative_path_test.php', + 'ezcBaseFileCopyRecursiveTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/file_copy_recursive_test.php', + 'ezcBaseFileException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/file_exception.php', + 'ezcBaseFileFindContext' => __DIR__ . '/..' . '/zetacomponents/base/src/structs/file_find_context.php', + 'ezcBaseFileFindRecursiveTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/file_find_recursive_test.php', + 'ezcBaseFileIoException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/file_io.php', + 'ezcBaseFileIsAbsoluteTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/file_is_absolute_path.php', + 'ezcBaseFileNotFoundException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/file_not_found.php', + 'ezcBaseFilePermissionException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/file_permission.php', + 'ezcBaseFileRemoveRecursiveTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/file_remove_recursive_test.php', + 'ezcBaseFunctionalityNotSupportedException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/functionality_not_supported.php', + 'ezcBaseInit' => __DIR__ . '/..' . '/zetacomponents/base/src/init.php', + 'ezcBaseInitCallbackConfiguredException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/init_callback_configured.php', + 'ezcBaseInitInvalidCallbackClassException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/invalid_callback_class.php', + 'ezcBaseInitTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/base_init_test.php', + 'ezcBaseInvalidParentClassException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/invalid_parent_class.php', + 'ezcBaseMetaData' => __DIR__ . '/..' . '/zetacomponents/base/src/metadata.php', + 'ezcBaseMetaDataPearReader' => __DIR__ . '/..' . '/zetacomponents/base/src/metadata/pear.php', + 'ezcBaseMetaDataPearTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/metadata_pear_test.php', + 'ezcBaseMetaDataTarballReader' => __DIR__ . '/..' . '/zetacomponents/base/src/metadata/tarball.php', + 'ezcBaseOptions' => __DIR__ . '/..' . '/zetacomponents/base/src/options.php', + 'ezcBaseOptionsTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/base_options_test.php', + 'ezcBasePersistable' => __DIR__ . '/..' . '/zetacomponents/base/src/interfaces/persistable.php', + 'ezcBasePropertyNotFoundException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/property_not_found.php', + 'ezcBasePropertyPermissionException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/property_permission.php', + 'ezcBaseRepositoryDirectory' => __DIR__ . '/..' . '/zetacomponents/base/src/structs/repository_directory.php', + 'ezcBaseSettingNotFoundException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/setting_not_found.php', + 'ezcBaseSettingValueException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/setting_value.php', + 'ezcBaseStruct' => __DIR__ . '/..' . '/zetacomponents/base/src/struct.php', + 'ezcBaseStructTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/struct_test.php', + 'ezcBaseTest' => __DIR__ . '/..' . '/zetacomponents/base/tests/base_test.php', + 'ezcBaseTestOptions' => __DIR__ . '/..' . '/zetacomponents/base/tests/test_options.php', + 'ezcBaseValueException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/value.php', + 'ezcBaseWhateverException' => __DIR__ . '/..' . '/zetacomponents/base/src/exceptions/whatever.php', + 'ezcConverterDocbookEzXmlOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_options_docbook_ezxml_tests.php', + 'ezcConverterEzXmlDocbookOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_options_ezxml_docbook_tests.php', + 'ezcConverterOdtOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_options_odt_tests.php', + 'ezcConverterOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_options_tests.php', + 'ezcConverterRstOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_options_rst_tests.php', + 'ezcConverterWikiOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_options_wiki_tests.php', + 'ezcConverterXsltOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_options_xslt_tests.php', + 'ezcDocument' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/document.php', + 'ezcDocumentAlnumListItemGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/item_generator/alnum.php', + 'ezcDocumentAlphaListItemGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/item_generator/alpha.php', + 'ezcDocumentBBCode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode.php', + 'ezcDocumentBBCodeBlockLevelNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/block.php', + 'ezcDocumentBBCodeBulletListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/bullet_list.php', + 'ezcDocumentBBCodeClosingTagNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/tag_close.php', + 'ezcDocumentBBCodeDocbookVisitor' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/visitor/docbook.php', + 'ezcDocumentBBCodeDocbookVisitorTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/bbcode/docbook_visitor_test.php', + 'ezcDocumentBBCodeDocumentNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/document.php', + 'ezcDocumentBBCodeEmailPlugin' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/plugins/email.php', + 'ezcDocumentBBCodeEmphasisPlugin' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/plugins/emphasis.php', + 'ezcDocumentBBCodeEndOfFileToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/end_of_file.php', + 'ezcDocumentBBCodeEnumeratedListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/enumerated_list.php', + 'ezcDocumentBBCodeImagePlugin' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/plugins/image.php', + 'ezcDocumentBBCodeInlineLiteralNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/inline_literal.php', + 'ezcDocumentBBCodeLineBreakToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/line_break.php', + 'ezcDocumentBBCodeListEndNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/list_end.php', + 'ezcDocumentBBCodeListItemNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/list_item.php', + 'ezcDocumentBBCodeListItemToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/list_item.php', + 'ezcDocumentBBCodeListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/list.php', + 'ezcDocumentBBCodeLiteralBlockNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/literal_block.php', + 'ezcDocumentBBCodeLiteralBlockToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/literal_block.php', + 'ezcDocumentBBCodeNewLineToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/new_line.php', + 'ezcDocumentBBCodeNoMarkupPlugin' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/plugins/no.php', + 'ezcDocumentBBCodeNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/node.php', + 'ezcDocumentBBCodeOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_bbcode.php', + 'ezcDocumentBBCodeParagraphNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/paragraph.php', + 'ezcDocumentBBCodeParser' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/parser.php', + 'ezcDocumentBBCodeParserTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/bbcode/parser_test.php', + 'ezcDocumentBBCodePlugin' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/plugin.php', + 'ezcDocumentBBCodeQuotePlugin' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/plugins/quote.php', + 'ezcDocumentBBCodeSpecialCharsToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/special_chars.php', + 'ezcDocumentBBCodeTagCloseToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/tag_clsoe.php', + 'ezcDocumentBBCodeTagNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/tag.php', + 'ezcDocumentBBCodeTagOpenToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/tag_open.php', + 'ezcDocumentBBCodeTextLineToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/text_line.php', + 'ezcDocumentBBCodeTextNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/nodes/text.php', + 'ezcDocumentBBCodeToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token.php', + 'ezcDocumentBBCodeTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/tokenizer.php', + 'ezcDocumentBBCodeTokenizerTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/bbcode/tokenizer_test.php', + 'ezcDocumentBBCodeUrlPlugin' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/plugins/url.php', + 'ezcDocumentBBCodeVisitor' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/visitor.php', + 'ezcDocumentBBCodeWhitespaceToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/bbcode/token/whitespace.php', + 'ezcDocumentBulletListItemGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/item_generator/bullet.php', + 'ezcDocumentConfluenceWiki' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/confluence.php', + 'ezcDocumentConversionException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/conversion.php', + 'ezcDocumentConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/converter.php', + 'ezcDocumentConverterDocbookToEzXmlTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_docbook_ezxml_test.php', + 'ezcDocumentConverterDocbookToHtmlTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_docbook_html_test.php', + 'ezcDocumentConverterDocbookToHtmlXsltTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_docbook_html_xsl_test.php', + 'ezcDocumentConverterDocbookToOdtTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_docbook_odt_test.php', + 'ezcDocumentConverterDocbookToRstTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_docbook_rst_test.php', + 'ezcDocumentConverterDocbookToWikiTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_docbook_wiki_test.php', + 'ezcDocumentConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/converter.php', + 'ezcDocumentConverterTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/converter_test.php', + 'ezcDocumentCreoleWiki' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/creole.php', + 'ezcDocumentDocbook' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/docbook.php', + 'ezcDocumentDocbookOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_docbook.php', + 'ezcDocumentDocbookOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_docbook_options_tests.php', + 'ezcDocumentDocbookTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_docbook_test.php', + 'ezcDocumentDocbookToEzXmlAnchorHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/anchor.php', + 'ezcDocumentDocbookToEzXmlCommentHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/comment.php', + 'ezcDocumentDocbookToEzXmlConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook_ezxml.php', + 'ezcDocumentDocbookToEzXmlConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/converter_docbook_ezxml.php', + 'ezcDocumentDocbookToEzXmlEmphasisHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/emphasis.php', + 'ezcDocumentDocbookToEzXmlExternalLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/external_link.php', + 'ezcDocumentDocbookToEzXmlFootnoteHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/footnote.php', + 'ezcDocumentDocbookToEzXmlIgnoreHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/ignore.php', + 'ezcDocumentDocbookToEzXmlInternalLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/internal_link.php', + 'ezcDocumentDocbookToEzXmlItemizedListHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/itemized_list.php', + 'ezcDocumentDocbookToEzXmlLiteralLayoutHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/literal_layout.php', + 'ezcDocumentDocbookToEzXmlMappingHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/mapper.php', + 'ezcDocumentDocbookToEzXmlOrderedListHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/ordered_list.php', + 'ezcDocumentDocbookToEzXmlParagraphHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/paragraph.php', + 'ezcDocumentDocbookToEzXmlRecurseHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/recurse.php', + 'ezcDocumentDocbookToEzXmlSectionHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/section.php', + 'ezcDocumentDocbookToEzXmlTableCellHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/table_cell.php', + 'ezcDocumentDocbookToEzXmlTableHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/table.php', + 'ezcDocumentDocbookToEzXmlTitleHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/ezxml/title.php', + 'ezcDocumentDocbookToHtmlAnchorHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/anchor.php', + 'ezcDocumentDocbookToHtmlBaseHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/handler.php', + 'ezcDocumentDocbookToHtmlBlockquoteHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/blockquote.php', + 'ezcDocumentDocbookToHtmlCommentHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/comment.php', + 'ezcDocumentDocbookToHtmlConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook_html.php', + 'ezcDocumentDocbookToHtmlConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/converter_docbook_html.php', + 'ezcDocumentDocbookToHtmlDefinitionListEntryHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/definition_list_entry.php', + 'ezcDocumentDocbookToHtmlEmphasisHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/emphasis.php', + 'ezcDocumentDocbookToHtmlExternalLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/external_link.php', + 'ezcDocumentDocbookToHtmlFootnoteHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/footnote.php', + 'ezcDocumentDocbookToHtmlHeadHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/head.php', + 'ezcDocumentDocbookToHtmlIgnoreHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/ignore.php', + 'ezcDocumentDocbookToHtmlInternalLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/internal_link.php', + 'ezcDocumentDocbookToHtmlLiteralLayoutHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/literal_layout.php', + 'ezcDocumentDocbookToHtmlMappingHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/mapper.php', + 'ezcDocumentDocbookToHtmlMediaObjectHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/mediaobject.php', + 'ezcDocumentDocbookToHtmlParagraphHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/paragraph.php', + 'ezcDocumentDocbookToHtmlSectionHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/section.php', + 'ezcDocumentDocbookToHtmlSpecialParagraphHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/special_paragraph.php', + 'ezcDocumentDocbookToHtmlTableCellHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/xhtml/table_cell.php', + 'ezcDocumentDocbookToHtmlXsltConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/xslt/docbook_html.php', + 'ezcDocumentDocbookToHtmlXsltConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/converter_docbook_html_xslt.php', + 'ezcDocumentDocbookToOdtAnchorHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/anchor.php', + 'ezcDocumentDocbookToOdtBaseHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/handler.php', + 'ezcDocumentDocbookToOdtCommentHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/comment.php', + 'ezcDocumentDocbookToOdtConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook_odt.php', + 'ezcDocumentDocbookToOdtConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/converter_docbook_odt.php', + 'ezcDocumentDocbookToOdtFootnoteHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/footnote.php', + 'ezcDocumentDocbookToOdtIgnoreHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/ignore.php', + 'ezcDocumentDocbookToOdtInlineHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/inline.php', + 'ezcDocumentDocbookToOdtLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/link.php', + 'ezcDocumentDocbookToOdtListHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/list.php', + 'ezcDocumentDocbookToOdtLiteralLayoutHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/literal_layout.php', + 'ezcDocumentDocbookToOdtMappingHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/mapper.php', + 'ezcDocumentDocbookToOdtMediaObjectHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/media_object.php', + 'ezcDocumentDocbookToOdtPageBreakHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/page_break.php', + 'ezcDocumentDocbookToOdtParagraphHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/paragraph.php', + 'ezcDocumentDocbookToOdtSectionHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/section.php', + 'ezcDocumentDocbookToOdtTableHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/table.php', + 'ezcDocumentDocbookToOdtUlinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/element_handlers/ulink.php', + 'ezcDocumentDocbookToRstBaseHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/handler.php', + 'ezcDocumentDocbookToRstBeginPageHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/begin_page.php', + 'ezcDocumentDocbookToRstBlockquoteHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/blockquote.php', + 'ezcDocumentDocbookToRstCitationHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/citation.php', + 'ezcDocumentDocbookToRstCommentHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/comment.php', + 'ezcDocumentDocbookToRstConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook_rst.php', + 'ezcDocumentDocbookToRstConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/converter_docbook_rst.php', + 'ezcDocumentDocbookToRstEmphasisHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/emphasis.php', + 'ezcDocumentDocbookToRstExternalLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/external_link.php', + 'ezcDocumentDocbookToRstFootnoteHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/footnote.php', + 'ezcDocumentDocbookToRstHeadHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/head.php', + 'ezcDocumentDocbookToRstIgnoreHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/ignore.php', + 'ezcDocumentDocbookToRstInlineMediaObjectHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/inlinemediaobject.php', + 'ezcDocumentDocbookToRstInternalLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/internal_link.php', + 'ezcDocumentDocbookToRstItemizedListHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/itemized_list.php', + 'ezcDocumentDocbookToRstLiteralHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/literal.php', + 'ezcDocumentDocbookToRstLiteralLayoutHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/literal_layout.php', + 'ezcDocumentDocbookToRstMediaObjectHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/mediaobject.php', + 'ezcDocumentDocbookToRstOrderedListHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/ordered_list.php', + 'ezcDocumentDocbookToRstParagraphHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/paragraph.php', + 'ezcDocumentDocbookToRstRecurseHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/recurse.php', + 'ezcDocumentDocbookToRstSectionHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/section.php', + 'ezcDocumentDocbookToRstSpecialParagraphHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/special_paragraph.php', + 'ezcDocumentDocbookToRstTableHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/table.php', + 'ezcDocumentDocbookToRstVariableListHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/rst/variable_list.php', + 'ezcDocumentDocbookToWikiBaseHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/handler.php', + 'ezcDocumentDocbookToWikiBeginPageHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/begin_page.php', + 'ezcDocumentDocbookToWikiConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook_wiki.php', + 'ezcDocumentDocbookToWikiConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/converter_docbook_wiki.php', + 'ezcDocumentDocbookToWikiEmphasisHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/emphasis.php', + 'ezcDocumentDocbookToWikiExternalLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/external_link.php', + 'ezcDocumentDocbookToWikiIgnoreHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/ignore.php', + 'ezcDocumentDocbookToWikiInlineMediaObjectHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/inlinemediaobject.php', + 'ezcDocumentDocbookToWikiInternalLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/internal_link.php', + 'ezcDocumentDocbookToWikiItemizedListHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/itemized_list.php', + 'ezcDocumentDocbookToWikiLiteralHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/literal.php', + 'ezcDocumentDocbookToWikiLiteralLayoutHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/literal_layout.php', + 'ezcDocumentDocbookToWikiMediaObjectHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/mediaobject.php', + 'ezcDocumentDocbookToWikiOrderedListHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/ordered_list.php', + 'ezcDocumentDocbookToWikiParagraphHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/paragraph.php', + 'ezcDocumentDocbookToWikiRecurseHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/recurse.php', + 'ezcDocumentDocbookToWikiSectionHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/section.php', + 'ezcDocumentDocbookToWikiTableHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/wiki/table.php', + 'ezcDocumentDocumentTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_test.php', + 'ezcDocumentDokuwikiWiki' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/dokuwiki.php', + 'ezcDocumentElementVisitorConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor.php', + 'ezcDocumentElementVisitorHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor_handler.php', + 'ezcDocumentErroneousXmlException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/erroneous_xml.php', + 'ezcDocumentErrorReporting' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/error_reporting.php', + 'ezcDocumentException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/exception.php', + 'ezcDocumentEzXml' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/ezxml.php', + 'ezcDocumentEzXmlDummyLinkConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/ezxml/dummy_link_converter.php', + 'ezcDocumentEzXmlDummyLinkProvider' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/ezxml/dummy_link_provider.php', + 'ezcDocumentEzXmlLinkConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/ezxml_link_converter.php', + 'ezcDocumentEzXmlLinkProvider' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/ezxml_link_provider.php', + 'ezcDocumentEzXmlOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_ezxml.php', + 'ezcDocumentEzXmlOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_ezxml_options_tests.php', + 'ezcDocumentEzXmlTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_ezxml_test.php', + 'ezcDocumentEzXmlToDocbookAnchorHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/anchor.php', + 'ezcDocumentEzXmlToDocbookConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml_docbook.php', + 'ezcDocumentEzXmlToDocbookConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/converter_ezxml_docbook.php', + 'ezcDocumentEzXmlToDocbookEmphasisHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/emphasis.php', + 'ezcDocumentEzXmlToDocbookHeaderHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/header.php', + 'ezcDocumentEzXmlToDocbookLineHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/line.php', + 'ezcDocumentEzXmlToDocbookLinkHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/link.php', + 'ezcDocumentEzXmlToDocbookListHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/list.php', + 'ezcDocumentEzXmlToDocbookLiteralHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/literal.php', + 'ezcDocumentEzXmlToDocbookMappingHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/mapper.php', + 'ezcDocumentEzXmlToDocbookTableCellHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/table_cell.php', + 'ezcDocumentEzXmlToDocbookTableHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/table.php', + 'ezcDocumentEzXmlToDocbookTableRowHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/ezxml/docbook/table_row.php', + 'ezcDocumentHtmlConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/html_rendering.php', + 'ezcDocumentInvalidDocbookException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/invalid_docbook.php', + 'ezcDocumentInvalidFontException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/unknown_font.php', + 'ezcDocumentInvalidOdtException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/invalid_odt.php', + 'ezcDocumentListBulletGuesser' => __DIR__ . '/..' . '/zetacomponents/document/src/tools/list_bullet_guesser.php', + 'ezcDocumentListBulletGuesserTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/list_bullet_guesser_test.php', + 'ezcDocumentListItemGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/item_generator.php', + 'ezcDocumentLocateable' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/locateable.php', + 'ezcDocumentLocateableDomElement' => __DIR__ . '/..' . '/zetacomponents/document/src/dom_elements/locateable.php', + 'ezcDocumentMissingVisitorException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/missing_visitor.php', + 'ezcDocumentNoListItemGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/item_generator/no.php', + 'ezcDocumentNumberedListItemGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/item_generator/number.php', + 'ezcDocumentOdt' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt.php', + 'ezcDocumentOdtBaseFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/base.php', + 'ezcDocumentOdtDefaultPcssConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/default.php', + 'ezcDocumentOdtDocbookTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_odt_docbook_test.php', + 'ezcDocumentOdtElementBaseFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/base.php', + 'ezcDocumentOdtElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element.php', + 'ezcDocumentOdtElementFootnoteFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/footnote.php', + 'ezcDocumentOdtElementFrameFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/frame.php', + 'ezcDocumentOdtElementHeaderFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/header.php', + 'ezcDocumentOdtElementHtmlTableFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/html_table.php', + 'ezcDocumentOdtElementImageFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/image.php', + 'ezcDocumentOdtElementLinkFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/link.php', + 'ezcDocumentOdtElementListFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/list.php', + 'ezcDocumentOdtElementParagraphFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/paragraph.php', + 'ezcDocumentOdtElementTableFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/table.php', + 'ezcDocumentOdtElementWhitespaceFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/element/whitespace.php', + 'ezcDocumentOdtEmphasisStyleFilterRule' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/style/rule/emphasis.php', + 'ezcDocumentOdtFormattingProperties' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/formatting/properties.php', + 'ezcDocumentOdtFormattingPropertiesExistException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/odt/formatting_properties_exist.php', + 'ezcDocumentOdtFormattingPropertiesTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/formatting_properties_test.php', + 'ezcDocumentOdtFormattingPropertyCollection' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/formatting/property_collection.php', + 'ezcDocumentOdtFormattingPropertyCollectionTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/formatting_property_collection_test.php', + 'ezcDocumentOdtImageFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/image.php', + 'ezcDocumentOdtImageLocator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/image_locator.php', + 'ezcDocumentOdtListLevelStyle' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/list_level_style.php', + 'ezcDocumentOdtListLevelStyleBullet' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/list_level_style/bullet.php', + 'ezcDocumentOdtListLevelStyleFilterRule' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/style/rule/list_level.php', + 'ezcDocumentOdtListLevelStyleNumber' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/list_level_style/number.php', + 'ezcDocumentOdtListLevelStyleTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/list_level_style_test.php', + 'ezcDocumentOdtListStyle' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/list_style.php', + 'ezcDocumentOdtListStyleGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/list.php', + 'ezcDocumentOdtMetaGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/meta_generator.php', + 'ezcDocumentOdtMetaGeneratorTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/meta_generator_test.php', + 'ezcDocumentOdtOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_odt.php', + 'ezcDocumentOdtParagraphStyleGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/paragraph.php', + 'ezcDocumentOdtPcssBorderConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/border.php', + 'ezcDocumentOdtPcssColorConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/color.php', + 'ezcDocumentOdtPcssConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter.php', + 'ezcDocumentOdtPcssConverterManager' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter_manager.php', + 'ezcDocumentOdtPcssConverterTools' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter_tools.php', + 'ezcDocumentOdtPcssConvertersTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/style_converters_test.php', + 'ezcDocumentOdtPcssFontConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/font.php', + 'ezcDocumentOdtPcssFontNameConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/font_name.php', + 'ezcDocumentOdtPcssFontSizeConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/font_size.php', + 'ezcDocumentOdtPcssFontStylePreprocessor' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/preprocessor/font.php', + 'ezcDocumentOdtPcssListStylePreprocessor' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/preprocessor/list.php', + 'ezcDocumentOdtPcssMarginConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/margin.php', + 'ezcDocumentOdtPcssParagraphStylePreprocessor' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/preprocessor/paragraph.php', + 'ezcDocumentOdtPcssPreprocessor' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/preprocessor.php', + 'ezcDocumentOdtPcssStyler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss.php', + 'ezcDocumentOdtPcssTextDecorationConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/converter/text_decoration.php', + 'ezcDocumentOdtStyle' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/style.php', + 'ezcDocumentOdtStyleExtractor' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/style/extractor.php', + 'ezcDocumentOdtStyleExtractorTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/style_extractor_test.php', + 'ezcDocumentOdtStyleFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/style.php', + 'ezcDocumentOdtStyleFilterRule' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/filter/style/rule.php', + 'ezcDocumentOdtStyleGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator.php', + 'ezcDocumentOdtStyleInferencer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/style/inferencer.php', + 'ezcDocumentOdtStyleInformation' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/style_information.php', + 'ezcDocumentOdtStyleListPropertyGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/list.php', + 'ezcDocumentOdtStyleParagraphPropertyGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/paragraph.php', + 'ezcDocumentOdtStyleParagraphPropertyGeneratorTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/paragraph_property_generator_test.php', + 'ezcDocumentOdtStyleParser' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/odt/style/parser.php', + 'ezcDocumentOdtStyleParserTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/style_parser_test.php', + 'ezcDocumentOdtStylePropertyGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator.php', + 'ezcDocumentOdtStylePropertyGeneratorTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/property_generator_test.php', + 'ezcDocumentOdtStyleTableCellPropertyGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/table_cell.php', + 'ezcDocumentOdtStyleTablePropertyGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/table.php', + 'ezcDocumentOdtStyleTableRowPropertyGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/table_row.php', + 'ezcDocumentOdtStyleTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/style_test.php', + 'ezcDocumentOdtStyleTextPropertyGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/property_generator/text.php', + 'ezcDocumentOdtStyleTextPropertyGeneratorTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/text_property_generator_test.php', + 'ezcDocumentOdtStyler' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler.php', + 'ezcDocumentOdtTableCellStyleGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/table_cell.php', + 'ezcDocumentOdtTableRowStyleGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/table_row.php', + 'ezcDocumentOdtTableStyleGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/table.php', + 'ezcDocumentOdtTestStyler' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/test_classes/styler.php', + 'ezcDocumentOdtTextProcessor' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/text_processor.php', + 'ezcDocumentOdtTextProcessorTest' => __DIR__ . '/..' . '/zetacomponents/document/tests/odt/text_processor_test.php', + 'ezcDocumentOdtTextStyleGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/element_visitor/docbook/odt/styler/pcss/generator/text.php', + 'ezcDocumentOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document.php', + 'ezcDocumentOptionsOdtTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_options_odt_test.php', + 'ezcDocumentOptionsTestCase' => __DIR__ . '/..' . '/zetacomponents/document/tests/options_test_case.php', + 'ezcDocumentOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_options_tests.php', + 'ezcDocumentOptionsXmlBaseTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_options_xml_base_test.php', + 'ezcDocumentParser' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/parser.php', + 'ezcDocumentParserException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/parser.php', + 'ezcDocumentParserOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_parser.php', + 'ezcDocumentParserTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/parser_test.php', + 'ezcDocumentPcssDeclarationDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/declaration_directive.php', + 'ezcDocumentPcssDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/directive.php', + 'ezcDocumentPcssLayoutDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/layout_directive.php', + 'ezcDocumentPcssLocationIdTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pcss/location_id_test.php', + 'ezcDocumentPcssMatchLocationIdTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pcss/match_location_id_test.php', + 'ezcDocumentPcssMeasure' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/measure.php', + 'ezcDocumentPcssMeasureTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pcss/measure_test.php', + 'ezcDocumentPcssParser' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/parser.php', + 'ezcDocumentPcssParserTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pcss/parser_test.php', + 'ezcDocumentPcssStyleBorderBoxValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/border_box_value.php', + 'ezcDocumentPcssStyleBorderValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/border_value.php', + 'ezcDocumentPcssStyleBoxValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/box_value.php', + 'ezcDocumentPcssStyleColorBoxValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/color_box_value.php', + 'ezcDocumentPcssStyleColorValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/color_value.php', + 'ezcDocumentPcssStyleInferenceTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pcss/style_inference_test.php', + 'ezcDocumentPcssStyleInferencer' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style_inferencer.php', + 'ezcDocumentPcssStyleIntValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/int_value.php', + 'ezcDocumentPcssStyleLineBoxValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/line_box_value.php', + 'ezcDocumentPcssStyleLineValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/line_value.php', + 'ezcDocumentPcssStyleListValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/list_value.php', + 'ezcDocumentPcssStyleMeasureBoxValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/measure_box_value.php', + 'ezcDocumentPcssStyleMeasureValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/measure_value.php', + 'ezcDocumentPcssStyleSrcValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/src_value.php', + 'ezcDocumentPcssStyleStringValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/string_value.php', + 'ezcDocumentPcssStyleValue' => __DIR__ . '/..' . '/zetacomponents/document/src/pcss/style/value.php', + 'ezcDocumentPcssValueParserTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pcss/value_parser_test.php', + 'ezcDocumentPdf' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf.php', + 'ezcDocumentPdfBlockRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/block.php', + 'ezcDocumentPdfBlockquoteRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/blockquote.php', + 'ezcDocumentPdfBlockquoteRendererTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_blockquote_tests.php', + 'ezcDocumentPdfBoundingBox' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/box.php', + 'ezcDocumentPdfDefaultHyphenator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/hyphenator/default.php', + 'ezcDocumentPdfDefaultTableColumnWidthCalculator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/default_table_column_width_calculator.php', + 'ezcDocumentPdfDefaultTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/tokenizer/default.php', + 'ezcDocumentPdfDriver' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/driver.php', + 'ezcDocumentPdfDriverHaruTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/driver_haru_tests.php', + 'ezcDocumentPdfDriverSvgTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/driver_svg_tests.php', + 'ezcDocumentPdfDriverTcpdfTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/driver_tcpdf_tests.php', + 'ezcDocumentPdfDriverTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/driver_tests.php', + 'ezcDocumentPdfFooterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_pdf_footer.php', + 'ezcDocumentPdfFooterOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_pdf_footer_options_tests.php', + 'ezcDocumentPdfFooterPdfPart' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/part/footer.php', + 'ezcDocumentPdfHaruDriver' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/driver/haru.php', + 'ezcDocumentPdfHeaderPdfPart' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/part/header.php', + 'ezcDocumentPdfHyphenator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/hyphenator.php', + 'ezcDocumentPdfHyphenatorTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/hyphenator_test.php', + 'ezcDocumentPdfImage' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/image.php', + 'ezcDocumentPdfImageHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/image/handler.php', + 'ezcDocumentPdfImageHandlerTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/image_handler.php', + 'ezcDocumentPdfListItemGeneratorTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/list_item_generator_test.php', + 'ezcDocumentPdfListItemRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/list_item.php', + 'ezcDocumentPdfListRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/list.php', + 'ezcDocumentPdfListRendererTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_list_tests.php', + 'ezcDocumentPdfLiteralBlockRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/literal_block.php', + 'ezcDocumentPdfLiteralTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/tokenizer/literal.php', + 'ezcDocumentPdfLiteralTokenizerTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/literal_tokenizer_test.php', + 'ezcDocumentPdfLiterallayoutRendererTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_literallayout_tests.php', + 'ezcDocumentPdfMainRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/main.php', + 'ezcDocumentPdfMainRendererTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_main_tests.php', + 'ezcDocumentPdfMediaObjectRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/mediaobject.php', + 'ezcDocumentPdfMediaObjectRendererTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_mediaobject_tests.php', + 'ezcDocumentPdfOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_pdf.php', + 'ezcDocumentPdfOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_pdf_options_tests.php', + 'ezcDocumentPdfPage' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/page.php', + 'ezcDocumentPdfPageTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/page_test.php', + 'ezcDocumentPdfParagraphRendererTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_paragraph_tests.php', + 'ezcDocumentPdfPart' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/part.php', + 'ezcDocumentPdfPhpImageHandler' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/image/php.php', + 'ezcDocumentPdfRenderRtlTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_rtl_tests.php', + 'ezcDocumentPdfRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer.php', + 'ezcDocumentPdfRendererFooterPartTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_footer_part_tests.php', + 'ezcDocumentPdfRendererTextDecorationsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/render_text_decorations_tests.php', + 'ezcDocumentPdfSvgDriver' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/driver/svg.php', + 'ezcDocumentPdfTableColumnWidthCalculator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/table_column_width_calculator.php', + 'ezcDocumentPdfTableColumnWidthCalculatorTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/table_column_width_test.php', + 'ezcDocumentPdfTableRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/table.php', + 'ezcDocumentPdfTableRendererTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_table_tests.php', + 'ezcDocumentPdfTcpdfDriver' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/driver/tcpdf.php', + 'ezcDocumentPdfTestCase' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/base.php', + 'ezcDocumentPdfTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/tests.php', + 'ezcDocumentPdfTextBlockRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/text_block.php', + 'ezcDocumentPdfTextBoxRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/text_box.php', + 'ezcDocumentPdfTextBoxRendererBaseTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_text_box_base_tests.php', + 'ezcDocumentPdfTextBoxRendererTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_text_box_tests.php', + 'ezcDocumentPdfTitleRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/title.php', + 'ezcDocumentPdfTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/tokenizer.php', + 'ezcDocumentPdfTokenizerTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/tokenizer_test.php', + 'ezcDocumentPdfTransactionalDriverWrapper' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/driver/wrapper.php', + 'ezcDocumentPdfTransactionalDriverWrapperState' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/driver/wrapper_state.php', + 'ezcDocumentPdfTransactionalDriverWrapperTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/driver_transactions_tests.php', + 'ezcDocumentPdfVariableListRendererTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/pdf/renderer_variablelist_tests.php', + 'ezcDocumentPdfWrappingTextBoxRenderer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/renderer/paragraph.php', + 'ezcDocumentPropertyContainerDomElement' => __DIR__ . '/..' . '/zetacomponents/document/src/dom_elements/property_container.php', + 'ezcDocumentRomanListItemGenerator' => __DIR__ . '/..' . '/zetacomponents/document/src/document/pdf/item_generator/roman.php', + 'ezcDocumentRst' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst.php', + 'ezcDocumentRstAnonymousLinkNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/link_anonymous.php', + 'ezcDocumentRstAnonymousReferenceNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/anon_reference.php', + 'ezcDocumentRstAttentionDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive/attention.php', + 'ezcDocumentRstBlockNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/block.php', + 'ezcDocumentRstBlockquoteAnnotationNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/blockquote_annotation.php', + 'ezcDocumentRstBlockquoteNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/blockquote.php', + 'ezcDocumentRstBulletListListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/bullet_list_list.php', + 'ezcDocumentRstBulletListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/bullet_list.php', + 'ezcDocumentRstCommentNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/comment.php', + 'ezcDocumentRstContentsDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive/contents.php', + 'ezcDocumentRstDangerDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive/danger.php', + 'ezcDocumentRstDefinitionListListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/definition_list_list.php', + 'ezcDocumentRstDefinitionListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/definition_list.php', + 'ezcDocumentRstDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive.php', + 'ezcDocumentRstDirectiveNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/directive.php', + 'ezcDocumentRstDocbookVisitor' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/visitor/docbook.php', + 'ezcDocumentRstDocbookVisitorTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_rst_visitor_docbook_test.php', + 'ezcDocumentRstDocumentNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/document.php', + 'ezcDocumentRstEmphasisTextRole' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/role/emphasis.php', + 'ezcDocumentRstEnumeratedListListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/enumerated_list_list.php', + 'ezcDocumentRstEnumeratedListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/enumerated_list.php', + 'ezcDocumentRstExternalReferenceNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/link_reference.php', + 'ezcDocumentRstFieldListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/field_list.php', + 'ezcDocumentRstFigureDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive/figure.php', + 'ezcDocumentRstFootnoteNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/footnote.php', + 'ezcDocumentRstImageDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive/image.php', + 'ezcDocumentRstIncludeDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive/include.php', + 'ezcDocumentRstLineBlockLineNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/line_block_line.php', + 'ezcDocumentRstLineBlockNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/line_block.php', + 'ezcDocumentRstLinkNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/link.php', + 'ezcDocumentRstLiteralBlockNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/literal_block.php', + 'ezcDocumentRstLiteralNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/literal.php', + 'ezcDocumentRstLiteralTextRole' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/role/literal.php', + 'ezcDocumentRstMarkupEmphasisNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/markup_emphasis.php', + 'ezcDocumentRstMarkupInlineLiteralNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/markup_inline_literal.php', + 'ezcDocumentRstMarkupInterpretedTextNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/markup_interpreted_text.php', + 'ezcDocumentRstMarkupNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/markup.php', + 'ezcDocumentRstMarkupStrongEmphasisNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/markup_strong_emphasis.php', + 'ezcDocumentRstMarkupSubstitutionNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/markup_substitution.php', + 'ezcDocumentRstMissingDirectiveHandlerException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/missing_directive_handler.php', + 'ezcDocumentRstMissingTextRoleHandlerException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/missing_text_role_handler.php', + 'ezcDocumentRstNamedReferenceNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/named_reference.php', + 'ezcDocumentRstNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/node.php', + 'ezcDocumentRstNoteDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive/note.php', + 'ezcDocumentRstNoticeDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive/notice.php', + 'ezcDocumentRstOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_rst.php', + 'ezcDocumentRstOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_rst_options_tests.php', + 'ezcDocumentRstParagraphNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/paragraph.php', + 'ezcDocumentRstParser' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/parser.php', + 'ezcDocumentRstParserTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_rst_parser_test.php', + 'ezcDocumentRstReferenceNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/reference.php', + 'ezcDocumentRstSectionNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/section.php', + 'ezcDocumentRstStack' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/document_stack.php', + 'ezcDocumentRstStackTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_rst_stack_test.php', + 'ezcDocumentRstStrongTextRole' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/role/strong.php', + 'ezcDocumentRstSubscriptTextRole' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/role/subscript.php', + 'ezcDocumentRstSubstitutionNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/substitution.php', + 'ezcDocumentRstSuperscriptTextRole' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/role/superscript.php', + 'ezcDocumentRstTableBodyNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/table_body.php', + 'ezcDocumentRstTableCellNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/table_cell.php', + 'ezcDocumentRstTableHeadNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/table_head.php', + 'ezcDocumentRstTableNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/table.php', + 'ezcDocumentRstTableRowNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/table_row.php', + 'ezcDocumentRstTargetNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/target.php', + 'ezcDocumentRstTextLineNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/text_line.php', + 'ezcDocumentRstTextRole' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/role.php', + 'ezcDocumentRstTitleNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/title.php', + 'ezcDocumentRstTitleReferenceTextRole' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/role/title_reference.php', + 'ezcDocumentRstToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/token.php', + 'ezcDocumentRstTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/tokenizer.php', + 'ezcDocumentRstTokenizerException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/rst_tokenizer.php', + 'ezcDocumentRstTokenizerTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_rst_tokenizer_test.php', + 'ezcDocumentRstTransitionNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/nodes/transition.php', + 'ezcDocumentRstValidationTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_rst_validation_test.php', + 'ezcDocumentRstVisitor' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/visitor.php', + 'ezcDocumentRstWarningDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/directive/warning.php', + 'ezcDocumentRstXhtmlBodyVisitor' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/visitor/xhtml_body.php', + 'ezcDocumentRstXhtmlBodyVisitorTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_rst_visitor_xhtml_body_test.php', + 'ezcDocumentRstXhtmlDirective' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/rst_xhtml_directive.php', + 'ezcDocumentRstXhtmlTextRole' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/rst_xhtml_role.php', + 'ezcDocumentRstXhtmlVisitor' => __DIR__ . '/..' . '/zetacomponents/document/src/document/rst/visitor/xhtml.php', + 'ezcDocumentRstXhtmlVisitorTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_rst_visitor_xhtml_test.php', + 'ezcDocumentTestDummyDirective' => __DIR__ . '/..' . '/zetacomponents/document/tests/helper/rst_dummy_directives.php', + 'ezcDocumentTestDummyPlugin' => __DIR__ . '/..' . '/zetacomponents/document/tests/helper/wiki_dummy_directives.php', + 'ezcDocumentTestDummyRole' => __DIR__ . '/..' . '/zetacomponents/document/tests/helper/rst_dummy_directives.php', + 'ezcDocumentTestDummyXhtmlDirective' => __DIR__ . '/..' . '/zetacomponents/document/tests/helper/rst_dummy_directives.php', + 'ezcDocumentTestParagraphDirective' => __DIR__ . '/..' . '/zetacomponents/document/tests/helper/rst_paragraph_directive.php', + 'ezcDocumentValidation' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/validation.php', + 'ezcDocumentValidationError' => __DIR__ . '/..' . '/zetacomponents/document/src/validation_error.php', + 'ezcDocumentVisitException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/visitor.php', + 'ezcDocumentWiki' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki.php', + 'ezcDocumentWikiBlockLevelNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/block.php', + 'ezcDocumentWikiBlockMarkupToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/block_markup.php', + 'ezcDocumentWikiBlockquoteNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/blockquote.php', + 'ezcDocumentWikiBoldNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/bold.php', + 'ezcDocumentWikiBoldToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/bold.php', + 'ezcDocumentWikiBulletListItemNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/bullet_list_item.php', + 'ezcDocumentWikiBulletListItemToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/bullet_list.php', + 'ezcDocumentWikiBulletListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/bullet_list.php', + 'ezcDocumentWikiCodePlugin' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/plugin/code.php', + 'ezcDocumentWikiConfluenceLinkStartToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/confluence_link_start.php', + 'ezcDocumentWikiConfluenceTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/tokenizer/confluence.php', + 'ezcDocumentWikiConfluenceTokenizerTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_wiki_confluence_tokenizer_test.php', + 'ezcDocumentWikiCreoleTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/tokenizer/creole.php', + 'ezcDocumentWikiCreoleTokenizerTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_wiki_creole_tokenizer_test.php', + 'ezcDocumentWikiDefinitionListItemToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/definition_list.php', + 'ezcDocumentWikiDeletedNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/deleted.php', + 'ezcDocumentWikiDeletedToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/deleted.php', + 'ezcDocumentWikiDocbookVisitor' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/visitor/docbook.php', + 'ezcDocumentWikiDocbookVisitorTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_wiki_visitor_docbook_test.php', + 'ezcDocumentWikiDocumentNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/document.php', + 'ezcDocumentWikiDokuwikiTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/tokenizer/dokuwiki.php', + 'ezcDocumentWikiDokuwikiTokenizerTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_wiki_dokuwiki_tokenizer_test.php', + 'ezcDocumentWikiEndOfFileToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/end_of_file.php', + 'ezcDocumentWikiEnumeratedListItemNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/enumerated_list_item.php', + 'ezcDocumentWikiEnumeratedListItemToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/enumerated_list.php', + 'ezcDocumentWikiEnumeratedListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/enumerated_list.php', + 'ezcDocumentWikiEscapeCharacterToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/escape_character.php', + 'ezcDocumentWikiExternalLinkNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/external_link.php', + 'ezcDocumentWikiExternalLinkToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/external_link.php', + 'ezcDocumentWikiFootnoteEndNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/footnote_end.php', + 'ezcDocumentWikiFootnoteEndToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/footnote_end.php', + 'ezcDocumentWikiFootnoteNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/footnote.php', + 'ezcDocumentWikiFootnoteStartToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/footnote_start.php', + 'ezcDocumentWikiImageEndNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/image_end.php', + 'ezcDocumentWikiImageEndToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/image_end.php', + 'ezcDocumentWikiImageNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/image.php', + 'ezcDocumentWikiImageStartToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/image_start.php', + 'ezcDocumentWikiInlineLiteralNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/inline_literal.php', + 'ezcDocumentWikiInlineLiteralToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/inline_literal.php', + 'ezcDocumentWikiInlineMarkupToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/inline_markup.php', + 'ezcDocumentWikiInlineNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/inline.php', + 'ezcDocumentWikiInlineQuoteNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/inline_quote.php', + 'ezcDocumentWikiInlineQuoteToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/inline_quote.php', + 'ezcDocumentWikiInterWikiLinkNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/inter_wiki_link.php', + 'ezcDocumentWikiInterWikiLinkToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/inter_wiki_link.php', + 'ezcDocumentWikiInternalLinkNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/internal_link.php', + 'ezcDocumentWikiInternalLinkToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/internal_link.php', + 'ezcDocumentWikiInvisibleBreakNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/invisible_break.php', + 'ezcDocumentWikiItalicNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/italic.php', + 'ezcDocumentWikiItalicToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/italic.php', + 'ezcDocumentWikiLineBreakNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/line_break.php', + 'ezcDocumentWikiLineBreakToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/line_break.php', + 'ezcDocumentWikiLineLevelNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/line.php', + 'ezcDocumentWikiLineMarkupToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/line_markup.php', + 'ezcDocumentWikiLinkEndNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/link_end.php', + 'ezcDocumentWikiLinkEndToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/link_end.php', + 'ezcDocumentWikiLinkNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/link.php', + 'ezcDocumentWikiLinkStartToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/link_start.php', + 'ezcDocumentWikiListNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/list.php', + 'ezcDocumentWikiLiteralBlockNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/literal_block.php', + 'ezcDocumentWikiLiteralBlockToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/literal_block.php', + 'ezcDocumentWikiLiteralLineToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/literal_line.php', + 'ezcDocumentWikiMatchingInlineNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/matching_inline.php', + 'ezcDocumentWikiMediawikiEmphasisToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/mediawiki_emphasis.php', + 'ezcDocumentWikiMediawikiTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/tokenizer/mediawiki.php', + 'ezcDocumentWikiMediawikiTokenizerTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_wiki_mediawiki_tokenizer_test.php', + 'ezcDocumentWikiMissingPluginHandlerException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/missing_plugin_handler.php', + 'ezcDocumentWikiMonospaceNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/monospace.php', + 'ezcDocumentWikiMonospaceToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/monospace.php', + 'ezcDocumentWikiNewLineToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/new_line.php', + 'ezcDocumentWikiNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/node.php', + 'ezcDocumentWikiOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_wiki.php', + 'ezcDocumentWikiOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_wiki_options_tests.php', + 'ezcDocumentWikiPageBreakNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/page_break.php', + 'ezcDocumentWikiPageBreakToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/page_break.php', + 'ezcDocumentWikiParagraphIndentationToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/indentation.php', + 'ezcDocumentWikiParagraphNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/paragraph.php', + 'ezcDocumentWikiParser' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/parser.php', + 'ezcDocumentWikiParserTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_wiki_parser_test.php', + 'ezcDocumentWikiPlugin' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/plugin.php', + 'ezcDocumentWikiPluginNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/plugin.php', + 'ezcDocumentWikiPluginToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/plugin.php', + 'ezcDocumentWikiQuoteToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/quote.php', + 'ezcDocumentWikiSectionNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/section.php', + 'ezcDocumentWikiSeparatorNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/separator.php', + 'ezcDocumentWikiSeparatorToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/separator.php', + 'ezcDocumentWikiSpecialCharsToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/special_chars.php', + 'ezcDocumentWikiStrikeToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/strike.php', + 'ezcDocumentWikiSubscriptNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/subscript.php', + 'ezcDocumentWikiSubscriptToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/subscript.php', + 'ezcDocumentWikiSuperscriptNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/superscript.php', + 'ezcDocumentWikiSuperscriptToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/superscript.php', + 'ezcDocumentWikiTableCellNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/table_cell.php', + 'ezcDocumentWikiTableHeaderSeparatorNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/table_header_separator.php', + 'ezcDocumentWikiTableHeaderToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/table_header.php', + 'ezcDocumentWikiTableNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/table.php', + 'ezcDocumentWikiTableRowNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/table_row.php', + 'ezcDocumentWikiTableRowToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/table_row.php', + 'ezcDocumentWikiTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_wiki_test.php', + 'ezcDocumentWikiTextLineToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/text_line.php', + 'ezcDocumentWikiTextNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/text.php', + 'ezcDocumentWikiTitleNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/title.php', + 'ezcDocumentWikiTitleToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/title.php', + 'ezcDocumentWikiToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token.php', + 'ezcDocumentWikiTokenizer' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/tokenizer.php', + 'ezcDocumentWikiTokenizerException' => __DIR__ . '/..' . '/zetacomponents/document/src/exceptions/wiki_tokenizer.php', + 'ezcDocumentWikiUnderlineNode' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/nodes/underline.php', + 'ezcDocumentWikiUnderlineToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/underline.php', + 'ezcDocumentWikiVisitor' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/visitor.php', + 'ezcDocumentWikiWhitespaceToken' => __DIR__ . '/..' . '/zetacomponents/document/src/document/wiki/token/whitespace.php', + 'ezcDocumentXhtml' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml.php', + 'ezcDocumentXhtmlBaseFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/base.php', + 'ezcDocumentXhtmlBlockquoteElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/blockquote.php', + 'ezcDocumentXhtmlContentLocatorFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/content_locator.php', + 'ezcDocumentXhtmlConversion' => __DIR__ . '/..' . '/zetacomponents/document/src/interfaces/conversions/xhtml.php', + 'ezcDocumentXhtmlDefinitionListElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/definitionlist.php', + 'ezcDocumentXhtmlDocbookTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_xhtml_docbook_test.php', + 'ezcDocumentXhtmlElementBaseFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/base.php', + 'ezcDocumentXhtmlElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element.php', + 'ezcDocumentXhtmlElementMappingFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/mapping.php', + 'ezcDocumentXhtmlEnumeratedElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/enumerated.php', + 'ezcDocumentXhtmlFootnoteElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/footnote.php', + 'ezcDocumentXhtmlHeaderElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/header.php', + 'ezcDocumentXhtmlImageElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/image.php', + 'ezcDocumentXhtmlLineBlockElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/lineblock.php', + 'ezcDocumentXhtmlLinkElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/link.php', + 'ezcDocumentXhtmlLiteralElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/literal.php', + 'ezcDocumentXhtmlMetadataFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/metadata.php', + 'ezcDocumentXhtmlOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_xhtml.php', + 'ezcDocumentXhtmlOptionsTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_xhtml_options_tests.php', + 'ezcDocumentXhtmlParagraphElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/paragraph.php', + 'ezcDocumentXhtmlSpecialParagraphElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/special_paragraph.php', + 'ezcDocumentXhtmlStrongElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/strong.php', + 'ezcDocumentXhtmlTableCellElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/tablecell.php', + 'ezcDocumentXhtmlTableElementFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/table.php', + 'ezcDocumentXhtmlTablesFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/tables.php', + 'ezcDocumentXhtmlTextToParagraphFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/element/text.php', + 'ezcDocumentXhtmlValidationTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_xhtml_validation_test.php', + 'ezcDocumentXhtmlXpathFilter' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml/xhtml/filter/xpath.php', + 'ezcDocumentXmlBase' => __DIR__ . '/..' . '/zetacomponents/document/src/document/xml_base.php', + 'ezcDocumentXmlBaseTests' => __DIR__ . '/..' . '/zetacomponents/document/tests/document_xml_base_test.php', + 'ezcDocumentXmlOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/document_xml.php', + 'ezcDocumentXsltConverter' => __DIR__ . '/..' . '/zetacomponents/document/src/converters/xslt.php', + 'ezcDocumentXsltConverterOptions' => __DIR__ . '/..' . '/zetacomponents/document/src/options/converter_xslt.php', + 'ezcTestDocumentPdfHyphenator' => __DIR__ . '/..' . '/zetacomponents/document/tests/helper/pdf_test_hyphenator.php', + 'ezcTestDocumentPdfMockDriver' => __DIR__ . '/..' . '/zetacomponents/document/tests/helper/pdf_mocked_driver.php', + 'foo' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class.php', + 'foo\\Foo' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/classUsesNamespacedFunction.php', + 'i' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/source5.php', + 'iTemplate' => __DIR__ . '/..' . '/phpunit/php-token-stream/tests/_fixture/source4.php', + 'myAddressDirective' => __DIR__ . '/..' . '/zetacomponents/document/docs/tutorial/00_01_address_directive.php', + 'myAddressElementHandler' => __DIR__ . '/..' . '/zetacomponents/document/tests/helper/docbook_rst_address_element.php', + 'myLinkProvider' => __DIR__ . '/..' . '/zetacomponents/document/docs/tutorial/02_01_link_provider.php', + 'myProgressFinder' => __DIR__ . '/..' . '/zetacomponents/base/docs/tutorial_example_04.php', + 'phpDocumentor\\Application' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Application.php', + 'phpDocumentor\\Bootstrap' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Bootstrap.php', + 'phpDocumentor\\Command\\Command' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Command.php', + 'phpDocumentor\\Command\\Helper\\ConfigurationHelper' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Helper/ConfigurationHelper.php', + 'phpDocumentor\\Command\\Helper\\LoggerHelper' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Helper/LoggerHelper.php', + 'phpDocumentor\\Command\\Phar\\UpdateCommand' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Phar/UpdateCommand.php', + 'phpDocumentor\\Command\\Project\\RunCommand' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Command/Project/RunCommand.php', + 'phpDocumentor\\Compiler\\Compiler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Compiler.php', + 'phpDocumentor\\Compiler\\CompilerPassInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/CompilerPassInterface.php', + 'phpDocumentor\\Compiler\\Linker\\Linker' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Linker/Linker.php', + 'phpDocumentor\\Compiler\\Pass\\Debug' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/Debug.php', + 'phpDocumentor\\Compiler\\Pass\\ElementsIndexBuilder' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/ElementsIndexBuilder.php', + 'phpDocumentor\\Compiler\\Pass\\ExampleTagsEnricher' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/ExampleTagsEnricher.php', + 'phpDocumentor\\Compiler\\Pass\\MarkerFromTagsExtractor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/MarkerFromTagsExtractor.php', + 'phpDocumentor\\Compiler\\Pass\\NamespaceTreeBuilder' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/NamespaceTreeBuilder.php', + 'phpDocumentor\\Compiler\\Pass\\PackageTreeBuilder' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/PackageTreeBuilder.php', + 'phpDocumentor\\Compiler\\Pass\\ResolveInlineLinkAndSeeTags' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Compiler/Pass/ResolveInlineLinkAndSeeTags.php', + 'phpDocumentor\\Configuration' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration.php', + 'phpDocumentor\\Configuration\\Loader' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/Loader.php', + 'phpDocumentor\\Configuration\\Logging' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/Logging.php', + 'phpDocumentor\\Configuration\\Merger' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/Merger.php', + 'phpDocumentor\\Configuration\\Merger\\Annotation\\Replace' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/Merger/Annotation/Replace.php', + 'phpDocumentor\\Configuration\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Configuration/ServiceProvider.php', + 'phpDocumentor\\Console\\Input\\ArgvInput' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Console/Input/ArgvInput.php', + 'phpDocumentor\\Console\\Output\\Output' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Console/Output/Output.php', + 'phpDocumentor\\Descriptor\\ArgumentDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ArgumentDescriptor.php', + 'phpDocumentor\\Descriptor\\Builder\\AssemblerAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/AssemblerAbstract.php', + 'phpDocumentor\\Descriptor\\Builder\\AssemblerFactory' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/AssemblerFactory.php', + 'phpDocumentor\\Descriptor\\Builder\\AssemblerInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/AssemblerInterface.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\ArgumentAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/ArgumentAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\AssemblerAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/AssemblerAbstract.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\ClassAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/ClassAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\ConstantAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/ConstantAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\FileAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/FileAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\FunctionAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/FunctionAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\InterfaceAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/InterfaceAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\MethodAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/MethodAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\PropertyAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/PropertyAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\AuthorAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/AuthorAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\DeprecatedAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/DeprecatedAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\ExampleAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/ExampleAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\GenericTagAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/GenericTagAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\LinkAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/LinkAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\MethodAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/MethodAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\ParamAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/ParamAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\PropertyAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/PropertyAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\ReturnAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/ReturnAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\SeeAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/SeeAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\SinceAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/SinceAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\ThrowsAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/ThrowsAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\TypeCollectionAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/TypeCollectionAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\UsesAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/UsesAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\VarAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/VarAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\Tags\\VersionAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/Tags/VersionAssembler.php', + 'phpDocumentor\\Descriptor\\Builder\\Reflector\\TraitAssembler' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Builder/Reflector/TraitAssembler.php', + 'phpDocumentor\\Descriptor\\Cache\\ProjectDescriptorMapper' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Cache/ProjectDescriptorMapper.php', + 'phpDocumentor\\Descriptor\\ClassDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ClassDescriptor.php', + 'phpDocumentor\\Descriptor\\Collection' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Collection.php', + 'phpDocumentor\\Descriptor\\ConstantDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ConstantDescriptor.php', + 'phpDocumentor\\Descriptor\\DescriptorAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/DescriptorAbstract.php', + 'phpDocumentor\\Descriptor\\Example\\Finder' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Example/Finder.php', + 'phpDocumentor\\Descriptor\\Exception\\MissingDependencyException' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Exception/MissingDependencyException.php', + 'phpDocumentor\\Descriptor\\FileDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/FileDescriptor.php', + 'phpDocumentor\\Descriptor\\Filter\\ClassFactory' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/ClassFactory.php', + 'phpDocumentor\\Descriptor\\Filter\\Filter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/Filter.php', + 'phpDocumentor\\Descriptor\\Filter\\Filterable' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/Filterable.php', + 'phpDocumentor\\Descriptor\\Filter\\StripIgnore' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/StripIgnore.php', + 'phpDocumentor\\Descriptor\\Filter\\StripInternal' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/StripInternal.php', + 'phpDocumentor\\Descriptor\\Filter\\StripOnVisibility' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Filter/StripOnVisibility.php', + 'phpDocumentor\\Descriptor\\FunctionDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/FunctionDescriptor.php', + 'phpDocumentor\\Descriptor\\InterfaceDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/InterfaceDescriptor.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ArgumentInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ArgumentInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ChildInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ChildInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ClassInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ClassInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ConstantInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ConstantInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ContainerInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ContainerInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ElementInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ElementInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\FileInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/FileInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\FunctionInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/FunctionInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\InterfaceInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/InterfaceInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\MethodInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/MethodInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\NamespaceInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/NamespaceInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\PackageInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/PackageInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\ProjectInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/ProjectInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\PropertyInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/PropertyInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\TraitInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/TraitInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\TypeInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/TypeInterface.php', + 'phpDocumentor\\Descriptor\\Interfaces\\VisibilityInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Interfaces/VisibilityInterface.php', + 'phpDocumentor\\Descriptor\\MethodDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/MethodDescriptor.php', + 'phpDocumentor\\Descriptor\\NamespaceDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/NamespaceDescriptor.php', + 'phpDocumentor\\Descriptor\\PackageDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/PackageDescriptor.php', + 'phpDocumentor\\Descriptor\\ProjectAnalyzer' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ProjectAnalyzer.php', + 'phpDocumentor\\Descriptor\\ProjectDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ProjectDescriptor.php', + 'phpDocumentor\\Descriptor\\ProjectDescriptorBuilder' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ProjectDescriptorBuilder.php', + 'phpDocumentor\\Descriptor\\ProjectDescriptor\\Settings' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ProjectDescriptor/Settings.php', + 'phpDocumentor\\Descriptor\\PropertyDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/PropertyDescriptor.php', + 'phpDocumentor\\Descriptor\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/ServiceProvider.php', + 'phpDocumentor\\Descriptor\\TagDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/TagDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\AuthorDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/AuthorDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\BaseTypes\\TypedAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/BaseTypes/TypedAbstract.php', + 'phpDocumentor\\Descriptor\\Tag\\BaseTypes\\TypedVariableAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/BaseTypes/TypedVariableAbstract.php', + 'phpDocumentor\\Descriptor\\Tag\\DeprecatedDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/DeprecatedDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\ExampleDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/ExampleDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\LinkDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/LinkDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\MethodDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/MethodDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\ParamDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/ParamDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\PropertyDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/PropertyDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\ReturnDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/ReturnDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\SeeDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/SeeDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\SinceDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/SinceDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\ThrowsDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/ThrowsDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\UsesDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/UsesDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\VarDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/VarDescriptor.php', + 'phpDocumentor\\Descriptor\\Tag\\VersionDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Tag/VersionDescriptor.php', + 'phpDocumentor\\Descriptor\\TraitDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/TraitDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\BooleanDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/BooleanDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\CollectionDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/CollectionDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\FloatDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/FloatDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\IntegerDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/IntegerDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\StringDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/StringDescriptor.php', + 'phpDocumentor\\Descriptor\\Type\\UnknownTypeDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Type/UnknownTypeDescriptor.php', + 'phpDocumentor\\Descriptor\\Validator\\Error' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Descriptor/Validator/Error.php', + 'phpDocumentor\\Event\\DebugEvent' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Event/DebugEvent.php', + 'phpDocumentor\\Event\\Dispatcher' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Event/Dispatcher.php', + 'phpDocumentor\\Event\\EventAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Event/EventAbstract.php', + 'phpDocumentor\\Event\\LogEvent' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Event/LogEvent.php', + 'phpDocumentor\\Fileset\\Collection' => __DIR__ . '/..' . '/phpdocumentor/fileset/src/phpDocumentor/Fileset/Collection.php', + 'phpDocumentor\\Fileset\\CollectionTest' => __DIR__ . '/..' . '/phpdocumentor/fileset/tests/unit/phpDocumentor/Fileset/CollectionTest.php', + 'phpDocumentor\\Fileset\\Collection\\IgnorePatterns' => __DIR__ . '/..' . '/phpdocumentor/fileset/src/phpDocumentor/Fileset/Collection/IgnorePatterns.php', + 'phpDocumentor\\Fileset\\Collection\\IgnorePatternsTest' => __DIR__ . '/..' . '/phpdocumentor/fileset/tests/unit/phpDocumentor/Fileset/Collection/IgnorePatternsTest.php', + 'phpDocumentor\\Fileset\\File' => __DIR__ . '/..' . '/phpdocumentor/fileset/src/phpDocumentor/Fileset/File.php', + 'phpDocumentor\\Fileset\\FileTest' => __DIR__ . '/..' . '/phpdocumentor/fileset/tests/unit/phpDocumentor/Fileset/FileTest.php', + 'phpDocumentor\\GraphViz\\Attribute' => __DIR__ . '/..' . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Attribute.php', + 'phpDocumentor\\GraphViz\\Edge' => __DIR__ . '/..' . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Edge.php', + 'phpDocumentor\\GraphViz\\Exception' => __DIR__ . '/..' . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Exception.php', + 'phpDocumentor\\GraphViz\\Graph' => __DIR__ . '/..' . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Graph.php', + 'phpDocumentor\\GraphViz\\GraphTest' => __DIR__ . '/..' . '/phpdocumentor/graphviz/tests/phpDocumentor/GraphViz/Test/GraphTest.php', + 'phpDocumentor\\GraphViz\\Node' => __DIR__ . '/..' . '/phpdocumentor/graphviz/src/phpDocumentor/GraphViz/Node.php', + 'phpDocumentor\\GraphViz\\Test\\AttributeTest' => __DIR__ . '/..' . '/phpdocumentor/graphviz/tests/phpDocumentor/GraphViz/Test/AttributeTest.php', + 'phpDocumentor\\GraphViz\\Test\\EdgeTest' => __DIR__ . '/..' . '/phpdocumentor/graphviz/tests/phpDocumentor/GraphViz/Test/EdgeTest.php', + 'phpDocumentor\\GraphViz\\Test\\NodeTest' => __DIR__ . '/..' . '/phpdocumentor/graphviz/tests/phpDocumentor/GraphViz/Test/NodeTest.php', + 'phpDocumentor\\Parser\\Command\\Project\\ParseCommand' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Command/Project/ParseCommand.php', + 'phpDocumentor\\Parser\\Configuration' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Configuration.php', + 'phpDocumentor\\Parser\\Configuration\\Files' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Configuration/Files.php', + 'phpDocumentor\\Parser\\Event\\PreFileEvent' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Event/PreFileEvent.php', + 'phpDocumentor\\Parser\\Exception' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Exception.php', + 'phpDocumentor\\Parser\\Exception\\FilesNotFoundException' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Exception/FilesNotFoundException.php', + 'phpDocumentor\\Parser\\Exception\\MissingDependencyException' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Exception/MissingDependencyException.php', + 'phpDocumentor\\Parser\\File' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/File.php', + 'phpDocumentor\\Parser\\Parser' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Parser.php', + 'phpDocumentor\\Parser\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/ServiceProvider.php', + 'phpDocumentor\\Parser\\Util\\ParserPopulator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Parser/Util/ParserPopulator.php', + 'phpDocumentor\\Partials\\Collection' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Partials/Collection.php', + 'phpDocumentor\\Partials\\Exception\\MissingNameForPartialException' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Partials/Exception/MissingNameForPartialException.php', + 'phpDocumentor\\Partials\\Partial' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Partials/Partial.php', + 'phpDocumentor\\Partials\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Partials/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasPackageWithSubpackage' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasPackageWithSubpackage.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasPackageWithSubpackageValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasPackageWithSubpackageValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasSinglePackage' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasSinglePackage.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasSinglePackageValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasSinglePackageValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasSingleSubpackage' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasSingleSubpackage.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Classes\\HasSingleSubpackageValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Classes/HasSingleSubpackageValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\AreAllArgumentsValid' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/AreAllArgumentsValid.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\AreAllArgumentsValidValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/AreAllArgumentsValidValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesArgumentNameMatchParam' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesArgumentNameMatchParam.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesArgumentNameMatchParamValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesArgumentNameMatchParamValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesArgumentTypehintMatchParam' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesArgumentTypehintMatchParam.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesArgumentTypehintMatchParamValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesArgumentTypehintMatchParamValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesParamsExists' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesParamsExists.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\DoesParamsExistsValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/DoesParamsExistsValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsArgumentInDocBlock' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsArgumentInDocBlock.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsArgumentInDocBlockValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsArgumentInDocBlockValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsParamTypeNotAnIdeDefault' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsParamTypeNotAnIdeDefault.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsParamTypeNotAnIdeDefaultValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsParamTypeNotAnIdeDefaultValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsReturnTypeNotAnIdeDefault' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsReturnTypeNotAnIdeDefault.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Functions\\IsReturnTypeNotAnIdeDefaultValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Functions/IsReturnTypeNotAnIdeDefaultValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Property\\HasSummary' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Property/HasSummary.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Constraints\\Property\\HasSummaryValidator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Constraints/Property/HasSummaryValidator.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\Functions\\AreAllArgumentsValid' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/Functions/AreAllArgumentsValid.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\ValidationValueObject' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/ValidationValueObject.php', + 'phpDocumentor\\Plugin\\Core\\Descriptor\\Validator\\ValidatorAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Descriptor/Validator/ValidatorAbstract.php', + 'phpDocumentor\\Plugin\\Core\\Exception' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Exception.php', + 'phpDocumentor\\Plugin\\Core\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\AuthorTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/AuthorTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\CoversTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/CoversTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\IgnoreTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/IgnoreTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\InternalTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/InternalTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\LicenseTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/LicenseTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\MethodTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/MethodTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\ParamTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/ParamTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\PropertyTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/PropertyTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\ReturnTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/ReturnTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\UsesTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/UsesTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Behaviour\\Tag\\VarTag' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Behaviour/Tag/VarTag.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Checkstyle' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Checkstyle.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\FileIo' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/FileIo.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Pathfinder' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Pathfinder.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Sourcecode' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Sourcecode.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Statistics' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Statistics.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\ArgumentConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/ArgumentConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\ConstantConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/ConstantConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\DocBlockConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/DocBlockConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\InterfaceConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/InterfaceConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\MethodConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/MethodConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\PropertyConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/PropertyConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\TagConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/TagConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xml\\TraitConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xml/TraitConverter.php', + 'phpDocumentor\\Plugin\\Core\\Transformer\\Writer\\Xsl' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Transformer/Writer/Xsl.php', + 'phpDocumentor\\Plugin\\Core\\Xslt\\Extension' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Core/Xslt/Extension.php', + 'phpDocumentor\\Plugin\\Graphs\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Graphs/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Graphs\\Writer\\Graph' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Graphs/Writer/Graph.php', + 'phpDocumentor\\Plugin\\LegacyNamespaceConverter\\LegacyNamespaceFilter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/LegacyNamespaceConverter/LegacyNamespaceFilter.php', + 'phpDocumentor\\Plugin\\LegacyNamespaceConverter\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/LegacyNamespaceConverter/ServiceProvider.php', + 'phpDocumentor\\Plugin\\LegacyNamespaceConverter\\Tests\\LegacyNamespaceFilterTest' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/LegacyNamespaceConverter/Tests/LegacyNamespaceFilterTest.php', + 'phpDocumentor\\Plugin\\Parameter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Parameter.php', + 'phpDocumentor\\Plugin\\Plugin' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Plugin.php', + 'phpDocumentor\\Plugin\\Scrybe\\ApplicationTest' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/ApplicationTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Command\\Manual\\BaseConvertCommand' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Command/Manual/BaseConvertCommand.php', + 'phpDocumentor\\Plugin\\Scrybe\\Command\\Manual\\ToHtmlCommand' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Command/Manual/ToHtmlCommand.php', + 'phpDocumentor\\Plugin\\Scrybe\\Command\\Manual\\ToLatexCommand' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Command/Manual/ToLatexCommand.php', + 'phpDocumentor\\Plugin\\Scrybe\\Command\\Manual\\ToPdfCommand' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Command/Manual/ToPdfCommand.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\BaseConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/BaseConverter.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\ConverterInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/ConverterInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Definition\\Definition' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Definition/Definition.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Definition\\Factory' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Definition/Factory.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Exception\\ConverterNotFoundException' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Exception/ConverterNotFoundException.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Factory' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Factory.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Format\\Collection' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Format/Collection.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Format\\Exception\\FormatNotFoundException' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Format/Exception/FormatNotFoundException.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Format\\Format' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Format/Format.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\Assets' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/Assets.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\Glossary' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/Glossary.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContentsTest' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/Metadata/TableOfContentsTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\BaseEntry' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents/BaseEntry.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\BaseEntryTest' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/Metadata/TableOfContents/BaseEntryTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\File' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents/File.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\FileTest' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/Metadata/TableOfContents/FileTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\Heading' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents/Heading.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\Module' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/Metadata/TableOfContents/Module.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\Metadata\\TableOfContents\\ModuleTest' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/Metadata/TableOfContents/ModuleTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Directives\\CodeBlock' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Directives/CodeBlock.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Directives\\Figure' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Directives/Figure.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Directives\\Image' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Directives/Image.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Directives\\Toctree' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Directives/Toctree.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Document' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Document.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Roles\\Doc' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Roles/Doc.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\ToHtml' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/ToHtml.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Visitors\\Creator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Visitors/Creator.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Visitors\\Discover' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/RestructuredText/Visitors/Discover.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\RestructuredText\\Visitors\\DiscoverTest' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Converter/RestructuredText/Visitors/DiscoverTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\ToHtmlInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/ToHtmlInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\ToLatexInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/ToLatexInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\Converter\\ToPdfInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Converter/ToPdfInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\Factory' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Template/Factory.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\FactoryTest' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Template/FactoryTest.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\Mock\\Template' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Template/Mock/Template.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\TemplateInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Template/TemplateInterface.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\Twig' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/Template/Twig.php', + 'phpDocumentor\\Plugin\\Scrybe\\Template\\TwigTest' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Scrybe/tests/phpDocumentor/Scrybe/Template/TwigTest.php', + 'phpDocumentor\\Plugin\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Twig\\Extension' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Twig/Extension.php', + 'phpDocumentor\\Plugin\\Twig\\ExtensionInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Twig/ExtensionInterface.php', + 'phpDocumentor\\Plugin\\Twig\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Twig/ServiceProvider.php', + 'phpDocumentor\\Plugin\\Twig\\Writer\\Twig' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Plugin/Twig/Writer/Twig.php', + 'phpDocumentor\\Reflection\\BaseReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/BaseReflector.php', + 'phpDocumentor\\Reflection\\BaseReflectorMock' => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/BaseReflectorMock.php', + 'phpDocumentor\\Reflection\\BaseReflectorTest' => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/unit/phpDocumentor/Reflection/BaseReflectorTest.php', + 'phpDocumentor\\Reflection\\ClassReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ClassReflector.php', + 'phpDocumentor\\Reflection\\ClassReflectorMock' => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/ClassReflectorMock.php', + 'phpDocumentor\\Reflection\\ClassReflectorTest' => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/unit/phpDocumentor/Reflection/ClassReflectorTest.php', + 'phpDocumentor\\Reflection\\ClassReflector\\ConstantReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ClassReflector/ConstantReflector.php', + 'phpDocumentor\\Reflection\\ClassReflector\\MethodReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ClassReflector/MethodReflector.php', + 'phpDocumentor\\Reflection\\ClassReflector\\PropertyReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ClassReflector/PropertyReflector.php', + 'phpDocumentor\\Reflection\\ConstantReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ConstantReflector.php', + 'phpDocumentor\\Reflection\\DocBlock' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php', + 'phpDocumentor\\Reflection\\DocBlockTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlockTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Context' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php', + 'phpDocumentor\\Reflection\\DocBlock\\Description' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php', + 'phpDocumentor\\Reflection\\DocBlock\\DescriptionTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/DescriptionTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Location' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php', + 'phpDocumentor\\Reflection\\DocBlock\\Serializer' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Serializer.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php', + 'phpDocumentor\\Reflection\\DocBlock\\TagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/TagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\AuthorTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\CoversTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\CoversTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\DeprecatedTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\DeprecatedTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ExampleTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ExampleTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ExampleTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\LinkTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\LinkTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/LinkTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\MethodTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\MethodTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/MethodTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ParamTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ParamTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ParamTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\PropertyReadTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\PropertyTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\PropertyWriteTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ReturnTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ReturnTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ReturnTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SeeTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SeeTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SeeTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SinceTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SinceTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SinceTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SourceTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\SourceTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/SourceTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ThrowsTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\ThrowsTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\UsesTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\UsesTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/UsesTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\VarTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\VarTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VarTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\VersionTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tag\\VersionTagTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Tag/VersionTagTest.php', + 'phpDocumentor\\Reflection\\DocBlock\\Type\\Collection' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php', + 'phpDocumentor\\Reflection\\DocBlock\\Type\\CollectionTest' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php', + 'phpDocumentor\\Reflection\\Event\\ExportDocBlockTagEvent' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Event/ExportDocBlockTagEvent.php', + 'phpDocumentor\\Reflection\\Event\\PostDocBlockExtractionEvent' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Event/PostDocBlockExtractionEvent.php', + 'phpDocumentor\\Reflection\\Exception' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Exception.php', + 'phpDocumentor\\Reflection\\Exception\\UnparsableFile' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Exception/UnparsableFile.php', + 'phpDocumentor\\Reflection\\Exception\\UnreadableFile' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Exception/UnreadableFile.php', + 'phpDocumentor\\Reflection\\FileReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/FileReflector.php', + 'phpDocumentor\\Reflection\\FunctionReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/FunctionReflector.php', + 'phpDocumentor\\Reflection\\FunctionReflector\\ArgumentReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/FunctionReflector/ArgumentReflector.php', + 'phpDocumentor\\Reflection\\IncludeReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/IncludeReflector.php', + 'phpDocumentor\\Reflection\\InterfaceReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/InterfaceReflector.php', + 'phpDocumentor\\Reflection\\Lexer' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Lexer.php', + 'phpDocumentor\\Reflection\\NodeExprMock' => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/NodeExprMock.php', + 'phpDocumentor\\Reflection\\NodeStmtMock' => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/NodeStmtMock.php', + 'phpDocumentor\\Reflection\\NodeStmtMock2' => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/mocks/phpDocumentor/Reflection/NodeStmtMock2.php', + 'phpDocumentor\\Reflection\\PrettyPrinter' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/PrettyPrinter.php', + 'phpDocumentor\\Reflection\\PrettyPrinterTest' => __DIR__ . '/..' . '/phpdocumentor/reflection/tests/unit/phpDocumentor/Reflection/PrettyPrinterTest.php', + 'phpDocumentor\\Reflection\\ReflectionAbstract' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/ReflectionAbstract.php', + 'phpDocumentor\\Reflection\\TraitReflector' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/TraitReflector.php', + 'phpDocumentor\\Reflection\\Traverser' => __DIR__ . '/..' . '/phpdocumentor/reflection/src/phpDocumentor/Reflection/Traverser.php', + 'phpDocumentor\\Transformer\\Behaviour\\BehaviourAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Behaviour/BehaviourAbstract.php', + 'phpDocumentor\\Transformer\\Behaviour\\Collection' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Behaviour/Collection.php', + 'phpDocumentor\\Transformer\\Command\\Project\\TransformCommand' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Command/Project/TransformCommand.php', + 'phpDocumentor\\Transformer\\Command\\Template\\ListCommand' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Command/Template/ListCommand.php', + 'phpDocumentor\\Transformer\\Configuration' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Configuration.php', + 'phpDocumentor\\Transformer\\Configuration\\ExternalClassDocumentation' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Configuration/ExternalClassDocumentation.php', + 'phpDocumentor\\Transformer\\Configuration\\Transformations' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Configuration/Transformations.php', + 'phpDocumentor\\Transformer\\Configuration\\Transformations\\Template' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Configuration/Transformations/Template.php', + 'phpDocumentor\\Transformer\\Event\\PostTransformEvent' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PostTransformEvent.php', + 'phpDocumentor\\Transformer\\Event\\PostTransformationEvent' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PostTransformationEvent.php', + 'phpDocumentor\\Transformer\\Event\\PreTransformEvent' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PreTransformEvent.php', + 'phpDocumentor\\Transformer\\Event\\PreTransformationEvent' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PreTransformationEvent.php', + 'phpDocumentor\\Transformer\\Event\\PreXslWriterEvent' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/PreXslWriterEvent.php', + 'phpDocumentor\\Transformer\\Event\\WriterInitializationEvent' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Event/WriterInitializationEvent.php', + 'phpDocumentor\\Transformer\\Exception' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Exception.php', + 'phpDocumentor\\Transformer\\Exception\\MissingDependencyException' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Exception/MissingDependencyException.php', + 'phpDocumentor\\Transformer\\Exception\\UnknownWriter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Exception/UnknownWriter.php', + 'phpDocumentor\\Transformer\\Router\\ExternalRouter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/ExternalRouter.php', + 'phpDocumentor\\Transformer\\Router\\ForFileProxy' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/ForFileProxy.php', + 'phpDocumentor\\Transformer\\Router\\Matcher\\MatcherInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/Matcher/MatcherInterface.php', + 'phpDocumentor\\Transformer\\Router\\Queue' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/Queue.php', + 'phpDocumentor\\Transformer\\Router\\Renderer' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/Renderer.php', + 'phpDocumentor\\Transformer\\Router\\RouterAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/RouterAbstract.php', + 'phpDocumentor\\Transformer\\Router\\Rule' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/Rule.php', + 'phpDocumentor\\Transformer\\Router\\StandardRouter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/StandardRouter.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\ClassDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/ClassDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\ConstantDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/ConstantDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\FileDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/FileDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\FunctionDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/FunctionDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\MethodDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/MethodDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\NamespaceDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/NamespaceDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\PackageDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/PackageDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\PropertyDescriptor' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/PropertyDescriptor.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\Standard\\QualifiedNameToUrlConverter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/Standard/QualifiedNameToUrlConverter.php', + 'phpDocumentor\\Transformer\\Router\\UrlGenerator\\UrlGeneratorInterface' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Router/UrlGenerator/UrlGeneratorInterface.php', + 'phpDocumentor\\Transformer\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/ServiceProvider.php', + 'phpDocumentor\\Transformer\\Template' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template.php', + 'phpDocumentor\\Transformer\\Template\\Collection' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template/Collection.php', + 'phpDocumentor\\Transformer\\Template\\Factory' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template/Factory.php', + 'phpDocumentor\\Transformer\\Template\\Parameter' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template/Parameter.php', + 'phpDocumentor\\Transformer\\Template\\PathResolver' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Template/PathResolver.php', + 'phpDocumentor\\Transformer\\Transformation' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Transformation.php', + 'phpDocumentor\\Transformer\\Transformer' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Transformer.php', + 'phpDocumentor\\Transformer\\Writer\\Collection' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Collection.php', + 'phpDocumentor\\Transformer\\Writer\\Exception\\RequirementMissing' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Exception/RequirementMissing.php', + 'phpDocumentor\\Transformer\\Writer\\Initializable' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Initializable.php', + 'phpDocumentor\\Transformer\\Writer\\Routable' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Routable.php', + 'phpDocumentor\\Transformer\\Writer\\Translatable' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/Translatable.php', + 'phpDocumentor\\Transformer\\Writer\\WriterAbstract' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Transformer/Writer/WriterAbstract.php', + 'phpDocumentor\\Translator\\Configuration' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Translator/Configuration.php', + 'phpDocumentor\\Translator\\ServiceProvider' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Translator/ServiceProvider.php', + 'phpDocumentor\\Translator\\Translator' => __DIR__ . '/..' . '/phpdocumentor/phpdocumentor/src/phpDocumentor/Translator/Translator.php', + 'testBaseInitCallback' => __DIR__ . '/..' . '/zetacomponents/base/tests/init/base_init_callback.php', + 'testBaseInitClass' => __DIR__ . '/..' . '/zetacomponents/base/tests/init/base_init_class.php', + 'trBasetestClass' => __DIR__ . '/..' . '/zetacomponents/base/tests/test_repository/TestClasses/base_test_class.php', + 'trBasetestClass2' => __DIR__ . '/..' . '/zetacomponents/base/tests/test_repository/TestClasses/base_test_class_number_two.php', + 'trBasetestLongClass' => __DIR__ . '/..' . '/zetacomponents/base/tests/test_repository/TestClasses/base_test_long_class.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit0e1e438512d55b8565ec2867ac0ed110::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit0e1e438512d55b8565ec2867ac0ed110::$prefixDirsPsr4; + $loader->fallbackDirsPsr4 = ComposerStaticInit0e1e438512d55b8565ec2867ac0ed110::$fallbackDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit0e1e438512d55b8565ec2867ac0ed110::$prefixesPsr0; + $loader->classMap = ComposerStaticInit0e1e438512d55b8565ec2867ac0ed110::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json new file mode 100644 index 0000000..7d6f893 --- /dev/null +++ b/vendor/composer/installed.json @@ -0,0 +1,4277 @@ +[ + { + "name": "symfony/yaml", + "version": "v3.3.16", + "version_normalized": "3.3.16.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "af615970e265543a26ee712c958404eb9b7ac93d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/af615970e265543a26ee712c958404eb9b7ac93d", + "reference": "af615970e265543a26ee712c958404eb9b7ac93d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "time": "2018-01-20T15:04:53+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "time": "2016-10-03T07:35:21+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "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" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "time": "2015-07-28T20:34:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "time": "2016-11-19T07:33:16+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "time": "2017-02-18T15:18:39+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "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/" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "version_normalized": "1.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "time": "2015-10-12T03:26:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "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": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ] + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "time": "2016-11-19T08:54:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ] + }, + { + "name": "sebastian/environment", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "time": "2016-11-26T07:53:53+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "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": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ] + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "version_normalized": "1.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "time": "2017-05-22T07:24:03+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ] + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "version_normalized": "1.2.4.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "time": "2017-01-29T09:50:25+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ] + }, + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "time": "2017-07-22T11:58:36+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ] + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "version_normalized": "1.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2015-06-21T13:50:34+00:00", + "type": "library", + "installation-source": "dist", + "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" + ] + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.4", + "version_normalized": "3.4.4.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "time": "2017-06-30T09:13:00+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ] + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "version_normalized": "1.0.9.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "time": "2017-02-26T11:10:40+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ] + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "version_normalized": "1.4.5.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2017-11-27T13:52:08+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.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" + ] + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "time": "2017-03-04T06:30:41+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "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/" + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "version_normalized": "2.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, + "time": "2017-11-27T05:48:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ] + }, + { + "name": "phpunit/php-code-coverage", + "version": "4.0.8", + "version_normalized": "4.0.8.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" + }, + "require-dev": { + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" + }, + "suggest": { + "ext-xdebug": "^2.5.1" + }, + "time": "2017-04-02T07:44:40+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.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" + ] + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.5", + "version_normalized": "2.0.5.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "time": "2016-01-25T08:17:30+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ] + }, + { + "name": "phpspec/prophecy", + "version": "1.7.5", + "version_normalized": "1.7.5.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/dfd6be44111a7c41c2e884a336cc4f461b3b2401", + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + }, + "time": "2018-02-19T10:16:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ] + }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + "time": "2017-10-19T19:58:43+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ] + }, + { + "name": "phpunit/phpunit", + "version": "5.7.0", + "version_normalized": "5.7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "00d72b8dbd2bb7d6f02a820e6db5cb70df6ac55c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/00d72b8dbd2bb7d6f02a820e6db5cb70df6ac55c", + "reference": "00d72b8dbd2bb7d6f02a820e6db5cb70df6ac55c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "^4.0.3", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "~1.0", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0|~2.0", + "symfony/yaml": "~2.1|~3.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "time": "2016-12-01T17:04:00+00:00", + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ] + }, + { + "name": "symfony/filesystem", + "version": "v3.0.9", + "version_normalized": "3.0.9.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "b2da5009d9bacbd91d83486aa1f44c793a8c380d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b2da5009d9bacbd91d83486aa1f44c793a8c380d", + "reference": "b2da5009d9bacbd91d83486aa1f44c793a8c380d", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "time": "2016-07-20T05:43:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com" + }, + { + "name": "psr/container", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2017-02-14T16:28:37+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ] + }, + { + "name": "symfony/dependency-injection", + "version": "v3.2.14", + "version_normalized": "3.2.14.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "d9f2e62e1a93d52ad4e4f6faaf66f6eef723d761" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d9f2e62e1a93d52ad4e4f6faaf66f6eef723d761", + "reference": "d9f2e62e1a93d52ad4e4f6faaf66f6eef723d761", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "conflict": { + "symfony/yaml": "<3.2" + }, + "require-dev": { + "symfony/config": "~2.8|~3.0", + "symfony/expression-language": "~2.8|~3.0", + "symfony/yaml": "~3.2" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "time": "2017-07-28T15:22:55+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com" + }, + { + "name": "symfony/config", + "version": "v2.8.36", + "version_normalized": "2.8.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "17605ff58313d9fe94e507620a399721fc347b6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/17605ff58313d9fe94e507620a399721fc347b6d", + "reference": "17605ff58313d9fe94e507620a399721fc347b6d", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/filesystem": "~2.3|~3.0.0" + }, + "require-dev": { + "symfony/yaml": "~2.7|~3.0.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "time": "2018-01-21T19:03:25+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com" + }, + { + "name": "pdepend/pdepend", + "version": "2.5.2", + "version_normalized": "2.5.2.0", + "source": { + "type": "git", + "url": "https://github.com/pdepend/pdepend.git", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", + "reference": "9daf26d0368d4a12bed1cacae1a9f3a6f0adf239", + "shasum": "" + }, + "require": { + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3|^4", + "symfony/dependency-injection": "^2.3.0|^3|^4", + "symfony/filesystem": "^2.3.0|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.7", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "time": "2017-12-13T13:21:38+00:00", + "bin": [ + "src/bin/pdepend" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "PDepend\\": "src/main/php/PDepend" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Official version of pdepend to be handled with Composer" + }, + { + "name": "phpmd/phpmd", + "version": "2.6.0", + "version_normalized": "2.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpmd/phpmd.git", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/4e9924b2c157a3eb64395460fcf56b31badc8374", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "pdepend/pdepend": "^2.5", + "php": ">=5.3.9" + }, + "require-dev": { + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.0" + }, + "time": "2017-01-20T14:41:10+00:00", + "bin": [ + "src/bin/phpmd" + ], + "type": "project", + "installation-source": "dist", + "autoload": { + "psr-0": { + "PHPMD\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + } + ], + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "http://phpmd.org/", + "keywords": [ + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" + ] + }, + { + "name": "nikic/php-parser", + "version": "v1.4.1", + "version_normalized": "1.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3" + }, + "time": "2015-09-19T14:15:08+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "lib/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ] + }, + { + "name": "psr/log", + "version": "1.0.2", + "version_normalized": "1.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-10-10T12:19:37+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ] + }, + { + "name": "phpdocumentor/reflection", + "version": "3.0.1", + "version_normalized": "3.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Reflection.git", + "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d", + "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.0", + "php": ">=5.3.3", + "phpdocumentor/reflection-docblock": "~2.0", + "psr/log": "~1.0" + }, + "require-dev": { + "behat/behat": "~2.4", + "mockery/mockery": "~0.8", + "phpunit/phpunit": "~4.0" + }, + "time": "2016-05-21T08:42:32+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/", + "tests/mocks/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Reflection library to do Static Analysis for PHP Projects", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ] + }, + { + "name": "symfony/finder", + "version": "v2.8.36", + "version_normalized": "2.8.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "c5c751ccd50230b4517393344080a0eaf968bf2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/c5c751ccd50230b4517393344080a0eaf968bf2d", + "reference": "c5c751ccd50230b4517393344080a0eaf968bf2d", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "time": "2018-03-05T18:27:59+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com" + }, + { + "name": "phpdocumentor/fileset", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Fileset.git", + "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Fileset/zipball/bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0", + "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/finder": "~2.1" + }, + "require-dev": { + "phpunit/phpunit": "~3.7" + }, + "time": "2013-08-06T21:07:42+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Fileset component for collecting a set of files given directories and file paths", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "files", + "fileset", + "phpdoc" + ] + }, + { + "name": "phpdocumentor/graphviz", + "version": "1.0.4", + "version_normalized": "1.0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/GraphViz.git", + "reference": "a906a90a9f230535f25ea31caf81b2323956283f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/GraphViz/zipball/a906a90a9f230535f25ea31caf81b2323956283f", + "reference": "a906a90a9f230535f25ea31caf81b2323956283f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "time": "2016-02-02T13:00:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ] + }, + { + "name": "zendframework/zend-stdlib", + "version": "2.7.7", + "version_normalized": "2.7.7.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-stdlib.git", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "reference": "0e44eb46788f65e09e077eb7f44d2659143bcc1f", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-hydrator": "~1.1" + }, + "require-dev": { + "athletic/athletic": "~0.1", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-inputfilter": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-eventmanager": "To support aggregate hydrator usage", + "zendframework/zend-filter": "To support naming strategy hydrator usage", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + }, + "time": "2016-04-12T21:17:31+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-release-2.7": "2.7-dev", + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-stdlib", + "keywords": [ + "stdlib", + "zf2" + ] + }, + { + "name": "zendframework/zend-hydrator", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-hydrator.git", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-hydrator/zipball/22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "reference": "22652e1661a5a10b3f564cf7824a2206cf5a4a65", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "^2.0@dev", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-inputfilter": "^2.6", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0, to support aggregate hydrator usage", + "zendframework/zend-filter": "^2.6, to support naming strategy hydrator usage", + "zendframework/zend-serializer": "^2.6.1, to use the SerializableStrategy", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3, to support hydrator plugin manager usage" + }, + "time": "2016-02-18T22:38:26+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-release-1.0": "1.0-dev", + "dev-release-1.1": "1.1-dev", + "dev-master": "2.0-dev", + "dev-develop": "2.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Hydrator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-hydrator", + "keywords": [ + "hydrator", + "zf2" + ] + }, + { + "name": "zendframework/zend-filter", + "version": "2.7.2", + "version_normalized": "2.7.2.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-filter.git", + "reference": "b8d0ff872f126631bf63a932e33aa2d22d467175" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/b8d0ff872f126631bf63a932e33aa2d22d467175", + "reference": "b8d0ff872f126631bf63a932e33aa2d22d467175", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "pear/archive_tar": "^1.4", + "phpunit/phpunit": "^6.0.10 || ^5.7.17", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-crypt": "^2.6 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "zendframework/zend-crypt": "Zend\\Crypt component, for encryption filters", + "zendframework/zend-i18n": "Zend\\I18n component for filters depending on i18n functionality", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for using the filter chain functionality", + "zendframework/zend-uri": "Zend\\Uri component, for the UriNormalize filter" + }, + "time": "2017-05-17T20:56:17+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + }, + "zf": { + "component": "Zend\\Filter", + "config-provider": "Zend\\Filter\\ConfigProvider" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Filter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed data filters", + "homepage": "https://github.com/zendframework/zend-filter", + "keywords": [ + "filter", + "zf2" + ] + }, + { + "name": "zendframework/zend-eventmanager", + "version": "3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "9d72db10ceb6e42fb92350c0cb54460da61bd79c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/9d72db10ceb6e42fb92350c0cb54460da61bd79c", + "reference": "9d72db10ceb6e42fb92350c0cb54460da61bd79c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "^0.1", + "container-interop/container-interop": "^1.1.0", + "phpunit/phpunit": "^6.0.7 || ^5.7.14", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0" + }, + "suggest": { + "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "time": "2017-07-11T19:17:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev", + "dev-develop": "3.3-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "event", + "eventmanager", + "events", + "zf2" + ] + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "time": "2017-02-14T19:40:03+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop" + }, + { + "name": "zendframework/zend-servicemanager", + "version": "2.7.10", + "version_normalized": "2.7.10.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-servicemanager.git", + "reference": "ba7069c94c9af93122be9fa31cddd37f7707d5b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/ba7069c94c9af93122be9fa31cddd37f7707d5b4", + "reference": "ba7069c94c9af93122be9fa31cddd37f7707d5b4", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "dev-master", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-di": "~2.5", + "zendframework/zend-mvc": "~2.5" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", + "zendframework/zend-di": "Zend\\Di component" + }, + "time": "2017-12-05T16:27:36+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-servicemanager", + "keywords": [ + "servicemanager", + "zf2" + ] + }, + { + "name": "zendframework/zend-cache", + "version": "2.7.2", + "version_normalized": "2.7.2.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-cache.git", + "reference": "c98331b96d3b9d9b24cf32d02660602edb34d039" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-cache/zipball/c98331b96d3b9d9b24cf32d02660602edb34d039", + "reference": "c98331b96d3b9d9b24cf32d02660602edb34d039", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpbench/phpbench": "^0.10.0", + "phpunit/phpunit": "^4.8", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-serializer": "^2.6", + "zendframework/zend-session": "^2.6.2" + }, + "suggest": { + "ext-apc": "APC or compatible extension, to use the APC storage adapter", + "ext-apcu": "APCU >= 5.1.0, to use the APCu storage adapter", + "ext-dba": "DBA, to use the DBA storage adapter", + "ext-memcache": "Memcache >= 2.0.0 to use the Memcache storage adapter", + "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter", + "ext-mongo": "Mongo, to use MongoDb storage adapter", + "ext-redis": "Redis, to use Redis storage adapter", + "ext-wincache": "WinCache, to use the WinCache storage adapter", + "ext-xcache": "XCache, to use the XCache storage adapter", + "mongofill/mongofill": "Alternative to ext-mongo - a pure PHP implementation designed as a drop in replacement", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-session": "Zend\\Session component" + }, + "time": "2016-12-16T11:35:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + }, + "zf": { + "component": "Zend\\Cache", + "config-provider": "Zend\\Cache\\ConfigProvider" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a generic way to cache any data", + "homepage": "https://github.com/zendframework/zend-cache", + "keywords": [ + "cache", + "zf2" + ] + }, + { + "name": "zendframework/zend-json", + "version": "3.1.0", + "version_normalized": "3.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-json.git", + "reference": "4dd940e8e6f32f1d36ea6b0677ea57c540c7c19c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-json/zipball/4dd940e8e6f32f1d36ea6b0677ea57c540c7c19c", + "reference": "4dd940e8e6f32f1d36ea6b0677ea57c540c7c19c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" + }, + "suggest": { + "zendframework/zend-json-server": "For implementing JSON-RPC servers", + "zendframework/zend-xml2json": "For converting XML documents to JSON" + }, + "time": "2018-01-04T17:51:34+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev", + "dev-develop": "3.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "keywords": [ + "ZendFramework", + "json", + "zf" + ] + }, + { + "name": "zendframework/zend-serializer", + "version": "2.8.1", + "version_normalized": "2.8.1.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-serializer.git", + "reference": "7ac42b9a47e9cb23895173a3096bc3b3fb7ac580" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/7ac42b9a47e9cb23895173a3096bc3b3fb7ac580", + "reference": "7ac42b9a47e9cb23895173a3096bc3b3fb7ac580", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-json": "^2.5 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "doctrine/instantiator": "1.0.*", + "phpunit/phpunit": "^5.5", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-math": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-math": "(^2.6 || ^3.0) To support Python Pickle serialization", + "zendframework/zend-servicemanager": "(^2.7.5 || ^3.0.3) To support plugin manager support" + }, + "time": "2017-11-20T22:21:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev", + "dev-develop": "2.9-dev" + }, + "zf": { + "component": "Zend\\Serializer", + "config-provider": "Zend\\Serializer\\ConfigProvider" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Serializer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", + "homepage": "https://github.com/zendframework/zend-serializer", + "keywords": [ + "serializer", + "zf2" + ] + }, + { + "name": "zendframework/zend-i18n", + "version": "2.7.4", + "version_normalized": "2.7.4.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-i18n.git", + "reference": "d3431e29cc00c2a1c6704e601d4371dbf24f6a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/d3431e29cc00c2a1c6704e601d4371dbf24f6a31", + "reference": "d3431e29cc00c2a1c6704e601d4371dbf24f6a31", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^5.6", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-validator": "^2.6", + "zendframework/zend-view": "^2.6.3" + }, + "suggest": { + "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", + "zendframework/zend-filter": "You should install this package to use the provided filters", + "zendframework/zend-i18n-resources": "Translation resources", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "You should install this package to use the provided validators", + "zendframework/zend-view": "You should install this package to use the provided view helpers" + }, + "time": "2017-05-17T17:00:12+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + }, + "zf": { + "component": "Zend\\I18n", + "config-provider": "Zend\\I18n\\ConfigProvider" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\I18n\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-i18n", + "keywords": [ + "i18n", + "zf2" + ] + }, + { + "name": "zendframework/zend-config", + "version": "2.6.0", + "version_normalized": "2.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-config.git", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-config/zipball/2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-i18n": "^2.5", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", + "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + }, + "time": "2016-02-04T23:01:10+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://github.com/zendframework/zend-config", + "keywords": [ + "config", + "zf2" + ] + }, + { + "name": "kherge/version", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/kherge-abandoned/Version.git", + "reference": "f07cf83f8ce533be8f93d2893d96d674bbeb7e30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kherge-abandoned/Version/zipball/f07cf83f8ce533be8f93d2893d96d674bbeb7e30", + "reference": "f07cf83f8ce533be8f93d2893d96d674bbeb7e30", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2012-08-16T17:13:03+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "KevinGH\\Version": "src/lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Herrera", + "email": "me@kevingh.com" + } + ], + "description": "A parsing and comparison library for semantic versioning.", + "homepage": "http://github.com/kherge/Version", + "abandoned": true + }, + { + "name": "seld/jsonlint", + "version": "1.7.1", + "version_normalized": "1.7.1.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "time": "2018-01-24T12:46:19+00:00", + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ] + }, + { + "name": "justinrainbow/json-schema", + "version": "1.6.1", + "version_normalized": "1.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/cc84765fb7317f6b07bd8ac78364747f95b86341", + "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341", + "shasum": "" + }, + "require": { + "php": ">=5.3.29" + }, + "require-dev": { + "json-schema/json-schema-test-suite": "1.1.0", + "phpdocumentor/phpdocumentor": "~2", + "phpunit/phpunit": "~3.7" + }, + "time": "2016-01-25T15:43:01+00:00", + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ] + }, + { + "name": "herrera-io/json", + "version": "1.0.3", + "version_normalized": "1.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/kherge-php/json.git", + "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kherge-php/json/zipball/60c696c9370a1e5136816ca557c17f82a6fa83f1", + "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "justinrainbow/json-schema": ">=1.0,<2.0-dev", + "php": ">=5.3.3", + "seld/jsonlint": ">=1.0,<2.0-dev" + }, + "require-dev": { + "herrera-io/phpunit-test-case": "1.*", + "mikey179/vfsstream": "1.1.0", + "phpunit/phpunit": "3.7.*" + }, + "time": "2013-10-30T16:51:34+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/lib/json_version.php" + ], + "psr-0": { + "Herrera\\Json": "src/lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Herrera", + "email": "kevin@herrera.io", + "homepage": "http://kevin.herrera.io" + } + ], + "description": "A library for simplifying JSON linting and validation.", + "homepage": "http://herrera-io.github.com/php-json", + "keywords": [ + "json", + "lint", + "schema", + "validate" + ], + "abandoned": "kherge/json" + }, + { + "name": "herrera-io/phar-update", + "version": "1.0.3", + "version_normalized": "1.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/kherge-abandoned/php-phar-update.git", + "reference": "00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kherge-abandoned/php-phar-update/zipball/00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b", + "reference": "00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b", + "shasum": "" + }, + "require": { + "herrera-io/json": "1.*", + "kherge/version": "1.*", + "php": ">=5.3.3" + }, + "require-dev": { + "herrera-io/phpunit-test-case": "1.*", + "mikey179/vfsstream": "1.1.0", + "phpunit/phpunit": "3.7.*" + }, + "time": "2013-10-30T17:23:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/lib/constants.php" + ], + "psr-0": { + "Herrera\\Phar\\Update": "src/lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Herrera", + "email": "kevin@herrera.io", + "homepage": "http://kevin.herrera.io" + } + ], + "description": "A library for self-updating Phars.", + "homepage": "http://herrera-io.github.com/php-phar-update", + "keywords": [ + "phar", + "update" + ], + "abandoned": true + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "time": "2014-09-09T13:34:57+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ] + }, + { + "name": "doctrine/annotations", + "version": "v1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "time": "2017-12-06T07:11:42+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ] + }, + { + "name": "phpoption/phpoption", + "version": "1.5.0", + "version_normalized": "1.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.7.*" + }, + "time": "2015-07-25T16:39:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ] + }, + { + "name": "phpcollection/phpcollection", + "version": "0.5.0", + "version_normalized": "0.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "shasum": "" + }, + "require": { + "phpoption/phpoption": "1.*" + }, + "time": "2015-05-17T12:39:23+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "PhpCollection": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "General-Purpose Collection Library for PHP", + "keywords": [ + "collection", + "list", + "map", + "sequence", + "set" + ] + }, + { + "name": "jms/parser-lib", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/parser-lib.git", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "shasum": "" + }, + "require": { + "phpoption/phpoption": ">=0.9,<2.0-dev" + }, + "time": "2012-11-18T18:08:43+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "JMS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "description": "A library for easily creating recursive-descent parsers." + }, + { + "name": "jms/metadata", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/6a06970a10e0a532fb52d3959547123b84a3b3ab", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "doctrine/cache": "~1.0", + "symfony/cache": "~3.1" + }, + "time": "2016-12-05T10:18:33+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Metadata\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Class/method/property metadata management in PHP", + "keywords": [ + "annotations", + "metadata", + "xml", + "yaml" + ] + }, + { + "name": "jms/serializer", + "version": "1.11.0", + "version_normalized": "1.11.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/e7c53477ff55c21d1b1db7d062edc050a24f465f", + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3", + "jms/metadata": "~1.1", + "jms/parser-lib": "1.*", + "php": "^5.5|^7.0", + "phpcollection/phpcollection": "~0.1", + "phpoption/phpoption": "^1.1" + }, + "conflict": { + "twig/twig": "<1.12" + }, + "require-dev": { + "doctrine/orm": "~2.1", + "doctrine/phpcr-odm": "^1.3|^2.0", + "ext-pdo_sqlite": "*", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "phpunit/phpunit": "^4.8|^5.0", + "propel/propel1": "~1.7", + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/expression-language": "^2.6|^3.0", + "symfony/filesystem": "^2.1", + "symfony/form": "~2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/yaml": "^2.1|^3.0", + "twig/twig": "~1.12|~2.0" + }, + "suggest": { + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", + "symfony/yaml": "Required if you'd like to serialize data to YAML format." + }, + "time": "2018-02-04T17:48:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "JMS\\Serializer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ] + }, + { + "name": "symfony/stopwatch", + "version": "v2.8.36", + "version_normalized": "2.8.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "57021208ad9830f8f8390c1a9d7bb390f32be89e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/57021208ad9830f8f8390c1a9d7bb390f32be89e", + "reference": "57021208ad9830f8f8390c1a9d7bb390f32be89e", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "time": "2018-01-03T07:36:31+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.36", + "version_normalized": "2.8.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "f5d2d7dcc33b89e20c2696ea9afcbddf6540081c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f5d2d7dcc33b89e20c2696ea9afcbddf6540081c", + "reference": "f5d2d7dcc33b89e20c2696ea9afcbddf6540081c", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "time": "2018-02-11T16:53:59+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com" + }, + { + "name": "zetacomponents/base", + "version": "1.9.1", + "version_normalized": "1.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Base.git", + "reference": "489e20235989ddc97fdd793af31ac803972454f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Base/zipball/489e20235989ddc97fdd793af31ac803972454f1", + "reference": "489e20235989ddc97fdd793af31ac803972454f1", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "~5.7", + "zetacomponents/unit-test": "*" + }, + "time": "2017-11-28T11:30:00+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sergey Alexeev" + }, + { + "name": "Sebastian Bergmann" + }, + { + "name": "Jan Borsodi" + }, + { + "name": "Raymond Bosman" + }, + { + "name": "Frederik Holljen" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Vadym Savchuk" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + } + ], + "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.", + "homepage": "https://github.com/zetacomponents" + }, + { + "name": "zetacomponents/document", + "version": "1.3.1", + "version_normalized": "1.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Document.git", + "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Document/zipball/688abfde573cf3fe0730f82538fbd7aa9fc95bc8", + "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8", + "shasum": "" + }, + "require": { + "zetacomponents/base": "*" + }, + "require-dev": { + "zetacomponents/unit-test": "dev-master" + }, + "time": "2013-12-19T11:40:00+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sebastian Bergmann" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + } + ], + "description": "The Document components provides a general conversion framework for different semantic document markup languages like XHTML, Docbook, RST and similar.", + "homepage": "https://github.com/zetacomponents" + }, + { + "name": "symfony/process", + "version": "v2.8.36", + "version_normalized": "2.8.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "756f614c5061729ea245ac6717231f7e3bfb74f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/756f614c5061729ea245ac6717231f7e3bfb74f9", + "reference": "756f614c5061729ea245ac6717231f7e3bfb74f9", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "time": "2018-02-12T17:44:58+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com" + }, + { + "name": "erusev/parsedown", + "version": "1.7.1", + "version_normalized": "1.7.1.0", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "time": "2018-03-08T01:11:30+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ] + }, + { + "name": "twig/twig", + "version": "v1.35.3", + "version_normalized": "1.35.3.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/b48680b6eb7d16b5025b9bfc4108d86f6b8af86f", + "reference": "b48680b6eb7d16b5025b9bfc4108d86f6b8af86f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/debug": "^2.7", + "symfony/phpunit-bridge": "^3.3" + }, + "time": "2018-03-20T04:25:58+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.35-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ] + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "version_normalized": "1.23.0.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "time": "2017-06-19T01:22:40+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ] + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2018-01-30T19:27:44+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ] + }, + { + "name": "symfony/debug", + "version": "v3.0.9", + "version_normalized": "3.0.9.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/697c527acd9ea1b2d3efac34d9806bf255278b0a", + "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0" + }, + "time": "2016-07-30T07:22:48+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com" + }, + { + "name": "symfony/console", + "version": "v2.8.36", + "version_normalized": "2.8.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "a6ff8b2ffa4eb43046828b303af2e3fedadacc27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/a6ff8b2ffa4eb43046828b303af2e3fedadacc27", + "reference": "a6ff8b2ffa4eb43046828b303af2e3fedadacc27", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/debug": "^2.7.2|~3.0.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1|~3.0.0", + "symfony/process": "~2.1|~3.0.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "time": "2018-02-26T15:33:21+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com" + }, + { + "name": "symfony/translation", + "version": "v3.0.9", + "version_normalized": "3.0.9.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/eee6c664853fd0576f21ae25725cfffeafe83f26", + "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/config": "<2.8" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0", + "symfony/intl": "~2.8|~3.0", + "symfony/yaml": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "time": "2016-07-30T07:22:48+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com" + }, + { + "name": "symfony/validator", + "version": "v2.8.36", + "version_normalized": "2.8.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "848ef2ed49b90998abe6804736e3297716248bbf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/848ef2ed49b90998abe6804736e3297716248bbf", + "reference": "848ef2ed49b90998abe6804736e3297716248bbf", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation": "~2.4|~3.0.0" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "egulias/email-validator": "^1.2.1", + "symfony/config": "~2.2|~3.0.0", + "symfony/expression-language": "~2.4|~3.0.0", + "symfony/http-foundation": "~2.3|~3.0.0", + "symfony/intl": "~2.7.25|^2.8.18|~3.2.5", + "symfony/property-access": "~2.3|~3.0.0", + "symfony/yaml": "^2.0.5|~3.0.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "egulias/email-validator": "Strict (RFC compliant) email validation", + "symfony/config": "", + "symfony/expression-language": "For using the 2.4 Expression validator", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For using the 2.4 Validator API", + "symfony/yaml": "" + }, + "time": "2018-02-12T17:44:58+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Validator Component", + "homepage": "https://symfony.com" + }, + { + "name": "pimple/pimple", + "version": "v1.1.1", + "version_normalized": "1.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2013-11-22T08:30:29+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Pimple": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple is a simple Dependency Injection Container for PHP 5.3", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "container", + "dependency injection" + ] + }, + { + "name": "cilex/console-service-provider", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/Cilex/console-service-provider.git", + "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Cilex/console-service-provider/zipball/25ee3d1875243d38e1a3448ff94bdf944f70d24e", + "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "pimple/pimple": "1.*@dev", + "symfony/console": "~2.1" + }, + "require-dev": { + "cilex/cilex": "1.*@dev", + "silex/silex": "1.*@dev" + }, + "time": "2012-12-19T10:50:58+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Cilex\\Provider\\Console": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "description": "Console Service Provider", + "keywords": [ + "cilex", + "console", + "pimple", + "service-provider", + "silex" + ] + }, + { + "name": "cilex/cilex", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/Cilex/Cilex.git", + "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Cilex/Cilex/zipball/7acd965a609a56d0345e8b6071c261fbdb926cb5", + "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5", + "shasum": "" + }, + "require": { + "cilex/console-service-provider": "1.*", + "php": ">=5.3.3", + "pimple/pimple": "~1.0", + "symfony/finder": "~2.1", + "symfony/process": "~2.1" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*", + "symfony/validator": "~2.1" + }, + "suggest": { + "monolog/monolog": ">=1.0.0", + "symfony/validator": ">=1.0.0", + "symfony/yaml": ">=1.0.0" + }, + "time": "2014-03-29T14:03:13+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Cilex": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "description": "The PHP micro-framework for Command line tools based on the Symfony2 Components", + "homepage": "http://cilex.github.com", + "keywords": [ + "cli", + "microframework" + ] + }, + { + "name": "phpdocumentor/phpdocumentor", + "version": "v2.9.0", + "version_normalized": "2.9.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/phpDocumentor2.git", + "reference": "be607da0eef9b9249c43c5b4820d25d631c73667" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/phpDocumentor2/zipball/be607da0eef9b9249c43c5b4820d25d631c73667", + "reference": "be607da0eef9b9249c43c5b4820d25d631c73667", + "shasum": "" + }, + "require": { + "cilex/cilex": "~1.0", + "erusev/parsedown": "~1.0", + "herrera-io/phar-update": "1.0.3", + "jms/serializer": ">=0.12", + "monolog/monolog": "~1.6", + "php": ">=5.3.3", + "phpdocumentor/fileset": "~1.0", + "phpdocumentor/graphviz": "~1.0", + "phpdocumentor/reflection": "^3.0", + "phpdocumentor/reflection-docblock": "~2.0", + "symfony/config": "~2.3", + "symfony/console": "~2.3", + "symfony/event-dispatcher": "~2.1", + "symfony/process": "~2.0", + "symfony/stopwatch": "~2.3", + "symfony/validator": "~2.2", + "twig/twig": "~1.3", + "zendframework/zend-cache": "~2.1", + "zendframework/zend-config": "~2.1", + "zendframework/zend-filter": "~2.1", + "zendframework/zend-i18n": "~2.1", + "zendframework/zend-serializer": "~2.1", + "zendframework/zend-servicemanager": "~2.1", + "zendframework/zend-stdlib": "~2.1", + "zetacomponents/document": ">=1.3.1" + }, + "require-dev": { + "behat/behat": "~3.0", + "mikey179/vfsstream": "~1.2", + "mockery/mockery": "~0.9@dev", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.4", + "symfony/expression-language": "~2.4" + }, + "suggest": { + "ext-twig": "Enabling the twig extension improves the generation of twig based templates.", + "ext-xslcache": "Enabling the XSLCache extension improves the generation of xml based templates." + }, + "time": "2016-05-22T09:50:56+00:00", + "bin": [ + "bin/phpdoc.php", + "bin/phpdoc" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "2.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/" + ], + "Cilex\\Provider": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Documentation Generator for PHP", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "api", + "application", + "dga", + "documentation", + "phpdoc" + ] + }, + { + "name": "gamegos/php-code-sniffer", + "version": "0.6.1", + "version_normalized": "0.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/gamegos/php-code-sniffer.git", + "reference": "7e5939b66a55bb70eb66830b596b28e6bf3d1368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/gamegos/php-code-sniffer/zipball/7e5939b66a55bb70eb66830b596b28e6bf3d1368", + "reference": "7e5939b66a55bb70eb66830b596b28e6bf3d1368", + "shasum": "" + }, + "require": { + "php": ">=5.3.10" + }, + "require-dev": { + "squizlabs/php_codesniffer": "2.*" + }, + "time": "2017-04-26T14:02:47+00:00", + "bin": [ + "bin/phpcs", + "bin/phpcs-pre-commit", + "bin/phpcbf" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Safak Ozpinar", + "email": "safak@gamegos.com" + } + ], + "description": "Gamegos PHP Code Sniffer" + } +] diff --git a/vendor/container-interop/container-interop/.gitignore b/vendor/container-interop/container-interop/.gitignore new file mode 100644 index 0000000..b2395aa --- /dev/null +++ b/vendor/container-interop/container-interop/.gitignore @@ -0,0 +1,3 @@ +composer.lock +composer.phar +/vendor/ diff --git a/vendor/container-interop/container-interop/LICENSE b/vendor/container-interop/container-interop/LICENSE new file mode 100644 index 0000000..7671d90 --- /dev/null +++ b/vendor/container-interop/container-interop/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 container-interop + +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. diff --git a/vendor/container-interop/container-interop/README.md b/vendor/container-interop/container-interop/README.md new file mode 100644 index 0000000..cdd7a44 --- /dev/null +++ b/vendor/container-interop/container-interop/README.md @@ -0,0 +1,148 @@ +# Container Interoperability + +[![Latest Stable Version](https://poser.pugx.org/container-interop/container-interop/v/stable.png)](https://packagist.org/packages/container-interop/container-interop) +[![Total Downloads](https://poser.pugx.org/container-interop/container-interop/downloads.svg)](https://packagist.org/packages/container-interop/container-interop) + +## Deprecation warning! + +Starting Feb. 13th 2017, container-interop is officially deprecated in favor of [PSR-11](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md). +Container-interop has been the test-bed of PSR-11. From v1.2, container-interop directly extends PSR-11 interfaces. +Therefore, all containers implementing container-interop are now *de-facto* compatible with PSR-11. + +- Projects implementing container-interop interfaces are encouraged to directly implement PSR-11 interfaces instead. +- Projects consuming container-interop interfaces are very strongly encouraged to directly type-hint on PSR-11 interfaces, in order to be compatible with PSR-11 containers that are not compatible with container-interop. + +Regarding the delegate lookup feature, that is present in container-interop and not in PSR-11, the feature is actually a design pattern. It is therefore not deprecated. Documentation regarding this design pattern will be migrated from this repository into a separate website in the future. + +## About + +*container-interop* tries to identify and standardize features in *container* objects (service locators, +dependency injection containers, etc.) to achieve interoperability. + +Through discussions and trials, we try to create a standard, made of common interfaces but also recommendations. + +If PHP projects that provide container implementations begin to adopt these common standards, then PHP +applications and projects that use containers can depend on the common interfaces instead of specific +implementations. This facilitates a high-level of interoperability and flexibility that allows users to consume +*any* container implementation that can be adapted to these interfaces. + +The work done in this project is not officially endorsed by the [PHP-FIG](http://www.php-fig.org/), but it is being +worked on by members of PHP-FIG and other good developers. We adhere to the spirit and ideals of PHP-FIG, and hope +this project will pave the way for one or more future PSRs. + + +## Installation + +You can install this package through Composer: + +```json +composer require container-interop/container-interop +``` + +The packages adheres to the [SemVer](http://semver.org/) specification, and there will be full backward compatibility +between minor versions. + +## Standards + +### Available + +- [`ContainerInterface`](src/Interop/Container/ContainerInterface.php). +[Description](docs/ContainerInterface.md) [Meta Document](docs/ContainerInterface-meta.md). +Describes the interface of a container that exposes methods to read its entries. +- [*Delegate lookup feature*](docs/Delegate-lookup.md). +[Meta Document](docs/Delegate-lookup-meta.md). +Describes the ability for a container to delegate the lookup of its dependencies to a third-party container. This +feature lets several containers work together in a single application. + +### Proposed + +View open [request for comments](https://github.com/container-interop/container-interop/labels/RFC) + +## Compatible projects + +### Projects implementing `ContainerInterface` + +- [Acclimate](https://github.com/jeremeamia/acclimate-container): Adapters for + Aura.Di, Laravel, Nette DI, Pimple, Symfony DI, ZF2 Service manager, ZF2 + Dependency injection and any container using `ArrayAccess` +- [Aura.Di](https://github.com/auraphp/Aura.Di) +- [auryn-container-interop](https://github.com/elazar/auryn-container-interop) +- [Burlap](https://github.com/codeeverything/burlap) +- [Chernozem](https://github.com/pyrsmk/Chernozem) +- [Data Manager](https://github.com/chrismichaels84/data-manager) +- [Disco](https://github.com/bitexpert/disco) +- [InDI](https://github.com/idealogica/indi) +- [League/Container](http://container.thephpleague.com/) +- [Mouf](http://mouf-php.com) +- [Njasm Container](https://github.com/njasm/container) +- [PHP-DI](http://php-di.org) +- [Picotainer](https://github.com/thecodingmachine/picotainer) +- [PimpleInterop](https://github.com/moufmouf/pimple-interop) +- [Pimple3-ContainerInterop](https://github.com/Sam-Burns/pimple3-containerinterop) (using Pimple v3) +- [SitePoint Container](https://github.com/sitepoint/Container) +- [Thruster Container](https://github.com/ThrusterIO/container) (PHP7 only) +- [Ultra-Lite Container](https://github.com/ultra-lite/container) +- [Unbox](https://github.com/mindplay-dk/unbox) +- [XStatic](https://github.com/jeremeamia/xstatic) +- [Zend\ServiceManager](https://github.com/zendframework/zend-servicemanager) +- [Zit](https://github.com/inxilpro/Zit) + +### Projects implementing the *delegate lookup* feature + +- [Aura.Di](https://github.com/auraphp/Aura.Di) +- [Burlap](https://github.com/codeeverything/burlap) +- [Chernozem](https://github.com/pyrsmk/Chernozem) +- [InDI](https://github.com/idealogica/indi) +- [League/Container](http://container.thephpleague.com/) +- [Mouf](http://mouf-php.com) +- [Picotainer](https://github.com/thecodingmachine/picotainer) +- [PHP-DI](http://php-di.org) +- [PimpleInterop](https://github.com/moufmouf/pimple-interop) +- [Ultra-Lite Container](https://github.com/ultra-lite/container) + +### Middlewares implementing `ContainerInterface` + +- [Alias-Container](https://github.com/thecodingmachine/alias-container): add + aliases support to any container +- [Prefixer-Container](https://github.com/thecodingmachine/prefixer-container): + dynamically prefix identifiers +- [Lazy-Container](https://github.com/snapshotpl/lazy-container): lazy services + +### Projects using `ContainerInterface` + +The list below contains only a sample of all the projects consuming `ContainerInterface`. For a more complete list have a look [here](http://packanalyst.com/class?q=Interop%5CContainer%5CContainerInterface). + +| | Downloads | +| --- | --- | +| [Adroit](https://github.com/bitexpert/adroit) | ![](https://img.shields.io/packagist/dt/bitexpert/adroit.svg) | +| [Behat](https://github.com/Behat/Behat/pull/974) | ![](https://img.shields.io/packagist/dt/behat/behat.svg) | +| [blast-facades](https://github.com/phpthinktank/blast-facades): Minimize complexity and represent dependencies as facades. | ![](https://img.shields.io/packagist/dt/blast/facades.svg) | +| [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di): an extension to [Silex](http://silex.sensiolabs.org/) that adds support for any *container-interop* compatible container | ![](https://img.shields.io/packagist/dt/mouf/interop.silex.di.svg) | +| [mindplay/walkway](https://github.com/mindplay-dk/walkway): a modular request router | ![](https://img.shields.io/packagist/dt/mindplay/walkway.svg) | +| [mindplay/middleman](https://github.com/mindplay-dk/middleman): minimalist PSR-7 middleware dispatcher | ![](https://img.shields.io/packagist/dt/mindplay/middleman.svg) | +| [PHP-DI/Invoker](https://github.com/PHP-DI/Invoker): extensible and configurable invoker/dispatcher | ![](https://img.shields.io/packagist/dt/php-di/invoker.svg) | +| [Prophiler](https://github.com/fabfuel/prophiler) | ![](https://img.shields.io/packagist/dt/fabfuel/prophiler.svg) | +| [Silly](https://github.com/mnapoli/silly): CLI micro-framework | ![](https://img.shields.io/packagist/dt/mnapoli/silly.svg) | +| [Slim v3](https://github.com/slimphp/Slim) | ![](https://img.shields.io/packagist/dt/slim/slim.svg) | +| [Splash](http://mouf-php.com/packages/mouf/mvc.splash-common/version/8.0-dev/README.md) | ![](https://img.shields.io/packagist/dt/mouf/mvc.splash-common.svg) | +| [Woohoo Labs. Harmony](https://github.com/woohoolabs/harmony): a flexible micro-framework | ![](https://img.shields.io/packagist/dt/woohoolabs/harmony.svg) | +| [zend-expressive](https://github.com/zendframework/zend-expressive) | ![](https://img.shields.io/packagist/dt/zendframework/zend-expressive.svg) | + + +## Workflow + +Everyone is welcome to join and contribute. + +The general workflow looks like this: + +1. Someone opens a discussion (GitHub issue) to suggest an interface +1. Feedback is gathered +1. The interface is added to a development branch +1. We release alpha versions so that the interface can be experimented with +1. Discussions and edits ensue until the interface is deemed stable by a general consensus +1. A new minor version of the package is released + +We try to not break BC by creating new interfaces instead of editing existing ones. + +While we currently work on interfaces, we are open to anything that might help towards interoperability, may that +be code, best practices, etc. diff --git a/vendor/container-interop/container-interop/composer.json b/vendor/container-interop/container-interop/composer.json new file mode 100644 index 0000000..855f766 --- /dev/null +++ b/vendor/container-interop/container-interop/composer.json @@ -0,0 +1,15 @@ +{ + "name": "container-interop/container-interop", + "type": "library", + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "license": "MIT", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "require": { + "psr/container": "^1.0" + } +} diff --git a/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md b/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md new file mode 100644 index 0000000..59f3d55 --- /dev/null +++ b/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md @@ -0,0 +1,114 @@ +# ContainerInterface Meta Document + +## Introduction + +This document describes the process and discussions that lead to the `ContainerInterface`. +Its goal is to explain the reasons behind each decision. + +## Goal + +The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a +container to obtain objects and parameters. + +By standardizing such a behavior, frameworks and libraries using the `ContainerInterface` +could work with any compatible container. +That would allow end users to choose their own container based on their own preferences. + +It is important to distinguish the two usages of a container: + +- configuring entries +- fetching entries + +Most of the time, those two sides are not used by the same party. +While it is often end users who tend to configure entries, it is generally the framework that fetch +entries to build the application. + +This is why this interface focuses only on how entries can be fetched from a container. + +## Interface name + +The interface name has been thoroughly discussed and was decided by a vote. + +The list of options considered with their respective votes are: + +- `ContainerInterface`: +8 +- `ProviderInterface`: +2 +- `LocatorInterface`: 0 +- `ReadableContainerInterface`: -5 +- `ServiceLocatorInterface`: -6 +- `ObjectFactory`: -6 +- `ObjectStore`: -8 +- `ConsumerInterface`: -9 + +[Full results of the vote](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote) + +The complete discussion can be read in [the issue #1](https://github.com/container-interop/container-interop/issues/1). + +## Interface methods + +The choice of which methods the interface would contain was made after a statistical analysis of existing containers. +The results of this analysis are available [in this document](https://gist.github.com/mnapoli/6159681). + +The summary of the analysis showed that: + +- all containers offer a method to get an entry by its id +- a large majority name such method `get()` +- for all containers, the `get()` method has 1 mandatory parameter of type string +- some containers have an optional additional argument for `get()`, but it doesn't have the same purpose between containers +- a large majority of the containers offer a method to test if it can return an entry by its id +- a majority name such method `has()` +- for all containers offering `has()`, the method has exactly 1 parameter of type string +- a large majority of the containers throw an exception rather than returning null when an entry is not found in `get()` +- a large majority of the containers don't implement `ArrayAccess` + +The question of whether to include methods to define entries has been discussed in +[issue #1](https://github.com/container-interop/container-interop/issues/1). +It has been judged that such methods do not belong in the interface described here because it is out of its scope +(see the "Goal" section). + +As a result, the `ContainerInterface` contains two methods: + +- `get()`, returning anything, with one mandatory string parameter. Should throw an exception if the entry is not found. +- `has()`, returning a boolean, with one mandatory string parameter. + +### Number of parameters in `get()` method + +While `ContainerInterface` only defines one mandatory parameter in `get()`, it is not incompatible with +existing containers that have additional optional parameters. PHP allows an implementation to offer more parameters +as long as they are optional, because the implementation *does* satisfy the interface. + +This issue has been discussed in [issue #6](https://github.com/container-interop/container-interop/issues/6). + +### Type of the `$id` parameter + +The type of the `$id` parameter in `get()` and `has()` has been discussed in +[issue #6](https://github.com/container-interop/container-interop/issues/6). +While `string` is used in all the containers that were analyzed, it was suggested that allowing +anything (such as objects) could allow containers to offer a more advanced query API. + +An example given was to use the container as an object builder. The `$id` parameter would then be an +object that would describe how to create an instance. + +The conclusion of the discussion was that this was beyond the scope of getting entries from a container without +knowing how the container provided them, and it was more fit for a factory. + +## Contributors + +Are listed here all people that contributed in the discussions or votes, by alphabetical order: + +- [Amy Stephen](https://github.com/AmyStephen) +- [David Négrier](https://github.com/moufmouf) +- [Don Gilbert](https://github.com/dongilbert) +- [Jason Judge](https://github.com/judgej) +- [Jeremy Lindblom](https://github.com/jeremeamia) +- [Marco Pivetta](https://github.com/Ocramius) +- [Matthieu Napoli](https://github.com/mnapoli) +- [Paul M. Jones](https://github.com/pmjones) +- [Stephan Hochdörfer](https://github.com/shochdoerfer) +- [Taylor Otwell](https://github.com/taylorotwell) + +## Relevant links + +- [`ContainerInterface.php`](https://github.com/container-interop/container-interop/blob/master/src/Interop/Container/ContainerInterface.php) +- [List of all issues](https://github.com/container-interop/container-interop/issues?labels=ContainerInterface&milestone=&page=1&state=closed) +- [Vote for the interface name](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote) diff --git a/vendor/container-interop/container-interop/docs/ContainerInterface.md b/vendor/container-interop/container-interop/docs/ContainerInterface.md new file mode 100644 index 0000000..bda973d --- /dev/null +++ b/vendor/container-interop/container-interop/docs/ContainerInterface.md @@ -0,0 +1,158 @@ +Container interface +=================== + +This document describes a common interface for dependency injection containers. + +The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a +container to obtain objects and parameters (called *entries* in the rest of this document). + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", +"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be +interpreted as described in [RFC 2119][]. + +The word `implementor` in this document is to be interpreted as someone +implementing the `ContainerInterface` in a dependency injection-related library or framework. +Users of dependency injections containers (DIC) are referred to as `user`. + +[RFC 2119]: http://tools.ietf.org/html/rfc2119 + +1. Specification +----------------- + +### 1.1 Basics + +- The `Interop\Container\ContainerInterface` exposes two methods : `get` and `has`. + +- `get` takes one mandatory parameter: an entry identifier. It MUST be a string. + A call to `get` can return anything (a *mixed* value), or throws an exception if the identifier + is not known to the container. Two successive calls to `get` with the same + identifier SHOULD return the same value. However, depending on the `implementor` + design and/or `user` configuration, different values might be returned, so + `user` SHOULD NOT rely on getting the same value on 2 successive calls. + While `ContainerInterface` only defines one mandatory parameter in `get()`, implementations + MAY accept additional optional parameters. + +- `has` takes one unique parameter: an entry identifier. It MUST return `true` + if an entry identifier is known to the container and `false` if it is not. + `has($id)` returning true does not mean that `get($id)` will not throw an exception. + It does however mean that `get($id)` will not throw a `NotFoundException`. + +### 1.2 Exceptions + +Exceptions directly thrown by the container MUST implement the +[`Interop\Container\Exception\ContainerException`](../src/Interop/Container/Exception/ContainerException.php). + +A call to the `get` method with a non-existing id SHOULD throw a +[`Interop\Container\Exception\NotFoundException`](../src/Interop/Container/Exception/NotFoundException.php). + +### 1.3 Additional features + +This section describes additional features that MAY be added to a container. Containers are not +required to implement these features to respect the ContainerInterface. + +#### 1.3.1 Delegate lookup feature + +The goal of the *delegate lookup* feature is to allow several containers to share entries. +Containers implementing this feature can perform dependency lookups in other containers. + +Containers implementing this feature will offer a greater lever of interoperability +with other containers. Implementation of this feature is therefore RECOMMENDED. + +A container implementing this feature: + +- MUST implement the `ContainerInterface` +- MUST provide a way to register a delegate container (using a constructor parameter, or a setter, + or any possible way). The delegate container MUST implement the `ContainerInterface`. + +When a container is configured to use a delegate container for dependencies: + +- Calls to the `get` method should only return an entry if the entry is part of the container. + If the entry is not part of the container, an exception should be thrown + (as requested by the `ContainerInterface`). +- Calls to the `has` method should only return `true` if the entry is part of the container. + If the entry is not part of the container, `false` should be returned. +- If the fetched entry has dependencies, **instead** of performing + the dependency lookup in the container, the lookup is performed on the *delegate container*. + +Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself. + +It is however allowed for containers to provide exception cases for special entries, and a way to lookup +into the same container (or another container) instead of the delegate container. + +2. Package +---------- + +The interfaces and classes described as well as relevant exception are provided as part of the +[container-interop/container-interop](https://packagist.org/packages/container-interop/container-interop) package. + +3. `Interop\Container\ContainerInterface` +----------------------------------------- + +```php +setParentContainer($this); + } + } + ... + } +} + +``` + +**Cons:** + +Cons have been extensively discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51721777). +Basically, forcing a setter into an interface is a bad idea. Setters are similar to constructor arguments, +and it's a bad idea to standardize a constructor: how the delegate container is configured into a container is an implementation detail. This outweights the benefits of the interface. + +### 4.4 Alternative: no exception case for delegate lookups + +Originally, the proposed wording for delegate lookup calls was: + +> Important! The lookup MUST be performed on the delegate container **only**, not on the container itself. + +This was later replaced by: + +> Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself. +> +> It is however allowed for containers to provide exception cases for special entries, and a way to lookup +> into the same container (or another container) instead of the delegate container. + +Exception cases have been allowed to avoid breaking dependencies with some services that must be provided +by the container (on @njasm proposal). This was proposed here: https://github.com/container-interop/container-interop/pull/20#issuecomment-56597235 + +### 4.5 Alternative: having one of the containers act as the composite container + +In real-life scenarios, we usually have a big framework (Symfony 2, Zend Framework 2, etc...) and we want to +add another DI container to this container. Most of the time, the "big" framework will be responsible for +creating the controller's instances, using it's own DI container. Until *container-interop* is fully adopted, +the "big" framework will not be aware of the existence of a composite container that it should use instead +of its own container. + +For this real-life use cases, @mnapoli and @moufmouf proposed to extend the "big" framework's DI container +to make it act as a composite container. + +This has been discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-40367194) +and [here](http://mouf-php.com/container-interop-whats-next#solution4). + +This was implemented in Symfony 2 using: + +- [interop.symfony.di](https://github.com/thecodingmachine/interop.symfony.di/tree/v0.1.0) +- [framework interop](https://github.com/mnapoli/framework-interop/) + +This was implemented in Silex using: + +- [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di) + +Having a container act as the composite container is not part of the delegate lookup standard because it is +simply a temporary design pattern used to make existing frameworks that do not support yet ContainerInterop +play nice with other DI containers. + + +5. Implementations +------------------ + +The following projects already implement the delegate lookup feature: + +- [Mouf](http://mouf-php.com), through the [`setDelegateLookupContainer` method](https://github.com/thecodingmachine/mouf/blob/2.0/src/Mouf/MoufManager.php#L2120) +- [PHP-DI](http://php-di.org/), through the [`$wrapperContainer` parameter of the constructor](https://github.com/mnapoli/PHP-DI/blob/master/src/DI/Container.php#L72) +- [pimple-interop](https://github.com/moufmouf/pimple-interop), through the [`$container` parameter of the constructor](https://github.com/moufmouf/pimple-interop/blob/master/src/Interop/Container/Pimple/PimpleInterop.php#L62) + +6. People +--------- + +Are listed here all people that contributed in the discussions, by alphabetical order: + +- [Alexandru Pătrănescu](https://github.com/drealecs) +- [Ben Peachey](https://github.com/potherca) +- [David Négrier](https://github.com/moufmouf) +- [Jeremy Lindblom](https://github.com/jeremeamia) +- [Marco Pivetta](https://github.com/Ocramius) +- [Matthieu Napoli](https://github.com/mnapoli) +- [Nelson J Morais](https://github.com/njasm) +- [Phil Sturgeon](https://github.com/philsturgeon) +- [Stephan Hochdörfer](https://github.com/shochdoerfer) + +7. Relevant Links +----------------- + +_**Note:** Order descending chronologically._ + +- [Pull request on the delegate lookup feature](https://github.com/container-interop/container-interop/pull/20) +- [Pull request on the interface idea](https://github.com/container-interop/container-interop/pull/8) +- [Original article exposing the delegate lookup idea along many others](http://mouf-php.com/container-interop-whats-next) + diff --git a/vendor/container-interop/container-interop/docs/Delegate-lookup.md b/vendor/container-interop/container-interop/docs/Delegate-lookup.md new file mode 100644 index 0000000..f64a8f7 --- /dev/null +++ b/vendor/container-interop/container-interop/docs/Delegate-lookup.md @@ -0,0 +1,60 @@ +Delegate lookup feature +======================= + +This document describes a standard for dependency injection containers. + +The goal set by the *delegate lookup* feature is to allow several containers to share entries. +Containers implementing this feature can perform dependency lookups in other containers. + +Containers implementing this feature will offer a greater lever of interoperability +with other containers. Implementation of this feature is therefore RECOMMENDED. + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", +"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be +interpreted as described in [RFC 2119][]. + +The word `implementor` in this document is to be interpreted as someone +implementing the delegate lookup feature in a dependency injection-related library or framework. +Users of dependency injections containers (DIC) are referred to as `user`. + +[RFC 2119]: http://tools.ietf.org/html/rfc2119 + +1. Vocabulary +------------- + +In a dependency injection container, the container is used to fetch entries. +Entries can have dependencies on other entries. Usually, these other entries are fetched by the container. + +The *delegate lookup* feature is the ability for a container to fetch dependencies in +another container. In the rest of the document, the word "container" will reference the container +implemented by the implementor. The word "delegate container" will reference the container we are +fetching the dependencies from. + +2. Specification +---------------- + +A container implementing the *delegate lookup* feature: + +- MUST implement the [`ContainerInterface`](ContainerInterface.md) +- MUST provide a way to register a delegate container (using a constructor parameter, or a setter, + or any possible way). The delegate container MUST implement the [`ContainerInterface`](ContainerInterface.md). + +When a container is configured to use a delegate container for dependencies: + +- Calls to the `get` method should only return an entry if the entry is part of the container. + If the entry is not part of the container, an exception should be thrown + (as requested by the [`ContainerInterface`](ContainerInterface.md)). +- Calls to the `has` method should only return `true` if the entry is part of the container. + If the entry is not part of the container, `false` should be returned. +- If the fetched entry has dependencies, **instead** of performing + the dependency lookup in the container, the lookup is performed on the *delegate container*. + +Important: By default, the dependency lookups SHOULD be performed on the delegate container **only**, not on the container itself. + +It is however allowed for containers to provide exception cases for special entries, and a way to lookup +into the same container (or another container) instead of the delegate container. + +3. Package / Interface +---------------------- + +This feature is not tied to any code, interface or package. diff --git a/vendor/container-interop/container-interop/docs/images/interoperating_containers.png b/vendor/container-interop/container-interop/docs/images/interoperating_containers.png new file mode 100644 index 0000000..1d3fdd0 Binary files /dev/null and b/vendor/container-interop/container-interop/docs/images/interoperating_containers.png differ diff --git a/vendor/container-interop/container-interop/docs/images/priority.png b/vendor/container-interop/container-interop/docs/images/priority.png new file mode 100644 index 0000000..d02cb7d Binary files /dev/null and b/vendor/container-interop/container-interop/docs/images/priority.png differ diff --git a/vendor/container-interop/container-interop/docs/images/side_by_side_containers.png b/vendor/container-interop/container-interop/docs/images/side_by_side_containers.png new file mode 100644 index 0000000..87884bc Binary files /dev/null and b/vendor/container-interop/container-interop/docs/images/side_by_side_containers.png differ diff --git a/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php b/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php new file mode 100644 index 0000000..a75468f --- /dev/null +++ b/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php @@ -0,0 +1,15 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +/** + * Annotations class. + * + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + */ +class Annotation +{ + /** + * Value property. Common among all derived classes. + * + * @var string + */ + public $value; + + /** + * Constructor. + * + * @param array $data Key-value for properties to be defined in this class. + */ + public final function __construct(array $data) + { + foreach ($data as $key => $value) { + $this->$key = $value; + } + } + + /** + * Error handler for unknown property accessor in Annotation class. + * + * @param string $name Unknown property name. + * + * @throws \BadMethodCallException + */ + public function __get($name) + { + throw new \BadMethodCallException( + sprintf("Unknown property '%s' on annotation '%s'.", $name, get_class($this)) + ); + } + + /** + * Error handler for unknown property mutator in Annotation class. + * + * @param string $name Unknown property name. + * @param mixed $value Property value. + * + * @throws \BadMethodCallException + */ + public function __set($name, $value) + { + throw new \BadMethodCallException( + sprintf("Unknown property '%s' on annotation '%s'.", $name, get_class($this)) + ); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php new file mode 100644 index 0000000..dbef6df --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php @@ -0,0 +1,47 @@ +. + */ + +namespace Doctrine\Common\Annotations\Annotation; + +/** + * Annotation that can be used to signal to the parser + * to check the attribute type during the parsing process. + * + * @author Fabio B. Silva + * + * @Annotation + */ +final class Attribute +{ + /** + * @var string + */ + public $name; + + /** + * @var string + */ + public $type; + + /** + * @var boolean + */ + public $required = false; +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php new file mode 100644 index 0000000..53134e3 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php @@ -0,0 +1,37 @@ +. + */ + +namespace Doctrine\Common\Annotations\Annotation; + +/** + * Annotation that can be used to signal to the parser + * to check the types of all declared attributes during the parsing process. + * + * @author Fabio B. Silva + * + * @Annotation + */ +final class Attributes +{ + /** + * @var array + */ + public $value; +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php new file mode 100644 index 0000000..e122a75 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php @@ -0,0 +1,84 @@ +. + */ + +namespace Doctrine\Common\Annotations\Annotation; + +/** + * Annotation that can be used to signal to the parser + * to check the available values during the parsing process. + * + * @since 2.4 + * @author Fabio B. Silva + * + * @Annotation + * @Attributes({ + * @Attribute("value", required = true, type = "array"), + * @Attribute("literal", required = false, type = "array") + * }) + */ +final class Enum +{ + /** + * @var array + */ + public $value; + + /** + * Literal target declaration. + * + * @var array + */ + public $literal; + + /** + * Annotation constructor. + * + * @param array $values + * + * @throws \InvalidArgumentException + */ + public function __construct(array $values) + { + if ( ! isset($values['literal'])) { + $values['literal'] = array(); + } + + foreach ($values['value'] as $var) { + if( ! is_scalar($var)) { + throw new \InvalidArgumentException(sprintf( + '@Enum supports only scalar values "%s" given.', + is_object($var) ? get_class($var) : gettype($var) + )); + } + } + + foreach ($values['literal'] as $key => $var) { + if( ! in_array($key, $values['value'])) { + throw new \InvalidArgumentException(sprintf( + 'Undefined enumerator value "%s" for literal "%s".', + $key , $var + )); + } + } + + $this->value = $values['value']; + $this->literal = $values['literal']; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php new file mode 100644 index 0000000..175226a --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php @@ -0,0 +1,54 @@ +. + */ + +namespace Doctrine\Common\Annotations\Annotation; + +/** + * Annotation that can be used to signal to the parser to ignore specific + * annotations during the parsing process. + * + * @Annotation + * @author Johannes M. Schmitt + */ +final class IgnoreAnnotation +{ + /** + * @var array + */ + public $names; + + /** + * Constructor. + * + * @param array $values + * + * @throws \RuntimeException + */ + public function __construct(array $values) + { + if (is_string($values['value'])) { + $values['value'] = array($values['value']); + } + if (!is_array($values['value'])) { + throw new \RuntimeException(sprintf('@IgnoreAnnotation expects either a string name, or an array of strings, but got %s.', json_encode($values['value']))); + } + + $this->names = $values['value']; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php new file mode 100644 index 0000000..d67f960 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php @@ -0,0 +1,33 @@ +. + */ + +namespace Doctrine\Common\Annotations\Annotation; + +/** + * Annotation that can be used to signal to the parser + * to check if that attribute is required during the parsing process. + * + * @author Fabio B. Silva + * + * @Annotation + */ +final class Required +{ +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php new file mode 100644 index 0000000..f6c5445 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php @@ -0,0 +1,107 @@ +. + */ + +namespace Doctrine\Common\Annotations\Annotation; + +/** + * Annotation that can be used to signal to the parser + * to check the annotation target during the parsing process. + * + * @author Fabio B. Silva + * + * @Annotation + */ +final class Target +{ + const TARGET_CLASS = 1; + const TARGET_METHOD = 2; + const TARGET_PROPERTY = 4; + const TARGET_ANNOTATION = 8; + const TARGET_ALL = 15; + + /** + * @var array + */ + private static $map = array( + 'ALL' => self::TARGET_ALL, + 'CLASS' => self::TARGET_CLASS, + 'METHOD' => self::TARGET_METHOD, + 'PROPERTY' => self::TARGET_PROPERTY, + 'ANNOTATION' => self::TARGET_ANNOTATION, + ); + + /** + * @var array + */ + public $value; + + /** + * Targets as bitmask. + * + * @var integer + */ + public $targets; + + /** + * Literal target declaration. + * + * @var integer + */ + public $literal; + + /** + * Annotation constructor. + * + * @param array $values + * + * @throws \InvalidArgumentException + */ + public function __construct(array $values) + { + if (!isset($values['value'])){ + $values['value'] = null; + } + if (is_string($values['value'])){ + $values['value'] = array($values['value']); + } + if (!is_array($values['value'])){ + throw new \InvalidArgumentException( + sprintf('@Target expects either a string value, or an array of strings, "%s" given.', + is_object($values['value']) ? get_class($values['value']) : gettype($values['value']) + ) + ); + } + + $bitmask = 0; + foreach ($values['value'] as $literal) { + if(!isset(self::$map[$literal])){ + throw new \InvalidArgumentException( + sprintf('Invalid Target "%s". Available targets: [%s]', + $literal, implode(', ', array_keys(self::$map))) + ); + } + $bitmask |= self::$map[$literal]; + } + + $this->targets = $bitmask; + $this->value = $values['value']; + $this->literal = implode(', ', $this->value); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php new file mode 100644 index 0000000..d06fe66 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php @@ -0,0 +1,197 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +/** + * Description of AnnotationException + * + * @since 2.0 + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + */ +class AnnotationException extends \Exception +{ + /** + * Creates a new AnnotationException describing a Syntax error. + * + * @param string $message Exception message + * + * @return AnnotationException + */ + public static function syntaxError($message) + { + return new self('[Syntax Error] ' . $message); + } + + /** + * Creates a new AnnotationException describing a Semantical error. + * + * @param string $message Exception message + * + * @return AnnotationException + */ + public static function semanticalError($message) + { + return new self('[Semantical Error] ' . $message); + } + + /** + * Creates a new AnnotationException describing an error which occurred during + * the creation of the annotation. + * + * @since 2.2 + * + * @param string $message + * + * @return AnnotationException + */ + public static function creationError($message) + { + return new self('[Creation Error] ' . $message); + } + + /** + * Creates a new AnnotationException describing a type error. + * + * @since 1.1 + * + * @param string $message + * + * @return AnnotationException + */ + public static function typeError($message) + { + return new self('[Type Error] ' . $message); + } + + /** + * Creates a new AnnotationException describing a constant semantical error. + * + * @since 2.3 + * + * @param string $identifier + * @param string $context + * + * @return AnnotationException + */ + public static function semanticalErrorConstants($identifier, $context = null) + { + return self::semanticalError(sprintf( + "Couldn't find constant %s%s.", + $identifier, + $context ? ', ' . $context : '' + )); + } + + /** + * Creates a new AnnotationException describing an type error of an attribute. + * + * @since 2.2 + * + * @param string $attributeName + * @param string $annotationName + * @param string $context + * @param string $expected + * @param mixed $actual + * + * @return AnnotationException + */ + public static function attributeTypeError($attributeName, $annotationName, $context, $expected, $actual) + { + return self::typeError(sprintf( + 'Attribute "%s" of @%s declared on %s expects %s, but got %s.', + $attributeName, + $annotationName, + $context, + $expected, + is_object($actual) ? 'an instance of ' . get_class($actual) : gettype($actual) + )); + } + + /** + * Creates a new AnnotationException describing an required error of an attribute. + * + * @since 2.2 + * + * @param string $attributeName + * @param string $annotationName + * @param string $context + * @param string $expected + * + * @return AnnotationException + */ + public static function requiredError($attributeName, $annotationName, $context, $expected) + { + return self::typeError(sprintf( + 'Attribute "%s" of @%s declared on %s expects %s. This value should not be null.', + $attributeName, + $annotationName, + $context, + $expected + )); + } + + /** + * Creates a new AnnotationException describing a invalid enummerator. + * + * @since 2.4 + * + * @param string $attributeName + * @param string $annotationName + * @param string $context + * @param array $available + * @param mixed $given + * + * @return AnnotationException + */ + public static function enumeratorError($attributeName, $annotationName, $context, $available, $given) + { + return new self(sprintf( + '[Enum Error] Attribute "%s" of @%s declared on %s accept only [%s], but got %s.', + $attributeName, + $annotationName, + $context, + implode(', ', $available), + is_object($given) ? get_class($given) : $given + )); + } + + /** + * @return AnnotationException + */ + public static function optimizerPlusSaveComments() + { + return new self( + "You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1." + ); + } + + /** + * @return AnnotationException + */ + public static function optimizerPlusLoadComments() + { + return new self( + "You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1." + ); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php new file mode 100644 index 0000000..0c06049 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php @@ -0,0 +1,425 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +use Doctrine\Common\Annotations\Annotation\IgnoreAnnotation; +use Doctrine\Common\Annotations\Annotation\Target; +use ReflectionClass; +use ReflectionMethod; +use ReflectionProperty; + +/** + * A reader for docblock annotations. + * + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + * @author Johannes M. Schmitt + */ +class AnnotationReader implements Reader +{ + /** + * Global map for imports. + * + * @var array + */ + private static $globalImports = array( + 'ignoreannotation' => 'Doctrine\Common\Annotations\Annotation\IgnoreAnnotation', + ); + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names are case sensitive. + * + * @var array + */ + private static $globalIgnoredNames = array( + // Annotation tags + 'Annotation' => true, 'Attribute' => true, 'Attributes' => true, + /* Can we enable this? 'Enum' => true, */ + 'Required' => true, + 'Target' => true, + // Widely used tags (but not existent in phpdoc) + 'fix' => true , 'fixme' => true, + 'override' => true, + // PHPDocumentor 1 tags + 'abstract'=> true, 'access'=> true, + 'code' => true, + 'deprec'=> true, + 'endcode' => true, 'exception'=> true, + 'final'=> true, + 'ingroup' => true, 'inheritdoc'=> true, 'inheritDoc'=> true, + 'magic' => true, + 'name'=> true, + 'toc' => true, 'tutorial'=> true, + 'private' => true, + 'static'=> true, 'staticvar'=> true, 'staticVar'=> true, + 'throw' => true, + // PHPDocumentor 2 tags. + 'api' => true, 'author'=> true, + 'category'=> true, 'copyright'=> true, + 'deprecated'=> true, + 'example'=> true, + 'filesource'=> true, + 'global'=> true, + 'ignore'=> true, /* Can we enable this? 'index' => true, */ 'internal'=> true, + 'license'=> true, 'link'=> true, + 'method' => true, + 'package'=> true, 'param'=> true, 'property' => true, 'property-read' => true, 'property-write' => true, + 'return'=> true, + 'see'=> true, 'since'=> true, 'source' => true, 'subpackage'=> true, + 'throws'=> true, 'todo'=> true, 'TODO'=> true, + 'usedby'=> true, 'uses' => true, + 'var'=> true, 'version'=> true, + // PHPUnit tags + 'codeCoverageIgnore' => true, 'codeCoverageIgnoreStart' => true, 'codeCoverageIgnoreEnd' => true, + // PHPCheckStyle + 'SuppressWarnings' => true, + // PHPStorm + 'noinspection' => true, + // PEAR + 'package_version' => true, + // PlantUML + 'startuml' => true, 'enduml' => true, + // Symfony 3.3 Cache Adapter + 'experimental' => true + ); + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names are case sensitive. + * + * @var array + */ + private static $globalIgnoredNamespaces = array(); + + /** + * Add a new annotation to the globally ignored annotation names with regard to exception handling. + * + * @param string $name + */ + static public function addGlobalIgnoredName($name) + { + self::$globalIgnoredNames[$name] = true; + } + + /** + * Add a new annotation to the globally ignored annotation namespaces with regard to exception handling. + * + * @param string $namespace + */ + static public function addGlobalIgnoredNamespace($namespace) + { + self::$globalIgnoredNamespaces[$namespace] = true; + } + + /** + * Annotations parser. + * + * @var \Doctrine\Common\Annotations\DocParser + */ + private $parser; + + /** + * Annotations parser used to collect parsing metadata. + * + * @var \Doctrine\Common\Annotations\DocParser + */ + private $preParser; + + /** + * PHP parser used to collect imports. + * + * @var \Doctrine\Common\Annotations\PhpParser + */ + private $phpParser; + + /** + * In-memory cache mechanism to store imported annotations per class. + * + * @var array + */ + private $imports = array(); + + /** + * In-memory cache mechanism to store ignored annotations per class. + * + * @var array + */ + private $ignoredAnnotationNames = array(); + + /** + * Constructor. + * + * Initializes a new AnnotationReader. + * + * @param DocParser $parser + * + * @throws AnnotationException + */ + public function __construct(DocParser $parser = null) + { + if (extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.save_comments') === "0" || ini_get('opcache.save_comments') === "0")) { + throw AnnotationException::optimizerPlusSaveComments(); + } + + if (extension_loaded('Zend OPcache') && ini_get('opcache.save_comments') == 0) { + throw AnnotationException::optimizerPlusSaveComments(); + } + + if (PHP_VERSION_ID < 70000) { + if (extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.load_comments') === "0" || ini_get('opcache.load_comments') === "0")) { + throw AnnotationException::optimizerPlusLoadComments(); + } + + if (extension_loaded('Zend OPcache') && ini_get('opcache.load_comments') == 0) { + throw AnnotationException::optimizerPlusLoadComments(); + } + } + + AnnotationRegistry::registerFile(__DIR__ . '/Annotation/IgnoreAnnotation.php'); + + $this->parser = $parser ?: new DocParser(); + + $this->preParser = new DocParser; + + $this->preParser->setImports(self::$globalImports); + $this->preParser->setIgnoreNotImportedAnnotations(true); + + $this->phpParser = new PhpParser; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $this->parser->setTarget(Target::TARGET_CLASS); + $this->parser->setImports($this->getClassImports($class)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + $annotations = $this->getClassAnnotations($class); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $context = 'property ' . $class->getName() . "::\$" . $property->getName(); + + $this->parser->setTarget(Target::TARGET_PROPERTY); + $this->parser->setImports($this->getPropertyImports($property)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($property->getDocComment(), $context); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + $annotations = $this->getPropertyAnnotations($property); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; + + $this->parser->setTarget(Target::TARGET_METHOD); + $this->parser->setImports($this->getMethodImports($method)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($method->getDocComment(), $context); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + $annotations = $this->getMethodAnnotations($method); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Returns the ignored annotations for the given class. + * + * @param \ReflectionClass $class + * + * @return array + */ + private function getIgnoredAnnotationNames(ReflectionClass $class) + { + $name = $class->getName(); + if (isset($this->ignoredAnnotationNames[$name])) { + return $this->ignoredAnnotationNames[$name]; + } + + $this->collectParsingMetadata($class); + + return $this->ignoredAnnotationNames[$name]; + } + + /** + * Retrieves imports. + * + * @param \ReflectionClass $class + * + * @return array + */ + private function getClassImports(ReflectionClass $class) + { + $name = $class->getName(); + if (isset($this->imports[$name])) { + return $this->imports[$name]; + } + + $this->collectParsingMetadata($class); + + return $this->imports[$name]; + } + + /** + * Retrieves imports for methods. + * + * @param \ReflectionMethod $method + * + * @return array + */ + private function getMethodImports(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $classImports = $this->getClassImports($class); + if (!method_exists($class, 'getTraits')) { + return $classImports; + } + + $traitImports = array(); + + foreach ($class->getTraits() as $trait) { + if ($trait->hasMethod($method->getName()) + && $trait->getFileName() === $method->getFileName() + ) { + $traitImports = array_merge($traitImports, $this->phpParser->parseClass($trait)); + } + } + + return array_merge($classImports, $traitImports); + } + + /** + * Retrieves imports for properties. + * + * @param \ReflectionProperty $property + * + * @return array + */ + private function getPropertyImports(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $classImports = $this->getClassImports($class); + if (!method_exists($class, 'getTraits')) { + return $classImports; + } + + $traitImports = array(); + + foreach ($class->getTraits() as $trait) { + if ($trait->hasProperty($property->getName())) { + $traitImports = array_merge($traitImports, $this->phpParser->parseClass($trait)); + } + } + + return array_merge($classImports, $traitImports); + } + + /** + * Collects parsing metadata for a given class. + * + * @param \ReflectionClass $class + */ + private function collectParsingMetadata(ReflectionClass $class) + { + $ignoredAnnotationNames = self::$globalIgnoredNames; + $annotations = $this->preParser->parse($class->getDocComment(), 'class ' . $class->name); + + foreach ($annotations as $annotation) { + if ($annotation instanceof IgnoreAnnotation) { + foreach ($annotation->names AS $annot) { + $ignoredAnnotationNames[$annot] = true; + } + } + } + + $name = $class->getName(); + + $this->imports[$name] = array_merge( + self::$globalImports, + $this->phpParser->parseClass($class), + array('__NAMESPACE__' => $class->getNamespaceName()) + ); + + $this->ignoredAnnotationNames[$name] = $ignoredAnnotationNames; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php new file mode 100644 index 0000000..13abaf5 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php @@ -0,0 +1,174 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +final class AnnotationRegistry +{ + /** + * A map of namespaces to use for autoloading purposes based on a PSR-0 convention. + * + * Contains the namespace as key and an array of directories as value. If the value is NULL + * the include path is used for checking for the corresponding file. + * + * This autoloading mechanism does not utilize the PHP autoloading but implements autoloading on its own. + * + * @var string[][]|string[]|null[] + */ + static private $autoloadNamespaces = []; + + /** + * A map of autoloader callables. + * + * @var callable[] + */ + static private $loaders = []; + + /** + * An array of classes which cannot be found + * + * @var null[] indexed by class name + */ + static private $failedToAutoload = []; + + public static function reset() : void + { + self::$autoloadNamespaces = []; + self::$loaders = []; + self::$failedToAutoload = []; + } + + /** + * Registers file. + * + * @deprecated this method is deprecated and will be removed in doctrine/annotations 2.0 + * autoloading should be deferred to the globally registered autoloader by then. For now, + * use @example AnnotationRegistry::registerLoader('class_exists') + */ + public static function registerFile(string $file) : void + { + require_once $file; + } + + /** + * Adds a namespace with one or many directories to look for files or null for the include path. + * + * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. + * + * @param string $namespace + * @param string|array|null $dirs + * + * @deprecated this method is deprecated and will be removed in doctrine/annotations 2.0 + * autoloading should be deferred to the globally registered autoloader by then. For now, + * use @example AnnotationRegistry::registerLoader('class_exists') + */ + public static function registerAutoloadNamespace(string $namespace, $dirs = null) : void + { + self::$autoloadNamespaces[$namespace] = $dirs; + } + + /** + * Registers multiple namespaces. + * + * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. + * + * @param string[][]|string[]|null[] $namespaces indexed by namespace name + * + * @deprecated this method is deprecated and will be removed in doctrine/annotations 2.0 + * autoloading should be deferred to the globally registered autoloader by then. For now, + * use @example AnnotationRegistry::registerLoader('class_exists') + */ + public static function registerAutoloadNamespaces(array $namespaces) : void + { + self::$autoloadNamespaces = \array_merge(self::$autoloadNamespaces, $namespaces); + } + + /** + * Registers an autoloading callable for annotations, much like spl_autoload_register(). + * + * NOTE: These class loaders HAVE to be silent when a class was not found! + * IMPORTANT: Loaders have to return true if they loaded a class that could contain the searched annotation class. + * + * @deprecated this method is deprecated and will be removed in doctrine/annotations 2.0 + * autoloading should be deferred to the globally registered autoloader by then. For now, + * use @example AnnotationRegistry::registerLoader('class_exists') + */ + public static function registerLoader(callable $callable) : void + { + // Reset our static cache now that we have a new loader to work with + self::$failedToAutoload = []; + self::$loaders[] = $callable; + } + + /** + * Registers an autoloading callable for annotations, if it is not already registered + * + * @deprecated this method is deprecated and will be removed in doctrine/annotations 2.0 + */ + public static function registerUniqueLoader(callable $callable) : void + { + if ( ! in_array($callable, self::$loaders, true) ) { + self::registerLoader($callable); + } + } + + /** + * Autoloads an annotation class silently. + */ + public static function loadAnnotationClass(string $class) : bool + { + if (\class_exists($class, false)) { + return true; + } + + if (\array_key_exists($class, self::$failedToAutoload)) { + return false; + } + + foreach (self::$autoloadNamespaces AS $namespace => $dirs) { + if (\strpos($class, $namespace) === 0) { + $file = \str_replace('\\', \DIRECTORY_SEPARATOR, $class) . '.php'; + + if ($dirs === null) { + if ($path = stream_resolve_include_path($file)) { + require $path; + return true; + } + } else { + foreach((array) $dirs AS $dir) { + if (is_file($dir . \DIRECTORY_SEPARATOR . $file)) { + require $dir . \DIRECTORY_SEPARATOR . $file; + return true; + } + } + } + } + } + + foreach (self::$loaders AS $loader) { + if ($loader($class) === true) { + return true; + } + } + + self::$failedToAutoload[$class] = null; + + return false; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php new file mode 100644 index 0000000..751c1b1 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php @@ -0,0 +1,262 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +use Doctrine\Common\Cache\Cache; +use ReflectionClass; + +/** + * A cache aware annotation reader. + * + * @author Johannes M. Schmitt + * @author Benjamin Eberlei + */ +final class CachedReader implements Reader +{ + /** + * @var Reader + */ + private $delegate; + + /** + * @var Cache + */ + private $cache; + + /** + * @var boolean + */ + private $debug; + + /** + * @var array + */ + private $loadedAnnotations = array(); + + /** + * Constructor. + * + * @param Reader $reader + * @param Cache $cache + * @param bool $debug + */ + public function __construct(Reader $reader, Cache $cache, $debug = false) + { + $this->delegate = $reader; + $this->cache = $cache; + $this->debug = (boolean) $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $cacheKey = $class->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + if (false === ($annots = $this->fetchFromCache($cacheKey, $class))) { + $annots = $this->delegate->getClassAnnotations($class); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(\ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $cacheKey = $class->getName().'$'.$property->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + if (false === ($annots = $this->fetchFromCache($cacheKey, $class))) { + $annots = $this->delegate->getPropertyAnnotations($property); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(\ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $cacheKey = $class->getName().'#'.$method->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + if (false === ($annots = $this->fetchFromCache($cacheKey, $class))) { + $annots = $this->delegate->getMethodAnnotations($method); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(\ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * Clears loaded annotations. + * + * @return void + */ + public function clearLoadedAnnotations() + { + $this->loadedAnnotations = array(); + } + + /** + * Fetches a value from the cache. + * + * @param string $cacheKey The cache key. + * @param ReflectionClass $class The related class. + * + * @return mixed The cached value or false when the value is not in cache. + */ + private function fetchFromCache($cacheKey, ReflectionClass $class) + { + if (($data = $this->cache->fetch($cacheKey)) !== false) { + if (!$this->debug || $this->isCacheFresh($cacheKey, $class)) { + return $data; + } + } + + return false; + } + + /** + * Saves a value to the cache. + * + * @param string $cacheKey The cache key. + * @param mixed $value The value. + * + * @return void + */ + private function saveToCache($cacheKey, $value) + { + $this->cache->save($cacheKey, $value); + if ($this->debug) { + $this->cache->save('[C]'.$cacheKey, time()); + } + } + + /** + * Checks if the cache is fresh. + * + * @param string $cacheKey + * @param ReflectionClass $class + * + * @return boolean + */ + private function isCacheFresh($cacheKey, ReflectionClass $class) + { + if (null === $lastModification = $this->getLastModification($class)) { + return true; + } + + return $this->cache->fetch('[C]'.$cacheKey) >= $lastModification; + } + + /** + * Returns the time the class was last modified, testing traits and parents + * + * @param ReflectionClass $class + * @return int + */ + private function getLastModification(ReflectionClass $class) + { + $filename = $class->getFileName(); + $parent = $class->getParentClass(); + + return max(array_merge( + [$filename ? filemtime($filename) : 0], + array_map([$this, 'getTraitLastModificationTime'], $class->getTraits()), + array_map([$this, 'getLastModification'], $class->getInterfaces()), + $parent ? [$this->getLastModification($parent)] : [] + )); + } + + /** + * @param ReflectionClass $reflectionTrait + * @return int + */ + private function getTraitLastModificationTime(ReflectionClass $reflectionTrait) + { + $fileName = $reflectionTrait->getFileName(); + + return max(array_merge( + [$fileName ? filemtime($fileName) : 0], + array_map([$this, 'getTraitLastModificationTime'], $reflectionTrait->getTraits()) + )); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php new file mode 100644 index 0000000..d864540 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php @@ -0,0 +1,134 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +use Doctrine\Common\Lexer\AbstractLexer; + +/** + * Simple lexer for docblock annotations. + * + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + * @author Johannes M. Schmitt + */ +final class DocLexer extends AbstractLexer +{ + const T_NONE = 1; + const T_INTEGER = 2; + const T_STRING = 3; + const T_FLOAT = 4; + + // All tokens that are also identifiers should be >= 100 + const T_IDENTIFIER = 100; + const T_AT = 101; + const T_CLOSE_CURLY_BRACES = 102; + const T_CLOSE_PARENTHESIS = 103; + const T_COMMA = 104; + const T_EQUALS = 105; + const T_FALSE = 106; + const T_NAMESPACE_SEPARATOR = 107; + const T_OPEN_CURLY_BRACES = 108; + const T_OPEN_PARENTHESIS = 109; + const T_TRUE = 110; + const T_NULL = 111; + const T_COLON = 112; + + /** + * @var array + */ + protected $noCase = array( + '@' => self::T_AT, + ',' => self::T_COMMA, + '(' => self::T_OPEN_PARENTHESIS, + ')' => self::T_CLOSE_PARENTHESIS, + '{' => self::T_OPEN_CURLY_BRACES, + '}' => self::T_CLOSE_CURLY_BRACES, + '=' => self::T_EQUALS, + ':' => self::T_COLON, + '\\' => self::T_NAMESPACE_SEPARATOR + ); + + /** + * @var array + */ + protected $withCase = array( + 'true' => self::T_TRUE, + 'false' => self::T_FALSE, + 'null' => self::T_NULL + ); + + /** + * {@inheritdoc} + */ + protected function getCatchablePatterns() + { + return array( + '[a-z_\\\][a-z0-9_\:\\\]*[a-z_][a-z0-9_]*', + '(?:[+-]?[0-9]+(?:[\.][0-9]+)*)(?:[eE][+-]?[0-9]+)?', + '"(?:""|[^"])*+"', + ); + } + + /** + * {@inheritdoc} + */ + protected function getNonCatchablePatterns() + { + return array('\s+', '\*+', '(.)'); + } + + /** + * {@inheritdoc} + */ + protected function getType(&$value) + { + $type = self::T_NONE; + + if ($value[0] === '"') { + $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2)); + + return self::T_STRING; + } + + if (isset($this->noCase[$value])) { + return $this->noCase[$value]; + } + + if ($value[0] === '_' || $value[0] === '\\' || ctype_alpha($value[0])) { + return self::T_IDENTIFIER; + } + + $lowerValue = strtolower($value); + + if (isset($this->withCase[$lowerValue])) { + return $this->withCase[$lowerValue]; + } + + // Checking numeric value + if (is_numeric($value)) { + return (strpos($value, '.') !== false || stripos($value, 'e') !== false) + ? self::T_FLOAT : self::T_INTEGER; + } + + return $type; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php new file mode 100644 index 0000000..eb7a457 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php @@ -0,0 +1,1190 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +use Doctrine\Common\Annotations\Annotation\Attribute; +use ReflectionClass; +use Doctrine\Common\Annotations\Annotation\Enum; +use Doctrine\Common\Annotations\Annotation\Target; +use Doctrine\Common\Annotations\Annotation\Attributes; + +/** + * A parser for docblock annotations. + * + * It is strongly discouraged to change the default annotation parsing process. + * + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + * @author Johannes M. Schmitt + * @author Fabio B. Silva + */ +final class DocParser +{ + /** + * An array of all valid tokens for a class name. + * + * @var array + */ + private static $classIdentifiers = array( + DocLexer::T_IDENTIFIER, + DocLexer::T_TRUE, + DocLexer::T_FALSE, + DocLexer::T_NULL + ); + + /** + * The lexer. + * + * @var \Doctrine\Common\Annotations\DocLexer + */ + private $lexer; + + /** + * Current target context. + * + * @var integer + */ + private $target; + + /** + * Doc parser used to collect annotation target. + * + * @var \Doctrine\Common\Annotations\DocParser + */ + private static $metadataParser; + + /** + * Flag to control if the current annotation is nested or not. + * + * @var boolean + */ + private $isNestedAnnotation = false; + + /** + * Hashmap containing all use-statements that are to be used when parsing + * the given doc block. + * + * @var array + */ + private $imports = array(); + + /** + * This hashmap is used internally to cache results of class_exists() + * look-ups. + * + * @var array + */ + private $classExists = array(); + + /** + * Whether annotations that have not been imported should be ignored. + * + * @var boolean + */ + private $ignoreNotImportedAnnotations = false; + + /** + * An array of default namespaces if operating in simple mode. + * + * @var string[] + */ + private $namespaces = array(); + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names must be the raw names as used in the class, not the fully qualified + * class names. + * + * @var bool[] indexed by annotation name + */ + private $ignoredAnnotationNames = array(); + + /** + * A list with annotations in namespaced format + * that are not causing exceptions when not resolved to an annotation class. + * + * @var bool[] indexed by namespace name + */ + private $ignoredAnnotationNamespaces = array(); + + /** + * @var string + */ + private $context = ''; + + /** + * Hash-map for caching annotation metadata. + * + * @var array + */ + private static $annotationMetadata = array( + 'Doctrine\Common\Annotations\Annotation\Target' => array( + 'is_annotation' => true, + 'has_constructor' => true, + 'properties' => array(), + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => 'value', + 'attribute_types' => array( + 'value' => array( + 'required' => false, + 'type' =>'array', + 'array_type'=>'string', + 'value' =>'array' + ) + ), + ), + 'Doctrine\Common\Annotations\Annotation\Attribute' => array( + 'is_annotation' => true, + 'has_constructor' => false, + 'targets_literal' => 'ANNOTATION_ANNOTATION', + 'targets' => Target::TARGET_ANNOTATION, + 'default_property' => 'name', + 'properties' => array( + 'name' => 'name', + 'type' => 'type', + 'required' => 'required' + ), + 'attribute_types' => array( + 'value' => array( + 'required' => true, + 'type' =>'string', + 'value' =>'string' + ), + 'type' => array( + 'required' =>true, + 'type' =>'string', + 'value' =>'string' + ), + 'required' => array( + 'required' =>false, + 'type' =>'boolean', + 'value' =>'boolean' + ) + ), + ), + 'Doctrine\Common\Annotations\Annotation\Attributes' => array( + 'is_annotation' => true, + 'has_constructor' => false, + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => 'value', + 'properties' => array( + 'value' => 'value' + ), + 'attribute_types' => array( + 'value' => array( + 'type' =>'array', + 'required' =>true, + 'array_type'=>'Doctrine\Common\Annotations\Annotation\Attribute', + 'value' =>'array' + ) + ), + ), + 'Doctrine\Common\Annotations\Annotation\Enum' => array( + 'is_annotation' => true, + 'has_constructor' => true, + 'targets_literal' => 'ANNOTATION_PROPERTY', + 'targets' => Target::TARGET_PROPERTY, + 'default_property' => 'value', + 'properties' => array( + 'value' => 'value' + ), + 'attribute_types' => array( + 'value' => array( + 'type' => 'array', + 'required' => true, + ), + 'literal' => array( + 'type' => 'array', + 'required' => false, + ), + ), + ), + ); + + /** + * Hash-map for handle types declaration. + * + * @var array + */ + private static $typeMap = array( + 'float' => 'double', + 'bool' => 'boolean', + // allow uppercase Boolean in honor of George Boole + 'Boolean' => 'boolean', + 'int' => 'integer', + ); + + /** + * Constructs a new DocParser. + */ + public function __construct() + { + $this->lexer = new DocLexer; + } + + /** + * Sets the annotation names that are ignored during the parsing process. + * + * The names are supposed to be the raw names as used in the class, not the + * fully qualified class names. + * + * @param bool[] $names indexed by annotation name + * + * @return void + */ + public function setIgnoredAnnotationNames(array $names) + { + $this->ignoredAnnotationNames = $names; + } + + /** + * Sets the annotation namespaces that are ignored during the parsing process. + * + * @param bool[] $ignoredAnnotationNamespaces indexed by annotation namespace name + * + * @return void + */ + public function setIgnoredAnnotationNamespaces($ignoredAnnotationNamespaces) + { + $this->ignoredAnnotationNamespaces = $ignoredAnnotationNamespaces; + } + + /** + * Sets ignore on not-imported annotations. + * + * @param boolean $bool + * + * @return void + */ + public function setIgnoreNotImportedAnnotations($bool) + { + $this->ignoreNotImportedAnnotations = (boolean) $bool; + } + + /** + * Sets the default namespaces. + * + * @param string $namespace + * + * @return void + * + * @throws \RuntimeException + */ + public function addNamespace($namespace) + { + if ($this->imports) { + throw new \RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); + } + + $this->namespaces[] = $namespace; + } + + /** + * Sets the imports. + * + * @param array $imports + * + * @return void + * + * @throws \RuntimeException + */ + public function setImports(array $imports) + { + if ($this->namespaces) { + throw new \RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); + } + + $this->imports = $imports; + } + + /** + * Sets current target context as bitmask. + * + * @param integer $target + * + * @return void + */ + public function setTarget($target) + { + $this->target = $target; + } + + /** + * Parses the given docblock string for annotations. + * + * @param string $input The docblock string to parse. + * @param string $context The parsing context. + * + * @return array Array of annotations. If no annotations are found, an empty array is returned. + */ + public function parse($input, $context = '') + { + $pos = $this->findInitialTokenPosition($input); + if ($pos === null) { + return array(); + } + + $this->context = $context; + + $this->lexer->setInput(trim(substr($input, $pos), '* /')); + $this->lexer->moveNext(); + + return $this->Annotations(); + } + + /** + * Finds the first valid annotation + * + * @param string $input The docblock string to parse + * + * @return int|null + */ + private function findInitialTokenPosition($input) + { + $pos = 0; + + // search for first valid annotation + while (($pos = strpos($input, '@', $pos)) !== false) { + $preceding = substr($input, $pos - 1, 1); + + // if the @ is preceded by a space, a tab or * it is valid + if ($pos === 0 || $preceding === ' ' || $preceding === '*' || $preceding === "\t") { + return $pos; + } + + $pos++; + } + + return null; + } + + /** + * Attempts to match the given token with the current lookahead token. + * If they match, updates the lookahead token; otherwise raises a syntax error. + * + * @param integer $token Type of token. + * + * @return boolean True if tokens match; false otherwise. + */ + private function match($token) + { + if ( ! $this->lexer->isNextToken($token) ) { + $this->syntaxError($this->lexer->getLiteral($token)); + } + + return $this->lexer->moveNext(); + } + + /** + * Attempts to match the current lookahead token with any of the given tokens. + * + * If any of them matches, this method updates the lookahead token; otherwise + * a syntax error is raised. + * + * @param array $tokens + * + * @return boolean + */ + private function matchAny(array $tokens) + { + if ( ! $this->lexer->isNextTokenAny($tokens)) { + $this->syntaxError(implode(' or ', array_map(array($this->lexer, 'getLiteral'), $tokens))); + } + + return $this->lexer->moveNext(); + } + + /** + * Generates a new syntax error. + * + * @param string $expected Expected string. + * @param array|null $token Optional token. + * + * @return void + * + * @throws AnnotationException + */ + private function syntaxError($expected, $token = null) + { + if ($token === null) { + $token = $this->lexer->lookahead; + } + + $message = sprintf('Expected %s, got ', $expected); + $message .= ($this->lexer->lookahead === null) + ? 'end of string' + : sprintf("'%s' at position %s", $token['value'], $token['position']); + + if (strlen($this->context)) { + $message .= ' in ' . $this->context; + } + + $message .= '.'; + + throw AnnotationException::syntaxError($message); + } + + /** + * Attempts to check if a class exists or not. This never goes through the PHP autoloading mechanism + * but uses the {@link AnnotationRegistry} to load classes. + * + * @param string $fqcn + * + * @return boolean + */ + private function classExists($fqcn) + { + if (isset($this->classExists[$fqcn])) { + return $this->classExists[$fqcn]; + } + + // first check if the class already exists, maybe loaded through another AnnotationReader + if (class_exists($fqcn, false)) { + return $this->classExists[$fqcn] = true; + } + + // final check, does this class exist? + return $this->classExists[$fqcn] = AnnotationRegistry::loadAnnotationClass($fqcn); + } + + /** + * Collects parsing metadata for a given annotation class + * + * @param string $name The annotation name + * + * @return void + */ + private function collectAnnotationMetadata($name) + { + if (self::$metadataParser === null) { + self::$metadataParser = new self(); + + self::$metadataParser->setIgnoreNotImportedAnnotations(true); + self::$metadataParser->setIgnoredAnnotationNames($this->ignoredAnnotationNames); + self::$metadataParser->setImports(array( + 'enum' => 'Doctrine\Common\Annotations\Annotation\Enum', + 'target' => 'Doctrine\Common\Annotations\Annotation\Target', + 'attribute' => 'Doctrine\Common\Annotations\Annotation\Attribute', + 'attributes' => 'Doctrine\Common\Annotations\Annotation\Attributes' + )); + + AnnotationRegistry::registerFile(__DIR__ . '/Annotation/Enum.php'); + AnnotationRegistry::registerFile(__DIR__ . '/Annotation/Target.php'); + AnnotationRegistry::registerFile(__DIR__ . '/Annotation/Attribute.php'); + AnnotationRegistry::registerFile(__DIR__ . '/Annotation/Attributes.php'); + } + + $class = new \ReflectionClass($name); + $docComment = $class->getDocComment(); + + // Sets default values for annotation metadata + $metadata = array( + 'default_property' => null, + 'has_constructor' => (null !== $constructor = $class->getConstructor()) && $constructor->getNumberOfParameters() > 0, + 'properties' => array(), + 'property_types' => array(), + 'attribute_types' => array(), + 'targets_literal' => null, + 'targets' => Target::TARGET_ALL, + 'is_annotation' => false !== strpos($docComment, '@Annotation'), + ); + + // verify that the class is really meant to be an annotation + if ($metadata['is_annotation']) { + self::$metadataParser->setTarget(Target::TARGET_CLASS); + + foreach (self::$metadataParser->parse($docComment, 'class @' . $name) as $annotation) { + if ($annotation instanceof Target) { + $metadata['targets'] = $annotation->targets; + $metadata['targets_literal'] = $annotation->literal; + + continue; + } + + if ($annotation instanceof Attributes) { + foreach ($annotation->value as $attribute) { + $this->collectAttributeTypeMetadata($metadata, $attribute); + } + } + } + + // if not has a constructor will inject values into public properties + if (false === $metadata['has_constructor']) { + // collect all public properties + foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) { + $metadata['properties'][$property->name] = $property->name; + + if (false === ($propertyComment = $property->getDocComment())) { + continue; + } + + $attribute = new Attribute(); + + $attribute->required = (false !== strpos($propertyComment, '@Required')); + $attribute->name = $property->name; + $attribute->type = (false !== strpos($propertyComment, '@var') && preg_match('/@var\s+([^\s]+)/',$propertyComment, $matches)) + ? $matches[1] + : 'mixed'; + + $this->collectAttributeTypeMetadata($metadata, $attribute); + + // checks if the property has @Enum + if (false !== strpos($propertyComment, '@Enum')) { + $context = 'property ' . $class->name . "::\$" . $property->name; + + self::$metadataParser->setTarget(Target::TARGET_PROPERTY); + + foreach (self::$metadataParser->parse($propertyComment, $context) as $annotation) { + if ( ! $annotation instanceof Enum) { + continue; + } + + $metadata['enum'][$property->name]['value'] = $annotation->value; + $metadata['enum'][$property->name]['literal'] = ( ! empty($annotation->literal)) + ? $annotation->literal + : $annotation->value; + } + } + } + + // choose the first property as default property + $metadata['default_property'] = reset($metadata['properties']); + } + } + + self::$annotationMetadata[$name] = $metadata; + } + + /** + * Collects parsing metadata for a given attribute. + * + * @param array $metadata + * @param Attribute $attribute + * + * @return void + */ + private function collectAttributeTypeMetadata(&$metadata, Attribute $attribute) + { + // handle internal type declaration + $type = isset(self::$typeMap[$attribute->type]) + ? self::$typeMap[$attribute->type] + : $attribute->type; + + // handle the case if the property type is mixed + if ('mixed' === $type) { + return; + } + + // Evaluate type + switch (true) { + // Checks if the property has array + case (false !== $pos = strpos($type, '<')): + $arrayType = substr($type, $pos + 1, -1); + $type = 'array'; + + if (isset(self::$typeMap[$arrayType])) { + $arrayType = self::$typeMap[$arrayType]; + } + + $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; + break; + + // Checks if the property has type[] + case (false !== $pos = strrpos($type, '[')): + $arrayType = substr($type, 0, $pos); + $type = 'array'; + + if (isset(self::$typeMap[$arrayType])) { + $arrayType = self::$typeMap[$arrayType]; + } + + $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; + break; + } + + $metadata['attribute_types'][$attribute->name]['type'] = $type; + $metadata['attribute_types'][$attribute->name]['value'] = $attribute->type; + $metadata['attribute_types'][$attribute->name]['required'] = $attribute->required; + } + + /** + * Annotations ::= Annotation {[ "*" ]* [Annotation]}* + * + * @return array + */ + private function Annotations() + { + $annotations = array(); + + while (null !== $this->lexer->lookahead) { + if (DocLexer::T_AT !== $this->lexer->lookahead['type']) { + $this->lexer->moveNext(); + continue; + } + + // make sure the @ is preceded by non-catchable pattern + if (null !== $this->lexer->token && $this->lexer->lookahead['position'] === $this->lexer->token['position'] + strlen($this->lexer->token['value'])) { + $this->lexer->moveNext(); + continue; + } + + // make sure the @ is followed by either a namespace separator, or + // an identifier token + if ((null === $peek = $this->lexer->glimpse()) + || (DocLexer::T_NAMESPACE_SEPARATOR !== $peek['type'] && !in_array($peek['type'], self::$classIdentifiers, true)) + || $peek['position'] !== $this->lexer->lookahead['position'] + 1) { + $this->lexer->moveNext(); + continue; + } + + $this->isNestedAnnotation = false; + if (false !== $annot = $this->Annotation()) { + $annotations[] = $annot; + } + } + + return $annotations; + } + + /** + * Annotation ::= "@" AnnotationName MethodCall + * AnnotationName ::= QualifiedName | SimpleName + * QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName + * NameSpacePart ::= identifier | null | false | true + * SimpleName ::= identifier | null | false | true + * + * @return mixed False if it is not a valid annotation. + * + * @throws AnnotationException + */ + private function Annotation() + { + $this->match(DocLexer::T_AT); + + // check if we have an annotation + $name = $this->Identifier(); + + // only process names which are not fully qualified, yet + // fully qualified names must start with a \ + $originalName = $name; + + if ('\\' !== $name[0]) { + $pos = strpos($name, '\\'); + $alias = (false === $pos)? $name : substr($name, 0, $pos); + $found = false; + $loweredAlias = strtolower($alias); + + if ($this->namespaces) { + foreach ($this->namespaces as $namespace) { + if ($this->classExists($namespace.'\\'.$name)) { + $name = $namespace.'\\'.$name; + $found = true; + break; + } + } + } elseif (isset($this->imports[$loweredAlias])) { + $found = true; + $name = (false !== $pos) + ? $this->imports[$loweredAlias] . substr($name, $pos) + : $this->imports[$loweredAlias]; + } elseif ( ! isset($this->ignoredAnnotationNames[$name]) + && isset($this->imports['__NAMESPACE__']) + && $this->classExists($this->imports['__NAMESPACE__'] . '\\' . $name) + ) { + $name = $this->imports['__NAMESPACE__'].'\\'.$name; + $found = true; + } elseif (! isset($this->ignoredAnnotationNames[$name]) && $this->classExists($name)) { + $found = true; + } + + if ( ! $found) { + if ($this->isIgnoredAnnotation($name)) { + return false; + } + + throw AnnotationException::semanticalError(sprintf('The annotation "@%s" in %s was never imported. Did you maybe forget to add a "use" statement for this annotation?', $name, $this->context)); + } + } + + $name = ltrim($name,'\\'); + + if ( ! $this->classExists($name)) { + throw AnnotationException::semanticalError(sprintf('The annotation "@%s" in %s does not exist, or could not be auto-loaded.', $name, $this->context)); + } + + // at this point, $name contains the fully qualified class name of the + // annotation, and it is also guaranteed that this class exists, and + // that it is loaded + + + // collects the metadata annotation only if there is not yet + if ( ! isset(self::$annotationMetadata[$name])) { + $this->collectAnnotationMetadata($name); + } + + // verify that the class is really meant to be an annotation and not just any ordinary class + if (self::$annotationMetadata[$name]['is_annotation'] === false) { + if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$originalName])) { + return false; + } + + throw AnnotationException::semanticalError(sprintf('The class "%s" is not annotated with @Annotation. Are you sure this class can be used as annotation? If so, then you need to add @Annotation to the _class_ doc comment of "%s". If it is indeed no annotation, then you need to add @IgnoreAnnotation("%s") to the _class_ doc comment of %s.', $name, $name, $originalName, $this->context)); + } + + //if target is nested annotation + $target = $this->isNestedAnnotation ? Target::TARGET_ANNOTATION : $this->target; + + // Next will be nested + $this->isNestedAnnotation = true; + + //if annotation does not support current target + if (0 === (self::$annotationMetadata[$name]['targets'] & $target) && $target) { + throw AnnotationException::semanticalError( + sprintf('Annotation @%s is not allowed to be declared on %s. You may only use this annotation on these code elements: %s.', + $originalName, $this->context, self::$annotationMetadata[$name]['targets_literal']) + ); + } + + $values = $this->MethodCall(); + + if (isset(self::$annotationMetadata[$name]['enum'])) { + // checks all declared attributes + foreach (self::$annotationMetadata[$name]['enum'] as $property => $enum) { + // checks if the attribute is a valid enumerator + if (isset($values[$property]) && ! in_array($values[$property], $enum['value'])) { + throw AnnotationException::enumeratorError($property, $name, $this->context, $enum['literal'], $values[$property]); + } + } + } + + // checks all declared attributes + foreach (self::$annotationMetadata[$name]['attribute_types'] as $property => $type) { + if ($property === self::$annotationMetadata[$name]['default_property'] + && !isset($values[$property]) && isset($values['value'])) { + $property = 'value'; + } + + // handle a not given attribute or null value + if (!isset($values[$property])) { + if ($type['required']) { + throw AnnotationException::requiredError($property, $originalName, $this->context, 'a(n) '.$type['value']); + } + + continue; + } + + if ($type['type'] === 'array') { + // handle the case of a single value + if ( ! is_array($values[$property])) { + $values[$property] = array($values[$property]); + } + + // checks if the attribute has array type declaration, such as "array" + if (isset($type['array_type'])) { + foreach ($values[$property] as $item) { + if (gettype($item) !== $type['array_type'] && !$item instanceof $type['array_type']) { + throw AnnotationException::attributeTypeError($property, $originalName, $this->context, 'either a(n) '.$type['array_type'].', or an array of '.$type['array_type'].'s', $item); + } + } + } + } elseif (gettype($values[$property]) !== $type['type'] && !$values[$property] instanceof $type['type']) { + throw AnnotationException::attributeTypeError($property, $originalName, $this->context, 'a(n) '.$type['value'], $values[$property]); + } + } + + // check if the annotation expects values via the constructor, + // or directly injected into public properties + if (self::$annotationMetadata[$name]['has_constructor'] === true) { + return new $name($values); + } + + $instance = new $name(); + + foreach ($values as $property => $value) { + if (!isset(self::$annotationMetadata[$name]['properties'][$property])) { + if ('value' !== $property) { + throw AnnotationException::creationError(sprintf('The annotation @%s declared on %s does not have a property named "%s". Available properties: %s', $originalName, $this->context, $property, implode(', ', self::$annotationMetadata[$name]['properties']))); + } + + // handle the case if the property has no annotations + if ( ! $property = self::$annotationMetadata[$name]['default_property']) { + throw AnnotationException::creationError(sprintf('The annotation @%s declared on %s does not accept any values, but got %s.', $originalName, $this->context, json_encode($values))); + } + } + + $instance->{$property} = $value; + } + + return $instance; + } + + /** + * MethodCall ::= ["(" [Values] ")"] + * + * @return array + */ + private function MethodCall() + { + $values = array(); + + if ( ! $this->lexer->isNextToken(DocLexer::T_OPEN_PARENTHESIS)) { + return $values; + } + + $this->match(DocLexer::T_OPEN_PARENTHESIS); + + if ( ! $this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { + $values = $this->Values(); + } + + $this->match(DocLexer::T_CLOSE_PARENTHESIS); + + return $values; + } + + /** + * Values ::= Array | Value {"," Value}* [","] + * + * @return array + */ + private function Values() + { + $values = array($this->Value()); + + while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { + $this->match(DocLexer::T_COMMA); + + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { + break; + } + + $token = $this->lexer->lookahead; + $value = $this->Value(); + + if ( ! is_object($value) && ! is_array($value)) { + $this->syntaxError('Value', $token); + } + + $values[] = $value; + } + + foreach ($values as $k => $value) { + if (is_object($value) && $value instanceof \stdClass) { + $values[$value->name] = $value->value; + } else if ( ! isset($values['value'])){ + $values['value'] = $value; + } else { + if ( ! is_array($values['value'])) { + $values['value'] = array($values['value']); + } + + $values['value'][] = $value; + } + + unset($values[$k]); + } + + return $values; + } + + /** + * Constant ::= integer | string | float | boolean + * + * @return mixed + * + * @throws AnnotationException + */ + private function Constant() + { + $identifier = $this->Identifier(); + + if ( ! defined($identifier) && false !== strpos($identifier, '::') && '\\' !== $identifier[0]) { + list($className, $const) = explode('::', $identifier); + + $pos = strpos($className, '\\'); + $alias = (false === $pos) ? $className : substr($className, 0, $pos); + $found = false; + $loweredAlias = strtolower($alias); + + switch (true) { + case !empty ($this->namespaces): + foreach ($this->namespaces as $ns) { + if (class_exists($ns.'\\'.$className) || interface_exists($ns.'\\'.$className)) { + $className = $ns.'\\'.$className; + $found = true; + break; + } + } + break; + + case isset($this->imports[$loweredAlias]): + $found = true; + $className = (false !== $pos) + ? $this->imports[$loweredAlias] . substr($className, $pos) + : $this->imports[$loweredAlias]; + break; + + default: + if(isset($this->imports['__NAMESPACE__'])) { + $ns = $this->imports['__NAMESPACE__']; + + if (class_exists($ns.'\\'.$className) || interface_exists($ns.'\\'.$className)) { + $className = $ns.'\\'.$className; + $found = true; + } + } + break; + } + + if ($found) { + $identifier = $className . '::' . $const; + } + } + + // checks if identifier ends with ::class, \strlen('::class') === 7 + $classPos = stripos($identifier, '::class'); + if ($classPos === strlen($identifier) - 7) { + return substr($identifier, 0, $classPos); + } + + if (!defined($identifier)) { + throw AnnotationException::semanticalErrorConstants($identifier, $this->context); + } + + return constant($identifier); + } + + /** + * Identifier ::= string + * + * @return string + */ + private function Identifier() + { + // check if we have an annotation + if ( ! $this->lexer->isNextTokenAny(self::$classIdentifiers)) { + $this->syntaxError('namespace separator or identifier'); + } + + $this->lexer->moveNext(); + + $className = $this->lexer->token['value']; + + while ($this->lexer->lookahead['position'] === ($this->lexer->token['position'] + strlen($this->lexer->token['value'])) + && $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR)) { + + $this->match(DocLexer::T_NAMESPACE_SEPARATOR); + $this->matchAny(self::$classIdentifiers); + + $className .= '\\' . $this->lexer->token['value']; + } + + return $className; + } + + /** + * Value ::= PlainValue | FieldAssignment + * + * @return mixed + */ + private function Value() + { + $peek = $this->lexer->glimpse(); + + if (DocLexer::T_EQUALS === $peek['type']) { + return $this->FieldAssignment(); + } + + return $this->PlainValue(); + } + + /** + * PlainValue ::= integer | string | float | boolean | Array | Annotation + * + * @return mixed + */ + private function PlainValue() + { + if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) { + return $this->Arrayx(); + } + + if ($this->lexer->isNextToken(DocLexer::T_AT)) { + return $this->Annotation(); + } + + if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { + return $this->Constant(); + } + + switch ($this->lexer->lookahead['type']) { + case DocLexer::T_STRING: + $this->match(DocLexer::T_STRING); + return $this->lexer->token['value']; + + case DocLexer::T_INTEGER: + $this->match(DocLexer::T_INTEGER); + return (int)$this->lexer->token['value']; + + case DocLexer::T_FLOAT: + $this->match(DocLexer::T_FLOAT); + return (float)$this->lexer->token['value']; + + case DocLexer::T_TRUE: + $this->match(DocLexer::T_TRUE); + return true; + + case DocLexer::T_FALSE: + $this->match(DocLexer::T_FALSE); + return false; + + case DocLexer::T_NULL: + $this->match(DocLexer::T_NULL); + return null; + + default: + $this->syntaxError('PlainValue'); + } + } + + /** + * FieldAssignment ::= FieldName "=" PlainValue + * FieldName ::= identifier + * + * @return \stdClass + */ + private function FieldAssignment() + { + $this->match(DocLexer::T_IDENTIFIER); + $fieldName = $this->lexer->token['value']; + + $this->match(DocLexer::T_EQUALS); + + $item = new \stdClass(); + $item->name = $fieldName; + $item->value = $this->PlainValue(); + + return $item; + } + + /** + * Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}" + * + * @return array + */ + private function Arrayx() + { + $array = $values = array(); + + $this->match(DocLexer::T_OPEN_CURLY_BRACES); + + // If the array is empty, stop parsing and return. + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { + $this->match(DocLexer::T_CLOSE_CURLY_BRACES); + + return $array; + } + + $values[] = $this->ArrayEntry(); + + while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { + $this->match(DocLexer::T_COMMA); + + // optional trailing comma + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { + break; + } + + $values[] = $this->ArrayEntry(); + } + + $this->match(DocLexer::T_CLOSE_CURLY_BRACES); + + foreach ($values as $value) { + list ($key, $val) = $value; + + if ($key !== null) { + $array[$key] = $val; + } else { + $array[] = $val; + } + } + + return $array; + } + + /** + * ArrayEntry ::= Value | KeyValuePair + * KeyValuePair ::= Key ("=" | ":") PlainValue | Constant + * Key ::= string | integer | Constant + * + * @return array + */ + private function ArrayEntry() + { + $peek = $this->lexer->glimpse(); + + if (DocLexer::T_EQUALS === $peek['type'] + || DocLexer::T_COLON === $peek['type']) { + + if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { + $key = $this->Constant(); + } else { + $this->matchAny(array(DocLexer::T_INTEGER, DocLexer::T_STRING)); + $key = $this->lexer->token['value']; + } + + $this->matchAny(array(DocLexer::T_EQUALS, DocLexer::T_COLON)); + + return array($key, $this->PlainValue()); + } + + return array(null, $this->Value()); + } + + /** + * Checks whether the given $name matches any ignored annotation name or namespace + * + * @param string $name + * + * @return bool + */ + private function isIgnoredAnnotation($name) + { + if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$name])) { + return true; + } + + foreach (array_keys($this->ignoredAnnotationNamespaces) as $ignoredAnnotationNamespace) { + $ignoredAnnotationNamespace = rtrim($ignoredAnnotationNamespace, '\\') . '\\'; + + if (0 === stripos(rtrim($name, '\\') . '\\', $ignoredAnnotationNamespace)) { + return true; + } + } + + return false; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php new file mode 100644 index 0000000..fd2fede --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php @@ -0,0 +1,290 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +/** + * File cache reader for annotations. + * + * @author Johannes M. Schmitt + * @author Benjamin Eberlei + * + * @deprecated the FileCacheReader is deprecated and will be removed + * in version 2.0.0 of doctrine/annotations. Please use the + * {@see \Doctrine\Common\Annotations\CachedReader} instead. + */ +class FileCacheReader implements Reader +{ + /** + * @var Reader + */ + private $reader; + + /** + * @var string + */ + private $dir; + + /** + * @var bool + */ + private $debug; + + /** + * @var array + */ + private $loadedAnnotations = array(); + + /** + * @var array + */ + private $classNameHashes = array(); + + /** + * @var int + */ + private $umask; + + /** + * Constructor. + * + * @param Reader $reader + * @param string $cacheDir + * @param boolean $debug + * + * @throws \InvalidArgumentException + */ + public function __construct(Reader $reader, $cacheDir, $debug = false, $umask = 0002) + { + if ( ! is_int($umask)) { + throw new \InvalidArgumentException(sprintf( + 'The parameter umask must be an integer, was: %s', + gettype($umask) + )); + } + + $this->reader = $reader; + $this->umask = $umask; + + if (!is_dir($cacheDir) && !@mkdir($cacheDir, 0777 & (~$this->umask), true)) { + throw new \InvalidArgumentException(sprintf('The directory "%s" does not exist and could not be created.', $cacheDir)); + } + + $this->dir = rtrim($cacheDir, '\\/'); + $this->debug = $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(\ReflectionClass $class) + { + if ( ! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + $key = $this->classNameHashes[$class->name]; + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir.'/'.strtr($key, '\\', '-').'.cache.php'; + if (!is_file($path)) { + $annot = $this->reader->getClassAnnotations($class); + $this->saveCacheFile($path, $annot); + return $this->loadedAnnotations[$key] = $annot; + } + + if ($this->debug + && (false !== $filename = $class->getFileName()) + && filemtime($path) < filemtime($filename)) { + @unlink($path); + + $annot = $this->reader->getClassAnnotations($class); + $this->saveCacheFile($path, $annot); + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(\ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + if ( ! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + $key = $this->classNameHashes[$class->name].'$'.$property->getName(); + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir.'/'.strtr($key, '\\', '-').'.cache.php'; + if (!is_file($path)) { + $annot = $this->reader->getPropertyAnnotations($property); + $this->saveCacheFile($path, $annot); + return $this->loadedAnnotations[$key] = $annot; + } + + if ($this->debug + && (false !== $filename = $class->getFilename()) + && filemtime($path) < filemtime($filename)) { + @unlink($path); + + $annot = $this->reader->getPropertyAnnotations($property); + $this->saveCacheFile($path, $annot); + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(\ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + if ( ! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + $key = $this->classNameHashes[$class->name].'#'.$method->getName(); + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir.'/'.strtr($key, '\\', '-').'.cache.php'; + if (!is_file($path)) { + $annot = $this->reader->getMethodAnnotations($method); + $this->saveCacheFile($path, $annot); + return $this->loadedAnnotations[$key] = $annot; + } + + if ($this->debug + && (false !== $filename = $class->getFilename()) + && filemtime($path) < filemtime($filename)) { + @unlink($path); + + $annot = $this->reader->getMethodAnnotations($method); + $this->saveCacheFile($path, $annot); + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * Saves the cache file. + * + * @param string $path + * @param mixed $data + * + * @return void + */ + private function saveCacheFile($path, $data) + { + if (!is_writable($this->dir)) { + throw new \InvalidArgumentException(sprintf('The directory "%s" is not writable. Both, the webserver and the console user need access. You can manage access rights for multiple users with "chmod +a". If your system does not support this, check out the acl package.', $this->dir)); + } + + $tempfile = tempnam($this->dir, uniqid('', true)); + + if (false === $tempfile) { + throw new \RuntimeException(sprintf('Unable to create tempfile in directory: %s', $this->dir)); + } + + @chmod($tempfile, 0666 & (~$this->umask)); + + $written = file_put_contents($tempfile, 'umask)); + + if (false === rename($tempfile, $path)) { + @unlink($tempfile); + throw new \RuntimeException(sprintf('Unable to rename %s to %s', $tempfile, $path)); + } + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(\ReflectionClass $class, $annotationName) + { + $annotations = $this->getClassAnnotations($class); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(\ReflectionMethod $method, $annotationName) + { + $annotations = $this->getMethodAnnotations($method); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName) + { + $annotations = $this->getPropertyAnnotations($property); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Clears loaded annotations. + * + * @return void + */ + public function clearLoadedAnnotations() + { + $this->loadedAnnotations = array(); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php new file mode 100644 index 0000000..bf7fbdc --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php @@ -0,0 +1,119 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +/** + * Allows the reader to be used in-place of Doctrine's reader. + * + * @author Johannes M. Schmitt + */ +class IndexedReader implements Reader +{ + /** + * @var Reader + */ + private $delegate; + + /** + * Constructor. + * + * @param Reader $reader + */ + public function __construct(Reader $reader) + { + $this->delegate = $reader; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(\ReflectionClass $class) + { + $annotations = array(); + foreach ($this->delegate->getClassAnnotations($class) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(\ReflectionClass $class, $annotation) + { + return $this->delegate->getClassAnnotation($class, $annotation); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(\ReflectionMethod $method) + { + $annotations = array(); + foreach ($this->delegate->getMethodAnnotations($method) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(\ReflectionMethod $method, $annotation) + { + return $this->delegate->getMethodAnnotation($method, $annotation); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(\ReflectionProperty $property) + { + $annotations = array(); + foreach ($this->delegate->getPropertyAnnotations($property) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(\ReflectionProperty $property, $annotation) + { + return $this->delegate->getPropertyAnnotation($property, $annotation); + } + + /** + * Proxies all methods to the delegate. + * + * @param string $method + * @param array $args + * + * @return mixed + */ + public function __call($method, $args) + { + return call_user_func_array(array($this->delegate, $method), $args); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php new file mode 100644 index 0000000..c2d4770 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php @@ -0,0 +1,91 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +use SplFileObject; + +/** + * Parses a file for namespaces/use/class declarations. + * + * @author Fabien Potencier + * @author Christian Kaps + */ +final class PhpParser +{ + /** + * Parses a class. + * + * @param \ReflectionClass $class A ReflectionClass object. + * + * @return array A list with use statements in the form (Alias => FQN). + */ + public function parseClass(\ReflectionClass $class) + { + if (method_exists($class, 'getUseStatements')) { + return $class->getUseStatements(); + } + + if (false === $filename = $class->getFileName()) { + return array(); + } + + $content = $this->getFileContent($filename, $class->getStartLine()); + + if (null === $content) { + return array(); + } + + $namespace = preg_quote($class->getNamespaceName()); + $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content); + $tokenizer = new TokenParser('parseUseStatements($class->getNamespaceName()); + + return $statements; + } + + /** + * Gets the content of the file right up to the given line number. + * + * @param string $filename The name of the file to load. + * @param integer $lineNumber The number of lines to read from file. + * + * @return string|null The content of the file or null if the file does not exist. + */ + private function getFileContent($filename, $lineNumber) + { + if ( ! is_file($filename)) { + return null; + } + + $content = ''; + $lineCnt = 0; + $file = new SplFileObject($filename); + while (!$file->eof()) { + if ($lineCnt++ == $lineNumber) { + break; + } + + $content .= $file->fgets(); + } + + return $content; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php new file mode 100644 index 0000000..4774f87 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php @@ -0,0 +1,89 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +/** + * Interface for annotation readers. + * + * @author Johannes M. Schmitt + */ +interface Reader +{ + /** + * Gets the annotations applied to a class. + * + * @param \ReflectionClass $class The ReflectionClass of the class from which + * the class annotations should be read. + * + * @return array An array of Annotations. + */ + function getClassAnnotations(\ReflectionClass $class); + + /** + * Gets a class annotation. + * + * @param \ReflectionClass $class The ReflectionClass of the class from which + * the class annotations should be read. + * @param string $annotationName The name of the annotation. + * + * @return object|null The Annotation or NULL, if the requested annotation does not exist. + */ + function getClassAnnotation(\ReflectionClass $class, $annotationName); + + /** + * Gets the annotations applied to a method. + * + * @param \ReflectionMethod $method The ReflectionMethod of the method from which + * the annotations should be read. + * + * @return array An array of Annotations. + */ + function getMethodAnnotations(\ReflectionMethod $method); + + /** + * Gets a method annotation. + * + * @param \ReflectionMethod $method The ReflectionMethod to read the annotations from. + * @param string $annotationName The name of the annotation. + * + * @return object|null The Annotation or NULL, if the requested annotation does not exist. + */ + function getMethodAnnotation(\ReflectionMethod $method, $annotationName); + + /** + * Gets the annotations applied to a property. + * + * @param \ReflectionProperty $property The ReflectionProperty of the property + * from which the annotations should be read. + * + * @return array An array of Annotations. + */ + function getPropertyAnnotations(\ReflectionProperty $property); + + /** + * Gets a property annotation. + * + * @param \ReflectionProperty $property The ReflectionProperty to read the annotations from. + * @param string $annotationName The name of the annotation. + * + * @return object|null The Annotation or NULL, if the requested annotation does not exist. + */ + function getPropertyAnnotation(\ReflectionProperty $property, $annotationName); +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php new file mode 100644 index 0000000..d4757ee --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php @@ -0,0 +1,127 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +/** + * Simple Annotation Reader. + * + * This annotation reader is intended to be used in projects where you have + * full-control over all annotations that are available. + * + * @since 2.2 + * @author Johannes M. Schmitt + * @author Fabio B. Silva + */ +class SimpleAnnotationReader implements Reader +{ + /** + * @var DocParser + */ + private $parser; + + /** + * Constructor. + * + * Initializes a new SimpleAnnotationReader. + */ + public function __construct() + { + $this->parser = new DocParser(); + $this->parser->setIgnoreNotImportedAnnotations(true); + } + + /** + * Adds a namespace in which we will look for annotations. + * + * @param string $namespace + * + * @return void + */ + public function addNamespace($namespace) + { + $this->parser->addNamespace($namespace); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(\ReflectionClass $class) + { + return $this->parser->parse($class->getDocComment(), 'class '.$class->getName()); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(\ReflectionMethod $method) + { + return $this->parser->parse($method->getDocComment(), 'method '.$method->getDeclaringClass()->name.'::'.$method->getName().'()'); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(\ReflectionProperty $property) + { + return $this->parser->parse($property->getDocComment(), 'property '.$property->getDeclaringClass()->name.'::$'.$property->getName()); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(\ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(\ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php new file mode 100644 index 0000000..bf1b713 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php @@ -0,0 +1,194 @@ +. + */ + +namespace Doctrine\Common\Annotations; + +/** + * Parses a file for namespaces/use/class declarations. + * + * @author Fabien Potencier + * @author Christian Kaps + */ +class TokenParser +{ + /** + * The token list. + * + * @var array + */ + private $tokens; + + /** + * The number of tokens. + * + * @var int + */ + private $numTokens; + + /** + * The current array pointer. + * + * @var int + */ + private $pointer = 0; + + /** + * @param string $contents + */ + public function __construct($contents) + { + $this->tokens = token_get_all($contents); + + // The PHP parser sets internal compiler globals for certain things. Annoyingly, the last docblock comment it + // saw gets stored in doc_comment. When it comes to compile the next thing to be include()d this stored + // doc_comment becomes owned by the first thing the compiler sees in the file that it considers might have a + // docblock. If the first thing in the file is a class without a doc block this would cause calls to + // getDocBlock() on said class to return our long lost doc_comment. Argh. + // To workaround, cause the parser to parse an empty docblock. Sure getDocBlock() will return this, but at least + // it's harmless to us. + token_get_all("numTokens = count($this->tokens); + } + + /** + * Gets the next non whitespace and non comment token. + * + * @param boolean $docCommentIsComment If TRUE then a doc comment is considered a comment and skipped. + * If FALSE then only whitespace and normal comments are skipped. + * + * @return array|null The token if exists, null otherwise. + */ + public function next($docCommentIsComment = TRUE) + { + for ($i = $this->pointer; $i < $this->numTokens; $i++) { + $this->pointer++; + if ($this->tokens[$i][0] === T_WHITESPACE || + $this->tokens[$i][0] === T_COMMENT || + ($docCommentIsComment && $this->tokens[$i][0] === T_DOC_COMMENT)) { + + continue; + } + + return $this->tokens[$i]; + } + + return null; + } + + /** + * Parses a single use statement. + * + * @return array A list with all found class names for a use statement. + */ + public function parseUseStatement() + { + + $groupRoot = ''; + $class = ''; + $alias = ''; + $statements = array(); + $explicitAlias = false; + while (($token = $this->next())) { + $isNameToken = $token[0] === T_STRING || $token[0] === T_NS_SEPARATOR; + if (!$explicitAlias && $isNameToken) { + $class .= $token[1]; + $alias = $token[1]; + } else if ($explicitAlias && $isNameToken) { + $alias .= $token[1]; + } else if ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } else if ($token === ',') { + $statements[strtolower($alias)] = $groupRoot . $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } else if ($token === ';') { + $statements[strtolower($alias)] = $groupRoot . $class; + break; + } else if ($token === '{' ) { + $groupRoot = $class; + $class = ''; + } else if ($token === '}' ) { + continue; + } else { + break; + } + } + + return $statements; + } + + /** + * Gets all use statements. + * + * @param string $namespaceName The namespace name of the reflected class. + * + * @return array A list with all found use statements. + */ + public function parseUseStatements($namespaceName) + { + $statements = array(); + while (($token = $this->next())) { + if ($token[0] === T_USE) { + $statements = array_merge($statements, $this->parseUseStatement()); + continue; + } + if ($token[0] !== T_NAMESPACE || $this->parseNamespace() != $namespaceName) { + continue; + } + + // Get fresh array for new namespace. This is to prevent the parser to collect the use statements + // for a previous namespace with the same name. This is the case if a namespace is defined twice + // or if a namespace with the same name is commented out. + $statements = array(); + } + + return $statements; + } + + /** + * Gets the namespace. + * + * @return string The found namespace. + */ + public function parseNamespace() + { + $name = ''; + while (($token = $this->next()) && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR)) { + $name .= $token[1]; + } + + return $name; + } + + /** + * Gets the class name. + * + * @return string The found class name. + */ + public function parseClass() + { + // Namespaces and class names are tokenized the same: T_STRINGs + // separated by T_NS_SEPARATOR so we can use one function to provide + // both. + return $this->parseNamespace(); + } +} diff --git a/vendor/doctrine/annotations/phpstan.neon b/vendor/doctrine/annotations/phpstan.neon new file mode 100644 index 0000000..be267e6 --- /dev/null +++ b/vendor/doctrine/annotations/phpstan.neon @@ -0,0 +1,17 @@ +parameters: + autoload_files: + - %currentWorkingDirectory%/tests/Doctrine/Tests/Common/Annotations/DocParserTest.php + excludes_analyse: + - %currentWorkingDirectory%/tests/*/Fixtures/* + - %currentWorkingDirectory%/tests/Doctrine/Tests/Common/Annotations/ReservedKeywordsClasses.php + - %currentWorkingDirectory%/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM58Entity.php + - %currentWorkingDirectory%/tests/Doctrine/Tests/DoctrineTestCase.php + polluteScopeWithLoopInitialAssignments: true + ignoreErrors: + - '#Class Doctrine_Tests_Common_Annotations_Fixtures_ClassNoNamespaceNoComment not found#' + - '#Instantiated class Doctrine_Tests_Common_Annotations_Fixtures_ClassNoNamespaceNoComment not found#' + - '#Property Doctrine\\Tests\\Common\\Annotations\\DummyClassNonAnnotationProblem::\$foo has unknown class#' + - '#Class Doctrine\\Tests\\Common\\Annotations\\True not found#' + - '#Class Doctrine\\Tests\\Common\\Annotations\\False not found#' + - '#Class Doctrine\\Tests\\Common\\Annotations\\Null not found#' + - '#Call to an undefined method ReflectionClass::getUseStatements\(\)#' diff --git a/vendor/doctrine/instantiator/CONTRIBUTING.md b/vendor/doctrine/instantiator/CONTRIBUTING.md new file mode 100644 index 0000000..75b84b2 --- /dev/null +++ b/vendor/doctrine/instantiator/CONTRIBUTING.md @@ -0,0 +1,35 @@ +# Contributing + + * Coding standard for the project is [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) + * The project will follow strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php) + * Any contribution must provide tests for additional introduced conditions + * Any un-confirmed issue needs a failing test case before being accepted + * Pull requests must be sent from a new hotfix/feature branch, not from `master`. + +## Installation + +To install the project and run the tests, you need to clone it first: + +```sh +$ git clone git://github.com/doctrine/instantiator.git +``` + +You will then need to run a composer installation: + +```sh +$ cd Instantiator +$ curl -s https://getcomposer.org/installer | php +$ php composer.phar update +``` + +## Testing + +The PHPUnit version to be used is the one installed as a dev- dependency via composer: + +```sh +$ ./vendor/bin/phpunit +``` + +Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement +won't be merged. + diff --git a/vendor/doctrine/instantiator/LICENSE b/vendor/doctrine/instantiator/LICENSE new file mode 100644 index 0000000..4d983d1 --- /dev/null +++ b/vendor/doctrine/instantiator/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014 Doctrine Project + +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. diff --git a/vendor/doctrine/instantiator/README.md b/vendor/doctrine/instantiator/README.md new file mode 100644 index 0000000..b66064b --- /dev/null +++ b/vendor/doctrine/instantiator/README.md @@ -0,0 +1,40 @@ +# Instantiator + +This library provides a way of avoiding usage of constructors when instantiating PHP classes. + +[![Build Status](https://travis-ci.org/doctrine/instantiator.svg?branch=master)](https://travis-ci.org/doctrine/instantiator) +[![Code Coverage](https://scrutinizer-ci.com/g/doctrine/instantiator/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/doctrine/instantiator/?branch=master) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/doctrine/instantiator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/doctrine/instantiator/?branch=master) +[![Dependency Status](https://www.versioneye.com/package/php--doctrine--instantiator/badge.svg)](https://www.versioneye.com/package/php--doctrine--instantiator) +[![HHVM Status](http://hhvm.h4cc.de/badge/doctrine/instantiator.png)](http://hhvm.h4cc.de/package/doctrine/instantiator) + +[![Latest Stable Version](https://poser.pugx.org/doctrine/instantiator/v/stable.png)](https://packagist.org/packages/doctrine/instantiator) +[![Latest Unstable Version](https://poser.pugx.org/doctrine/instantiator/v/unstable.png)](https://packagist.org/packages/doctrine/instantiator) + +## Installation + +The suggested installation method is via [composer](https://getcomposer.org/): + +```sh +php composer.phar require "doctrine/instantiator:~1.0.3" +``` + +## Usage + +The instantiator is able to create new instances of any class without using the constructor or any API of the class +itself: + +```php +$instantiator = new \Doctrine\Instantiator\Instantiator(); + +$instance = $instantiator->instantiate(\My\ClassName\Here::class); +``` + +## Contributing + +Please read the [CONTRIBUTING.md](CONTRIBUTING.md) contents if you wish to help out! + +## Credits + +This library was migrated from [ocramius/instantiator](https://github.com/Ocramius/Instantiator), which +has been donated to the doctrine organization, and which is now deprecated in favour of this package. diff --git a/vendor/doctrine/instantiator/composer.json b/vendor/doctrine/instantiator/composer.json new file mode 100644 index 0000000..403ee8e --- /dev/null +++ b/vendor/doctrine/instantiator/composer.json @@ -0,0 +1,45 @@ +{ + "name": "doctrine/instantiator", + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "type": "library", + "license": "MIT", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "instantiate", + "constructor" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "require": { + "php": "^7.1" + }, + "require-dev": { + "ext-phar": "*", + "ext-pdo": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2", + "athletic/athletic": "~0.1.8" + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "autoload-dev": { + "psr-0": { + "DoctrineTest\\InstantiatorPerformance\\": "tests", + "DoctrineTest\\InstantiatorTest\\": "tests", + "DoctrineTest\\InstantiatorTestAsset\\": "tests" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + } +} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php new file mode 100644 index 0000000..3065375 --- /dev/null +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php @@ -0,0 +1,29 @@ +. + */ + +namespace Doctrine\Instantiator\Exception; + +/** + * Base exception marker interface for the instantiator component + * + * @author Marco Pivetta + */ +interface ExceptionInterface +{ +} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php new file mode 100644 index 0000000..cb57aa8 --- /dev/null +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php @@ -0,0 +1,52 @@ +. + */ + +namespace Doctrine\Instantiator\Exception; + +use InvalidArgumentException as BaseInvalidArgumentException; +use ReflectionClass; + +/** + * Exception for invalid arguments provided to the instantiator + * + * @author Marco Pivetta + */ +class InvalidArgumentException extends BaseInvalidArgumentException implements ExceptionInterface +{ + public static function fromNonExistingClass(string $className) : self + { + if (interface_exists($className)) { + return new self(sprintf('The provided type "%s" is an interface, and can not be instantiated', $className)); + } + + if (PHP_VERSION_ID >= 50400 && trait_exists($className)) { + return new self(sprintf('The provided type "%s" is a trait, and can not be instantiated', $className)); + } + + return new self(sprintf('The provided class "%s" does not exist', $className)); + } + + public static function fromAbstractClass(ReflectionClass $reflectionClass) : self + { + return new self(sprintf( + 'The provided class "%s" is abstract, and can not be instantiated', + $reflectionClass->getName() + )); + } +} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php new file mode 100644 index 0000000..2b704b9 --- /dev/null +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php @@ -0,0 +1,66 @@ +. + */ + +namespace Doctrine\Instantiator\Exception; + +use Exception; +use ReflectionClass; +use UnexpectedValueException as BaseUnexpectedValueException; + +/** + * Exception for given parameters causing invalid/unexpected state on instantiation + * + * @author Marco Pivetta + */ +class UnexpectedValueException extends BaseUnexpectedValueException implements ExceptionInterface +{ + public static function fromSerializationTriggeredException( + ReflectionClass $reflectionClass, + Exception $exception + ) : self { + return new self( + sprintf( + 'An exception was raised while trying to instantiate an instance of "%s" via un-serialization', + $reflectionClass->getName() + ), + 0, + $exception + ); + } + + public static function fromUncleanUnSerialization( + ReflectionClass $reflectionClass, + string $errorString, + int $errorCode, + string $errorFile, + int $errorLine + ) : self { + return new self( + sprintf( + 'Could not produce an instance of "%s" via un-serialization, since an error was triggered ' + . 'in file "%s" at line "%d"', + $reflectionClass->getName(), + $errorFile, + $errorLine + ), + 0, + new Exception($errorString, $errorCode) + ); + } +} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php new file mode 100644 index 0000000..69fe65d --- /dev/null +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php @@ -0,0 +1,216 @@ +. + */ + +namespace Doctrine\Instantiator; + +use Doctrine\Instantiator\Exception\InvalidArgumentException; +use Doctrine\Instantiator\Exception\UnexpectedValueException; +use Exception; +use ReflectionClass; + +/** + * {@inheritDoc} + * + * @author Marco Pivetta + */ +final class Instantiator implements InstantiatorInterface +{ + /** + * Markers used internally by PHP to define whether {@see \unserialize} should invoke + * the method {@see \Serializable::unserialize()} when dealing with classes implementing + * the {@see \Serializable} interface. + */ + const SERIALIZATION_FORMAT_USE_UNSERIALIZER = 'C'; + const SERIALIZATION_FORMAT_AVOID_UNSERIALIZER = 'O'; + + /** + * @var \callable[] used to instantiate specific classes, indexed by class name + */ + private static $cachedInstantiators = []; + + /** + * @var object[] of objects that can directly be cloned, indexed by class name + */ + private static $cachedCloneables = []; + + /** + * {@inheritDoc} + */ + public function instantiate($className) + { + if (isset(self::$cachedCloneables[$className])) { + return clone self::$cachedCloneables[$className]; + } + + if (isset(self::$cachedInstantiators[$className])) { + $factory = self::$cachedInstantiators[$className]; + + return $factory(); + } + + return $this->buildAndCacheFromFactory($className); + } + + /** + * Builds the requested object and caches it in static properties for performance + * + * @return object + */ + private function buildAndCacheFromFactory(string $className) + { + $factory = self::$cachedInstantiators[$className] = $this->buildFactory($className); + $instance = $factory(); + + if ($this->isSafeToClone(new ReflectionClass($instance))) { + self::$cachedCloneables[$className] = clone $instance; + } + + return $instance; + } + + /** + * Builds a callable capable of instantiating the given $className without + * invoking its constructor. + * + * @throws InvalidArgumentException + * @throws UnexpectedValueException + * @throws \ReflectionException + */ + private function buildFactory(string $className) : callable + { + $reflectionClass = $this->getReflectionClass($className); + + if ($this->isInstantiableViaReflection($reflectionClass)) { + return [$reflectionClass, 'newInstanceWithoutConstructor']; + } + + $serializedString = sprintf( + '%s:%d:"%s":0:{}', + self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER, + strlen($className), + $className + ); + + $this->checkIfUnSerializationIsSupported($reflectionClass, $serializedString); + + return function () use ($serializedString) { + return unserialize($serializedString); + }; + } + + /** + * @param string $className + * + * @return ReflectionClass + * + * @throws InvalidArgumentException + * @throws \ReflectionException + */ + private function getReflectionClass($className) : ReflectionClass + { + if (! class_exists($className)) { + throw InvalidArgumentException::fromNonExistingClass($className); + } + + $reflection = new ReflectionClass($className); + + if ($reflection->isAbstract()) { + throw InvalidArgumentException::fromAbstractClass($reflection); + } + + return $reflection; + } + + /** + * @param ReflectionClass $reflectionClass + * @param string $serializedString + * + * @throws UnexpectedValueException + * + * @return void + */ + private function checkIfUnSerializationIsSupported(ReflectionClass $reflectionClass, $serializedString) : void + { + set_error_handler(function ($code, $message, $file, $line) use ($reflectionClass, & $error) : void { + $error = UnexpectedValueException::fromUncleanUnSerialization( + $reflectionClass, + $message, + $code, + $file, + $line + ); + }); + + $this->attemptInstantiationViaUnSerialization($reflectionClass, $serializedString); + + restore_error_handler(); + + if ($error) { + throw $error; + } + } + + /** + * @param ReflectionClass $reflectionClass + * @param string $serializedString + * + * @throws UnexpectedValueException + * + * @return void + */ + private function attemptInstantiationViaUnSerialization(ReflectionClass $reflectionClass, $serializedString) : void + { + try { + unserialize($serializedString); + } catch (Exception $exception) { + restore_error_handler(); + + throw UnexpectedValueException::fromSerializationTriggeredException($reflectionClass, $exception); + } + } + + private function isInstantiableViaReflection(ReflectionClass $reflectionClass) : bool + { + return ! ($this->hasInternalAncestors($reflectionClass) && $reflectionClass->isFinal()); + } + + /** + * Verifies whether the given class is to be considered internal + */ + private function hasInternalAncestors(ReflectionClass $reflectionClass) : bool + { + do { + if ($reflectionClass->isInternal()) { + return true; + } + } while ($reflectionClass = $reflectionClass->getParentClass()); + + return false; + } + + /** + * Checks if a class is cloneable + * + * Classes implementing `__clone` cannot be safely cloned, as that may cause side-effects. + */ + private function isSafeToClone(ReflectionClass $reflection) : bool + { + return $reflection->isCloneable() && ! $reflection->hasMethod('__clone'); + } +} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php new file mode 100644 index 0000000..b665bea --- /dev/null +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php @@ -0,0 +1,37 @@ +. + */ + +namespace Doctrine\Instantiator; + +/** + * Instantiator provides utility methods to build objects without invoking their constructors + * + * @author Marco Pivetta + */ +interface InstantiatorInterface +{ + /** + * @param string $className + * + * @return object + * + * @throws \Doctrine\Instantiator\Exception\ExceptionInterface + */ + public function instantiate($className); +} diff --git a/vendor/doctrine/lexer/LICENSE b/vendor/doctrine/lexer/LICENSE new file mode 100644 index 0000000..5e781fc --- /dev/null +++ b/vendor/doctrine/lexer/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2006-2013 Doctrine Project + +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. diff --git a/vendor/doctrine/lexer/README.md b/vendor/doctrine/lexer/README.md new file mode 100644 index 0000000..66f4430 --- /dev/null +++ b/vendor/doctrine/lexer/README.md @@ -0,0 +1,5 @@ +# Doctrine Lexer + +Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. + +This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). diff --git a/vendor/doctrine/lexer/composer.json b/vendor/doctrine/lexer/composer.json new file mode 100644 index 0000000..8cd694c --- /dev/null +++ b/vendor/doctrine/lexer/composer.json @@ -0,0 +1,24 @@ +{ + "name": "doctrine/lexer", + "type": "library", + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "keywords": ["lexer", "parser"], + "homepage": "http://www.doctrine-project.org", + "license": "MIT", + "authors": [ + {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, + {"name": "Roman Borschel", "email": "roman@code-factory.org"}, + {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} + ], + "require": { + "php": ">=5.3.2" + }, + "autoload": { + "psr-0": { "Doctrine\\Common\\Lexer\\": "lib/" } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php new file mode 100644 index 0000000..399a552 --- /dev/null +++ b/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php @@ -0,0 +1,327 @@ +. + */ + +namespace Doctrine\Common\Lexer; + +/** + * Base class for writing simple lexers, i.e. for creating small DSLs. + * + * @since 2.0 + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + */ +abstract class AbstractLexer +{ + /** + * Lexer original input string. + * + * @var string + */ + private $input; + + /** + * Array of scanned tokens. + * + * Each token is an associative array containing three items: + * - 'value' : the string value of the token in the input string + * - 'type' : the type of the token (identifier, numeric, string, input + * parameter, none) + * - 'position' : the position of the token in the input string + * + * @var array + */ + private $tokens = array(); + + /** + * Current lexer position in input string. + * + * @var integer + */ + private $position = 0; + + /** + * Current peek of current lexer position. + * + * @var integer + */ + private $peek = 0; + + /** + * The next token in the input. + * + * @var array + */ + public $lookahead; + + /** + * The last matched/seen token. + * + * @var array + */ + public $token; + + /** + * Sets the input data to be tokenized. + * + * The Lexer is immediately reset and the new input tokenized. + * Any unprocessed tokens from any previous input are lost. + * + * @param string $input The input to be tokenized. + * + * @return void + */ + public function setInput($input) + { + $this->input = $input; + $this->tokens = array(); + + $this->reset(); + $this->scan($input); + } + + /** + * Resets the lexer. + * + * @return void + */ + public function reset() + { + $this->lookahead = null; + $this->token = null; + $this->peek = 0; + $this->position = 0; + } + + /** + * Resets the peek pointer to 0. + * + * @return void + */ + public function resetPeek() + { + $this->peek = 0; + } + + /** + * Resets the lexer position on the input to the given position. + * + * @param integer $position Position to place the lexical scanner. + * + * @return void + */ + public function resetPosition($position = 0) + { + $this->position = $position; + } + + /** + * Retrieve the original lexer's input until a given position. + * + * @param integer $position + * + * @return string + */ + public function getInputUntilPosition($position) + { + return substr($this->input, 0, $position); + } + + /** + * Checks whether a given token matches the current lookahead. + * + * @param integer|string $token + * + * @return boolean + */ + public function isNextToken($token) + { + return null !== $this->lookahead && $this->lookahead['type'] === $token; + } + + /** + * Checks whether any of the given tokens matches the current lookahead. + * + * @param array $tokens + * + * @return boolean + */ + public function isNextTokenAny(array $tokens) + { + return null !== $this->lookahead && in_array($this->lookahead['type'], $tokens, true); + } + + /** + * Moves to the next token in the input string. + * + * @return boolean + */ + public function moveNext() + { + $this->peek = 0; + $this->token = $this->lookahead; + $this->lookahead = (isset($this->tokens[$this->position])) + ? $this->tokens[$this->position++] : null; + + return $this->lookahead !== null; + } + + /** + * Tells the lexer to skip input tokens until it sees a token with the given value. + * + * @param string $type The token type to skip until. + * + * @return void + */ + public function skipUntil($type) + { + while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { + $this->moveNext(); + } + } + + /** + * Checks if given value is identical to the given token. + * + * @param mixed $value + * @param integer $token + * + * @return boolean + */ + public function isA($value, $token) + { + return $this->getType($value) === $token; + } + + /** + * Moves the lookahead token forward. + * + * @return array|null The next token or NULL if there are no more tokens ahead. + */ + public function peek() + { + if (isset($this->tokens[$this->position + $this->peek])) { + return $this->tokens[$this->position + $this->peek++]; + } else { + return null; + } + } + + /** + * Peeks at the next token, returns it and immediately resets the peek. + * + * @return array|null The next token or NULL if there are no more tokens ahead. + */ + public function glimpse() + { + $peek = $this->peek(); + $this->peek = 0; + return $peek; + } + + /** + * Scans the input string for tokens. + * + * @param string $input A query string. + * + * @return void + */ + protected function scan($input) + { + static $regex; + + if ( ! isset($regex)) { + $regex = sprintf( + '/(%s)|%s/%s', + implode(')|(', $this->getCatchablePatterns()), + implode('|', $this->getNonCatchablePatterns()), + $this->getModifiers() + ); + } + + $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; + $matches = preg_split($regex, $input, -1, $flags); + + foreach ($matches as $match) { + // Must remain before 'value' assignment since it can change content + $type = $this->getType($match[0]); + + $this->tokens[] = array( + 'value' => $match[0], + 'type' => $type, + 'position' => $match[1], + ); + } + } + + /** + * Gets the literal for a given token. + * + * @param integer $token + * + * @return string + */ + public function getLiteral($token) + { + $className = get_class($this); + $reflClass = new \ReflectionClass($className); + $constants = $reflClass->getConstants(); + + foreach ($constants as $name => $value) { + if ($value === $token) { + return $className . '::' . $name; + } + } + + return $token; + } + + /** + * Regex modifiers + * + * @return string + */ + protected function getModifiers() + { + return 'i'; + } + + /** + * Lexical catchable patterns. + * + * @return array + */ + abstract protected function getCatchablePatterns(); + + /** + * Lexical non-catchable patterns. + * + * @return array + */ + abstract protected function getNonCatchablePatterns(); + + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * + * @return integer + */ + abstract protected function getType(&$value); +} diff --git a/vendor/erusev/parsedown/LICENSE.txt b/vendor/erusev/parsedown/LICENSE.txt new file mode 100644 index 0000000..8e7c764 --- /dev/null +++ b/vendor/erusev/parsedown/LICENSE.txt @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2018 Emanuil Rusev, erusev.com + +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. diff --git a/vendor/erusev/parsedown/Parsedown.php b/vendor/erusev/parsedown/Parsedown.php new file mode 100644 index 0000000..87d612a --- /dev/null +++ b/vendor/erusev/parsedown/Parsedown.php @@ -0,0 +1,1679 @@ +DefinitionData = array(); + + # standardize line breaks + $text = str_replace(array("\r\n", "\r"), "\n", $text); + + # remove surrounding line breaks + $text = trim($text, "\n"); + + # split text into lines + $lines = explode("\n", $text); + + # iterate through lines to identify blocks + $markup = $this->lines($lines); + + # trim line breaks + $markup = trim($markup, "\n"); + + return $markup; + } + + # + # Setters + # + + function setBreaksEnabled($breaksEnabled) + { + $this->breaksEnabled = $breaksEnabled; + + return $this; + } + + protected $breaksEnabled; + + function setMarkupEscaped($markupEscaped) + { + $this->markupEscaped = $markupEscaped; + + return $this; + } + + protected $markupEscaped; + + function setUrlsLinked($urlsLinked) + { + $this->urlsLinked = $urlsLinked; + + return $this; + } + + protected $urlsLinked = true; + + function setSafeMode($safeMode) + { + $this->safeMode = (bool) $safeMode; + + return $this; + } + + protected $safeMode; + + protected $safeLinksWhitelist = array( + 'http://', + 'https://', + 'ftp://', + 'ftps://', + 'mailto:', + 'data:image/png;base64,', + 'data:image/gif;base64,', + 'data:image/jpeg;base64,', + 'irc:', + 'ircs:', + 'git:', + 'ssh:', + 'news:', + 'steam:', + ); + + # + # Lines + # + + protected $BlockTypes = array( + '#' => array('Header'), + '*' => array('Rule', 'List'), + '+' => array('List'), + '-' => array('SetextHeader', 'Table', 'Rule', 'List'), + '0' => array('List'), + '1' => array('List'), + '2' => array('List'), + '3' => array('List'), + '4' => array('List'), + '5' => array('List'), + '6' => array('List'), + '7' => array('List'), + '8' => array('List'), + '9' => array('List'), + ':' => array('Table'), + '<' => array('Comment', 'Markup'), + '=' => array('SetextHeader'), + '>' => array('Quote'), + '[' => array('Reference'), + '_' => array('Rule'), + '`' => array('FencedCode'), + '|' => array('Table'), + '~' => array('FencedCode'), + ); + + # ~ + + protected $unmarkedBlockTypes = array( + 'Code', + ); + + # + # Blocks + # + + protected function lines(array $lines) + { + $CurrentBlock = null; + + foreach ($lines as $line) + { + if (chop($line) === '') + { + if (isset($CurrentBlock)) + { + $CurrentBlock['interrupted'] = true; + } + + continue; + } + + if (strpos($line, "\t") !== false) + { + $parts = explode("\t", $line); + + $line = $parts[0]; + + unset($parts[0]); + + foreach ($parts as $part) + { + $shortage = 4 - mb_strlen($line, 'utf-8') % 4; + + $line .= str_repeat(' ', $shortage); + $line .= $part; + } + } + + $indent = 0; + + while (isset($line[$indent]) and $line[$indent] === ' ') + { + $indent ++; + } + + $text = $indent > 0 ? substr($line, $indent) : $line; + + # ~ + + $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); + + # ~ + + if (isset($CurrentBlock['continuable'])) + { + $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); + + if (isset($Block)) + { + $CurrentBlock = $Block; + + continue; + } + else + { + if ($this->isBlockCompletable($CurrentBlock['type'])) + { + $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); + } + } + } + + # ~ + + $marker = $text[0]; + + # ~ + + $blockTypes = $this->unmarkedBlockTypes; + + if (isset($this->BlockTypes[$marker])) + { + foreach ($this->BlockTypes[$marker] as $blockType) + { + $blockTypes []= $blockType; + } + } + + # + # ~ + + foreach ($blockTypes as $blockType) + { + $Block = $this->{'block'.$blockType}($Line, $CurrentBlock); + + if (isset($Block)) + { + $Block['type'] = $blockType; + + if ( ! isset($Block['identified'])) + { + $Blocks []= $CurrentBlock; + + $Block['identified'] = true; + } + + if ($this->isBlockContinuable($blockType)) + { + $Block['continuable'] = true; + } + + $CurrentBlock = $Block; + + continue 2; + } + } + + # ~ + + if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) + { + $CurrentBlock['element']['text'] .= "\n".$text; + } + else + { + $Blocks []= $CurrentBlock; + + $CurrentBlock = $this->paragraph($Line); + + $CurrentBlock['identified'] = true; + } + } + + # ~ + + if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) + { + $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); + } + + # ~ + + $Blocks []= $CurrentBlock; + + unset($Blocks[0]); + + # ~ + + $markup = ''; + + foreach ($Blocks as $Block) + { + if (isset($Block['hidden'])) + { + continue; + } + + $markup .= "\n"; + $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); + } + + $markup .= "\n"; + + # ~ + + return $markup; + } + + protected function isBlockContinuable($Type) + { + return method_exists($this, 'block'.$Type.'Continue'); + } + + protected function isBlockCompletable($Type) + { + return method_exists($this, 'block'.$Type.'Complete'); + } + + # + # Code + + protected function blockCode($Line, $Block = null) + { + if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted'])) + { + return; + } + + if ($Line['indent'] >= 4) + { + $text = substr($Line['body'], 4); + + $Block = array( + 'element' => array( + 'name' => 'pre', + 'handler' => 'element', + 'text' => array( + 'name' => 'code', + 'text' => $text, + ), + ), + ); + + return $Block; + } + } + + protected function blockCodeContinue($Line, $Block) + { + if ($Line['indent'] >= 4) + { + if (isset($Block['interrupted'])) + { + $Block['element']['text']['text'] .= "\n"; + + unset($Block['interrupted']); + } + + $Block['element']['text']['text'] .= "\n"; + + $text = substr($Line['body'], 4); + + $Block['element']['text']['text'] .= $text; + + return $Block; + } + } + + protected function blockCodeComplete($Block) + { + $text = $Block['element']['text']['text']; + + $Block['element']['text']['text'] = $text; + + return $Block; + } + + # + # Comment + + protected function blockComment($Line) + { + if ($this->markupEscaped or $this->safeMode) + { + return; + } + + if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') + { + $Block = array( + 'markup' => $Line['body'], + ); + + if (preg_match('/-->$/', $Line['text'])) + { + $Block['closed'] = true; + } + + return $Block; + } + } + + protected function blockCommentContinue($Line, array $Block) + { + if (isset($Block['closed'])) + { + return; + } + + $Block['markup'] .= "\n" . $Line['body']; + + if (preg_match('/-->$/', $Line['text'])) + { + $Block['closed'] = true; + } + + return $Block; + } + + # + # Fenced Code + + protected function blockFencedCode($Line) + { + if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([^`]+)?[ ]*$/', $Line['text'], $matches)) + { + $Element = array( + 'name' => 'code', + 'text' => '', + ); + + if (isset($matches[1])) + { + $class = 'language-'.$matches[1]; + + $Element['attributes'] = array( + 'class' => $class, + ); + } + + $Block = array( + 'char' => $Line['text'][0], + 'element' => array( + 'name' => 'pre', + 'handler' => 'element', + 'text' => $Element, + ), + ); + + return $Block; + } + } + + protected function blockFencedCodeContinue($Line, $Block) + { + if (isset($Block['complete'])) + { + return; + } + + if (isset($Block['interrupted'])) + { + $Block['element']['text']['text'] .= "\n"; + + unset($Block['interrupted']); + } + + if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) + { + $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); + + $Block['complete'] = true; + + return $Block; + } + + $Block['element']['text']['text'] .= "\n".$Line['body']; + + return $Block; + } + + protected function blockFencedCodeComplete($Block) + { + $text = $Block['element']['text']['text']; + + $Block['element']['text']['text'] = $text; + + return $Block; + } + + # + # Header + + protected function blockHeader($Line) + { + if (isset($Line['text'][1])) + { + $level = 1; + + while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') + { + $level ++; + } + + if ($level > 6) + { + return; + } + + $text = trim($Line['text'], '# '); + + $Block = array( + 'element' => array( + 'name' => 'h' . min(6, $level), + 'text' => $text, + 'handler' => 'line', + ), + ); + + return $Block; + } + } + + # + # List + + protected function blockList($Line) + { + list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); + + if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) + { + $Block = array( + 'indent' => $Line['indent'], + 'pattern' => $pattern, + 'element' => array( + 'name' => $name, + 'handler' => 'elements', + ), + ); + + if($name === 'ol') + { + $listStart = stristr($matches[0], '.', true); + + if($listStart !== '1') + { + $Block['element']['attributes'] = array('start' => $listStart); + } + } + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $matches[2], + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + } + + protected function blockListContinue($Line, array $Block) + { + if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) + { + if (isset($Block['interrupted'])) + { + $Block['li']['text'] []= ''; + + $Block['loose'] = true; + + unset($Block['interrupted']); + } + + unset($Block['li']); + + $text = isset($matches[1]) ? $matches[1] : ''; + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $text, + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + + if ($Line['text'][0] === '[' and $this->blockReference($Line)) + { + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + return $Block; + } + + if ($Line['indent'] > 0) + { + $Block['li']['text'] []= ''; + + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + unset($Block['interrupted']); + + return $Block; + } + } + + protected function blockListComplete(array $Block) + { + if (isset($Block['loose'])) + { + foreach ($Block['element']['text'] as &$li) + { + if (end($li['text']) !== '') + { + $li['text'] []= ''; + } + } + } + + return $Block; + } + + # + # Quote + + protected function blockQuote($Line) + { + if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) + { + $Block = array( + 'element' => array( + 'name' => 'blockquote', + 'handler' => 'lines', + 'text' => (array) $matches[1], + ), + ); + + return $Block; + } + } + + protected function blockQuoteContinue($Line, array $Block) + { + if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) + { + if (isset($Block['interrupted'])) + { + $Block['element']['text'] []= ''; + + unset($Block['interrupted']); + } + + $Block['element']['text'] []= $matches[1]; + + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $Block['element']['text'] []= $Line['text']; + + return $Block; + } + } + + # + # Rule + + protected function blockRule($Line) + { + if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text'])) + { + $Block = array( + 'element' => array( + 'name' => 'hr' + ), + ); + + return $Block; + } + } + + # + # Setext + + protected function blockSetextHeader($Line, array $Block = null) + { + if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) + { + return; + } + + if (chop($Line['text'], $Line['text'][0]) === '') + { + $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; + + return $Block; + } + } + + # + # Markup + + protected function blockMarkup($Line) + { + if ($this->markupEscaped or $this->safeMode) + { + return; + } + + if (preg_match('/^<(\w[\w-]*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) + { + $element = strtolower($matches[1]); + + if (in_array($element, $this->textLevelElements)) + { + return; + } + + $Block = array( + 'name' => $matches[1], + 'depth' => 0, + 'markup' => $Line['text'], + ); + + $length = strlen($matches[0]); + + $remainder = substr($Line['text'], $length); + + if (trim($remainder) === '') + { + if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) + { + $Block['closed'] = true; + + $Block['void'] = true; + } + } + else + { + if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) + { + return; + } + + if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) + { + $Block['closed'] = true; + } + } + + return $Block; + } + } + + protected function blockMarkupContinue($Line, array $Block) + { + if (isset($Block['closed'])) + { + return; + } + + if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open + { + $Block['depth'] ++; + } + + if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close + { + if ($Block['depth'] > 0) + { + $Block['depth'] --; + } + else + { + $Block['closed'] = true; + } + } + + if (isset($Block['interrupted'])) + { + $Block['markup'] .= "\n"; + + unset($Block['interrupted']); + } + + $Block['markup'] .= "\n".$Line['body']; + + return $Block; + } + + # + # Reference + + protected function blockReference($Line) + { + if (preg_match('/^\[(.+?)\]:[ ]*?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) + { + $id = strtolower($matches[1]); + + $Data = array( + 'url' => $matches[2], + 'title' => null, + ); + + if (isset($matches[3])) + { + $Data['title'] = $matches[3]; + } + + $this->DefinitionData['Reference'][$id] = $Data; + + $Block = array( + 'hidden' => true, + ); + + return $Block; + } + } + + # + # Table + + protected function blockTable($Line, array $Block = null) + { + if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) + { + return; + } + + if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') + { + $alignments = array(); + + $divider = $Line['text']; + + $divider = trim($divider); + $divider = trim($divider, '|'); + + $dividerCells = explode('|', $divider); + + foreach ($dividerCells as $dividerCell) + { + $dividerCell = trim($dividerCell); + + if ($dividerCell === '') + { + continue; + } + + $alignment = null; + + if ($dividerCell[0] === ':') + { + $alignment = 'left'; + } + + if (substr($dividerCell, - 1) === ':') + { + $alignment = $alignment === 'left' ? 'center' : 'right'; + } + + $alignments []= $alignment; + } + + # ~ + + $HeaderElements = array(); + + $header = $Block['element']['text']; + + $header = trim($header); + $header = trim($header, '|'); + + $headerCells = explode('|', $header); + + foreach ($headerCells as $index => $headerCell) + { + $headerCell = trim($headerCell); + + $HeaderElement = array( + 'name' => 'th', + 'text' => $headerCell, + 'handler' => 'line', + ); + + if (isset($alignments[$index])) + { + $alignment = $alignments[$index]; + + $HeaderElement['attributes'] = array( + 'style' => 'text-align: '.$alignment.';', + ); + } + + $HeaderElements []= $HeaderElement; + } + + # ~ + + $Block = array( + 'alignments' => $alignments, + 'identified' => true, + 'element' => array( + 'name' => 'table', + 'handler' => 'elements', + ), + ); + + $Block['element']['text'] []= array( + 'name' => 'thead', + 'handler' => 'elements', + ); + + $Block['element']['text'] []= array( + 'name' => 'tbody', + 'handler' => 'elements', + 'text' => array(), + ); + + $Block['element']['text'][0]['text'] []= array( + 'name' => 'tr', + 'handler' => 'elements', + 'text' => $HeaderElements, + ); + + return $Block; + } + } + + protected function blockTableContinue($Line, array $Block) + { + if (isset($Block['interrupted'])) + { + return; + } + + if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) + { + $Elements = array(); + + $row = $Line['text']; + + $row = trim($row); + $row = trim($row, '|'); + + preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches); + + foreach ($matches[0] as $index => $cell) + { + $cell = trim($cell); + + $Element = array( + 'name' => 'td', + 'handler' => 'line', + 'text' => $cell, + ); + + if (isset($Block['alignments'][$index])) + { + $Element['attributes'] = array( + 'style' => 'text-align: '.$Block['alignments'][$index].';', + ); + } + + $Elements []= $Element; + } + + $Element = array( + 'name' => 'tr', + 'handler' => 'elements', + 'text' => $Elements, + ); + + $Block['element']['text'][1]['text'] []= $Element; + + return $Block; + } + } + + # + # ~ + # + + protected function paragraph($Line) + { + $Block = array( + 'element' => array( + 'name' => 'p', + 'text' => $Line['text'], + 'handler' => 'line', + ), + ); + + return $Block; + } + + # + # Inline Elements + # + + protected $InlineTypes = array( + '"' => array('SpecialCharacter'), + '!' => array('Image'), + '&' => array('SpecialCharacter'), + '*' => array('Emphasis'), + ':' => array('Url'), + '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), + '>' => array('SpecialCharacter'), + '[' => array('Link'), + '_' => array('Emphasis'), + '`' => array('Code'), + '~' => array('Strikethrough'), + '\\' => array('EscapeSequence'), + ); + + # ~ + + protected $inlineMarkerList = '!"*_&[:<>`~\\'; + + # + # ~ + # + + public function line($text, $nonNestables=array()) + { + $markup = ''; + + # $excerpt is based on the first occurrence of a marker + + while ($excerpt = strpbrk($text, $this->inlineMarkerList)) + { + $marker = $excerpt[0]; + + $markerPosition = strpos($text, $marker); + + $Excerpt = array('text' => $excerpt, 'context' => $text); + + foreach ($this->InlineTypes[$marker] as $inlineType) + { + # check to see if the current inline type is nestable in the current context + + if ( ! empty($nonNestables) and in_array($inlineType, $nonNestables)) + { + continue; + } + + $Inline = $this->{'inline'.$inlineType}($Excerpt); + + if ( ! isset($Inline)) + { + continue; + } + + # makes sure that the inline belongs to "our" marker + + if (isset($Inline['position']) and $Inline['position'] > $markerPosition) + { + continue; + } + + # sets a default inline position + + if ( ! isset($Inline['position'])) + { + $Inline['position'] = $markerPosition; + } + + # cause the new element to 'inherit' our non nestables + + foreach ($nonNestables as $non_nestable) + { + $Inline['element']['nonNestables'][] = $non_nestable; + } + + # the text that comes before the inline + $unmarkedText = substr($text, 0, $Inline['position']); + + # compile the unmarked text + $markup .= $this->unmarkedText($unmarkedText); + + # compile the inline + $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); + + # remove the examined text + $text = substr($text, $Inline['position'] + $Inline['extent']); + + continue 2; + } + + # the marker does not belong to an inline + + $unmarkedText = substr($text, 0, $markerPosition + 1); + + $markup .= $this->unmarkedText($unmarkedText); + + $text = substr($text, $markerPosition + 1); + } + + $markup .= $this->unmarkedText($text); + + return $markup; + } + + # + # ~ + # + + protected function inlineCode($Excerpt) + { + $marker = $Excerpt['text'][0]; + + if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), + 'element' => array( + 'name' => 'code', + 'text' => $text, + ), + ); + } + } + + protected function inlineEmailTag($Excerpt) + { + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches)) + { + $url = $matches[1]; + + if ( ! isset($matches[2])) + { + $url = 'mailto:' . $url; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $matches[1], + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + protected function inlineEmphasis($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + $marker = $Excerpt['text'][0]; + + if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'strong'; + } + elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'em'; + } + else + { + return; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => $emphasis, + 'handler' => 'line', + 'text' => $matches[1], + ), + ); + } + + protected function inlineEscapeSequence($Excerpt) + { + if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) + { + return array( + 'markup' => $Excerpt['text'][1], + 'extent' => 2, + ); + } + } + + protected function inlineImage($Excerpt) + { + if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') + { + return; + } + + $Excerpt['text']= substr($Excerpt['text'], 1); + + $Link = $this->inlineLink($Excerpt); + + if ($Link === null) + { + return; + } + + $Inline = array( + 'extent' => $Link['extent'] + 1, + 'element' => array( + 'name' => 'img', + 'attributes' => array( + 'src' => $Link['element']['attributes']['href'], + 'alt' => $Link['element']['text'], + ), + ), + ); + + $Inline['element']['attributes'] += $Link['element']['attributes']; + + unset($Inline['element']['attributes']['href']); + + return $Inline; + } + + protected function inlineLink($Excerpt) + { + $Element = array( + 'name' => 'a', + 'handler' => 'line', + 'nonNestables' => array('Url', 'Link'), + 'text' => null, + 'attributes' => array( + 'href' => null, + 'title' => null, + ), + ); + + $extent = 0; + + $remainder = $Excerpt['text']; + + if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) + { + $Element['text'] = $matches[1]; + + $extent += strlen($matches[0]); + + $remainder = substr($remainder, $extent); + } + else + { + return; + } + + if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches)) + { + $Element['attributes']['href'] = $matches[1]; + + if (isset($matches[2])) + { + $Element['attributes']['title'] = substr($matches[2], 1, - 1); + } + + $extent += strlen($matches[0]); + } + else + { + if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) + { + $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; + $definition = strtolower($definition); + + $extent += strlen($matches[0]); + } + else + { + $definition = strtolower($Element['text']); + } + + if ( ! isset($this->DefinitionData['Reference'][$definition])) + { + return; + } + + $Definition = $this->DefinitionData['Reference'][$definition]; + + $Element['attributes']['href'] = $Definition['url']; + $Element['attributes']['title'] = $Definition['title']; + } + + return array( + 'extent' => $extent, + 'element' => $Element, + ); + } + + protected function inlineMarkup($Excerpt) + { + if ($this->markupEscaped or $this->safeMode or strpos($Excerpt['text'], '>') === false) + { + return; + } + + if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w[\w-]*[ ]*>/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w[\w-]*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + } + + protected function inlineSpecialCharacter($Excerpt) + { + if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text'])) + { + return array( + 'markup' => '&', + 'extent' => 1, + ); + } + + $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); + + if (isset($SpecialCharacter[$Excerpt['text'][0]])) + { + return array( + 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';', + 'extent' => 1, + ); + } + } + + protected function inlineStrikethrough($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) + { + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'del', + 'text' => $matches[1], + 'handler' => 'line', + ), + ); + } + } + + protected function inlineUrl($Excerpt) + { + if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') + { + return; + } + + if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) + { + $url = $matches[0][0]; + + $Inline = array( + 'extent' => strlen($matches[0][0]), + 'position' => $matches[0][1], + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + ), + ), + ); + + return $Inline; + } + } + + protected function inlineUrlTag($Excerpt) + { + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches)) + { + $url = $matches[1]; + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + # ~ + + protected function unmarkedText($text) + { + if ($this->breaksEnabled) + { + $text = preg_replace('/[ ]*\n/', "
\n", $text); + } + else + { + $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "
\n", $text); + $text = str_replace(" \n", "\n", $text); + } + + return $text; + } + + # + # Handlers + # + + protected function element(array $Element) + { + if ($this->safeMode) + { + $Element = $this->sanitiseElement($Element); + } + + $markup = '<'.$Element['name']; + + if (isset($Element['attributes'])) + { + foreach ($Element['attributes'] as $name => $value) + { + if ($value === null) + { + continue; + } + + $markup .= ' '.$name.'="'.self::escape($value).'"'; + } + } + + if (isset($Element['text'])) + { + $markup .= '>'; + + if (!isset($Element['nonNestables'])) + { + $Element['nonNestables'] = array(); + } + + if (isset($Element['handler'])) + { + $markup .= $this->{$Element['handler']}($Element['text'], $Element['nonNestables']); + } + else + { + $markup .= self::escape($Element['text'], true); + } + + $markup .= ''; + } + else + { + $markup .= ' />'; + } + + return $markup; + } + + protected function elements(array $Elements) + { + $markup = ''; + + foreach ($Elements as $Element) + { + $markup .= "\n" . $this->element($Element); + } + + $markup .= "\n"; + + return $markup; + } + + # ~ + + protected function li($lines) + { + $markup = $this->lines($lines); + + $trimmedMarkup = trim($markup); + + if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '

') + { + $markup = $trimmedMarkup; + $markup = substr($markup, 3); + + $position = strpos($markup, "

"); + + $markup = substr_replace($markup, '', $position, 4); + } + + return $markup; + } + + # + # Deprecated Methods + # + + function parse($text) + { + $markup = $this->text($text); + + return $markup; + } + + protected function sanitiseElement(array $Element) + { + static $goodAttribute = '/^[a-zA-Z0-9][a-zA-Z0-9-_]*+$/'; + static $safeUrlNameToAtt = array( + 'a' => 'href', + 'img' => 'src', + ); + + if (isset($safeUrlNameToAtt[$Element['name']])) + { + $Element = $this->filterUnsafeUrlInAttribute($Element, $safeUrlNameToAtt[$Element['name']]); + } + + if ( ! empty($Element['attributes'])) + { + foreach ($Element['attributes'] as $att => $val) + { + # filter out badly parsed attribute + if ( ! preg_match($goodAttribute, $att)) + { + unset($Element['attributes'][$att]); + } + # dump onevent attribute + elseif (self::striAtStart($att, 'on')) + { + unset($Element['attributes'][$att]); + } + } + } + + return $Element; + } + + protected function filterUnsafeUrlInAttribute(array $Element, $attribute) + { + foreach ($this->safeLinksWhitelist as $scheme) + { + if (self::striAtStart($Element['attributes'][$attribute], $scheme)) + { + return $Element; + } + } + + $Element['attributes'][$attribute] = str_replace(':', '%3A', $Element['attributes'][$attribute]); + + return $Element; + } + + # + # Static Methods + # + + protected static function escape($text, $allowQuotes = false) + { + return htmlspecialchars($text, $allowQuotes ? ENT_NOQUOTES : ENT_QUOTES, 'UTF-8'); + } + + protected static function striAtStart($string, $needle) + { + $len = strlen($needle); + + if ($len > strlen($string)) + { + return false; + } + else + { + return strtolower(substr($string, 0, $len)) === strtolower($needle); + } + } + + static function instance($name = 'default') + { + if (isset(self::$instances[$name])) + { + return self::$instances[$name]; + } + + $instance = new static(); + + self::$instances[$name] = $instance; + + return $instance; + } + + private static $instances = array(); + + # + # Fields + # + + protected $DefinitionData; + + # + # Read-Only + + protected $specialCharacters = array( + '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', + ); + + protected $StrongRegex = array( + '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', + '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us', + ); + + protected $EmRegex = array( + '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', + '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', + ); + + protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?'; + + protected $voidElements = array( + 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', + ); + + protected $textLevelElements = array( + 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', + 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', + 'i', 'rp', 'del', 'code', 'strike', 'marquee', + 'q', 'rt', 'ins', 'font', 'strong', + 's', 'tt', 'kbd', 'mark', + 'u', 'xm', 'sub', 'nobr', + 'sup', 'ruby', + 'var', 'span', + 'wbr', 'time', + ); +} diff --git a/vendor/erusev/parsedown/README.md b/vendor/erusev/parsedown/README.md new file mode 100644 index 0000000..b5d9ed2 --- /dev/null +++ b/vendor/erusev/parsedown/README.md @@ -0,0 +1,86 @@ +> I also make [Caret](https://caret.io?ref=parsedown) - a Markdown editor for Mac and PC. + +## Parsedown + +[![Build Status](https://img.shields.io/travis/erusev/parsedown/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown) + + +Better Markdown Parser in PHP + +[Demo](http://parsedown.org/demo) | +[Benchmarks](http://parsedown.org/speed) | +[Tests](http://parsedown.org/tests/) | +[Documentation](https://github.com/erusev/parsedown/wiki/) + +### Features + +* One File +* No Dependencies +* Super Fast +* Extensible +* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown) +* Tested in 5.3 to 7.1 and in HHVM +* [Markdown Extra extension](https://github.com/erusev/parsedown-extra) + +### Installation + +Include `Parsedown.php` or install [the composer package](https://packagist.org/packages/erusev/parsedown). + +### Example + +``` php +$Parsedown = new Parsedown(); + +echo $Parsedown->text('Hello _Parsedown_!'); # prints:

Hello Parsedown!

+``` + +More examples in [the wiki](https://github.com/erusev/parsedown/wiki/) and in [this video tutorial](http://youtu.be/wYZBY8DEikI). + +### Security + +Parsedown is capable of escaping user-input within the HTML that it generates. Additionally Parsedown will apply sanitisation to additional scripting vectors (such as scripting link destinations) that are introduced by the markdown syntax itself. + +To tell Parsedown that it is processing untrusted user-input, use the following: +```php +$parsedown = new Parsedown; +$parsedown->setSafeMode(true); +``` + +If instead, you wish to allow HTML within untrusted user-input, but still want output to be free from XSS it is recommended that you make use of a HTML sanitiser that allows HTML tags to be whitelisted, like [HTML Purifier](http://htmlpurifier.org/). + +In both cases you should strongly consider employing defence-in-depth measures, like [deploying a Content-Security-Policy](https://scotthelme.co.uk/content-security-policy-an-introduction/) (a browser security feature) so that your page is likely to be safe even if an attacker finds a vulnerability in one of the first lines of defence above. + +#### Security of Parsedown Extensions + +Safe mode does not necessarily yield safe results when using extensions to Parsedown. Extensions should be evaluated on their own to determine their specific safety against XSS. + +### Escaping HTML +> ⚠️  **WARNING:** This method isn't safe from XSS! + +If you wish to escape HTML **in trusted input**, you can use the following: +```php +$parsedown = new Parsedown; +$parsedown->setMarkupEscaped(true); +``` + +Beware that this still allows users to insert unsafe scripting vectors, such as links like `[xss](javascript:alert%281%29)`. + +### Questions + +**How does Parsedown work?** + +It tries to read Markdown like a human. First, it looks at the lines. It’s interested in how the lines start. This helps it recognise blocks. It knows, for example, that if a line starts with a `-` then perhaps it belongs to a list. Once it recognises the blocks, it continues to the content. As it reads, it watches out for special characters. This helps it recognise inline elements (or inlines). + +We call this approach "line based". We believe that Parsedown is the first Markdown parser to use it. Since the release of Parsedown, other developers have used the same approach to develop other Markdown parsers in PHP and in other languages. + +**Is it compliant with CommonMark?** + +It passes most of the CommonMark tests. Most of the tests that don't pass deal with cases that are quite uncommon. Still, as CommonMark matures, compliance should improve. + +**Who uses it?** + +[Laravel Framework](https://laravel.com/), [Bolt CMS](http://bolt.cm/), [Grav CMS](http://getgrav.org/), [Herbie CMS](http://www.getherbie.org/), [Kirby CMS](http://getkirby.com/), [October CMS](http://octobercms.com/), [Pico CMS](http://picocms.org), [Statamic CMS](http://www.statamic.com/), [phpDocumentor](http://www.phpdoc.org/), [RaspberryPi.org](http://www.raspberrypi.org/), [Symfony demo](https://github.com/symfony/symfony-demo) and [more](https://packagist.org/packages/erusev/parsedown/dependents). + +**How can I help?** + +Use it, star it, share it and if you feel generous, [donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2). diff --git a/vendor/erusev/parsedown/composer.json b/vendor/erusev/parsedown/composer.json new file mode 100644 index 0000000..f8b40f8 --- /dev/null +++ b/vendor/erusev/parsedown/composer.json @@ -0,0 +1,33 @@ +{ + "name": "erusev/parsedown", + "description": "Parser for Markdown.", + "keywords": ["markdown", "parser"], + "homepage": "http://parsedown.org", + "type": "library", + "license": "MIT", + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "require": { + "php": ">=5.3.0", + "ext-mbstring": "*" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "autoload": { + "psr-0": {"Parsedown": ""} + }, + "autoload-dev": { + "psr-0": { + "TestParsedown": "test/", + "ParsedownTest": "test/", + "CommonMarkTest": "test/", + "CommonMarkTestWeak": "test/" + } + } +} diff --git a/vendor/gamegos/php-code-sniffer/.gitignore b/vendor/gamegos/php-code-sniffer/.gitignore new file mode 100644 index 0000000..fcdf7f2 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/.gitignore @@ -0,0 +1,10 @@ +/.buildpath +/.project +/.settings +/.metadata +/.externalToolBuilders +/.idea +/composer.phar +/nbproject/private +/nbproject +/vendor diff --git a/vendor/gamegos/php-code-sniffer/CHANGELOG.md b/vendor/gamegos/php-code-sniffer/CHANGELOG.md new file mode 100644 index 0000000..5b185ff --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/CHANGELOG.md @@ -0,0 +1,11 @@ +# Gamegos PHP Code Sniffer Change Log + +## [0.6.1] - 2017-04-26 +* Fixed sniffing failure for files without class or interface declaration. + +## [0.6.0] - 2017-03-22 +* Updated `PHP_CodeSniffer` version to 2.8.1. +* Improved determining test classes for PHPUnit 6. +* Excluded some of the rules which are added by new PHP_CodeSniffer version: + * `Generic.Formatting.SpaceAfterNot` + * `Squiz.WhiteSpace.ControlStructureSpacing` diff --git a/vendor/gamegos/php-code-sniffer/LICENSE b/vendor/gamegos/php-code-sniffer/LICENSE new file mode 100644 index 0000000..4a99039 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Gamegos Internet Technologies + +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. + diff --git a/vendor/gamegos/php-code-sniffer/README.md b/vendor/gamegos/php-code-sniffer/README.md new file mode 100644 index 0000000..02b5d6a --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/README.md @@ -0,0 +1,182 @@ +# Gamegos PHP Code Sniffer + +Gamegos PHP Code Sniffer is a PHP code standard checker/beautifier/fixer tool +based on [PHP_CodeSniffer] and +includes [custom sniffs](#custom-sniffs) used in PHP projects developed by Gamegos. + +## Requirements + +Gamegos PHP Code Sniffer requires PHP 5.3 or later. + +## Install via Composer + +```json +{ + "require-dev": { + "gamegos/php-code-sniffer": "*" + } +} +``` + +## Binaries + +Binaries are located in `bin` directory but composer installer creates links under +your vendor binary directory depending on your composer configuration. + +* **phpcs :** Checks PHP files against defined coding standard rules. +* **phpcbf :** Corrects fixable coding standard violations. +* **phpcs-pre-commit :** Runs phpcs for modified files in git repository. + +## Pre-Commit Hook +Save the following script as `.git/hooks/pre-commit` by replacing `COMPOSER_BIN_DIR` +as your vendor binary directory name depending on your composer configuration. + +```sh +#!/bin/sh +./COMPOSER_BIN_DIR/phpcs-pre-commit +``` + +Make sure the hook script is executable. + +```sh +chmod +x .git/hooks/pre-commit +``` + +## Customize + +You can customize configuration by adding a file called `phpcs.xml` file into +the root directory of your project. The phpcs.xml file has exactly the same +format as a normal ruleset.xml file, so all the same options are available in +it. You need to define `Gamegos` rule to import all the `Gamegos` rules. + +```xml + + + + +``` + +### Using a custom bootstrap file +You can add custom bootstap files to be included before beginning the run. +Some sniffs need to load classes from your project; so adding a autoload file +will allow sniffs to do this. + +```xml + + + + + +``` + +## Imported Standards + +### PSR2 +All PSR2 sniffs except `Squiz.WhiteSpace.ControlStructureSpacing` are imported by default. +* `PSR2.ControlStructures.ElseIfDeclaration.NotAllowed` rule type is considered as `error` instead of `warning`. + +### Generic +Imported sniffs: +* All sniffs in `Generic.Formatting` category except: + * `DisallowMultipleStatements` (replaced by [`Gamegos.Formatting.DisallowMultipleStatements`](#gamegosformattingdisallowmultiplestatements)) + * `NoSpaceAfterCast` + * `SpaceAfterNot` +* `Generic.Arrays.DisallowLongArraySyntax` + +### Squiz +Imported sniffs: +* `Squiz.Commenting.DocCommentAlignment` +* `Squiz.Commenting.InlineComment` + * `InvalidEndChar` rule type is considered as `warning` instead of `error`. +* `Squiz.WhiteSpace.SuperfluousWhitespace` +* `Squiz.WhiteSpace.OperatorSpacing` + +## Custom Sniffs + +### Gamegos.Arrays.ArrayDeclaration +* Extended from `Squiz.Arrays.ArrayDeclaration`. +* Arranged array element indents by start position of the first (declaration) line. +* Number of spaces before array elements is increased from 1 to 4. +* Removed rules: + * `NoKeySpecified` + * `KeySpecified` + * `MultiLineNotAllowed` + * `NoCommaAfterLast` + * `NoComma` + +### Gamegos.Commenting.DocComment +* Extended from `Generic.Commenting.DocComment`. +* Ignored `MissingShort` rule for PHPUnit test class methods [[1]](#fn1). +* Changed `MissingShort` rule type from `error` to `warning`. +* Removed rules for comments with long descriptions: + * `SpacingBetween` + * `LongNotCapital` + * `SpacingBeforeTags` + * `ParamGroup` + * `NonParamGroup` + * `SpacingAfterTagGroup` + * `TagValueIndent` + * `ParamNotFirst` + * `TagsNotGrouped` + +### Gamegos.Commenting.FunctionComment +* Extended from `PEAR.Commenting.FunctionComment`. +* Added PHPUnit test class control for methods without doc comment [[1]](#fn1). +* Added `{@inheritdoc}` validation for overrided methods [[1]](#fn1). +* Removed `MissingParamComment`, `MissingReturn`, `SpacingAfterParamType` and `SpacingAfterParamName` rules. +* Ignored `MissingParamTag` rule for PHPUnit test class methods [[1]](#fn1). + +### Gamegos.Commenting.VariableComment +* Extended from `Squiz.Commenting.VariableComment`. +* Added `bool` and `int` into allowed variable types. + +### Gamegos.Formatting.DisallowMultipleStatements +* Extended from `Generic.Formatting.DisallowMultipleStatements`. +* Fixed adding 2 blank lines when applying `SameLine` fixer with `Squiz.Functions.MultiLineFunctionDeclaration.ContentAfterBrace` fixer together. + +### Gamegos.Strings.ConcatenationSpacing +This sniff has two rules and fixes. +* `PaddingFound`: There must be only one space between the concatenation operator (.) and the strings being concatenated. +* `NotAligned`: Multiline string concatenations must be aligned. + +### Gamegos.WhiteSpace.FunctionSpacing +* Extended from `Squiz.WhiteSpace.FunctionSpacing`. +* Expected no blank lines before the method which is the first defined element of a class. +* Expected no blank lines after the method which is the last defined element of a class. +* Fixed fixing spaces before method definitions. + +### Gamegos.WhiteSpace.MemberVarSpacing +* Extended from `Squiz.WhiteSpace.MemberVarSpacing`. +* Expected no blank lines before the property which is the first defined element of a class. +* Fixed fixing spaces before property definitions. + +## Development + +### Live Testing +You can test any modifications by running [phpcs.php](scripts/phpcs.php), [phpcbf.php](scripts/phpcbf.php) and +[phpcs-pre-commit.php](scripts/phpcs-pre-commit.php) scripts under `scripts` directory. + +### Building Binaries +Run the command below to re-build binaries: + +```sh +php scripts/build.php +``` + +### PHP_CodeSniffer Dependency +Current version is built on [PHP_CodeSniffer 2.8.1](https://github.com/squizlabs/PHP_CodeSniffer/releases/tag/2.8.1) +which is locked in [composer.lock](composer.lock) file. To import new versions; edit [composer.json](composer.json) file if required and +run `composer update` command, then commit the modified [composer.lock](composer.lock) file. Updating [PHP_CodeSniffer] version may +break some of [Gamegos sniffs](#custom-sniffs), so you must carefully track any changes on [PHP_CodeSniffer] before updating. + +___ +[1] A class loader is required (eg. via a bootstrap file), +otherwise a warning (`Internal.Gamegos.NeedClassLoader`) will be generated. +You can override this rule in `phpcs.xml` file in your project to prevent warnings. +[↩](#fn1c1) [↩](#fn1c2) [↩](#fn1c3) [↩](#fn1c4) +___ +#### License Notices +[PHP_CodeSniffer] is licensed under the [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) license. + +[PHP_CodeSniffer]: https://github.com/squizlabs/PHP_CodeSniffer + diff --git a/vendor/gamegos/php-code-sniffer/bin/phpcbf b/vendor/gamegos/php-code-sniffer/bin/phpcbf new file mode 100755 index 0000000..d8406a4 Binary files /dev/null and b/vendor/gamegos/php-code-sniffer/bin/phpcbf differ diff --git a/vendor/gamegos/php-code-sniffer/bin/phpcs b/vendor/gamegos/php-code-sniffer/bin/phpcs new file mode 100755 index 0000000..51af57b Binary files /dev/null and b/vendor/gamegos/php-code-sniffer/bin/phpcs differ diff --git a/vendor/gamegos/php-code-sniffer/bin/phpcs-pre-commit b/vendor/gamegos/php-code-sniffer/bin/phpcs-pre-commit new file mode 100755 index 0000000..e9ed361 Binary files /dev/null and b/vendor/gamegos/php-code-sniffer/bin/phpcs-pre-commit differ diff --git a/vendor/gamegos/php-code-sniffer/composer.json b/vendor/gamegos/php-code-sniffer/composer.json new file mode 100644 index 0000000..e706959 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/composer.json @@ -0,0 +1,28 @@ +{ + "name": "gamegos/php-code-sniffer", + "type": "library", + "license": "MIT", + "description": "Gamegos PHP Code Sniffer", + "autoload": { + "psr-4": { + "": "src/" + } + }, + "bin" : [ + "bin/phpcs", + "bin/phpcs-pre-commit", + "bin/phpcbf" + ], + "require": { + "php": ">=5.3.10" + }, + "require-dev": { + "squizlabs/php_codesniffer": "2.*" + }, + "authors": [ + { + "name": "Safak Ozpinar", + "email": "safak@gamegos.com" + } + ] +} diff --git a/vendor/gamegos/php-code-sniffer/composer.lock b/vendor/gamegos/php-code-sniffer/composer.lock new file mode 100644 index 0000000..b5f9e09 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/composer.lock @@ -0,0 +1,98 @@ +{ + "_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#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "527cf4fe66dca55c29087346c8da494c", + "packages": [], + "packages-dev": [ + { + "name": "squizlabs/php_codesniffer", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d", + "reference": "d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-03-01T22:17:45+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.3.10" + }, + "platform-dev": [] +} diff --git a/vendor/gamegos/php-code-sniffer/scripts/build.php b/vendor/gamegos/php-code-sniffer/scripts/build.php new file mode 100644 index 0000000..edacf4c --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/scripts/build.php @@ -0,0 +1,18 @@ + dirname(__DIR__) . '/src', + 'default_standard' => 'Gamegos', + 'php_path' => 'php', + 'report_width' => 80 +); + +return new PHP_CodeSniffer_CLI(); \ No newline at end of file diff --git a/vendor/gamegos/php-code-sniffer/scripts/create-phar.php b/vendor/gamegos/php-code-sniffer/scripts/create-phar.php new file mode 100644 index 0000000..2eb77da --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/scripts/create-phar.php @@ -0,0 +1,55 @@ +startBuffering(); + +$directories = array( + 'src', + 'vendor', + 'scripts' +); + +foreach ($directories as $dirname) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirname)); + while ($iterator->valid()) { + if ($iterator->isFile()) { + $path = $iterator->getPathName(); + if ('php' == strtolower($iterator->getExtension())) { + $contents = php_strip_whitespace($path); + $phar->addFromString($path, $contents); + } else { + $phar->addFile($path); + } + } + $iterator->next(); + } +} + +$stub = "#!/usr/bin/env php\n" + . $phar->createDefaultStub($scriptFilename); +$phar->setStub($stub); + +$phar->compressFiles(Phar::GZ); + +$phar->stopBuffering(); + +rename($pharFilename, $binaryFilename); +chmod($binaryFilename, 0775); diff --git a/vendor/gamegos/php-code-sniffer/scripts/phpcbf.php b/vendor/gamegos/php-code-sniffer/scripts/phpcbf.php new file mode 100644 index 0000000..b48a2d4 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/scripts/phpcbf.php @@ -0,0 +1,3 @@ +runphpcbf(); diff --git a/vendor/gamegos/php-code-sniffer/scripts/phpcs-pre-commit.php b/vendor/gamegos/php-code-sniffer/scripts/phpcs-pre-commit.php new file mode 100644 index 0000000..72f1e85 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/scripts/phpcs-pre-commit.php @@ -0,0 +1,40 @@ +runphpcs(); diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/ClassHelper.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/ClassHelper.php new file mode 100644 index 0000000..8116cc0 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/ClassHelper.php @@ -0,0 +1,145 @@ + + */ +class ClassHelper +{ + /** + * CodeSniffer file reference + * @var \PHP_CodeSniffer_File + */ + protected $phpcsFile; + + /** + * Cache for class parents and interfaces. + * @var array + */ + protected $parentsAndInterfaces; + + /** + * Cache for test classes indexed by stack pointer. + * @var array + */ + protected $testClasses = array(); + + /** + * Cache for test class methods indexed by stack pointer. + * @var array + */ + protected $testClassMethods = array(); + + /** + * PHPUnit test class prototypes + * @var array + */ + protected static $testClassPrototypes = array( + 'PHPUnit_Framework_TestCase', + 'PHPUnit\\Framework\\TestCase', + ); + + /** + * Constructor + * @param \PHP_CodeSniffer_File $phpcsFile + */ + public function __construct(PHP_CodeSniffer_File $phpcsFile) + { + $this->phpcsFile = $phpcsFile; + } + + /** + * Get class parents and interfaces. + * Returns array of class and interface names or false if the class cannot be loaded. + * @param int $stackPtr + * @param string $reason + * @return array|bool + */ + public function getClassParentsAndInterfaces($stackPtr, $reason) + { + if (null === $this->parentsAndInterfaces) { + $phpcsFile = $this->phpcsFile; + $tokens = $phpcsFile->getTokens(); + $nsStart = $phpcsFile->findNext(array(T_NAMESPACE), 0); + $class = ''; + + // Set the default return value. + $this->parentsAndInterfaces = false; + + // Build the namespace. + if (false !== $nsStart) { + $nsEnd = $phpcsFile->findNext(array(T_SEMICOLON), $nsStart + 2); + for ($i = $nsStart + 2; $i < $nsEnd; $i++) { + $class .= $tokens[$i]['content']; + } + $class .= '\\'; + } else { + $nsEnd = 0; + } + + // Find the class/interface declaration. + $classPtr = $phpcsFile->findNext(array(T_CLASS, T_INTERFACE), $nsEnd); + if (false !== $classPtr) { + $class .= $phpcsFile->getDeclarationName($classPtr); + if (class_exists($class) || interface_exists($class)) { + $this->parentsAndInterfaces = array_merge(class_parents($class), class_implements($class)); + } else { + $warning = 'Need class loader to ' . $reason; + $phpcsFile->addWarning($warning, $stackPtr, 'Internal.Gamegos.NeedClassLoader'); + } + } + } + return $this->parentsAndInterfaces; + } + + /** + * Check if a class is a PHPUnit test class. + * @param int $stackPtr + * @return bool + */ + public function isTestClass($stackPtr) + { + if (!array_key_exists($stackPtr, $this->testClasses)) { + $this->testClasses[$stackPtr] = false; + + $classes = $this->getClassParentsAndInterfaces($stackPtr, 'check for PHPUnit test class'); + if (false !== $classes) { + foreach ($classes as $class) { + if (in_array($class, self::$testClassPrototypes)) { + $this->testClasses[$stackPtr] = true; + break; + } + } + } + } + return $this->testClasses[$stackPtr]; + } + + /** + * Check if a method is a PHPUnit test class method. + * @param int $stackPtr + * @return bool + */ + public function isTestClassMethod($stackPtr) + { + if (!array_key_exists($stackPtr, $this->testClassMethods)) { + $this->testClassMethods[$stackPtr] = false; + if ($this->isTestClass($stackPtr)) { + $props = $this->phpcsFile->getMethodProperties($stackPtr); + if ('public' == $props['scope'] + && !$props['is_abstract'] + && !$props['is_closure'] + && stripos($this->phpcsFile->getDeclarationName($stackPtr), 'test') === 0 + ) { + $this->testClassMethods[$stackPtr] = true; + } + } + } + return $this->testClassMethods[$stackPtr]; + } +} diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/RulesetHelper.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/RulesetHelper.php new file mode 100644 index 0000000..d2bf28e --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/CodeSniffer/Helpers/RulesetHelper.php @@ -0,0 +1,144 @@ + + */ +class RulesetHelper +{ + /** + * CodeSniffer file reference + * @var \PHP_CodeSniffer_File + */ + protected $phpcsFile; + + /** + * Reflection object to access non-public fields of CodeSniffer file. + * @var \ReflectionProperty + */ + protected $reflection; + + /** + * Current ruleset + * @var array + */ + protected $current; + + /** + * Original ruleset to be restored. + * @var array + */ + protected $backup; + + /** + * Constructor + * @param \PHP_CodeSniffer_File $phpcsFile + */ + public function __construct(PHP_CodeSniffer_File $phpcsFile) + { + $this->phpcsFile = $phpcsFile; + $this->reflection = new ReflectionProperty($this->phpcsFile, 'ruleset'); + $this->reflection->setAccessible(true); + $this->current = $this->reflection->getValue($this->phpcsFile); + $this->backup = $this->current; + } + + /** + * Restore before destruct. + */ + public function __destruct() + { + $this->restore(); + } + + /** + * Set severity of a rule. + * @param string $rule + * @param int $severity + */ + public function setRuleSeverity($rule, $severity) + { + $this->updateRuleProperty($rule, 'severity', $severity); + } + + /** + * Set type of a rule. + * @param string $rule + * @param string $type + */ + public function setRuleType($rule, $type) + { + $this->updateRuleProperty($rule, 'type', $type); + } + + /** + * Set property of a sniff. + * @param string $sniff + * @param string $property + * @param mixed $value + */ + public function setSniffProperty($sniff, $property, $value) + { + $this->updateSniffProperty($sniff, $property, $value); + } + + /** + * Restore rules. + */ + public function restore() + { + $this->current = $this->backup; + $this->commit(); + } + + /** + * Update a property of a rule. + * @param string $rule + * @param string $key + * @param mixed $value + * @throws \InvalidArgumentException + */ + protected function updateRuleProperty($rule, $key, $value) + { + if (preg_match('/^[^.]+(\.[^.]+){3}$/', $rule)) { + $this->current[$rule][$key] = $value; + $this->commit(); + } else { + throw new InvalidArgumentException('Invalid rule name!'); + } + } + + /** + * Update a property of a sniff. + * @param string $sniff + * @param string $key + * @param mixed $value + * @throws \InvalidArgumentException + */ + protected function updateSniffProperty($sniff, $key, $value) + { + if (preg_match('/^[^.]+(\.[^.]+){2}$/', $sniff)) { + $this->current[$sniff]['properties'][$key] = $value; + $this->commit(); + } else { + throw new InvalidArgumentException('Invalid sniff name!'); + } + } + + /** + * Commit changes to the CodeSniffer file. + */ + protected function commit() + { + $this->reflection->setValue($this->phpcsFile, $this->current); + } +} diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Arrays/ArrayDeclarationSniff.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Arrays/ArrayDeclarationSniff.php new file mode 100644 index 0000000..a1255b9 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Arrays/ArrayDeclarationSniff.php @@ -0,0 +1,537 @@ +getTokens(); + // [1] Arranged array element indents by start position of the first (declaration) line. + $firstLineStart = $tokens[$phpcsFile->findFirstOnLine(T_WHITESPACE, $arrayStart, true)]['column']; + + // Check the closing bracket is on a new line. + $lastContent = $phpcsFile->findPrevious(T_WHITESPACE, ($arrayEnd - 1), $arrayStart, true); + if ($tokens[$lastContent]['line'] === $tokens[$arrayEnd]['line']) { + $error = 'Closing parenthesis of array declaration must be on a new line'; + $fix = $phpcsFile->addFixableError($error, $arrayEnd, 'CloseBraceNewLine'); + if ($fix === true) { + $phpcsFile->fixer->addNewlineBefore($arrayEnd); + } + } elseif ($tokens[$arrayEnd]['column'] !== $firstLineStart) { + // Check the closing bracket is lined up under the "a" in array. + $expected = ($firstLineStart - 1); + $found = ($tokens[$arrayEnd]['column'] - 1); + $error = 'Closing parenthesis not aligned correctly; expected %s space(s) but found %s'; + $data = array( + $expected, + $found, + ); + + $fix = $phpcsFile->addFixableError($error, $arrayEnd, 'CloseBraceNotAligned', $data); + if ($fix === true) { + if ($found === 0) { + $phpcsFile->fixer->addContent(($arrayEnd - 1), str_repeat(' ', $expected)); + } else { + $phpcsFile->fixer->replaceToken(($arrayEnd - 1), str_repeat(' ', $expected)); + } + } + }//end if + + $nextToken = $stackPtr; + $keyUsed = false; + $singleUsed = false; + $indices = array(); + $maxLength = 0; + + if ($tokens[$stackPtr]['code'] === T_ARRAY) { + $lastToken = $tokens[$stackPtr]['parenthesis_opener']; + } else { + $lastToken = $stackPtr; + } + + // Find all the double arrows that reside in this scope. + for ($nextToken = ($stackPtr + 1); $nextToken < $arrayEnd; $nextToken++) { + // Skip bracketed statements, like function calls. + if ($tokens[$nextToken]['code'] === T_OPEN_PARENTHESIS + && (isset($tokens[$nextToken]['parenthesis_owner']) === false + || $tokens[$nextToken]['parenthesis_owner'] !== $stackPtr) + ) { + $nextToken = $tokens[$nextToken]['parenthesis_closer']; + continue; + } + + if ($tokens[$nextToken]['code'] === T_ARRAY) { + // Let subsequent calls of this test handle nested arrays. + if ($tokens[$lastToken]['code'] !== T_DOUBLE_ARROW) { + $indices[] = array('value' => $nextToken); + $lastToken = $nextToken; + } + + $nextToken = $tokens[$tokens[$nextToken]['parenthesis_opener']]['parenthesis_closer']; + $nextToken = $phpcsFile->findNext(T_WHITESPACE, ($nextToken + 1), null, true); + if ($tokens[$nextToken]['code'] !== T_COMMA) { + $nextToken--; + } else { + $lastToken = $nextToken; + } + + continue; + } + + if ($tokens[$nextToken]['code'] === T_OPEN_SHORT_ARRAY) { + // Let subsequent calls of this test handle nested arrays. + if ($tokens[$lastToken]['code'] !== T_DOUBLE_ARROW) { + $indices[] = array('value' => $nextToken); + $lastToken = $nextToken; + } + + $nextToken = $tokens[$nextToken]['bracket_closer']; + $nextToken = $phpcsFile->findNext(T_WHITESPACE, ($nextToken + 1), null, true); + if ($tokens[$nextToken]['code'] !== T_COMMA) { + $nextToken--; + } else { + $lastToken = $nextToken; + } + + continue; + } + + if ($tokens[$nextToken]['code'] === T_CLOSURE) { + if ($tokens[$lastToken]['code'] !== T_DOUBLE_ARROW) { + $indices[] = array('value' => $nextToken); + $lastToken = $nextToken; + } + + $nextToken = $tokens[$nextToken]['scope_closer']; + $nextToken = $phpcsFile->findNext(T_WHITESPACE, ($nextToken + 1), null, true); + if ($tokens[$nextToken]['code'] !== T_COMMA) { + $nextToken--; + } else { + $lastToken = $nextToken; + } + + continue; + } + + if ($tokens[$nextToken]['code'] !== T_DOUBLE_ARROW + && $tokens[$nextToken]['code'] !== T_COMMA + ) { + continue; + } + + $currentEntry = array(); + + if ($tokens[$nextToken]['code'] === T_COMMA) { + $stackPtrCount = 0; + if (isset($tokens[$stackPtr]['nested_parenthesis']) === true) { + $stackPtrCount = count($tokens[$stackPtr]['nested_parenthesis']); + } + + $commaCount = 0; + if (isset($tokens[$nextToken]['nested_parenthesis']) === true) { + $commaCount = count($tokens[$nextToken]['nested_parenthesis']); + if ($tokens[$stackPtr]['code'] === T_ARRAY) { + // Remove parenthesis that are used to define the array. + $commaCount--; + } + } + + if ($commaCount > $stackPtrCount) { + // This comma is inside more parenthesis than the ARRAY keyword, + // then there it is actually a comma used to separate arguments + // in a function call. + continue; + } + + if ($keyUsed === true && $tokens[$lastToken]['code'] === T_COMMA) { + // [3] Removed NoKeySpecified rule. + } + + if ($keyUsed === false) { + if ($tokens[($nextToken - 1)]['code'] === T_WHITESPACE) { + $content = $tokens[($nextToken - 2)]['content']; + if ($tokens[($nextToken - 1)]['content'] === $phpcsFile->eolChar) { + $spaceLength = 'newline'; + } else { + $spaceLength = $tokens[($nextToken - 1)]['length']; + } + + $error = 'Expected 0 spaces between "%s" and comma; %s found'; + $data = array( + $content, + $spaceLength, + ); + + $fix = $phpcsFile->addFixableError($error, $nextToken, 'SpaceBeforeComma', $data); + if ($fix === true) { + $phpcsFile->fixer->replaceToken(($nextToken - 1), ''); + } + } + + $valueContent = $phpcsFile->findNext( + PHP_CodeSniffer_Tokens::$emptyTokens, + ($lastToken + 1), + $nextToken, + true + ); + + $indices[] = array('value' => $valueContent); + $singleUsed = true; + }//end if + + $lastToken = $nextToken; + continue; + }//end if + + if ($tokens[$nextToken]['code'] === T_DOUBLE_ARROW) { + if ($singleUsed === true) { + // [4] Removed KeySpecified rule. + } + + $currentEntry['arrow'] = $nextToken; + $keyUsed = true; + + // Find the start of index that uses this double arrow. + $indexEnd = $phpcsFile->findPrevious(T_WHITESPACE, ($nextToken - 1), $arrayStart, true); + $indexStart = $phpcsFile->findStartOfStatement($indexEnd); + + if ($indexStart === $indexEnd) { + $currentEntry['index'] = $indexEnd; + $currentEntry['index_content'] = $tokens[$indexEnd]['content']; + } else { + $currentEntry['index'] = $indexStart; + $currentEntry['index_content'] = $phpcsFile->getTokensAsString($indexStart, ($indexEnd - $indexStart + 1)); + } + + $indexLength = strlen($currentEntry['index_content']); + if ($maxLength < $indexLength) { + $maxLength = $indexLength; + } + + // Find the value of this index. + $nextContent = $phpcsFile->findNext( + PHP_CodeSniffer_Tokens::$emptyTokens, + ($nextToken + 1), + $arrayEnd, + true + ); + + $currentEntry['value'] = $nextContent; + $indices[] = $currentEntry; + $lastToken = $nextToken; + }//end if + }//end for + + /* [5] Removed MultiLineNotAllowed rule. */ + + /* + This section checks for arrays that don't specify keys. + + Arrays such as: + array( + 'aaa', + 'bbb', + 'd', + ); + */ + + if ($keyUsed === false && empty($indices) === false) { + $count = count($indices); + $lastIndex = $indices[($count - 1)]['value']; + + $trailingContent = $phpcsFile->findPrevious( + PHP_CodeSniffer_Tokens::$emptyTokens, + ($arrayEnd - 1), + $lastIndex, + true + ); + + if ($tokens[$trailingContent]['code'] !== T_COMMA) { + $phpcsFile->recordMetric($stackPtr, 'Array end comma', 'no'); + // [6] Removed NoCommaAfterLast rule. + } else { + $phpcsFile->recordMetric($stackPtr, 'Array end comma', 'yes'); + } + + $lastValueLine = false; + foreach ($indices as $value) { + if (empty($value['value']) === true) { + // Array was malformed and we couldn't figure out + // the array value correctly, so we have to ignore it. + // Other parts of this sniff will correct the error. + continue; + } + + if ($lastValueLine !== false && $tokens[$value['value']]['line'] === $lastValueLine) { + $error = 'Each value in a multi-line array must be on a new line'; + $fix = $phpcsFile->addFixableError($error, $value['value'], 'ValueNoNewline'); + if ($fix === true) { + if ($tokens[($value['value'] - 1)]['code'] === T_WHITESPACE) { + $phpcsFile->fixer->replaceToken(($value['value'] - 1), ''); + } + + $phpcsFile->fixer->addNewlineBefore($value['value']); + } + } elseif ($tokens[($value['value'] - 1)]['code'] === T_WHITESPACE) { + // [2] Number of spaces before array elements is increased from 1 to 4. + $expected = $firstLineStart + 3; + + $first = $phpcsFile->findFirstOnLine(T_WHITESPACE, $value['value'], true); + $found = ($tokens[$first]['column'] - 1); + if ($found !== $expected) { + $error = 'Array value not aligned correctly; expected %s spaces but found %s'; + $data = array( + $expected, + $found, + ); + + $fix = $phpcsFile->addFixableError($error, $value['value'], 'ValueNotAligned', $data); + if ($fix === true) { + if ($found === 0) { + $phpcsFile->fixer->addContent(($value['value'] - 1), str_repeat(' ', $expected)); + } else { + $phpcsFile->fixer->replaceToken(($value['value'] - 1), str_repeat(' ', $expected)); + } + } + } + }//end if + + $lastValueLine = $tokens[$value['value']]['line']; + }//end foreach + }//end if + + /* + Below the actual indentation of the array is checked. + Errors will be thrown when a key is not aligned, when + a double arrow is not aligned, and when a value is not + aligned correctly. + If an error is found in one of the above areas, then errors + are not reported for the rest of the line to avoid reporting + spaces and columns incorrectly. Often fixing the first + problem will fix the other 2 anyway. + + For example: + + $a = array( + 'index' => '2', + ); + + or + + $a = [ + 'index' => '2', + ]; + + In this array, the double arrow is indented too far, but this + will also cause an error in the value's alignment. If the arrow were + to be moved back one space however, then both errors would be fixed. + */ + + $numValues = count($indices); + + $indicesStart = ($firstLineStart + 4); + $arrowStart = ($indicesStart + $maxLength + 1); + $valueStart = ($arrowStart + 3); + $indexLine = $tokens[$stackPtr]['line']; + $lastIndexLine = null; + foreach ($indices as $index) { + if (isset($index['index']) === false) { + // Array value only. + if ($tokens[$index['value']]['line'] === $tokens[$stackPtr]['line'] && $numValues > 1) { + $error = 'The first value in a multi-value array must be on a new line'; + $fix = $phpcsFile->addFixableError($error, $stackPtr, 'FirstValueNoNewline'); + if ($fix === true) { + $phpcsFile->fixer->addNewlineBefore($index['value']); + } + } + + continue; + } + + $lastIndexLine = $indexLine; + $indexLine = $tokens[$index['index']]['line']; + + if ($indexLine === $tokens[$stackPtr]['line']) { + $error = 'The first index in a multi-value array must be on a new line'; + $fix = $phpcsFile->addFixableError($error, $index['index'], 'FirstIndexNoNewline'); + if ($fix === true) { + $phpcsFile->fixer->addNewlineBefore($index['index']); + } + + continue; + } + + if ($indexLine === $lastIndexLine) { + $error = 'Each index in a multi-line array must be on a new line'; + $fix = $phpcsFile->addFixableError($error, $index['index'], 'IndexNoNewline'); + if ($fix === true) { + if ($tokens[($index['index'] - 1)]['code'] === T_WHITESPACE) { + $phpcsFile->fixer->replaceToken(($index['index'] - 1), ''); + } + + $phpcsFile->fixer->addNewlineBefore($index['index']); + } + + continue; + } + + if ($tokens[$index['index']]['column'] !== $indicesStart) { + $expected = ($indicesStart - 1); + $found = ($tokens[$index['index']]['column'] - 1); + $error = 'Array key not aligned correctly; expected %s spaces but found %s'; + $data = array( + $expected, + $found, + ); + + $fix = $phpcsFile->addFixableError($error, $index['index'], 'KeyNotAligned', $data); + if ($fix === true) { + if ($found === 0) { + $phpcsFile->fixer->addContent(($index['index'] - 1), str_repeat(' ', $expected)); + } else { + $phpcsFile->fixer->replaceToken(($index['index'] - 1), str_repeat(' ', $expected)); + } + } + + continue; + } + + if ($tokens[$index['arrow']]['column'] !== $arrowStart) { + $expected = ($arrowStart - (strlen($index['index_content']) + $tokens[$index['index']]['column'])); + $found = ($tokens[$index['arrow']]['column'] - (strlen($index['index_content']) + $tokens[$index['index']]['column'])); + $error = 'Array double arrow not aligned correctly; expected %s space(s) but found %s'; + $data = array( + $expected, + $found, + ); + + $fix = $phpcsFile->addFixableError($error, $index['arrow'], 'DoubleArrowNotAligned', $data); + if ($fix === true) { + if ($found === 0) { + $phpcsFile->fixer->addContent(($index['arrow'] - 1), str_repeat(' ', $expected)); + } else { + $phpcsFile->fixer->replaceToken(($index['arrow'] - 1), str_repeat(' ', $expected)); + } + } + + continue; + } + + if ($tokens[$index['value']]['column'] !== $valueStart) { + $expected = ($valueStart - ($tokens[$index['arrow']]['length'] + $tokens[$index['arrow']]['column'])); + $found = ($tokens[$index['value']]['column'] - ($tokens[$index['arrow']]['length'] + $tokens[$index['arrow']]['column'])); + if ($found < 0) { + $found = 'newline'; + } + + $error = 'Array value not aligned correctly; expected %s space(s) but found %s'; + $data = array( + $expected, + $found, + ); + + $fix = $phpcsFile->addFixableError($error, $index['arrow'], 'ValueNotAligned', $data); + if ($fix === true) { + if ($found === 'newline') { + $prev = $phpcsFile->findPrevious(T_WHITESPACE, ($index['value'] - 1), null, true); + $phpcsFile->fixer->beginChangeset(); + for ($i = ($prev + 1); $i < $index['value']; $i++) { + $phpcsFile->fixer->replaceToken($i, ''); + } + + $phpcsFile->fixer->replaceToken(($index['value'] - 1), str_repeat(' ', $expected)); + $phpcsFile->fixer->endChangeset(); + } elseif ($found === 0) { + $phpcsFile->fixer->addContent(($index['value'] - 1), str_repeat(' ', $expected)); + } else { + $phpcsFile->fixer->replaceToken(($index['value'] - 1), str_repeat(' ', $expected)); + } + } + }//end if + + // Check each line ends in a comma. + $valueLine = $tokens[$index['value']]['line']; + $nextComma = false; + for ($i = $index['value']; $i < $arrayEnd; $i++) { + // Skip bracketed statements, like function calls. + if ($tokens[$i]['code'] === T_OPEN_PARENTHESIS) { + $i = $tokens[$i]['parenthesis_closer']; + $valueLine = $tokens[$i]['line']; + continue; + } + + if ($tokens[$i]['code'] === T_ARRAY) { + $i = $tokens[$tokens[$i]['parenthesis_opener']]['parenthesis_closer']; + $valueLine = $tokens[$i]['line']; + continue; + } + + // Skip to the end of multi-line strings. + if (isset(PHP_CodeSniffer_Tokens::$stringTokens[$tokens[$i]['code']]) === true) { + $i = $phpcsFile->findNext($tokens[$i]['code'], ($i + 1), null, true); + $i--; + $valueLine = $tokens[$i]['line']; + continue; + } + + if ($tokens[$i]['code'] === T_OPEN_SHORT_ARRAY) { + $i = $tokens[$i]['bracket_closer']; + $valueLine = $tokens[$i]['line']; + continue; + } + + if ($tokens[$i]['code'] === T_CLOSURE) { + $i = $tokens[$i]['scope_closer']; + $valueLine = $tokens[$i]['line']; + continue; + } + + if ($tokens[$i]['code'] === T_COMMA) { + $nextComma = $i; + break; + } + }//end for + + if ($nextComma === false || ($tokens[$nextComma]['line'] !== $valueLine)) { + // [7] Removed NoComma rule. + } + + // Check that there is no space before the comma. + if ($nextComma !== false && $tokens[($nextComma - 1)]['code'] === T_WHITESPACE) { + $content = $tokens[($nextComma - 2)]['content']; + $spaceLength = $tokens[($nextComma - 1)]['length']; + $error = 'Expected 0 spaces between "%s" and comma; %s found'; + $data = array( + $content, + $spaceLength, + ); + + $fix = $phpcsFile->addFixableError($error, $nextComma, 'SpaceBeforeComma', $data); + if ($fix === true) { + $phpcsFile->fixer->replaceToken(($nextComma - 1), ''); + } + } + }//end foreach + + }//end processMultiLineArray() +}//end class diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/DocCommentSniff.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/DocCommentSniff.php new file mode 100644 index 0000000..ad1d54b --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/DocCommentSniff.php @@ -0,0 +1,178 @@ +getTokens(); + $commentStart = $stackPtr; + $commentEnd = $tokens[$stackPtr]['comment_closer']; + + $empty = array( + T_DOC_COMMENT_WHITESPACE, + T_DOC_COMMENT_STAR, + ); + + $short = $phpcsFile->findNext($empty, ($stackPtr + 1), $commentEnd, true); + if ($short === false) { + // No content at all. + $error = 'Doc comment is empty'; + $phpcsFile->addError($error, $stackPtr, 'Empty'); + return; + } + + // The first line of the comment should just be the /** code. + if ($tokens[$short]['line'] === $tokens[$stackPtr]['line']) { + $error = 'The open comment tag must be the only content on the line'; + $fix = $phpcsFile->addFixableError($error, $stackPtr, 'ContentAfterOpen'); + if ($fix === true) { + $phpcsFile->fixer->beginChangeset(); + $phpcsFile->fixer->addNewline($stackPtr); + $phpcsFile->fixer->addContentBefore($short, '* '); + $phpcsFile->fixer->endChangeset(); + } + } + + // The last line of the comment should just be the */ code. + $prev = $phpcsFile->findPrevious($empty, ($commentEnd - 1), $stackPtr, true); + if ($tokens[$prev]['line'] === $tokens[$commentEnd]['line']) { + $error = 'The close comment tag must be the only content on the line'; + $fix = $phpcsFile->addFixableError($error, $commentEnd, 'ContentBeforeClose'); + if ($fix === true) { + $phpcsFile->fixer->addNewlineBefore($commentEnd); + } + } + + // Check for additional blank lines at the end of the comment. + if ($tokens[$prev]['line'] < ($tokens[$commentEnd]['line'] - 1)) { + $error = 'Additional blank lines found at end of doc comment'; + $fix = $phpcsFile->addFixableError($error, $commentEnd, 'SpacingAfter'); + if ($fix === true) { + $phpcsFile->fixer->beginChangeset(); + for ($i = ($prev + 1); $i < $commentEnd; $i++) { + if ($tokens[($i + 1)]['line'] === $tokens[$commentEnd]['line']) { + break; + } + + $phpcsFile->fixer->replaceToken($i, ''); + } + + $phpcsFile->fixer->endChangeset(); + } + } + + // Check for a comment description. + if ($tokens[$short]['code'] !== T_DOC_COMMENT_STRING) { + // [1] Ignored MissingShort rule for PHPUnit test class methods. + if (!$this->isTestClassMethodComment($phpcsFile, $commentEnd)) { + $error = 'Missing short description in doc comment'; + // [2] Changed MissingShort rule type from error to warning. + $phpcsFile->addWarning($error, $stackPtr, 'MissingShort'); + return; + } + } + + // No extra newline before short description. + if ($tokens[$short]['line'] !== ($tokens[$stackPtr]['line'] + 1)) { + $error = 'Doc comment short description must be on the first line'; + $fix = $phpcsFile->addFixableError($error, $short, 'SpacingBeforeShort'); + if ($fix === true) { + $phpcsFile->fixer->beginChangeset(); + for ($i = $stackPtr; $i < $short; $i++) { + if ($tokens[$i]['line'] === $tokens[$stackPtr]['line']) { + continue; + } elseif ($tokens[$i]['line'] === $tokens[$short]['line']) { + break; + } + + $phpcsFile->fixer->replaceToken($i, ''); + } + + $phpcsFile->fixer->endChangeset(); + } + } + + // Account for the fact that a short description might cover + // multiple lines. + $shortContent = $tokens[$short]['content']; + $shortEnd = $short; + for ($i = ($short + 1); $i < $commentEnd; $i++) { + if ($tokens[$i]['code'] === T_DOC_COMMENT_STRING) { + if ($tokens[$i]['line'] === ($tokens[$shortEnd]['line'] + 1)) { + $shortContent .= $tokens[$i]['content']; + $shortEnd = $i; + } else { + break; + } + } + } + + if (preg_match('/\p{Lu}|\P{L}/u', $shortContent[0]) === 0) { + $error = 'Doc comment short description must start with a capital letter'; + $phpcsFile->addError($error, $short, 'ShortNotCapital'); + } + + // [3] Removed rules for comments with long descriptions. + } + + /** + * Check i f a token is a test class method comment. + * @param \PHP_CodeSniffer_File $phpcsFile + * @param int $commentEnd + * @return bool + * @author Safak Ozpinar + */ + protected function isTestClassMethodComment(PHP_CodeSniffer_File $phpcsFile, $commentEnd) + { + $method = $this->getCommentMethod($phpcsFile, $commentEnd); + if (false !== $method) { + $classHelper = new ClassHelper($phpcsFile); + return $classHelper->isTestClassMethod($method); + } + return false; + } + + /** + * Get the method token if current token is a method comment. + * Returns false if no method found for the comment. + * @param \PHP_CodeSniffer_File $phpcsFile + * @param int $commentEnd + * @return int|bool + * @author Safak Ozpinar + */ + protected function getCommentMethod(PHP_CodeSniffer_File $phpcsFile, $commentEnd) + { + $tokens = $phpcsFile->getTokens(); + $next = $phpcsFile->findNext(array(T_WHITESPACE), $commentEnd + 1, null, true); + if (in_array($tokens[$next]['code'], \PHP_CodeSniffer_Tokens::$methodPrefixes)) { + return $phpcsFile->findNext(array(T_FUNCTION), $next, $phpcsFile->findEndOfStatement($next)); + } + return false; + } +} diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/FunctionCommentSniff.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/FunctionCommentSniff.php new file mode 100644 index 0000000..8083440 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/FunctionCommentSniff.php @@ -0,0 +1,141 @@ +getTokens(); + $find = PHP_CodeSniffer_Tokens::$methodPrefixes; + $find[] = T_WHITESPACE; + + $classHelper = new ClassHelper($phpcsFile); + + $commentEnd = $phpcsFile->findPrevious($find, ($stackPtr - 1), null, true); + if ($tokens[$commentEnd]['code'] === T_COMMENT) { + // Inline comments might just be closing comments for + // control structures or functions instead of function comments + // using the wrong comment type. If there is other code on the line, + // assume they relate to that code. + $prev = $phpcsFile->findPrevious($find, ($commentEnd - 1), null, true); + if ($prev !== false && $tokens[$prev]['line'] === $tokens[$commentEnd]['line']) { + $commentEnd = $prev; + } + } + + if ($tokens[$commentEnd]['code'] !== T_DOC_COMMENT_CLOSE_TAG + && $tokens[$commentEnd]['code'] !== T_COMMENT + ) { + // [1] Added PHPUnit test class control for methods without doc comment. + if (!$classHelper->isTestClassMethod($stackPtr)) { + $phpcsFile->addError('Missing function doc comment', $stackPtr, 'Missing'); + $phpcsFile->recordMetric($stackPtr, 'Function has doc comment', 'no'); + } + return; + } else { + $phpcsFile->recordMetric($stackPtr, 'Function has doc comment', 'yes'); + } + + if ($tokens[$commentEnd]['code'] === T_COMMENT) { + $phpcsFile->addError('You must use "/**" style comments for a function comment', $stackPtr, 'WrongStyle'); + return; + } + + if ($tokens[$commentEnd]['line'] !== ($tokens[$stackPtr]['line'] - 1)) { + $error = 'There must be no blank lines after the function comment'; + $phpcsFile->addError($error, $commentEnd, 'SpacingAfter'); + } + + $commentStart = $tokens[$commentEnd]['comment_opener']; + foreach ($tokens[$commentStart]['comment_tags'] as $tag) { + if ($tokens[$tag]['content'] === '@see') { + // Make sure the tag isn't empty. + $string = $phpcsFile->findNext(T_DOC_COMMENT_STRING, $tag, $commentEnd); + if ($string === false || $tokens[$string]['line'] !== $tokens[$tag]['line']) { + $error = 'Content missing for @see tag in function comment'; + $phpcsFile->addError($error, $tag, 'EmptySees'); + } + } + } + + // [2] Added {@inheritdoc} validation for overrided methods. + if ($this->validateInheritdoc($phpcsFile, $stackPtr, $commentStart, $commentEnd)) { + return; + } + + // [3] Removed MissingParamComment, MissingReturn, SpacingAfterParamType and SpacingAfterParamName rules. + $rulesetHelper = new RulesetHelper($phpcsFile); + $rulesetHelper->setRuleSeverity('Gamegos.Commenting.FunctionComment.MissingParamComment', 0); + $rulesetHelper->setRuleSeverity('Gamegos.Commenting.FunctionComment.MissingReturn', 0); + $rulesetHelper->setRuleSeverity('Gamegos.Commenting.FunctionComment.SpacingAfterParamType', 0); + $rulesetHelper->setRuleSeverity('Gamegos.Commenting.FunctionComment.SpacingAfterParamName', 0); + + // [4] Ignored MissingParamTag rule for PHPUnit test class methods. + if ($classHelper->isTestClassMethod($stackPtr)) { + $rulesetHelper->setRuleSeverity('Gamegos.Commenting.FunctionComment.MissingParamTag', 0); + + $this->processReturn($phpcsFile, $stackPtr, $commentStart); + $this->processThrows($phpcsFile, $stackPtr, $commentStart); + $this->processParams($phpcsFile, $stackPtr, $commentStart); + + $rulesetHelper->restore(); + } else { + $this->processReturn($phpcsFile, $stackPtr, $commentStart); + $this->processThrows($phpcsFile, $stackPtr, $commentStart); + $this->processParams($phpcsFile, $stackPtr, $commentStart); + } + } + + /** + * Check if a comment has a valid 'inheritdoc' annotation. + * @param \PHP_CodeSniffer_File $phpcsFile + * @param int $stackPtr + * @param int $commentStart + * @param int $commentEnd + * @return bool + * @author Safak Ozpinar + */ + protected function validateInheritdoc(PHP_CodeSniffer_File $phpcsFile, $stackPtr, $commentStart, $commentEnd) + { + $classHelper = new ClassHelper($phpcsFile); + + $commentString = $phpcsFile->getTokensAsString($commentStart, $commentEnd - $commentStart + 1); + if (preg_match('/\{\@inheritdoc\}/', $commentString)) { + $classes = $classHelper->getClassParentsAndInterfaces($stackPtr, 'validate {@inheritdoc}'); + if (false !== $classes) { + $method = $phpcsFile->getDeclarationName($stackPtr); + foreach ($classes as $class) { + if (method_exists($class, $method)) { + return true; + } + } + $error = 'No overrided method found for {@inheritdoc} annotation'; + $phpcsFile->addError($error, $commentStart, 'InvalidInheritdoc'); + } else { + return true; + } + } + return false; + } +} diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/VariableCommentSniff.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/VariableCommentSniff.php new file mode 100644 index 0000000..f1c787e --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Commenting/VariableCommentSniff.php @@ -0,0 +1,34 @@ + + */ +class VariableCommentSniff extends Squiz_Sniffs_Commenting_VariableCommentSniff +{ + /** + * {@inheritdoc} + */ + public function processMemberVar(PHP_CodeSniffer_File $phpcsFile, $stackPtr) + { + PHP_CodeSniffer::$allowedTypes = array_unique( + array_merge( + PHP_CodeSniffer::$allowedTypes, + array( + 'int', + 'bool' + ) + ) + ); + parent::processMemberVar($phpcsFile, $stackPtr); + } +} diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Formatting/DisallowMultipleStatementsSniff.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Formatting/DisallowMultipleStatementsSniff.php new file mode 100644 index 0000000..212352d --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Formatting/DisallowMultipleStatementsSniff.php @@ -0,0 +1,75 @@ +getTokens(); + + $prev = $phpcsFile->findPrevious(array(T_SEMICOLON, T_OPEN_TAG), ($stackPtr - 1)); + if ($prev === false || $tokens[$prev]['code'] === T_OPEN_TAG) { + $phpcsFile->recordMetric($stackPtr, 'Multiple statements on same line', 'no'); + return; + } + + // Ignore multiple statements in a FOR condition. + if (isset($tokens[$stackPtr]['nested_parenthesis']) === true) { + foreach ($tokens[$stackPtr]['nested_parenthesis'] as $bracket) { + if (isset($tokens[$bracket]['parenthesis_owner']) === false) { + // Probably a closure sitting inside a function call. + continue; + } + + $owner = $tokens[$bracket]['parenthesis_owner']; + if ($tokens[$owner]['code'] === T_FOR) { + return; + } + } + } + + /* + * Fixed adding 2 blank lines when applying this fixer with + * Squiz.Functions.MultiLineFunctionDeclaration.ContentAfterBrace fixer together. + */ + if ($tokens[$prev]['line'] === $tokens[$stackPtr]['line'] + && $tokens[$prev + 1]['code'] != T_CLOSE_CURLY_BRACKET + ) { + $phpcsFile->recordMetric($stackPtr, 'Multiple statements on same line', 'yes'); + + $error = 'Each PHP statement must be on a line by itself'; + $fix = $phpcsFile->addFixableError($error, $stackPtr, 'SameLine'); + if ($fix === true) { + $phpcsFile->fixer->beginChangeset(); + $phpcsFile->fixer->addNewline($prev); + if ($tokens[($prev + 1)]['code'] === T_WHITESPACE) { + $phpcsFile->fixer->replaceToken(($prev + 1), ''); + } + + $phpcsFile->fixer->endChangeset(); + } + } else { + $phpcsFile->recordMetric($stackPtr, 'Multiple statements on same line', 'no'); + } + } +} diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Strings/ConcatenationSpacingSniff.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Strings/ConcatenationSpacingSniff.php new file mode 100644 index 0000000..9f92a62 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/Strings/ConcatenationSpacingSniff.php @@ -0,0 +1,144 @@ + + */ +class ConcatenationSpacingSniff implements PHP_CodeSniffer_Sniff +{ + /** + * {@inheritdoc} + */ + public function register() + { + return array(T_STRING_CONCAT); + } + + /** + * {@inheritdoc} + */ + public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) + { + $tokens = $phpcsFile->getTokens(); + + // Find the previous operand. + $previous = $phpcsFile->findPrevious(T_WHITESPACE, $stackPtr - 1, null, true); + if ($tokens[$previous]['line'] !== $tokens[$stackPtr]['line']) { + $before = 'newline'; + } elseif ($tokens[$stackPtr - 1]['code'] !== T_WHITESPACE) { + $before = 0; + } else { + $before = $tokens[$stackPtr - 1]['length']; + } + + // Find the next operand. + $next = $phpcsFile->findPrevious(T_WHITESPACE, $stackPtr + 1, null, true); + if ($tokens[$next]['line'] !== $tokens[$stackPtr]['line']) { + $after = 'newline'; + } elseif ($tokens[$stackPtr + 1]['code'] !== T_WHITESPACE) { + $after = 0; + } else { + $after = $tokens[$stackPtr + 1]['length']; + } + + // Record metrics. + $phpcsFile->recordMetric($stackPtr, 'Spacing before string concat', $before); + $phpcsFile->recordMetric($stackPtr, 'Spacing after string concat', $after); + + // Check for expected spaces between operands on the same line. + if ($before === 1 && $after === 1) { + return; + } + + // Check for expected alingment between operators on different lines. + if ($before === 'newline') { + + $found = $tokens[$stackPtr]['column'] - 1; + $expected = $this->findExpected($phpcsFile, $stackPtr); + + if ($found != $expected) { + $message = 'Concat operator not aligned correctly; expected %s space(s) but found %s.'; + $fix = $phpcsFile->addFixableError($message, $stackPtr, 'NotAligned', array($expected, $found)); + if ($fix === true) { + $addBefore = $expected - $found; + if ($addBefore > 0) { + $padding = str_repeat(' ', $addBefore); + $phpcsFile->fixer->addContentBefore($stackPtr, $padding); + } else { + while ($addBefore < 0) { + $phpcsFile->fixer->replaceToken($stackPtr - 1, ''); + $addBefore += 1; + } + } + } + } + return; + } + + // Unexpected spaces found. + $message = 'Concat operator must be surrounded by a single space'; + $fix = $phpcsFile->addFixableError($message, $stackPtr, 'PaddingFound'); + if ($fix === true) { + if ($tokens[$stackPtr - 1]['code'] === T_WHITESPACE) { + $phpcsFile->fixer->replaceToken($stackPtr - 1, ' '); + } else { + $phpcsFile->fixer->addContent($stackPtr - 1, ' '); + } + + if ($tokens[$stackPtr + 1]['code'] === T_WHITESPACE) { + $phpcsFile->fixer->replaceToken($stackPtr + 1, ' '); + } else { + $phpcsFile->fixer->addContent($stackPtr, ' '); + } + } + } + + /** + * Find expected number of spaces to align operators. + * @param \PHP_CodeSniffer_File $phpcsFile + * @param int $stackPtr + * @return int + */ + protected function findExpected(PHP_CodeSniffer_File $phpcsFile, $stackPtr) + { + $tokens = $phpcsFile->getTokens(); + // Find the last operator in the previous line. + $prevLineOp = $phpcsFile->findPrevious( + array( + T_WHITESPACE, T_CONSTANT_ENCAPSED_STRING + ), + $stackPtr - 1, + null, + true + ); + + if ($tokens[$prevLineOp]['code'] === T_EQUAL) { + // Align to the assignment operator. + return $tokens[$prevLineOp]['column'] - 1; + } elseif ($tokens[$prevLineOp]['code'] === T_STRING_CONCAT) { + // Align to the previous line. + $prev2 = $phpcsFile->findPrevious(T_WHITESPACE, $prevLineOp - 1, null, true); + if ($tokens[$prev2]['line'] !== $tokens[$prevLineOp]['line']) { + return $tokens[$prevLineOp]['column'] - 1; + } + return $this->findExpected($phpcsFile, $prevLineOp); + } + + $startOfStmt = $phpcsFile->findStartOfStatement($stackPtr); + if ($tokens[$startOfStmt]['code'] == T_RETURN) { + // Align to the return statement with 5 spaces. + return $tokens[$startOfStmt]['column'] + 4; + } + // Align to the start of the statement with 4 spaces. + return $tokens[$startOfStmt]['column'] + 3; + } +} diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/FunctionSpacingSniff.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/FunctionSpacingSniff.php new file mode 100644 index 0000000..8ea2024 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/FunctionSpacingSniff.php @@ -0,0 +1,210 @@ +getTokens(); + + /* + Check the number of blank lines + after the function. + */ + + if (isset($tokens[$stackPtr]['scope_closer']) === false) { + // Must be an interface method, so the closer is the semicolon. + $closer = $phpcsFile->findNext(T_SEMICOLON, $stackPtr); + } else { + $closer = $tokens[$stackPtr]['scope_closer']; + } + + // Allow for comments on the same line as the closer. + for ($nextLineToken = ($closer + 1); $nextLineToken < $phpcsFile->numTokens; $nextLineToken++) { + if ($tokens[$nextLineToken]['line'] !== $tokens[$closer]['line']) { + break; + } + } + + $foundLines = 0; + if ($nextLineToken === ($phpcsFile->numTokens - 1)) { + // We are at the end of the file. + // Don't check spacing after the function because this + // should be done by an EOF sniff. + $foundLines = $this->spacing; + } else { + $nextContent = $phpcsFile->findNext(T_WHITESPACE, $nextLineToken, null, true); + if ($nextContent === false) { + // We are at the end of the file. + // Don't check spacing after the function because this + // should be done by an EOF sniff. + $foundLines = $this->spacing; + } else { + $foundLines += ($tokens[$nextContent]['line'] - $tokens[$nextLineToken]['line']); + } + } + + // [1] Expected no blank lines after the method which is the last defined element of a class. + $expectedLines = $this->spacing; + if ($foundLines !== $expectedLines && $tokens[$nextContent]['code'] != T_CLOSE_CURLY_BRACKET) { + $error = 'Expected %s blank line'; + if ($expectedLines > 1) { + $error .= 's'; + } + + $error .= ' after function; %s found'; + $data = array( + $expectedLines, + $foundLines, + ); + + $fix = $phpcsFile->addFixableError($error, $closer, 'After', $data); + if ($fix === true) { + $phpcsFile->fixer->beginChangeset(); + for ($i = $nextLineToken; $i <= $nextContent; $i++) { + if ($tokens[$i]['line'] === $tokens[$nextContent]['line']) { + $phpcsFile->fixer->addContentBefore($i, str_repeat($phpcsFile->eolChar, $expectedLines)); + break; + } + + $phpcsFile->fixer->replaceToken($i, ''); + } + + $phpcsFile->fixer->endChangeset(); + }//end if + }//end if + + /* + Check the number of blank lines + before the function. + */ + + $prevLineToken = null; + for ($i = $stackPtr; $i > 0; $i--) { + if (strpos($tokens[$i]['content'], $phpcsFile->eolChar) === false) { + continue; + } else { + $prevLineToken = $i; + break; + } + } + + if (is_null($prevLineToken) === true) { + // Never found the previous line, which means + // there are 0 blank lines before the function. + $foundLines = 0; + $prevContent = 0; + } else { + $currentLine = $tokens[$stackPtr]['line']; + + $prevContent = $phpcsFile->findPrevious(T_WHITESPACE, $prevLineToken, null, true); + if ($tokens[$prevContent]['code'] === T_DOC_COMMENT_CLOSE_TAG + && $tokens[$prevContent]['line'] === ($currentLine - 1) + ) { + // Account for function comments. + $prevContent = $phpcsFile->findPrevious(T_WHITESPACE, ($tokens[$prevContent]['comment_opener'] - 1), null, true); + } + + // Before we throw an error, check that we are not throwing an error + // for another function. We don't want to error for no blank lines after + // the previous function and no blank lines before this one as well. + $prevLine = ($tokens[$prevContent]['line'] - 1); + $i = ($stackPtr - 1); + $foundLines = 0; + while ($currentLine !== $prevLine && $currentLine > 1 && $i > 0) { + if (isset($tokens[$i]['scope_condition']) === true) { + $scopeCondition = $tokens[$i]['scope_condition']; + if ($tokens[$scopeCondition]['code'] === T_FUNCTION) { + // Found a previous function. + return; + } + } elseif ($tokens[$i]['code'] === T_FUNCTION) { + // Found another interface function. + return; + } + + $currentLine = $tokens[$i]['line']; + if ($currentLine === $prevLine) { + break; + } + + if ($tokens[($i - 1)]['line'] < $currentLine && $tokens[($i + 1)]['line'] > $currentLine) { + // This token is on a line by itself. If it is whitespace, the line is empty. + if ($tokens[$i]['code'] === T_WHITESPACE) { + $foundLines++; + } + } + + $i--; + }//end while + }//end if + + // [2] Expected no blank lines before the method which is the first defined element of a class. + $expectedLines = $tokens[$prevContent]['code'] == T_OPEN_CURLY_BRACKET ? 0 : $this->spacing; + if ($foundLines !== $expectedLines) { + $error = 'Expected %s blank line'; + if ($expectedLines > 1) { + $error .= 's'; + } + + $error .= ' before function; %s found'; + $data = array( + $expectedLines, + $foundLines, + ); + + $fix = $phpcsFile->addFixableError($error, $stackPtr, 'Before', $data); + if ($fix === true) { + if ($prevContent === 0) { + $nextSpace = 0; + } else { + $nextSpace = $phpcsFile->findNext(T_WHITESPACE, ($prevContent + 1), $stackPtr); + if ($nextSpace === false) { + $nextSpace = ($stackPtr - 1); + } + } + + if ($foundLines < $expectedLines) { + $padding = str_repeat($phpcsFile->eolChar, ($expectedLines - $foundLines)); + $phpcsFile->fixer->addContent($nextSpace, $padding); + } else { + $nextContent = $phpcsFile->findNext(T_WHITESPACE, ($nextSpace + 1), null, true); + $phpcsFile->fixer->beginChangeset(); + // [3] Fixed fixing spaces before method definitions. + for ($i = $nextSpace; $i < ($nextContent - 2); $i++) { + $phpcsFile->fixer->replaceToken($i, ''); + } + $phpcsFile->fixer->replaceToken($i, str_repeat($phpcsFile->eolChar, $expectedLines)); + $phpcsFile->fixer->endChangeset(); + } + }//end if + }//end if + } +} diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/MemberVarSpacingSniff.php b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/MemberVarSpacingSniff.php new file mode 100644 index 0000000..725c533 --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/Sniffs/WhiteSpace/MemberVarSpacingSniff.php @@ -0,0 +1,107 @@ + + */ +class MemberVarSpacingSniff extends Squiz_Sniffs_WhiteSpace_MemberVarSpacingSniff +{ + /** + * {@inheritdoc} + */ + protected function processMemberVar(PHP_CodeSniffer_File $phpcsFile, $stackPtr) + { + $tokens = $phpcsFile->getTokens(); + + $ignore = PHP_CodeSniffer_Tokens::$methodPrefixes; + $ignore[] = T_VAR; + $ignore[] = T_WHITESPACE; + + $start = $stackPtr; + $prev = $phpcsFile->findPrevious($ignore, ($stackPtr - 1), null, true); + if (isset(PHP_CodeSniffer_Tokens::$commentTokens[$tokens[$prev]['code']]) === true) { + // Assume the comment belongs to the member var if it is on a line by itself. + $prevContent = $phpcsFile->findPrevious(PHP_CodeSniffer_Tokens::$emptyTokens, ($prev - 1), null, true); + if ($tokens[$prevContent]['line'] !== $tokens[$prev]['line']) { + // Check the spacing, but then skip it. + $foundLines = ($tokens[$stackPtr]['line'] - $tokens[$prev]['line'] - 1); + if ($foundLines > 0) { + $error = 'Expected 0 blank lines after member var comment; %s found'; + $data = array($foundLines); + $fix = $phpcsFile->addFixableError($error, $prev, 'AfterComment', $data); + if ($fix === true) { + $phpcsFile->fixer->beginChangeset(); + for ($i = ($prev + 1); $i <= $stackPtr; $i++) { + if ($tokens[$i]['line'] === $tokens[$stackPtr]['line']) { + break; + } + + $phpcsFile->fixer->replaceToken($i, ''); + } + + $phpcsFile->fixer->addNewline($prev); + $phpcsFile->fixer->endChangeset(); + } + }//end if + + $start = $prev; + }//end if + }//end if + + // There needs to be 1 blank line before the var, not counting comments. + if ($start === $stackPtr) { + // No comment found. + $first = $phpcsFile->findFirstOnLine(PHP_CodeSniffer_Tokens::$emptyTokens, $start, true); + if ($first === false) { + $first = $start; + } + } elseif ($tokens[$start]['code'] === T_DOC_COMMENT_CLOSE_TAG) { + $first = $tokens[$start]['comment_opener']; + } else { + $first = $phpcsFile->findPrevious(PHP_CodeSniffer_Tokens::$emptyTokens, ($start - 1), null, true); + $first = $phpcsFile->findNext(PHP_CodeSniffer_Tokens::$commentTokens, ($first + 1)); + } + + $prev = $phpcsFile->findPrevious(PHP_CodeSniffer_Tokens::$emptyTokens, ($first - 1), null, true); + $foundLines = ($tokens[$first]['line'] - $tokens[$prev]['line'] - 1); + // [1] Expected no blank lines before the property which is the first defined element of a class. + $expectedLines = $tokens[$prev]['code'] == T_OPEN_CURLY_BRACKET ? 0 : 1; + if ($foundLines === $expectedLines) { + return; + } + + $error = 'Expected %s blank line before member var; %s found'; + $data = array( + $expectedLines, + $foundLines + ); + $fix = $phpcsFile->addFixableError($error, $stackPtr, 'Incorrect', $data); + if ($fix === true) { + $phpcsFile->fixer->beginChangeset(); + for ($i = ($prev + 1); $i < $first; $i++) { + if ($tokens[$i]['line'] === $tokens[$prev]['line']) { + continue; + } + + if ($tokens[$i]['line'] === $tokens[$first]['line']) { + break; + } + + $phpcsFile->fixer->replaceToken($i, ''); + } + + $phpcsFile->fixer->endChangeset(); + }//end if + + }//end processMemberVar() +} diff --git a/vendor/gamegos/php-code-sniffer/src/Gamegos/ruleset.xml b/vendor/gamegos/php-code-sniffer/src/Gamegos/ruleset.xml new file mode 100644 index 0000000..4fb1f9e --- /dev/null +++ b/vendor/gamegos/php-code-sniffer/src/Gamegos/ruleset.xml @@ -0,0 +1,29 @@ + + + The coding standard for Gamegos. + + + + + + + error + + + + + + + + + + + warning + + + + + + + + \ No newline at end of file diff --git a/vendor/herrera-io/json/.gitignore b/vendor/herrera-io/json/.gitignore new file mode 100644 index 0000000..8914432 --- /dev/null +++ b/vendor/herrera-io/json/.gitignore @@ -0,0 +1,7 @@ +/.idea/ +/bin/ +/coverage/ +/src/vendors/ + +/*.iml +/composer.lock diff --git a/vendor/herrera-io/json/.travis.yml b/vendor/herrera-io/json/.travis.yml new file mode 100644 index 0000000..6d8bb2a --- /dev/null +++ b/vendor/herrera-io/json/.travis.yml @@ -0,0 +1,11 @@ +language: php + +php: + - 5.3 + - 5.4 + +before_script: + - composer self-update + - composer install --dev + +script: bin/phpunit \ No newline at end of file diff --git a/vendor/herrera-io/json/LICENSE b/vendor/herrera-io/json/LICENSE new file mode 100644 index 0000000..a46211d --- /dev/null +++ b/vendor/herrera-io/json/LICENSE @@ -0,0 +1,18 @@ +Copyright (c) 2013 Kevin Herrera + +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. \ No newline at end of file diff --git a/vendor/herrera-io/json/README.md b/vendor/herrera-io/json/README.md new file mode 100644 index 0000000..93a4dc4 --- /dev/null +++ b/vendor/herrera-io/json/README.md @@ -0,0 +1,35 @@ +JSON +==== + +[![Build Status](https://travis-ci.org/herrera-io/php-json.png?branch=master)](https://travis-ci.org/herrera-io/php-json) + +A library for simplifying JSON linting and validation. + +Summary +------- + +Uses the [`justinrainbow/json-schema`](https://packagist.org/packages/justinrainbow/json-schema) and [`seld/jsonlint`](https://packagist.org/packages/seld/jsonlint) libraries to lint and validate JSON data. Also decodes JSON data as to only lint when an error is encountered, minimizing performance impact. + +Installation +------------ + +Add it to your list of Composer dependencies: + +```sh +$ composer require herrera-io/json=1.* +``` + +Usage +----- + +```php +validate($schema, $decoded); // throws Herrera\Json\Exception\JsonException + +$data = $json->decode('{'); // throws Seld\JsonLint\ParsingException +``` diff --git a/vendor/herrera-io/json/composer.json b/vendor/herrera-io/json/composer.json new file mode 100644 index 0000000..01d36c0 --- /dev/null +++ b/vendor/herrera-io/json/composer.json @@ -0,0 +1,43 @@ +{ + "name": "herrera-io/json", + "description": "A library for simplifying JSON linting and validation.", + "keywords": ["json", "lint", "schema", "validate"], + "homepage": "http://herrera-io.github.com/php-json", + "license": "MIT", + "authors": [ + { + "name": "Kevin Herrera", + "email": "kevin@herrera.io", + "homepage": "http://kevin.herrera.io" + } + ], + "support": { + "issues": "https://github.com/herrera-io/php-json/issues" + }, + "require": { + "php": ">=5.3.3", + "ext-json": "*", + "justinrainbow/json-schema": ">=1.0,<2.0-dev", + "seld/jsonlint": ">=1.0,<2.0-dev" + }, + "require-dev": { + "herrera-io/phpunit-test-case": "1.*", + "mikey179/vfsStream": "1.1.0", + "phpunit/phpunit": "3.7.*" + }, + "autoload": { + "files": ["src/lib/json_version.php"], + "psr-0": { + "Herrera\\Json": "src/lib" + } + }, + "config": { + "bin-dir": "bin", + "vendor-dir": "src/vendors" + }, + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + } +} diff --git a/vendor/herrera-io/json/phpunit.xml.dist b/vendor/herrera-io/json/phpunit.xml.dist new file mode 100644 index 0000000..49ff5bd --- /dev/null +++ b/vendor/herrera-io/json/phpunit.xml.dist @@ -0,0 +1,22 @@ + + + + + src/lib/ + + + + + src/tests/ + + + \ No newline at end of file diff --git a/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/Exception.php b/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/Exception.php new file mode 100644 index 0000000..155fa29 --- /dev/null +++ b/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/Exception.php @@ -0,0 +1,40 @@ + + */ +class Exception extends \Exception implements ExceptionInterface +{ + /** + * Creates a new exception using a format and values. + * + * @param string $format The format. + * @param mixed $value,... The value(s). + * + * @return Exception The exception. + */ + public static function create($format, $value = null) + { + if (0 < func_num_args()) { + $format = vsprintf($format, array_slice(func_get_args(), 1)); + } + + return new static($format); + } + + /** + * Creates an exception for the last error message. + * + * @return Exception The exception. + */ + public static function lastError() + { + $error = error_get_last(); + + return new static($error['message']); + } +} diff --git a/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/ExceptionInterface.php b/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/ExceptionInterface.php new file mode 100644 index 0000000..c638aee --- /dev/null +++ b/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/ExceptionInterface.php @@ -0,0 +1,12 @@ + + */ +interface ExceptionInterface +{ +} diff --git a/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/FileException.php b/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/FileException.php new file mode 100644 index 0000000..681a97a --- /dev/null +++ b/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/FileException.php @@ -0,0 +1,12 @@ + + */ +class FileException extends Exception +{ +} diff --git a/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/JsonException.php b/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/JsonException.php new file mode 100644 index 0000000..5541eec --- /dev/null +++ b/vendor/herrera-io/json/src/lib/Herrera/Json/Exception/JsonException.php @@ -0,0 +1,73 @@ + + */ +class JsonException extends Exception +{ + /** + * The recognized JSON error codes. + * + * @var array + */ + private static $codes = array( + JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded.', + JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded.', + JSON_ERROR_NONE => 'No error has occurred.', + JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON.', + JSON_ERROR_SYNTAX => 'Syntax error.', + JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded.' + ); + + /** + * The individual JSON error messages. + * + * @var array + */ + private $errors = array(); + + /** + * Sets the main error message, and the other error messages. + * + * @param string $message The main error message. + * @param array $errors The other error messages. + */ + public function __construct($message, array $errors = array()) + { + $this->errors = $errors; + + parent::__construct($message); + } + + /** + * Creates a new exception using the JSON error code. + * + * @param integer $code The code. + * + * @return JsonException The exception. + */ + public static function createUsingCode($code) + { + $message = 'Unknown error.'; + + if (isset(self::$codes[$code])) { + $message = self::$codes[$code]; + } + + return new static($message); + } + + /** + * Returns the other error messages. + * + * @return array The messages. + */ + public function getErrors() + { + return $this->errors; + } +} diff --git a/vendor/herrera-io/json/src/lib/Herrera/Json/Json.php b/vendor/herrera-io/json/src/lib/Herrera/Json/Json.php new file mode 100644 index 0000000..0c94e1f --- /dev/null +++ b/vendor/herrera-io/json/src/lib/Herrera/Json/Json.php @@ -0,0 +1,155 @@ + + */ +class Json +{ + /** + * The JSON linter. + * + * @var JsonParser + */ + private $linter; + + /** + * The JSON validator. + * + * @var Validator + */ + private $validator; + + /** + * Initialize the linter and validator. + */ + public function __construct() + { + $this->linter = new JsonParser(); + $this->validator = new Validator(); + } + + /** + * Decodes the JSON string and performs a lint check if decoding fails. + * + * @param string $json The JSON data. + * @param boolean $assoc Convert objects to associative arrays? + * @param integer $depth The maximum recursion depth. + * @param integer $options The bitmask JSON decode options (PHP 5.4+). + * + * @return mixed The decoded data. + * + * @throws Exception\Exception + * @throws JsonException If the JSON string could not be decoded. + */ + public function decode($json, $assoc = false, $depth = 512, $options = 0) + { + if (JSON_DECODE_FOURTH_ARG) { + $data = json_decode($json, $assoc, $depth, $options); + } else { + $data = json_decode($json, $assoc, $depth); + } + + if (JSON_ERROR_NONE !== ($error = json_last_error())) { + if (JSON_ERROR_UTF8 === $error) { + throw JsonException::createUsingCode($error); + } + + $this->lint($json); + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd + + return $data; + } + + /** + * Reads the file and decodes the contents using `decode()`. + * + * @param string $file The file location. + * @param boolean $assoc Convert objects to associative arrays? + * @param integer $depth The maximum recursion depth. + * @param integer $options The bitmask JSON decode options (PHP 5.4+). + * + * @return mixed The decoded data. + * + * @throws Exception\Exception + * @throws FileException If the file could not be read. + */ + public function decodeFile( + $file, + $assoc = false, + $depth = 512, + $options = 0 + ) { + if ((false == preg_match('/^\w+:\/\//', $file)) && + (false === is_file($file))) { + throw FileException::create( + 'The path "%s" is not a file or does not exist.', + $file + ); + } + + if (false === ($json = @file_get_contents($file))) { + throw FileException::lastError(); + } + + return $this->decode($json, $assoc, $depth, $options); + } + + /** + * Lints the JSON string. + * + * @param string $json The JSON data. + * + * @throws ParsingException If the JSON has lint. + */ + public function lint($json) + { + if (($result = $this->linter->lint($json)) instanceof ParsingException) { + throw $result; + } + } + + /** + * Validates the decoded JSON data. + * + * @param object $schema The JSON schema. + * @param mixed $json The decoded JSON data. + * + * @throws Exception\Exception + * @throws JsonException If the JSON data failed validation. + */ + public function validate($schema, $json) + { + $this->validator->check($json, $schema); + + if (false === $this->validator->isValid()) { + $errors = array(); + + foreach ($this->validator->getErrors() as $error) { + if (false === empty($error['property'])) { + $error['message'] = $error['property'] + . ': ' + . $error['message']; + } + + $errors[] = $error['message']; + } + + throw new JsonException( + 'The JSON data did not pass validation.', + $errors + ); + } + } +} diff --git a/vendor/herrera-io/json/src/lib/json_version.php b/vendor/herrera-io/json/src/lib/json_version.php new file mode 100644 index 0000000..9ac585f --- /dev/null +++ b/vendor/herrera-io/json/src/lib/json_version.php @@ -0,0 +1,12 @@ +=')); + +} diff --git a/vendor/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/ExceptionTest.php b/vendor/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/ExceptionTest.php new file mode 100644 index 0000000..87e36fd --- /dev/null +++ b/vendor/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/ExceptionTest.php @@ -0,0 +1,25 @@ +assertEquals('My message.', $exception->getMessage()); + } + + public function testLastError() + { + @$test; + + $exception = Exception::lastError(); + + $this->assertEquals('Undefined variable: test', $exception->getMessage()); + } +} diff --git a/vendor/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/JsonExceptionTest.php b/vendor/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/JsonExceptionTest.php new file mode 100644 index 0000000..c3b74b0 --- /dev/null +++ b/vendor/herrera-io/json/src/tests/Herrera/Json/Tests/Exception/JsonExceptionTest.php @@ -0,0 +1,28 @@ +assertEquals('My message.', $exception->getMessage()); + $this->assertEquals($errors, $exception->getErrors()); + } + + public function testCreateUsingCode() + { + $exception = JsonException::createUsingCode(JSON_ERROR_NONE); + + $this->assertEquals( + 'No error has occurred.', + $exception->getMessage() + ); + } +} diff --git a/vendor/herrera-io/json/src/tests/Herrera/Json/Tests/JsonTest.php b/vendor/herrera-io/json/src/tests/Herrera/Json/Tests/JsonTest.php new file mode 100644 index 0000000..4a782d1 --- /dev/null +++ b/vendor/herrera-io/json/src/tests/Herrera/Json/Tests/JsonTest.php @@ -0,0 +1,136 @@ + rand()); + + $this->assertEquals( + (object) $data, + $this->json->decode(json_encode($data)) + ); + } + + public function testDecodeInvalidUtf8() + { + $this->setExpectedException( + 'Herrera\\Json\\Exception\\JsonException', + 'Malformed UTF-8 characters, possibly incorrectly encoded.' + ); + + $this->json->decode('{"bad": \"' . "\xf0\x28\x8c\x28" . '"}'); + } + + public function testDecodeFailLint() + { + $this->setExpectedException('Seld\\JsonLint\\ParsingException'); + + $this->json->decode('{'); + } + + /** + * @depends testDecode + */ + public function testDecodeFile() + { + $file = $this->createFile(); + $data = array('rand' => rand()); + + file_put_contents($file, json_encode($data)); + + $this->assertEquals((object) $data, $this->json->decodeFile($file)); + } + + public function testDecodeFileIgnoreUri() + { + $this->setExpectedException( + 'Herrera\\Json\\Exception\\FileException', + 'failed to open stream' + ); + + $this->json->decodeFile('vfs://test/ignore.json'); + } + + public function testDecodeFileNotExist() + { + $this->setExpectedException( + 'Herrera\\Json\\Exception\\FileException', + 'The path "/does/not/exist" is not a file or does not exist.' + ); + + $this->json->decodeFile('/does/not/exist'); + } + + public function testDecodeFileReadError() + { + $root = vfsStream::newDirectory('test'); + $root->addChild(vfsStream::newFile('test.json', 0000)); + + vfsStreamWrapper::setRoot($root); + + $this->setExpectedException( + 'Herrera\\Json\\Exception\\FileException', + 'failed to open stream' + ); + + $this->json->decodeFile('vfs://test/test.json'); + } + + public function testLint() + { + $json = '{"test": 213}'; + + $this->json->lint($json); + + $this->setExpectedException('Seld\\JsonLint\\ParsingException'); + + $this->json->lint($json . '{'); + } + + public function testValidate() + { + $schema = (object) array( + 'title' => 'test schema', + 'type' => 'object', + 'properties' => (object) array( + 'random' => (object) array('type' => 'integer'), + 'static' => (object) array('type' => 'string') + ), + 'required' => array('random') + ); + + $data = (object) array('random' => rand()); + + $this->json->validate($schema, $data); + + $data->static = true; + + try { + $this->json->validate($schema, $data); + } catch (JsonException $exception) { + $this->assertEquals( + array('static: boolean value found, but a string is required'), + $exception->getErrors() + ); + } + } + + protected function setUp() + { + $this->json = new Json(); + } +} diff --git a/vendor/herrera-io/json/src/tests/bootstrap.php b/vendor/herrera-io/json/src/tests/bootstrap.php new file mode 100644 index 0000000..52ac4ed --- /dev/null +++ b/vendor/herrera-io/json/src/tests/bootstrap.php @@ -0,0 +1,5 @@ +update('1.0.0', true); +``` \ No newline at end of file diff --git a/vendor/herrera-io/phar-update/composer.json b/vendor/herrera-io/phar-update/composer.json new file mode 100644 index 0000000..3e2c498 --- /dev/null +++ b/vendor/herrera-io/phar-update/composer.json @@ -0,0 +1,42 @@ +{ + "name": "herrera-io/phar-update", + "description": "A library for self-updating Phars.", + "keywords": ["phar", "update"], + "homepage": "http://herrera-io.github.com/php-phar-update", + "license": "MIT", + "authors": [ + { + "name": "Kevin Herrera", + "email": "kevin@herrera.io", + "homepage": "http://kevin.herrera.io" + } + ], + "support": { + "issues": "https://github.com/herrera-io/php-phar-update/issues" + }, + "require": { + "php": ">=5.3.3", + "herrera-io/json": "1.*", + "kherge/version": "1.*" + }, + "require-dev": { + "herrera-io/phpunit-test-case": "1.*", + "mikey179/vfsStream": "1.1.0", + "phpunit/phpunit": "3.7.*" + }, + "autoload": { + "files": ["src/lib/constants.php"], + "psr-0": { + "Herrera\\Phar\\Update": "src/lib" + } + }, + "config": { + "bin-dir": "bin", + "vendor-dir": "src/vendors" + }, + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + } +} \ No newline at end of file diff --git a/vendor/herrera-io/phar-update/phpunit.xml.dist b/vendor/herrera-io/phar-update/phpunit.xml.dist new file mode 100644 index 0000000..0efcfc5 --- /dev/null +++ b/vendor/herrera-io/phar-update/phpunit.xml.dist @@ -0,0 +1,22 @@ + + + + + src/lib/ + + + + + src/tests/ + + + \ No newline at end of file diff --git a/vendor/herrera-io/phar-update/res/schema.json b/vendor/herrera-io/phar-update/res/schema.json new file mode 100644 index 0000000..303d3d2 --- /dev/null +++ b/vendor/herrera-io/phar-update/res/schema.json @@ -0,0 +1,35 @@ +{ + "title": "Update Manifest Schema", + "type": "array", + "items": { + "title": "Update", + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "description": "The name of the file that will be downloaded.", + "type": "string", + "pattern": "\\.phar$" + }, + "publicKey": { + "description": "The location of the public key file.", + "type": "string" + }, + "sha1": { + "description": "The SHA1 file checksum.", + "type": "string", + "pattern": "^[a-f0-9]{40}$" + }, + "url": { + "description": "The location of the update file.", + "type": "string" + }, + "version": { + "description": "The semantic version number.", + "type": "string", + "pattern": "^\\d+\\.\\d+\\.\\d+(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$" + } + }, + "required": ["name", "sha1", "url", "version"] + } +} \ No newline at end of file diff --git a/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/Exception.php b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/Exception.php new file mode 100644 index 0000000..2f08b20 --- /dev/null +++ b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/Exception.php @@ -0,0 +1,40 @@ + + */ +class Exception extends \Exception implements ExceptionInterface +{ + /** + * Creates a new exception using a format and values. + * + * @param string $format The format. + * @param mixed $value,... The value(s). + * + * @return Exception The exception. + */ + public static function create($format, $value = null) + { + if (0 < func_num_args()) { + $format = vsprintf($format, array_slice(func_get_args(), 1)); + } + + return new static($format); + } + + /** + * Creates an exception for the last error message. + * + * @return Exception The exception. + */ + public static function lastError() + { + $error = error_get_last(); + + return new static($error['message']); + } +} diff --git a/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/ExceptionInterface.php b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/ExceptionInterface.php new file mode 100644 index 0000000..d6c774b --- /dev/null +++ b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/ExceptionInterface.php @@ -0,0 +1,12 @@ + + */ +interface ExceptionInterface +{ +} diff --git a/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/FileException.php b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/FileException.php new file mode 100644 index 0000000..a9e8c78 --- /dev/null +++ b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/FileException.php @@ -0,0 +1,12 @@ + + */ +class FileException extends Exception +{ +} diff --git a/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/InvalidArgumentException.php b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/InvalidArgumentException.php new file mode 100644 index 0000000..0f7054f --- /dev/null +++ b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/InvalidArgumentException.php @@ -0,0 +1,12 @@ + + */ +class InvalidArgumentException extends Exception +{ +} diff --git a/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/LogicException.php b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/LogicException.php new file mode 100644 index 0000000..a678888 --- /dev/null +++ b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Exception/LogicException.php @@ -0,0 +1,12 @@ + + */ +class LogicException extends Exception +{ +} diff --git a/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manager.php b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manager.php new file mode 100644 index 0000000..a63eb42 --- /dev/null +++ b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manager.php @@ -0,0 +1,112 @@ + + */ +class Manager +{ + /** + * The update manifest. + * + * @var Manifest + */ + private $manifest; + + /** + * The running file (the Phar that will be updated). + * + * @var string + */ + private $runningFile; + + /** + * Sets the update manifest. + * + * @param Manifest $manifest The manifest. + */ + public function __construct(Manifest $manifest) + { + $this->manifest = $manifest; + } + + /** + * Returns the manifest. + * + * @return Manifest The manifest. + */ + public function getManifest() + { + return $this->manifest; + } + + /** + * Returns the running file (the Phar that will be updated). + * + * @return string The file. + */ + public function getRunningFile() + { + if (null === $this->runningFile) { + $this->runningFile = realpath($_SERVER['argv'][0]); + } + + return $this->runningFile; + } + + /** + * Sets the running file (the Phar that will be updated). + * + * @param string $file The file name or path. + * + * @throws Exception\Exception + * @throws InvalidArgumentException If the file path is invalid. + */ + public function setRunningFile($file) + { + if (false === is_file($file)) { + throw InvalidArgumentException::create( + 'The file "%s" is not a file or it does not exist.', + $file + ); + } + + $this->runningFile = $file; + } + + /** + * Updates the running Phar if any is available. + * + * @param string|Version $version The current version. + * @param boolean $major Lock to current major version? + * @param boolean $pre Allow pre-releases? + * + * @return boolean TRUE if an update was performed, FALSE if none available. + */ + public function update($version, $major = false, $pre = false) + { + if (false === ($version instanceof Version)) { + $version = Version::create($version); + } + + if (null !== ($update = $this->manifest->findRecent( + $version, + $major, + $pre + ))) { + $update->getFile(); + $update->copyTo($this->getRunningFile()); + + return true; + } + + return false; + } +} diff --git a/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manifest.php b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manifest.php new file mode 100644 index 0000000..c47518a --- /dev/null +++ b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Manifest.php @@ -0,0 +1,140 @@ + + */ +class Manifest +{ + /** + * The list of updates in the manifest. + * + * @var Update[] + */ + private $updates; + + /** + * Sets the list of updates from the manifest. + * + * @param Update[] $updates The updates. + */ + public function __construct(array $updates = array()) + { + $this->updates = $updates; + } + + /** + * Finds the most recent update and returns it. + * + * @param Version $version The current version. + * @param boolean $major Lock to major version? + * @param boolean $pre Allow pre-releases? + * + * @return Update The update. + */ + public function findRecent(Version $version, $major = false, $pre = false) + { + /** @var $current Update */ + $current = null; + $major = $major ? $version->getMajor() : null; + + foreach ($this->updates as $update) { + if ($major && ($major !== $update->getVersion()->getMajor())) { + continue; + } + + if ((false === $pre) + && (null !== $update->getVersion()->getPreRelease())) { + continue; + } + + $test = $current ? $current->getVersion() : $version; + + if (false === $update->isNewer($test)) { + continue; + } + + $current = $update; + } + + return $current; + } + + /** + * Returns the list of updates in the manifest. + * + * @return Update[] The updates. + */ + public function getUpdates() + { + return $this->updates; + } + + /** + * Loads the manifest from a JSON encoded string. + * + * @param string $json The JSON encoded string. + * + * @return Manifest The manifest. + */ + public static function load($json) + { + $j = new Json(); + + return self::create($j->decode($json), $j); + } + + /** + * Loads the manifest from a JSON encoded file. + * + * @param string $file The JSON encoded file. + * + * @return Manifest The manifest. + */ + public static function loadFile($file) + { + $json = new Json(); + + return self::create($json->decodeFile($file), $json); + } + + /** + * Validates the data, processes it, and returns a new instance of Manifest. + * + * @param array $decoded The decoded JSON data. + * @param Json $json The Json instance used to decode the data. + * + * @return Manifest The new instance. + */ + private static function create($decoded, Json $json) + { + $json->validate( + $json->decodeFile(PHAR_UPDATE_MANIFEST_SCHEMA), + $decoded + ); + + $updates = array(); + + foreach ($decoded as $update) { + $updates[] = new Update( + $update->name, + $update->sha1, + $update->url, + Version::create($update->version), + isset($update->publicKey) ? $update->publicKey : null + ); + } + + usort($updates, function (Update $a, Update $b) { + return $a->getVersion()->compareTo($b->getVersion()); + }); + + return new static($updates); + } +} diff --git a/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Update.php b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Update.php new file mode 100644 index 0000000..2e05a3c --- /dev/null +++ b/vendor/herrera-io/phar-update/src/lib/Herrera/Phar/Update/Update.php @@ -0,0 +1,281 @@ + + */ +class Update +{ + /** + * The temporary file path. + * + * @var string + */ + private $file; + + /** + * The name of the update file. + * + * @var string + */ + private $name; + + /** + * The URL where the public key can be downloaded from. + * + * @var string + */ + private $publicKey; + + /** + * The SHA1 file checksum. + * + * @var string + */ + private $sha1; + + /** + * The URL where the update can be downloaded from. + * + * @var string + */ + private $url; + + /** + * The version of the update. + * + * @var Version + */ + private $version; + + /** + * Sets the update information. + * + * @param string $name The name of the update file. + * @param string $sha1 The SHA1 file checksum. + * @param string $url The URL where the update can be downloaded from. + * @param Version $version The version of the update. + * @param string $key The URL where the public key can be downloaded + * from. + */ + public function __construct( + $name, + $sha1, + $url, + Version $version, + $key = null + ) { + $this->name = $name; + $this->publicKey = $key; + $this->sha1 = $sha1; + $this->url = $url; + $this->version = $version; + } + + /** + * Copies the update file to the destination. + * + * @param string $file The target file. + * + * @throws Exception\Exception + * @throws FileException If the file could not be replaced. + */ + public function copyTo($file) + { + if (null === $this->file) { + throw LogicException::create( + 'The update file has not been downloaded.' + ); + } + + $mode = 0755; + + if (file_exists($file)) { + $mode = fileperms($file) & 511; + } + + if (false === @copy($this->file, $file)) { + throw FileException::lastError(); + } + + if (false === @chmod($file, $mode)) { + throw FileException::lastError(); + } + + $key = $file . '.pubkey'; + + if (file_exists($this->file . '.pubkey')) { + if (false === @copy($this->file . '.pubkey', $key)) { + throw FileException::lastError(); + } + } elseif (file_exists($key)) { + if (false === @unlink($key)) { + throw FileException::lastError(); + } + } + } + + /** + * Cleans up by deleting the temporary update file. + * + * @throws FileException If the file could not be deleted. + */ + public function deleteFile() + { + if ($this->file) { + if (file_exists($this->file)) { + if (false === @unlink($this->file)) { + throw FileException::lastError(); + } + } + + if (file_exists($this->file . '.pubkey')) { + if (false === @unlink($this->file . '.pubkey')) { + throw FileException::lastError(); + } + } + + $dir = dirname($this->file); + + if (file_exists($dir)) { + if (false === @rmdir($dir)) { + throw FileException::lastError(); + } + } + + $this->file = null; + } + } + + /** + * Downloads the update file to a temporary location. + * + * @return string The temporary file path. + * + * @throws Exception\Exception + * @throws FileException If the SHA1 checksum differs. + * @throws UnexpectedValueException If the Phar is corrupt. + */ + public function getFile() + { + if (null === $this->file) { + unlink($this->file = tempnam(sys_get_temp_dir(), 'upd')); + mkdir($this->file); + + $this->file .= DIRECTORY_SEPARATOR . $this->name; + + $in = new SplFileObject($this->url, 'rb', false); + $out = new SplFileObject($this->file, 'wb', false); + + while (false === $in->eof()) { + $out->fwrite($in->fgets()); + } + + unset($in, $out); + + if ($this->publicKey) { + $in = new SplFileObject($this->publicKey, 'r', false); + $out = new SplFileObject($this->file . '.pubkey', 'w', false); + + while (false === $in->eof()) { + $out->fwrite($in->fgets()); + } + + unset($in, $out); + } + + if ($this->sha1 !== ($sha1 = sha1_file($this->file))) { + $this->deleteFile(); + + throw FileException::create( + 'Mismatch of the SHA1 checksum (%s) of the downloaded file (%s).', + $this->sha1, + $sha1 + ); + } + + // double check + try { + new Phar($this->file); + } catch (UnexpectedValueException $exception) { + $this->deleteFile(); + + throw $exception; + } + } + + return $this->file; + } + + /** + * Returns name of the update file. + * + * @return string The name. + */ + public function getName() + { + return $this->name; + } + + /** + * Returns the URL where the public key can be downloaded from. + * + * @return string The URL. + */ + public function getPublicKey() + { + return $this->publicKey; + } + + /** + * Returns the SHA1 file checksum. + * + * @return string The checksum. + */ + public function getSha1() + { + return $this->sha1; + } + + /** + * Returns the URL where the update can be downloaded from. + * + * @return string The URL. + */ + public function getUrl() + { + return $this->url; + } + + /** + * Returns the version of the update. + * + * @return Version The version. + */ + public function getVersion() + { + return $this->version; + } + + /** + * Checks if this update is newer than the version given. + * + * @param Version $version The current version. + * + * @return boolean TRUE if the update is newer, FALSE if not. + */ + public function isNewer(Version $version) + { + return $this->version->isGreaterThan($version); + } +} diff --git a/vendor/herrera-io/phar-update/src/lib/constants.php b/vendor/herrera-io/phar-update/src/lib/constants.php new file mode 100644 index 0000000..927519a --- /dev/null +++ b/vendor/herrera-io/phar-update/src/lib/constants.php @@ -0,0 +1,12 @@ +assertEquals('My message.', $exception->getMessage()); + } + + public function testLastError() + { + @$test; + + $exception = Exception::lastError(); + + $this->assertEquals('Undefined variable: test', $exception->getMessage()); + } +} diff --git a/vendor/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManagerTest.php b/vendor/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManagerTest.php new file mode 100644 index 0000000..b153f9d --- /dev/null +++ b/vendor/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManagerTest.php @@ -0,0 +1,104 @@ +assertSame($this->manifest, $this->manager->getManifest()); + } + + public function testGetRunningFile() + { + $this->assertEquals( + realpath($_SERVER['argv'][0]), + $this->manager->getRunningFile() + ); + } + + /** + * @depends testGetRunningFile + */ + public function testSetRunningFile() + { + $file = $this->createFile(); + + $this->manager->setRunningFile($file); + + $this->assertEquals($file, $this->manager->getRunningFile()); + } + + public function testSetRunningFileNotExist() + { + $this->setExpectedException( + 'Herrera\\Phar\\Update\\Exception\\InvalidArgumentException', + 'The file "/does/not/exist" is not a file or it does not exist.' + ); + + $this->manager->setRunningFile('/does/not/exist'); + } + + /** + * @depends testSetRunningFile + */ + public function testUpdate() + { + unlink($currentFile = $this->createFile('current.phar')); + unlink($newFile = $this->createFile('new.phar')); + + $current = new Phar($currentFile); + $current->addFromString('test.php', 'setStub($current->createDefaultStub('test.php')); + + $new = new Phar($newFile); + $new->addFromString('test.php', 'setStub($new->createDefaultStub('test.php')); + + unset($current, $new); + + $manager = new Manager(new Manifest(array(new Update( + 'new.phar', + sha1_file($newFile), + $newFile, + Version::create('1.0.1') + )))); + + $manager->setRunningFile($currentFile); + + $this->assertTrue($manager->update('1.0.0')); + $this->assertEquals('new', exec('php ' . escapeshellarg($currentFile))); + } + + public function testUpdateNone() + { + $manager = new Manager(new Manifest(array(new Update( + 'new.phar', + 'test', + 'test', + Version::create('2.0.1') + )))); + + $manager->setRunningFile($this->createFile()); + + $this->assertFalse($manager->update('1.0.0', true)); + } + + protected function setUp() + { + $this->manifest = new Manifest(); + $this->manager = new Manager($this->manifest); + } +} diff --git a/vendor/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManifestTest.php b/vendor/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManifestTest.php new file mode 100644 index 0000000..3e67a15 --- /dev/null +++ b/vendor/herrera-io/phar-update/src/tests/Herrera/Phar/Update/ManifestTest.php @@ -0,0 +1,158 @@ +assertSame( + $this->v1, + $this->manifest->findRecent($version, true) + ); + $this->assertSame( + $this->v1p, + $this->manifest->findRecent( + Version::create('2.0.0-alpha.1'), + true, + true + ) + ); + $this->assertSame($this->v2, $this->manifest->findRecent($version)); + } + + public function testFindRecentNone() + { + $this->assertNull( + $this->manifest->findRecent(Version::create('5.0.0')) + ); + } + + public function testGetUpdates() + { + $this->assertSame( + array($this->v1, $this->v1p, $this->v2), + $this->manifest->getUpdates() + ); + } + + public function testLoad() + { + $data = json_encode(array( + array( + 'name' => 'test.phar', + 'publicKey' => 'http://example.com/test-1.2.3.phar.pubkey', + 'sha1' => 'abcdefabcdefabcdefabcdefabcdefabcdefabcd', + 'url' => 'http://example.com/test-1.2.3.phar', + 'version' => '1.2.3', + ), + array( + 'name' => 'test.phar', + 'publicKey' => 'http://example.com/test-4.5.6.phar.pubkey', + 'sha1' => '0123456789012345678901234567890123456789', + 'url' => 'http://example.com/test-4.5.6.phar', + 'version' => '4.5.6' + ) + )); + + try { + $updates = Manifest::load($data)->getUpdates(); + } catch (JsonException $exception) { + print_r($exception->getErrors()); + throw $exception; + } + + $this->assertEquals( + 'http://example.com/test-4.5.6.phar.pubkey', + $updates[0]->getPublicKey() + ); + $this->assertEquals( + 'http://example.com/test-1.2.3.phar.pubkey', + $updates[1]->getPublicKey() + ); + } + + public function testLoadFile() + { + file_put_contents($file = $this->createFile(), json_encode(array( + array( + 'name' => 'test.phar', + 'sha1' => 'abcdefabcdefabcdefabcdefabcdefabcdefabcd', + 'url' => 'http://example.com/test-1.2.3.phar', + 'version' => '1.2.3' + ), + array( + 'name' => 'test.phar', + 'sha1' => '0123456789012345678901234567890123456789', + 'url' => 'http://example.com/test-4.5.6.phar', + 'version' => '4.5.6' + ) + ))); + + try { + $updates = Manifest::loadFile($file)->getUpdates(); + } catch (JsonException $exception) { + print_r($exception->getErrors()); + throw $exception; + } + + $this->assertEquals( + '0123456789012345678901234567890123456789', + $updates[0]->getSha1() + ); + $this->assertEquals( + 'abcdefabcdefabcdefabcdefabcdefabcdefabcd', + $updates[1]->getSha1() + ); + } + + protected function setUp() + { + $this->v1 = new Update( + 'test.phar', + '0123456789012345678901234567890123456789', + 'http://example.com/test.phar', + Version::create('1.2.3') + ); + + $this->v1p = new Update( + 'test.phar', + '0123456789012345678901234567890123456789', + 'http://example.com/test.phar', + Version::create('2.0.0-alpha.2') + ); + + $this->v2 = new Update( + 'test.phar', + '0123456789012345678901234567890123456789', + 'http://example.com/test.phar', + Version::create('4.5.6') + ); + + $this->manifest = new Manifest(array( + $this->v1, + $this->v1p, + $this->v2 + )); + } +} diff --git a/vendor/herrera-io/phar-update/src/tests/Herrera/Phar/Update/UpdateTest.php b/vendor/herrera-io/phar-update/src/tests/Herrera/Phar/Update/UpdateTest.php new file mode 100644 index 0000000..ea95133 --- /dev/null +++ b/vendor/herrera-io/phar-update/src/tests/Herrera/Phar/Update/UpdateTest.php @@ -0,0 +1,283 @@ +createFile('test.phar')); + + $key = $this->getKey(); + $phar = new Phar($file); + $phar->addFromString('test.php', 'setStub($phar->createDefaultStub('test.php')); + $phar->setSignatureAlgorithm( + Phar::OPENSSL, + $key[0] + ); + + file_put_contents($file . '.pubkey', $key[1]); + + unset($phar); + + $this->setPropertyValue($this->update, 'file', $file); + + return $file; + } + + public function getKey() + { + return array( + <<createPhar(); + $target = $this->createFile('taco.phar'); + + chmod($file, 0755); + + $this->update->copyTo($target); + + $this->assertFileEquals($file, $target); + $this->assertFileEquals($file . '.pubkey', $target . '.pubkey'); + + if (false === strpos(strtolower(PHP_OS), 'win')) { + $this->assertEquals(0755, fileperms($file) & 511); + } + } + + public function testCopyToNotDownloaded() + { + $this->setExpectedException( + 'Herrera\\Phar\\Update\\Exception\\LogicException', + 'The update file has not been downloaded.' + ); + + $this->update->copyTo($this->createFile()); + } + + public function testCopyToCopyError() + { + $this->createPhar(); + + $root = vfsStream::newDirectory('test'); + $root->addChild(vfsStream::newFile('test.phar', 0000)); + + $this->setExpectedException( + 'Herrera\\Phar\\Update\\Exception\\FileException', + 'failed to open stream' + ); + + $this->update->copyTo('vfs://test/test.phar'); + } + + public function testDeleteFile() + { + $file = $this->createFile('test.phar'); + + $this->setPropertyValue($this->update, 'file', $file); + + $this->update->deleteFile(); + + $this->assertFileNotExists(dirname($file)); + } + + public function testDeleteFileUnlinkError() + { + $root = vfsStream::newDirectory('test'); + $root->addChild(vfsStream::newFile('test.phar', 0000)); + + vfsStreamWrapper::setRoot($root); + + $this->setPropertyValue($this->update, 'file', 'vfs://test/test.phar'); + + // unlink() does not issue warning on streams, but does return false + $this->setExpectedException( + 'Herrera\\Phar\\Update\\Exception\\FileException' + ); + + $this->update->deleteFile(); + } + + public function testDeleteFileRmdirError() + { + $file = $this->createFile(); + + $this->setPropertyValue( + $this->update, + 'file', + $file . DIRECTORY_SEPARATOR . 'test.phar' + ); + + $this->setExpectedException( + 'Herrera\\Phar\\Update\\Exception\\FileException', + 'rmdir' + ); + + $this->update->deleteFile(); + } + + public function testGetFile() + { + unlink($file = $this->createFile('test.phar')); + + $key = $this->getKey(); + $phar = new Phar($file); + $phar->addFromString('test.php', 'setStub($phar->createDefaultStub('test.php')); + $phar->setSignatureAlgorithm( + Phar::OPENSSL, + $key[0] + ); + + file_put_contents($file . '.pubkey', $key[1]); + + unset($phar); + + $this->setPropertyValue($this->update, 'publicKey', $file . '.pubkey'); + $this->setPropertyValue($this->update, 'sha1', sha1_file($file)); + $this->setPropertyValue($this->update, 'url', $file); + + $this->assertFileEquals($file, $this->update->getFile()); + } + + public function testGetFileCorrupt() + { + $file = $this->createFile('test.phar'); + + file_put_contents($file, 'setPropertyValue($this->update, 'publicKey', null); + $this->setPropertyValue($this->update, 'sha1', sha1_file($file)); + $this->setPropertyValue($this->update, 'url', $file); + + $this->setExpectedException('UnexpectedValueException'); + + $this->assertFileEquals($file, $this->update->getFile()); + } + + public function testGetFileSha1Mismatch() + { + $file = $this->createFile(); + + file_put_contents($file, 'test'); + + $this->setPropertyValue($this->update, 'publicKey', null); + $this->setPropertyValue($this->update, 'url', $file); + + $this->setExpectedException( + 'Herrera\\Phar\\Update\\Exception\\FileException', + 'Mismatch of the SHA1 checksum (1234567890123456789012345678901234567890) of the downloaded file (' . sha1_file($file) . ').' + ); + + $this->update->getFile(); + } + + public function testGetName() + { + $this->assertEquals('test.phar', $this->update->getName()); + } + + public function testGetPublicKey() + { + $this->assertEquals( + 'http://example.com/test-1.2.3.phar.pubkey', + $this->update->getPublicKey() + ); + } + + public function testGetSha1() + { + $this->assertEquals( + '1234567890123456789012345678901234567890', + $this->update->getSha1() + ); + } + + public function testGetUrl() + { + $this->assertEquals( + 'http://example.com/test.phar', + $this->update->getUrl() + ); + } + + public function testGetVersion() + { + $this->assertSame($this->version, $this->update->getVersion()); + } + + public function testIsNewer() + { + $this->assertTrue($this->update->isNewer(Version::create('1.0.0'))); + } + + protected function setUp() + { + $this->update = new Update( + 'test.phar', + '1234567890123456789012345678901234567890', + 'http://example.com/test.phar', + $this->version = Version::create('1.2.3'), + 'http://example.com/test-1.2.3.phar.pubkey' + ); + } +} diff --git a/vendor/herrera-io/phar-update/src/tests/bootstrap.php b/vendor/herrera-io/phar-update/src/tests/bootstrap.php new file mode 100644 index 0000000..e7299d1 --- /dev/null +++ b/vendor/herrera-io/phar-update/src/tests/bootstrap.php @@ -0,0 +1,5 @@ +getMetadataForClass('MyNamespace\MyObject'); + diff --git a/vendor/jms/metadata/composer.json b/vendor/jms/metadata/composer.json new file mode 100644 index 0000000..58dec88 --- /dev/null +++ b/vendor/jms/metadata/composer.json @@ -0,0 +1,28 @@ +{ + "name": "jms/metadata", + "description": "Class/method/property metadata management in PHP", + "keywords": ["annotations","metadata","yaml","xml"], + "type": "library", + "license": "Apache-2.0", + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "require": { + "php": ">=5.3.0" + }, + "require-dev" : { + "doctrine/cache" : "~1.0", + "symfony/cache" : "~3.1" + }, + "autoload": { + "psr-0": { "Metadata\\": "src/" } + }, + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + } +} diff --git a/vendor/jms/metadata/composer.lock b/vendor/jms/metadata/composer.lock new file mode 100644 index 0000000..fe17ee6 --- /dev/null +++ b/vendor/jms/metadata/composer.lock @@ -0,0 +1,250 @@ +{ + "_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#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "4cc1821f9af1271c77bb9a8bebc26138", + "content-hash": "ef7080989caee6eaf6daf11732a5bb86", + "packages": [], + "packages-dev": [ + { + "name": "doctrine/cache", + "version": "v1.6.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/b6f544a20f4807e81f7044d31e679ccbb1866dc3", + "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3", + "shasum": "" + }, + "require": { + "php": "~5.5|~7.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|~5.0", + "predis/predis": "~1.0", + "satooshi/php-coveralls": "~0.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "time": "2016-10-29 11:16:17" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06 20:24:11" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10 12:19:37" + }, + { + "name": "symfony/cache", + "version": "v3.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "0f5881c9b8a03cef13fdee381f8ee623d0429cf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/0f5881c9b8a03cef13fdee381f8ee623d0429cf4", + "reference": "0f5881c9b8a03cef13fdee381f8ee623d0429cf4", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/cache": "~1.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/cache-implementation": "1.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "~1.6", + "predis/predis": "~1.0" + }, + "suggest": { + "symfony/polyfill-apcu": "For using ApcuAdapter on HHVM" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony implementation of PSR-6", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "time": "2016-11-09 14:09:05" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.3.0" + }, + "platform-dev": [] +} diff --git a/vendor/jms/metadata/phpunit.xml.dist b/vendor/jms/metadata/phpunit.xml.dist new file mode 100644 index 0000000..38db7c3 --- /dev/null +++ b/vendor/jms/metadata/phpunit.xml.dist @@ -0,0 +1,25 @@ + + + + + + ./tests/Metadata/ + + + + + + performance + + + diff --git a/vendor/jms/metadata/src/Metadata/AdvancedMetadataFactoryInterface.php b/vendor/jms/metadata/src/Metadata/AdvancedMetadataFactoryInterface.php new file mode 100644 index 0000000..22391ec --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/AdvancedMetadataFactoryInterface.php @@ -0,0 +1,36 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata; + +/** + * Interface for advanced Metadata Factory implementations. + * + * @author Johannes M. Schmitt + * @author Jordan Stout + */ +interface AdvancedMetadataFactoryInterface extends MetadataFactoryInterface +{ + /** + * Gets all the possible classes. + * + * @throws \RuntimeException if driver does not an advanced driver. + * @return array + */ + public function getAllClassNames(); +} diff --git a/vendor/jms/metadata/src/Metadata/Cache/CacheInterface.php b/vendor/jms/metadata/src/Metadata/Cache/CacheInterface.php new file mode 100644 index 0000000..dbf3ccb --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Cache/CacheInterface.php @@ -0,0 +1,35 @@ + + */ +class DoctrineCacheAdapter implements CacheInterface +{ + /** + * @param string $prefix + */ + private $prefix; + + /** + * @var Cache $cache + */ + private $cache; + + /** + * @param string $prefix + * @param Cache $cache + */ + public function __construct($prefix, Cache $cache) + { + $this->prefix = $prefix; + $this->cache = $cache; + } + + /** + * {@inheritDoc} + */ + public function loadClassMetadataFromCache(\ReflectionClass $class) + { + $cache = $this->cache->fetch($this->prefix . $class->name); + return false === $cache ? null : $cache; + } + + /** + * {@inheritDoc} + */ + public function putClassMetadataInCache(ClassMetadata $metadata) + { + $this->cache->save($this->prefix . $metadata->name, $metadata); + } + + /** + * {@inheritDoc} + */ + public function evictClassMetadataFromCache(\ReflectionClass $class) + { + $this->cache->delete($this->prefix . $class->name); + } +} diff --git a/vendor/jms/metadata/src/Metadata/Cache/FileCache.php b/vendor/jms/metadata/src/Metadata/Cache/FileCache.php new file mode 100644 index 0000000..c16848e --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Cache/FileCache.php @@ -0,0 +1,83 @@ +dir = rtrim($dir, '\\/'); + } + + /** + * {@inheritDoc} + */ + public function loadClassMetadataFromCache(\ReflectionClass $class) + { + $path = $this->dir.'/'.strtr($class->name, '\\', '-').'.cache.php'; + if (!file_exists($path)) { + return null; + } + + return include $path; + } + + /** + * {@inheritDoc} + */ + public function putClassMetadataInCache(ClassMetadata $metadata) + { + $path = $this->dir.'/'.strtr($metadata->name, '\\', '-').'.cache.php'; + + $tmpFile = tempnam($this->dir, 'metadata-cache'); + file_put_contents($tmpFile, 'renameFile($tmpFile, $path); + } + + /** + * Renames a file with fallback for windows + * + * @param string $source + * @param string $target + */ + private function renameFile($source, $target) { + if (false === @rename($source, $target)) { + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + if (false === copy($source, $target)) { + throw new \RuntimeException(sprintf('(WIN) Could not write new cache file to %s.', $target)); + } + if (false === unlink($source)) { + throw new \RuntimeException(sprintf('(WIN) Could not delete temp cache file to %s.', $source)); + } + } else { + throw new \RuntimeException(sprintf('Could not write new cache file to %s.', $target)); + } + } + } + + /** + * {@inheritDoc} + */ + public function evictClassMetadataFromCache(\ReflectionClass $class) + { + $path = $this->dir.'/'.strtr($class->name, '\\', '-').'.cache.php'; + if (file_exists($path)) { + unlink($path); + } + } +} diff --git a/vendor/jms/metadata/src/Metadata/Cache/PsrCacheAdapter.php b/vendor/jms/metadata/src/Metadata/Cache/PsrCacheAdapter.php new file mode 100644 index 0000000..9b9bb2f --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Cache/PsrCacheAdapter.php @@ -0,0 +1,51 @@ +prefix = $prefix; + $this->pool = $pool; + } + + /** + * {@inheritDoc} + */ + public function loadClassMetadataFromCache(\ReflectionClass $class) + { + $this->lastItem = $this->pool->getItem(strtr($this->prefix . $class->name, '\\', '.')); + + return $this->lastItem->get(); + } + + /** + * {@inheritDoc} + */ + public function putClassMetadataInCache(ClassMetadata $metadata) + { + $key = strtr($this->prefix . $metadata->name, '\\', '.'); + + if (null === $this->lastItem || $this->lastItem->getKey() !== $key) { + $this->lastItem = $this->pool->getItem($key); + } + + $this->pool->save($this->lastItem->set($metadata)); + } + + /** + * {@inheritDoc} + */ + public function evictClassMetadataFromCache(\ReflectionClass $class) + { + $this->pool->deleteItem(strtr($this->prefix . $class->name, '\\', '.')); + } +} diff --git a/vendor/jms/metadata/src/Metadata/ClassHierarchyMetadata.php b/vendor/jms/metadata/src/Metadata/ClassHierarchyMetadata.php new file mode 100644 index 0000000..a7ed6c0 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/ClassHierarchyMetadata.php @@ -0,0 +1,55 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata; + +/** + * Represents the metadata for the entire class hierarchy. + * + * @author Johannes M. Schmitt + */ +class ClassHierarchyMetadata +{ + public $classMetadata = array(); + + public function addClassMetadata(ClassMetadata $metadata) + { + $this->classMetadata[$metadata->name] = $metadata; + } + + public function getRootClassMetadata() + { + return reset($this->classMetadata); + } + + public function getOutsideClassMetadata() + { + return end($this->classMetadata); + } + + public function isFresh($timestamp) + { + foreach ($this->classMetadata as $metadata) { + if (!$metadata->isFresh($timestamp)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/jms/metadata/src/Metadata/ClassMetadata.php b/vendor/jms/metadata/src/Metadata/ClassMetadata.php new file mode 100644 index 0000000..8f85054 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/ClassMetadata.php @@ -0,0 +1,98 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata; + +/** + * Base class for class metadata. + * + * This class is intended to be extended to add your own application specific + * properties, and flags. + * + * @author Johannes M. Schmitt + */ +class ClassMetadata implements \Serializable +{ + public $name; + public $reflection; + public $methodMetadata = array(); + public $propertyMetadata = array(); + public $fileResources = array(); + public $createdAt; + + public function __construct($name) + { + $this->name = $name; + + $this->reflection = new \ReflectionClass($name); + $this->createdAt = time(); + } + + public function addMethodMetadata(MethodMetadata $metadata) + { + $this->methodMetadata[$metadata->name] = $metadata; + } + + public function addPropertyMetadata(PropertyMetadata $metadata) + { + $this->propertyMetadata[$metadata->name] = $metadata; + } + + public function isFresh($timestamp = null) + { + if (null === $timestamp) { + $timestamp = $this->createdAt; + } + + foreach ($this->fileResources as $filepath) { + if (!file_exists($filepath)) { + return false; + } + + if ($timestamp < filemtime($filepath)) { + return false; + } + } + + return true; + } + + public function serialize() + { + return serialize(array( + $this->name, + $this->methodMetadata, + $this->propertyMetadata, + $this->fileResources, + $this->createdAt, + )); + } + + public function unserialize($str) + { + list( + $this->name, + $this->methodMetadata, + $this->propertyMetadata, + $this->fileResources, + $this->createdAt + ) = unserialize($str); + + $this->reflection = new \ReflectionClass($this->name); + } +} diff --git a/vendor/jms/metadata/src/Metadata/Driver/AbstractFileDriver.php b/vendor/jms/metadata/src/Metadata/Driver/AbstractFileDriver.php new file mode 100644 index 0000000..3392097 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Driver/AbstractFileDriver.php @@ -0,0 +1,59 @@ + + */ +abstract class AbstractFileDriver implements AdvancedDriverInterface +{ + /** + * @var FileLocatorInterface|FileLocator + */ + private $locator; + + public function __construct(FileLocatorInterface $locator) + { + $this->locator = $locator; + } + + public function loadMetadataForClass(\ReflectionClass $class) + { + if (null === $path = $this->locator->findFileForClass($class, $this->getExtension())) { + return null; + } + + return $this->loadMetadataFromFile($class, $path); + } + + /** + * {@inheritDoc} + */ + public function getAllClassNames() + { + if (!$this->locator instanceof AdvancedFileLocatorInterface) { + throw new \RuntimeException('Locator "%s" must be an instance of "AdvancedFileLocatorInterface".'); + } + + return $this->locator->findAllClasses($this->getExtension()); + } + + /** + * Parses the content of the file, and converts it to the desired metadata. + * + * @param \ReflectionClass $class + * @param string $file + * + * @return \Metadata\ClassMetadata|null + */ + abstract protected function loadMetadataFromFile(\ReflectionClass $class, $file); + + /** + * Returns the extension of the file. + * + * @return string + */ + abstract protected function getExtension(); +} diff --git a/vendor/jms/metadata/src/Metadata/Driver/AdvancedDriverInterface.php b/vendor/jms/metadata/src/Metadata/Driver/AdvancedDriverInterface.php new file mode 100644 index 0000000..48b0eb4 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Driver/AdvancedDriverInterface.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata\Driver; + +/** + * Forces advanced logic to drivers. + * + * @author Jordan Stout + */ +interface AdvancedDriverInterface extends DriverInterface +{ + /** + * Gets all the metadata class names known to this driver. + * + * @return array + */ + public function getAllClassNames(); +} \ No newline at end of file diff --git a/vendor/jms/metadata/src/Metadata/Driver/AdvancedFileLocatorInterface.php b/vendor/jms/metadata/src/Metadata/Driver/AdvancedFileLocatorInterface.php new file mode 100644 index 0000000..a2f6c84 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Driver/AdvancedFileLocatorInterface.php @@ -0,0 +1,36 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata\Driver; + +/** + * Forces advanced logic on a file locator. + * + * @author Jordan Stout + */ +interface AdvancedFileLocatorInterface extends FileLocatorInterface +{ + /** + * Finds all possible metadata files. + * + * @param string $extension + * + * @return array + */ + public function findAllClasses($extension); +} \ No newline at end of file diff --git a/vendor/jms/metadata/src/Metadata/Driver/DriverChain.php b/vendor/jms/metadata/src/Metadata/Driver/DriverChain.php new file mode 100644 index 0000000..d7221d4 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Driver/DriverChain.php @@ -0,0 +1,70 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata\Driver; + +final class DriverChain implements AdvancedDriverInterface +{ + private $drivers; + + public function __construct(array $drivers = array()) + { + $this->drivers = $drivers; + } + + public function addDriver(DriverInterface $driver) + { + $this->drivers[] = $driver; + } + + public function loadMetadataForClass(\ReflectionClass $class) + { + foreach ($this->drivers as $driver) { + if (null !== $metadata = $driver->loadMetadataForClass($class)) { + return $metadata; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getAllClassNames() + { + $classes = array(); + foreach ($this->drivers as $driver) { + if (!$driver instanceof AdvancedDriverInterface) { + throw new \RuntimeException( + sprintf( + 'Driver "%s" must be an instance of "AdvancedDriverInterface" to use '. + '"DriverChain::getAllClassNames()".', + get_class($driver) + ) + ); + } + $driverClasses = $driver->getAllClassNames(); + if (!empty($driverClasses)) { + $classes = array_merge($classes, $driverClasses); + } + } + + return $classes; + } +} diff --git a/vendor/jms/metadata/src/Metadata/Driver/DriverInterface.php b/vendor/jms/metadata/src/Metadata/Driver/DriverInterface.php new file mode 100644 index 0000000..4044525 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Driver/DriverInterface.php @@ -0,0 +1,29 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata\Driver; + +interface DriverInterface +{ + /** + * @param \ReflectionClass $class + * + * @return \Metadata\ClassMetadata + */ + public function loadMetadataForClass(\ReflectionClass $class); +} diff --git a/vendor/jms/metadata/src/Metadata/Driver/FileLocator.php b/vendor/jms/metadata/src/Metadata/Driver/FileLocator.php new file mode 100644 index 0000000..296498d --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Driver/FileLocator.php @@ -0,0 +1,66 @@ +dirs = $dirs; + } + + public function getDirs() + { + return $this->dirs; + } + + /** + * @param \ReflectionClass $class + * @param string $extension + * + * @return string|null + */ + public function findFileForClass(\ReflectionClass $class, $extension) + { + foreach ($this->dirs as $prefix => $dir) { + if ('' !== $prefix && 0 !== strpos($class->getNamespaceName(), $prefix)) { + continue; + } + + $len = '' === $prefix ? 0 : strlen($prefix) + 1; + $path = $dir.'/'.str_replace('\\', '.', substr($class->name, $len)).'.'.$extension; + if (file_exists($path)) { + return $path; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function findAllClasses($extension) + { + $classes = array(); + foreach ($this->dirs as $prefix => $dir) { + /** @var $iterator \RecursiveIteratorIterator|\SplFileInfo[] */ + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($dir), + \RecursiveIteratorIterator::LEAVES_ONLY + ); + $nsPrefix = $prefix !== '' ? $prefix.'\\' : ''; + foreach ($iterator as $file) { + if (($fileName = $file->getBasename('.'.$extension)) == $file->getBasename()) { + continue; + } + + $classes[] = $nsPrefix.str_replace('.', '\\', $fileName); + } + } + + return $classes; + } +} diff --git a/vendor/jms/metadata/src/Metadata/Driver/FileLocatorInterface.php b/vendor/jms/metadata/src/Metadata/Driver/FileLocatorInterface.php new file mode 100644 index 0000000..06c7a16 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Driver/FileLocatorInterface.php @@ -0,0 +1,14 @@ +container = $container; + $this->realDriverId = $realDriverId; + } + + /** + * {@inheritDoc} + */ + public function loadMetadataForClass(\ReflectionClass $class) + { + return $this->container->get($this->realDriverId)->loadMetadataForClass($class); + } +} diff --git a/vendor/jms/metadata/src/Metadata/MergeableClassMetadata.php b/vendor/jms/metadata/src/Metadata/MergeableClassMetadata.php new file mode 100644 index 0000000..13ec158 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/MergeableClassMetadata.php @@ -0,0 +1,23 @@ +name = $object->name; + $this->reflection = $object->reflection; + $this->methodMetadata = array_merge($this->methodMetadata, $object->methodMetadata); + $this->propertyMetadata = array_merge($this->propertyMetadata, $object->propertyMetadata); + $this->fileResources = array_merge($this->fileResources, $object->fileResources); + + if ($object->createdAt < $this->createdAt) { + $this->createdAt = $object->createdAt; + } + } +} \ No newline at end of file diff --git a/vendor/jms/metadata/src/Metadata/MergeableInterface.php b/vendor/jms/metadata/src/Metadata/MergeableInterface.php new file mode 100644 index 0000000..5955074 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/MergeableInterface.php @@ -0,0 +1,13 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata; + +use Metadata\Driver\AdvancedDriverInterface; +use Metadata\Driver\DriverInterface; +use Metadata\Cache\CacheInterface; + +class MetadataFactory implements AdvancedMetadataFactoryInterface +{ + private $driver; + private $cache; + private $loadedMetadata = array(); + private $loadedClassMetadata = array(); + private $hierarchyMetadataClass; + private $includeInterfaces = false; + private $debug; + + /** + * @param DriverInterface $driver + * @param string $hierarchyMetadataClass + * @param boolean $debug + */ + public function __construct(DriverInterface $driver, $hierarchyMetadataClass = 'Metadata\ClassHierarchyMetadata', $debug = false) + { + $this->driver = $driver; + $this->hierarchyMetadataClass = $hierarchyMetadataClass; + $this->debug = (Boolean) $debug; + } + + /** + * @param boolean $include + */ + public function setIncludeInterfaces($include) + { + $this->includeInterfaces = (Boolean) $include; + } + + public function setCache(CacheInterface $cache) + { + $this->cache = $cache; + } + + /** + * @param string $className + * + * @return ClassHierarchyMetadata|MergeableClassMetadata|null + */ + public function getMetadataForClass($className) + { + if (isset($this->loadedMetadata[$className])) { + return $this->filterNullMetadata($this->loadedMetadata[$className]); + } + + $metadata = null; + foreach ($this->getClassHierarchy($className) as $class) { + if (isset($this->loadedClassMetadata[$name = $class->getName()])) { + if (null !== $classMetadata = $this->filterNullMetadata($this->loadedClassMetadata[$name])) { + $this->addClassMetadata($metadata, $classMetadata); + } + continue; + } + + // check the cache + if (null !== $this->cache) { + if (($classMetadata = $this->cache->loadClassMetadataFromCache($class)) instanceof NullMetadata) { + $this->loadedClassMetadata[$name] = $classMetadata; + continue; + } + + if (null !== $classMetadata) { + if ( ! $classMetadata instanceof ClassMetadata) { + throw new \LogicException(sprintf('The cache must return instances of ClassMetadata, but got %s.', var_export($classMetadata, true))); + } + + if ($this->debug && !$classMetadata->isFresh()) { + $this->cache->evictClassMetadataFromCache($classMetadata->reflection); + } else { + $this->loadedClassMetadata[$name] = $classMetadata; + $this->addClassMetadata($metadata, $classMetadata); + continue; + } + } + } + + // load from source + if (null !== $classMetadata = $this->driver->loadMetadataForClass($class)) { + $this->loadedClassMetadata[$name] = $classMetadata; + $this->addClassMetadata($metadata, $classMetadata); + + if (null !== $this->cache) { + $this->cache->putClassMetadataInCache($classMetadata); + } + + continue; + } + + if (null !== $this->cache && !$this->debug) { + $this->cache->putClassMetadataInCache(new NullMetadata($class->getName())); + } + } + + if (null === $metadata) { + $metadata = new NullMetadata($className); + } + + return $this->filterNullMetadata($this->loadedMetadata[$className] = $metadata); + } + + /** + * {@inheritDoc} + */ + public function getAllClassNames() + { + if (!$this->driver instanceof AdvancedDriverInterface) { + throw new \RuntimeException( + sprintf('Driver "%s" must be an instance of "AdvancedDriverInterface".', get_class($this->driver)) + ); + } + + return $this->driver->getAllClassNames(); + } + + /** + * @param ClassMetadata|null $metadata + * @param ClassMetadata $toAdd + */ + private function addClassMetadata(&$metadata, $toAdd) + { + if ($toAdd instanceof MergeableInterface) { + if (null === $metadata) { + $metadata = clone $toAdd; + } else { + $metadata->merge($toAdd); + } + } else { + if (null === $metadata) { + $metadata = new $this->hierarchyMetadataClass; + } + + $metadata->addClassMetadata($toAdd); + } + } + + /** + * @param string $class + */ + private function getClassHierarchy($class) + { + $classes = array(); + $refl = new \ReflectionClass($class); + + do { + $classes[] = $refl; + $refl = $refl->getParentClass(); + } while (false !== $refl); + + $classes = array_reverse($classes, false); + + if (!$this->includeInterfaces) { + return $classes; + } + + $addedInterfaces = array(); + $newHierarchy = array(); + + foreach ($classes as $class) { + foreach ($class->getInterfaces() as $interface) { + if (isset($addedInterfaces[$interface->getName()])) { + continue; + } + $addedInterfaces[$interface->getName()] = true; + + $newHierarchy[] = $interface; + } + + $newHierarchy[] = $class; + } + + return $newHierarchy; + } + + /** + * @param NullMetadata|null $metadata + * + * @return ClassMetadata|null + */ + private function filterNullMetadata($metadata = null) + { + return !$metadata instanceof NullMetadata ? $metadata : null; + } +} diff --git a/vendor/jms/metadata/src/Metadata/MetadataFactoryInterface.php b/vendor/jms/metadata/src/Metadata/MetadataFactoryInterface.php new file mode 100644 index 0000000..c544b52 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/MetadataFactoryInterface.php @@ -0,0 +1,42 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata; + +/** + * Interface for Metadata Factory implementations. + * + * @author Johannes M. Schmitt + */ +interface MetadataFactoryInterface +{ + /** + * Returns the gathered metadata for the given class name. + * + * If the drivers return instances of MergeableClassMetadata, these will be + * merged prior to returning. Otherwise, all metadata for the inheritance + * hierarchy will be returned as ClassHierarchyMetadata unmerged. + * + * If no metadata is available, null is returned. + * + * @param string $className + * + * @return ClassHierarchyMetadata|MergeableClassMetadata|null + */ + public function getMetadataForClass($className); +} diff --git a/vendor/jms/metadata/src/Metadata/MethodMetadata.php b/vendor/jms/metadata/src/Metadata/MethodMetadata.php new file mode 100644 index 0000000..67b2200 --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/MethodMetadata.php @@ -0,0 +1,67 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata; + +/** + * Base class for method metadata. + * + * This class is intended to be extended to add your application specific + * properties, and flags. + * + * @author Johannes M. Schmitt + */ +class MethodMetadata implements \Serializable +{ + public $class; + public $name; + public $reflection; + + public function __construct($class, $name) + { + $this->class = $class; + $this->name = $name; + + $this->reflection = new \ReflectionMethod($class, $name); + $this->reflection->setAccessible(true); + } + + /** + * @param object $obj + * @param array $args + * + * @return mixed + */ + public function invoke($obj, array $args = array()) + { + return $this->reflection->invokeArgs($obj, $args); + } + + public function serialize() + { + return serialize(array($this->class, $this->name)); + } + + public function unserialize($str) + { + list($this->class, $this->name) = unserialize($str); + + $this->reflection = new \ReflectionMethod($this->class, $this->name); + $this->reflection->setAccessible(true); + } +} diff --git a/vendor/jms/metadata/src/Metadata/NullMetadata.php b/vendor/jms/metadata/src/Metadata/NullMetadata.php new file mode 100644 index 0000000..f06dfba --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/NullMetadata.php @@ -0,0 +1,13 @@ + + */ +class NullMetadata extends ClassMetadata +{ + +} diff --git a/vendor/jms/metadata/src/Metadata/PropertyMetadata.php b/vendor/jms/metadata/src/Metadata/PropertyMetadata.php new file mode 100644 index 0000000..040be6b --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/PropertyMetadata.php @@ -0,0 +1,78 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata; + +/** + * Base class for property metadata. + * + * This class is intended to be extended to add your application specific + * properties, and flags. + * + * @author Johannes M. Schmitt + */ +class PropertyMetadata implements \Serializable +{ + public $class; + public $name; + public $reflection; + + public function __construct($class, $name) + { + $this->class = $class; + $this->name = $name; + + $this->reflection = new \ReflectionProperty($class, $name); + $this->reflection->setAccessible(true); + } + + /** + * @param object $obj + * + * @return mixed + */ + public function getValue($obj) + { + return $this->reflection->getValue($obj); + } + + /** + * @param object $obj + * @param string $value + */ + public function setValue($obj, $value) + { + $this->reflection->setValue($obj, $value); + } + + public function serialize() + { + return serialize(array( + $this->class, + $this->name, + )); + } + + public function unserialize($str) + { + list($this->class, $this->name) = unserialize($str); + + $this->reflection = new \ReflectionProperty($this->class, $this->name); + $this->reflection->setAccessible(true); + } +} diff --git a/vendor/jms/metadata/src/Metadata/Version.php b/vendor/jms/metadata/src/Metadata/Version.php new file mode 100644 index 0000000..3a7570e --- /dev/null +++ b/vendor/jms/metadata/src/Metadata/Version.php @@ -0,0 +1,24 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace Metadata; + +final class Version +{ + const VERSION = '1.4-DEV'; +} diff --git a/vendor/jms/metadata/tests/Metadata/Tests/Cache/DoctrineCacheAdapterTest.php b/vendor/jms/metadata/tests/Metadata/Tests/Cache/DoctrineCacheAdapterTest.php new file mode 100644 index 0000000..3164b89 --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/Cache/DoctrineCacheAdapterTest.php @@ -0,0 +1,33 @@ +markTestSkipped('Doctrine\Common is not installed.'); + } + } + + public function testLoadEvictPutClassMetadataFromInCache() + { + $cache = new DoctrineCacheAdapter('metadata-test', new ArrayCache()); + + $this->assertNull($cache->loadClassMetadataFromCache($refl = new \ReflectionClass('Metadata\Tests\Fixtures\TestObject'))); + $cache->putClassMetadataInCache($metadata = new ClassMetadata('Metadata\Tests\Fixtures\TestObject')); + + $this->assertEquals($metadata, $cache->loadClassMetadataFromCache($refl)); + + $cache->evictClassMetadataFromCache($refl); + $this->assertNull($cache->loadClassMetadataFromCache($refl)); + } +} diff --git a/vendor/jms/metadata/tests/Metadata/Tests/Cache/FileCacheTest.php b/vendor/jms/metadata/tests/Metadata/Tests/Cache/FileCacheTest.php new file mode 100644 index 0000000..9325dd7 --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/Cache/FileCacheTest.php @@ -0,0 +1,22 @@ +assertNull($cache->loadClassMetadataFromCache($refl = new \ReflectionClass('Metadata\Tests\Fixtures\TestObject'))); + $cache->putClassMetadataInCache($metadata = new ClassMetadata('Metadata\Tests\Fixtures\TestObject')); + + $this->assertEquals($metadata, $cache->loadClassMetadataFromCache($refl)); + + $cache->evictClassMetadataFromCache($refl); + $this->assertNull($cache->loadClassMetadataFromCache($refl)); + } +} \ No newline at end of file diff --git a/vendor/jms/metadata/tests/Metadata/Tests/Cache/PsrCacheAdapterTest.php b/vendor/jms/metadata/tests/Metadata/Tests/Cache/PsrCacheAdapterTest.php new file mode 100644 index 0000000..7470eb6 --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/Cache/PsrCacheAdapterTest.php @@ -0,0 +1,33 @@ +markTestSkipped('symfony/cache is not installed.'); + } + } + + public function testLoadEvictPutClassMetadataFromInCache() + { + $cache = new PsrCacheAdapter('metadata-test', new ArrayAdapter()); + + $this->assertNull($cache->loadClassMetadataFromCache($refl = new \ReflectionClass('Metadata\Tests\Fixtures\TestObject'))); + $cache->putClassMetadataInCache($metadata = new ClassMetadata('Metadata\Tests\Fixtures\TestObject')); + + $this->assertEquals($metadata, $cache->loadClassMetadataFromCache($refl)); + + $cache->evictClassMetadataFromCache($refl); + $this->assertNull($cache->loadClassMetadataFromCache($refl)); + } +} diff --git a/vendor/jms/metadata/tests/Metadata/Tests/ClassMetadataTest.php b/vendor/jms/metadata/tests/Metadata/Tests/ClassMetadataTest.php new file mode 100644 index 0000000..99cb9b3 --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/ClassMetadataTest.php @@ -0,0 +1,39 @@ +assertEquals('Metadata\Tests\Fixtures\TestObject', $metadata->name); + $this->assertEquals('Metadata\Tests\Fixtures\TestObject', $metadata->reflection->name); + } + + public function testSerializeUnserialize() + { + $metadata = new ClassMetadata('Metadata\Tests\Fixtures\TestObject'); + + $this->assertEquals($metadata, unserialize(serialize($metadata))); + } + + public function testIsFresh() + { + $ref = new \ReflectionClass('Metadata\Tests\Fixtures\TestObject'); + touch($ref->getFilename()); + sleep(2); + + $metadata = new ClassMetadata($ref->name); + $metadata->fileResources[] = $ref->getFilename(); + $this->assertTrue($metadata->isFresh()); + + sleep(2); + clearstatcache($ref->getFilename()); + touch($ref->getFilename()); + $this->assertFalse($metadata->isFresh()); + } +} diff --git a/vendor/jms/metadata/tests/Metadata/Tests/Driver/AbstractFileDriverTest.php b/vendor/jms/metadata/tests/Metadata/Tests/Driver/AbstractFileDriverTest.php new file mode 100644 index 0000000..20b91fb --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/Driver/AbstractFileDriverTest.php @@ -0,0 +1,85 @@ + + */ +class AbstractFileDriverTest extends \PHPUnit_Framework_TestCase +{ + private static $extension = 'jms_metadata.yml'; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $locator; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $driver; + + public function setUp() + { + $this->locator = $this->getMock('Metadata\Driver\FileLocator', array(), array(), '', false); + $this->driver = $this->getMockBuilder('Metadata\Driver\AbstractFileDriver') + ->setConstructorArgs(array($this->locator)) + ->getMockForAbstractClass(); + + $this->driver->expects($this->any())->method('getExtension')->will($this->returnValue(self::$extension)); + } + + public function testLoadMetadataForClass() + { + $class = new \ReflectionClass('\stdClass'); + $this->locator + ->expects($this->once()) + ->method('findFileForClass') + ->with($class, self::$extension) + ->will($this->returnValue('Some\Path')); + + $this->driver + ->expects($this->once()) + ->method('loadMetadataFromFile') + ->with($class, 'Some\Path') + ->will($this->returnValue($metadata = new ClassMetadata('\stdClass'))); + + $this->assertSame($metadata, $this->driver->loadMetadataForClass($class)); + } + + public function testLoadMetadataForClassWillReturnNull() + { + $class = new \ReflectionClass('\stdClass'); + $this->locator + ->expects($this->once()) + ->method('findFileForClass') + ->with($class, self::$extension) + ->will($this->returnValue(null)); + + $this->assertSame(null, $this->driver->loadMetadataForClass($class)); + } + + public function testGetAllClassNames() + { + $class = new \ReflectionClass('\stdClass'); + $this->locator + ->expects($this->once()) + ->method('findAllClasses') + ->with(self::$extension) + ->will($this->returnValue(array('\stdClass'))); + + $this->assertSame(array('\stdClass'), $this->driver->getAllClassNames($class)); + } + + public function testGetAllClassNamesThrowsRuntimeException() + { + $this->setExpectedException('RuntimeException'); + + $locator = $this->getMock('Metadata\Driver\FileLocatorInterface', array(), array(), '', false); + $driver = $this->getMockBuilder('Metadata\Driver\AbstractFileDriver') + ->setConstructorArgs(array($locator)) + ->getMockForAbstractClass(); + $class = new \ReflectionClass('\stdClass'); + $locator->expects($this->never())->method('findAllClasses'); + + $driver->getAllClassNames($class); + } +} diff --git a/vendor/jms/metadata/tests/Metadata/Tests/Driver/DriverChainTest.php b/vendor/jms/metadata/tests/Metadata/Tests/Driver/DriverChainTest.php new file mode 100644 index 0000000..5e33643 --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/Driver/DriverChainTest.php @@ -0,0 +1,65 @@ +getMock('Metadata\\Driver\\DriverInterface'); + $driver + ->expects($this->once()) + ->method('loadMetadataForClass') + ->will($this->returnValue($metadata = new ClassMetadata('\stdClass'))) + ; + $chain = new DriverChain(array($driver)); + + $this->assertSame($metadata, $chain->loadMetadataForClass(new \ReflectionClass('\stdClass'))); + } + + public function testGetAllClassNames() + { + $driver1 = $this->getMock('Metadata\\Driver\\AdvancedDriverInterface'); + $driver1 + ->expects($this->once()) + ->method('getAllClassNames') + ->will($this->returnValue(array('Foo'))); + + $driver2 = $this->getMock('Metadata\\Driver\\AdvancedDriverInterface'); + $driver2 + ->expects($this->once()) + ->method('getAllClassNames') + ->will($this->returnValue(array('Bar'))); + + $chain = new DriverChain(array($driver1, $driver2)); + + $this->assertSame(array('Foo', 'Bar'), $chain->getAllClassNames()); + } + + public function testLoadMetadataForClassReturnsNullWhenNoMetadataIsFound() + { + $driver = new DriverChain(array()); + $this->assertNull($driver->loadMetadataForClass(new \ReflectionClass('\stdClass'))); + + $driver = $this->getMock('Metadata\\Driver\\DriverInterface'); + $driver + ->expects($this->once()) + ->method('loadMetadataForClass') + ->will($this->returnValue(null)) + ; + $driverChain = new DriverChain(array($driver)); + $this->assertNull($driver->loadMetadataForClass(new \ReflectionClass('\stdClass'))); + } + + public function testGetAllClassNamesThrowsException() + { + $this->setExpectedException('RuntimeException'); + $driver = $this->getMock('Metadata\\Driver\\DriverInterface'); + $driver->expects($this->never())->method('getAllClassNames'); + $chain = new DriverChain(array($driver)); + $chain->getAllClassNames(); + } +} diff --git a/vendor/jms/metadata/tests/Metadata/Tests/Driver/FileLocatorTest.php b/vendor/jms/metadata/tests/Metadata/Tests/Driver/FileLocatorTest.php new file mode 100644 index 0000000..b92d8c9 --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/Driver/FileLocatorTest.php @@ -0,0 +1,69 @@ + __DIR__.'/Fixture/A', + 'Metadata\Tests\Driver\Fixture\B' => __DIR__.'/Fixture/B', + 'Metadata\Tests\Driver\Fixture\C' => __DIR__.'/Fixture/C', + )); + + $ref = new \ReflectionClass('Metadata\Tests\Driver\Fixture\A\A'); + $this->assertEquals(realpath(__DIR__.'/Fixture/A/A.xml'), realpath($locator->findFileForClass($ref, 'xml'))); + + $ref = new \ReflectionClass('Metadata\Tests\Driver\Fixture\B\B'); + $this->assertNull($locator->findFileForClass($ref, 'xml')); + + $ref = new \ReflectionClass('Metadata\Tests\Driver\Fixture\C\SubDir\C'); + $this->assertEquals(realpath(__DIR__.'/Fixture/C/SubDir.C.yml'), realpath($locator->findFileForClass($ref, 'yml'))); + } + + public function testTraits() + { + if (version_compare(PHP_VERSION, '5.4.0', '<')) { + $this->markTestSkipped('No traits available'); + } + + $locator = new FileLocator(array( + 'Metadata\Tests\Driver\Fixture\T' => __DIR__.'/Fixture/T', + )); + + $ref = new \ReflectionClass('Metadata\Tests\Driver\Fixture\T\T'); + $this->assertEquals(realpath(__DIR__.'/Fixture/T/T.xml'), realpath($locator->findFileForClass($ref, 'xml'))); + } + + public function testFindFileForGlobalNamespacedClass() + { + $locator = new FileLocator(array( + '' => __DIR__.'/Fixture/D', + )); + + require_once __DIR__.'/Fixture/D/D.php'; + $ref = new \ReflectionClass('D'); + $this->assertEquals(realpath(__DIR__.'/Fixture/D/D.yml'), realpath($locator->findFileForClass($ref, 'yml'))); + } + + public function testFindAllFiles() + { + $locator = new FileLocator(array( + 'Metadata\Tests\Driver\Fixture\A' => __DIR__.'/Fixture/A', + 'Metadata\Tests\Driver\Fixture\B' => __DIR__.'/Fixture/B', + 'Metadata\Tests\Driver\Fixture\C' => __DIR__.'/Fixture/C', + 'Metadata\Tests\Driver\Fixture\D' => __DIR__.'/Fixture/D' + )); + + $this->assertCount(1, $xmlFiles = $locator->findAllClasses('xml')); + $this->assertSame('Metadata\Tests\Driver\Fixture\A\A', $xmlFiles[0]); + + $this->assertCount(3, $ymlFiles = $locator->findAllClasses('yml')); + $this->assertSame('Metadata\Tests\Driver\Fixture\B\B', $ymlFiles[0]); + $this->assertSame('Metadata\Tests\Driver\Fixture\C\SubDir\C', $ymlFiles[1]); + $this->assertSame('Metadata\Tests\Driver\Fixture\D\D', $ymlFiles[2]); + } +} diff --git a/vendor/jms/metadata/tests/Metadata/Tests/Driver/Fixture/A/A.php b/vendor/jms/metadata/tests/Metadata/Tests/Driver/Fixture/A/A.php new file mode 100644 index 0000000..3ea6df1 --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/Driver/Fixture/A/A.php @@ -0,0 +1,5 @@ +foo; + } + + private function setFoo($foo) + { + $this->foo = $foo; + } +} diff --git a/vendor/jms/metadata/tests/Metadata/Tests/Fixtures/TestParent.php b/vendor/jms/metadata/tests/Metadata/Tests/Fixtures/TestParent.php new file mode 100644 index 0000000..940cb5b --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/Fixtures/TestParent.php @@ -0,0 +1,7 @@ +propertyMetadata['foo'] = 'bar'; + $parentMetadata->propertyMetadata['baz'] = 'baz'; + $parentMetadata->methodMetadata['foo'] = 'bar'; + $parentMetadata->createdAt = 2; + $parentMetadata->fileResources[] = 'foo'; + + $childMetadata = new MergeableClassMetadata('Metadata\Tests\Fixtures\TestObject'); + $childMetadata->propertyMetadata['foo'] = 'baz'; + $childMetadata->methodMetadata['foo'] = 'baz'; + $childMetadata->createdAt = 1; + $childMetadata->fileResources[] = 'bar'; + + $parentMetadata->merge($childMetadata); + $this->assertEquals('Metadata\Tests\Fixtures\TestObject', $parentMetadata->name); + $this->assertEquals('Metadata\Tests\Fixtures\TestObject', $parentMetadata->reflection->name); + $this->assertEquals(array('foo' => 'baz', 'baz' => 'baz',), $parentMetadata->propertyMetadata); + $this->assertEquals(array('foo' => 'baz',), $parentMetadata->methodMetadata); + $this->assertEquals(1, $parentMetadata->createdAt); + $this->assertEquals(array('foo', 'bar'), $parentMetadata->fileResources); + } +} \ No newline at end of file diff --git a/vendor/jms/metadata/tests/Metadata/Tests/MetadataFactoryTest.php b/vendor/jms/metadata/tests/Metadata/Tests/MetadataFactoryTest.php new file mode 100644 index 0000000..7fb5df4 --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/MetadataFactoryTest.php @@ -0,0 +1,279 @@ +getMock('Metadata\Driver\DriverInterface'); + + $driver + ->expects($this->at(0)) + ->method('loadMetadataForClass') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\TestObject'))) + ->will($this->returnCallback(function($class) { + return new ClassMetadata($class->getName()); + })) + ; + $driver + ->expects($this->at(1)) + ->method('loadMetadataForClass') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\TestParent'))) + ->will($this->returnCallback(function($class) { + return new ClassMetadata($class->getName()); + })) + ; + + $factory = new MetadataFactory($driver); + $metadata = $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestParent'); + + $this->assertInstanceOf('Metadata\ClassHierarchyMetadata', $metadata); + $this->assertEquals(2, count($metadata->classMetadata)); + } + + public function testGetMetadataForClassWhenMergeable() + { + $driver = $this->getMock('Metadata\Driver\DriverInterface'); + + $driver + ->expects($this->at(0)) + ->method('loadMetadataForClass') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\TestObject'))) + ->will($this->returnCallback(function($class) { + return new MergeableClassMetadata($class->getName()); + })) + ; + $driver + ->expects($this->at(1)) + ->method('loadMetadataForClass') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\TestParent'))) + ->will($this->returnCallback(function($class) { + return new MergeableClassMetadata($class->getName()); + })) + ; + + $factory = new MetadataFactory($driver); + $metadata = $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestParent'); + + $this->assertInstanceOf('Metadata\MergeableClassMetadata', $metadata); + $this->assertEquals('Metadata\Tests\Fixtures\TestParent', $metadata->name); + } + + public function testGetMetadataWithComplexHierarchy() + { + $driver = $this->getMock('Metadata\Driver\DriverInterface'); + + $driver + ->expects($this->any()) + ->method('loadMetadataForClass') + ->will($this->returnCallback(function($class) { + $metadata = new MergeableClassMetadata($class->name); + + switch ($class->name) { + case 'Metadata\Tests\Fixtures\ComplexHierarchy\BaseClass': + $metadata->propertyMetadata['foo'] = new PropertyMetadata($class->name, 'foo'); + break; + + case 'Metadata\Tests\Fixtures\ComplexHierarchy\SubClassA': + $metadata->propertyMetadata['bar'] = new PropertyMetadata($class->name, 'bar'); + break; + + case 'Metadata\Tests\Fixtures\ComplexHierarchy\SubClassB': + $metadata->propertyMetadata['baz'] = new PropertyMetadata($class->name, 'baz'); + break; + + default: + throw new \RuntimeException(sprintf('Unsupported class "%s".', $class->name)); + } + + return $metadata; + })) + ; + + $factory = new MetadataFactory($driver); + + $subClassA = $factory->getMetadataForClass('Metadata\Tests\Fixtures\ComplexHierarchy\SubClassA'); + $this->assertInstanceOf('Metadata\MergeableClassMetadata', $subClassA); + $this->assertEquals(array('foo', 'bar'), array_keys($subClassA->propertyMetadata)); + + $subClassB = $factory->getMetadataForClass('Metadata\Tests\Fixtures\ComplexHierarchy\SubClassB'); + $this->assertInstanceOf('Metadata\MergeableClassMetadata', $subClassB); + $this->assertEquals(array('foo', 'baz'), array_keys($subClassB->propertyMetadata)); + } + + public function testGetMetadataWithCache() + { + $driver = $this->getMock('Metadata\Driver\DriverInterface'); + $driver + ->expects($this->once()) + ->method('loadMetadataForClass') + ->will($this->returnValue($metadata = new ClassMetadata('Metadata\Tests\Fixtures\TestObject'))) + ; + + $factory = new MetadataFactory($driver); + + $cache = $this->getMock('Metadata\Cache\CacheInterface'); + $cache + ->expects($this->once()) + ->method('loadClassMetadataFromCache') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\TestObject'))) + ->will($this->returnValue(null)) + ; + $cache + ->expects($this->once()) + ->method('putClassMetadataInCache') + ->with($this->equalTo($metadata)) + ; + $factory->setCache($cache); + + + $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject'); + $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject'); + $this->assertSame($metadata, reset($factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject')->classMetadata)); + } + + public function testGetMetadataReturnsNullIfNoMetadataIsFound() + { + $driver = $this->getMock('Metadata\Driver\DriverInterface'); + $driver + ->expects($this->once()) + ->method('loadMetadataForClass') + ->will($this->returnValue(null)) + ; + + $factory = new MetadataFactory($driver); + + $this->assertNull($factory->getMetadataForClass('stdClass')); + } + + public function testGetMetadataWithInterfaces() + { + $driver = $this->getMock('Metadata\Driver\DriverInterface'); + + $driver + ->expects($this->at(3)) + ->method('loadMetadataForClass') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\ComplexHierarchy\SubClassA'))) + ; + $driver + ->expects($this->at(2)) + ->method('loadMetadataForClass') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\ComplexHierarchy\InterfaceB'))) + ; + $driver + ->expects($this->at(1)) + ->method('loadMetadataForClass') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\ComplexHierarchy\BaseClass'))) + ; + $driver + ->expects($this->at(0)) + ->method('loadMetadataForClass') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\ComplexHierarchy\InterfaceA'))) + ; + + $factory = new MetadataFactory($driver); + $factory->setIncludeInterfaces(true); + + $factory->getMetadataForClass('Metadata\Tests\Fixtures\ComplexHierarchy\SubClassA'); + } + + public function testGetAllClassNames() + { + $driver = $this->getMock('Metadata\Driver\AdvancedDriverInterface'); + $driver + ->expects($this->once()) + ->method('getAllClassNames') + ->will($this->returnValue(array())); + + $factory = new MetadataFactory($driver); + $this->assertSame(array(), $factory->getAllClassNames()); + } + + public function testGetAllClassNamesThrowsException() + { + $this->setExpectedException('RuntimeException'); + $factory = new MetadataFactory($this->getMock('Metadata\Driver\DriverInterface')); + $factory->getAllClassNames(); + } + + public function testNotFoundMetadataIsCached() + { + $driver = $this->getMock('Metadata\Driver\DriverInterface'); + $driver + ->expects($this->once()) // This is the important part of this test + ->method('loadMetadataForClass') + ->will($this->returnValue(null)) + ; + + $cachedMetadata = null; + $cache = $this->getMock('Metadata\Cache\CacheInterface'); + $cache + ->expects($this->any()) + ->method('loadClassMetadataFromCache') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\TestObject'))) + ->will($this->returnCallback(function () use (&$cachedMetadata) { + return $cachedMetadata; + })) + ; + $cache + ->expects($this->once()) + ->method('putClassMetadataInCache') + ->will($this->returnCallback(function ($metadata) use (&$cachedMetadata) { + $cachedMetadata = $metadata; + })) + ; + + $factory = new MetadataFactory($driver); + $factory->setCache($cache); + $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject'); + $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject'); + $this->assertNull($factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject')); + + // We use another factory with the same cache, to simulate another request and skip the in memory + $factory = new MetadataFactory($driver); + $factory->setCache($cache); + $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject'); + $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject'); + $this->assertNull($factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject')); + } + + public function testNotFoundMetadataIsNotCachedInDebug() + { + $driver = $this->getMock('Metadata\Driver\DriverInterface'); + $driver + ->expects($this->exactly(2)) + ->method('loadMetadataForClass') + ->will($this->returnValue(null)) + ; + + $cachedMetadata = null; + $cache = $this->getMock('Metadata\Cache\CacheInterface'); + $cache + ->expects($this->any()) + ->method('loadClassMetadataFromCache') + ->with($this->equalTo(new \ReflectionClass('Metadata\Tests\Fixtures\TestObject'))) + ->will($this->returnValue(null)) + ; + $cache + ->expects($this->never()) + ->method('putClassMetadataInCache') + ; + + $factory = new MetadataFactory($driver, 'Metadata\ClassHierarchyMetadata', true); + $factory->setCache($cache); + $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject'); + $this->assertNull($factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject')); + + // We use another factory with the same cache, to simulate another request and skip the in memory + $factory = new MetadataFactory($driver, 'Metadata\ClassHierarchyMetadata', true); + $factory->setCache($cache); + $factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject'); + $this->assertNull($factory->getMetadataForClass('Metadata\Tests\Fixtures\TestObject')); + } +} diff --git a/vendor/jms/metadata/tests/Metadata/Tests/MethodMetadataTest.php b/vendor/jms/metadata/tests/Metadata/Tests/MethodMetadataTest.php new file mode 100644 index 0000000..2276ace --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/MethodMetadataTest.php @@ -0,0 +1,37 @@ +setAccessible(true); + + $this->assertEquals('Metadata\Tests\Fixtures\TestObject', $metadata->class); + $this->assertEquals('setFoo', $metadata->name); + $this->assertEquals($expectedReflector, $metadata->reflection); + } + + public function testSerializeUnserialize() + { + $metadata = new MethodMetadata('Metadata\Tests\Fixtures\TestObject', 'setFoo'); + + $this->assertEquals($metadata, unserialize(serialize($metadata))); + } + + public function testInvoke() + { + $obj = new TestObject(); + $metadata = new MethodMetadata('Metadata\Tests\Fixtures\TestObject', 'setFoo'); + + $this->assertNull($obj->getFoo()); + $metadata->invoke($obj, array('foo')); + $this->assertEquals('foo', $obj->getFoo()); + } +} \ No newline at end of file diff --git a/vendor/jms/metadata/tests/Metadata/Tests/PropertyMetadataTest.php b/vendor/jms/metadata/tests/Metadata/Tests/PropertyMetadataTest.php new file mode 100644 index 0000000..e30e546 --- /dev/null +++ b/vendor/jms/metadata/tests/Metadata/Tests/PropertyMetadataTest.php @@ -0,0 +1,37 @@ +setAccessible(true); + + $this->assertEquals('Metadata\Tests\Fixtures\TestObject', $metadata->class); + $this->assertEquals('foo', $metadata->name); + $this->assertEquals($expectedReflector, $metadata->reflection); + } + + public function testSerializeUnserialize() + { + $metadata = new PropertyMetadata('Metadata\Tests\Fixtures\TestObject', 'foo'); + + $this->assertEquals($metadata, unserialize(serialize($metadata))); + } + + public function testSetGetValue() + { + $obj = new TestObject(); + $metadata = new PropertyMetadata('Metadata\Tests\Fixtures\TestObject', 'foo'); + + $this->assertNull($metadata->getValue($obj)); + $metadata->setValue($obj, 'foo'); + $this->assertEquals('foo', $metadata->getValue($obj)); + } +} \ No newline at end of file diff --git a/vendor/jms/metadata/tests/bootstrap.php b/vendor/jms/metadata/tests/bootstrap.php new file mode 100644 index 0000000..6333321 --- /dev/null +++ b/vendor/jms/metadata/tests/bootstrap.php @@ -0,0 +1,36 @@ + + * + */ + +spl_autoload_register(function($class) { + if (0 === strpos($class, 'Metadata\Tests\\')) { + $path = __DIR__.'/../tests/'.strtr($class, '\\', '/').'.php'; + if (file_exists($path) && is_readable($path)) { + require_once $path; + + return true; + } + } elseif (0 === strpos($class, 'Metadata\\')) { + $path = __DIR__.'/../src/'.($class = strtr($class, '\\', '/')).'.php'; + if (file_exists($path) && is_readable($path)) { + require_once $path; + + return true; + } + } elseif (0 === strpos($class, 'Symfony\\')) { + $path = __DIR__.'/../../symfony/src/'.strtr($class, '\\', '/').'.php'; + + if (file_exists($path) && is_readable($path)) { + require_once $path; + + return true; + } + } +}); + +@include __DIR__ . '/../vendor/autoload.php'; diff --git a/vendor/jms/parser-lib/.gitignore b/vendor/jms/parser-lib/.gitignore new file mode 100644 index 0000000..30f3ee2 --- /dev/null +++ b/vendor/jms/parser-lib/.gitignore @@ -0,0 +1,3 @@ +vendor/ +phpunit.xml + diff --git a/vendor/jms/parser-lib/.jms.yml b/vendor/jms/parser-lib/.jms.yml new file mode 100644 index 0000000..0d0f315 --- /dev/null +++ b/vendor/jms/parser-lib/.jms.yml @@ -0,0 +1,19 @@ +filter: + paths: [src/*, tests/*] + excluded_paths: ["tests/*/Fixture/*"] + +default_config: + psr0_compliance: true + checkstyle: true + composer_config_check: + publish_checks: true + level: warning + reflection_fixes: true + use_statement_fixes: true + +path_configs: + tests: + paths: [tests/*] + psr0_compliance: false + checkstyle: false + phpunit_checks: true diff --git a/vendor/jms/parser-lib/.travis.yml b/vendor/jms/parser-lib/.travis.yml new file mode 100644 index 0000000..c507441 --- /dev/null +++ b/vendor/jms/parser-lib/.travis.yml @@ -0,0 +1,15 @@ +language: php + +php: + - 5.3 + - 5.4 + +before_script: + - curl -s http://getcomposer.org/installer | php + - php composer.phar install --dev + +script: phpunit --coverage-clover clover + +after_success: + - curl -sL https://bit.ly/artifact-uploader | php + diff --git a/vendor/jms/parser-lib/LICENSE b/vendor/jms/parser-lib/LICENSE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/vendor/jms/parser-lib/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/vendor/jms/parser-lib/README.md b/vendor/jms/parser-lib/README.md new file mode 100644 index 0000000..75e9cec --- /dev/null +++ b/vendor/jms/parser-lib/README.md @@ -0,0 +1,4 @@ +Parser Library +============== + +Learn more about it in its [documentation](http://jmsyst.com/libs/parser-lib). diff --git a/vendor/jms/parser-lib/composer.json b/vendor/jms/parser-lib/composer.json new file mode 100644 index 0000000..417661d --- /dev/null +++ b/vendor/jms/parser-lib/composer.json @@ -0,0 +1,18 @@ +{ + "name": "jms/parser-lib", + "description": "A library for easily creating recursive-descent parsers.", + "license": "Apache2", + "require": { + "phpoption/phpoption": ">=0.9,<2.0-dev" + }, + "autoload": { + "psr-0": { + "JMS\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + } +} \ No newline at end of file diff --git a/vendor/jms/parser-lib/composer.lock b/vendor/jms/parser-lib/composer.lock new file mode 100644 index 0000000..fe331e6 --- /dev/null +++ b/vendor/jms/parser-lib/composer.lock @@ -0,0 +1,62 @@ +{ + "hash": "804f267fbd2c33067f6cafd3576f70dd", + "packages": [ + { + "name": "phpoption/phpoption", + "version": "0.9.0", + "source": { + "type": "git", + "url": "git://github.com/schmittjoh/php-option", + "reference": "0.9.0" + }, + "dist": { + "type": "zip", + "url": "https://github.com/schmittjoh/php-option/archive/0.9.0.zip", + "reference": "0.9.0", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "time": "2012-11-12 08:25:35", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } + }, + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "http://jmsyst.com", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "php", + "language", + "type", + "option" + ] + } + ], + "packages-dev": [ + + ], + "aliases": [ + + ], + "minimum-stability": "stable", + "stability-flags": [ + + ] +} diff --git a/vendor/jms/parser-lib/doc/LICENSE b/vendor/jms/parser-lib/doc/LICENSE new file mode 100644 index 0000000..a9aba5c --- /dev/null +++ b/vendor/jms/parser-lib/doc/LICENSE @@ -0,0 +1,55 @@ +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. + "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, + to Distribute and Publicly Perform the Work including as incorporated in Collections. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. + You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. + If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + + For the avoidance of doubt: + Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, + Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). + Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/vendor/jms/parser-lib/doc/index.rst b/vendor/jms/parser-lib/doc/index.rst new file mode 100644 index 0000000..da19058 --- /dev/null +++ b/vendor/jms/parser-lib/doc/index.rst @@ -0,0 +1,108 @@ +Parser Library +============== + +This library allows you to easily implement recursive-descent parsers. + +Installation +------------ +You can install this library through composer: + +.. code-block :: bash + + composer require jms/parser-lib + +or add it to your ``composer.json`` file directly. + +Example +------- +Let's assume that you would like to write a parser for a calculator. For simplicity +sake, we will assume that the parser would already return the result of the +calculation. Inputs could look like this ``1 + 1`` and we would expect ``2`` as +a result. + +The first step, is to create a lexer which breaks the input string up into +individual tokens which can then be consumed by the parser. This library provides +a convenient class for simple problems which we will use:: + + $lexer = new \JMS\Parser\SimpleLexer( + '/ + # Numbers + ([0-9]+) + + # Do not surround with () because whitespace is not meaningful for + # our purposes. + |\s+ + + # Operators; we support only + and - + |(+)|(-) + /x', // The x modifier tells PCRE to ignore whitespace in the regex above. + + // This maps token types to a human readable name. + array(0 => 'T_UNKNOWN', 1 => 'T_INT', 2 => 'T_PLUS', 3 => 'T_MINUS'), + + // This function tells the lexer which type a token has. The first element is + // an integer from the map above, the second element the normalized value. + function($value) { + if ('+' === $value) { + return array(2, '+'); + } + if ('-' === $value) { + return array(3, '-'); + } + if (is_numeric($value)) { + return array(1, (integer) $value); + } + + return array(0, $value); + } + ); + +Now the second step, is to create the parser which can consume the tokens once +the lexer has split them:: + + class MyParser extends \JMS\Parser\AbstractParser + { + const T_UNKNOWN = 0; + const T_INT = 1; + const T_PLUS = 2; + const T_MINUS = 3; + + public function parseInternal() + { + $result = $this->match(self::T_INT); + + while ($this->lexer->isNextAny(array(self::T_PLUS, self::T_MINUS))) { + if ($this->lexer->isNext(self::T_PLUS)) { + $this->lexer->moveNext(); + $result += $this->match(self::T_INT); + } else if ($this->lexer->isNext(self::T_MINUS)) { + $this->lexer->moveNext(); + $result -= $this->match(self::T_INT); + } else { + throw new \LogicException('Previous ifs were exhaustive.'); + } + } + + return $result; + } + } + + $parser = new MyParser($lexer); + $parser->parse('1 + 1'); // int(2) + $parser->parse('5 + 10 - 4'); // int(11) + +That's it. Now you can perform basic operations already. If you like you can now +also replace the hard-coded integers in the lexer with the class constants of the +parser. + +License +------- + +The code is released under the business-friendly `Apache2 license`_. + +Documentation is subject to the `Attribution-NonCommercial-NoDerivs 3.0 Unported +license`_. + +.. _Apache2 license: http://www.apache.org/licenses/LICENSE-2.0.html +.. _Attribution-NonCommercial-NoDerivs 3.0 Unported license: http://creativecommons.org/licenses/by-nc-nd/3.0/ + diff --git a/vendor/jms/parser-lib/phpunit.xml.dist b/vendor/jms/parser-lib/phpunit.xml.dist new file mode 100644 index 0000000..225f970 --- /dev/null +++ b/vendor/jms/parser-lib/phpunit.xml.dist @@ -0,0 +1,25 @@ + + + + + + ./tests/JMS/ + + + + + + performance + + + diff --git a/vendor/jms/parser-lib/src/JMS/Parser/AbstractLexer.php b/vendor/jms/parser-lib/src/JMS/Parser/AbstractLexer.php new file mode 100644 index 0000000..4203260 --- /dev/null +++ b/vendor/jms/parser-lib/src/JMS/Parser/AbstractLexer.php @@ -0,0 +1,163 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Parser; + +/** + * Abstract Lexer. + * + * @author Johannes M. Schmitt + */ +abstract class AbstractLexer +{ + public $token; + public $next; + + private $i; + private $peek; + private $tokens; + + /** + * Returns the name of the given token. + * + * @param integer $type + * + * @return string + */ + public function getName($type) + { + $ref = new \ReflectionClass($this); + foreach ($ref->getConstants() as $name => $value) { + if ($value === $type) { + return $name; + } + } + + throw new \InvalidArgumentException(sprintf('There is no token with value %s.', json_encode($type))); + } + + public function setInput($str) + { + $tokens = preg_split($this->getRegex(), $str, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE); + + $this->tokens = array(); + foreach ($tokens as $token) { + list($token[2], $token[0]) = $this->determineTypeAndValue($token[0]); + $this->tokens[] = $token; + } + + $this->reset(); + } + + public function reset() + { + $this->i = -1; + $this->peek = 0; + $this->token = $this->next = null; + $this->moveNext(); + } + + /** + * Moves the pointer one token forward. + * + * @return boolean if we have not yet reached the end of the input + */ + public function moveNext() + { + $this->peek = 0; + $this->token = $this->next; + $this->next = isset($this->tokens[++$this->i]) ? $this->tokens[$this->i] : null; + + return null !== $this->next; + } + + /** + * Skips the token stream until a token of the given type. + * + * @param integer $type + * + * @return boolean true if a token of the passed type was found, false otherwise. + */ + public function skipUntil($type) + { + while ( ! $this->isNext($type) && $this->moveNext()); + + if ( ! $this->isNext($type)) { + throw new \RuntimeException(sprintf('Could not find the token %s.', $this->getName($type))); + } + } + + /** + * @param integer $type + * + * @return boolean + */ + public function isNext($type) + { + return null !== $this->next && $type === $this->next[2]; + } + + /** + * @param array $types + * + * @return boolean + */ + public function isNextAny(array $types) + { + if (null === $this->next) { + return false; + } + + foreach ($types as $type) { + if ($type === $this->next[2]) { + return true; + } + } + + return false; + } + + /** + * @return \PhpOption\Option<[string,integer,integer]> + */ + public function peek() + { + if ( ! isset($this->tokens[$this->i + (++$this->peek)])) { + return \PhpOption\None::create(); + } + + return new \PhpOption\Some($this->tokens[$this->i + $this->peek]); + } + + /** + * @return string + */ + abstract protected function getRegex(); + + /** + * Determines the type of the given value. + * + * This method may also modify the passed value for example to cast them to + * a different PHP type where necessary. + * + * @param string $value + * + * @return array a tupel of type and normalized value + */ + abstract protected function determineTypeAndValue($value); +} diff --git a/vendor/jms/parser-lib/src/JMS/Parser/AbstractParser.php b/vendor/jms/parser-lib/src/JMS/Parser/AbstractParser.php new file mode 100644 index 0000000..f276d0e --- /dev/null +++ b/vendor/jms/parser-lib/src/JMS/Parser/AbstractParser.php @@ -0,0 +1,128 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Parser; + +/** + * Base Parser which provides some useful parsing methods intended for sub-classing. + * + * @author Johannes M. Schmitt + */ +abstract class AbstractParser +{ + protected $lexer; + protected $context; + + public function __construct(AbstractLexer $lexer) + { + $this->lexer = $lexer; + } + + /** + * Parses the given input. + * + * @param string $str + * @param string $context parsing context (allows to produce better error messages) + * + * @return mixed + */ + public function parse($str, $context = null) + { + $this->lexer->setInput($str); + $this->context = $context; + + $rs = $this->parseInternal(); + + if (null !== $this->lexer->next) { + $this->syntaxError('end of input'); + } + + return $rs; + } + + /** + * @return mixed + */ + abstract protected function parseInternal(); + + /** + * Matches a token, and returns its value. + * + * @param integer $type + * + * @return mixed the value of the matched token + */ + protected function match($type) + { + if ( ! $this->lexer->isNext($type)) { + $this->syntaxError($this->lexer->getName($type)); + } + + $this->lexer->moveNext(); + + return $this->lexer->token[0]; + } + + /** + * Matches any of the passed tokens, and returns the matched token's value. + * + * @param array $types + * + * @return mixed + */ + protected function matchAny(array $types) + { + if ( ! $this->lexer->isNextAny($types)) { + $this->syntaxError('any of '.implode(' or ', array_map(array($this->lexer, 'getName'), $types))); + } + + $this->lexer->moveNext(); + + return $this->lexer->token[0]; + } + + /** + * Raises a syntax error exception. + * + * @param string $expectedDesc A human understandable explanation what was expected + * @param array $actualToken The token that was found. If not given, next token will be assumed. + */ + protected function syntaxError($expectedDesc, $actualToken = null) + { + if (null === $actualToken) { + $actualToken = $this->lexer->next; + } + if (null === $actualToken) { + $actualDesc = 'end of input'; + } else if ($actualToken[1] === 0) { + $actualDesc = sprintf('"%s" of type %s at beginning of input', $actualToken[0], $this->lexer->getName($actualToken[2])); + } else { + $actualDesc = sprintf('"%s" of type %s at position %d (0-based)', $actualToken[0], $this->lexer->getName($actualToken[2]), $actualToken[1]); + } + + $ex = new SyntaxErrorException(sprintf('Expected %s, but got %s%s.', $expectedDesc, $actualDesc, $this->context ? ' '.$this->context : '')); + if (null !== $actualToken) { + $ex->setActualToken($actualToken); + } + if (null !== $this->context) { + $ex->setContext($this->context); + } + + throw $ex; + } +} \ No newline at end of file diff --git a/vendor/jms/parser-lib/src/JMS/Parser/SimpleLexer.php b/vendor/jms/parser-lib/src/JMS/Parser/SimpleLexer.php new file mode 100644 index 0000000..8be1052 --- /dev/null +++ b/vendor/jms/parser-lib/src/JMS/Parser/SimpleLexer.php @@ -0,0 +1,57 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Parser; + +/** + * The simple lexer is a fully usable lexer that does not require sub-classing. + * + * @author Johannes M. Schmitt + */ +class SimpleLexer extends AbstractLexer +{ + private $regex; + private $callable; + private $tokenNames; + + public function __construct($regex, array $tokenNames, $typeCallable) + { + $this->regex = $regex; + $this->callable = $typeCallable; + $this->tokenNames = $tokenNames; + } + + public function getName($type) + { + if ( ! isset($this->tokenNames[$type])) { + throw new \InvalidArgumentException(sprintf('There is no token with type %s.', json_encode($type))); + } + + return $this->tokenNames[$type]; + } + + protected function getRegex() + { + return $this->regex; + } + + protected function determineTypeAndValue($value) + { + return call_user_func($this->callable, $value); + } +} \ No newline at end of file diff --git a/vendor/jms/parser-lib/src/JMS/Parser/SyntaxErrorException.php b/vendor/jms/parser-lib/src/JMS/Parser/SyntaxErrorException.php new file mode 100644 index 0000000..d05b8c9 --- /dev/null +++ b/vendor/jms/parser-lib/src/JMS/Parser/SyntaxErrorException.php @@ -0,0 +1,45 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Parser; + +class SyntaxErrorException extends \RuntimeException +{ + private $actualToken; + private $context; + + public function setActualToken(array $actualToken) + { + $this->actualToken = $actualToken; + } + + public function setContext($context) + { + $this->context = $context; + } + + public function getActualToken() + { + return $this->actualToken; + } + + public function getContext() + { + return $this->context; + } +} diff --git a/vendor/jms/parser-lib/tests/JMS/Parser/Tests/AbstractLexerTest.php b/vendor/jms/parser-lib/tests/JMS/Parser/Tests/AbstractLexerTest.php new file mode 100644 index 0000000..83f8b3b --- /dev/null +++ b/vendor/jms/parser-lib/tests/JMS/Parser/Tests/AbstractLexerTest.php @@ -0,0 +1,121 @@ +lexer->setInput('"foo" 1234'); + + $this->assertNull($this->lexer->token); + $this->assertNotNull($this->lexer->next); + + $this->assertAttributeEquals(array( + array('foo', 0, self::T_STRING), + array(1234, 7, self::T_INTEGER), + ), 'tokens', $this->lexer); + } + + public function testMoveNext() + { + $this->lexer->setInput('1 2 3'); + $this->assertNull($this->lexer->token); + + $this->assertTrue($this->lexer->moveNext()); + $this->assertValue(1, $this->lexer->token); + + $this->assertTrue($this->lexer->moveNext()); + $this->assertValue(2, $this->lexer->token); + + $this->assertFalse($this->lexer->moveNext()); + $this->assertValue(3, $this->lexer->token); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testSkipUntilWithNonExistent() + { + $this->lexer->setInput('1 2 3'); + $this->lexer->skipUntil(self::T_STRING); + } + + public function testSkipUntil() + { + $this->lexer->setInput('1 "foo"'); + $this->assertNull($this->lexer->skipUntil(self::T_STRING)); + $this->assertValue(1, $this->lexer->token); + $this->assertValue('foo', $this->lexer->next); + } + + public function testIsNext() + { + $this->lexer->setInput('1'); + $this->assertTrue($this->lexer->isNext(self::T_INTEGER)); + $this->assertFalse($this->lexer->isNext(self::T_COMMA)); + } + + public function testIsNextAny() + { + $this->lexer->setInput('1'); + $this->assertTrue($this->lexer->isNextAny(array(self::T_COMMA, self::T_INTEGER))); + $this->assertFalse($this->lexer->isNextAny(array(self::T_COMMA, self::T_STRING))); + } + + public function testPeek() + { + $this->lexer->setInput('1 2 3'); + + $this->assertValue(1, $this->lexer->next); + $this->assertValue(2, $this->lexer->peek()->get()); + + $this->assertValue(1, $this->lexer->next); + $this->assertValue(3, $this->lexer->peek()->get()); + + $this->assertValue(1, $this->lexer->next); + $this->assertTrue($this->lexer->moveNext()); + $this->assertValue(2, $this->lexer->next); + $this->assertValue(3, $this->lexer->peek()->get()); + $this->assertValue(2, $this->lexer->next); + } + + private function assertValue($expected, $actualToken) + { + $this->assertNotNull($actualToken); + $this->assertSame($expected, $actualToken[0]); + } + + protected function setUp() + { + $this->lexer = $this->getMockForAbstractClass('JMS\Parser\AbstractLexer'); + $this->lexer->expects($this->any()) + ->method('getRegex') + ->will($this->returnValue('/("(?:[^"]*|(?<=\\)"))*")|([0-9]+)|\s+|(.)/i')); + $this->lexer->expects($this->any()) + ->method('determineTypeAndValue') + ->will($this->returnCallback(function($value) { + if (',' === $value) { + return array(AbstractLexerTest::T_COMMA, $value); + } + + if ('"' === $value[0]) { + return array(AbstractLexerTest::T_STRING, substr($value, 1, -1)); + } + + if (preg_match('/^[0-9]+$/', $value)) { + return array(AbstractLexerTest::T_INTEGER, (integer) $value); + } + + return array(AbstractLexerTest::T_UNKNOWN, $value); + })); + } +} diff --git a/vendor/jms/parser-lib/tests/JMS/Parser/Tests/AbstractParserTest.php b/vendor/jms/parser-lib/tests/JMS/Parser/Tests/AbstractParserTest.php new file mode 100644 index 0000000..ea5b48a --- /dev/null +++ b/vendor/jms/parser-lib/tests/JMS/Parser/Tests/AbstractParserTest.php @@ -0,0 +1,87 @@ +assertSame(2, $this->parser->parse('1 + 1')); + $this->assertSame(5, $this->parser->parse('1 + 1 + 4 - 1')); + } + + /** + * @expectedException JMS\Parser\SyntaxErrorException + * @expectedExceptionMessage Expected T_INT, but got end of input. + */ + public function testUnexpectedEnd() + { + $this->parser->parse('1 + '); + } + + protected function setUp() + { + $this->lexer = $lexer = new \JMS\Parser\SimpleLexer( + '/([0-9]+)|\s+|(.)/', + array(0 => 'T_UNKNOWN', 1 => 'T_INT', 100 => 'T_PLUS', 101 => 'T_MINUS'), + function($value) { + if ('+' === $value) { + return array(AbstractParserTest::T_PLUS, $value); + } + if ('-' === $value) { + return array(AbstractParserTest::T_MINUS, $value); + } + + // We would loose information on doubles here, but for this test it + // does not matter anyway. + if (is_numeric($value)) { + return array(AbstractParserTest::T_INT, (integer) $value); + } + + return AbstractParserTest::T_UNKNOWN; + } + ); + + $this->parser = $parser = $this->getMockBuilder('JMS\Parser\AbstractParser') + ->setConstructorArgs(array($this->lexer)) + ->getMockForAbstractClass(); + + $match = function($type) use ($parser) { + $ref = new \ReflectionMethod($parser, 'match'); + $ref->setAccessible(true); + + return $ref->invoke($parser, $type); + }; + + $this->parser->expects($this->any()) + ->method('parseInternal') + ->will($this->returnCallback(function() use ($lexer, $match) { + // Result :== Number ( ("+"|"-") Number )* + + $result = $match(AbstractParserTest::T_INT); + while ($lexer->isNextAny(array(AbstractParserTest::T_PLUS, AbstractParserTest::T_MINUS))) { + if ($lexer->isNext(AbstractParserTest::T_PLUS)) { + $lexer->moveNext(); + + $result += $match(AbstractParserTest::T_INT); + } else if ($lexer->isNext(AbstractParserTest::T_MINUS)) { + $lexer->moveNext(); + + $result -= $match(AbstractParserTest::T_INT); + } else { + throw new \LogicException('Previous ifs were exhaustive.'); + } + } + + return $result; + })); + } +} \ No newline at end of file diff --git a/vendor/jms/parser-lib/tests/bootstrap.php b/vendor/jms/parser-lib/tests/bootstrap.php new file mode 100644 index 0000000..37d8f3f --- /dev/null +++ b/vendor/jms/parser-lib/tests/bootstrap.php @@ -0,0 +1,8 @@ + + + +## Steps required to reproduce the problem + +1. +2. +3. + +## Expected Result + +* + +## Actual Result + +* diff --git a/vendor/jms/serializer/.github/PULL_REQUEST_TEMPLATE.md b/vendor/jms/serializer/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..034f5e8 --- /dev/null +++ b/vendor/jms/serializer/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,11 @@ +| Q | A +| ------------- | --- +| Bug fix? | yes/no +| New feature? | yes/no +| Doc updated | yes/no +| BC breaks? | yes/no +| Deprecations? | yes/no +| Tests pass? | yes/no +| Fixed tickets | #... +| License | Apache-2.0 + diff --git a/vendor/jms/serializer/.gitignore b/vendor/jms/serializer/.gitignore new file mode 100644 index 0000000..a2f9cd6 --- /dev/null +++ b/vendor/jms/serializer/.gitignore @@ -0,0 +1,4 @@ +vendor/ +phpunit.xml +composer.lock +.idea/ diff --git a/vendor/jms/serializer/.scrutinizer.yml b/vendor/jms/serializer/.scrutinizer.yml new file mode 100644 index 0000000..4b1808a --- /dev/null +++ b/vendor/jms/serializer/.scrutinizer.yml @@ -0,0 +1,3 @@ +tools: + external_code_coverage: + timeout: 600 \ No newline at end of file diff --git a/vendor/jms/serializer/.travis.yml b/vendor/jms/serializer/.travis.yml new file mode 100644 index 0000000..26ed6ec --- /dev/null +++ b/vendor/jms/serializer/.travis.yml @@ -0,0 +1,38 @@ +language: php + +sudo: false + +git: + depth: 1 + +cache: + directories: + - $HOME/.composer/cache + +matrix: + include: + - php: 5.5 + - php: 5.6 + - php: 7.0 + - php: 7.1 + - php: 7.2 + - php: 5.5 + env: COMPOSER_FLAGS='--prefer-lowest --prefer-stable' + fast_finish: true + +before_script: + - if [[ $TRAVIS_PHP_VERSION = '7.0' ]]; then PHPUNIT_FLAGS="--coverage-clover clover"; else PHPUNIT_FLAGS=""; fi + - if [[ $TRAVIS_PHP_VERSION != '7.0' ]]; then phpenv config-rm xdebug.ini; fi + - composer self-update + - composer update $COMPOSER_FLAGS + +script: + - vendor/bin/phpunit $PHPUNIT_FLAGS + - php tests/benchmark.php json 10 + - php tests/benchmark.php yml 10 + - php tests/benchmark.php xml 10 + +after_success: + - if [[ $TRAVIS_PHP_VERSION = '7.0' ]]; then wget https://scrutinizer-ci.com/ocular.phar; fi + - if [[ $TRAVIS_PHP_VERSION = '7.0' ]]; then php ocular.phar code-coverage:upload --format=php-clover clover; fi + diff --git a/vendor/jms/serializer/CHANGELOG.md b/vendor/jms/serializer/CHANGELOG.md new file mode 100644 index 0000000..8feb64e --- /dev/null +++ b/vendor/jms/serializer/CHANGELOG.md @@ -0,0 +1,791 @@ +# Change Log + +## [1.11.0](https://github.com/schmittjoh/serializer/tree/1.11.0) (2018-02-04) + +**Implemented enhancements:** + +- Deserialize xmlKeyValuePairs [\#868](https://github.com/schmittjoh/serializer/pull/868) ([goetas](https://github.com/goetas)) +- Add AdvancedNamingStrategyInterface [\#859](https://github.com/schmittjoh/serializer/pull/859) ([LeaklessGfy](https://github.com/LeaklessGfy)) + +**Fixed bugs:** + +- Exception thrown for non-existant accessor to an excluded property [\#862](https://github.com/schmittjoh/serializer/issues/862) +- Support non-namespaced lists in namespaced XML [\#851](https://github.com/schmittjoh/serializer/pull/851) ([bertterheide](https://github.com/bertterheide)) + +**Closed issues:** + +- Context Group not working [\#865](https://github.com/schmittjoh/serializer/issues/865) +- Not all virtual properties are serialized [\#864](https://github.com/schmittjoh/serializer/issues/864) +- DeserializedName [\#857](https://github.com/schmittjoh/serializer/issues/857) +- Annotation does not exist, or could not be auto-loaded. [\#855](https://github.com/schmittjoh/serializer/issues/855) +- \[Question\] Serialization of primitive types [\#853](https://github.com/schmittjoh/serializer/issues/853) +- Empty list when deserializing namespaced XML with children that are not namespaced [\#850](https://github.com/schmittjoh/serializer/issues/850) +- XmlList\(skipWhenEmpty=true\) or @SkipWhenEmpty\(\) does not work [\#847](https://github.com/schmittjoh/serializer/issues/847) +- DateHandler Timezone ignored on deserialization [\#457](https://github.com/schmittjoh/serializer/issues/457) + +**Merged pull requests:** + +- Drop HHVM support [\#869](https://github.com/schmittjoh/serializer/pull/869) ([goetas](https://github.com/goetas)) +- Allow excluded private properties to not have a getter acc… [\#863](https://github.com/schmittjoh/serializer/pull/863) ([0mars](https://github.com/0mars)) +- Solve php 7.2 deprecations [\#860](https://github.com/schmittjoh/serializer/pull/860) ([goetas](https://github.com/goetas)) +- Fixed issue where timezone is lost when creating DateTime from unix timestamp [\#835](https://github.com/schmittjoh/serializer/pull/835) ([goetas](https://github.com/goetas)) + +## [1.10.0](https://github.com/schmittjoh/serializer/tree/1.10.0) (2017-11-30) +**Implemented enhancements:** + +- support PSR-11 compatible DI containers [\#844](https://github.com/schmittjoh/serializer/pull/844) ([xabbuh](https://github.com/xabbuh)) +- Deserialize xmlKeyValuePairs [\#840](https://github.com/schmittjoh/serializer/pull/840) ([fdyckhoff](https://github.com/fdyckhoff)) + +**Closed issues:** + +- Serialize using jsonSerialize\(\) if object implements JsonSerializable [\#846](https://github.com/schmittjoh/serializer/issues/846) +- ExclusionStrategy backward compatibility break [\#843](https://github.com/schmittjoh/serializer/issues/843) +- @MaxDepth jms/serializer-bundle 2.2 [\#842](https://github.com/schmittjoh/serializer/issues/842) + +## [1.9.2](https://github.com/schmittjoh/serializer/tree/1.9.2) (2017-11-22) +**Fixed bugs:** + +- Missing ClassMetadata deserialization data [\#841](https://github.com/schmittjoh/serializer/pull/841) ([TristanMogwai](https://github.com/TristanMogwai)) + +**Closed issues:** + +- DateTime format documentation [\#836](https://github.com/schmittjoh/serializer/issues/836) +- Deserialization not working with camelCase [\#831](https://github.com/schmittjoh/serializer/issues/831) + +**Merged pull requests:** + +- Fix documentation syntax errors on available types [\#839](https://github.com/schmittjoh/serializer/pull/839) ([andy-morgan](https://github.com/andy-morgan)) +- Improve documentation about default DateTime format [\#838](https://github.com/schmittjoh/serializer/pull/838) ([enumag](https://github.com/enumag)) + +## [1.9.1](https://github.com/schmittjoh/serializer/tree/1.9.1) (2017-10-27) +**Fixed bugs:** + +- Dynamic exclusion strategy, Variable "object" is not valid [\#826](https://github.com/schmittjoh/serializer/issues/826) + +**Closed issues:** + +- Allow DateTime or Null [\#779](https://github.com/schmittjoh/serializer/issues/779) + +**Merged pull requests:** + +- Alow to use "object" var in expressions when deserializing [\#827](https://github.com/schmittjoh/serializer/pull/827) ([goetas](https://github.com/goetas)) + +## [1.9.0](https://github.com/schmittjoh/serializer/tree/1.9.0) (2017-09-28) +**Implemented enhancements:** + +- Doctrine LazyCriteriaCollection not supported [\#814](https://github.com/schmittjoh/serializer/issues/814) +- Do not require the translator [\#824](https://github.com/schmittjoh/serializer/pull/824) ([goetas](https://github.com/goetas)) +- Added mapping for guid type [\#802](https://github.com/schmittjoh/serializer/pull/802) ([develth](https://github.com/develth)) +- Added translation domain to FormErrorHandler [\#783](https://github.com/schmittjoh/serializer/pull/783) ([prosalov](https://github.com/prosalov)) + +**Fixed bugs:** + +- Node no longer exists - Deserialize Error [\#817](https://github.com/schmittjoh/serializer/issues/817) +- Serializer fails if there is no AnnotationDriver in the DriverChain instance [\#815](https://github.com/schmittjoh/serializer/issues/815) +- Evaluate XML xsi:nil="1" to null [\#799](https://github.com/schmittjoh/serializer/pull/799) ([Bouwdie](https://github.com/Bouwdie)) + +**Closed issues:** + +- Empty array removed from XML serialization [\#816](https://github.com/schmittjoh/serializer/issues/816) +- XML Discriminator tags don't work in YAML metadata [\#811](https://github.com/schmittjoh/serializer/issues/811) +- Launching phpunit does not execute any test [\#809](https://github.com/schmittjoh/serializer/issues/809) +- Add "bool" Annotation/Type [\#807](https://github.com/schmittjoh/serializer/issues/807) +- Add support for overriding default annotation driver configuration [\#804](https://github.com/schmittjoh/serializer/issues/804) +- Add description to PropertyMetadata? [\#800](https://github.com/schmittjoh/serializer/issues/800) + +**Merged pull requests:** + +- Workaround to avoid triggering simplexml warning [\#825](https://github.com/schmittjoh/serializer/pull/825) ([goetas](https://github.com/goetas)) +- Added null metadata driver [\#822](https://github.com/schmittjoh/serializer/pull/822) ([goetas](https://github.com/goetas)) +- Run Travis tests against modern PHP [\#819](https://github.com/schmittjoh/serializer/pull/819) ([Majkl578](https://github.com/Majkl578)) +- Added bool type alias [\#818](https://github.com/schmittjoh/serializer/pull/818) ([Majkl578](https://github.com/Majkl578)) + +## [1.8.1](https://github.com/schmittjoh/serializer/tree/1.8.1) (2017-07-13) +**Closed issues:** + +- Version 1.8 is breaking backwards compatibility [\#796](https://github.com/schmittjoh/serializer/issues/796) + +**Merged pull requests:** + +- Revert back to PSR-0 [\#797](https://github.com/schmittjoh/serializer/pull/797) ([goetas](https://github.com/goetas)) + +## [1.8.0](https://github.com/schmittjoh/serializer/tree/1.8.0) (2017-07-12) +**Implemented enhancements:** + +- Detect XML xsi:nil="true" to null when deserializing [\#790](https://github.com/schmittjoh/serializer/pull/790) ([goetas](https://github.com/goetas)) +- Added support for a third deserialize parameter for the DateTime type [\#788](https://github.com/schmittjoh/serializer/pull/788) ([bobvandevijver](https://github.com/bobvandevijver)) +- Added trim to xml metadata reader for groups parameter, and added support for groups element [\#781](https://github.com/schmittjoh/serializer/pull/781) ([mrosiu](https://github.com/mrosiu)) +- Add propertyMetdata to dynamic expression variables [\#778](https://github.com/schmittjoh/serializer/pull/778) ([goetas](https://github.com/goetas)) +- Fix xml deserialization when xsi:nil="true" is set [\#771](https://github.com/schmittjoh/serializer/pull/771) ([Bouwdie](https://github.com/Bouwdie)) + +**Fixed bugs:** + +- do not disappear type params in DoctrineProxySubscriber [\#793](https://github.com/schmittjoh/serializer/pull/793) ([kriswallsmith](https://github.com/kriswallsmith)) +- \#784 fix with inline array of type array\ [\#785](https://github.com/schmittjoh/serializer/pull/785) ([aviortm](https://github.com/aviortm)) + +**Closed issues:** + +- inline array with type array\ not serialized [\#784](https://github.com/schmittjoh/serializer/issues/784) +- \[2.0\] \[Feature-request\] Provide InitializedObjectConstructor as default [\#775](https://github.com/schmittjoh/serializer/issues/775) +- Allow access to PropertyMetadata in Dynamic Exclusion strategies [\#772](https://github.com/schmittjoh/serializer/issues/772) +- Overriding groups at runtime does not work, or? [\#767](https://github.com/schmittjoh/serializer/issues/767) +- DateTime format and control characters [\#94](https://github.com/schmittjoh/serializer/issues/94) + +**Merged pull requests:** + +- Missing features of the compiler pass [\#789](https://github.com/schmittjoh/serializer/pull/789) ([mikemix](https://github.com/mikemix)) +- Updated documentation related to PR \#778 [\#780](https://github.com/schmittjoh/serializer/pull/780) ([bblue](https://github.com/bblue)) +- \[RFC\] Move to PSR 4 [\#770](https://github.com/schmittjoh/serializer/pull/770) ([goetas](https://github.com/goetas)) +- Re-formatted code for better PSR compliance [\#769](https://github.com/schmittjoh/serializer/pull/769) ([goetas](https://github.com/goetas)) +- Proposing some guidelines for contributing [\#763](https://github.com/schmittjoh/serializer/pull/763) ([goetas](https://github.com/goetas)) + +## [1.7.1](https://github.com/schmittjoh/serializer/tree/1.7.1) (2017-05-15) +**Fixed bugs:** + +- Custom type handlers does not work with doctrine proxies anymore [\#765](https://github.com/schmittjoh/serializer/issues/765) +- Doctrine listener should not change the type on proxies with virtual type [\#768](https://github.com/schmittjoh/serializer/pull/768) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- Missing bool type in graphNavigator.php in method accept\(\) [\#764](https://github.com/schmittjoh/serializer/issues/764) +- The sub-class "Proxy-Class" is not listed in the discriminator of the base class "DiscriminatorClass" [\#459](https://github.com/schmittjoh/serializer/issues/459) +- Configure whether serializing empty array. [\#124](https://github.com/schmittjoh/serializer/issues/124) + +## [1.7.0](https://github.com/schmittjoh/serializer/tree/1.7.0) (2017-05-10) +**Implemented enhancements:** + +- Skip doctrine proxy initializations when exclusion strategy will exclude it [\#760](https://github.com/schmittjoh/serializer/pull/760) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- Error deserializing a map of \(nullable\) objects [\#762](https://github.com/schmittjoh/serializer/issues/762) +- Add data using setData produces hashes instead of arrays [\#761](https://github.com/schmittjoh/serializer/issues/761) + +## [1.7.0-RC2](https://github.com/schmittjoh/serializer/tree/1.7.0-RC2) (2017-05-05) +**Implemented enhancements:** + +- Make sure input is always a string [\#755](https://github.com/schmittjoh/serializer/pull/755) ([goetas](https://github.com/goetas)) +- Allow namespaced XML element discriminator [\#753](https://github.com/schmittjoh/serializer/pull/753) ([goetas](https://github.com/goetas)) + +**Fixed bugs:** + +- Allow to skip "empty serialization result" when serializing [\#757](https://github.com/schmittjoh/serializer/pull/757) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- Is it possible to use @XmlNamespace & @XmlRoot in a class at same time ? [\#759](https://github.com/schmittjoh/serializer/issues/759) +- Serializes FOS:User datas with ExclusionPolicy\("all"\) [\#599](https://github.com/schmittjoh/serializer/issues/599) + +**Merged pull requests:** + +- Add a quick reference for how to enable expression evaluator [\#758](https://github.com/schmittjoh/serializer/pull/758) ([chasen](https://github.com/chasen)) +- Allow for setExpressionEvaluator usage to be chainable [\#756](https://github.com/schmittjoh/serializer/pull/756) ([chasen](https://github.com/chasen)) +- Fix typo in annotation docs [\#754](https://github.com/schmittjoh/serializer/pull/754) ([JustBlackBird](https://github.com/JustBlackBird)) + +## [1.7.0-RC1](https://github.com/schmittjoh/serializer/tree/1.7.0-RC1) (2017-04-25) +**Implemented enhancements:** + +- Allow to configure the doctrine object constructor [\#751](https://github.com/schmittjoh/serializer/pull/751) ([goetas](https://github.com/goetas)) +- Trigger doctrine events on doctrine proxies [\#750](https://github.com/schmittjoh/serializer/pull/750) ([goetas](https://github.com/goetas)) +- Added stdClass serialization handler [\#749](https://github.com/schmittjoh/serializer/pull/749) ([goetas](https://github.com/goetas)) +- Allow to typehint for the type \(array/hash\) of the root item to be serialized [\#728](https://github.com/schmittjoh/serializer/pull/728) ([goetas](https://github.com/goetas)) + +**Fixed bugs:** + +- Array gets serialized as object, not as array, depending on order. [\#709](https://github.com/schmittjoh/serializer/issues/709) +- Doctrine Proxies and serializer.pre\_serialize [\#666](https://github.com/schmittjoh/serializer/issues/666) +- Fix stdClass inconsistencies when serializing to JSON [\#730](https://github.com/schmittjoh/serializer/pull/730) ([goetas](https://github.com/goetas)) +- Allow to typehint for the type \\(array/hash\\) of the root item to be serialized [\#728](https://github.com/schmittjoh/serializer/pull/728) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- Array serialized as JSON object [\#706](https://github.com/schmittjoh/serializer/issues/706) +- From old issue \#290 [\#670](https://github.com/schmittjoh/serializer/issues/670) +- Form validation error response - field names not converted from camel case to underscore [\#587](https://github.com/schmittjoh/serializer/issues/587) +- Ability to getGroups on Context [\#554](https://github.com/schmittjoh/serializer/issues/554) +- SerializedName misleading usage and constructor issue [\#548](https://github.com/schmittjoh/serializer/issues/548) +- Discriminator should support xmlAttribute [\#547](https://github.com/schmittjoh/serializer/issues/547) +- Public method accessor is required for excluded/not exposed properties [\#519](https://github.com/schmittjoh/serializer/issues/519) +- Entity changed via preserialize and wrongly persisted [\#509](https://github.com/schmittjoh/serializer/issues/509) +- XML deserialization properties null when using default namespace [\#504](https://github.com/schmittjoh/serializer/issues/504) +- AccessorOrder is ignored [\#501](https://github.com/schmittjoh/serializer/issues/501) +- Deserialization of sub entites with non existing id [\#492](https://github.com/schmittjoh/serializer/issues/492) +- \[Question\] Handler/Converter for specific field [\#476](https://github.com/schmittjoh/serializer/issues/476) +- getClassName regex may incorrectly retrieve a false class name from comments above the class. [\#460](https://github.com/schmittjoh/serializer/issues/460) +- Multiple types for property? [\#445](https://github.com/schmittjoh/serializer/issues/445) +- Allow non-qualified XML serialization when XML namespaces are part of the metadata [\#413](https://github.com/schmittjoh/serializer/issues/413) +- Discriminator field name [\#412](https://github.com/schmittjoh/serializer/issues/412) +- Serializing to and deserializing from DateTime is inconsistent [\#394](https://github.com/schmittjoh/serializer/issues/394) +- ManyToOne and OneToMany Serialization Groups [\#387](https://github.com/schmittjoh/serializer/issues/387) +- Static SubscribingHandlerInterface::getSubscribingMethod [\#380](https://github.com/schmittjoh/serializer/issues/380) +- User defined ordering function [\#379](https://github.com/schmittjoh/serializer/issues/379) +- serialized\_name for discriminator [\#372](https://github.com/schmittjoh/serializer/issues/372) +- Serializing object with empty array [\#350](https://github.com/schmittjoh/serializer/issues/350) +- VirtualProperty\(s\) are ignored with AccessorOrder [\#349](https://github.com/schmittjoh/serializer/issues/349) +- When setting a group of serialization, the inheritance doesn't work anymore [\#328](https://github.com/schmittjoh/serializer/issues/328) +- Serialization of empty object [\#323](https://github.com/schmittjoh/serializer/issues/323) +- "Can't pop from an empty datastructure" error when multiple serializer calls [\#319](https://github.com/schmittjoh/serializer/issues/319) +- virtual\_properties cannot be excluded with groups [\#291](https://github.com/schmittjoh/serializer/issues/291) +- Integer serialized as String using VirtualProperty [\#289](https://github.com/schmittjoh/serializer/issues/289) +- SimpleObjectProxy is not implement abstract methods of Proxy class [\#287](https://github.com/schmittjoh/serializer/issues/287) +- Serializing array that have one of the element or member of an element an empty object [\#277](https://github.com/schmittjoh/serializer/issues/277) +- Serialization with groups return json object instead array [\#267](https://github.com/schmittjoh/serializer/issues/267) +- The purpose of "Force JSON output to "{}" instead of "\[\]" if it contains either no properties or all properties are null" [\#248](https://github.com/schmittjoh/serializer/issues/248) +- Json array serialisation [\#242](https://github.com/schmittjoh/serializer/issues/242) +- Ignoring "Assert" in output doc if excluded [\#241](https://github.com/schmittjoh/serializer/issues/241) +- Alphabetical accessor order doesn't respect SerializedName overrides [\#240](https://github.com/schmittjoh/serializer/issues/240) +- Request Annotation for Array Data [\#234](https://github.com/schmittjoh/serializer/issues/234) +- Allow @var instead of @Type when deserializing [\#233](https://github.com/schmittjoh/serializer/issues/233) +- Strange issue with groups exclusion strategy [\#230](https://github.com/schmittjoh/serializer/issues/230) +- Warning when deserializing removed entity [\#216](https://github.com/schmittjoh/serializer/issues/216) +- Where in the JMS code does the navigator call VisitProperty method for visitor [\#207](https://github.com/schmittjoh/serializer/issues/207) +- Property of the type array is not in alphabetic order after serialization [\#196](https://github.com/schmittjoh/serializer/issues/196) +- Magic and inconsistencies in array serialization [\#191](https://github.com/schmittjoh/serializer/issues/191) +- PreSerialization Event not handled if the value is not object [\#162](https://github.com/schmittjoh/serializer/issues/162) +- Hierarchical object serialization does not appear to inherit metadata from ancestors for metadata defined in XML [\#151](https://github.com/schmittjoh/serializer/issues/151) +- When using MaxDepth, Serialization of an array entitiy is not working [\#132](https://github.com/schmittjoh/serializer/issues/132) +- Switch to change default naming strategy [\#128](https://github.com/schmittjoh/serializer/issues/128) +- Throw exceptions on invalid input [\#112](https://github.com/schmittjoh/serializer/issues/112) +- Recursion detected error when serialization groups are in use [\#96](https://github.com/schmittjoh/serializer/issues/96) +- Allow serialization groups to be accessible within event subscriber callbacks. [\#84](https://github.com/schmittjoh/serializer/issues/84) +- Allow Constructed Object to be Passed to Deserialize [\#79](https://github.com/schmittjoh/serializer/issues/79) +- JSON recursion when first object in root list is empty [\#61](https://github.com/schmittjoh/serializer/issues/61) +- Can't serialize an array with an empty object [\#59](https://github.com/schmittjoh/serializer/issues/59) + +**Merged pull requests:** + +- Added runtime twig extension support \(significant performance improvements\) [\#747](https://github.com/schmittjoh/serializer/pull/747) ([goetas](https://github.com/goetas)) + +## [1.6.2](https://github.com/schmittjoh/serializer/tree/1.6.2) (2017-04-17) +**Fixed bugs:** + +- @VirtualProperty "exp" does not play nice with @ExclusionPolicy\("ALL"\) [\#746](https://github.com/schmittjoh/serializer/issues/746) + +## [1.6.1](https://github.com/schmittjoh/serializer/tree/1.6.1) (2017-04-12) +**Fixed bugs:** + +- Do not output the XML node when the object will be emtpy [\#744](https://github.com/schmittjoh/serializer/pull/744) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- XmlList not working since version 1.5.0 with xmlns attributes [\#742](https://github.com/schmittjoh/serializer/issues/742) +- DoctrineObjectConstructor: how to use it without Symfony, in a PHP project [\#741](https://github.com/schmittjoh/serializer/issues/741) +- Outdated docs site [\#733](https://github.com/schmittjoh/serializer/issues/733) +- Allow data access to Property naming strategy [\#717](https://github.com/schmittjoh/serializer/issues/717) +- Can't hint interface using @Type to trigger custom handler [\#631](https://github.com/schmittjoh/serializer/issues/631) +- JSON/YAML encoding changes [\#617](https://github.com/schmittjoh/serializer/issues/617) +- Why do we need this check inside SerializedName constructor, if there is name? [\#558](https://github.com/schmittjoh/serializer/issues/558) +- Is it possible to deserialize Collection from Json [\#534](https://github.com/schmittjoh/serializer/issues/534) +- PhpCollection 0.4 [\#531](https://github.com/schmittjoh/serializer/issues/531) +- Possible mismatch of xml-attribute-map and $pMetadata-\>xmlAttribute in XmlDriver.php [\#422](https://github.com/schmittjoh/serializer/issues/422) +- Access level propose for Handler/DateHandler.php [\#386](https://github.com/schmittjoh/serializer/issues/386) +- Type DateTime and Timestamp \(U format\) [\#343](https://github.com/schmittjoh/serializer/issues/343) + +**Merged pull requests:** + +- Update PHPDocs [\#736](https://github.com/schmittjoh/serializer/pull/736) ([gnat42](https://github.com/gnat42)) + +## [1.6.0](https://github.com/schmittjoh/serializer/tree/1.6.0) (2017-03-24) +**Implemented enhancements:** + +- Add DateTimeImmutable support to DateHandler [\#543](https://github.com/schmittjoh/serializer/issues/543) + +**Fixed bugs:** + +- Virtual property having type overriden by doctrine metadata [\#276](https://github.com/schmittjoh/serializer/issues/276) + +**Closed issues:** + +- Serialize a subclass [\#735](https://github.com/schmittjoh/serializer/issues/735) +- How to handle Doctrine not found entity ? [\#731](https://github.com/schmittjoh/serializer/issues/731) +- Regression with 1.5.0 =\> Undefined offset 15 [\#715](https://github.com/schmittjoh/serializer/issues/715) +- detect serialisation without groups set [\#546](https://github.com/schmittjoh/serializer/issues/546) +- Introducing the NormalizerInterface [\#537](https://github.com/schmittjoh/serializer/issues/537) +- How to set JSON serialization options? [\#535](https://github.com/schmittjoh/serializer/issues/535) +- @MaxDepth doesn't seem to be working [\#522](https://github.com/schmittjoh/serializer/issues/522) +- max\_depth in YML config is ignored [\#498](https://github.com/schmittjoh/serializer/issues/498) +- Dynamic property type annotation [\#436](https://github.com/schmittjoh/serializer/issues/436) +- How to deserialize JSON if property might have a list of subobjects? [\#355](https://github.com/schmittjoh/serializer/issues/355) +- Object to array normalization [\#354](https://github.com/schmittjoh/serializer/issues/354) +- Serialize Doctrine object without references [\#353](https://github.com/schmittjoh/serializer/issues/353) +- Post\_serialize doesn't serialize relation! [\#236](https://github.com/schmittjoh/serializer/issues/236) +- parsing string to date [\#217](https://github.com/schmittjoh/serializer/issues/217) +- Discriminator is not exposed when using a group exclusion strategy [\#157](https://github.com/schmittjoh/serializer/issues/157) + +## [1.6.0-RC1](https://github.com/schmittjoh/serializer/tree/1.6.0-RC1) (2017-03-14) +**Implemented enhancements:** + +- Add symfony expression in exclusions/expositions [\#406](https://github.com/schmittjoh/serializer/issues/406) +- check that cache directory was not created before throwing exception [\#729](https://github.com/schmittjoh/serializer/pull/729) ([mente](https://github.com/mente)) +- \#720 - Adding support for DateInterval deserialization [\#721](https://github.com/schmittjoh/serializer/pull/721) ([c0ntax](https://github.com/c0ntax)) +- Expression language based virtual properties [\#708](https://github.com/schmittjoh/serializer/pull/708) ([goetas](https://github.com/goetas)) +- Xml namespaces improvements [\#644](https://github.com/schmittjoh/serializer/pull/644) ([goetas](https://github.com/goetas)) + +**Fixed bugs:** + +- Serialize correctly empty intervals according to ISO-8601 [\#722](https://github.com/schmittjoh/serializer/pull/722) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- Is it possible to achieve something like - shouldSerializeEmpty [\#725](https://github.com/schmittjoh/serializer/issues/725) +- How to handle DateTime serialization with fromArray method ? [\#723](https://github.com/schmittjoh/serializer/issues/723) +- DateInterval supported for serialization but not deserialization [\#720](https://github.com/schmittjoh/serializer/issues/720) +- Deserialization of collection when wraped by aditional xml tags [\#719](https://github.com/schmittjoh/serializer/issues/719) +- SerializedName based on a property value [\#716](https://github.com/schmittjoh/serializer/issues/716) +- Blank XML breaks XmlDeserializationVisitor error handling [\#701](https://github.com/schmittjoh/serializer/issues/701) +- Problem with FOSUserBundle ROLE serialization [\#690](https://github.com/schmittjoh/serializer/issues/690) +- Doctrine cache dependency when using setCacheDir [\#676](https://github.com/schmittjoh/serializer/issues/676) +- OneToOne entities are not deserialized if passing a nested one-to-one property [\#652](https://github.com/schmittjoh/serializer/issues/652) +- \[RFC\] Serialization refacotring [\#609](https://github.com/schmittjoh/serializer/issues/609) +- Object handler callback returns array, but serialized object = null [\#594](https://github.com/schmittjoh/serializer/issues/594) +- Cannot add @Discriminator field into specific @Group [\#557](https://github.com/schmittjoh/serializer/issues/557) +- Object check on SerializationContext::isVisiting\(\) [\#502](https://github.com/schmittjoh/serializer/issues/502) +- Define cdata and namespace for @XmlList elements [\#480](https://github.com/schmittjoh/serializer/issues/480) +- Serializer working with parent class [\#376](https://github.com/schmittjoh/serializer/issues/376) +- Add support for array format [\#374](https://github.com/schmittjoh/serializer/issues/374) +- Obtain VirtualProperty value using a service [\#359](https://github.com/schmittjoh/serializer/issues/359) +- make deserialisation of non existing id's configurable [\#333](https://github.com/schmittjoh/serializer/issues/333) +- HHVM compatibility issue with undefined property JMS\Serializer\Metadata\ClassMetadata::$inline [\#312](https://github.com/schmittjoh/serializer/issues/312) +- resources serialization [\#275](https://github.com/schmittjoh/serializer/issues/275) +- I'm receiving "Class ArrayCollection does not exist" when serializing \(temporarily solved with a workaround\) [\#274](https://github.com/schmittjoh/serializer/issues/274) +- Can't use handlers on strings \(and other simple types\) [\#194](https://github.com/schmittjoh/serializer/issues/194) +- composer.json update for doctrine [\#178](https://github.com/schmittjoh/serializer/issues/178) +- Use expression for virtual properties [\#171](https://github.com/schmittjoh/serializer/issues/171) +- Handle classes that implement collections \(e.g. ArrayObject\) and properties [\#137](https://github.com/schmittjoh/serializer/issues/137) +- Check CDATA is needed [\#136](https://github.com/schmittjoh/serializer/issues/136) +- property path support [\#22](https://github.com/schmittjoh/serializer/issues/22) + +**Merged pull requests:** + +- Include reference to cache [\#727](https://github.com/schmittjoh/serializer/pull/727) ([hyperized](https://github.com/hyperized)) + +## [1.5.0](https://github.com/schmittjoh/serializer/tree/1.5.0) (2017-02-14) +**Closed issues:** + +- Serialized DateTime instances are not valid ISO-8601 [\#713](https://github.com/schmittjoh/serializer/issues/713) +- Impossible to use discriminator field. Why we need StaticPropertyMetadata ? [\#705](https://github.com/schmittjoh/serializer/issues/705) +- Deserializing XMLList with Namespaces not \(always\) working as intended [\#695](https://github.com/schmittjoh/serializer/issues/695) + +## [1.5.0-RC1](https://github.com/schmittjoh/serializer/tree/1.5.0-RC1) (2017-01-19) +**Implemented enhancements:** + +- added support for xml-attributes as discriminators [\#692](https://github.com/schmittjoh/serializer/pull/692) ([twtinteractive](https://github.com/twtinteractive)) +- Added clearing previous libxml errors [\#688](https://github.com/schmittjoh/serializer/pull/688) ([zerkms](https://github.com/zerkms)) +- Prevent doctrine proxy loading for virtual types [\#684](https://github.com/schmittjoh/serializer/pull/684) ([goetas](https://github.com/goetas)) +- Implemented dynamic exclusion using symfony expression language [\#673](https://github.com/schmittjoh/serializer/pull/673) ([goetas](https://github.com/goetas)) + +**Fixed bugs:** + +- Deserializing XMLList with Namespaces not \(always\) working as intended [\#697](https://github.com/schmittjoh/serializer/pull/697) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- Groups logic [\#693](https://github.com/schmittjoh/serializer/issues/693) +- BC from 1.1.\* to ^1.2 [\#643](https://github.com/schmittjoh/serializer/issues/643) +- DoctrineProxySubscriber forces loading of the proxy even if custom handler exist [\#575](https://github.com/schmittjoh/serializer/issues/575) +- ConditionalExpose/Exclude annotation [\#540](https://github.com/schmittjoh/serializer/issues/540) +- Deprecated usage of ValidatorInterface [\#438](https://github.com/schmittjoh/serializer/issues/438) +- Missing addData in XmlSerializerVisitor makes it impossible to add data in serializer.post\_serialize event [\#235](https://github.com/schmittjoh/serializer/issues/235) +- Support JSON PATCH for updating object graph [\#231](https://github.com/schmittjoh/serializer/issues/231) +- Dynamic expose, aka 'fields' query param [\#195](https://github.com/schmittjoh/serializer/issues/195) + +**Merged pull requests:** + +- Added doc reference for disabling discriminator [\#699](https://github.com/schmittjoh/serializer/pull/699) ([dragosprotung](https://github.com/dragosprotung)) +- Use GroupsExclusionStrategy::DEFAULT\_GROUP instead default group. [\#694](https://github.com/schmittjoh/serializer/pull/694) ([Aliance](https://github.com/Aliance)) +- A possible fix for the \#688 [\#689](https://github.com/schmittjoh/serializer/pull/689) ([zerkms](https://github.com/zerkms)) +- Improved Symfony 3.x compatibility [\#682](https://github.com/schmittjoh/serializer/pull/682) ([goetas](https://github.com/goetas)) + +## [1.4.2](https://github.com/schmittjoh/serializer/tree/1.4.2) (2016-11-13) +**Fixed bugs:** + +- Warning: JMS\Serializer\XmlDeserializationVisitor::visitArray\(\): Node no longer exists [\#674](https://github.com/schmittjoh/serializer/issues/674) +- Fixed xml arrays with namespaced entry triggers error [\#675](https://github.com/schmittjoh/serializer/pull/675) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- Max depth produces array of nulls [\#671](https://github.com/schmittjoh/serializer/issues/671) + +## [1.4.1](https://github.com/schmittjoh/serializer/tree/1.4.1) (2016-11-02) +**Fixed bugs:** + +- Groups context might be not initialized [\#669](https://github.com/schmittjoh/serializer/pull/669) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- Warning: Invalid argument supplied for foreach\(\) on getCurrentPath method [\#668](https://github.com/schmittjoh/serializer/issues/668) + +## [1.4.0](https://github.com/schmittjoh/serializer/tree/1.4.0) (2016-10-31) +**Implemented enhancements:** + +- Document the implied 'Default' property group when no group is specified [\#661](https://github.com/schmittjoh/serializer/pull/661) ([akoebbe](https://github.com/akoebbe)) +- Allow discriminator map in the middle of the hierarchy when deserializing [\#659](https://github.com/schmittjoh/serializer/pull/659) ([goetas](https://github.com/goetas)) +- Handle both int and integer [\#657](https://github.com/schmittjoh/serializer/pull/657) ([Aliance](https://github.com/Aliance)) + +**Fixed bugs:** + +- Deserialization fails when discriminator base class extends another class [\#182](https://github.com/schmittjoh/serializer/issues/182) +- Xml setters ignored when deserializing [\#665](https://github.com/schmittjoh/serializer/pull/665) ([goetas](https://github.com/goetas)) + +**Closed issues:** + +- Move `FormErrorHandler` to the bundle [\#664](https://github.com/schmittjoh/serializer/issues/664) +- Not compatible with Symfony 3's Controller::json\(\) [\#663](https://github.com/schmittjoh/serializer/issues/663) +- Class name not reflecting in serialized json [\#662](https://github.com/schmittjoh/serializer/issues/662) +- YML virtual\_properties no group exlcusion [\#656](https://github.com/schmittjoh/serializer/issues/656) +- \[RFC\] Introduce normalizer\denormalizer interface [\#646](https://github.com/schmittjoh/serializer/issues/646) +- Plain arrays are serialized \(normalized\) as "objects", ignoring serializeNull [\#641](https://github.com/schmittjoh/serializer/issues/641) +- serializer doesn't serialize traits [\#638](https://github.com/schmittjoh/serializer/issues/638) +- Add metadata informations [\#637](https://github.com/schmittjoh/serializer/issues/637) +- Unexpected results when serializing arrays containing null value elements [\#593](https://github.com/schmittjoh/serializer/issues/593) +- Allow to set default serialization context when building serializer [\#528](https://github.com/schmittjoh/serializer/issues/528) +- Enable Sourcegraph [\#455](https://github.com/schmittjoh/serializer/issues/455) +- Use different accessor for each group [\#420](https://github.com/schmittjoh/serializer/issues/420) +- GenericSerializationVisitor and shouldSerializeNull [\#360](https://github.com/schmittjoh/serializer/issues/360) +- Specify group along with MaxDepth [\#150](https://github.com/schmittjoh/serializer/issues/150) +- Allow Post Serialize Event to overwrite existing data [\#129](https://github.com/schmittjoh/serializer/issues/129) +- Warning: array\_key\_exists\(\) expects parameter 2 to be array, string given [\#70](https://github.com/schmittjoh/serializer/issues/70) + +**Merged pull requests:** + +- Nullable array inconsistency [\#660](https://github.com/schmittjoh/serializer/pull/660) ([goetas](https://github.com/goetas)) +- Fixed PHP 7.0.11 BC break \(or bugfix\) [\#658](https://github.com/schmittjoh/serializer/pull/658) ([goetas](https://github.com/goetas)) +- Renamed replaceData to setData [\#653](https://github.com/schmittjoh/serializer/pull/653) ([goetas](https://github.com/goetas)) +- add required sqlite extension for developing [\#649](https://github.com/schmittjoh/serializer/pull/649) ([scasei](https://github.com/scasei)) +- Run serialization benchmarks in the build process [\#647](https://github.com/schmittjoh/serializer/pull/647) ([goetas](https://github.com/goetas)) +- Alcalyn feature default serializer context [\#645](https://github.com/schmittjoh/serializer/pull/645) ([goetas](https://github.com/goetas)) +- Add format output option [\#640](https://github.com/schmittjoh/serializer/pull/640) ([AyrtonRicardo](https://github.com/AyrtonRicardo)) +- Remove deprecated FileCacheReader for doctrine annotations [\#634](https://github.com/schmittjoh/serializer/pull/634) ([goetas](https://github.com/goetas)) +- Added tests to ensure SerializeNull policy [\#633](https://github.com/schmittjoh/serializer/pull/633) ([goetas](https://github.com/goetas)) +- Fix inheritance of discriminators on Doctrine entities [\#382](https://github.com/schmittjoh/serializer/pull/382) ([xoob](https://github.com/xoob)) +- Allow Post Serialize Event to overwrite existing data [\#273](https://github.com/schmittjoh/serializer/pull/273) ([jockri](https://github.com/jockri)) + +## [1.3.1](https://github.com/schmittjoh/serializer/tree/1.3.1) (2016-08-23) +**Closed issues:** + +- \[Idea\] Inline name [\#629](https://github.com/schmittjoh/serializer/issues/629) +- indexBy property doesn't work since 1.2.0 [\#618](https://github.com/schmittjoh/serializer/issues/618) +- Composer deps issue [\#494](https://github.com/schmittjoh/serializer/issues/494) +- PHP 7 compatability issue [\#478](https://github.com/schmittjoh/serializer/issues/478) +- Add new tag \(upgrade packagist\) [\#461](https://github.com/schmittjoh/serializer/issues/461) +- Custom Type Handler for String Values [\#384](https://github.com/schmittjoh/serializer/issues/384) +- serializer ignores properties added by traits [\#313](https://github.com/schmittjoh/serializer/issues/313) +- Skip an element during Xml deserialization process [\#229](https://github.com/schmittjoh/serializer/issues/229) +- Using serializer for JSON serialising [\#223](https://github.com/schmittjoh/serializer/issues/223) +- No way to serialize binary data with a custom type [\#202](https://github.com/schmittjoh/serializer/issues/202) +- Automatic mapping of properties [\#200](https://github.com/schmittjoh/serializer/issues/200) +- Maybe the serializer should also allow the legal literals {1, 0} for booleans [\#198](https://github.com/schmittjoh/serializer/issues/198) +- Customize how Booleans are serialized [\#180](https://github.com/schmittjoh/serializer/issues/180) +- Problem with deserialize related entity [\#123](https://github.com/schmittjoh/serializer/issues/123) +- serialized\_name does not work in yaml [\#118](https://github.com/schmittjoh/serializer/issues/118) + +**Merged pull requests:** + +- Revert "Default `$serializeNull` to false" [\#630](https://github.com/schmittjoh/serializer/pull/630) ([goetas](https://github.com/goetas)) + +## [1.3.0](https://github.com/schmittjoh/serializer/tree/1.3.0) (2016-08-17) +**Closed issues:** + +- problems with xml namespaces after update [\#621](https://github.com/schmittjoh/serializer/issues/621) +- Trying to decorate a member to ArrayCollection but gets an error when deserilizing because composer didn't download the class from doctrine. [\#596](https://github.com/schmittjoh/serializer/issues/596) +- Missing doctrine/common requirement ? [\#517](https://github.com/schmittjoh/serializer/issues/517) +- PHP Fatal error: Using $this when not in object context in JMS/Serializer/Serializer.php on line 99 [\#441](https://github.com/schmittjoh/serializer/issues/441) +- custom collection handler [\#415](https://github.com/schmittjoh/serializer/issues/415) +- Exclude annotation not preventing attempt to find public methods when using AccessType [\#367](https://github.com/schmittjoh/serializer/issues/367) +- serializer.pre\_serialize event only thrown on objects/classes [\#337](https://github.com/schmittjoh/serializer/issues/337) +- Installing through composer gets "Segmentation fault" [\#308](https://github.com/schmittjoh/serializer/issues/308) +- Erroneous data format for unserializing... [\#283](https://github.com/schmittjoh/serializer/issues/283) +- DoctrineObjectConstructor should skip empty identifier field [\#193](https://github.com/schmittjoh/serializer/issues/193) + +**Merged pull requests:** + +- Added public `hasData` function to check if a data key already have been added. [\#625](https://github.com/schmittjoh/serializer/pull/625) ([goetas](https://github.com/goetas)) +- $context is not used [\#622](https://github.com/schmittjoh/serializer/pull/622) ([olvlvl](https://github.com/olvlvl)) +- Fix Doctrine PHPCR ODM 2.0 compatibility [\#605](https://github.com/schmittjoh/serializer/pull/605) ([wouterj](https://github.com/wouterj)) +- Introducing NormalizerInterface [\#592](https://github.com/schmittjoh/serializer/pull/592) ([alcalyn](https://github.com/alcalyn)) +- Fixed type-hinting [\#586](https://github.com/schmittjoh/serializer/pull/586) ([jgendera](https://github.com/jgendera)) +- Fix multiple handler callbacks in YamlDriver [\#515](https://github.com/schmittjoh/serializer/pull/515) ([mpajunen](https://github.com/mpajunen)) +- Fixed minor typos [\#364](https://github.com/schmittjoh/serializer/pull/364) ([sdaoudi](https://github.com/sdaoudi)) +- Default `$serializeNull` to false [\#317](https://github.com/schmittjoh/serializer/pull/317) ([steveYeah](https://github.com/steveYeah)) +- Missing attribute 'xml-value' in XML Reference [\#269](https://github.com/schmittjoh/serializer/pull/269) ([holtkamp](https://github.com/holtkamp)) +- Removed unnecessary use statement [\#262](https://github.com/schmittjoh/serializer/pull/262) ([dunglas](https://github.com/dunglas)) + +## [1.2.0](https://github.com/schmittjoh/serializer/tree/1.2.0) (2016-08-03) +**Implemented enhancements:** + +- Issue543 - Adding DateTimeImmutable support [\#635](https://github.com/schmittjoh/serializer/pull/635) ([toby-griffiths](https://github.com/toby-griffiths)) + +**Fixed bugs:** + +- Fix xml-attribute-map for the xml driver [\#595](https://github.com/schmittjoh/serializer/pull/595) ([romantomchak](https://github.com/romantomchak)) +- Fix warning array\_key\_exists in deserialization. [\#398](https://github.com/schmittjoh/serializer/pull/398) ([leonnleite](https://github.com/leonnleite)) +- \#367 Exclude annotation not preventing attempt to find public methods when using AccessType [\#397](https://github.com/schmittjoh/serializer/pull/397) ([Strate](https://github.com/Strate)) + +**Closed issues:** + +- XML serialisation performance vs. SimpleXML? [\#606](https://github.com/schmittjoh/serializer/issues/606) +- Undefined Offset 21 - PropertyMetadata \(master\) [\#581](https://github.com/schmittjoh/serializer/issues/581) +- Invalid null serialization in arrays [\#571](https://github.com/schmittjoh/serializer/issues/571) +- List Polymorphic with XML Deserialization [\#568](https://github.com/schmittjoh/serializer/issues/568) +- Serialize null values as empty string [\#566](https://github.com/schmittjoh/serializer/issues/566) +- Type mismatch should throw an exception instead of coercing when deserializing JSON [\#561](https://github.com/schmittjoh/serializer/issues/561) +- Serialize to array [\#518](https://github.com/schmittjoh/serializer/issues/518) +- AnnotationDriver Exception on Missing Setter/Getter even on @Exclude'd Properties [\#516](https://github.com/schmittjoh/serializer/issues/516) +- Arrays are serialized as objects like {"0":... } when data contains empty objects [\#488](https://github.com/schmittjoh/serializer/issues/488) +- Tag new release [\#465](https://github.com/schmittjoh/serializer/issues/465) +- Forcing no scientific notation for larg number, type double [\#405](https://github.com/schmittjoh/serializer/issues/405) +- PHP \< 5.3.9 BC break [\#383](https://github.com/schmittjoh/serializer/issues/383) +- Ignoring a tag when deserializing [\#352](https://github.com/schmittjoh/serializer/issues/352) + +**Merged pull requests:** + +- Allow to not skip empty not inline array root node [\#611](https://github.com/schmittjoh/serializer/pull/611) ([goetas](https://github.com/goetas)) +- Allow to use custom serializer with primitive type [\#610](https://github.com/schmittjoh/serializer/pull/610) ([goetas](https://github.com/goetas)) +- Composer is not able to resolve a dependency [\#608](https://github.com/schmittjoh/serializer/pull/608) ([goetas](https://github.com/goetas)) +- Test on Travis always high and low deps [\#584](https://github.com/schmittjoh/serializer/pull/584) ([goetas](https://github.com/goetas)) +- Update Symfony validator and allow PHPUnit 7 [\#583](https://github.com/schmittjoh/serializer/pull/583) ([goetas](https://github.com/goetas)) +- Fix serialize bug [\#582](https://github.com/schmittjoh/serializer/pull/582) ([goetas](https://github.com/goetas)) +- HHVM compatibility [\#580](https://github.com/schmittjoh/serializer/pull/580) ([goetas](https://github.com/goetas)) +- Discriminator Groups [\#579](https://github.com/schmittjoh/serializer/pull/579) ([maennchen](https://github.com/maennchen)) +- Fixed test suite on master [\#578](https://github.com/schmittjoh/serializer/pull/578) ([goetas](https://github.com/goetas)) +- Fix for a broken test: a missing \(incorrectly positioned\) argument [\#577](https://github.com/schmittjoh/serializer/pull/577) ([zerkms](https://github.com/zerkms)) +- Add extra test for handling child elements [\#569](https://github.com/schmittjoh/serializer/pull/569) ([tarjei](https://github.com/tarjei)) +- Fix bug \#343 return integer when the column is datetime [\#562](https://github.com/schmittjoh/serializer/pull/562) ([Bukashk0zzz](https://github.com/Bukashk0zzz)) +- \[doc\] fix AccessorOrder documentation [\#553](https://github.com/schmittjoh/serializer/pull/553) ([aledeg](https://github.com/aledeg)) +- Generic way to solve setValue on a property which respects its setter [\#550](https://github.com/schmittjoh/serializer/pull/550) ([maennchen](https://github.com/maennchen)) +- Added travis-ci label [\#399](https://github.com/schmittjoh/serializer/pull/399) ([spolischook](https://github.com/spolischook)) +- Generate namespaced element on XmlList entries [\#301](https://github.com/schmittjoh/serializer/pull/301) ([goetas](https://github.com/goetas)) + +## [1.1.0](https://github.com/schmittjoh/serializer/tree/1.1.0) (2015-10-27) +**Closed issues:** + +- Possible to set xsi:schemalocation? [\#505](https://github.com/schmittjoh/serializer/issues/505) +- Travis needs a renewed token to be able to set the status [\#495](https://github.com/schmittjoh/serializer/issues/495) +- Serialize a many-to-many relation [\#474](https://github.com/schmittjoh/serializer/issues/474) +- The document type "..." is not allowed [\#427](https://github.com/schmittjoh/serializer/issues/427) +- Yml serializer don't serialize empty arrays [\#183](https://github.com/schmittjoh/serializer/issues/183) + +**Merged pull requests:** + +- Manage empty array for serializer [\#510](https://github.com/schmittjoh/serializer/pull/510) ([Soullivaneuh](https://github.com/Soullivaneuh)) +- Fix the method name for the serialization context factory [\#490](https://github.com/schmittjoh/serializer/pull/490) ([stof](https://github.com/stof)) +- Switch the Twig integration to use non-deprecated APIs [\#482](https://github.com/schmittjoh/serializer/pull/482) ([stof](https://github.com/stof)) +- Add PHP 7 on Travis [\#477](https://github.com/schmittjoh/serializer/pull/477) ([Soullivaneuh](https://github.com/Soullivaneuh)) +- Change Proxy class used to Doctrine\Common\Persistence\Proxy [\#351](https://github.com/schmittjoh/serializer/pull/351) ([bburnichon](https://github.com/bburnichon)) +- Added PHP 5.6 [\#297](https://github.com/schmittjoh/serializer/pull/297) ([Nyholm](https://github.com/Nyholm)) + +## [1.0.0](https://github.com/schmittjoh/serializer/tree/1.0.0) (2015-06-16) +**Closed issues:** + +- Unrecognized 4 parts namespace [\#449](https://github.com/schmittjoh/serializer/issues/449) +- Groups is ignored [\#440](https://github.com/schmittjoh/serializer/issues/440) +- Property FelDev\CoreBundle\Entity\Persona::$apellido does not exist [\#432](https://github.com/schmittjoh/serializer/issues/432) +- Erroneous data format for unserializing [\#430](https://github.com/schmittjoh/serializer/issues/430) +- Deserialize JSON into existing Doctrine entities and empty strings are ignored [\#417](https://github.com/schmittjoh/serializer/issues/417) +- Failing to deserealize JSON string [\#402](https://github.com/schmittjoh/serializer/issues/402) +- Empty results serializing virtual\_properties [\#400](https://github.com/schmittjoh/serializer/issues/400) +- API stable 1.0.0 release in sight? [\#395](https://github.com/schmittjoh/serializer/issues/395) +- Is this project maintained still? [\#361](https://github.com/schmittjoh/serializer/issues/361) +- PreSerialize [\#339](https://github.com/schmittjoh/serializer/issues/339) +- Change default `access\_type` globally [\#336](https://github.com/schmittjoh/serializer/issues/336) +- Deserialization of XmlList does not support namespaces [\#332](https://github.com/schmittjoh/serializer/issues/332) +- Recursion groups, serializing properties in entities [\#329](https://github.com/schmittjoh/serializer/issues/329) +- The testsuite is broken [\#326](https://github.com/schmittjoh/serializer/issues/326) +- Namespaces and serialize/deserialize process [\#303](https://github.com/schmittjoh/serializer/issues/303) +- Exclusion of parent properties failing [\#282](https://github.com/schmittjoh/serializer/issues/282) +- How to deserialize correctly an array of arbitrary values ? [\#280](https://github.com/schmittjoh/serializer/issues/280) +- Try to identify getter/setter from an excluded property [\#278](https://github.com/schmittjoh/serializer/issues/278) +- Bug Entity constructor not called [\#270](https://github.com/schmittjoh/serializer/issues/270) +- Make it possible to escape special characters on serialization [\#265](https://github.com/schmittjoh/serializer/issues/265) +- doctrine annotations without namespace [\#264](https://github.com/schmittjoh/serializer/issues/264) +- php-collection constraint [\#257](https://github.com/schmittjoh/serializer/issues/257) +- \[Metadata\] PHP warning only when unittesting [\#255](https://github.com/schmittjoh/serializer/issues/255) +- Discriminator [\#220](https://github.com/schmittjoh/serializer/issues/220) + +**Merged pull requests:** + +- fix json output \(from \[\] to {} if empty\) of form error [\#462](https://github.com/schmittjoh/serializer/pull/462) ([jhkchan](https://github.com/jhkchan)) +- Add toArray and fromArray methods to the serializer [\#435](https://github.com/schmittjoh/serializer/pull/435) ([tystr](https://github.com/tystr)) +- Erroneous data format for unserializing \#430 [\#431](https://github.com/schmittjoh/serializer/pull/431) ([tmilos](https://github.com/tmilos)) +- Scrutinizer Auto-Fixes [\#381](https://github.com/schmittjoh/serializer/pull/381) ([scrutinizer-auto-fixer](https://github.com/scrutinizer-auto-fixer)) +- Fixing tests for bugfixed PHP versions [\#375](https://github.com/schmittjoh/serializer/pull/375) ([urakozz](https://github.com/urakozz)) +- Making test running against phpunit 4.\* [\#369](https://github.com/schmittjoh/serializer/pull/369) ([joelwurtz](https://github.com/joelwurtz)) +- Fixes a typo in the annotations.rst [\#363](https://github.com/schmittjoh/serializer/pull/363) ([Potherca](https://github.com/Potherca)) +- \[doc\] Default group informations [\#345](https://github.com/schmittjoh/serializer/pull/345) ([emilien-puget](https://github.com/emilien-puget)) +- bump branch alias to 0.17 as 0.16 is already released [\#305](https://github.com/schmittjoh/serializer/pull/305) ([lsmith77](https://github.com/lsmith77)) +- Unserialization of XML booleans [\#302](https://github.com/schmittjoh/serializer/pull/302) ([goetas](https://github.com/goetas)) +- Added xml\_root\_namespace on YAML reference [\#299](https://github.com/schmittjoh/serializer/pull/299) ([goetas](https://github.com/goetas)) +- Fixed yml mapping file name [\#256](https://github.com/schmittjoh/serializer/pull/256) ([spolischook](https://github.com/spolischook)) +- Serialization of nested polymorphic objects [\#238](https://github.com/schmittjoh/serializer/pull/238) ([DavidMikeSimon](https://github.com/DavidMikeSimon)) + +## [0.16.0](https://github.com/schmittjoh/serializer/tree/0.16.0) (2014-03-18) +**Closed issues:** + +- best way to add root to json? [\#250](https://github.com/schmittjoh/serializer/issues/250) +- Use Doctrine metadata [\#247](https://github.com/schmittjoh/serializer/issues/247) +- Integration Points - run-time exclusion checking [\#239](https://github.com/schmittjoh/serializer/issues/239) +- Using DoctrineTypeDriver to use Doctrine Anotations [\#232](https://github.com/schmittjoh/serializer/issues/232) + +**Merged pull requests:** + +- Changed some constraint to allow latest versions [\#251](https://github.com/schmittjoh/serializer/pull/251) ([stof](https://github.com/stof)) +- XML root element namespace support [\#246](https://github.com/schmittjoh/serializer/pull/246) ([andreasferber](https://github.com/andreasferber)) +- Added test for leading backslash in front of class name to TypeParserTest [\#245](https://github.com/schmittjoh/serializer/pull/245) ([deralex](https://github.com/deralex)) +- Allow to fetch data from has\*\(\) with public\_method [\#243](https://github.com/schmittjoh/serializer/pull/243) ([jaymecd](https://github.com/jaymecd)) +- Improve yaml documentacion Fix \#100 [\#221](https://github.com/schmittjoh/serializer/pull/221) ([BraisGabin](https://github.com/BraisGabin)) + +## [0.15.0](https://github.com/schmittjoh/serializer/tree/0.15.0) (2014-02-10) +**Closed issues:** + +- Add trait support [\#228](https://github.com/schmittjoh/serializer/issues/228) +- "array" type: Not working for arrays of DateTime objects [\#199](https://github.com/schmittjoh/serializer/issues/199) +- Discriminator field filtered by exclusion strategy [\#189](https://github.com/schmittjoh/serializer/issues/189) +- DateTime within an array \(format get ignored\) [\#140](https://github.com/schmittjoh/serializer/issues/140) +- EntityNotFoundException using softDeletable [\#101](https://github.com/schmittjoh/serializer/issues/101) +- Virtual property documentation xml & yaml [\#100](https://github.com/schmittjoh/serializer/issues/100) + +**Merged pull requests:** + +- Read only class [\#227](https://github.com/schmittjoh/serializer/pull/227) ([goetas](https://github.com/goetas)) +- @Alex88's Serialize only form child of type Form \#117 [\#224](https://github.com/schmittjoh/serializer/pull/224) ([minayaserrano](https://github.com/minayaserrano)) +- @XmlElement notation consistency [\#219](https://github.com/schmittjoh/serializer/pull/219) ([ajgarlag](https://github.com/ajgarlag)) +- add $this-\>maxDepth to serialize / unserialize [\#218](https://github.com/schmittjoh/serializer/pull/218) ([rothfahl](https://github.com/rothfahl)) +- xml reference updated with virtual-property example [\#215](https://github.com/schmittjoh/serializer/pull/215) ([ribeiropaulor](https://github.com/ribeiropaulor)) +- Add XmlNamespace annotation documentation [\#213](https://github.com/schmittjoh/serializer/pull/213) ([jeserkin](https://github.com/jeserkin)) +- Scrutinizer Auto-Fixes [\#210](https://github.com/schmittjoh/serializer/pull/210) ([scrutinizer-auto-fixer](https://github.com/scrutinizer-auto-fixer)) +- Scrutinizer Auto-Fixes [\#206](https://github.com/schmittjoh/serializer/pull/206) ([scrutinizer-auto-fixer](https://github.com/scrutinizer-auto-fixer)) +- Add xmlAttributeMap to serialized values [\#204](https://github.com/schmittjoh/serializer/pull/204) ([colinfrei](https://github.com/colinfrei)) +- fix issue \#199: "array" type ignoring DateTime format [\#201](https://github.com/schmittjoh/serializer/pull/201) ([lukey78](https://github.com/lukey78)) +- Potential fix for "recursion detected" issue [\#104](https://github.com/schmittjoh/serializer/pull/104) ([tyler-sommer](https://github.com/tyler-sommer)) + +## [0.14.0](https://github.com/schmittjoh/serializer/tree/0.14.0) (2013-12-04) +**Implemented enhancements:** + +- Can now override groups on specific paths of the graph [\#170](https://github.com/schmittjoh/serializer/pull/170) ([adrienbrault](https://github.com/adrienbrault)) + +**Closed issues:** + +- @HandlerCallback not inherited [\#181](https://github.com/schmittjoh/serializer/issues/181) +- Conditional serialization [\#173](https://github.com/schmittjoh/serializer/issues/173) +- Deserialize XML partially [\#167](https://github.com/schmittjoh/serializer/issues/167) +- getter is not called when serializing Discriminator parent entity [\#156](https://github.com/schmittjoh/serializer/issues/156) +- Deserialize DateTime from js Date.toJSON format fail [\#145](https://github.com/schmittjoh/serializer/issues/145) +- Yaml driver for the parameter xml\_attribute\_map is broken [\#141](https://github.com/schmittjoh/serializer/issues/141) +- XmlKeyValueStore annotation does not seem to deserialize properly [\#139](https://github.com/schmittjoh/serializer/issues/139) +- Boolean conversion gone wrong [\#134](https://github.com/schmittjoh/serializer/issues/134) +- Serialize to/from array? [\#133](https://github.com/schmittjoh/serializer/issues/133) +- @XmlRoot annotation no longer working [\#131](https://github.com/schmittjoh/serializer/issues/131) +- Skip an element based on a condition in a XmlList [\#121](https://github.com/schmittjoh/serializer/issues/121) + +**Merged pull requests:** + +- No CData [\#187](https://github.com/schmittjoh/serializer/pull/187) ([mvrhov](https://github.com/mvrhov)) +- composer is preinstalled on travis [\#185](https://github.com/schmittjoh/serializer/pull/185) ([lsmith77](https://github.com/lsmith77)) +- \[WIP\] added support for PHPCR [\#184](https://github.com/schmittjoh/serializer/pull/184) ([lsmith77](https://github.com/lsmith77)) +- Metadata filename convention added to yml/xml references [\#172](https://github.com/schmittjoh/serializer/pull/172) ([rodrigodiez](https://github.com/rodrigodiez)) +- Fix inline bug with empty child [\#165](https://github.com/schmittjoh/serializer/pull/165) ([adrienbrault](https://github.com/adrienbrault)) +- Add virtual properties yaml example [\#163](https://github.com/schmittjoh/serializer/pull/163) ([adrienbrault](https://github.com/adrienbrault)) +- Allow deserialization to constructed objects [\#160](https://github.com/schmittjoh/serializer/pull/160) ([eugene-dounar](https://github.com/eugene-dounar)) +- Fix DoctrineDriverTest random failures [\#155](https://github.com/schmittjoh/serializer/pull/155) ([eugene-dounar](https://github.com/eugene-dounar)) +- Fix XML null DateTime deserialization [\#154](https://github.com/schmittjoh/serializer/pull/154) ([eugene-dounar](https://github.com/eugene-dounar)) +- Update doctrine/orm dev dependency [\#153](https://github.com/schmittjoh/serializer/pull/153) ([eugene-dounar](https://github.com/eugene-dounar)) +- composer install --dev fails [\#152](https://github.com/schmittjoh/serializer/pull/152) ([eugene-dounar](https://github.com/eugene-dounar)) +- Update annotations.rst [\#146](https://github.com/schmittjoh/serializer/pull/146) ([chrisjohnson00](https://github.com/chrisjohnson00)) +- Add Doctrine\ODM\PHPCR\ChildrenCollection to ArrayCollectionHandler [\#143](https://github.com/schmittjoh/serializer/pull/143) ([hacfi](https://github.com/hacfi)) +- xml\_attribute\_map fix for the yaml driver [\#142](https://github.com/schmittjoh/serializer/pull/142) ([mvanmeerbeck](https://github.com/mvanmeerbeck)) +- Support PropelCollection serialization [\#81](https://github.com/schmittjoh/serializer/pull/81) ([zebraf1](https://github.com/zebraf1)) +- Adds XML namespaces support [\#58](https://github.com/schmittjoh/serializer/pull/58) ([ajgarlag](https://github.com/ajgarlag)) + +## [0.13.0](https://github.com/schmittjoh/serializer/tree/0.13.0) (2013-07-29) +**Closed issues:** + +- Documentation on Exclusion Strategies has an error [\#122](https://github.com/schmittjoh/serializer/issues/122) +- How access to the current serializing group in a subscriber ? [\#99](https://github.com/schmittjoh/serializer/issues/99) +- DoctrineProxySubscriber not found [\#93](https://github.com/schmittjoh/serializer/issues/93) +- Namespaces at root level [\#86](https://github.com/schmittjoh/serializer/issues/86) +- Issues when requesting JSON or XML using Doctrine MongoDB ODM [\#85](https://github.com/schmittjoh/serializer/issues/85) +- addGlobalIgnoredName not working [\#78](https://github.com/schmittjoh/serializer/issues/78) +- serialize\_null configuration [\#77](https://github.com/schmittjoh/serializer/issues/77) +- Add json prefix to prevent script tag csrf attack [\#76](https://github.com/schmittjoh/serializer/issues/76) +- Add support for replacing serialization object inside events [\#74](https://github.com/schmittjoh/serializer/issues/74) +- Next stable version? [\#64](https://github.com/schmittjoh/serializer/issues/64) +- Deserialize with object refs [\#62](https://github.com/schmittjoh/serializer/issues/62) + +**Merged pull requests:** + +- fix wrong quote in used in docs [\#130](https://github.com/schmittjoh/serializer/pull/130) ([jaapio](https://github.com/jaapio)) +- Document the handler $context argument [\#116](https://github.com/schmittjoh/serializer/pull/116) ([adrienbrault](https://github.com/adrienbrault)) +- Document the SubscribingHandlerInterface a bit [\#115](https://github.com/schmittjoh/serializer/pull/115) ([adrienbrault](https://github.com/adrienbrault)) +- Add getter for the xml serialization visitor defaultRootName property [\#114](https://github.com/schmittjoh/serializer/pull/114) ([adrienbrault](https://github.com/adrienbrault)) +- Add Serializer::getMetadataFactory [\#113](https://github.com/schmittjoh/serializer/pull/113) ([adrienbrault](https://github.com/adrienbrault)) +- Accessor order [\#108](https://github.com/schmittjoh/serializer/pull/108) ([jaapio](https://github.com/jaapio)) +- Added xmlns:xsi namespace and fixed tests [\#107](https://github.com/schmittjoh/serializer/pull/107) ([josser](https://github.com/josser)) +- \[Doc\] Fixed typo in event\_system [\#106](https://github.com/schmittjoh/serializer/pull/106) ([lyrixx](https://github.com/lyrixx)) +- Fix discriminator map search in ClassMetadata [\#97](https://github.com/schmittjoh/serializer/pull/97) ([xanido](https://github.com/xanido)) +- Use the AnnotationReader interface in the SerializerBuilder, instead of the implemented AnnotationReader itself [\#82](https://github.com/schmittjoh/serializer/pull/82) ([HarmenM](https://github.com/HarmenM)) +- Remove useless YamlSerializationVisitor::prepare method [\#75](https://github.com/schmittjoh/serializer/pull/75) ([adrienbrault](https://github.com/adrienbrault)) +- Add the PRE\_DESERIALIZE event to the Events class [\#73](https://github.com/schmittjoh/serializer/pull/73) ([adrienbrault](https://github.com/adrienbrault)) +- Improve serialization example [\#71](https://github.com/schmittjoh/serializer/pull/71) ([tvlooy](https://github.com/tvlooy)) +- Max depth strategy [\#4](https://github.com/schmittjoh/serializer/pull/4) ([adrienbrault](https://github.com/adrienbrault)) + +## [0.12.0](https://github.com/schmittjoh/serializer/tree/0.12.0) (2013-03-28) +**Closed issues:** + +- Serialization profile/definition builder [\#68](https://github.com/schmittjoh/serializer/issues/68) +- I want to configure the default exclution policy [\#65](https://github.com/schmittjoh/serializer/issues/65) +- Mulit type property mapping [\#56](https://github.com/schmittjoh/serializer/issues/56) +- AccessType\("public\_method"\): Setters ignored when deserializing to non-standard XML properties [\#53](https://github.com/schmittjoh/serializer/issues/53) +- Adding @Accessor with custom getter causes LogicException if Doctrine ManyToOneEntity [\#52](https://github.com/schmittjoh/serializer/issues/52) +- Handler callback's does not get passed context [\#49](https://github.com/schmittjoh/serializer/issues/49) +- PostSerialize callback causes data loss [\#46](https://github.com/schmittjoh/serializer/issues/46) +- Empty Objects get serialized as "array\(\)" [\#43](https://github.com/schmittjoh/serializer/issues/43) +- Exclusion Policies aren't properly applied when "serializeNull" is "true" [\#42](https://github.com/schmittjoh/serializer/issues/42) +- Accessor annotation ignored [\#40](https://github.com/schmittjoh/serializer/issues/40) +- Support for multiple exclusion strategies [\#39](https://github.com/schmittjoh/serializer/issues/39) +- srholt123@yahoo.com [\#35](https://github.com/schmittjoh/serializer/issues/35) +- Could you tag a stable version? [\#34](https://github.com/schmittjoh/serializer/issues/34) +- Default conversion of camelCase to underscores is counterintuitive [\#33](https://github.com/schmittjoh/serializer/issues/33) +- Define the xml root when deserializing [\#18](https://github.com/schmittjoh/serializer/issues/18) + +**Merged pull requests:** + +- \[Annotation\] Added the ability to set the type when using @VirtualProperty [\#69](https://github.com/schmittjoh/serializer/pull/69) ([pylebecq](https://github.com/pylebecq)) +- Added documentation for the @VirtualProperty annotation [\#67](https://github.com/schmittjoh/serializer/pull/67) ([pylebecq](https://github.com/pylebecq)) +- Metadata stack tests [\#57](https://github.com/schmittjoh/serializer/pull/57) ([adrienbrault](https://github.com/adrienbrault)) +- Adding context to twig extension [\#55](https://github.com/schmittjoh/serializer/pull/55) ([smurfy](https://github.com/smurfy)) +- Allow deserialization of polymorphic classes by class without specifying the type [\#48](https://github.com/schmittjoh/serializer/pull/48) ([gordalina](https://github.com/gordalina)) +- Moves all state to dedicated context class [\#47](https://github.com/schmittjoh/serializer/pull/47) ([schmittjoh](https://github.com/schmittjoh)) +- Add PropertyNamingStrategy [\#37](https://github.com/schmittjoh/serializer/pull/37) ([passkey1510](https://github.com/passkey1510)) +- The NavigatorContext now holds a metadata stack [\#28](https://github.com/schmittjoh/serializer/pull/28) ([adrienbrault](https://github.com/adrienbrault)) + +## [0.11.0](https://github.com/schmittjoh/serializer/tree/0.11.0) (2013-01-29) +**Closed issues:** + +- Hooking into metadata directly... [\#17](https://github.com/schmittjoh/serializer/issues/17) +- Serializing null values [\#14](https://github.com/schmittjoh/serializer/issues/14) +- Strange caching-error [\#13](https://github.com/schmittjoh/serializer/issues/13) +- handling of plain array [\#10](https://github.com/schmittjoh/serializer/issues/10) +- Unsupported format doesn't throw exception anymore [\#8](https://github.com/schmittjoh/serializer/issues/8) + +**Merged pull requests:** + +- Fix typo [\#32](https://github.com/schmittjoh/serializer/pull/32) ([inanimatt](https://github.com/inanimatt)) +- Fixed the serialization of pluralized form errors [\#31](https://github.com/schmittjoh/serializer/pull/31) ([stof](https://github.com/stof)) +- Extract json specific logic from GenericSerializationVisitor [\#29](https://github.com/schmittjoh/serializer/pull/29) ([adrienbrault](https://github.com/adrienbrault)) +- \[Serializer\] Misc cleanup [\#27](https://github.com/schmittjoh/serializer/pull/27) ([vicb](https://github.com/vicb)) +- \[Builder\] Add ability to include if metadata [\#25](https://github.com/schmittjoh/serializer/pull/25) ([vicb](https://github.com/vicb)) +- Fix DateTimeZone issue when using the DateTime type [\#23](https://github.com/schmittjoh/serializer/pull/23) ([colinmorelli](https://github.com/colinmorelli)) +- Wrong exception message for parsing datetime [\#21](https://github.com/schmittjoh/serializer/pull/21) ([nickelc](https://github.com/nickelc)) +- Fixed typo in doc/reference/annotations.rst [\#16](https://github.com/schmittjoh/serializer/pull/16) ([iambrosi](https://github.com/iambrosi)) +- Typecast when serializing primitive types [\#15](https://github.com/schmittjoh/serializer/pull/15) ([baldurrensch](https://github.com/baldurrensch)) +- add check and helpful exception message on inconsistent type situation [\#12](https://github.com/schmittjoh/serializer/pull/12) ([dbu](https://github.com/dbu)) +- Dispatch pre-serialization event before handling data to have ability change type in listener [\#7](https://github.com/schmittjoh/serializer/pull/7) ([megazoll](https://github.com/megazoll)) +- Fix tests running in different environments [\#6](https://github.com/schmittjoh/serializer/pull/6) ([megazoll](https://github.com/megazoll)) +- Add DateInterval serialization to DateHandler formerly DateTimeHandler [\#5](https://github.com/schmittjoh/serializer/pull/5) ([rpg600](https://github.com/rpg600)) +- WIP Navigator context [\#3](https://github.com/schmittjoh/serializer/pull/3) ([adrienbrault](https://github.com/adrienbrault)) +- Update src/JMS/Serializer/Construction/DoctrineObjectConstructor.php [\#2](https://github.com/schmittjoh/serializer/pull/2) ([robocoder](https://github.com/robocoder)) +- Filter out non-identifiers from $data before calling find\(\) [\#1](https://github.com/schmittjoh/serializer/pull/1) ([robocoder](https://github.com/robocoder)) + + + +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* diff --git a/vendor/jms/serializer/LICENSE b/vendor/jms/serializer/LICENSE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/vendor/jms/serializer/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/vendor/jms/serializer/META.md b/vendor/jms/serializer/META.md new file mode 100644 index 0000000..07401d8 --- /dev/null +++ b/vendor/jms/serializer/META.md @@ -0,0 +1,7 @@ +# Generating changelog + +Use: https://github.com/skywinder/Github-Changelog-Generator + +```bash +github_changelog_generator --pull-requests --no-compare-link -t GITHUB-TOKEN +``` diff --git a/vendor/jms/serializer/README.md b/vendor/jms/serializer/README.md new file mode 100644 index 0000000..dd9f551 --- /dev/null +++ b/vendor/jms/serializer/README.md @@ -0,0 +1,4 @@ +Serializer [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/schmittjoh/serializer/badges/quality-score.png?s=189df68e00c75d3fe155bc0da0b53b53709a9895)](https://scrutinizer-ci.com/g/schmittjoh/serializer/) [![Build Status](https://travis-ci.org/schmittjoh/serializer.svg?branch=master)](https://travis-ci.org/schmittjoh/serializer) +========== + +Learn more about it in its [documentation](http://jmsyst.com/libs/serializer). diff --git a/vendor/jms/serializer/UPGRADING.md b/vendor/jms/serializer/UPGRADING.md new file mode 100644 index 0000000..a4ada71 --- /dev/null +++ b/vendor/jms/serializer/UPGRADING.md @@ -0,0 +1,26 @@ +From 0.13 to ??? +================ + +- If you have implemented your own ObjectConstructor, you need to add the DeserializationContext as an additional + parameter for the ``construct`` method. + + +From 0.11 to 0.12 +================= + +- GraphNavigator::detachObject has been removed, you can directly use Context::stopVisiting instead. +- VisitorInterface::getNavigator was deprecated, instead use Context::accept +- Serializer::setGroups, Serializer::setExclusionStrategy and Serializer::setVersion were removed, these settings must + now be passed as part of a new Context object. + + Before: + + $serializer->setVersion(1); + $serializer->serialize($data, 'json'); + + After: + + $serializer->serialize($data, 'json', SerializationContext::create()->setVersion(1)); + +- All visit??? methods of the VisitorInterface, now require a third argument, the Context; the context is for example + passed as an additional argument to handlers, exclusion strategies, and also available in event listeners. diff --git a/vendor/jms/serializer/composer.json b/vendor/jms/serializer/composer.json new file mode 100644 index 0000000..d23356c --- /dev/null +++ b/vendor/jms/serializer/composer.json @@ -0,0 +1,67 @@ +{ + "name": "jms/serializer", + "type": "library", + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "keywords": ["serialization", "deserialization", "json", "jaxb", "xml"], + "homepage": "http://jmsyst.com/libs/serializer", + "license": "Apache-2.0", + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "require": { + "php": "^5.5|^7.0", + "jms/metadata": "~1.1", + "jms/parser-lib": "1.*", + "phpoption/phpoption": "^1.1", + "phpcollection/phpcollection": "~0.1", + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3" + }, + "conflict": { + "twig/twig": "<1.12" + }, + "suggest": { + "symfony/yaml": "Required if you'd like to serialize data to YAML format.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", + "doctrine/cache": "Required if you like to use cache functionality." + }, + "require-dev": { + "ext-pdo_sqlite": "*", + "twig/twig": "~1.12|~2.0", + "doctrine/orm": "~2.1", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "doctrine/phpcr-odm": "^1.3|^2.0", + "propel/propel1": "~1.7", + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/yaml": "^2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/form": "~2.1|^3.0", + "symfony/filesystem": "^2.1", + "symfony/expression-language": "^2.6|^3.0", + "phpunit/phpunit": "^4.8|^5.0" + }, + "autoload": { + "psr-0": { + "JMS\\Serializer": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "JMS\\Serializer\\Tests\\": "tests/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + } +} diff --git a/vendor/jms/serializer/doc/LICENSE b/vendor/jms/serializer/doc/LICENSE new file mode 100644 index 0000000..a9aba5c --- /dev/null +++ b/vendor/jms/serializer/doc/LICENSE @@ -0,0 +1,55 @@ +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership. + "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and, + to Distribute and Publicly Perform the Work including as incorporated in Collections. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d). + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. + You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. + If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + + For the avoidance of doubt: + Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, + Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b). + Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/vendor/jms/serializer/doc/configuration.rst b/vendor/jms/serializer/doc/configuration.rst new file mode 100644 index 0000000..3e1106f --- /dev/null +++ b/vendor/jms/serializer/doc/configuration.rst @@ -0,0 +1,100 @@ +Configuration +============= + +.. note :: + + If you are using Symfony2, this section is mostly irrelevant for you as the entire integration is provided by + JMSSerializerBundle; please see `its documentation `_. If you are + using another framework, there also might be a module, or other special integration. Please check packagist, or + whatever registry usually holds such information for your framework. + +Constructing a Serializer +------------------------- + +This library provides a special builder object which makes constructing serializer instances a breeze in any PHP +project. In its shortest version, it's just a single line of code:: + + $serializer = JMS\Serializer\SerializerBuilder::create()->build(); + +This serializer is fully functional, but you might want to tweak it a bit for example to configure a cache directory. + +Configuring a Cache Directory +----------------------------- +The serializer collects several metadata about your objects from various sources such as YML, XML, or annotations. In +order to make this process as efficient as possible, it is encourage to let the serializer cache that information. For +that, you can configure a cache directory:: + + $builder = new JMS\Serializer\SerializerBuilder(); + + $serializer = + JMS\Serializer\SerializerBuilder::create() + ->setCacheDir($someWritableDir) + ->setDebug($trueOrFalse) + ->build(); + +As you can see, we also added a call to the ``setDebug`` method. In debug mode, the serializer will perform a bit more +filesystem checks to see whether the data that it has cached is still valid. These checks are useful during development +so that you do not need to manually clear cache folders, however in production they are just unnecessary overhead. The +debug setting allows you to make the behavior environment specific. + +Adding Custom Handlers +---------------------- +If you have created custom handlers, you can add them to the serializer easily:: + + $serializer = + JMS\Serializer\SerializerBuilder::create() + ->addDefaultHandlers() + ->configureHandlers(function(JMS\Serializer\Handler\HandlerRegistry $registry) { + $registry->registerHandler('serialization', 'MyObject', 'json', + function($visitor, MyObject $obj, array $type) { + return $obj->getName(); + } + ); + }) + ->build(); + +For more complex handlers, it is advisable to extract them to dedicated classes, +see :doc:`handlers documentation `. + +Configuring Metadata Locations +------------------------------ +This library supports several metadata sources. By default, it uses Doctrine annotations, but you may also store +metadata in XML, or YML files. For the latter, it is necessary to configure a metadata directory where those files +are located:: + + $serializer = + JMS\Serializer\SerializerBuilder::create() + ->addMetadataDir($someDir) + ->build(); + +The serializer would expect the metadata files to be named like the fully qualified class names where all ``\`` are +replaced with ``.``. So, if you class would be named ``Vendor\Package\Foo``, the metadata file would need to be located +at ``$someDir/Vendor.Package.Foo.(xml|yml)``. For more information, see the :doc:`reference `. + +Setting a default SerializationContext factory +-------------------------------------------- +To avoid to pass an instance of SerializationContext +every time you call method ``serialize()`` (or ``toArray()``), +you can set a ``SerializationContextFactory`` to the Serializer. + +Example using the SerializerBuilder:: + + use JMS\Serializer\SerializationContext; + + $serializer = JMS\Serializer\SerializerBuilder::create() + ->setSerializationContextFactory(function () { + return SerializationContext::create() + ->setSerializeNull(true) + ; + }) + ->build() + ; + +Then, calling ``$serializer->serialize($data, 'json');`` will generate +a serialization context from your callable and use it. + +.. note :: + + You can also set a default DeserializationContextFactory with + ``->setDeserializationContextFactory(function () { /* ... */ })`` + to be used with methods ``deserialize()`` and ``fromArray()``. diff --git a/vendor/jms/serializer/doc/cookbook.rst b/vendor/jms/serializer/doc/cookbook.rst new file mode 100644 index 0000000..985edd2 --- /dev/null +++ b/vendor/jms/serializer/doc/cookbook.rst @@ -0,0 +1,7 @@ +Cookbook +======== + +.. toctree :: + :glob: + + cookbook/* \ No newline at end of file diff --git a/vendor/jms/serializer/doc/cookbook/arrays.rst b/vendor/jms/serializer/doc/cookbook/arrays.rst new file mode 100644 index 0000000..7cb2704 --- /dev/null +++ b/vendor/jms/serializer/doc/cookbook/arrays.rst @@ -0,0 +1,47 @@ +Serailizing arrays and hashes +============================= + +Introduction +------------ +Serializing arrays and hashes (a concept that in PHP has not explicit boundaries) +can be challenging. The serializer offers via ``@Type`` annotation different options +to configure its behavior, but if we try to serialize directly an array +(not as a property of an object), we need to use context information to determine the +array "type" + +Examples +-------- + +In case of a JSON serialization: + +.. code-block :: php + + serialize([1, 2]); // [1, 2] + $serializer->serialize(['a', 'b']); // ['a', 'b'] + $serializer->serialize(['c' => 'd']); // {"c" => "d"} + + // same as default (let the PHP's json_encode function decide) + $serializer->serialize([1, 2], SerializationContext::create()->setInitialType('array')); // [1, 2] + $serializer->serialize([1 => 2], SerializationContext::create()->setInitialType('array')); // {"1": 2} + $serializer->serialize(['a', 'b'], SerializationContext::create()->setInitialType('array')); // ['a', 'b'] + $serializer->serialize(['c' => 'd'], SerializationContext::create()->setInitialType('array')); // {"c" => "d"} + + // typehint as strict array, keys will be always discarded + $serializer->serialize([], SerializationContext::create()->setInitialType('array')); // [] + $serializer->serialize([1, 2], SerializationContext::create()->setInitialType('array')); // [1, 2] + $serializer->serialize(['a', 'b'], SerializationContext::create()->setInitialType('array')); // ['a', 'b'] + $serializer->serialize(['c' => 'd'], SerializationContext::create()->setInitialType('array')); // ["d"] + + // typehint as hash, keys will be always considered + $serializer->serialize([], SerializationContext::create()->setInitialType('array')); // {} + $serializer->serialize([1, 2], SerializationContext::create()->setInitialType('array')); // {"0" : 1, "1" : 2} + $serializer->serialize(['a', 'b'], SerializationContext::create()->setInitialType('array')); // {"0" : "a", "1" : "b"} + $serializer->serialize(['c' => 'd'], SerializationContext::create()->setInitialType('array')); // {"d" : "d"} + + +.. note :: + + This applies only for the JSON and YAML serialization. diff --git a/vendor/jms/serializer/doc/cookbook/exclusion_strategies.rst b/vendor/jms/serializer/doc/cookbook/exclusion_strategies.rst new file mode 100644 index 0000000..9f56a0b --- /dev/null +++ b/vendor/jms/serializer/doc/cookbook/exclusion_strategies.rst @@ -0,0 +1,330 @@ +Exclusion Strategies +==================== + +Introduction +------------ +The serializer supports different exclusion strategies. Each strategy allows +you to define which properties of your objects should be serialized. + +General Exclusion Strategies +---------------------------- +If you would like to always expose, or exclude certain properties. Then, you can +do this with the annotations ``@ExclusionPolicy``, ``@Exclude``, and ``@Expose``. + +The default exclusion policy is to exclude nothing. That is, all properties of the +object will be serialized. If you only want to expose a few of the properties, +then it is easier to change the exclusion policy, and only mark these few properties: + +.. code-block :: php + + serialize(new VersionObject(), 'json', SerializationContext::create()->setVersion(1)); + + +Creating Different Views of Your Objects +---------------------------------------- +Another default exclusion strategy is to create different views of your objects. +Let's say you would like to serialize your object in a different view depending +whether it is displayed in a list view or in a details view. + +You can achieve that by using the ``@Groups`` annotation on your properties. Any +property without an explicit ``@Groups`` annotation will be included in a +``Default`` group, which can be used when specifying groups in the serialization +context. + +.. code-block :: php + + use JMS\Serializer\Annotation\Groups; + + class BlogPost + { + /** @Groups({"list", "details"}) */ + private $id; + + /** @Groups({"list", "details"}) */ + private $title; + + /** @Groups({"list"}) */ + private $nbComments; + + /** @Groups({"details"}) */ + private $comments; + + private $createdAt; + } + +You can then tell the serializer which groups to serialize in your controller:: + + use JMS\Serializer\SerializationContext; + + $serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('list'))); + + //will output $id, $title and $nbComments. + + $serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('Default', 'list'))); + + //will output $id, $title, $nbComments and $createdAt. + +Overriding Groups of Deeper Branches of the Graph +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In some cases you want to control more precisely what is serialized because you may have the same class at different +depths of the object graph. + +For example if you have a User that has a manager and friends:: + + use JMS\Serializer\Annotation\Groups; + + class User + { + private $name; + + /** @Groups({"manager_group"}) */ + private $manager; + + /** @Groups({"friends_group"}) */ + private $friends; + + public function __construct($name, User $manager = null, array $friends = null) + { + $this->name = $name; + $this->manager = $manager; + $this->friends = $friends; + } + } + +And the following object graph:: + + $john = new User( + 'John', + new User( + 'John Manager', + new User('The boss'), + array( + new User('John Manager friend 1'), + ) + ), + array( + new User( + 'John friend 1', + new User('John friend 1 manager') + ), + new User( + 'John friend 2', + new User('John friend 2 manager') + ), + ) + ); + +You can override groups on specific paths:: + + use JMS\Serializer\SerializationContext; + + $context = SerializationContext::create()->setGroups(array( + 'Default', // Serialize John's name + 'manager_group', // Serialize John's manager + 'friends_group', // Serialize John's friends + + 'manager' => array( // Override the groups for the manager of John + 'Default', // Serialize John manager's name + 'friends_group', // Serialize John manager's friends. If you do not override the groups for the friends, it will default to Default. + ), + + 'friends' => array( // Override the groups for the friends of John + 'manager_group' // Serialize John friends' managers. + + 'manager' => array( // Override the groups for the John friends' manager + 'Default', // This would be the default if you did not override the groups of the manager property. + ), + ), + )); + $serializer->serialize($john, 'json', $context); + +This would result in the following json:: + + { + "name": "John", + "manager": { + "name": "John Manager", + "friends": [ + { + "name": "John Manager friend 1" + } + ] + }, + "friends": [ + { + "manager": { + "name": "John friend 1 manager" + }, + }, + { + "manager": { + "name": "John friend 2 manager" + }, + }, + ] + } + +Limiting serialization depth of some properties +----------------------------------------------- +You can limit the depth of what will be serialized in a property with the +``@MaxDepth`` annotation. +This exclusion strategy is a bit different from the others, because it will +affect the serialized content of others classes than the one you apply the +annotation to. + +.. code-block :: php + + use JMS\Serializer\Annotation\MaxDepth; + + class User + { + private $username; + + /** @MaxDepth(1) */ + private $friends; + + /** @MaxDepth(2) */ + private $posts; + } + + class Post + { + private $title; + + private $author; + } + +In this example, serializing a user, because the max depth of the ``$friends`` +property is 1, the user friends would be serialized, but not their friends; +and because the the max depth of the ``$posts`` property is 2, the posts would +be serialized, and their author would also be serialized. + +You need to tell the serializer to take into account MaxDepth checks:: + + use JMS\Serializer\SerializationContext; + + $serializer->serialize($data, 'json', SerializationContext::create()->enableMaxDepthChecks()); + + +Dynamic exclusion strategy +-------------------------- + +If the previous exclusion strategies are not enough, is possible to use the ``ExpressionLanguageExclusionStrategy`` +that uses the `symfony expression language`_ to +allow a more sophisticated exclusion strategies using ``@Exclude(if="expression")`` and ``@Expose(if="expression")`` methods. + + +.. code-block :: php + + setExpressionEvaluator(new ExpressionEvaluator(new ExpressionLanguage())) + ->build(); + +.. _symfony expression language: https://github.com/symfony/expression-language + +By default the serializer exposes three variables (`object`, `context` and `property_metadata` for use in an expression. This enables you to create custom exclusion strategies similar to i.e. the [GroupExclusionStrategy](https://github.com/schmittjoh/serializer/blob/master/src/Exclusion/GroupsExclusionStrategy.php). In the below example, `someMethod` would receive all three variables. + +.. code-block :: php + + 'serializer.pre_serialize', + 'method' => 'onPreSerialize', + 'class' => 'AppBundle\\Entity\\SpecificClass', // if no class, subscribe to every serialization + 'format' => 'json', // optional format + 'priority' => 0, // optional priority + ), + ); + } + + public function onPreSerialize(JMS\Serializer\EventDispatcher\PreSerializeEvent $event) + { + // do something + } + } + + $builder + ->configureListeners(function(JMS\Serializer\EventDispatcher\EventDispatcher $dispatcher) { + $dispatcher->addListener('serializer.pre_serialize', + function(JMS\Serializer\EventDispatcher\PreSerializeEvent $event) { + // do something + } + ); + + $dispatcher->addSubscriber(new MyEventSubscriber()); + }) + ; + +Events +------ + +serializer.pre_serialize +~~~~~~~~~~~~~~~~~~~~~~~~ +This is dispatched before a type is visited. You have access to the visitor, +data, and type. Listeners may modify the type that is being used for +serialization. + +**Event Object**: ``JMS\Serializer\EventDispatcher\PreSerializeEvent`` + +serializer.post_serialize +~~~~~~~~~~~~~~~~~~~~~~~~~ +This is dispatched right before a type is left. You can for example use this +to add additional data for an object that you normally do not save inside +objects such as links. + +**Event Object**: ``JMS\Serializer\EventDispatcher\ObjectEvent`` + +serializer.pre_deserialize +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. versionadded : 0.12 + Event was added + +This is dispatched before an object is deserialized. You can use this to +modify submitted data, or modify the type that is being used for deserialization. + +**Event Object**: ``JMS\Serializer\EventDispatcher\PreDeserializeEvent`` + +serializer.post_deserialize +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This is dispatched after a type is processed. You can use it to normalize +submitted data if you require external services for example, or also to +perform validation of the submitted data. + +**Event Object**: ``JMS\Serializer\EventDispatcher\ObjectEvent`` diff --git a/vendor/jms/serializer/doc/handlers.rst b/vendor/jms/serializer/doc/handlers.rst new file mode 100644 index 0000000..e0e9cdf --- /dev/null +++ b/vendor/jms/serializer/doc/handlers.rst @@ -0,0 +1,63 @@ +Handlers +======== + +Introduction +------------ +Handlers allow you to change the serialization, or deserialization process +for a single type/format combination. + +Handlers are simple callback which receive three arguments: the visitor, +the data, and the type. + +Simple Callables +---------------- +You can register simple callables on the builder object:: + + $builder + ->configureHandlers(function(JMS\Serializer\Handler\HandlerRegistry $registry) { + $registry->registerHandler('serialization', 'MyObject', 'json', + function($visitor, MyObject $obj, array $type) { + return $obj->getName(); + } + ); + }) + ; + +Subscribing Handlers +-------------------- +Subscribing handlers contain the configuration themselves which makes them easier to share with other users, +and easier to set-up in general:: + + use JMS\Serializer\Handler\SubscribingHandlerInterface; + use JMS\Serializer\GraphNavigator; + use JMS\Serializer\JsonSerializationVisitor; + use JMS\Serializer\Context; + + class MyHandler implements SubscribingHandlerInterface + { + public static function getSubscribingMethods() + { + return array( + array( + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'format' => 'json', + 'type' => 'DateTime', + 'method' => 'serializeDateTimeToJson', + ), + ); + } + + public function serializeDateTimeToJson(JsonSerializationVisitor $visitor, \DateTime $date, array $type, Context $context) + { + return $date->format($type['params'][0]); + } + } + +Also, this type of handler is registered via the builder object:: + + $builder + ->configureHandlers(function(JMS\Serializer\Handler\HandlerRegistry $registry) { + $registry->registerSubscribingHandler(new MyHandler()); + }) + ; + diff --git a/vendor/jms/serializer/doc/index.rst b/vendor/jms/serializer/doc/index.rst new file mode 100644 index 0000000..cd7b096 --- /dev/null +++ b/vendor/jms/serializer/doc/index.rst @@ -0,0 +1,72 @@ +Serializer +========== + +Introduction +------------ +This library allows you to (de-)serialize data of any complexity. Currently, it supports XML, JSON, and YAML. + +It also provides you with a rich tool-set to adapt the output to your specific needs. + +Built-in features include: + +- (De-)serialize data of any complexity; circular references are handled gracefully. +- Supports many built-in PHP types (such as dates) +- Integrates with Doctrine ORM, et. al. +- Supports versioning, e.g. for APIs +- Configurable via PHP, XML, YAML, or Doctrine Annotations + +Installation +------------ +This library can be easily installed via composer + +.. code-block :: bash + + composer require jms/serializer + +or just add it to your ``composer.json`` file directly. + +Usage +----- +For standalone projects usage of the provided builder is encouraged:: + + $serializer = JMS\Serializer\SerializerBuilder::create()->build(); + $jsonContent = $serializer->serialize($data, 'json'); + echo $jsonContent; // or return it in a Response + +Documentation +------------- + +.. toctree :: + :hidden: + + configuration + usage + event_system + handlers + reference + cookbook + +- :doc:`Configuration ` +- :doc:`Usage ` +- :doc:`Events ` +- :doc:`Handlers ` + +- Recipes + * :doc:`/cookbook/exclusion_strategies` + +- Reference + * :doc:`Annotations ` + * :doc:`XML Reference ` + * :doc:`YML Reference ` + +License +------- + +The code is released under the business-friendly `Apache2 license`_. + +Documentation is subject to the `Attribution-NonCommercial-NoDerivs 3.0 Unported +license`_. + +.. _Apache2 license: http://www.apache.org/licenses/LICENSE-2.0.html +.. _Attribution-NonCommercial-NoDerivs 3.0 Unported license: http://creativecommons.org/licenses/by-nc-nd/3.0/ + diff --git a/vendor/jms/serializer/doc/reference.rst b/vendor/jms/serializer/doc/reference.rst new file mode 100644 index 0000000..123d6f6 --- /dev/null +++ b/vendor/jms/serializer/doc/reference.rst @@ -0,0 +1,8 @@ +Reference +========= + +.. toctree :: + :glob: + :maxdepth: 1 + + reference/* \ No newline at end of file diff --git a/vendor/jms/serializer/doc/reference/annotations.rst b/vendor/jms/serializer/doc/reference/annotations.rst new file mode 100644 index 0000000..c606a2f --- /dev/null +++ b/vendor/jms/serializer/doc/reference/annotations.rst @@ -0,0 +1,760 @@ +Annotations +----------- + +@ExclusionPolicy +~~~~~~~~~~~~~~~~ +This annotation can be defined on a class to indicate the exclusion strategy +that should be used for the class. + ++----------+----------------------------------------------------------------+ +| Policy | Description | ++==========+================================================================+ +| all | all properties are excluded by default; only properties marked | +| | with @Expose will be serialized/unserialized | ++----------+----------------------------------------------------------------+ +| none | no properties are excluded by default; all properties except | +| | those marked with @Exclude will be serialized/unserialized | ++----------+----------------------------------------------------------------+ + +@Exclude +~~~~~~~~ +This annotation can be defined on a property to indicate that the property should +not be serialized/unserialized. Works only in combination with NoneExclusionPolicy. + +If the ``ExpressionLanguageExclusionStrategy`` exclusion strategy is enabled, will +be possible to use ``@Exclude(if="expression")`` to exclude dynamically a property. + +@Expose +~~~~~~~ +This annotation can be defined on a property to indicate that the property should +be serialized/unserialized. Works only in combination with AllExclusionPolicy. + +If the ``ExpressionLanguageExclusionStrategy`` exclusion strategy is enabled, will +be possible to use ``@Expose(if="expression")`` to expose dynamically a property. + +@SkipWhenEmpty +~~~~~~~~~~~~~~ +This annotation can be defined on a property to indicate that the property should +not be serialized if the result will be "empty". + +Works option works only when serializing. + +@SerializedName +~~~~~~~~~~~~~~~ +This annotation can be defined on a property to define the serialized name for a +property. If this is not defined, the property will be translated from camel-case +to a lower-cased underscored name, e.g. camelCase -> camel_case. + +@Since +~~~~~~ +This annotation can be defined on a property to specify starting from which +version this property is available. If an earlier version is serialized, then +this property is excluded automatically. The version must be in a format that is +understood by PHP's ``version_compare`` function. + +@Until +~~~~~~ +This annotation can be defined on a property to specify until which version this +property was available. If a later version is serialized, then this property is +excluded automatically. The version must be in a format that is understood by +PHP's ``version_compare`` function. + +@Groups +~~~~~~~ +This annotation can be defined on a property to specify if the property +should be serialized when only serializing specific groups (see +:doc:`../cookbook/exclusion_strategies`). + +@MaxDepth +~~~~~~~~~ +This annotation can be defined on a property to limit the depth to which the +content will be serialized. It is very useful when a property will contain a +large object graph. + +@AccessType +~~~~~~~~~~~ +This annotation can be defined on a property, or a class to specify in which way +the properties should be accessed. By default, the serializer will retrieve, or +set the value via reflection, but you may change this to use a public method instead: + +.. code-block :: php + + name; + } + + public function setName($name) + { + $this->name = trim($name); + } + } + +@Accessor +~~~~~~~~~ +This annotation can be defined on a property to specify which public method should +be called to retrieve, or set the value of the given property: + +.. code-block :: php + + name); + } + + public function setName($name) + { + $this->name = $name; + } + } + +.. note :: + + If you need only to serialize your data, you can avoid providing a setter by + setting the property as read-only using the ``@ReadOnly`` annotation. + +@AccessorOrder +~~~~~~~~~~~~~~ +This annotation can be defined on a class to control the order of properties. By +default the order is undefined, but you may change it to either "alphabetical", or +"custom". + +.. code-block :: php + + lastName; + } + + public function getFirstName() + { + return $this->firstName; + } + } + +In this example: + +- ``id`` is exposed using the object reflection. +- ``lastName`` is exposed using the ``getLastName`` getter method. +- ``firstName`` is exposed using the ``object.getFirstName()`` expression (``exp`` can contain any valid symfony expression). + + +.. note :: + + This only works for serialization and is completely ignored during deserialization. + +@Inline +~~~~~~~ +This annotation can be defined on a property to indicate that the data of the property +should be inlined. + +**Note**: This only works for serialization, the serializer will not be able to deserialize +objects with this annotation. Also, AccessorOrder will be using the name of the property +to determine the order. + +@ReadOnly +~~~~~~~~~ +This annotation can be defined on a property to indicate that the data of the property +is read only and cannot be set during deserialization. + +A property can be marked as non read only with ``@ReadOnly(false)`` annotation (useful when a class is marked as read only). + +@PreSerialize +~~~~~~~~~~~~~ +This annotation can be defined on a method which is supposed to be called before +the serialization of the object starts. + +@PostSerialize +~~~~~~~~~~~~~~ +This annotation can be defined on a method which is then called directly after the +object has been serialized. + +@PostDeserialize +~~~~~~~~~~~~~~~~ +This annotation can be defined on a method which is supposed to be called after +the object has been deserialized. + +@HandlerCallback +~~~~~~~~~~~~~~~~ +This annotation can be defined on a method if serialization/deserialization is handled +by the object itself. + +.. code-block :: php + + | A list of type T (T can be any available type). | +| | Examples: | +| | array, array, etc. | ++----------------------------------------------------------+--------------------------------------------------+ +| array | A map of keys of type K to values of type V. | +| | Examples: array, | +| | array, etc. | ++----------------------------------------------------------+--------------------------------------------------+ +| DateTime | PHP's DateTime object (default format*/timezone) | ++----------------------------------------------------------+--------------------------------------------------+ +| DateTime<'format'> | PHP's DateTime object (custom format/default | +| | timezone) | ++----------------------------------------------------------+--------------------------------------------------+ +| DateTime<'format', 'zone'> | PHP's DateTime object (custom format/timezone) | ++----------------------------------------------------------+--------------------------------------------------+ +| DateTime<'format', 'zone', 'deserializeFormat'> | PHP's DateTime object (custom format/timezone, | +| | deserialize format). If you do not want to | +| | specify a specific timezone, use an empty | +| | string (''). | ++----------------------------------------------------------+--------------------------------------------------+ +| DateTimeImmutable | PHP's DateTimeImmutable object (default format*/ | +| | timezone) | ++----------------------------------------------------------+--------------------------------------------------+ +| DateTimeImmutable<'format'> | PHP's DateTimeImmutable object (custom format/ | +| | default timezone) | ++----------------------------------------------------------+--------------------------------------------------+ +| DateTimeImmutable<'format', 'zone'> | PHP's DateTimeImmutable object (custom format/ | +| | timezone) | ++----------------------------------------------------------+--------------------------------------------------+ +| DateTimeImmutable<'format', 'zone', 'deserializeFormat'> | PHP's DateTimeImmutable object (custom format/ | +| | timezone/deserialize format). If you do not want | +| | to specify a specific timezone, use an empty | +| | string (''). | ++----------------------------------------------------------+--------------------------------------------------+ +| DateInterval | PHP's DateInterval object using ISO 8601 format | ++----------------------------------------------------------+--------------------------------------------------+ +| T | Where T is a fully qualified class name. | ++----------------------------------------------------------+--------------------------------------------------+ +| ArrayCollection | Similar to array, but will be deserialized | +| | into Doctrine's ArrayCollection class. | ++----------------------------------------------------------+--------------------------------------------------+ +| ArrayCollection | Similar to array, but will be deserialized | +| | into Doctrine's ArrayCollection class. | ++----------------------------------------------------------+--------------------------------------------------+ + +(*) If the standalone jms/serializer is used then default format is `\DateTime::ISO8601` (which is not compatible with ISO-8601 despite the name). For jms/serializer-bundle the default format is `\DateTime::ATOM` (the real ISO-8601 format) but it can be changed in [configuration](https://jmsyst.com/bundles/JMSSerializerBundle/master/configuration#configuration-block-2-0). + +Examples: + +.. code-block :: php + + ") + */ + private $comments; + + /** + * @Type("string") + */ + private $title; + + /** + * @Type("MyNamespace\Author") + */ + private $author; + + /** + * @Type("DateTime") + */ + private $startAt; + + /** + * @Type("DateTime<'Y-m-d'>") + */ + private $endAt; + + /** + * @Type("DateTimeImmutable") + */ + private $createdAt; + + /** + * @Type("DateTimeImmutable<'Y-m-d'>") + */ + private $updatedAt; + + /** + * @Type("boolean") + */ + private $published; + + /** + * @Type("array") + */ + private $keyValueStore; + } + +@XmlRoot +~~~~~~~~ +This allows you to specify the name of the top-level element. + +.. code-block :: php + + + + + +.. note :: + + @XmlRoot only applies to the root element, but is for example not taken into + account for collections. You can define the entry name for collections using + @XmlList, or @XmlMap. + +@XmlAttribute +~~~~~~~~~~~~~ +This allows you to mark properties which should be set as attributes, +and not as child elements. + +.. code-block :: php + + + + + + +@XmlDiscriminator +~~~~~~~~~~~~~~~~~ +This annotation allows to modify the behaviour of @Discriminator regarding handling of XML. + + +Available Options: + ++-------------------------------------+--------------------------------------------------+ +| Type | Description | ++=====================================+==================================================+ +| attribute | use an attribute instead of a child node | ++-------------------------------------+--------------------------------------------------+ +| cdata | render child node content with or without cdata | ++-------------------------------------+--------------------------------------------------+ +| namespace | render child node using the specified namespace | ++-------------------------------------+--------------------------------------------------+ + +Example for "attribute": +.. code-block :: php + + + + +Example for "cdata": + +.. code-block :: php + car + + +@XmlValue +~~~~~~~~~ +This allows you to mark properties which should be set as the value of the +current element. Note that this has the limitation that any additional +properties of that object must have the @XmlAttribute annotation. +XMlValue also has property cdata. Which has the same meaning as the one in +XMLElement. + +.. code-block :: php + + 1.23 + +@XmlList +~~~~~~~~ +This allows you to define several properties of how arrays should be +serialized. This is very similar to @XmlMap, and should be used if the +keys of the array are not important. + +.. code-block :: php + + text = $text; + } + } + +Resulting XML: + +.. code-block :: xml + + + + + + + + + + +You can also specify the entry tag namespace using the ``namespace`` attribute (``@XmlList(inline = true, entry = "comment", namespace="http://www.example.com/ns")``). + +@XmlMap +~~~~~~~ +Similar to @XmlList, but the keys of the array are meaningful. + +@XmlKeyValuePairs +~~~~~~~~~~~~~~~~~ +This allows you to use the keys of an array as xml tags. + +.. note :: + + When a key is an invalid xml tag name (e.g. 1_foo) the tag name *entry* will be used instead of the key. + +@XmlAttributeMap +~~~~~~~~~~~~~~~~ + +This is similar to the @XmlKeyValuePairs, but instead of creating child elements, it creates attributes. + +.. code-block :: php + + 'firstname', + 'value' => 'Adrien', + ); + } + +Resulting XML: + +.. code-block :: xml + + + +@XmlElement +~~~~~~~~~~~ +This annotation can be defined on a property to add additional xml serialization/deserialization properties. + +.. code-block :: php + + my_id + +@XmlNamespace +~~~~~~~~~~~~~ +This annotation allows you to specify Xml namespace/s and prefix used. + +.. code-block :: php + + + + + + + diff --git a/vendor/jms/serializer/doc/reference/xml_reference.rst b/vendor/jms/serializer/doc/reference/xml_reference.rst new file mode 100644 index 0000000..0ede528 --- /dev/null +++ b/vendor/jms/serializer/doc/reference/xml_reference.rst @@ -0,0 +1,107 @@ +XML Reference +------------- +:: + + + + + + + + ClassName + + foo + + + + + + + + + foo + bar + + + + + + + + + + + + + + foo + bar + + + + + + + diff --git a/vendor/jms/serializer/doc/reference/yml_reference.rst b/vendor/jms/serializer/doc/reference/yml_reference.rst new file mode 100644 index 0000000..0128ad1 --- /dev/null +++ b/vendor/jms/serializer/doc/reference/yml_reference.rst @@ -0,0 +1,82 @@ +YAML Reference +-------------- +:: + + # Vendor\MyBundle\Resources\config\serializer\Model.ClassName.yml + Vendor\MyBundle\Model\ClassName: + exclusion_policy: ALL + xml_root_name: foobar + xml_root_namespace: http://your.default.namespace + exclude: true + read_only: false + access_type: public_method # defaults to property + accessor_order: custom + custom_accessor_order: [propertyName1, propertyName2, ..., propertyNameN] + discriminator: + field_name: type + disabled: false + map: + some-value: ClassName + groups: [foo, bar] + xml_attribute: true + xml_element: + cdata: false + namespace: http://www.w3.org/2005/Atom + virtual_properties: + getSomeProperty: + serialized_name: foo + type: integer + expression_prop: + exp: object.getName() + serialized_name: foo + type: integer + xml_namespaces: + "": http://your.default.namespace + atom: http://www.w3.org/2005/Atom + properties: + some-property: + exclude: true + expose: true + exclude_if: expr + expose_if: expr + skip_when_empty: false + access_type: public_method # defaults to property + accessor: # access_type must be set to public_method + getter: getSomeOtherProperty + setter: setSomeOtherProperty + type: string + serialized_name: foo + since_version: 1.0 + until_version: 1.1 + groups: [foo, bar] + xml_attribute: true + xml_value: true + inline: true + read_only: true + xml_key_value_pairs: true + xml_list: + inline: true + entry_name: foo + namespace: http://www.w3.org/2005/Atom + xml_map: + inline: true + key_attribute_name: foo + entry_name: bar + namespace: http://www.w3.org/2005/Atom + xml_attribute_map: true + xml_element: + cdata: false + namespace: http://www.w3.org/2005/Atom + max_depth: 2 + + handler_callbacks: + serialization: + xml: serializeToXml + json: serializeToJson + deserialization: + xml: deserializeFromXml + + callback_methods: + pre_serialize: [foo, bar] + post_serialize: [foo, bar] + post_deserialize: [foo, bar] diff --git a/vendor/jms/serializer/doc/usage.rst b/vendor/jms/serializer/doc/usage.rst new file mode 100644 index 0000000..cd78c20 --- /dev/null +++ b/vendor/jms/serializer/doc/usage.rst @@ -0,0 +1,38 @@ +Usage +===== + +Serializing Objects +------------------- +Most common usage is probably to serialize objects. This can be achieved +very easily: + +.. configuration-block :: + + .. code-block :: php + + build(); + $serializer->serialize($object, 'json'); + $serializer->serialize($object, 'xml'); + $serializer->serialize($object, 'yml'); + + .. code-block :: jinja + + {{ object | serialize }} {# uses JSON #} + {{ object | serialize('json') }} + {{ object | serialize('xml') }} + {{ object | serialize('yml') }} + +Deserializing Objects +--------------------- +You can also deserialize objects from their XML, or JSON representation. For +example, when accepting data via an API. + +.. code-block :: php + + build(); + $object = $serializer->deserialize($jsonData, 'MyNamespace\MyObject', 'json'); + diff --git a/vendor/jms/serializer/phpunit.xml.dist b/vendor/jms/serializer/phpunit.xml.dist new file mode 100644 index 0000000..cd62f11 --- /dev/null +++ b/vendor/jms/serializer/phpunit.xml.dist @@ -0,0 +1,31 @@ + + + + + + ./tests + + + + + + performance + + + + + src + + + diff --git a/vendor/jms/serializer/src/JMS/Serializer/AbstractVisitor.php b/vendor/jms/serializer/src/JMS/Serializer/AbstractVisitor.php new file mode 100644 index 0000000..f2b305c --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/AbstractVisitor.php @@ -0,0 +1,64 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Accessor\AccessorStrategyInterface; +use JMS\Serializer\Accessor\DefaultAccessorStrategy; + +abstract class AbstractVisitor implements VisitorInterface +{ + protected $namingStrategy; + + /** + * @var AccessorStrategyInterface + */ + protected $accessor; + + public function __construct($namingStrategy, AccessorStrategyInterface $accessorStrategy = null) + { + $this->namingStrategy = $namingStrategy; + $this->accessor = $accessorStrategy ?: new DefaultAccessorStrategy(); + } + + public function getNamingStrategy() + { + return $this->namingStrategy; + } + + public function prepare($data) + { + return $data; + } + + /** + * @param array $typeArray + */ + protected function getElementType($typeArray) + { + if (false === isset($typeArray['params'][0])) { + return null; + } + + if (isset($typeArray['params'][1]) && is_array($typeArray['params'][1])) { + return $typeArray['params'][1]; + } else { + return $typeArray['params'][0]; + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Accessor/AccessorStrategyInterface.php b/vendor/jms/serializer/src/JMS/Serializer/Accessor/AccessorStrategyInterface.php new file mode 100644 index 0000000..6abcf8a --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Accessor/AccessorStrategyInterface.php @@ -0,0 +1,42 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Accessor; + +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * @author Asmir Mustafic + */ +interface AccessorStrategyInterface +{ + /** + * @param object $object + * @param PropertyMetadata $metadata + * @return mixed + */ + public function getValue($object, PropertyMetadata $metadata); + + /** + * @param object $object + * @param mixed $value + * @param PropertyMetadata $metadata + * @return void + */ + public function setValue($object, $value, PropertyMetadata $metadata); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Accessor/DefaultAccessorStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Accessor/DefaultAccessorStrategy.php new file mode 100644 index 0000000..57a4435 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Accessor/DefaultAccessorStrategy.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Accessor; + +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * @author Asmir Mustafic + */ +class DefaultAccessorStrategy implements AccessorStrategyInterface +{ + + public function getValue($object, PropertyMetadata $metadata) + { + return $metadata->getValue($object); + } + + public function setValue($object, $value, PropertyMetadata $metadata) + { + $metadata->setValue($object, $value); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Accessor/ExpressionAccessorStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Accessor/ExpressionAccessorStrategy.php new file mode 100644 index 0000000..4dc6054 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Accessor/ExpressionAccessorStrategy.php @@ -0,0 +1,57 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Accessor; + +use JMS\Serializer\Expression\ExpressionEvaluatorInterface; +use JMS\Serializer\Metadata\ExpressionPropertyMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * @author Asmir Mustafic + */ +class ExpressionAccessorStrategy implements AccessorStrategyInterface +{ + /** + * @var AccessorStrategyInterface + */ + private $fallback; + /** + * @var ExpressionEvaluatorInterface + */ + private $evaluator; + + public function __construct(ExpressionEvaluatorInterface $evaluator, AccessorStrategyInterface $fallback) + { + $this->fallback = $fallback; + $this->evaluator = $evaluator; + } + + public function getValue($object, PropertyMetadata $metadata) + { + if ($metadata instanceof ExpressionPropertyMetadata) { + return $this->evaluator->evaluate($metadata->expression, array('object' => $object)); + } + return $this->fallback->getValue($object, $metadata); + } + + public function setValue($object, $value, PropertyMetadata $metadata) + { + $this->fallback->setValue($object, $value, $metadata); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/AccessType.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/AccessType.php new file mode 100644 index 0000000..e4125e4 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/AccessType.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"CLASS", "PROPERTY"}) + * + * @author Johannes M. Schmitt + */ +final class AccessType +{ + /** + * @Required + * @var string + */ + public $type; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Accessor.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Accessor.php new file mode 100644 index 0000000..910fe7f --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Accessor.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target("PROPERTY") + * + * @author Johannes M. Schmitt + */ +final class Accessor +{ + /** + * @var string + */ + public $getter; + + /** + * @var string + */ + public $setter; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/AccessorOrder.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/AccessorOrder.php new file mode 100644 index 0000000..15510da --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/AccessorOrder.php @@ -0,0 +1,40 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * Controls the order of properties in a class. + * + * @Annotation + * @Target("CLASS") + * @author Johannes M. Schmitt + */ +final class AccessorOrder +{ + /** + * @Required + * @var string + */ + public $order; + + /** + * @var array + */ + public $custom = array(); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Discriminator.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Discriminator.php new file mode 100644 index 0000000..750e7eb --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Discriminator.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target("CLASS") + */ +class Discriminator +{ + /** @var array */ + public $map; + + /** @var string */ + public $field = 'type'; + + /** @var boolean */ + public $disabled = false; + + /** @var string[] */ + public $groups = array(); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Exclude.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Exclude.php new file mode 100644 index 0000000..27f3ec2 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Exclude.php @@ -0,0 +1,28 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY", "CLASS", "METHOD", "ANNOTATION"}) + */ +final class Exclude +{ + public $if; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/ExclusionPolicy.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/ExclusionPolicy.php new file mode 100644 index 0000000..2baad90 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/ExclusionPolicy.php @@ -0,0 +1,46 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +use JMS\Serializer\Exception\RuntimeException; + +/** + * @Annotation + * @Target("CLASS") + */ +final class ExclusionPolicy +{ + const NONE = 'NONE'; + const ALL = 'ALL'; + + public $policy; + + public function __construct(array $values) + { + if (!is_string($values['value'])) { + throw new RuntimeException('"value" must be a string.'); + } + + $this->policy = strtoupper($values['value']); + + if (self::NONE !== $this->policy && self::ALL !== $this->policy) { + throw new RuntimeException('Exclusion policy must either be "ALL", or "NONE".'); + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Expose.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Expose.php new file mode 100644 index 0000000..53f7cd8 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Expose.php @@ -0,0 +1,28 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD","ANNOTATION"}) + */ +final class Expose +{ + public $if; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Groups.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Groups.php new file mode 100644 index 0000000..70f0ad7 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Groups.php @@ -0,0 +1,29 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY","METHOD","ANNOTATION"}) + */ +final class Groups +{ + /** @var array @Required */ + public $groups; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/HandlerCallback.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/HandlerCallback.php new file mode 100644 index 0000000..588b949 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/HandlerCallback.php @@ -0,0 +1,40 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target("METHOD") + * + * @author Johannes M. Schmitt + */ +final class HandlerCallback +{ + /** + * @Required + * @var string + */ + public $format; + + /** + * @Required + * @var string + */ + public $direction; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Inline.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Inline.php new file mode 100644 index 0000000..ba82d5f --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Inline.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY","METHOD","ANNOTATION"}) + */ +final class Inline +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/MaxDepth.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/MaxDepth.php new file mode 100644 index 0000000..7b05a3f --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/MaxDepth.php @@ -0,0 +1,32 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY","METHOD","ANNOTATION"}) + */ +final class MaxDepth +{ + /** + * @Required + * @var integer + */ + public $depth; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/PostDeserialize.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/PostDeserialize.php new file mode 100644 index 0000000..b7ff4b5 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/PostDeserialize.php @@ -0,0 +1,33 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * This annotation can be defined on methods which are called after the + * deserialization of the object is complete. + * + * These methods do not necessarily have to be public. + * + * @Annotation + * @Target("METHOD") + * @author Johannes M. Schmitt + */ +final class PostDeserialize +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/PostSerialize.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/PostSerialize.php new file mode 100644 index 0000000..bb9cfd3 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/PostSerialize.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target("METHOD") + */ +final class PostSerialize +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/PreSerialize.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/PreSerialize.php new file mode 100644 index 0000000..c9ddbf1 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/PreSerialize.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * This annotation can be declared on methods which should be called + * before the Serialization process. + * + * These methods do not need to be public, and should do any clean-up, or + * preparation of the object that is necessary. + * + * @Annotation + * @Target("METHOD") + * @author Johannes M. Schmitt + */ +final class PreSerialize +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/ReadOnly.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/ReadOnly.php new file mode 100644 index 0000000..4712cb1 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/ReadOnly.php @@ -0,0 +1,31 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"CLASS","PROPERTY"}) + */ +final class ReadOnly +{ + /** + * @var boolean + */ + public $readOnly = true; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/SerializedName.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/SerializedName.php new file mode 100644 index 0000000..968705e --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/SerializedName.php @@ -0,0 +1,39 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +use JMS\Serializer\Exception\RuntimeException; + +/** + * @Annotation + * @Target({"PROPERTY","METHOD", "ANNOTATION"}) + */ +final class SerializedName +{ + public $name; + + public function __construct(array $values) + { + if (!isset($values['value']) || !is_string($values['value'])) { + throw new RuntimeException(sprintf('"value" must be a string.')); + } + + $this->name = $values['value']; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Since.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Since.php new file mode 100644 index 0000000..851d151 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Since.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD"}) + */ +final class Since extends Version +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/SkipWhenEmpty.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/SkipWhenEmpty.php new file mode 100644 index 0000000..d2a5433 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/SkipWhenEmpty.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY","METHOD","ANNOTATION"}) + */ +final class SkipWhenEmpty +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Type.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Type.php new file mode 100644 index 0000000..fb82886 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Type.php @@ -0,0 +1,32 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD","ANNOTATION"}) + */ +final class Type +{ + /** + * @Required + * @var string + */ + public $name; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Until.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Until.php new file mode 100644 index 0000000..8eef048 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Until.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD"}) + */ +final class Until extends Version +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/Version.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Version.php new file mode 100644 index 0000000..62b663c --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/Version.php @@ -0,0 +1,28 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +abstract class Version +{ + /** + * @Required + * @var string + */ + public $version; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/VirtualProperty.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/VirtualProperty.php new file mode 100644 index 0000000..ee168d9 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/VirtualProperty.php @@ -0,0 +1,48 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"METHOD", "CLASS"}) + * + * @author Alexander Klimenkov + */ +final class VirtualProperty +{ + public $exp; + public $name; + public $options = array(); + + public function __construct(array $data) + { + if (isset($data['value'])) { + $data['name'] = $data['value']; + unset($data['value']); + } + + foreach ($data as $key => $value) { + if (!property_exists(__CLASS__, $key)) { + throw new \BadMethodCallException(sprintf('Unknown property "%s" on annotation "%s".', $key, __CLASS__)); + } + $this->{$key} = $value; + } + } +} + diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlAttribute.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlAttribute.php new file mode 100644 index 0000000..9f7ef31 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlAttribute.php @@ -0,0 +1,31 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD","ANNOTATION"}) + */ +final class XmlAttribute +{ + /** + * @var string + */ + public $namespace; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlAttributeMap.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlAttributeMap.php new file mode 100644 index 0000000..2bdef0d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlAttributeMap.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD"}) + */ +final class XmlAttributeMap +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlCollection.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlCollection.php new file mode 100644 index 0000000..699b599 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlCollection.php @@ -0,0 +1,42 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +abstract class XmlCollection +{ + /** + * @var string + */ + public $entry = 'entry'; + + /** + * @var boolean + */ + public $inline = false; + + /** + * @var string + */ + public $namespace; + + /** + * @var boolean + */ + public $skipWhenEmpty = true; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlDiscriminator.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlDiscriminator.php new file mode 100644 index 0000000..caedd4c --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlDiscriminator.php @@ -0,0 +1,42 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + + +/** + * @Annotation + * @Target("CLASS") + */ +class XmlDiscriminator +{ + /** + * @var boolean + */ + public $attribute = false; + + /** + * @var boolean + */ + public $cdata = true; + + /** + * @var string + */ + public $namespace; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlElement.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlElement.php new file mode 100644 index 0000000..44800fa --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlElement.php @@ -0,0 +1,36 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY", "METHOD","ANNOTATION"}) + */ +final class XmlElement +{ + /** + * @var boolean + */ + public $cdata = true; + + /** + * @var string + */ + public $namespace; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlKeyValuePairs.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlKeyValuePairs.php new file mode 100644 index 0000000..71fecab --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlKeyValuePairs.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY","METHOD","ANNOTATION"}) + */ +final class XmlKeyValuePairs +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlList.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlList.php new file mode 100644 index 0000000..291daa9 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlList.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY","METHOD","ANNOTATION"}) + */ +final class XmlList extends XmlCollection +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlMap.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlMap.php new file mode 100644 index 0000000..813009d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlMap.php @@ -0,0 +1,31 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY","METHOD","ANNOTATION"}) + */ +final class XmlMap extends XmlCollection +{ + /** + * @var string + */ + public $keyAttribute = '_key'; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlNamespace.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlNamespace.php new file mode 100644 index 0000000..582e128 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlNamespace.php @@ -0,0 +1,37 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target("CLASS") + */ +final class XmlNamespace +{ + /** + * @Required + * @var string + */ + public $uri; + + /** + * @var string + */ + public $prefix = ''; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlRoot.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlRoot.php new file mode 100644 index 0000000..46bcf47 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlRoot.php @@ -0,0 +1,37 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target("CLASS") + */ +final class XmlRoot +{ + /** + * @Required + * @var string + */ + public $name; + + /** + * @var string + */ + public $namespace; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlValue.php b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlValue.php new file mode 100644 index 0000000..2fbf872 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Annotation/XmlValue.php @@ -0,0 +1,31 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Annotation; + +/** + * @Annotation + * @Target({"PROPERTY","METHOD","ANNOTATION"}) + */ +final class XmlValue +{ + /** + * @var boolean + */ + public $cdata = true; +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/ArrayTransformerInterface.php b/vendor/jms/serializer/src/JMS/Serializer/ArrayTransformerInterface.php new file mode 100644 index 0000000..fcd3fb1 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/ArrayTransformerInterface.php @@ -0,0 +1,50 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +/** + * Interface for array transformation. + * + * @author Daniel Bojdo + */ +interface ArrayTransformerInterface +{ + /** + * Converts objects to an array structure. + * + * This is useful when the data needs to be passed on to other methods which expect array data. + * + * @param mixed $data anything that converts to an array, typically an object or an array of objects + * @param SerializationContext|null $context + * + * @return array + */ + public function toArray($data, SerializationContext $context = null); + + /** + * Restores objects from an array structure. + * + * @param array $data + * @param string $type + * @param DeserializationContext|null $context + * + * @return mixed this returns whatever the passed type is, typically an object or an array of objects + */ + public function fromArray(array $data, $type, DeserializationContext $context = null); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Builder/CallbackDriverFactory.php b/vendor/jms/serializer/src/JMS/Serializer/Builder/CallbackDriverFactory.php new file mode 100644 index 0000000..d054b4b --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Builder/CallbackDriverFactory.php @@ -0,0 +1,29 @@ +callback = $callable; + } + + public function createDriver(array $metadataDirs, Reader $reader) + { + $driver = call_user_func($this->callback, $metadataDirs, $reader); + if (!$driver instanceof DriverInterface) { + throw new \LogicException('The callback must return an instance of DriverInterface.'); + } + + return $driver; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Builder/DefaultDriverFactory.php b/vendor/jms/serializer/src/JMS/Serializer/Builder/DefaultDriverFactory.php new file mode 100644 index 0000000..c586bc6 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Builder/DefaultDriverFactory.php @@ -0,0 +1,28 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Construction; + +use Doctrine\Common\Persistence\ManagerRegistry; +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\Exception\InvalidArgumentException; +use JMS\Serializer\Exception\ObjectConstructionException; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\VisitorInterface; + +/** + * Doctrine object constructor for new (or existing) objects during deserialization. + */ +class DoctrineObjectConstructor implements ObjectConstructorInterface +{ + const ON_MISSING_NULL = 'null'; + const ON_MISSING_EXCEPTION = 'exception'; + const ON_MISSING_FALLBACK = 'fallback'; + /** + * @var string + */ + private $fallbackStrategy; + + private $managerRegistry; + private $fallbackConstructor; + + /** + * Constructor. + * + * @param ManagerRegistry $managerRegistry Manager registry + * @param ObjectConstructorInterface $fallbackConstructor Fallback object constructor + * @param string $fallbackStrategy + */ + public function __construct(ManagerRegistry $managerRegistry, ObjectConstructorInterface $fallbackConstructor, $fallbackStrategy = self::ON_MISSING_NULL) + { + $this->managerRegistry = $managerRegistry; + $this->fallbackConstructor = $fallbackConstructor; + $this->fallbackStrategy = $fallbackStrategy; + } + + /** + * {@inheritdoc} + */ + public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context) + { + // Locate possible ObjectManager + $objectManager = $this->managerRegistry->getManagerForClass($metadata->name); + + if (!$objectManager) { + // No ObjectManager found, proceed with normal deserialization + return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context); + } + + // Locate possible ClassMetadata + $classMetadataFactory = $objectManager->getMetadataFactory(); + + if ($classMetadataFactory->isTransient($metadata->name)) { + // No ClassMetadata found, proceed with normal deserialization + return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context); + } + + // Managed entity, check for proxy load + if (!is_array($data)) { + // Single identifier, load proxy + return $objectManager->getReference($metadata->name, $data); + } + + // Fallback to default constructor if missing identifier(s) + $classMetadata = $objectManager->getClassMetadata($metadata->name); + $identifierList = array(); + + foreach ($classMetadata->getIdentifierFieldNames() as $name) { + if (!array_key_exists($name, $data)) { + return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context); + } + + $identifierList[$name] = $data[$name]; + } + + // Entity update, load it from database + $object = $objectManager->find($metadata->name, $identifierList); + + if (null === $object) { + switch ($this->fallbackStrategy) { + case self::ON_MISSING_NULL: + return null; + case self::ON_MISSING_EXCEPTION: + throw new ObjectConstructionException(sprintf("Entity %s can not be found", $metadata->name)); + case self::ON_MISSING_FALLBACK: + return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context); + default: + throw new InvalidArgumentException("The provided fallback strategy for the object constructor is not valid"); + } + } + + $objectManager->initializeObject($object); + + return $object; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Construction/ObjectConstructorInterface.php b/vendor/jms/serializer/src/JMS/Serializer/Construction/ObjectConstructorInterface.php new file mode 100644 index 0000000..37fc0b5 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Construction/ObjectConstructorInterface.php @@ -0,0 +1,47 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Construction; + +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\VisitorInterface; + +/** + * Implementations of this interface construct new objects during deserialization. + * + * @author Johannes M. Schmitt + */ +interface ObjectConstructorInterface +{ + /** + * Constructs a new object. + * + * Implementations could for example create a new object calling "new", use + * "unserialize" techniques, reflection, or other means. + * + * @param VisitorInterface $visitor + * @param ClassMetadata $metadata + * @param mixed $data + * @param array $type ["name" => string, "params" => array] + * @param DeserializationContext $context + * + * @return object + */ + public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Construction/UnserializeObjectConstructor.php b/vendor/jms/serializer/src/JMS/Serializer/Construction/UnserializeObjectConstructor.php new file mode 100644 index 0000000..333b8de --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Construction/UnserializeObjectConstructor.php @@ -0,0 +1,47 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Construction; + +use Doctrine\Instantiator\Instantiator; +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\VisitorInterface; + +class UnserializeObjectConstructor implements ObjectConstructorInterface +{ + /** @var Instantiator */ + private $instantiator; + + public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context) + { + return $this->getInstantiator()->instantiate($metadata->name); + } + + /** + * @return Instantiator + */ + private function getInstantiator() + { + if (null == $this->instantiator) { + $this->instantiator = new Instantiator(); + } + + return $this->instantiator; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Context.php b/vendor/jms/serializer/src/JMS/Serializer/Context.php new file mode 100644 index 0000000..dabf7a5 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Context.php @@ -0,0 +1,280 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\Exclusion\DepthExclusionStrategy; +use JMS\Serializer\Exclusion\DisjunctExclusionStrategy; +use JMS\Serializer\Exclusion\ExclusionStrategyInterface; +use JMS\Serializer\Exclusion\GroupsExclusionStrategy; +use JMS\Serializer\Exclusion\VersionExclusionStrategy; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use Metadata\MetadataFactory; +use Metadata\MetadataFactoryInterface; +use PhpCollection\Map; + +abstract class Context +{ + /** + * @var \PhpCollection\Map + */ + public $attributes; + + private $format; + + /** @var VisitorInterface */ + private $visitor; + + /** @var GraphNavigator */ + private $navigator; + + /** @var MetadataFactory */ + private $metadataFactory; + + /** @var ExclusionStrategyInterface */ + private $exclusionStrategy; + + /** @var boolean|null */ + private $serializeNull; + + private $initialized = false; + + /** @var \SplStack */ + private $metadataStack; + + public function __construct() + { + $this->attributes = new Map(); + } + + /** + * @param string $format + */ + public function initialize($format, VisitorInterface $visitor, GraphNavigator $navigator, MetadataFactoryInterface $factory) + { + if ($this->initialized) { + throw new \LogicException('This context was already initialized, and cannot be re-used.'); + } + + $this->initialized = true; + $this->format = $format; + $this->visitor = $visitor; + $this->navigator = $navigator; + $this->metadataFactory = $factory; + $this->metadataStack = new \SplStack(); + } + + public function accept($data, array $type = null) + { + return $this->navigator->accept($data, $type, $this); + } + + public function getMetadataFactory() + { + return $this->metadataFactory; + } + + public function getVisitor() + { + return $this->visitor; + } + + public function getNavigator() + { + return $this->navigator; + } + + public function getExclusionStrategy() + { + return $this->exclusionStrategy; + } + + public function setAttribute($key, $value) + { + $this->assertMutable(); + $this->attributes->set($key, $value); + + return $this; + } + + private function assertMutable() + { + if (!$this->initialized) { + return; + } + + throw new \LogicException('This context was already initialized and is immutable; you cannot modify it anymore.'); + } + + public function addExclusionStrategy(ExclusionStrategyInterface $strategy) + { + $this->assertMutable(); + + if (null === $this->exclusionStrategy) { + $this->exclusionStrategy = $strategy; + + return $this; + } + + if ($this->exclusionStrategy instanceof DisjunctExclusionStrategy) { + $this->exclusionStrategy->addStrategy($strategy); + + return $this; + } + + $this->exclusionStrategy = new DisjunctExclusionStrategy(array( + $this->exclusionStrategy, + $strategy, + )); + + return $this; + } + + /** + * @param integer $version + */ + public function setVersion($version) + { + if (null === $version) { + throw new \LogicException('The version must not be null.'); + } + + $this->attributes->set('version', $version); + $this->addExclusionStrategy(new VersionExclusionStrategy($version)); + + return $this; + } + + /** + * @param array|string $groups + */ + public function setGroups($groups) + { + if (empty($groups)) { + throw new \LogicException('The groups must not be empty.'); + } + + $this->attributes->set('groups', (array)$groups); + $this->addExclusionStrategy(new GroupsExclusionStrategy((array)$groups)); + + return $this; + } + + public function enableMaxDepthChecks() + { + $this->addExclusionStrategy(new DepthExclusionStrategy()); + + return $this; + } + + /** + * Set if NULLs should be serialized (TRUE) ot not (FALSE) + * + * @param bool $bool + * @return $this + */ + public function setSerializeNull($bool) + { + $this->serializeNull = (boolean)$bool; + + return $this; + } + + /** + * Returns TRUE when NULLs should be serialized + * Returns FALSE when NULLs should not be serialized + * Returns NULL when NULLs should not be serialized, + * but the user has not explicitly decided to use this policy + * + * @return bool|null + */ + public function shouldSerializeNull() + { + return $this->serializeNull; + } + + /** + * @return string + */ + public function getFormat() + { + return $this->format; + } + + public function pushClassMetadata(ClassMetadata $metadata) + { + $this->metadataStack->push($metadata); + } + + public function pushPropertyMetadata(PropertyMetadata $metadata) + { + $this->metadataStack->push($metadata); + } + + public function popPropertyMetadata() + { + $metadata = $this->metadataStack->pop(); + + if (!$metadata instanceof PropertyMetadata) { + throw new RuntimeException('Context metadataStack not working well'); + } + } + + public function popClassMetadata() + { + $metadata = $this->metadataStack->pop(); + + if (!$metadata instanceof ClassMetadata) { + throw new RuntimeException('Context metadataStack not working well'); + } + } + + public function getMetadataStack() + { + return $this->metadataStack; + } + + /** + * @return array + */ + public function getCurrentPath() + { + if (!$this->metadataStack) { + return array(); + } + + $paths = array(); + foreach ($this->metadataStack as $metadata) { + if ($metadata instanceof PropertyMetadata) { + array_unshift($paths, $metadata->name); + } + } + + return $paths; + } + + + abstract public function getDepth(); + + /** + * @return integer + */ + abstract public function getDirection(); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/CallableContextFactory.php b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/CallableContextFactory.php new file mode 100644 index 0000000..84c26b0 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/CallableContextFactory.php @@ -0,0 +1,48 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\ContextFactory; + +/** + * Context Factory using a callable. + */ +abstract class CallableContextFactory +{ + /** + * @var callable + */ + private $callable; + + /** + * @param callable $callable + */ + public function __construct(callable $callable) + { + $this->callable = $callable; + } + + /** + * @return mixed + */ + protected function createContext() + { + $callable = $this->callable; + + return $callable(); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/CallableDeserializationContextFactory.php b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/CallableDeserializationContextFactory.php new file mode 100644 index 0000000..20f9808 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/CallableDeserializationContextFactory.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\ContextFactory; + +/** + * Deserialization Context Factory using a callable. + */ +class CallableDeserializationContextFactory extends CallableContextFactory implements + DeserializationContextFactoryInterface +{ + /** + * {@InheritDoc} + */ + public function createDeserializationContext() + { + return $this->createContext(); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/CallableSerializationContextFactory.php b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/CallableSerializationContextFactory.php new file mode 100644 index 0000000..083666b --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/CallableSerializationContextFactory.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\ContextFactory; + +/** + * Serialization Context Factory using a callable. + */ +class CallableSerializationContextFactory extends CallableContextFactory implements + SerializationContextFactoryInterface +{ + /** + * {@InheritDoc} + */ + public function createSerializationContext() + { + return $this->createContext(); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultDeserializationContextFactory.php b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultDeserializationContextFactory.php new file mode 100644 index 0000000..d2b1d5e --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultDeserializationContextFactory.php @@ -0,0 +1,35 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\ContextFactory; + +use JMS\Serializer\DeserializationContext; + +/** + * Default Deserialization Context Factory. + */ +class DefaultDeserializationContextFactory implements DeserializationContextFactoryInterface +{ + /** + * {@InheritDoc} + */ + public function createDeserializationContext() + { + return new DeserializationContext(); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultSerializationContextFactory.php b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultSerializationContextFactory.php new file mode 100644 index 0000000..a292d27 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/DefaultSerializationContextFactory.php @@ -0,0 +1,35 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\ContextFactory; + +use JMS\Serializer\SerializationContext; + +/** + * Default Serialization Context Factory. + */ +class DefaultSerializationContextFactory implements SerializationContextFactoryInterface +{ + /** + * {@InheritDoc} + */ + public function createSerializationContext() + { + return new SerializationContext(); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/DeserializationContextFactoryInterface.php b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/DeserializationContextFactoryInterface.php new file mode 100644 index 0000000..3b6718b --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/DeserializationContextFactoryInterface.php @@ -0,0 +1,32 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\ContextFactory; + +use JMS\Serializer\DeserializationContext; + +/** + * Deserialization Context Factory Interface. + */ +interface DeserializationContextFactoryInterface +{ + /** + * @return DeserializationContext + */ + public function createDeserializationContext(); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/SerializationContextFactoryInterface.php b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/SerializationContextFactoryInterface.php new file mode 100644 index 0000000..725d83b --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/ContextFactory/SerializationContextFactoryInterface.php @@ -0,0 +1,32 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\ContextFactory; + +use JMS\Serializer\SerializationContext; + +/** + * Serialization Context Factory Interface. + */ +interface SerializationContextFactoryInterface +{ + /** + * @return SerializationContext + */ + public function createSerializationContext(); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/DeserializationContext.php b/vendor/jms/serializer/src/JMS/Serializer/DeserializationContext.php new file mode 100644 index 0000000..32aa867 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/DeserializationContext.php @@ -0,0 +1,53 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +class DeserializationContext extends Context +{ + private $depth = 0; + + public static function create() + { + return new self(); + } + + public function getDirection() + { + return GraphNavigator::DIRECTION_DESERIALIZATION; + } + + public function getDepth() + { + return $this->depth; + } + + public function increaseDepth() + { + $this->depth += 1; + } + + public function decreaseDepth() + { + if ($this->depth <= 0) { + throw new \LogicException('Depth cannot be smaller than zero.'); + } + + $this->depth -= 1; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Event.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Event.php new file mode 100644 index 0000000..1895ef9 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Event.php @@ -0,0 +1,77 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher; + +use JMS\Serializer\Context; + +class Event +{ + /** + * @var bool Whether no further event listeners should be triggered + */ + private $propagationStopped = false; + + protected $type; + private $context; + + public function __construct(Context $context, array $type) + { + $this->context = $context; + $this->type = $type; + } + + public function getVisitor() + { + return $this->context->getVisitor(); + } + + public function getContext() + { + return $this->context; + } + + public function getType() + { + return $this->type; + } + + /** + * Returns whether further event listeners should be triggered. + * + * @see Event::stopPropagation() + * + * @return bool Whether propagation was already stopped for this event + */ + public function isPropagationStopped() + { + return $this->propagationStopped; + } + + /** + * Stops the propagation of the event to further event listeners. + * + * If multiple event listeners are connected to the same event, no + * further event listener will be triggered once any trigger calls + * stopPropagation(). + */ + public function stopPropagation() + { + $this->propagationStopped = true; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcher.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcher.php new file mode 100644 index 0000000..ead136a --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcher.php @@ -0,0 +1,131 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher; + +use JMS\Serializer\Exception\InvalidArgumentException; + +/** + * Light-weight event dispatcher. + * + * This implementation focuses primarily on performance, and dispatching + * events for certain classes. It is not a general purpose event dispatcher. + * + * @author Johannes M. Schmitt + */ +class EventDispatcher implements EventDispatcherInterface +{ + private $listeners = array(); + private $classListeners = array(); + + public static function getDefaultMethodName($eventName) + { + return 'on' . str_replace(array('_', '.'), '', $eventName); + } + + /** + * Sets the listeners. + * + * @param array $listeners + */ + public function setListeners(array $listeners) + { + $this->listeners = $listeners; + $this->classListeners = array(); + } + + public function addListener($eventName, $callable, $class = null, $format = null) + { + $this->listeners[$eventName][] = array($callable, null === $class ? null : strtolower($class), $format); + unset($this->classListeners[$eventName]); + } + + public function addSubscriber(EventSubscriberInterface $subscriber) + { + foreach ($subscriber->getSubscribedEvents() as $eventData) { + if (!isset($eventData['event'])) { + throw new InvalidArgumentException(sprintf('Each event must have a "event" key.')); + } + + $method = isset($eventData['method']) ? $eventData['method'] : self::getDefaultMethodName($eventData['event']); + $class = isset($eventData['class']) ? strtolower($eventData['class']) : null; + $format = isset($eventData['format']) ? $eventData['format'] : null; + $this->listeners[$eventData['event']][] = array(array($subscriber, $method), $class, $format); + unset($this->classListeners[$eventData['event']]); + } + } + + public function hasListeners($eventName, $class, $format) + { + if (!isset($this->listeners[$eventName])) { + return false; + } + + $loweredClass = strtolower($class); + if (!isset($this->classListeners[$eventName][$loweredClass][$format])) { + $this->classListeners[$eventName][$loweredClass][$format] = $this->initializeListeners($eventName, $loweredClass, $format); + } + + return !!$this->classListeners[$eventName][$loweredClass][$format]; + } + + public function dispatch($eventName, $class, $format, Event $event) + { + if (!isset($this->listeners[$eventName])) { + return; + } + + $loweredClass = strtolower($class); + if (!isset($this->classListeners[$eventName][$loweredClass][$format])) { + $this->classListeners[$eventName][$loweredClass][$format] = $this->initializeListeners($eventName, $loweredClass, $format); + } + + foreach ($this->classListeners[$eventName][$loweredClass][$format] as $listener) { + + if ($event->isPropagationStopped()) { + break; + } + + call_user_func($listener, $event, $eventName, $loweredClass, $format, $this); + } + } + + /** + * @param string $eventName + * @param string $loweredClass + * @param string $format + * + * @return array An array of listeners + */ + protected function initializeListeners($eventName, $loweredClass, $format) + { + $listeners = array(); + foreach ($this->listeners[$eventName] as $listener) { + if (null !== $listener[1] && $loweredClass !== $listener[1]) { + continue; + } + if (null !== $listener[2] && $format !== $listener[2]) { + continue; + } + + $listeners[] = $listener[0]; + } + + return $listeners; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcherInterface.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcherInterface.php new file mode 100644 index 0000000..d757f99 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/EventDispatcherInterface.php @@ -0,0 +1,66 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher; + +interface EventDispatcherInterface +{ + /** + * Returns whether there are listeners. + * + * @param string $eventName + * @param string $class + * @param string $format + * + * @return boolean + */ + public function hasListeners($eventName, $class, $format); + + /** + * Dispatches an event. + * + * The listeners/subscribers are called in the same order in which they + * were added to the dispatcher. + * + * @param string $eventName + * @param string $class + * @param string $format + * @param Event $event + * @return void + */ + public function dispatch($eventName, $class, $format, Event $event); + + /** + * Adds a listener. + * + * @param string $eventName + * @param callable $callable + * @param string|null $class + * @param string|null $format + * @return void + */ + public function addListener($eventName, $callable, $class = null, $format = null); + + /** + * Adds a subscribers. + * + * @param EventSubscriberInterface $subscriber + * @return void + */ + public function addSubscriber(EventSubscriberInterface $subscriber); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/EventSubscriberInterface.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/EventSubscriberInterface.php new file mode 100644 index 0000000..a079ea5 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/EventSubscriberInterface.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher; + +interface EventSubscriberInterface +{ + /** + * Returns the events to which this class has subscribed. + * + * Return format: + * array( + * array('event' => 'the-event-name', 'method' => 'onEventName', 'class' => 'some-class', 'format' => 'json'), + * array(...), + * ) + * + * The class may be omitted if the class wants to subscribe to events of all classes. + * Same goes for the format key. + * + * @return array + */ + public static function getSubscribedEvents(); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Events.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Events.php new file mode 100644 index 0000000..f9cd9f6 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Events.php @@ -0,0 +1,31 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher; + +abstract class Events +{ + const PRE_SERIALIZE = 'serializer.pre_serialize'; + const POST_SERIALIZE = 'serializer.post_serialize'; + const PRE_DESERIALIZE = 'serializer.pre_deserialize'; + const POST_DESERIALIZE = 'serializer.post_deserialize'; + + final private function __construct() + { + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/LazyEventDispatcher.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/LazyEventDispatcher.php new file mode 100644 index 0000000..6c5f234 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/LazyEventDispatcher.php @@ -0,0 +1,58 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher; + +use Psr\Container\ContainerInterface as PsrContainerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; + +class LazyEventDispatcher extends EventDispatcher +{ + private $container; + + public function __construct($container) + { + if (!$container instanceof PsrContainerInterface && !$container instanceof ContainerInterface) { + throw new \InvalidArgumentException(sprintf('The container must be an instance of %s or %s (%s given).', PsrContainerInterface::class, ContainerInterface::class, is_object($container) ? get_class($container) : gettype($container))); + } + + $this->container = $container; + } + + /** + * {@inheritdoc} + */ + protected function initializeListeners($eventName, $loweredClass, $format) + { + $listeners = parent::initializeListeners($eventName, $loweredClass, $format); + + foreach ($listeners as &$listener) { + if (!is_array($listener) || !is_string($listener[0])) { + continue; + } + + if (!$this->container->has($listener[0])) { + continue; + } + + $listener[0] = $this->container->get($listener[0]); + } + + return $listeners; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/ObjectEvent.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/ObjectEvent.php new file mode 100644 index 0000000..c619d41 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/ObjectEvent.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher; + +use JMS\Serializer\Context; + +class ObjectEvent extends Event +{ + private $object; + + public function __construct(Context $context, $object, array $type) + { + parent::__construct($context, $type); + + $this->object = $object; + } + + public function getObject() + { + return $this->object; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/PreDeserializeEvent.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/PreDeserializeEvent.php new file mode 100644 index 0000000..228eade --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/PreDeserializeEvent.php @@ -0,0 +1,48 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher; + +use JMS\Serializer\DeserializationContext; + +class PreDeserializeEvent extends Event +{ + private $data; + + public function __construct(DeserializationContext $context, $data, array $type) + { + parent::__construct($context, $type); + + $this->data = $data; + } + + public function setType($name, array $params = array()) + { + $this->type = array('name' => $name, 'params' => $params); + } + + public function getData() + { + return $this->data; + } + + public function setData($data) + { + $this->data = $data; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/PreSerializeEvent.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/PreSerializeEvent.php new file mode 100644 index 0000000..ca3ed9c --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/PreSerializeEvent.php @@ -0,0 +1,31 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher; + +class PreSerializeEvent extends ObjectEvent +{ + /** + * @param string $typeName + * @param array $params + */ + public function setType($typeName, array $params = array()) + { + $this->type = array('name' => $typeName, 'params' => $params); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php new file mode 100644 index 0000000..78d9e25 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriber.php @@ -0,0 +1,123 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher\Subscriber; + +use Doctrine\Common\Persistence\Proxy; +use Doctrine\ODM\MongoDB\PersistentCollection as MongoDBPersistentCollection; +use Doctrine\ODM\PHPCR\PersistentCollection as PHPCRPersistentCollection; +use Doctrine\ORM\PersistentCollection; +use Doctrine\ORM\Proxy\Proxy as ORMProxy; +use JMS\Serializer\EventDispatcher\EventDispatcherInterface; +use JMS\Serializer\EventDispatcher\EventSubscriberInterface; +use JMS\Serializer\EventDispatcher\PreSerializeEvent; + +class DoctrineProxySubscriber implements EventSubscriberInterface +{ + /** + * @var bool + */ + private $skipVirtualTypeInit = false; + + /** + * @var bool + */ + private $initializeExcluded = true; + + public function __construct($skipVirtualTypeInit = false, $initializeExcluded = true) + { + $this->skipVirtualTypeInit = (bool)$skipVirtualTypeInit; + $this->initializeExcluded = (bool)$initializeExcluded; + } + + public function onPreSerialize(PreSerializeEvent $event) + { + $object = $event->getObject(); + $type = $event->getType(); + + // If the set type name is not an actual class, but a faked type for which a custom handler exists, we do not + // modify it with this subscriber. Also, we forgo autoloading here as an instance of this type is already created, + // so it must be loaded if its a real class. + $virtualType = !class_exists($type['name'], false); + + if ($object instanceof PersistentCollection + || $object instanceof MongoDBPersistentCollection + || $object instanceof PHPCRPersistentCollection + ) { + if (!$virtualType) { + $event->setType('ArrayCollection'); + } + + return; + } + + if (($this->skipVirtualTypeInit && $virtualType) || + (!$object instanceof Proxy && !$object instanceof ORMProxy) + ) { + return; + } + + // do not initialize the proxy if is going to be excluded by-class by some exclusion strategy + if ($this->initializeExcluded === false && !$virtualType) { + $context = $event->getContext(); + $exclusionStrategy = $context->getExclusionStrategy(); + if ($exclusionStrategy !== null && $exclusionStrategy->shouldSkipClass($context->getMetadataFactory()->getMetadataForClass(get_parent_class($object)), $context)) { + return; + } + } + + $object->__load(); + + if (!$virtualType) { + $event->setType(get_parent_class($object), $type['params']); + } + } + + public function onPreSerializeTypedProxy(PreSerializeEvent $event, $eventName, $class, $format, EventDispatcherInterface $dispatcher) + { + $type = $event->getType(); + // is a virtual type? then there is no need to change the event name + if (!class_exists($type['name'], false)) { + return; + } + + $object = $event->getObject(); + if ($object instanceof Proxy) { + $parentClassName = get_parent_class($object); + + // check if this is already a re-dispatch + if (strtolower($class) !== strtolower($parentClassName)) { + $event->stopPropagation(); + $newEvent = new PreSerializeEvent($event->getContext(), $object, array('name' => $parentClassName, 'params' => $type['params'])); + $dispatcher->dispatch($eventName, $parentClassName, $format, $newEvent); + + // update the type in case some listener changed it + $newType = $newEvent->getType(); + $event->setType($newType['name'], $newType['params']); + } + } + } + + public static function getSubscribedEvents() + { + return array( + array('event' => 'serializer.pre_serialize', 'method' => 'onPreSerializeTypedProxy'), + array('event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize'), + ); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriber.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriber.php new file mode 100644 index 0000000..46fae0d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriber.php @@ -0,0 +1,61 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher\Subscriber; + +use JMS\Serializer\EventDispatcher\Event; +use JMS\Serializer\EventDispatcher\EventSubscriberInterface; +use JMS\Serializer\Exception\ValidationFailedException; +use Symfony\Component\Validator\ValidatorInterface; + +class SymfonyValidatorSubscriber implements EventSubscriberInterface +{ + private $validator; + + public function __construct(ValidatorInterface $validator) + { + $this->validator = $validator; + } + + public static function getSubscribedEvents() + { + return array( + array('event' => 'serializer.post_deserialize', 'method' => 'onPostDeserialize'), + ); + } + + public function onPostDeserialize(Event $event) + { + $context = $event->getContext(); + + if ($context->getDepth() > 0) { + return; + } + + $validator = $this->validator; + $context->attributes->get('validation_groups')->map( + function (array $groups) use ($event, $validator) { + $list = $validator->validate($event->getObject(), $groups); + + if ($list->count() > 0) { + throw new ValidationFailedException($list); + } + } + ); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriber.php b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriber.php new file mode 100644 index 0000000..75ab85d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriber.php @@ -0,0 +1,73 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\EventDispatcher\Subscriber; + +use JMS\Serializer\EventDispatcher\Event; +use JMS\Serializer\EventDispatcher\EventSubscriberInterface; +use JMS\Serializer\Exception\ValidationFailedException; +use PhpOption\None; +use Symfony\Component\Validator\Validator\ValidatorInterface; + +class SymfonyValidatorValidatorSubscriber implements EventSubscriberInterface +{ + /** + * @var ValidatorInterface + */ + private $validator; + + public function __construct(ValidatorInterface $validator) + { + $this->validator = $validator; + } + + public static function getSubscribedEvents() + { + return array( + array('event' => 'serializer.post_deserialize', 'method' => 'onPostDeserialize'), + ); + } + + public function onPostDeserialize(Event $event) + { + $context = $event->getContext(); + + if ($context->getDepth() > 0) { + return; + } + + $validator = $this->validator; + $groups = $context->attributes->get('validation_groups') instanceof None + ? null + : $context->attributes->get('validation_groups')->get(); + + if (!$groups) { + return; + } + + $constraints = $context->attributes->get('validation_constraints') instanceof None + ? null + : $context->attributes->get('validation_constraints')->get(); + + $list = $validator->validate($event->getObject(), $constraints, $groups); + + if ($list->count() > 0) { + throw new ValidationFailedException($list); + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exception/Exception.php b/vendor/jms/serializer/src/JMS/Serializer/Exception/Exception.php new file mode 100644 index 0000000..ae8fa65 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exception/Exception.php @@ -0,0 +1,28 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exception; + +/** + * Base exception for the Serializer. + * + * @author Johannes M. Schmitt + */ +interface Exception +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exception/ExpressionLanguageRequiredException.php b/vendor/jms/serializer/src/JMS/Serializer/Exception/ExpressionLanguageRequiredException.php new file mode 100644 index 0000000..3df970f --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exception/ExpressionLanguageRequiredException.php @@ -0,0 +1,26 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exception; + +/** + * @author Asmir Mustafic + */ +class ExpressionLanguageRequiredException extends LogicException +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exception/InvalidArgumentException.php b/vendor/jms/serializer/src/JMS/Serializer/Exception/InvalidArgumentException.php new file mode 100644 index 0000000..fb5d344 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exception/InvalidArgumentException.php @@ -0,0 +1,28 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exception; + +/** + * InvalidArgumentException for the Serializer. + * + * @author Johannes M. Schmitt + */ +class InvalidArgumentException extends \InvalidArgumentException implements Exception +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exception/LogicException.php b/vendor/jms/serializer/src/JMS/Serializer/Exception/LogicException.php new file mode 100644 index 0000000..f74b015 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exception/LogicException.php @@ -0,0 +1,28 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exception; + +/** + * LogicException for the Serializer. + * + * @author Johannes M. Schmitt + */ +class LogicException extends \LogicException implements Exception +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exception/ObjectConstructionException.php b/vendor/jms/serializer/src/JMS/Serializer/Exception/ObjectConstructionException.php new file mode 100644 index 0000000..9b8a845 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exception/ObjectConstructionException.php @@ -0,0 +1,28 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exception; + +/** + * InvalidArgumentException for the Serializer. + * + * @author Asmir Mustafic + */ +class ObjectConstructionException extends RuntimeException implements Exception +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exception/RuntimeException.php b/vendor/jms/serializer/src/JMS/Serializer/Exception/RuntimeException.php new file mode 100644 index 0000000..cf15a7c --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exception/RuntimeException.php @@ -0,0 +1,28 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exception; + +/** + * RuntimeException for the Serializer. + * + * @author Johannes M. Schmitt + */ +class RuntimeException extends \RuntimeException implements Exception +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exception/UnsupportedFormatException.php b/vendor/jms/serializer/src/JMS/Serializer/Exception/UnsupportedFormatException.php new file mode 100644 index 0000000..bf8e6d7 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exception/UnsupportedFormatException.php @@ -0,0 +1,23 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exception; + +class UnsupportedFormatException extends InvalidArgumentException +{ +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exception/ValidationFailedException.php b/vendor/jms/serializer/src/JMS/Serializer/Exception/ValidationFailedException.php new file mode 100644 index 0000000..2627b91 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exception/ValidationFailedException.php @@ -0,0 +1,44 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exception; + +use Symfony\Component\Validator\ConstraintViolationListInterface; + +class ValidationFailedException extends RuntimeException +{ + /** + * @var ConstraintViolationListInterface + */ + private $list; + + public function __construct(ConstraintViolationListInterface $list) + { + parent::__construct(sprintf('Validation failed with %d error(s).', count($list))); + + $this->list = $list; + } + + /** + * @return ConstraintViolationListInterface + */ + public function getConstraintViolationList() + { + return $this->list; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exception/XmlErrorException.php b/vendor/jms/serializer/src/JMS/Serializer/Exception/XmlErrorException.php new file mode 100644 index 0000000..509a594 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exception/XmlErrorException.php @@ -0,0 +1,53 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exception; + +class XmlErrorException extends RuntimeException +{ + private $xmlError; + + public function __construct(\LibXMLError $error) + { + switch ($error->level) { + case LIBXML_ERR_WARNING: + $level = 'WARNING'; + break; + + case LIBXML_ERR_FATAL: + $level = 'FATAL'; + break; + + case LIBXML_ERR_ERROR: + $level = 'ERROR'; + break; + + default: + $level = 'UNKNOWN'; + } + + parent::__construct(sprintf('[%s] %s in %s (line: %d, column: %d)', $level, $error->message, $error->file, $error->line, $error->column)); + + $this->xmlError = $error; + } + + public function getXmlError() + { + return $this->xmlError; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exclusion/DepthExclusionStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/DepthExclusionStrategy.php new file mode 100644 index 0000000..89295fc --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/DepthExclusionStrategy.php @@ -0,0 +1,67 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exclusion; + +use JMS\Serializer\Context; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * @author Adrien Brault + */ +class DepthExclusionStrategy implements ExclusionStrategyInterface +{ + /** + * {@inheritDoc} + */ + public function shouldSkipClass(ClassMetadata $metadata, Context $context) + { + return $this->isTooDeep($context); + } + + /** + * {@inheritDoc} + */ + public function shouldSkipProperty(PropertyMetadata $property, Context $context) + { + return $this->isTooDeep($context); + } + + private function isTooDeep(Context $context) + { + $depth = $context->getDepth(); + $metadataStack = $context->getMetadataStack(); + + $nthProperty = 0; + // iterate from the first added items to the lasts + for ($i = $metadataStack->count() - 1; $i > 0; $i--) { + $metadata = $metadataStack[$i]; + if ($metadata instanceof PropertyMetadata) { + $nthProperty++; + $relativeDepth = $depth - $nthProperty; + + if (null !== $metadata->maxDepth && $relativeDepth > $metadata->maxDepth) { + return true; + } + } + } + + return false; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exclusion/DisjunctExclusionStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/DisjunctExclusionStrategy.php new file mode 100644 index 0000000..81b246f --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/DisjunctExclusionStrategy.php @@ -0,0 +1,93 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exclusion; + +use JMS\Serializer\Context; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use PhpCollection\Sequence; +use PhpCollection\SequenceInterface; + +/** + * Disjunct Exclusion Strategy. + * + * This strategy is short-circuiting and will skip a class, or property as soon as one of the delegates skips it. + * + * @author Johannes M. Schmitt + */ +class DisjunctExclusionStrategy implements ExclusionStrategyInterface +{ + /** @var \PhpCollection\SequenceInterface */ + private $delegates; + + /** + * @param ExclusionStrategyInterface[]|SequenceInterface $delegates + */ + public function __construct($delegates) + { + if (!$delegates instanceof SequenceInterface) { + $delegates = new Sequence($delegates); + } + + $this->delegates = $delegates; + } + + public function addStrategy(ExclusionStrategyInterface $strategy) + { + $this->delegates->add($strategy); + } + + /** + * Whether the class should be skipped. + * + * @param ClassMetadata $metadata + * + * @return boolean + */ + public function shouldSkipClass(ClassMetadata $metadata, Context $context) + { + foreach ($this->delegates as $delegate) { + /** @var $delegate ExclusionStrategyInterface */ + if ($delegate->shouldSkipClass($metadata, $context)) { + return true; + } + } + + return false; + } + + /** + * Whether the property should be skipped. + * + * @param PropertyMetadata $property + * + * @return boolean + */ + public function shouldSkipProperty(PropertyMetadata $property, Context $context) + { + foreach ($this->delegates as $delegate) { + /** @var $delegate ExclusionStrategyInterface */ + if ($delegate->shouldSkipProperty($property, $context)) { + return true; + } + } + + return false; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exclusion/ExclusionStrategyInterface.php b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/ExclusionStrategyInterface.php new file mode 100644 index 0000000..0c6760f --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/ExclusionStrategyInterface.php @@ -0,0 +1,49 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exclusion; + +use JMS\Serializer\Context; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * Interface for exclusion strategies. + * + * @author Johannes M. Schmitt + */ +interface ExclusionStrategyInterface +{ + /** + * Whether the class should be skipped. + * + * @param ClassMetadata $metadata + * + * @return boolean + */ + public function shouldSkipClass(ClassMetadata $metadata, Context $context); + + /** + * Whether the property should be skipped. + * + * @param PropertyMetadata $property + * + * @return boolean + */ + public function shouldSkipProperty(PropertyMetadata $property, Context $context); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exclusion/ExpressionLanguageExclusionStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/ExpressionLanguageExclusionStrategy.php new file mode 100644 index 0000000..18050c4 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/ExpressionLanguageExclusionStrategy.php @@ -0,0 +1,67 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exclusion; + +use JMS\Serializer\Context; +use JMS\Serializer\Expression\ExpressionEvaluatorInterface; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\SerializationContext; + +/** + * Exposes an exclusion strategy based on the Symfony's expression language. + * This is not a standard exclusion strategy and can not be used in user applications. + * + * @internal + * + * @author Asmir Mustafic + */ +class ExpressionLanguageExclusionStrategy +{ + /** + * @var ExpressionEvaluatorInterface + */ + private $expressionEvaluator; + + public function __construct(ExpressionEvaluatorInterface $expressionEvaluator) + { + $this->expressionEvaluator = $expressionEvaluator; + } + + /** + * {@inheritDoc} + */ + public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext) + { + if (null === $property->excludeIf) { + return false; + } + + $variables = [ + 'context' => $navigatorContext, + 'property_metadata' => $property, + ]; + if ($navigatorContext instanceof SerializationContext) { + $variables['object'] = $navigatorContext->getObject(); + } else { + $variables['object'] = null; + } + + return $this->expressionEvaluator->evaluate($property->excludeIf, $variables); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exclusion/GroupsExclusionStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/GroupsExclusionStrategy.php new file mode 100644 index 0000000..946c9c7 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/GroupsExclusionStrategy.php @@ -0,0 +1,92 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exclusion; + +use JMS\Serializer\Context; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; + +class GroupsExclusionStrategy implements ExclusionStrategyInterface +{ + const DEFAULT_GROUP = 'Default'; + + private $groups = array(); + + public function __construct(array $groups) + { + if (empty($groups)) { + $groups = array(self::DEFAULT_GROUP); + } + + $this->groups = $groups; + } + + /** + * {@inheritDoc} + */ + public function shouldSkipClass(ClassMetadata $metadata, Context $navigatorContext) + { + return false; + } + + /** + * {@inheritDoc} + */ + public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext) + { + $groups = $this->getGroupsFor($navigatorContext); + + if (!$property->groups) { + return !in_array(self::DEFAULT_GROUP, $groups); + } + + return $this->shouldSkipUsingGroups($property, $groups); + } + + private function shouldSkipUsingGroups(PropertyMetadata $property, $groups) + { + foreach ($property->groups as $group) { + if (in_array($group, $groups)) { + return false; + } + } + + return true; + } + + private function getGroupsFor(Context $navigatorContext) + { + $paths = $navigatorContext->getCurrentPath(); + + $groups = $this->groups; + foreach ($paths as $index => $path) { + if (!array_key_exists($path, $groups)) { + if ($index > 0) { + $groups = array(self::DEFAULT_GROUP); + } + + break; + } + + $groups = $groups[$path]; + } + + return $groups; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Exclusion/VersionExclusionStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/VersionExclusionStrategy.php new file mode 100644 index 0000000..471962d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Exclusion/VersionExclusionStrategy.php @@ -0,0 +1,57 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Exclusion; + +use JMS\Serializer\Context; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; + +class VersionExclusionStrategy implements ExclusionStrategyInterface +{ + private $version; + + public function __construct($version) + { + $this->version = $version; + } + + /** + * {@inheritDoc} + */ + public function shouldSkipClass(ClassMetadata $metadata, Context $navigatorContext) + { + return false; + } + + /** + * {@inheritDoc} + */ + public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext) + { + if ((null !== $version = $property->sinceVersion) && version_compare($this->version, $version, '<')) { + return true; + } + + if ((null !== $version = $property->untilVersion) && version_compare($this->version, $version, '>')) { + return true; + } + + return false; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluator.php b/vendor/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluator.php new file mode 100644 index 0000000..223cd3d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluator.php @@ -0,0 +1,79 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Expression; + +use Symfony\Component\ExpressionLanguage\ExpressionLanguage; + +/** + * @author Asmir Mustafic + */ +class ExpressionEvaluator implements ExpressionEvaluatorInterface +{ + + /** + * @var ExpressionLanguage + */ + private $expressionLanguage; + + /** + * @var array + */ + private $context = array(); + + /** + * @var array + */ + private $cache = array(); + + public function __construct(ExpressionLanguage $expressionLanguage, array $context = array(), array $cache = array()) + { + $this->expressionLanguage = $expressionLanguage; + $this->context = $context; + $this->cache = $cache; + } + + /** + * @param string $name + * @param mixed $value + */ + public function setContextVariable($name, $value) + { + $this->context[$name] = $value; + } + + /** + * @param string $expression + * @param array $data + * @return mixed + */ + public function evaluate($expression, array $data = array()) + { + if (!is_string($expression)) { + return $expression; + } + + $context = $data + $this->context; + + if (!array_key_exists($expression, $this->cache)) { + $this->cache[$expression] = $this->expressionLanguage->parse($expression, array_keys($context)); + } + + return $this->expressionLanguage->evaluate($this->cache[$expression], $context); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluatorInterface.php b/vendor/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluatorInterface.php new file mode 100644 index 0000000..9d1be23 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Expression/ExpressionEvaluatorInterface.php @@ -0,0 +1,32 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Expression; + +/** + * @author Asmir Mustafic + */ +interface ExpressionEvaluatorInterface +{ + /** + * @param string $expression + * @param array $data + * @return mixed + */ + public function evaluate($expression, array $data = array()); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/GenericDeserializationVisitor.php b/vendor/jms/serializer/src/JMS/Serializer/GenericDeserializationVisitor.php new file mode 100644 index 0000000..803d3b2 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/GenericDeserializationVisitor.php @@ -0,0 +1,223 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Naming\AdvancedNamingStrategyInterface; +use JMS\Serializer\Naming\PropertyNamingStrategyInterface; + +/** + * Generic Deserialization Visitor. + * + * @author Johannes M. Schmitt + */ +abstract class GenericDeserializationVisitor extends AbstractVisitor +{ + private $navigator; + private $result; + private $objectStack; + private $currentObject; + + public function setNavigator(GraphNavigator $navigator) + { + $this->navigator = $navigator; + $this->result = null; + $this->objectStack = new \SplStack; + } + + public function getNavigator() + { + return $this->navigator; + } + + public function prepare($data) + { + return $this->decode($data); + } + + public function visitNull($data, array $type, Context $context) + { + return null; + } + + public function visitString($data, array $type, Context $context) + { + $data = (string)$data; + + if (null === $this->result) { + $this->result = $data; + } + + return $data; + } + + public function visitBoolean($data, array $type, Context $context) + { + $data = (Boolean)$data; + + if (null === $this->result) { + $this->result = $data; + } + + return $data; + } + + public function visitInteger($data, array $type, Context $context) + { + $data = (integer)$data; + + if (null === $this->result) { + $this->result = $data; + } + + return $data; + } + + public function visitDouble($data, array $type, Context $context) + { + $data = (double)$data; + + if (null === $this->result) { + $this->result = $data; + } + + return $data; + } + + public function visitArray($data, array $type, Context $context) + { + if (!is_array($data)) { + throw new RuntimeException(sprintf('Expected array, but got %s: %s', gettype($data), json_encode($data))); + } + + // If no further parameters were given, keys/values are just passed as is. + if (!$type['params']) { + if (null === $this->result) { + $this->result = $data; + } + + return $data; + } + + switch (count($type['params'])) { + case 1: // Array is a list. + $listType = $type['params'][0]; + + $result = array(); + if (null === $this->result) { + $this->result = &$result; + } + + foreach ($data as $v) { + $result[] = $this->navigator->accept($v, $listType, $context); + } + + return $result; + + case 2: // Array is a map. + list($keyType, $entryType) = $type['params']; + + $result = array(); + if (null === $this->result) { + $this->result = &$result; + } + + foreach ($data as $k => $v) { + $result[$this->navigator->accept($k, $keyType, $context)] = $this->navigator->accept($v, $entryType, $context); + } + + return $result; + + default: + throw new RuntimeException(sprintf('Array type cannot have more than 2 parameters, but got %s.', json_encode($type['params']))); + } + } + + public function startVisitingObject(ClassMetadata $metadata, $object, array $type, Context $context) + { + $this->setCurrentObject($object); + + if (null === $this->result) { + $this->result = $this->currentObject; + } + } + + public function visitProperty(PropertyMetadata $metadata, $data, Context $context) + { + if ($this->namingStrategy instanceof AdvancedNamingStrategyInterface) { + $name = $this->namingStrategy->getPropertyName($metadata, $context); + } else { + $name = $this->namingStrategy->translateName($metadata); + } + + if (null === $data) { + return; + } + + if (!is_array($data)) { + throw new RuntimeException(sprintf('Invalid data "%s"(%s), expected "%s".', $data, $metadata->type['name'], $metadata->reflection->class)); + } + + if (!array_key_exists($name, $data)) { + return; + } + + if (!$metadata->type) { + throw new RuntimeException(sprintf('You must define a type for %s::$%s.', $metadata->reflection->class, $metadata->name)); + } + + $v = $data[$name] !== null ? $this->navigator->accept($data[$name], $metadata->type, $context) : null; + + $this->accessor->setValue($this->currentObject, $v, $metadata); + + } + + public function endVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + $obj = $this->currentObject; + $this->revertCurrentObject(); + + return $obj; + } + + public function getResult() + { + return $this->result; + } + + public function setCurrentObject($object) + { + $this->objectStack->push($this->currentObject); + $this->currentObject = $object; + } + + public function getCurrentObject() + { + return $this->currentObject; + } + + public function revertCurrentObject() + { + return $this->currentObject = $this->objectStack->pop(); + } + + abstract protected function decode($str); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/GenericSerializationVisitor.php b/vendor/jms/serializer/src/JMS/Serializer/GenericSerializationVisitor.php new file mode 100644 index 0000000..e6db77f --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/GenericSerializationVisitor.php @@ -0,0 +1,227 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Exception\InvalidArgumentException; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Naming\AdvancedNamingStrategyInterface; + +/** + * @deprecated + */ +abstract class GenericSerializationVisitor extends AbstractVisitor +{ + private $navigator; + private $root; + private $dataStack; + private $data; + + public function setNavigator(GraphNavigator $navigator) + { + $this->navigator = $navigator; + $this->root = null; + $this->dataStack = new \SplStack; + } + + /** + * @return GraphNavigator + */ + public function getNavigator() + { + return $this->navigator; + } + + public function visitNull($data, array $type, Context $context) + { + return null; + } + + public function visitString($data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = $data; + } + + return (string)$data; + } + + public function visitBoolean($data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = $data; + } + + return (boolean)$data; + } + + public function visitInteger($data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = $data; + } + + return (int)$data; + } + + public function visitDouble($data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = $data; + } + + return (float)$data; + } + + /** + * @param array $data + * @param array $type + */ + public function visitArray($data, array $type, Context $context) + { + $this->dataStack->push($data); + + $isHash = isset($type['params'][1]); + + if (null === $this->root) { + $this->root = $isHash ? new \ArrayObject() : array(); + $rs = &$this->root; + } else { + $rs = $isHash ? new \ArrayObject() : array(); + } + + $isList = isset($type['params'][0]) && !isset($type['params'][1]); + + foreach ($data as $k => $v) { + $v = $this->navigator->accept($v, $this->getElementType($type), $context); + + if (null === $v && $context->shouldSerializeNull() !== true) { + continue; + } + + if ($isList) { + $rs[] = $v; + } else { + $rs[$k] = $v; + } + } + + $this->dataStack->pop(); + + return $rs; + } + + public function startVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = new \stdClass; + } + + $this->dataStack->push($this->data); + $this->data = array(); + } + + public function endVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + $rs = $this->data; + $this->data = $this->dataStack->pop(); + + if ($this->root instanceof \stdClass && 0 === $this->dataStack->count()) { + $this->root = $rs; + } + + return $rs; + } + + public function visitProperty(PropertyMetadata $metadata, $data, Context $context) + { + $v = $this->accessor->getValue($data, $metadata); + + $v = $this->navigator->accept($v, $metadata->type, $context); + if (null === $v && $context->shouldSerializeNull() !== true) { + return; + } + + if ($this->namingStrategy instanceof AdvancedNamingStrategyInterface) { + $k = $this->namingStrategy->getPropertyName($metadata, $context); + } else { + $k = $this->namingStrategy->translateName($metadata); + } + + if ($metadata->inline) { + if (is_array($v)) { + $this->data = array_merge($this->data, $v); + } + } else { + $this->data[$k] = $v; + } + } + + /** + * Allows you to add additional data to the current object/root element. + * @deprecated use setData instead + * @param string $key + * @param integer|float|boolean|string|array|null $value This value must either be a regular scalar, or an array. + * It must not contain any objects anymore. + */ + public function addData($key, $value) + { + if (isset($this->data[$key])) { + throw new InvalidArgumentException(sprintf('There is already data for "%s".', $key)); + } + + $this->data[$key] = $value; + } + + /** + * Checks if some data key exists. + * + * @param string $key + * @return boolean + */ + public function hasData($key) + { + return isset($this->data[$key]); + } + + /** + * Allows you to replace existing data on the current object/root element. + * + * @param string $key + * @param integer|float|boolean|string|array|null $value This value must either be a regular scalar, or an array. + * It must not contain any objects anymore. + */ + public function setData($key, $value) + { + $this->data[$key] = $value; + } + + public function getRoot() + { + return $this->root; + } + + /** + * @param array|\ArrayObject $data the passed data must be understood by whatever encoding function is applied later. + */ + public function setRoot($data) + { + $this->root = $data; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php b/vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php new file mode 100644 index 0000000..08503bd --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php @@ -0,0 +1,360 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Construction\ObjectConstructorInterface; +use JMS\Serializer\EventDispatcher\EventDispatcherInterface; +use JMS\Serializer\EventDispatcher\ObjectEvent; +use JMS\Serializer\EventDispatcher\PreDeserializeEvent; +use JMS\Serializer\EventDispatcher\PreSerializeEvent; +use JMS\Serializer\Exception\ExpressionLanguageRequiredException; +use JMS\Serializer\Exception\InvalidArgumentException; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\Exclusion\ExpressionLanguageExclusionStrategy; +use JMS\Serializer\Expression\ExpressionEvaluatorInterface; +use JMS\Serializer\Handler\HandlerRegistryInterface; +use JMS\Serializer\Metadata\ClassMetadata; +use Metadata\MetadataFactoryInterface; + +/** + * Handles traversal along the object graph. + * + * This class handles traversal along the graph, and calls different methods + * on visitors, or custom handlers to process its nodes. + * + * @author Johannes M. Schmitt + */ +final class GraphNavigator +{ + const DIRECTION_SERIALIZATION = 1; + const DIRECTION_DESERIALIZATION = 2; + + /** + * @var ExpressionLanguageExclusionStrategy + */ + private $expressionExclusionStrategy; + + private $dispatcher; + private $metadataFactory; + private $handlerRegistry; + private $objectConstructor; + + /** + * Parses a direction string to one of the direction constants. + * + * @param string $dirStr + * + * @return integer + */ + public static function parseDirection($dirStr) + { + switch (strtolower($dirStr)) { + case 'serialization': + return self::DIRECTION_SERIALIZATION; + + case 'deserialization': + return self::DIRECTION_DESERIALIZATION; + + default: + throw new InvalidArgumentException(sprintf('The direction "%s" does not exist.', $dirStr)); + } + } + + public function __construct( + MetadataFactoryInterface $metadataFactory, + HandlerRegistryInterface $handlerRegistry, + ObjectConstructorInterface $objectConstructor, + EventDispatcherInterface $dispatcher = null, + ExpressionEvaluatorInterface $expressionEvaluator = null + ) + { + $this->dispatcher = $dispatcher; + $this->metadataFactory = $metadataFactory; + $this->handlerRegistry = $handlerRegistry; + $this->objectConstructor = $objectConstructor; + if ($expressionEvaluator) { + $this->expressionExclusionStrategy = new ExpressionLanguageExclusionStrategy($expressionEvaluator); + } + } + + /** + * Called for each node of the graph that is being traversed. + * + * @param mixed $data the data depends on the direction, and type of visitor + * @param null|array $type array has the format ["name" => string, "params" => array] + * @param Context $context + * @return mixed the return value depends on the direction, and type of visitor + */ + public function accept($data, array $type = null, Context $context) + { + $visitor = $context->getVisitor(); + + // If the type was not given, we infer the most specific type from the + // input data in serialization mode. + if (null === $type) { + if ($context instanceof DeserializationContext) { + throw new RuntimeException('The type must be given for all properties when deserializing.'); + } + + $typeName = gettype($data); + if ('object' === $typeName) { + $typeName = get_class($data); + } + + $type = array('name' => $typeName, 'params' => array()); + } + // If the data is null, we have to force the type to null regardless of the input in order to + // guarantee correct handling of null values, and not have any internal auto-casting behavior. + else if ($context instanceof SerializationContext && null === $data) { + $type = array('name' => 'NULL', 'params' => array()); + } + // Sometimes data can convey null but is not of a null type. + // Visitors can have the power to add this custom null evaluation + if ($visitor instanceof NullAwareVisitorInterface && $visitor->isNull($data) === true) { + $type = array('name' => 'NULL', 'params' => array()); + } + + switch ($type['name']) { + case 'NULL': + return $visitor->visitNull($data, $type, $context); + + case 'string': + return $visitor->visitString($data, $type, $context); + + case 'int': + case 'integer': + return $visitor->visitInteger($data, $type, $context); + + case 'bool': + case 'boolean': + return $visitor->visitBoolean($data, $type, $context); + + case 'double': + case 'float': + return $visitor->visitDouble($data, $type, $context); + + case 'array': + return $visitor->visitArray($data, $type, $context); + + case 'resource': + $msg = 'Resources are not supported in serialized data.'; + if ($context instanceof SerializationContext && null !== $path = $context->getPath()) { + $msg .= ' Path: ' . $path; + } + + throw new RuntimeException($msg); + + default: + // TODO: The rest of this method needs some refactoring. + if ($context instanceof SerializationContext) { + if (null !== $data) { + if ($context->isVisiting($data)) { + return null; + } + $context->startVisiting($data); + } + + // If we're serializing a polymorphic type, then we'll be interested in the + // metadata for the actual type of the object, not the base class. + if (class_exists($type['name'], false) || interface_exists($type['name'], false)) { + if (is_subclass_of($data, $type['name'], false)) { + $type = array('name' => get_class($data), 'params' => array()); + } + } + } elseif ($context instanceof DeserializationContext) { + $context->increaseDepth(); + } + + // Trigger pre-serialization callbacks, and listeners if they exist. + // Dispatch pre-serialization event before handling data to have ability change type in listener + if ($context instanceof SerializationContext) { + if (null !== $this->dispatcher && $this->dispatcher->hasListeners('serializer.pre_serialize', $type['name'], $context->getFormat())) { + $this->dispatcher->dispatch('serializer.pre_serialize', $type['name'], $context->getFormat(), $event = new PreSerializeEvent($context, $data, $type)); + $type = $event->getType(); + } + } elseif ($context instanceof DeserializationContext) { + if (null !== $this->dispatcher && $this->dispatcher->hasListeners('serializer.pre_deserialize', $type['name'], $context->getFormat())) { + $this->dispatcher->dispatch('serializer.pre_deserialize', $type['name'], $context->getFormat(), $event = new PreDeserializeEvent($context, $data, $type)); + $type = $event->getType(); + $data = $event->getData(); + } + } + + // First, try whether a custom handler exists for the given type. This is done + // before loading metadata because the type name might not be a class, but + // could also simply be an artifical type. + if (null !== $handler = $this->handlerRegistry->getHandler($context->getDirection(), $type['name'], $context->getFormat())) { + $rs = call_user_func($handler, $visitor, $data, $type, $context); + $this->leaveScope($context, $data); + + return $rs; + } + + $exclusionStrategy = $context->getExclusionStrategy(); + + /** @var $metadata ClassMetadata */ + $metadata = $this->metadataFactory->getMetadataForClass($type['name']); + + if ($metadata->usingExpression && !$this->expressionExclusionStrategy) { + throw new ExpressionLanguageRequiredException("To use conditional exclude/expose in {$metadata->name} you must configure the expression language."); + } + + if ($context instanceof DeserializationContext && !empty($metadata->discriminatorMap) && $type['name'] === $metadata->discriminatorBaseClass) { + $metadata = $this->resolveMetadata($data, $metadata); + } + + if (null !== $exclusionStrategy && $exclusionStrategy->shouldSkipClass($metadata, $context)) { + $this->leaveScope($context, $data); + + return null; + } + + $context->pushClassMetadata($metadata); + + if ($context instanceof SerializationContext) { + foreach ($metadata->preSerializeMethods as $method) { + $method->invoke($data); + } + } + + $object = $data; + if ($context instanceof DeserializationContext) { + $object = $this->objectConstructor->construct($visitor, $metadata, $data, $type, $context); + } + + if (isset($metadata->handlerCallbacks[$context->getDirection()][$context->getFormat()])) { + $rs = $object->{$metadata->handlerCallbacks[$context->getDirection()][$context->getFormat()]}( + $visitor, + $context instanceof SerializationContext ? null : $data, + $context + ); + $this->afterVisitingObject($metadata, $object, $type, $context); + + return $context instanceof SerializationContext ? $rs : $object; + } + + $visitor->startVisitingObject($metadata, $object, $type, $context); + foreach ($metadata->propertyMetadata as $propertyMetadata) { + if (null !== $exclusionStrategy && $exclusionStrategy->shouldSkipProperty($propertyMetadata, $context)) { + continue; + } + + if (null !== $this->expressionExclusionStrategy && $this->expressionExclusionStrategy->shouldSkipProperty($propertyMetadata, $context)) { + continue; + } + + if ($context instanceof DeserializationContext && $propertyMetadata->readOnly) { + continue; + } + + $context->pushPropertyMetadata($propertyMetadata); + $visitor->visitProperty($propertyMetadata, $data, $context); + $context->popPropertyMetadata(); + } + + if ($context instanceof SerializationContext) { + $this->afterVisitingObject($metadata, $data, $type, $context); + + return $visitor->endVisitingObject($metadata, $data, $type, $context); + } + + $rs = $visitor->endVisitingObject($metadata, $data, $type, $context); + $this->afterVisitingObject($metadata, $rs, $type, $context); + + return $rs; + } + } + + private function resolveMetadata($data, ClassMetadata $metadata) + { + switch (true) { + case is_array($data) && isset($data[$metadata->discriminatorFieldName]): + $typeValue = (string)$data[$metadata->discriminatorFieldName]; + break; + + // Check XML attribute for discriminatorFieldName + case is_object($data) && $metadata->xmlDiscriminatorAttribute && isset($data[$metadata->discriminatorFieldName]): + $typeValue = (string)$data[$metadata->discriminatorFieldName]; + break; + + // Check XML element with namespace for discriminatorFieldName + case is_object($data) && !$metadata->xmlDiscriminatorAttribute && null !== $metadata->xmlDiscriminatorNamespace && isset($data->children($metadata->xmlDiscriminatorNamespace)->{$metadata->discriminatorFieldName}): + $typeValue = (string)$data->children($metadata->xmlDiscriminatorNamespace)->{$metadata->discriminatorFieldName}; + break; + + // Check XML element for discriminatorFieldName + case is_object($data) && isset($data->{$metadata->discriminatorFieldName}): + $typeValue = (string)$data->{$metadata->discriminatorFieldName}; + break; + + default: + throw new \LogicException(sprintf( + 'The discriminator field name "%s" for base-class "%s" was not found in input data.', + $metadata->discriminatorFieldName, + $metadata->name + )); + } + + if (!isset($metadata->discriminatorMap[$typeValue])) { + throw new \LogicException(sprintf( + 'The type value "%s" does not exist in the discriminator map of class "%s". Available types: %s', + $typeValue, + $metadata->name, + implode(', ', array_keys($metadata->discriminatorMap)) + )); + } + + return $this->metadataFactory->getMetadataForClass($metadata->discriminatorMap[$typeValue]); + } + + private function leaveScope(Context $context, $data) + { + if ($context instanceof SerializationContext) { + $context->stopVisiting($data); + } elseif ($context instanceof DeserializationContext) { + $context->decreaseDepth(); + } + } + + private function afterVisitingObject(ClassMetadata $metadata, $object, array $type, Context $context) + { + $this->leaveScope($context, $object); + $context->popClassMetadata(); + + if ($context instanceof SerializationContext) { + foreach ($metadata->postSerializeMethods as $method) { + $method->invoke($object); + } + + if (null !== $this->dispatcher && $this->dispatcher->hasListeners('serializer.post_serialize', $metadata->name, $context->getFormat())) { + $this->dispatcher->dispatch('serializer.post_serialize', $metadata->name, $context->getFormat(), new ObjectEvent($context, $object, $type)); + } + + return; + } + + foreach ($metadata->postDeserializeMethods as $method) { + $method->invoke($object); + } + + if (null !== $this->dispatcher && $this->dispatcher->hasListeners('serializer.post_deserialize', $metadata->name, $context->getFormat())) { + $this->dispatcher->dispatch('serializer.post_deserialize', $metadata->name, $context->getFormat(), new ObjectEvent($context, $object, $type)); + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/ArrayCollectionHandler.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/ArrayCollectionHandler.php new file mode 100644 index 0000000..c938803 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/ArrayCollectionHandler.php @@ -0,0 +1,94 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use JMS\Serializer\Context; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\VisitorInterface; + +class ArrayCollectionHandler implements SubscribingHandlerInterface +{ + /** + * @var bool + */ + private $initializeExcluded = true; + + public function __construct($initializeExcluded = true) + { + $this->initializeExcluded = $initializeExcluded; + } + + public static function getSubscribingMethods() + { + $methods = array(); + $formats = array('json', 'xml', 'yml'); + $collectionTypes = array( + 'ArrayCollection', + 'Doctrine\Common\Collections\ArrayCollection', + 'Doctrine\ORM\PersistentCollection', + 'Doctrine\ODM\MongoDB\PersistentCollection', + 'Doctrine\ODM\PHPCR\PersistentCollection', + ); + + foreach ($collectionTypes as $type) { + foreach ($formats as $format) { + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'type' => $type, + 'format' => $format, + 'method' => 'serializeCollection', + ); + + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_DESERIALIZATION, + 'type' => $type, + 'format' => $format, + 'method' => 'deserializeCollection', + ); + } + } + + return $methods; + } + + public function serializeCollection(VisitorInterface $visitor, Collection $collection, array $type, Context $context) + { + // We change the base type, and pass through possible parameters. + $type['name'] = 'array'; + + if ($this->initializeExcluded === false) { + $exclusionStrategy = $context->getExclusionStrategy(); + if ($exclusionStrategy !== null && $exclusionStrategy->shouldSkipClass($context->getMetadataFactory()->getMetadataForClass(get_class($collection)), $context)) { + return $visitor->visitArray([], $type, $context); + } + } + + return $visitor->visitArray($collection->toArray(), $type, $context); + } + + public function deserializeCollection(VisitorInterface $visitor, $data, array $type, Context $context) + { + // See above. + $type['name'] = 'array'; + + return new ArrayCollection($visitor->visitArray($data, $type, $context)); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/ConstraintViolationHandler.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/ConstraintViolationHandler.php new file mode 100644 index 0000000..c19e50e --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/ConstraintViolationHandler.php @@ -0,0 +1,111 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +use JMS\Serializer\Context; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\JsonSerializationVisitor; +use JMS\Serializer\XmlSerializationVisitor; +use JMS\Serializer\YamlSerializationVisitor; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; + +class ConstraintViolationHandler implements SubscribingHandlerInterface +{ + public static function getSubscribingMethods() + { + $methods = array(); + $formats = array('xml', 'json', 'yml'); + $types = array('Symfony\Component\Validator\ConstraintViolationList' => 'serializeList', 'Symfony\Component\Validator\ConstraintViolation' => 'serializeViolation'); + + foreach ($types as $type => $method) { + foreach ($formats as $format) { + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'type' => $type, + 'format' => $format, + 'method' => $method . 'To' . $format, + ); + } + } + + return $methods; + } + + public function serializeListToXml(XmlSerializationVisitor $visitor, ConstraintViolationList $list, array $type) + { + if (null === $visitor->document) { + $visitor->document = $visitor->createDocument(); + } + + foreach ($list as $violation) { + $this->serializeViolationToXml($visitor, $violation); + } + } + + public function serializeListToJson(JsonSerializationVisitor $visitor, ConstraintViolationList $list, array $type, Context $context) + { + return $visitor->visitArray(iterator_to_array($list), $type, $context); + } + + public function serializeListToYml(YamlSerializationVisitor $visitor, ConstraintViolationList $list, array $type, Context $context) + { + return $visitor->visitArray(iterator_to_array($list), $type, $context); + } + + public function serializeViolationToXml(XmlSerializationVisitor $visitor, ConstraintViolation $violation, array $type = null) + { + if (null === $visitor->document) { + $visitor->document = $visitor->createDocument(null, null, false); + $visitor->document->appendChild($violationNode = $visitor->document->createElement('violation')); + $visitor->setCurrentNode($violationNode); + } else { + $visitor->getCurrentNode()->appendChild( + $violationNode = $visitor->document->createElement('violation') + ); + } + + $violationNode->setAttribute('property_path', $violation->getPropertyPath()); + $violationNode->appendChild($messageNode = $visitor->document->createElement('message')); + + $messageNode->appendChild($visitor->document->createCDATASection($violation->getMessage())); + } + + public function serializeViolationToJson(JsonSerializationVisitor $visitor, ConstraintViolation $violation, array $type = null) + { + $data = array( + 'property_path' => $violation->getPropertyPath(), + 'message' => $violation->getMessage() + ); + + if (null === $visitor->getRoot()) { + $visitor->setRoot($data); + } + + return $data; + } + + public function serializeViolationToYml(YamlSerializationVisitor $visitor, ConstraintViolation $violation, array $type = null) + { + return array( + 'property_path' => $violation->getPropertyPath(), + 'message' => $violation->getMessage(), + ); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/DateHandler.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/DateHandler.php new file mode 100644 index 0000000..c79c0e5 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/DateHandler.php @@ -0,0 +1,276 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +use JMS\Serializer\Context; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\JsonDeserializationVisitor; +use JMS\Serializer\VisitorInterface; +use JMS\Serializer\XmlDeserializationVisitor; +use JMS\Serializer\XmlSerializationVisitor; + +class DateHandler implements SubscribingHandlerInterface +{ + private $defaultFormat; + private $defaultTimezone; + private $xmlCData; + + public static function getSubscribingMethods() + { + $methods = array(); + $deserializationTypes = array('DateTime', 'DateTimeImmutable', 'DateInterval'); + $serialisationTypes = array('DateTime', 'DateTimeImmutable', 'DateInterval'); + + foreach (array('json', 'xml', 'yml') as $format) { + + foreach ($deserializationTypes as $type) { + $methods[] = [ + 'type' => $type, + 'direction' => GraphNavigator::DIRECTION_DESERIALIZATION, + 'format' => $format, + ]; + } + + foreach ($serialisationTypes as $type) { + $methods[] = array( + 'type' => $type, + 'format' => $format, + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'method' => 'serialize' . $type, + ); + } + } + + return $methods; + } + + public function __construct($defaultFormat = \DateTime::ISO8601, $defaultTimezone = 'UTC', $xmlCData = true) + { + $this->defaultFormat = $defaultFormat; + $this->defaultTimezone = new \DateTimeZone($defaultTimezone); + $this->xmlCData = $xmlCData; + } + + private function serializeDateTimeInterface( + VisitorInterface $visitor, + \DateTimeInterface $date, + array $type, + Context $context + ) + { + if ($visitor instanceof XmlSerializationVisitor && false === $this->xmlCData) { + return $visitor->visitSimpleString($date->format($this->getFormat($type)), $type, $context); + } + + $format = $this->getFormat($type); + if ('U' === $format) { + return $visitor->visitInteger($date->format($format), $type, $context); + } + + return $visitor->visitString($date->format($this->getFormat($type)), $type, $context); + } + + public function serializeDateTime(VisitorInterface $visitor, \DateTime $date, array $type, Context $context) + { + return $this->serializeDateTimeInterface($visitor, $date, $type, $context); + } + + public function serializeDateTimeImmutable( + VisitorInterface $visitor, + \DateTimeImmutable $date, + array $type, + Context $context + ) + { + return $this->serializeDateTimeInterface($visitor, $date, $type, $context); + } + + public function serializeDateInterval(VisitorInterface $visitor, \DateInterval $date, array $type, Context $context) + { + $iso8601DateIntervalString = $this->format($date); + + if ($visitor instanceof XmlSerializationVisitor && false === $this->xmlCData) { + return $visitor->visitSimpleString($iso8601DateIntervalString, $type, $context); + } + + return $visitor->visitString($iso8601DateIntervalString, $type, $context); + } + + private function isDataXmlNull($data) + { + $attributes = $data->attributes('xsi', true); + return isset($attributes['nil'][0]) && (string)$attributes['nil'][0] === 'true'; + } + + public function deserializeDateTimeFromXml(XmlDeserializationVisitor $visitor, $data, array $type) + { + if ($this->isDataXmlNull($data)) { + return null; + } + + return $this->parseDateTime($data, $type); + } + + public function deserializeDateTimeImmutableFromXml(XmlDeserializationVisitor $visitor, $data, array $type) + { + if ($this->isDataXmlNull($data)) { + return null; + } + + return $this->parseDateTime($data, $type, true); + } + + public function deserializeDateIntervalFromXml(XmlDeserializationVisitor $visitor, $data, array $type) + { + if ($this->isDataXmlNull($data)) { + return null; + } + + return $this->parseDateInterval($data); + } + + public function deserializeDateTimeFromJson(JsonDeserializationVisitor $visitor, $data, array $type) + { + if (null === $data) { + return null; + } + + return $this->parseDateTime($data, $type); + } + + public function deserializeDateTimeImmutableFromJson(JsonDeserializationVisitor $visitor, $data, array $type) + { + if (null === $data) { + return null; + } + + return $this->parseDateTime($data, $type, true); + } + + public function deserializeDateIntervalFromJson(JsonDeserializationVisitor $visitor, $data, array $type) + { + if (null === $data) { + return null; + } + + return $this->parseDateInterval($data); + } + + private function parseDateTime($data, array $type, $immutable = false) + { + $timezone = !empty($type['params'][1]) ? new \DateTimeZone($type['params'][1]) : $this->defaultTimezone; + $format = $this->getDeserializationFormat($type); + + if ($immutable) { + $datetime = \DateTimeImmutable::createFromFormat($format, (string)$data, $timezone); + } else { + $datetime = \DateTime::createFromFormat($format, (string)$data, $timezone); + } + + if (false === $datetime) { + throw new RuntimeException(sprintf('Invalid datetime "%s", expected format %s.', $data, $format)); + } + + if ($format === 'U') { + $datetime = $datetime->setTimezone($timezone); + } + + return $datetime; + } + + private function parseDateInterval($data) + { + $dateInterval = null; + try { + $dateInterval = new \DateInterval($data); + } catch (\Exception $e) { + throw new RuntimeException(sprintf('Invalid dateinterval "%s", expected ISO 8601 format', $data), null, $e); + } + + return $dateInterval; + } + + /** + * @param array $type + * @return string + */ + private function getDeserializationFormat(array $type) + { + if (isset($type['params'][2])) { + return $type['params'][2]; + } + if (isset($type['params'][0])) { + return $type['params'][0]; + } + return $this->defaultFormat; + } + + /** + * @return string + * @param array $type + */ + private function getFormat(array $type) + { + return isset($type['params'][0]) ? $type['params'][0] : $this->defaultFormat; + } + + /** + * @param \DateInterval $dateInterval + * @return string + */ + public function format(\DateInterval $dateInterval) + { + $format = 'P'; + + if (0 < $dateInterval->y) { + $format .= $dateInterval->y . 'Y'; + } + + if (0 < $dateInterval->m) { + $format .= $dateInterval->m . 'M'; + } + + if (0 < $dateInterval->d) { + $format .= $dateInterval->d . 'D'; + } + + if (0 < $dateInterval->h || 0 < $dateInterval->i || 0 < $dateInterval->s) { + $format .= 'T'; + } + + if (0 < $dateInterval->h) { + $format .= $dateInterval->h . 'H'; + } + + if (0 < $dateInterval->i) { + $format .= $dateInterval->i . 'M'; + } + + if (0 < $dateInterval->s) { + $format .= $dateInterval->s . 'S'; + } + + if ($format === 'P') { + $format = 'P0DT0S'; + } + + return $format; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/FormErrorHandler.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/FormErrorHandler.php new file mode 100644 index 0000000..d0834eb --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/FormErrorHandler.php @@ -0,0 +1,167 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\JsonSerializationVisitor; +use JMS\Serializer\VisitorInterface; +use JMS\Serializer\XmlSerializationVisitor; +use JMS\Serializer\YamlSerializationVisitor; +use Symfony\Component\Form\Form; +use Symfony\Component\Form\FormError; +use Symfony\Component\Translation\TranslatorInterface; + +class FormErrorHandler implements SubscribingHandlerInterface +{ + private $translator; + + private $translationDomain; + + public static function getSubscribingMethods() + { + $methods = array(); + foreach (array('xml', 'json', 'yml') as $format) { + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'type' => 'Symfony\Component\Form\Form', + 'format' => $format, + ); + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'type' => 'Symfony\Component\Form\FormError', + 'format' => $format, + ); + } + + return $methods; + } + + public function __construct(TranslatorInterface $translator = null, $translationDomain = 'validators') + { + $this->translator = $translator; + $this->translationDomain = $translationDomain; + } + + public function serializeFormToXml(XmlSerializationVisitor $visitor, Form $form, array $type) + { + if (null === $visitor->document) { + $visitor->document = $visitor->createDocument(null, null, false); + $visitor->document->appendChild($formNode = $visitor->document->createElement('form')); + $visitor->setCurrentNode($formNode); + } else { + $visitor->getCurrentNode()->appendChild( + $formNode = $visitor->document->createElement('form') + ); + } + + $formNode->setAttribute('name', $form->getName()); + + $formNode->appendChild($errorsNode = $visitor->document->createElement('errors')); + foreach ($form->getErrors() as $error) { + $errorNode = $visitor->document->createElement('entry'); + $errorNode->appendChild($this->serializeFormErrorToXml($visitor, $error, array())); + $errorsNode->appendChild($errorNode); + } + + foreach ($form->all() as $child) { + if ($child instanceof Form) { + if (null !== $node = $this->serializeFormToXml($visitor, $child, array())) { + $formNode->appendChild($node); + } + } + } + + return $formNode; + } + + public function serializeFormToJson(JsonSerializationVisitor $visitor, Form $form, array $type) + { + return $this->convertFormToArray($visitor, $form); + } + + public function serializeFormToYml(YamlSerializationVisitor $visitor, Form $form, array $type) + { + return $this->convertFormToArray($visitor, $form); + } + + public function serializeFormErrorToXml(XmlSerializationVisitor $visitor, FormError $formError, array $type) + { + if (null === $visitor->document) { + $visitor->document = $visitor->createDocument(null, null, true); + } + + return $visitor->document->createCDATASection($this->getErrorMessage($formError)); + } + + public function serializeFormErrorToJson(JsonSerializationVisitor $visitor, FormError $formError, array $type) + { + return $this->getErrorMessage($formError); + } + + public function serializeFormErrorToYml(YamlSerializationVisitor $visitor, FormError $formError, array $type) + { + return $this->getErrorMessage($formError); + } + + private function getErrorMessage(FormError $error) + { + + if ($this->translator === null){ + return $error->getMessage(); + } + + if (null !== $error->getMessagePluralization()) { + return $this->translator->transChoice($error->getMessageTemplate(), $error->getMessagePluralization(), $error->getMessageParameters(), $this->translationDomain); + } + + return $this->translator->trans($error->getMessageTemplate(), $error->getMessageParameters(), $this->translationDomain); + } + + private function convertFormToArray(VisitorInterface $visitor, Form $data) + { + $isRoot = null === $visitor->getRoot(); + + $form = new \ArrayObject(); + $errors = array(); + foreach ($data->getErrors() as $error) { + $errors[] = $this->getErrorMessage($error); + } + + if ($errors) { + $form['errors'] = $errors; + } + + $children = array(); + foreach ($data->all() as $child) { + if ($child instanceof Form) { + $children[$child->getName()] = $this->convertFormToArray($visitor, $child); + } + } + + if ($children) { + $form['children'] = $children; + } + + if ($isRoot) { + $visitor->setRoot($form); + } + + return $form; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistry.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistry.php new file mode 100644 index 0000000..a8524e3 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistry.php @@ -0,0 +1,88 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +use JMS\Serializer\Exception\LogicException; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\GraphNavigator; + +class HandlerRegistry implements HandlerRegistryInterface +{ + protected $handlers; + + public static function getDefaultMethod($direction, $type, $format) + { + if (false !== $pos = strrpos($type, '\\')) { + $type = substr($type, $pos + 1); + } + + switch ($direction) { + case GraphNavigator::DIRECTION_DESERIALIZATION: + return 'deserialize' . $type . 'From' . $format; + + case GraphNavigator::DIRECTION_SERIALIZATION: + return 'serialize' . $type . 'To' . $format; + + default: + throw new LogicException(sprintf('The direction %s does not exist; see GraphNavigator::DIRECTION_??? constants.', json_encode($direction))); + } + } + + public function __construct(array $handlers = array()) + { + $this->handlers = $handlers; + } + + public function registerSubscribingHandler(SubscribingHandlerInterface $handler) + { + foreach ($handler->getSubscribingMethods() as $methodData) { + if (!isset($methodData['type'], $methodData['format'])) { + throw new RuntimeException(sprintf('For each subscribing method a "type" and "format" attribute must be given, but only got "%s" for %s.', implode('" and "', array_keys($methodData)), get_class($handler))); + } + + $directions = array(GraphNavigator::DIRECTION_DESERIALIZATION, GraphNavigator::DIRECTION_SERIALIZATION); + if (isset($methodData['direction'])) { + $directions = array($methodData['direction']); + } + + foreach ($directions as $direction) { + $method = isset($methodData['method']) ? $methodData['method'] : self::getDefaultMethod($direction, $methodData['type'], $methodData['format']); + $this->registerHandler($direction, $methodData['type'], $methodData['format'], array($handler, $method)); + } + } + } + + public function registerHandler($direction, $typeName, $format, $handler) + { + if (is_string($direction)) { + $direction = GraphNavigator::parseDirection($direction); + } + + $this->handlers[$direction][$typeName][$format] = $handler; + } + + public function getHandler($direction, $typeName, $format) + { + if (!isset($this->handlers[$direction][$typeName][$format])) { + return null; + } + + return $this->handlers[$direction][$typeName][$format]; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistryInterface.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistryInterface.php new file mode 100644 index 0000000..bd869f9 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/HandlerRegistryInterface.php @@ -0,0 +1,55 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +/** + * Handler Registry Interface. + * + * @author Johannes M. Schmitt + */ +interface HandlerRegistryInterface +{ + /** + * @param SubscribingHandlerInterface $handler + * + * @return void + */ + public function registerSubscribingHandler(SubscribingHandlerInterface $handler); + + /** + * Registers a handler in the registry. + * + * @param integer $direction one of the GraphNavigator::DIRECTION_??? constants + * @param string $typeName + * @param string $format + * @param callable $handler function(VisitorInterface, mixed $data, array $type): mixed + * + * @return void + */ + public function registerHandler($direction, $typeName, $format, $handler); + + /** + * @param integer $direction one of the GraphNavigator::DIRECTION_??? constants + * @param string $typeName + * @param string $format + * + * @return callable|null + */ + public function getHandler($direction, $typeName, $format); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/LazyHandlerRegistry.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/LazyHandlerRegistry.php new file mode 100644 index 0000000..d2be0f3 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/LazyHandlerRegistry.php @@ -0,0 +1,62 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +use Psr\Container\ContainerInterface as PsrContainerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; + +class LazyHandlerRegistry extends HandlerRegistry +{ + private $container; + private $initializedHandlers = array(); + + public function __construct($container, array $handlers = array()) + { + if (!$container instanceof PsrContainerInterface && !$container instanceof ContainerInterface) { + throw new \InvalidArgumentException(sprintf('The container must be an instance of %s or %s (%s given).', PsrContainerInterface::class, ContainerInterface::class, is_object($container) ? get_class($container) : gettype($container))); + } + + parent::__construct($handlers); + $this->container = $container; + } + + public function registerHandler($direction, $typeName, $format, $handler) + { + parent::registerHandler($direction, $typeName, $format, $handler); + unset($this->initializedHandlers[$direction][$typeName][$format]); + } + + public function getHandler($direction, $typeName, $format) + { + if (isset($this->initializedHandlers[$direction][$typeName][$format])) { + return $this->initializedHandlers[$direction][$typeName][$format]; + } + + if (!isset($this->handlers[$direction][$typeName][$format])) { + return null; + } + + $handler = $this->handlers[$direction][$typeName][$format]; + if (is_array($handler) && is_string($handler[0]) && $this->container->has($handler[0])) { + $handler[0] = $this->container->get($handler[0]); + } + + return $this->initializedHandlers[$direction][$typeName][$format] = $handler; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/PhpCollectionHandler.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/PhpCollectionHandler.php new file mode 100644 index 0000000..dbe6c41 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/PhpCollectionHandler.php @@ -0,0 +1,88 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +use JMS\Serializer\Context; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\VisitorInterface; +use PhpCollection\Map; +use PhpCollection\Sequence; + +class PhpCollectionHandler implements SubscribingHandlerInterface +{ + public static function getSubscribingMethods() + { + $methods = array(); + $formats = array('json', 'xml', 'yml'); + $collectionTypes = array( + 'PhpCollection\Sequence' => 'Sequence', + 'PhpCollection\Map' => 'Map', + ); + + foreach ($collectionTypes as $type => $shortName) { + foreach ($formats as $format) { + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'type' => $type, + 'format' => $format, + 'method' => 'serialize' . $shortName, + ); + + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_DESERIALIZATION, + 'type' => $type, + 'format' => $format, + 'method' => 'deserialize' . $shortName, + ); + } + } + + return $methods; + } + + public function serializeMap(VisitorInterface $visitor, Map $map, array $type, Context $context) + { + $type['name'] = 'array'; + + return $visitor->visitArray(iterator_to_array($map), $type, $context); + } + + public function deserializeMap(VisitorInterface $visitor, $data, array $type, Context $context) + { + $type['name'] = 'array'; + + return new Map($visitor->visitArray($data, $type, $context)); + } + + public function serializeSequence(VisitorInterface $visitor, Sequence $sequence, array $type, Context $context) + { + // We change the base type, and pass through possible parameters. + $type['name'] = 'array'; + + return $visitor->visitArray($sequence->all(), $type, $context); + } + + public function deserializeSequence(VisitorInterface $visitor, $data, array $type, Context $context) + { + // See above. + $type['name'] = 'array'; + + return new Sequence($visitor->visitArray($data, $type, $context)); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/PropelCollectionHandler.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/PropelCollectionHandler.php new file mode 100644 index 0000000..f7cf3ef --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/PropelCollectionHandler.php @@ -0,0 +1,79 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +use JMS\Serializer\Context; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\VisitorInterface; +use PropelCollection; + +class PropelCollectionHandler implements SubscribingHandlerInterface +{ + public static function getSubscribingMethods() + { + $methods = array(); + $formats = array('json', 'xml', 'yml'); + //Note: issue when handling inheritance + $collectionTypes = array( + 'PropelCollection', + 'PropelObjectCollection', + 'PropelArrayCollection', + 'PropelOnDemandCollection' + ); + + foreach ($collectionTypes as $type) { + foreach ($formats as $format) { + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'type' => $type, + 'format' => $format, + 'method' => 'serializeCollection', + ); + + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_DESERIALIZATION, + 'type' => $type, + 'format' => $format, + 'method' => 'deserializeCollection', + ); + } + } + + return $methods; + } + + public function serializeCollection(VisitorInterface $visitor, PropelCollection $collection, array $type, Context $context) + { + // We change the base type, and pass through possible parameters. + $type['name'] = 'array'; + + return $visitor->visitArray($collection->getData(), $type, $context); + } + + public function deserializeCollection(VisitorInterface $visitor, $data, array $type, Context $context) + { + // See above. Set parameter type to PropelCollection or PropelCollection + $type['name'] = 'array'; + + $collection = new PropelCollection(); + $collection->setData($visitor->visitArray($data, $type, $context)); + + return $collection; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/StdClassHandler.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/StdClassHandler.php new file mode 100644 index 0000000..2e1ad5b --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/StdClassHandler.php @@ -0,0 +1,60 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +use JMS\Serializer\Context; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Metadata\StaticPropertyMetadata; +use JMS\Serializer\VisitorInterface; + +/** + * @author Asmir Mustafic + */ +class StdClassHandler implements SubscribingHandlerInterface +{ + public static function getSubscribingMethods() + { + $methods = array(); + $formats = array('json', 'xml', 'yml'); + + foreach ($formats as $format) { + $methods[] = array( + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'type' => 'stdClass', + 'format' => $format, + 'method' => 'serializeStdClass', + ); + } + + return $methods; + } + + public function serializeStdClass(VisitorInterface $visitor, \stdClass $stdClass, array $type, Context $context) + { + $classMetadata = $context->getMetadataFactory()->getMetadataForClass('stdClass'); + $visitor->startVisitingObject($classMetadata, $stdClass, array('name' => 'stdClass'), $context); + + foreach ((array)$stdClass as $name => $value) { + $metadata = new StaticPropertyMetadata('stdClass', $name, $value); + $visitor->visitProperty($metadata, $value, $context); + } + + return $visitor->endVisitingObject($classMetadata, $stdClass, array('name' => 'stdClass'), $context); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Handler/SubscribingHandlerInterface.php b/vendor/jms/serializer/src/JMS/Serializer/Handler/SubscribingHandlerInterface.php new file mode 100644 index 0000000..5fd67e2 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Handler/SubscribingHandlerInterface.php @@ -0,0 +1,40 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Handler; + +interface SubscribingHandlerInterface +{ + /** + * Return format: + * + * array( + * array( + * 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + * 'format' => 'json', + * 'type' => 'DateTime', + * 'method' => 'serializeDateTimeToJson', + * ), + * ) + * + * The direction and method keys can be omitted. + * + * @return array + */ + public static function getSubscribingMethods(); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/JsonDeserializationVisitor.php b/vendor/jms/serializer/src/JMS/Serializer/JsonDeserializationVisitor.php new file mode 100644 index 0000000..be763ae --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/JsonDeserializationVisitor.php @@ -0,0 +1,52 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Exception\RuntimeException; + +class JsonDeserializationVisitor extends GenericDeserializationVisitor +{ + protected function decode($str) + { + $decoded = json_decode($str, true); + + switch (json_last_error()) { + case JSON_ERROR_NONE: + return $decoded; + + case JSON_ERROR_DEPTH: + throw new RuntimeException('Could not decode JSON, maximum stack depth exceeded.'); + + case JSON_ERROR_STATE_MISMATCH: + throw new RuntimeException('Could not decode JSON, underflow or the nodes mismatch.'); + + case JSON_ERROR_CTRL_CHAR: + throw new RuntimeException('Could not decode JSON, unexpected control character found.'); + + case JSON_ERROR_SYNTAX: + throw new RuntimeException('Could not decode JSON, syntax error - malformed JSON.'); + + case JSON_ERROR_UTF8: + throw new RuntimeException('Could not decode JSON, malformed UTF-8 characters (incorrectly encoded?)'); + + default: + throw new RuntimeException('Could not decode JSON.'); + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/JsonSerializationVisitor.php b/vendor/jms/serializer/src/JMS/Serializer/JsonSerializationVisitor.php new file mode 100644 index 0000000..f9d4ae2 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/JsonSerializationVisitor.php @@ -0,0 +1,261 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Exception\InvalidArgumentException; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Naming\AdvancedNamingStrategyInterface; + +class JsonSerializationVisitor extends GenericSerializationVisitor +{ + private $options = 0; + + private $navigator; + private $root; + private $dataStack; + private $data; + + public function setNavigator(GraphNavigator $navigator) + { + $this->navigator = $navigator; + $this->root = null; + $this->dataStack = new \SplStack; + } + + /** + * @return GraphNavigator + */ + public function getNavigator() + { + return $this->navigator; + } + + public function visitNull($data, array $type, Context $context) + { + return null; + } + + public function visitString($data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = $data; + } + + return (string)$data; + } + + public function visitBoolean($data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = $data; + } + + return (boolean)$data; + } + + public function visitInteger($data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = $data; + } + + return (int)$data; + } + + public function visitDouble($data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = $data; + } + + return (float)$data; + } + + /** + * @param array $data + * @param array $type + * @param Context $context + * @return mixed + */ + public function visitArray($data, array $type, Context $context) + { + $this->dataStack->push($data); + + $isHash = isset($type['params'][1]); + + if (null === $this->root) { + $this->root = $isHash ? new \ArrayObject() : array(); + $rs = &$this->root; + } else { + $rs = $isHash ? new \ArrayObject() : array(); + } + + $isList = isset($type['params'][0]) && !isset($type['params'][1]); + + foreach ($data as $k => $v) { + $v = $this->navigator->accept($v, $this->getElementType($type), $context); + + if (null === $v && $context->shouldSerializeNull() !== true) { + continue; + } + + if ($isList) { + $rs[] = $v; + } else { + $rs[$k] = $v; + } + } + + $this->dataStack->pop(); + return $rs; + } + + public function startVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + if (null === $this->root) { + $this->root = new \stdClass; + } + + $this->dataStack->push($this->data); + $this->data = array(); + } + + public function endVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + $rs = $this->data; + $this->data = $this->dataStack->pop(); + + // Force JSON output to "{}" instead of "[]" if it contains either no properties or all properties are null. + if (empty($rs)) { + $rs = new \ArrayObject(); + } + + if ($this->root instanceof \stdClass && 0 === $this->dataStack->count()) { + $this->root = $rs; + } + + return $rs; + } + + public function visitProperty(PropertyMetadata $metadata, $data, Context $context) + { + $v = $this->accessor->getValue($data, $metadata); + + $v = $this->navigator->accept($v, $metadata->type, $context); + if ((null === $v && $context->shouldSerializeNull() !== true) + || (true === $metadata->skipWhenEmpty && ($v instanceof \ArrayObject || is_array($v)) && 0 === count($v)) + ) { + return; + } + + if ($this->namingStrategy instanceof AdvancedNamingStrategyInterface) { + $k = $this->namingStrategy->getPropertyName($metadata, $context); + } else { + $k = $this->namingStrategy->translateName($metadata); + } + + if ($metadata->inline) { + if (is_array($v) || ($v instanceof \ArrayObject)) { + $this->data = array_merge($this->data, (array) $v); + } + } else { + $this->data[$k] = $v; + } + } + + /** + * Allows you to add additional data to the current object/root element. + * @deprecated use setData instead + * @param string $key + * @param integer|float|boolean|string|array|null $value This value must either be a regular scalar, or an array. + * It must not contain any objects anymore. + */ + public function addData($key, $value) + { + if (isset($this->data[$key])) { + throw new InvalidArgumentException(sprintf('There is already data for "%s".', $key)); + } + + $this->data[$key] = $value; + } + + /** + * Checks if some data key exists. + * + * @param string $key + * @return boolean + */ + public function hasData($key) + { + return isset($this->data[$key]); + } + + /** + * Allows you to replace existing data on the current object/root element. + * + * @param string $key + * @param integer|float|boolean|string|array|null $value This value must either be a regular scalar, or an array. + * It must not contain any objects anymore. + */ + public function setData($key, $value) + { + $this->data[$key] = $value; + } + + public function getRoot() + { + return $this->root; + } + + /** + * @param array|\ArrayObject $data the passed data must be understood by whatever encoding function is applied later. + */ + public function setRoot($data) + { + $this->root = $data; + } + + + public function getResult() + { + $result = @json_encode($this->getRoot(), $this->options); + + switch (json_last_error()) { + case JSON_ERROR_NONE: + return $result; + + case JSON_ERROR_UTF8: + throw new \RuntimeException('Your data could not be encoded because it contains invalid UTF8 characters.'); + + default: + throw new \RuntimeException(sprintf('An error occurred while encoding your data (error code %d).', json_last_error())); + } + } + + public function getOptions() + { + return $this->options; + } + + public function setOptions($options) + { + $this->options = (integer)$options; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/ClassMetadata.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/ClassMetadata.php new file mode 100644 index 0000000..40f4966 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/ClassMetadata.php @@ -0,0 +1,347 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata; + +use JMS\Serializer\Exception\InvalidArgumentException; +use Metadata\MergeableClassMetadata; +use Metadata\MergeableInterface; +use Metadata\MethodMetadata; +use Metadata\PropertyMetadata as BasePropertyMetadata; + +/** + * Class Metadata used to customize the serialization process. + * + * @author Johannes M. Schmitt + */ +class ClassMetadata extends MergeableClassMetadata +{ + const ACCESSOR_ORDER_UNDEFINED = 'undefined'; + const ACCESSOR_ORDER_ALPHABETICAL = 'alphabetical'; + const ACCESSOR_ORDER_CUSTOM = 'custom'; + + /** @var \ReflectionMethod[] */ + public $preSerializeMethods = array(); + + /** @var \ReflectionMethod[] */ + public $postSerializeMethods = array(); + + /** @var \ReflectionMethod[] */ + public $postDeserializeMethods = array(); + + public $xmlRootName; + public $xmlRootNamespace; + public $xmlNamespaces = array(); + public $accessorOrder; + public $customOrder; + public $usingExpression = false; + public $handlerCallbacks = array(); + + public $discriminatorDisabled = false; + public $discriminatorBaseClass; + public $discriminatorFieldName; + public $discriminatorValue; + public $discriminatorMap = array(); + public $discriminatorGroups = array(); + + public $xmlDiscriminatorAttribute = false; + public $xmlDiscriminatorCData = true; + public $xmlDiscriminatorNamespace; + + public function setDiscriminator($fieldName, array $map, array $groups = array()) + { + if (empty($fieldName)) { + throw new \InvalidArgumentException('The $fieldName cannot be empty.'); + } + + if (empty($map)) { + throw new \InvalidArgumentException('The discriminator map cannot be empty.'); + } + + $this->discriminatorBaseClass = $this->name; + $this->discriminatorFieldName = $fieldName; + $this->discriminatorMap = $map; + $this->discriminatorGroups = $groups; + } + + /** + * Sets the order of properties in the class. + * + * @param string $order + * @param array $customOrder + * + * @throws InvalidArgumentException When the accessor order is not valid + * @throws InvalidArgumentException When the custom order is not valid + */ + public function setAccessorOrder($order, array $customOrder = array()) + { + if (!in_array($order, array(self::ACCESSOR_ORDER_UNDEFINED, self::ACCESSOR_ORDER_ALPHABETICAL, self::ACCESSOR_ORDER_CUSTOM), true)) { + throw new InvalidArgumentException(sprintf('The accessor order "%s" is invalid.', $order)); + } + + foreach ($customOrder as $name) { + if (!is_string($name)) { + throw new InvalidArgumentException(sprintf('$customOrder is expected to be a list of strings, but got element of value %s.', json_encode($name))); + } + } + + $this->accessorOrder = $order; + $this->customOrder = array_flip($customOrder); + $this->sortProperties(); + } + + public function addPropertyMetadata(BasePropertyMetadata $metadata) + { + parent::addPropertyMetadata($metadata); + $this->sortProperties(); + if ($metadata instanceof PropertyMetadata && $metadata->excludeIf) { + $this->usingExpression = true; + } + } + + public function addPreSerializeMethod(MethodMetadata $method) + { + $this->preSerializeMethods[] = $method; + } + + public function addPostSerializeMethod(MethodMetadata $method) + { + $this->postSerializeMethods[] = $method; + } + + public function addPostDeserializeMethod(MethodMetadata $method) + { + $this->postDeserializeMethods[] = $method; + } + + /** + * @param integer $direction + * @param string|integer $format + * @param string $methodName + */ + public function addHandlerCallback($direction, $format, $methodName) + { + $this->handlerCallbacks[$direction][$format] = $methodName; + } + + public function merge(MergeableInterface $object) + { + if (!$object instanceof ClassMetadata) { + throw new InvalidArgumentException('$object must be an instance of ClassMetadata.'); + } + parent::merge($object); + + $this->preSerializeMethods = array_merge($this->preSerializeMethods, $object->preSerializeMethods); + $this->postSerializeMethods = array_merge($this->postSerializeMethods, $object->postSerializeMethods); + $this->postDeserializeMethods = array_merge($this->postDeserializeMethods, $object->postDeserializeMethods); + $this->xmlRootName = $object->xmlRootName; + $this->xmlRootNamespace = $object->xmlRootNamespace; + $this->xmlNamespaces = array_merge($this->xmlNamespaces, $object->xmlNamespaces); + + // Handler methods are taken from the outer class completely. + $this->handlerCallbacks = $object->handlerCallbacks; + + if ($object->accessorOrder) { + $this->accessorOrder = $object->accessorOrder; + $this->customOrder = $object->customOrder; + } + + if ($object->discriminatorFieldName && $this->discriminatorFieldName) { + throw new \LogicException(sprintf( + 'The discriminator of class "%s" would overwrite the discriminator of the parent class "%s". Please define all possible sub-classes in the discriminator of %s.', + $object->name, + $this->discriminatorBaseClass, + $this->discriminatorBaseClass + )); + } elseif (!$this->discriminatorFieldName && $object->discriminatorFieldName) { + $this->discriminatorFieldName = $object->discriminatorFieldName; + $this->discriminatorMap = $object->discriminatorMap; + } + + if ($object->discriminatorDisabled !== null) { + $this->discriminatorDisabled = $object->discriminatorDisabled; + } + + if ($object->discriminatorMap) { + $this->discriminatorFieldName = $object->discriminatorFieldName; + $this->discriminatorMap = $object->discriminatorMap; + $this->discriminatorBaseClass = $object->discriminatorBaseClass; + } + + if ($this->discriminatorMap && !$this->reflection->isAbstract()) { + if (false === $typeValue = array_search($this->name, $this->discriminatorMap, true)) { + throw new \LogicException(sprintf( + 'The sub-class "%s" is not listed in the discriminator of the base class "%s".', + $this->name, + $this->discriminatorBaseClass + )); + } + + $this->discriminatorValue = $typeValue; + + if (isset($this->propertyMetadata[$this->discriminatorFieldName]) + && !$this->propertyMetadata[$this->discriminatorFieldName] instanceof StaticPropertyMetadata + ) { + throw new \LogicException(sprintf( + 'The discriminator field name "%s" of the base-class "%s" conflicts with a regular property of the sub-class "%s".', + $this->discriminatorFieldName, + $this->discriminatorBaseClass, + $this->name + )); + } + + $discriminatorProperty = new StaticPropertyMetadata( + $this->name, + $this->discriminatorFieldName, + $typeValue, + $this->discriminatorGroups + ); + $discriminatorProperty->serializedName = $this->discriminatorFieldName; + $discriminatorProperty->xmlAttribute = $this->xmlDiscriminatorAttribute; + $discriminatorProperty->xmlElementCData = $this->xmlDiscriminatorCData; + $discriminatorProperty->xmlNamespace = $this->xmlDiscriminatorNamespace; + $this->propertyMetadata[$this->discriminatorFieldName] = $discriminatorProperty; + } + + $this->sortProperties(); + } + + public function registerNamespace($uri, $prefix = null) + { + if (!is_string($uri)) { + throw new InvalidArgumentException(sprintf('$uri is expected to be a strings, but got value %s.', json_encode($uri))); + } + + if ($prefix !== null) { + if (!is_string($prefix)) { + throw new InvalidArgumentException(sprintf('$prefix is expected to be a strings, but got value %s.', json_encode($prefix))); + } + } else { + $prefix = ""; + } + + $this->xmlNamespaces[$prefix] = $uri; + + } + + public function serialize() + { + $this->sortProperties(); + + return serialize(array( + $this->preSerializeMethods, + $this->postSerializeMethods, + $this->postDeserializeMethods, + $this->xmlRootName, + $this->xmlRootNamespace, + $this->xmlNamespaces, + $this->accessorOrder, + $this->customOrder, + $this->handlerCallbacks, + $this->discriminatorDisabled, + $this->discriminatorBaseClass, + $this->discriminatorFieldName, + $this->discriminatorValue, + $this->discriminatorMap, + $this->discriminatorGroups, + parent::serialize(), + 'discriminatorGroups' => $this->discriminatorGroups, + 'xmlDiscriminatorAttribute' => $this->xmlDiscriminatorAttribute, + 'xmlDiscriminatorCData' => $this->xmlDiscriminatorCData, + 'usingExpression' => $this->usingExpression, + 'xmlDiscriminatorNamespace' => $this->xmlDiscriminatorNamespace, + )); + } + + public function unserialize($str) + { + $unserialized = unserialize($str); + + list( + $this->preSerializeMethods, + $this->postSerializeMethods, + $this->postDeserializeMethods, + $this->xmlRootName, + $this->xmlRootNamespace, + $this->xmlNamespaces, + $this->accessorOrder, + $this->customOrder, + $this->handlerCallbacks, + $this->discriminatorDisabled, + $this->discriminatorBaseClass, + $this->discriminatorFieldName, + $this->discriminatorValue, + $this->discriminatorMap, + $this->discriminatorGroups, + $parentStr + ) = $unserialized; + + if (isset($unserialized['discriminatorGroups'])) { + $this->discriminatorGroups = $unserialized['discriminatorGroups']; + } + if (isset($unserialized['usingExpression'])) { + $this->usingExpression = $unserialized['usingExpression']; + } + + if (isset($unserialized['xmlDiscriminatorAttribute'])) { + $this->xmlDiscriminatorAttribute = $unserialized['xmlDiscriminatorAttribute']; + } + + if (isset($unserialized['xmlDiscriminatorNamespace'])) { + $this->xmlDiscriminatorNamespace = $unserialized['xmlDiscriminatorNamespace']; + } + + if (isset($unserialized['xmlDiscriminatorCData'])) { + $this->xmlDiscriminatorCData = $unserialized['xmlDiscriminatorCData']; + } + + parent::unserialize($parentStr); + } + + private function sortProperties() + { + switch ($this->accessorOrder) { + case self::ACCESSOR_ORDER_ALPHABETICAL: + ksort($this->propertyMetadata); + break; + + case self::ACCESSOR_ORDER_CUSTOM: + $order = $this->customOrder; + $currentSorting = $this->propertyMetadata ? array_combine(array_keys($this->propertyMetadata), range(1, count($this->propertyMetadata))) : []; + uksort($this->propertyMetadata, function ($a, $b) use ($order, $currentSorting) { + $existsA = isset($order[$a]); + $existsB = isset($order[$b]); + + if (!$existsA && !$existsB) { + return $currentSorting[$a] - $currentSorting[$b]; + } + + if (!$existsA) { + return 1; + } + + if (!$existsB) { + return -1; + } + + return $order[$a] < $order[$b] ? -1 : 1; + }); + break; + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/AbstractDoctrineTypeDriver.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/AbstractDoctrineTypeDriver.php new file mode 100644 index 0000000..455074d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/AbstractDoctrineTypeDriver.php @@ -0,0 +1,174 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata\Driver; + +use Doctrine\Common\Persistence\ManagerRegistry; +use Doctrine\Common\Persistence\Mapping\ClassMetadata as DoctrineClassMetadata; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\ExpressionPropertyMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Metadata\StaticPropertyMetadata; +use JMS\Serializer\Metadata\VirtualPropertyMetadata; +use Metadata\Driver\DriverInterface; + +/** + * This class decorates any other driver. If the inner driver does not provide a + * a property type, the decorator will guess based on Doctrine 2 metadata. + */ +abstract class AbstractDoctrineTypeDriver implements DriverInterface +{ + /** + * Map of doctrine 2 field types to JMS\Serializer types + * @var array + */ + protected $fieldMapping = array( + 'string' => 'string', + 'text' => 'string', + 'blob' => 'string', + 'guid' => 'string', + + 'integer' => 'integer', + 'smallint' => 'integer', + 'bigint' => 'integer', + + 'datetime' => 'DateTime', + 'datetimetz' => 'DateTime', + 'time' => 'DateTime', + 'date' => 'DateTime', + + 'float' => 'float', + 'decimal' => 'float', + + 'boolean' => 'boolean', + + 'array' => 'array', + 'json_array' => 'array', + 'simple_array' => 'array', + ); + + /** + * @var DriverInterface + */ + protected $delegate; + + /** + * @var ManagerRegistry + */ + protected $registry; + + public function __construct(DriverInterface $delegate, ManagerRegistry $registry) + { + $this->delegate = $delegate; + $this->registry = $registry; + } + + public function loadMetadataForClass(\ReflectionClass $class) + { + /** @var $classMetadata ClassMetadata */ + $classMetadata = $this->delegate->loadMetadataForClass($class); + + // Abort if the given class is not a mapped entity + if (!$doctrineMetadata = $this->tryLoadingDoctrineMetadata($class->name)) { + return $classMetadata; + } + + $this->setDiscriminator($doctrineMetadata, $classMetadata); + + // We base our scan on the internal driver's property list so that we + // respect any internal white/blacklisting like in the AnnotationDriver + foreach ($classMetadata->propertyMetadata as $key => $propertyMetadata) { + /** @var $propertyMetadata PropertyMetadata */ + + // If the inner driver provides a type, don't guess anymore. + if ($propertyMetadata->type || $this->isVirtualProperty($propertyMetadata)) { + continue; + } + + if ($this->hideProperty($doctrineMetadata, $propertyMetadata)) { + unset($classMetadata->propertyMetadata[$key]); + } + + $this->setPropertyType($doctrineMetadata, $propertyMetadata); + } + + return $classMetadata; + } + + private function isVirtualProperty(PropertyMetadata $propertyMetadata) + { + return $propertyMetadata instanceof VirtualPropertyMetadata + || $propertyMetadata instanceof StaticPropertyMetadata + || $propertyMetadata instanceof ExpressionPropertyMetadata; + } + + /** + * @param DoctrineClassMetadata $doctrineMetadata + * @param ClassMetadata $classMetadata + */ + protected function setDiscriminator(DoctrineClassMetadata $doctrineMetadata, ClassMetadata $classMetadata) + { + } + + /** + * @param DoctrineClassMetadata $doctrineMetadata + * @param PropertyMetadata $propertyMetadata + */ + protected function hideProperty(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata) + { + return false; + } + + /** + * @param DoctrineClassMetadata $doctrineMetadata + * @param PropertyMetadata $propertyMetadata + */ + protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata) + { + } + + /** + * @param string $className + * + * @return null|DoctrineClassMetadata + */ + protected function tryLoadingDoctrineMetadata($className) + { + if (!$manager = $this->registry->getManagerForClass($className)) { + return null; + } + + if ($manager->getMetadataFactory()->isTransient($className)) { + return null; + } + + return $manager->getClassMetadata($className); + } + + /** + * @param string $type + */ + protected function normalizeFieldType($type) + { + if (!isset($this->fieldMapping[$type])) { + return; + } + + return $this->fieldMapping[$type]; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/AnnotationDriver.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/AnnotationDriver.php new file mode 100644 index 0000000..8fec730 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/AnnotationDriver.php @@ -0,0 +1,251 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata\Driver; + +use Doctrine\Common\Annotations\Reader; +use JMS\Serializer\Annotation\Accessor; +use JMS\Serializer\Annotation\AccessorOrder; +use JMS\Serializer\Annotation\AccessType; +use JMS\Serializer\Annotation\Discriminator; +use JMS\Serializer\Annotation\Exclude; +use JMS\Serializer\Annotation\ExcludeIf; +use JMS\Serializer\Annotation\ExclusionPolicy; +use JMS\Serializer\Annotation\Expose; +use JMS\Serializer\Annotation\Groups; +use JMS\Serializer\Annotation\HandlerCallback; +use JMS\Serializer\Annotation\Inline; +use JMS\Serializer\Annotation\MaxDepth; +use JMS\Serializer\Annotation\PostDeserialize; +use JMS\Serializer\Annotation\PostSerialize; +use JMS\Serializer\Annotation\PreSerialize; +use JMS\Serializer\Annotation\ReadOnly; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Since; +use JMS\Serializer\Annotation\SkipWhenEmpty; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\Until; +use JMS\Serializer\Annotation\VirtualProperty; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlAttributeMap; +use JMS\Serializer\Annotation\XmlDiscriminator; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlKeyValuePairs; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlMap; +use JMS\Serializer\Annotation\XmlNamespace; +use JMS\Serializer\Annotation\XmlRoot; +use JMS\Serializer\Annotation\XmlValue; +use JMS\Serializer\Exception\InvalidArgumentException; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\ExpressionPropertyMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Metadata\VirtualPropertyMetadata; +use Metadata\Driver\DriverInterface; +use Metadata\MethodMetadata; + +class AnnotationDriver implements DriverInterface +{ + private $reader; + + public function __construct(Reader $reader) + { + $this->reader = $reader; + } + + public function loadMetadataForClass(\ReflectionClass $class) + { + $classMetadata = new ClassMetadata($name = $class->name); + $classMetadata->fileResources[] = $class->getFilename(); + + $propertiesMetadata = array(); + $propertiesAnnotations = array(); + + $exclusionPolicy = 'NONE'; + $excludeAll = false; + $classAccessType = PropertyMetadata::ACCESS_TYPE_PROPERTY; + $readOnlyClass = false; + foreach ($this->reader->getClassAnnotations($class) as $annot) { + if ($annot instanceof ExclusionPolicy) { + $exclusionPolicy = $annot->policy; + } elseif ($annot instanceof XmlRoot) { + $classMetadata->xmlRootName = $annot->name; + $classMetadata->xmlRootNamespace = $annot->namespace; + } elseif ($annot instanceof XmlNamespace) { + $classMetadata->registerNamespace($annot->uri, $annot->prefix); + } elseif ($annot instanceof Exclude) { + $excludeAll = true; + } elseif ($annot instanceof AccessType) { + $classAccessType = $annot->type; + } elseif ($annot instanceof ReadOnly) { + $readOnlyClass = true; + } elseif ($annot instanceof AccessorOrder) { + $classMetadata->setAccessorOrder($annot->order, $annot->custom); + } elseif ($annot instanceof Discriminator) { + if ($annot->disabled) { + $classMetadata->discriminatorDisabled = true; + } else { + $classMetadata->setDiscriminator($annot->field, $annot->map, $annot->groups); + } + } elseif ($annot instanceof XmlDiscriminator) { + $classMetadata->xmlDiscriminatorAttribute = (bool)$annot->attribute; + $classMetadata->xmlDiscriminatorCData = (bool)$annot->cdata; + $classMetadata->xmlDiscriminatorNamespace = $annot->namespace ? (string)$annot->namespace : null; + } elseif ($annot instanceof VirtualProperty) { + $virtualPropertyMetadata = new ExpressionPropertyMetadata($name, $annot->name, $annot->exp); + $propertiesMetadata[] = $virtualPropertyMetadata; + $propertiesAnnotations[] = $annot->options; + } + } + + foreach ($class->getMethods() as $method) { + if ($method->class !== $name) { + continue; + } + + $methodAnnotations = $this->reader->getMethodAnnotations($method); + + foreach ($methodAnnotations as $annot) { + if ($annot instanceof PreSerialize) { + $classMetadata->addPreSerializeMethod(new MethodMetadata($name, $method->name)); + continue 2; + } elseif ($annot instanceof PostDeserialize) { + $classMetadata->addPostDeserializeMethod(new MethodMetadata($name, $method->name)); + continue 2; + } elseif ($annot instanceof PostSerialize) { + $classMetadata->addPostSerializeMethod(new MethodMetadata($name, $method->name)); + continue 2; + } elseif ($annot instanceof VirtualProperty) { + $virtualPropertyMetadata = new VirtualPropertyMetadata($name, $method->name); + $propertiesMetadata[] = $virtualPropertyMetadata; + $propertiesAnnotations[] = $methodAnnotations; + continue 2; + } elseif ($annot instanceof HandlerCallback) { + $classMetadata->addHandlerCallback(GraphNavigator::parseDirection($annot->direction), $annot->format, $method->name); + continue 2; + } + } + } + + if (!$excludeAll) { + foreach ($class->getProperties() as $property) { + if ($property->class !== $name || (isset($property->info) && $property->info['class'] !== $name)) { + continue; + } + $propertiesMetadata[] = new PropertyMetadata($name, $property->getName()); + $propertiesAnnotations[] = $this->reader->getPropertyAnnotations($property); + } + + foreach ($propertiesMetadata as $propertyKey => $propertyMetadata) { + $isExclude = false; + $isExpose = $propertyMetadata instanceof VirtualPropertyMetadata + || $propertyMetadata instanceof ExpressionPropertyMetadata; + $propertyMetadata->readOnly = $propertyMetadata->readOnly || $readOnlyClass; + $accessType = $classAccessType; + $accessor = array(null, null); + + $propertyAnnotations = $propertiesAnnotations[$propertyKey]; + + foreach ($propertyAnnotations as $annot) { + if ($annot instanceof Since) { + $propertyMetadata->sinceVersion = $annot->version; + } elseif ($annot instanceof Until) { + $propertyMetadata->untilVersion = $annot->version; + } elseif ($annot instanceof SerializedName) { + $propertyMetadata->serializedName = $annot->name; + } elseif ($annot instanceof SkipWhenEmpty) { + $propertyMetadata->skipWhenEmpty = true; + } elseif ($annot instanceof Expose) { + $isExpose = true; + if (null !== $annot->if) { + $propertyMetadata->excludeIf = "!(" . $annot->if . ")"; + } + } elseif ($annot instanceof Exclude) { + if (null !== $annot->if) { + $propertyMetadata->excludeIf = $annot->if; + } else { + $isExclude = true; + } + } elseif ($annot instanceof Type) { + $propertyMetadata->setType($annot->name); + } elseif ($annot instanceof XmlElement) { + $propertyMetadata->xmlAttribute = false; + $propertyMetadata->xmlElementCData = $annot->cdata; + $propertyMetadata->xmlNamespace = $annot->namespace; + } elseif ($annot instanceof XmlList) { + $propertyMetadata->xmlCollection = true; + $propertyMetadata->xmlCollectionInline = $annot->inline; + $propertyMetadata->xmlEntryName = $annot->entry; + $propertyMetadata->xmlEntryNamespace = $annot->namespace; + $propertyMetadata->xmlCollectionSkipWhenEmpty = $annot->skipWhenEmpty; + } elseif ($annot instanceof XmlMap) { + $propertyMetadata->xmlCollection = true; + $propertyMetadata->xmlCollectionInline = $annot->inline; + $propertyMetadata->xmlEntryName = $annot->entry; + $propertyMetadata->xmlEntryNamespace = $annot->namespace; + $propertyMetadata->xmlKeyAttribute = $annot->keyAttribute; + } elseif ($annot instanceof XmlKeyValuePairs) { + $propertyMetadata->xmlKeyValuePairs = true; + } elseif ($annot instanceof XmlAttribute) { + $propertyMetadata->xmlAttribute = true; + $propertyMetadata->xmlNamespace = $annot->namespace; + } elseif ($annot instanceof XmlValue) { + $propertyMetadata->xmlValue = true; + $propertyMetadata->xmlElementCData = $annot->cdata; + } elseif ($annot instanceof XmlElement) { + $propertyMetadata->xmlElementCData = $annot->cdata; + } elseif ($annot instanceof AccessType) { + $accessType = $annot->type; + } elseif ($annot instanceof ReadOnly) { + $propertyMetadata->readOnly = $annot->readOnly; + } elseif ($annot instanceof Accessor) { + $accessor = array($annot->getter, $annot->setter); + } elseif ($annot instanceof Groups) { + $propertyMetadata->groups = $annot->groups; + foreach ((array)$propertyMetadata->groups as $groupName) { + if (false !== strpos($groupName, ',')) { + throw new InvalidArgumentException(sprintf( + 'Invalid group name "%s" on "%s", did you mean to create multiple groups?', + implode(', ', $propertyMetadata->groups), + $propertyMetadata->class . '->' . $propertyMetadata->name + )); + } + } + } elseif ($annot instanceof Inline) { + $propertyMetadata->inline = true; + } elseif ($annot instanceof XmlAttributeMap) { + $propertyMetadata->xmlAttributeMap = true; + } elseif ($annot instanceof MaxDepth) { + $propertyMetadata->maxDepth = $annot->depth; + } + } + + + if ((ExclusionPolicy::NONE === $exclusionPolicy && !$isExclude) + || (ExclusionPolicy::ALL === $exclusionPolicy && $isExpose) + ) { + $propertyMetadata->setAccessor($accessType, $accessor[0], $accessor[1]); + $classMetadata->addPropertyMetadata($propertyMetadata); + } + } + } + + return $classMetadata; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrinePHPCRTypeDriver.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrinePHPCRTypeDriver.php new file mode 100644 index 0000000..f507f64 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrinePHPCRTypeDriver.php @@ -0,0 +1,69 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata\Driver; + +use Doctrine\Common\Persistence\Mapping\ClassMetadata as DoctrineClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * This class decorates any other driver. If the inner driver does not provide a + * a property type, the decorator will guess based on Doctrine 2 metadata. + */ +class DoctrinePHPCRTypeDriver extends AbstractDoctrineTypeDriver +{ + /** + * @param DoctrineClassMetadata $doctrineMetadata + * @param PropertyMetadata $propertyMetadata + */ + protected function hideProperty(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata) + { + return 'lazyPropertiesDefaults' === $propertyMetadata->name + || $doctrineMetadata->parentMapping === $propertyMetadata->name + || $doctrineMetadata->node === $propertyMetadata->name; + } + + protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata) + { + $propertyName = $propertyMetadata->name; + if ($doctrineMetadata->hasField($propertyName) && $fieldType = $this->normalizeFieldType($doctrineMetadata->getTypeOfField($propertyName))) { + $field = $doctrineMetadata->getFieldMapping($propertyName); + if (!empty($field['multivalue'])) { + $fieldType = 'array'; + } + + $propertyMetadata->setType($fieldType); + } elseif ($doctrineMetadata->hasAssociation($propertyName)) { + try { + $targetEntity = $doctrineMetadata->getAssociationTargetClass($propertyName); + } catch (\Exception $e) { + return; + } + + if (null === $this->tryLoadingDoctrineMetadata($targetEntity)) { + return; + } + + if (!$doctrineMetadata->isSingleValuedAssociation($propertyName)) { + $targetEntity = "ArrayCollection<{$targetEntity}>"; + } + + $propertyMetadata->setType($targetEntity); + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrineTypeDriver.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrineTypeDriver.php new file mode 100644 index 0000000..f65129a --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/DoctrineTypeDriver.php @@ -0,0 +1,69 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata\Driver; + +use Doctrine\Common\Persistence\Mapping\ClassMetadata as DoctrineClassMetadata; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * This class decorates any other driver. If the inner driver does not provide a + * a property type, the decorator will guess based on Doctrine 2 metadata. + */ +class DoctrineTypeDriver extends AbstractDoctrineTypeDriver +{ + protected function setDiscriminator(DoctrineClassMetadata $doctrineMetadata, ClassMetadata $classMetadata) + { + if (empty($classMetadata->discriminatorMap) && !$classMetadata->discriminatorDisabled + && !empty($doctrineMetadata->discriminatorMap) && $doctrineMetadata->isRootEntity() + ) { + $classMetadata->setDiscriminator( + $doctrineMetadata->discriminatorColumn['name'], + $doctrineMetadata->discriminatorMap + ); + } + } + + protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata) + { + $propertyName = $propertyMetadata->name; + if ($doctrineMetadata->hasField($propertyName) && $fieldType = $this->normalizeFieldType($doctrineMetadata->getTypeOfField($propertyName))) { + $propertyMetadata->setType($fieldType); + } elseif ($doctrineMetadata->hasAssociation($propertyName)) { + $targetEntity = $doctrineMetadata->getAssociationTargetClass($propertyName); + + if (null === $targetMetadata = $this->tryLoadingDoctrineMetadata($targetEntity)) { + return; + } + + // For inheritance schemes, we cannot add any type as we would only add the super-type of the hierarchy. + // On serialization, this would lead to only the supertype being serialized, and properties of subtypes + // being ignored. + if ($targetMetadata instanceof DoctrineClassMetadata && !$targetMetadata->isInheritanceTypeNone()) { + return; + } + + if (!$doctrineMetadata->isSingleValuedAssociation($propertyName)) { + $targetEntity = "ArrayCollection<{$targetEntity}>"; + } + + $propertyMetadata->setType($targetEntity); + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/NullDriver.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/NullDriver.php new file mode 100644 index 0000000..fbd5e36 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/NullDriver.php @@ -0,0 +1,33 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata\Driver; + +use JMS\Serializer\Metadata\ClassMetadata; +use Metadata\Driver\DriverInterface; + +class NullDriver implements DriverInterface +{ + public function loadMetadataForClass(\ReflectionClass $class) + { + $classMetadata = new ClassMetadata($name = $class->name); + $classMetadata->fileResources[] = $class->getFilename(); + + return $classMetadata; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/PhpDriver.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/PhpDriver.php new file mode 100644 index 0000000..510ee00 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/PhpDriver.php @@ -0,0 +1,45 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata\Driver; + +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\Metadata\ClassMetadata; +use Metadata\Driver\AbstractFileDriver; + +class PhpDriver extends AbstractFileDriver +{ + protected function loadMetadataFromFile(\ReflectionClass $class, $file) + { + $metadata = require $file; + + if (!$metadata instanceof ClassMetadata) { + throw new RuntimeException(sprintf('The file %s was expected to return an instance of ClassMetadata, but returned %s.', $file, json_encode($metadata))); + } + if ($metadata->name !== $class->name) { + throw new RuntimeException(sprintf('The file %s was expected to return metadata for class %s, but instead returned metadata for class %s.', $class->name, $metadata->name)); + } + + return $metadata; + } + + protected function getExtension() + { + return 'php'; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/XmlDriver.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/XmlDriver.php new file mode 100644 index 0000000..0baac7d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/XmlDriver.php @@ -0,0 +1,361 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata\Driver; + +use JMS\Serializer\Annotation\ExclusionPolicy; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\Exception\XmlErrorException; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\ExpressionPropertyMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Metadata\VirtualPropertyMetadata; +use Metadata\Driver\AbstractFileDriver; +use Metadata\MethodMetadata; + +class XmlDriver extends AbstractFileDriver +{ + protected function loadMetadataFromFile(\ReflectionClass $class, $path) + { + $previous = libxml_use_internal_errors(true); + libxml_clear_errors(); + + $elem = simplexml_load_file($path); + libxml_use_internal_errors($previous); + + if (false === $elem) { + throw new XmlErrorException(libxml_get_last_error()); + } + + $metadata = new ClassMetadata($name = $class->name); + if (!$elems = $elem->xpath("./class[@name = '" . $name . "']")) { + throw new RuntimeException(sprintf('Could not find class %s inside XML element.', $name)); + } + $elem = reset($elems); + + $metadata->fileResources[] = $path; + $metadata->fileResources[] = $class->getFileName(); + $exclusionPolicy = strtoupper($elem->attributes()->{'exclusion-policy'}) ?: 'NONE'; + $excludeAll = null !== ($exclude = $elem->attributes()->exclude) ? 'true' === strtolower($exclude) : false; + $classAccessType = (string)($elem->attributes()->{'access-type'} ?: PropertyMetadata::ACCESS_TYPE_PROPERTY); + + $propertiesMetadata = array(); + $propertiesNodes = array(); + + if (null !== $accessorOrder = $elem->attributes()->{'accessor-order'}) { + $metadata->setAccessorOrder((string)$accessorOrder, preg_split('/\s*,\s*/', (string)$elem->attributes()->{'custom-accessor-order'})); + } + + if (null !== $xmlRootName = $elem->attributes()->{'xml-root-name'}) { + $metadata->xmlRootName = (string)$xmlRootName; + } + + if (null !== $xmlRootNamespace = $elem->attributes()->{'xml-root-namespace'}) { + $metadata->xmlRootNamespace = (string)$xmlRootNamespace; + } + + $readOnlyClass = 'true' === strtolower($elem->attributes()->{'read-only'}); + + $discriminatorFieldName = (string)$elem->attributes()->{'discriminator-field-name'}; + $discriminatorMap = array(); + foreach ($elem->xpath('./discriminator-class') as $entry) { + if (!isset($entry->attributes()->value)) { + throw new RuntimeException('Each discriminator-class element must have a "value" attribute.'); + } + + $discriminatorMap[(string)$entry->attributes()->value] = (string)$entry; + } + + if ('true' === (string)$elem->attributes()->{'discriminator-disabled'}) { + $metadata->discriminatorDisabled = true; + } elseif (!empty($discriminatorFieldName) || !empty($discriminatorMap)) { + + $discriminatorGroups = array(); + foreach ($elem->xpath('./discriminator-groups/group') as $entry) { + $discriminatorGroups[] = (string)$entry; + } + $metadata->setDiscriminator($discriminatorFieldName, $discriminatorMap, $discriminatorGroups); + } + + foreach ($elem->xpath('./xml-namespace') as $xmlNamespace) { + if (!isset($xmlNamespace->attributes()->uri)) { + throw new RuntimeException('The prefix attribute must be set for all xml-namespace elements.'); + } + + if (isset($xmlNamespace->attributes()->prefix)) { + $prefix = (string)$xmlNamespace->attributes()->prefix; + } else { + $prefix = null; + } + + $metadata->registerNamespace((string)$xmlNamespace->attributes()->uri, $prefix); + } + + foreach ($elem->xpath('./xml-discriminator') as $xmlDiscriminator) { + if (isset($xmlDiscriminator->attributes()->attribute)) { + $metadata->xmlDiscriminatorAttribute = (string)$xmlDiscriminator->attributes()->attribute === 'true'; + } + if (isset($xmlDiscriminator->attributes()->cdata)) { + $metadata->xmlDiscriminatorCData = (string)$xmlDiscriminator->attributes()->cdata === 'true'; + } + if (isset($xmlDiscriminator->attributes()->namespace)) { + $metadata->xmlDiscriminatorNamespace = (string)$xmlDiscriminator->attributes()->namespace; + } + } + + foreach ($elem->xpath('./virtual-property') as $method) { + + if (isset($method->attributes()->expression)) { + $virtualPropertyMetadata = new ExpressionPropertyMetadata($name, (string)$method->attributes()->name, (string)$method->attributes()->expression); + } else { + if (!isset($method->attributes()->method)) { + throw new RuntimeException('The method attribute must be set for all virtual-property elements.'); + } + $virtualPropertyMetadata = new VirtualPropertyMetadata($name, (string)$method->attributes()->method); + } + + $propertiesMetadata[] = $virtualPropertyMetadata; + $propertiesNodes[] = $method; + } + + if (!$excludeAll) { + + foreach ($class->getProperties() as $property) { + if ($property->class !== $name || (isset($property->info) && $property->info['class'] !== $name)) { + continue; + } + + $propertiesMetadata[] = new PropertyMetadata($name, $pName = $property->getName()); + $pElems = $elem->xpath("./property[@name = '" . $pName . "']"); + + $propertiesNodes[] = $pElems ? reset($pElems) : null; + } + + foreach ($propertiesMetadata as $propertyKey => $pMetadata) { + + $isExclude = false; + $isExpose = $pMetadata instanceof VirtualPropertyMetadata + || $pMetadata instanceof ExpressionPropertyMetadata; + + $pElem = $propertiesNodes[$propertyKey]; + if (!empty($pElem)) { + + if (null !== $exclude = $pElem->attributes()->exclude) { + $isExclude = 'true' === strtolower($exclude); + } + + if ($isExclude) { + continue; + } + + if (null !== $expose = $pElem->attributes()->expose) { + $isExpose = 'true' === strtolower($expose); + } + + if (null !== $excludeIf = $pElem->attributes()->{'exclude-if'}) { + $pMetadata->excludeIf = $excludeIf; + } + + if (null !== $skip = $pElem->attributes()->{'skip-when-empty'}) { + $pMetadata->skipWhenEmpty = 'true' === strtolower($skip); + } + + if (null !== $excludeIf = $pElem->attributes()->{'expose-if'}) { + $pMetadata->excludeIf = "!(" . $excludeIf . ")"; + $isExpose = true; + } + + if (null !== $version = $pElem->attributes()->{'since-version'}) { + $pMetadata->sinceVersion = (string)$version; + } + + if (null !== $version = $pElem->attributes()->{'until-version'}) { + $pMetadata->untilVersion = (string)$version; + } + + if (null !== $serializedName = $pElem->attributes()->{'serialized-name'}) { + $pMetadata->serializedName = (string)$serializedName; + } + + if (null !== $type = $pElem->attributes()->type) { + $pMetadata->setType((string)$type); + } elseif (isset($pElem->type)) { + $pMetadata->setType((string)$pElem->type); + } + + if (null !== $groups = $pElem->attributes()->groups) { + $pMetadata->groups = preg_split('/\s*,\s*/', (string) trim($groups)); + } elseif (isset($pElem->groups)) { + $pMetadata->groups = (array) $pElem->groups->value; + } + + if (isset($pElem->{'xml-list'})) { + + $pMetadata->xmlCollection = true; + + $colConfig = $pElem->{'xml-list'}; + if (isset($colConfig->attributes()->inline)) { + $pMetadata->xmlCollectionInline = 'true' === (string)$colConfig->attributes()->inline; + } + + if (isset($colConfig->attributes()->{'entry-name'})) { + $pMetadata->xmlEntryName = (string)$colConfig->attributes()->{'entry-name'}; + } + + if (isset($colConfig->attributes()->{'skip-when-empty'})) { + $pMetadata->xmlCollectionSkipWhenEmpty = 'true' === (string)$colConfig->attributes()->{'skip-when-empty'}; + } else { + $pMetadata->xmlCollectionSkipWhenEmpty = true; + } + + if (isset($colConfig->attributes()->namespace)) { + $pMetadata->xmlEntryNamespace = (string)$colConfig->attributes()->namespace; + } + } + + if (isset($pElem->{'xml-map'})) { + $pMetadata->xmlCollection = true; + + $colConfig = $pElem->{'xml-map'}; + if (isset($colConfig->attributes()->inline)) { + $pMetadata->xmlCollectionInline = 'true' === (string)$colConfig->attributes()->inline; + } + + if (isset($colConfig->attributes()->{'entry-name'})) { + $pMetadata->xmlEntryName = (string)$colConfig->attributes()->{'entry-name'}; + } + + if (isset($colConfig->attributes()->namespace)) { + $pMetadata->xmlEntryNamespace = (string)$colConfig->attributes()->namespace; + } + + if (isset($colConfig->attributes()->{'key-attribute-name'})) { + $pMetadata->xmlKeyAttribute = (string)$colConfig->attributes()->{'key-attribute-name'}; + } + } + + if (isset($pElem->{'xml-element'})) { + $colConfig = $pElem->{'xml-element'}; + if (isset($colConfig->attributes()->cdata)) { + $pMetadata->xmlElementCData = 'true' === (string)$colConfig->attributes()->cdata; + } + + if (isset($colConfig->attributes()->namespace)) { + $pMetadata->xmlNamespace = (string)$colConfig->attributes()->namespace; + } + } + + if (isset($pElem->attributes()->{'xml-attribute'})) { + $pMetadata->xmlAttribute = 'true' === (string)$pElem->attributes()->{'xml-attribute'}; + } + + if (isset($pElem->attributes()->{'xml-attribute-map'})) { + $pMetadata->xmlAttributeMap = 'true' === (string)$pElem->attributes()->{'xml-attribute-map'}; + } + + if (isset($pElem->attributes()->{'xml-value'})) { + $pMetadata->xmlValue = 'true' === (string)$pElem->attributes()->{'xml-value'}; + } + + if (isset($pElem->attributes()->{'xml-key-value-pairs'})) { + $pMetadata->xmlKeyValuePairs = 'true' === (string)$pElem->attributes()->{'xml-key-value-pairs'}; + } + + if (isset($pElem->attributes()->{'max-depth'})) { + $pMetadata->maxDepth = (int)$pElem->attributes()->{'max-depth'}; + } + + //we need read-only before setter and getter set, because that method depends on flag being set + if (null !== $readOnly = $pElem->attributes()->{'read-only'}) { + $pMetadata->readOnly = 'true' === strtolower($readOnly); + } else { + $pMetadata->readOnly = $pMetadata->readOnly || $readOnlyClass; + } + + $getter = $pElem->attributes()->{'accessor-getter'}; + $setter = $pElem->attributes()->{'accessor-setter'}; + $pMetadata->setAccessor( + (string)($pElem->attributes()->{'access-type'} ?: $classAccessType), + $getter ? (string)$getter : null, + $setter ? (string)$setter : null + ); + + if (null !== $inline = $pElem->attributes()->inline) { + $pMetadata->inline = 'true' === strtolower($inline); + } + + } + + if ((ExclusionPolicy::NONE === (string)$exclusionPolicy && !$isExclude) + || (ExclusionPolicy::ALL === (string)$exclusionPolicy && $isExpose) + ) { + + $metadata->addPropertyMetadata($pMetadata); + } + } + } + + foreach ($elem->xpath('./callback-method') as $method) { + if (!isset($method->attributes()->type)) { + throw new RuntimeException('The type attribute must be set for all callback-method elements.'); + } + if (!isset($method->attributes()->name)) { + throw new RuntimeException('The name attribute must be set for all callback-method elements.'); + } + + switch ((string)$method->attributes()->type) { + case 'pre-serialize': + $metadata->addPreSerializeMethod(new MethodMetadata($name, (string)$method->attributes()->name)); + break; + + case 'post-serialize': + $metadata->addPostSerializeMethod(new MethodMetadata($name, (string)$method->attributes()->name)); + break; + + case 'post-deserialize': + $metadata->addPostDeserializeMethod(new MethodMetadata($name, (string)$method->attributes()->name)); + break; + + case 'handler': + if (!isset($method->attributes()->format)) { + throw new RuntimeException('The format attribute must be set for "handler" callback methods.'); + } + if (!isset($method->attributes()->direction)) { + throw new RuntimeException('The direction attribute must be set for "handler" callback methods.'); + } + + $direction = GraphNavigator::parseDirection((string)$method->attributes()->direction); + $format = (string)$method->attributes()->format; + $metadata->addHandlerCallback($direction, $format, (string)$method->attributes()->name); + + break; + + default: + throw new RuntimeException(sprintf('The type "%s" is not supported.', $method->attributes()->name)); + } + } + + return $metadata; + } + + protected function getExtension() + { + return 'xml'; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/YamlDriver.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/YamlDriver.php new file mode 100644 index 0000000..051ee14 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/Driver/YamlDriver.php @@ -0,0 +1,341 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata\Driver; + +use JMS\Serializer\Annotation\ExclusionPolicy; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\ExpressionPropertyMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Metadata\VirtualPropertyMetadata; +use Metadata\Driver\AbstractFileDriver; +use Metadata\MethodMetadata; +use Symfony\Component\Yaml\Yaml; + +class YamlDriver extends AbstractFileDriver +{ + protected function loadMetadataFromFile(\ReflectionClass $class, $file) + { + $config = Yaml::parse(file_get_contents($file)); + + if (!isset($config[$name = $class->name])) { + throw new RuntimeException(sprintf('Expected metadata for class %s to be defined in %s.', $class->name, $file)); + } + + $config = $config[$name]; + $metadata = new ClassMetadata($name); + $metadata->fileResources[] = $file; + $metadata->fileResources[] = $class->getFileName(); + $exclusionPolicy = isset($config['exclusion_policy']) ? strtoupper($config['exclusion_policy']) : 'NONE'; + $excludeAll = isset($config['exclude']) ? (Boolean)$config['exclude'] : false; + $classAccessType = isset($config['access_type']) ? $config['access_type'] : PropertyMetadata::ACCESS_TYPE_PROPERTY; + $readOnlyClass = isset($config['read_only']) ? (Boolean)$config['read_only'] : false; + $this->addClassProperties($metadata, $config); + + $propertiesMetadata = array(); + if (array_key_exists('virtual_properties', $config)) { + foreach ($config['virtual_properties'] as $methodName => $propertySettings) { + if (isset($propertySettings['exp'])) { + $virtualPropertyMetadata = new ExpressionPropertyMetadata($name, $methodName, $propertySettings['exp']); + unset($propertySettings['exp']); + + } else { + + if (!$class->hasMethod($methodName)) { + throw new RuntimeException('The method ' . $methodName . ' not found in class ' . $class->name); + } + $virtualPropertyMetadata = new VirtualPropertyMetadata($name, $methodName); + } + $propertiesMetadata[$methodName] = $virtualPropertyMetadata; + $config['properties'][$methodName] = $propertySettings; + } + } + + if (!$excludeAll) { + foreach ($class->getProperties() as $property) { + if ($property->class !== $name || (isset($property->info) && $property->info['class'] !== $name)) { + continue; + } + + $pName = $property->getName(); + $propertiesMetadata[$pName] = new PropertyMetadata($name, $pName); + } + + foreach ($propertiesMetadata as $pName => $pMetadata) { + $isExclude = false; + $isExpose = $pMetadata instanceof VirtualPropertyMetadata + || $pMetadata instanceof ExpressionPropertyMetadata + || (isset($config['properties']) && array_key_exists($pName, $config['properties'])); + + if (isset($config['properties'][$pName])) { + $pConfig = $config['properties'][$pName]; + + if (isset($pConfig['exclude'])) { + $isExclude = (Boolean)$pConfig['exclude']; + } + + if ($isExclude) { + continue; + } + + if (isset($pConfig['expose'])) { + $isExpose = (Boolean)$pConfig['expose']; + } + + if (isset($pConfig['skip_when_empty'])) { + $pMetadata->skipWhenEmpty = (Boolean)$pConfig['skip_when_empty']; + } + + if (isset($pConfig['since_version'])) { + $pMetadata->sinceVersion = (string)$pConfig['since_version']; + } + + if (isset($pConfig['until_version'])) { + $pMetadata->untilVersion = (string)$pConfig['until_version']; + } + + if (isset($pConfig['exclude_if'])) { + $pMetadata->excludeIf = (string)$pConfig['exclude_if']; + } + + if (isset($pConfig['expose_if'])) { + $pMetadata->excludeIf = "!(" . $pConfig['expose_if'] . ")"; + } + + if (isset($pConfig['serialized_name'])) { + $pMetadata->serializedName = (string)$pConfig['serialized_name']; + } + + if (isset($pConfig['type'])) { + $pMetadata->setType((string)$pConfig['type']); + } + + if (isset($pConfig['groups'])) { + $pMetadata->groups = $pConfig['groups']; + } + + if (isset($pConfig['xml_list'])) { + $pMetadata->xmlCollection = true; + + $colConfig = $pConfig['xml_list']; + if (isset($colConfig['inline'])) { + $pMetadata->xmlCollectionInline = (Boolean)$colConfig['inline']; + } + + if (isset($colConfig['entry_name'])) { + $pMetadata->xmlEntryName = (string)$colConfig['entry_name']; + } + + if (isset($colConfig['skip_when_empty'])) { + $pMetadata->xmlCollectionSkipWhenEmpty = (Boolean)$colConfig['skip_when_empty']; + } else { + $pMetadata->xmlCollectionSkipWhenEmpty = true; + } + + if (isset($colConfig['namespace'])) { + $pMetadata->xmlEntryNamespace = (string)$colConfig['namespace']; + } + } + + if (isset($pConfig['xml_map'])) { + $pMetadata->xmlCollection = true; + + $colConfig = $pConfig['xml_map']; + if (isset($colConfig['inline'])) { + $pMetadata->xmlCollectionInline = (Boolean)$colConfig['inline']; + } + + if (isset($colConfig['entry_name'])) { + $pMetadata->xmlEntryName = (string)$colConfig['entry_name']; + } + + if (isset($colConfig['namespace'])) { + $pMetadata->xmlEntryNamespace = (string)$colConfig['namespace']; + } + + if (isset($colConfig['key_attribute_name'])) { + $pMetadata->xmlKeyAttribute = $colConfig['key_attribute_name']; + } + + } + + if (isset($pConfig['xml_element'])) { + $colConfig = $pConfig['xml_element']; + if (isset($colConfig['cdata'])) { + $pMetadata->xmlElementCData = (Boolean)$colConfig['cdata']; + } + + if (isset($colConfig['namespace'])) { + $pMetadata->xmlNamespace = (string)$colConfig['namespace']; + } + } + + if (isset($pConfig['xml_attribute'])) { + $pMetadata->xmlAttribute = (Boolean)$pConfig['xml_attribute']; + } + + if (isset($pConfig['xml_attribute_map'])) { + $pMetadata->xmlAttributeMap = (Boolean)$pConfig['xml_attribute_map']; + } + + if (isset($pConfig['xml_value'])) { + $pMetadata->xmlValue = (Boolean)$pConfig['xml_value']; + } + + if (isset($pConfig['xml_key_value_pairs'])) { + $pMetadata->xmlKeyValuePairs = (Boolean)$pConfig['xml_key_value_pairs']; + } + + //we need read_only before setter and getter set, because that method depends on flag being set + if (isset($pConfig['read_only'])) { + $pMetadata->readOnly = (Boolean)$pConfig['read_only']; + } else { + $pMetadata->readOnly = $pMetadata->readOnly || $readOnlyClass; + } + + $pMetadata->setAccessor( + isset($pConfig['access_type']) ? $pConfig['access_type'] : $classAccessType, + isset($pConfig['accessor']['getter']) ? $pConfig['accessor']['getter'] : null, + isset($pConfig['accessor']['setter']) ? $pConfig['accessor']['setter'] : null + ); + + if (isset($pConfig['inline'])) { + $pMetadata->inline = (Boolean)$pConfig['inline']; + } + + if (isset($pConfig['max_depth'])) { + $pMetadata->maxDepth = (int)$pConfig['max_depth']; + } + } + if ((ExclusionPolicy::NONE === $exclusionPolicy && !$isExclude) + || (ExclusionPolicy::ALL === $exclusionPolicy && $isExpose) + ) { + $metadata->addPropertyMetadata($pMetadata); + } + } + } + + if (isset($config['handler_callbacks'])) { + foreach ($config['handler_callbacks'] as $directionName => $formats) { + $direction = GraphNavigator::parseDirection($directionName); + foreach ($formats as $format => $methodName) { + $metadata->addHandlerCallback($direction, $format, $methodName); + } + } + } + + if (isset($config['callback_methods'])) { + $cConfig = $config['callback_methods']; + + if (isset($cConfig['pre_serialize'])) { + $metadata->preSerializeMethods = $this->getCallbackMetadata($class, $cConfig['pre_serialize']); + } + if (isset($cConfig['post_serialize'])) { + $metadata->postSerializeMethods = $this->getCallbackMetadata($class, $cConfig['post_serialize']); + } + if (isset($cConfig['post_deserialize'])) { + $metadata->postDeserializeMethods = $this->getCallbackMetadata($class, $cConfig['post_deserialize']); + } + } + + return $metadata; + } + + protected function getExtension() + { + return 'yml'; + } + + private function addClassProperties(ClassMetadata $metadata, array $config) + { + if (isset($config['custom_accessor_order']) && !isset($config['accessor_order'])) { + $config['accessor_order'] = 'custom'; + } + + if (isset($config['accessor_order'])) { + $metadata->setAccessorOrder($config['accessor_order'], isset($config['custom_accessor_order']) ? $config['custom_accessor_order'] : array()); + } + + if (isset($config['xml_root_name'])) { + $metadata->xmlRootName = (string)$config['xml_root_name']; + } + + if (isset($config['xml_root_namespace'])) { + $metadata->xmlRootNamespace = (string)$config['xml_root_namespace']; + } + + if (array_key_exists('xml_namespaces', $config)) { + + foreach ($config['xml_namespaces'] as $prefix => $uri) { + $metadata->registerNamespace($uri, $prefix); + } + + } + + if (isset($config['discriminator'])) { + if (isset($config['discriminator']['disabled']) && true === $config['discriminator']['disabled']) { + $metadata->discriminatorDisabled = true; + } else { + if (!isset($config['discriminator']['field_name'])) { + throw new RuntimeException('The "field_name" attribute must be set for discriminators.'); + } + + if (!isset($config['discriminator']['map']) || !is_array($config['discriminator']['map'])) { + throw new RuntimeException('The "map" attribute must be set, and be an array for discriminators.'); + } + $groups = isset($config['discriminator']['groups']) ? $config['discriminator']['groups'] : array(); + $metadata->setDiscriminator($config['discriminator']['field_name'], $config['discriminator']['map'], $groups); + + if (isset($config['discriminator']['xml_attribute'])) { + $metadata->xmlDiscriminatorAttribute = (bool)$config['discriminator']['xml_attribute']; + } + if (isset($config['discriminator']['xml_element'])) { + if (isset($config['discriminator']['xml_element']['cdata'])) { + $metadata->xmlDiscriminatorCData = (bool)$config['discriminator']['xml_element']['cdata']; + } + if (isset($config['discriminator']['xml_element']['namespace'])) { + $metadata->xmlDiscriminatorNamespace = (string)$config['discriminator']['xml_element']['namespace']; + } + } + + } + } + } + + private function getCallbackMetadata(\ReflectionClass $class, $config) + { + if (is_string($config)) { + $config = array($config); + } elseif (!is_array($config)) { + throw new RuntimeException(sprintf('callback methods expects a string, or an array of strings that represent method names, but got %s.', json_encode($config['pre_serialize']))); + } + + $methods = array(); + foreach ($config as $name) { + if (!$class->hasMethod($name)) { + throw new RuntimeException(sprintf('The method %s does not exist in class %s.', $name, $class->name)); + } + + $methods[] = new MethodMetadata($class->name, $name); + } + + return $methods; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/ExpressionPropertyMetadata.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/ExpressionPropertyMetadata.php new file mode 100644 index 0000000..736007a --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/ExpressionPropertyMetadata.php @@ -0,0 +1,127 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata; + +use JMS\Serializer\Exception\ExpressionLanguageRequiredException; + +/** + * @Annotation + * @Target("METHOD") + * + * @author Asmir Mustafic + */ +class ExpressionPropertyMetadata extends PropertyMetadata +{ + /** + * @var string + */ + public $expression; + + public function __construct($class, $fieldName, $expression) + { + $this->class = $class; + $this->name = $fieldName; + $this->expression = $expression; + $this->readOnly = true; + } + + public function setAccessor($type, $getter = null, $setter = null) + { + } + + /** + * @param object $object + * @return mixed + */ + public function getValue($object) + { + throw new ExpressionLanguageRequiredException(sprintf('The property %s on %s requires the expression accessor strategy to be enabled.', $this->name, $this->class)); + } + + public function setValue($obj, $value) + { + throw new \LogicException('ExpressionPropertyMetadata is immutable.'); + } + + public function serialize() + { + return serialize(array( + $this->sinceVersion, + $this->untilVersion, + $this->groups, + $this->serializedName, + $this->type, + $this->xmlCollection, + $this->xmlCollectionInline, + $this->xmlEntryName, + $this->xmlKeyAttribute, + $this->xmlAttribute, + $this->xmlValue, + $this->xmlNamespace, + $this->xmlKeyValuePairs, + $this->xmlElementCData, + $this->xmlAttributeMap, + $this->maxDepth, + $this->getter, + $this->setter, + $this->inline, + $this->readOnly, + $this->class, + $this->name, + 'excludeIf' => $this->excludeIf, + 'expression' => $this->expression, + )); + } + + public function unserialize($str) + { + $unserialized = unserialize($str); + list( + $this->sinceVersion, + $this->untilVersion, + $this->groups, + $this->serializedName, + $this->type, + $this->xmlCollection, + $this->xmlCollectionInline, + $this->xmlEntryName, + $this->xmlKeyAttribute, + $this->xmlAttribute, + $this->xmlValue, + $this->xmlNamespace, + $this->xmlKeyValuePairs, + $this->xmlElementCData, + $this->xmlAttributeMap, + $this->maxDepth, + $this->getter, + $this->setter, + $this->inline, + $this->readOnly, + $this->class, + $this->name + ) = $unserialized; + + if (isset($unserialized['excludeIf'])) { + $this->excludeIf = $unserialized['excludeIf']; + } + if (isset($unserialized['expression'])) { + $this->expression = $unserialized['expression']; + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/PropertyMetadata.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/PropertyMetadata.php new file mode 100644 index 0000000..87d4d84 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/PropertyMetadata.php @@ -0,0 +1,188 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata; + +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\TypeParser; +use Metadata\PropertyMetadata as BasePropertyMetadata; + +class PropertyMetadata extends BasePropertyMetadata +{ + const ACCESS_TYPE_PROPERTY = 'property'; + const ACCESS_TYPE_PUBLIC_METHOD = 'public_method'; + + public $sinceVersion; + public $untilVersion; + public $groups; + public $serializedName; + public $type; + public $xmlCollection = false; + public $xmlCollectionInline = false; + public $xmlCollectionSkipWhenEmpty = true; + public $xmlEntryName; + public $xmlEntryNamespace; + public $xmlKeyAttribute; + public $xmlAttribute = false; + public $xmlValue = false; + public $xmlNamespace; + public $xmlKeyValuePairs = false; + public $xmlElementCData = true; + public $getter; + public $setter; + public $inline = false; + public $skipWhenEmpty = false; + public $readOnly = false; + public $xmlAttributeMap = false; + public $maxDepth = null; + public $excludeIf = null; + + private static $typeParser; + + public function setAccessor($type, $getter = null, $setter = null) + { + if (self::ACCESS_TYPE_PUBLIC_METHOD === $type) { + $class = $this->reflection->getDeclaringClass(); + + if (empty($getter)) { + if ($class->hasMethod('get' . $this->name) && $class->getMethod('get' . $this->name)->isPublic()) { + $getter = 'get' . $this->name; + } elseif ($class->hasMethod('is' . $this->name) && $class->getMethod('is' . $this->name)->isPublic()) { + $getter = 'is' . $this->name; + } elseif ($class->hasMethod('has' . $this->name) && $class->getMethod('has' . $this->name)->isPublic()) { + $getter = 'has' . $this->name; + } else { + throw new RuntimeException(sprintf('There is neither a public %s method, nor a public %s method, nor a public %s method in class %s. Please specify which public method should be used for retrieving the value of the property %s.', 'get' . ucfirst($this->name), 'is' . ucfirst($this->name), 'has' . ucfirst($this->name), $this->class, $this->name)); + } + } + + if (empty($setter) && !$this->readOnly) { + if ($class->hasMethod('set' . $this->name) && $class->getMethod('set' . $this->name)->isPublic()) { + $setter = 'set' . $this->name; + } else { + throw new RuntimeException(sprintf('There is no public %s method in class %s. Please specify which public method should be used for setting the value of the property %s.', 'set' . ucfirst($this->name), $this->class, $this->name)); + } + } + } + + $this->getter = $getter; + $this->setter = $setter; + } + + public function getValue($obj) + { + if (null === $this->getter) { + return parent::getValue($obj); + } + + return $obj->{$this->getter}(); + } + + public function setValue($obj, $value) + { + if (null === $this->setter) { + parent::setValue($obj, $value); + return; + } + + $obj->{$this->setter}($value); + } + + public function setType($type) + { + if (null === self::$typeParser) { + self::$typeParser = new TypeParser(); + } + + $this->type = self::$typeParser->parse($type); + } + + public function serialize() + { + return serialize(array( + $this->sinceVersion, + $this->untilVersion, + $this->groups, + $this->serializedName, + $this->type, + $this->xmlCollection, + $this->xmlCollectionInline, + $this->xmlEntryName, + $this->xmlKeyAttribute, + $this->xmlAttribute, + $this->xmlValue, + $this->xmlNamespace, + $this->xmlKeyValuePairs, + $this->xmlElementCData, + $this->getter, + $this->setter, + $this->inline, + $this->readOnly, + $this->xmlAttributeMap, + $this->maxDepth, + parent::serialize(), + 'xmlEntryNamespace' => $this->xmlEntryNamespace, + 'xmlCollectionSkipWhenEmpty' => $this->xmlCollectionSkipWhenEmpty, + 'excludeIf' => $this->excludeIf, + 'skipWhenEmpty' => $this->skipWhenEmpty, + )); + } + + public function unserialize($str) + { + $unserialized = unserialize($str); + list( + $this->sinceVersion, + $this->untilVersion, + $this->groups, + $this->serializedName, + $this->type, + $this->xmlCollection, + $this->xmlCollectionInline, + $this->xmlEntryName, + $this->xmlKeyAttribute, + $this->xmlAttribute, + $this->xmlValue, + $this->xmlNamespace, + $this->xmlKeyValuePairs, + $this->xmlElementCData, + $this->getter, + $this->setter, + $this->inline, + $this->readOnly, + $this->xmlAttributeMap, + $this->maxDepth, + $parentStr + ) = $unserialized; + + if (isset($unserialized['xmlEntryNamespace'])) { + $this->xmlEntryNamespace = $unserialized['xmlEntryNamespace']; + } + if (isset($unserialized['xmlCollectionSkipWhenEmpty'])) { + $this->xmlCollectionSkipWhenEmpty = $unserialized['xmlCollectionSkipWhenEmpty']; + } + if (isset($unserialized['excludeIf'])) { + $this->excludeIf = $unserialized['excludeIf']; + } + if (isset($unserialized['skipWhenEmpty'])) { + $this->skipWhenEmpty = $unserialized['skipWhenEmpty']; + } + + parent::unserialize($parentStr); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/StaticPropertyMetadata.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/StaticPropertyMetadata.php new file mode 100644 index 0000000..f4ad57c --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/StaticPropertyMetadata.php @@ -0,0 +1,101 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata; + +class StaticPropertyMetadata extends PropertyMetadata +{ + private $value; + + public function __construct($className, $fieldName, $fieldValue, array $groups = array()) + { + $this->class = $className; + $this->name = $fieldName; + $this->value = $fieldValue; + $this->readOnly = true; + $this->groups = $groups; + } + + public function getValue($obj) + { + return $this->value; + } + + public function setValue($obj, $value) + { + throw new \LogicException('StaticPropertyMetadata is immutable.'); + } + + public function setAccessor($type, $getter = null, $setter = null) + { + } + + public function serialize() + { + return serialize(array( + $this->sinceVersion, + $this->untilVersion, + $this->groups, + $this->serializedName, + $this->type, + $this->xmlCollection, + $this->xmlCollectionInline, + $this->xmlEntryName, + $this->xmlKeyAttribute, + $this->xmlAttribute, + $this->xmlValue, + $this->xmlNamespace, + $this->xmlKeyValuePairs, + $this->xmlElementCData, + $this->getter, + $this->setter, + $this->inline, + $this->readOnly, + $this->class, + $this->name, + $this->value + )); + } + + public function unserialize($str) + { + list( + $this->sinceVersion, + $this->untilVersion, + $this->groups, + $this->serializedName, + $this->type, + $this->xmlCollection, + $this->xmlCollectionInline, + $this->xmlEntryName, + $this->xmlKeyAttribute, + $this->xmlAttribute, + $this->xmlValue, + $this->xmlNamespace, + $this->xmlKeyValuePairs, + $this->xmlElementCData, + $this->getter, + $this->setter, + $this->inline, + $this->readOnly, + $this->class, + $this->name, + $this->value + ) = unserialize($str); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Metadata/VirtualPropertyMetadata.php b/vendor/jms/serializer/src/JMS/Serializer/Metadata/VirtualPropertyMetadata.php new file mode 100644 index 0000000..8bb97c2 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Metadata/VirtualPropertyMetadata.php @@ -0,0 +1,107 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Metadata; + +class VirtualPropertyMetadata extends PropertyMetadata +{ + public function __construct($class, $methodName) + { + if (0 === strpos($methodName, 'get')) { + $fieldName = lcfirst(substr($methodName, 3)); + } else { + $fieldName = $methodName; + } + + $this->class = $class; + $this->name = $fieldName; + $this->getter = $methodName; + $this->readOnly = true; + } + + public function setValue($obj, $value) + { + throw new \LogicException('VirtualPropertyMetadata is immutable.'); + } + + public function setAccessor($type, $getter = null, $setter = null) + { + } + + public function serialize() + { + return serialize(array( + $this->sinceVersion, + $this->untilVersion, + $this->groups, + $this->serializedName, + $this->type, + $this->xmlCollection, + $this->xmlCollectionInline, + $this->xmlEntryName, + $this->xmlKeyAttribute, + $this->xmlAttribute, + $this->xmlValue, + $this->xmlNamespace, + $this->xmlKeyValuePairs, + $this->xmlElementCData, + $this->xmlAttributeMap, + $this->maxDepth, + $this->getter, + $this->setter, + $this->inline, + $this->readOnly, + $this->class, + $this->name, + 'excludeIf' => $this->excludeIf, + )); + } + + public function unserialize($str) + { + $unserialized = unserialize($str); + list( + $this->sinceVersion, + $this->untilVersion, + $this->groups, + $this->serializedName, + $this->type, + $this->xmlCollection, + $this->xmlCollectionInline, + $this->xmlEntryName, + $this->xmlKeyAttribute, + $this->xmlAttribute, + $this->xmlValue, + $this->xmlNamespace, + $this->xmlKeyValuePairs, + $this->xmlElementCData, + $this->xmlAttributeMap, + $this->maxDepth, + $this->getter, + $this->setter, + $this->inline, + $this->readOnly, + $this->class, + $this->name + ) = $unserialized; + + if (isset($unserialized['excludeIf'])) { + $this->excludeIf = $unserialized['excludeIf']; + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Naming/AdvancedNamingStrategyInterface.php b/vendor/jms/serializer/src/JMS/Serializer/Naming/AdvancedNamingStrategyInterface.php new file mode 100644 index 0000000..0d243ef --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Naming/AdvancedNamingStrategyInterface.php @@ -0,0 +1,43 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Naming; + +use JMS\Serializer\Context; +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * Interface for advanced property naming strategies. + * + * Implementations translate the property name to a serialized name that is + * displayed. It allows advanced strategy thanks to context parameter. + * + * @author Vincent Rasquier + */ +interface AdvancedNamingStrategyInterface +{ + /** + * Translates the name of the property to the serialized version. + * + * @param PropertyMetadata $property + * @param Context $context + * + * @return string + */ + public function getPropertyName(PropertyMetadata $property, Context $context); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Naming/CacheNamingStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Naming/CacheNamingStrategy.php new file mode 100644 index 0000000..cb3d31b --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Naming/CacheNamingStrategy.php @@ -0,0 +1,42 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Naming; + +use JMS\Serializer\Metadata\PropertyMetadata; + +class CacheNamingStrategy implements PropertyNamingStrategyInterface +{ + private $delegate; + private $cache; + + public function __construct(PropertyNamingStrategyInterface $delegate) + { + $this->delegate = $delegate; + $this->cache = new \SplObjectStorage(); + } + + public function translateName(PropertyMetadata $property) + { + if (isset($this->cache[$property])) { + return $this->cache[$property]; + } + + return $this->cache[$property] = $this->delegate->translateName($property); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Naming/CamelCaseNamingStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Naming/CamelCaseNamingStrategy.php new file mode 100644 index 0000000..8c15153 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Naming/CamelCaseNamingStrategy.php @@ -0,0 +1,52 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Naming; + +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * Generic naming strategy which translates a camel-cased property name. + * + * @author Johannes M. Schmitt + */ +class CamelCaseNamingStrategy implements PropertyNamingStrategyInterface +{ + private $separator; + private $lowerCase; + + public function __construct($separator = '_', $lowerCase = true) + { + $this->separator = $separator; + $this->lowerCase = $lowerCase; + } + + /** + * {@inheritDoc} + */ + public function translateName(PropertyMetadata $property) + { + $name = preg_replace('/[A-Z]/', $this->separator . '\\0', $property->name); + + if ($this->lowerCase) { + return strtolower($name); + } + + return ucfirst($name); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Naming/IdenticalPropertyNamingStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Naming/IdenticalPropertyNamingStrategy.php new file mode 100644 index 0000000..529db3d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Naming/IdenticalPropertyNamingStrategy.php @@ -0,0 +1,29 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Naming; + +use JMS\Serializer\Metadata\PropertyMetadata; + +class IdenticalPropertyNamingStrategy implements PropertyNamingStrategyInterface +{ + public function translateName(PropertyMetadata $property) + { + return $property->name; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Naming/PropertyNamingStrategyInterface.php b/vendor/jms/serializer/src/JMS/Serializer/Naming/PropertyNamingStrategyInterface.php new file mode 100644 index 0000000..6d764cb --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Naming/PropertyNamingStrategyInterface.php @@ -0,0 +1,41 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Naming; + +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * Interface for property naming strategies. + * + * Implementations translate the property name to a serialized name that is + * displayed. + * + * @author Johannes M. Schmitt + */ +interface PropertyNamingStrategyInterface +{ + /** + * Translates the name of the property to the serialized version. + * + * @param PropertyMetadata $property + * + * @return string + */ + public function translateName(PropertyMetadata $property); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Naming/SerializedNameAnnotationStrategy.php b/vendor/jms/serializer/src/JMS/Serializer/Naming/SerializedNameAnnotationStrategy.php new file mode 100644 index 0000000..e30060c --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Naming/SerializedNameAnnotationStrategy.php @@ -0,0 +1,48 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Naming; + +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * Naming strategy which uses an annotation to translate the property name. + * + * @author Johannes M. Schmitt + */ +class SerializedNameAnnotationStrategy implements PropertyNamingStrategyInterface +{ + private $delegate; + + public function __construct(PropertyNamingStrategyInterface $namingStrategy) + { + $this->delegate = $namingStrategy; + } + + /** + * {@inheritDoc} + */ + public function translateName(PropertyMetadata $property) + { + if (null !== $name = $property->serializedName) { + return $name; + } + + return $this->delegate->translateName($property); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/NullAwareVisitorInterface.php b/vendor/jms/serializer/src/JMS/Serializer/NullAwareVisitorInterface.php new file mode 100644 index 0000000..619e0c5 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/NullAwareVisitorInterface.php @@ -0,0 +1,32 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +interface NullAwareVisitorInterface extends VisitorInterface +{ + /** + * Determine if a value conveys a null value. + * An example could be an xml element (Dom, SimpleXml, ...) that is tagged with a xsi:nil attribute + * + * @param mixed $value + * + * @return bool + */ + public function isNull($value); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/SerializationContext.php b/vendor/jms/serializer/src/JMS/Serializer/SerializationContext.php new file mode 100644 index 0000000..2118dfd --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/SerializationContext.php @@ -0,0 +1,143 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Exception\RuntimeException; +use Metadata\MetadataFactoryInterface; + +class SerializationContext extends Context +{ + /** @var \SplObjectStorage */ + private $visitingSet; + + /** @var \SplStack */ + private $visitingStack; + + /** + * @var string + */ + private $initialType; + + public static function create() + { + return new self(); + } + + /** + * @param string $format + */ + public function initialize($format, VisitorInterface $visitor, GraphNavigator $navigator, MetadataFactoryInterface $factory) + { + parent::initialize($format, $visitor, $navigator, $factory); + + $this->visitingSet = new \SplObjectStorage(); + $this->visitingStack = new \SplStack(); + } + + public function startVisiting($object) + { + if (!is_object($object)) { + return; + } + $this->visitingSet->attach($object); + $this->visitingStack->push($object); + } + + public function stopVisiting($object) + { + if (!is_object($object)) { + return; + } + $this->visitingSet->detach($object); + $poppedObject = $this->visitingStack->pop(); + + if ($object !== $poppedObject) { + throw new RuntimeException('Context visitingStack not working well'); + } + } + + public function isVisiting($object) + { + if (!is_object($object)) { + return false; + } + + return $this->visitingSet->contains($object); + } + + public function getPath() + { + $path = array(); + foreach ($this->visitingStack as $obj) { + $path[] = get_class($obj); + } + + if (!$path) { + return null; + } + + return implode(' -> ', $path); + } + + public function getDirection() + { + return GraphNavigator::DIRECTION_SERIALIZATION; + } + + public function getDepth() + { + return $this->visitingStack->count(); + } + + public function getObject() + { + return !$this->visitingStack->isEmpty() ? $this->visitingStack->top() : null; + } + + public function getVisitingStack() + { + return $this->visitingStack; + } + + public function getVisitingSet() + { + return $this->visitingSet; + } + + /** + * @param string $type + * @return $this + */ + public function setInitialType($type) + { + $this->initialType = $type; + $this->attributes->set('initial_type', $type); + return $this; + } + + /** + * @return string|null + */ + public function getInitialType() + { + return $this->initialType + ? $this->initialType + : $this->attributes->containsKey('initial_type') ? $this->attributes->get('initial_type')->get() : null; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Serializer.php b/vendor/jms/serializer/src/JMS/Serializer/Serializer.php new file mode 100644 index 0000000..5a1273e --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Serializer.php @@ -0,0 +1,251 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Construction\ObjectConstructorInterface; +use JMS\Serializer\ContextFactory\DefaultDeserializationContextFactory; +use JMS\Serializer\ContextFactory\DefaultSerializationContextFactory; +use JMS\Serializer\ContextFactory\DeserializationContextFactoryInterface; +use JMS\Serializer\ContextFactory\SerializationContextFactoryInterface; +use JMS\Serializer\EventDispatcher\EventDispatcherInterface; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\Exception\UnsupportedFormatException; +use JMS\Serializer\Expression\ExpressionEvaluatorInterface; +use JMS\Serializer\Handler\HandlerRegistryInterface; +use Metadata\MetadataFactoryInterface; +use PhpCollection\MapInterface; + +/** + * Serializer Implementation. + * + * @author Johannes M. Schmitt + */ +class Serializer implements SerializerInterface, ArrayTransformerInterface +{ + private $factory; + private $handlerRegistry; + private $objectConstructor; + private $dispatcher; + private $typeParser; + + /** @var \PhpCollection\MapInterface */ + private $serializationVisitors; + + /** @var \PhpCollection\MapInterface */ + private $deserializationVisitors; + + private $navigator; + + /** + * @var SerializationContextFactoryInterface + */ + private $serializationContextFactory; + + /** + * @var DeserializationContextFactoryInterface + */ + private $deserializationContextFactory; + + /** + * Constructor. + * + * @param \Metadata\MetadataFactoryInterface $factory + * @param Handler\HandlerRegistryInterface $handlerRegistry + * @param Construction\ObjectConstructorInterface $objectConstructor + * @param \PhpCollection\MapInterface $serializationVisitors of VisitorInterface + * @param \PhpCollection\MapInterface $deserializationVisitors of VisitorInterface + * @param EventDispatcher\EventDispatcherInterface $dispatcher + * @param TypeParser $typeParser + * @param ExpressionEvaluatorInterface|null $expressionEvaluator + */ + public function __construct( + MetadataFactoryInterface $factory, + HandlerRegistryInterface $handlerRegistry, + ObjectConstructorInterface $objectConstructor, + MapInterface $serializationVisitors, + MapInterface $deserializationVisitors, + EventDispatcherInterface $dispatcher = null, + TypeParser $typeParser = null, + ExpressionEvaluatorInterface $expressionEvaluator = null + ) + { + $this->factory = $factory; + $this->handlerRegistry = $handlerRegistry; + $this->objectConstructor = $objectConstructor; + $this->dispatcher = $dispatcher; + $this->typeParser = $typeParser ?: new TypeParser(); + $this->serializationVisitors = $serializationVisitors; + $this->deserializationVisitors = $deserializationVisitors; + + $this->navigator = new GraphNavigator($this->factory, $this->handlerRegistry, $this->objectConstructor, $this->dispatcher, $expressionEvaluator); + + $this->serializationContextFactory = new DefaultSerializationContextFactory(); + $this->deserializationContextFactory = new DefaultDeserializationContextFactory(); + } + + public function serialize($data, $format, SerializationContext $context = null) + { + if (null === $context) { + $context = $this->serializationContextFactory->createSerializationContext(); + } + + return $this->serializationVisitors->get($format) + ->map(function (VisitorInterface $visitor) use ($context, $data, $format) { + $type = $context->getInitialType() !== null ? $this->typeParser->parse($context->getInitialType()) : null; + + $this->visit($visitor, $context, $visitor->prepare($data), $format, $type); + + return $visitor->getResult(); + }) + ->getOrThrow(new UnsupportedFormatException(sprintf('The format "%s" is not supported for serialization.', $format))); + } + + public function deserialize($data, $type, $format, DeserializationContext $context = null) + { + if (null === $context) { + $context = $this->deserializationContextFactory->createDeserializationContext(); + } + + return $this->deserializationVisitors->get($format) + ->map(function (VisitorInterface $visitor) use ($context, $data, $format, $type) { + $preparedData = $visitor->prepare($data); + $navigatorResult = $this->visit($visitor, $context, $preparedData, $format, $this->typeParser->parse($type)); + + return $this->handleDeserializeResult($visitor->getResult(), $navigatorResult); + }) + ->getOrThrow(new UnsupportedFormatException(sprintf('The format "%s" is not supported for deserialization.', $format))); + } + + /** + * {@InheritDoc} + */ + public function toArray($data, SerializationContext $context = null) + { + if (null === $context) { + $context = $this->serializationContextFactory->createSerializationContext(); + } + + return $this->serializationVisitors->get('json') + ->map(function (JsonSerializationVisitor $visitor) use ($context, $data) { + $type = $context->getInitialType() !== null ? $this->typeParser->parse($context->getInitialType()) : null; + + $this->visit($visitor, $context, $data, 'json', $type); + $result = $this->convertArrayObjects($visitor->getRoot()); + + if (!is_array($result)) { + throw new RuntimeException(sprintf( + 'The input data of type "%s" did not convert to an array, but got a result of type "%s".', + is_object($data) ? get_class($data) : gettype($data), + is_object($result) ? get_class($result) : gettype($result) + )); + } + + return $result; + }) + ->get(); + } + + /** + * {@InheritDoc} + */ + public function fromArray(array $data, $type, DeserializationContext $context = null) + { + if (null === $context) { + $context = $this->deserializationContextFactory->createDeserializationContext(); + } + + return $this->deserializationVisitors->get('json') + ->map(function (JsonDeserializationVisitor $visitor) use ($data, $type, $context) { + $navigatorResult = $this->visit($visitor, $context, $data, 'json', $this->typeParser->parse($type)); + + return $this->handleDeserializeResult($visitor->getResult(), $navigatorResult); + }) + ->get(); + } + + private function visit(VisitorInterface $visitor, Context $context, $data, $format, array $type = null) + { + $context->initialize( + $format, + $visitor, + $this->navigator, + $this->factory + ); + + $visitor->setNavigator($this->navigator); + + return $this->navigator->accept($data, $type, $context); + } + + private function handleDeserializeResult($visitorResult, $navigatorResult) + { + // This is a special case if the root is handled by a callback on the object itself. + if (null === $visitorResult && null !== $navigatorResult) { + return $navigatorResult; + } + + return $visitorResult; + } + + private function convertArrayObjects($data) + { + if ($data instanceof \ArrayObject || $data instanceof \stdClass) { + $data = (array)$data; + } + if (is_array($data)) { + foreach ($data as $k => $v) { + $data[$k] = $this->convertArrayObjects($v); + } + } + + return $data; + } + + /** + * @return MetadataFactoryInterface + */ + public function getMetadataFactory() + { + return $this->factory; + } + + /** + * @param SerializationContextFactoryInterface $serializationContextFactory + * + * @return self + */ + public function setSerializationContextFactory(SerializationContextFactoryInterface $serializationContextFactory) + { + $this->serializationContextFactory = $serializationContextFactory; + + return $this; + } + + /** + * @param DeserializationContextFactoryInterface $deserializationContextFactory + * + * @return self + */ + public function setDeserializationContextFactory(DeserializationContextFactoryInterface $deserializationContextFactory) + { + $this->deserializationContextFactory = $deserializationContextFactory; + + return $this; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/SerializerBuilder.php b/vendor/jms/serializer/src/JMS/Serializer/SerializerBuilder.php new file mode 100644 index 0000000..6ce2662 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/SerializerBuilder.php @@ -0,0 +1,502 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use Doctrine\Common\Annotations\AnnotationReader; +use Doctrine\Common\Annotations\CachedReader; +use Doctrine\Common\Annotations\Reader; +use Doctrine\Common\Cache\FilesystemCache; +use JMS\Serializer\Accessor\AccessorStrategyInterface; +use JMS\Serializer\Accessor\DefaultAccessorStrategy; +use JMS\Serializer\Accessor\ExpressionAccessorStrategy; +use JMS\Serializer\Builder\DefaultDriverFactory; +use JMS\Serializer\Builder\DriverFactoryInterface; +use JMS\Serializer\Construction\ObjectConstructorInterface; +use JMS\Serializer\Construction\UnserializeObjectConstructor; +use JMS\Serializer\ContextFactory\CallableDeserializationContextFactory; +use JMS\Serializer\ContextFactory\CallableSerializationContextFactory; +use JMS\Serializer\ContextFactory\DeserializationContextFactoryInterface; +use JMS\Serializer\ContextFactory\SerializationContextFactoryInterface; +use JMS\Serializer\EventDispatcher\EventDispatcher; +use JMS\Serializer\EventDispatcher\Subscriber\DoctrineProxySubscriber; +use JMS\Serializer\Exception\InvalidArgumentException; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\Expression\ExpressionEvaluatorInterface; +use JMS\Serializer\Handler\ArrayCollectionHandler; +use JMS\Serializer\Handler\DateHandler; +use JMS\Serializer\Handler\HandlerRegistry; +use JMS\Serializer\Handler\PhpCollectionHandler; +use JMS\Serializer\Handler\PropelCollectionHandler; +use JMS\Serializer\Handler\StdClassHandler; +use JMS\Serializer\Naming\AdvancedNamingStrategyInterface; +use JMS\Serializer\Naming\CamelCaseNamingStrategy; +use JMS\Serializer\Naming\PropertyNamingStrategyInterface; +use JMS\Serializer\Naming\SerializedNameAnnotationStrategy; +use Metadata\Cache\FileCache; +use Metadata\MetadataFactory; +use PhpCollection\Map; + +/** + * Builder for serializer instances. + * + * This object makes serializer construction a breeze for projects that do not use + * any special dependency injection container. + * + * @author Johannes M. Schmitt + */ +class SerializerBuilder +{ + private $metadataDirs = array(); + private $handlerRegistry; + private $handlersConfigured = false; + private $eventDispatcher; + private $listenersConfigured = false; + private $objectConstructor; + private $serializationVisitors; + private $deserializationVisitors; + private $visitorsAdded = false; + private $propertyNamingStrategy; + private $debug = false; + private $cacheDir; + private $annotationReader; + private $includeInterfaceMetadata = false; + private $driverFactory; + private $serializationContextFactory; + private $deserializationContextFactory; + + /** + * @var ExpressionEvaluatorInterface + */ + private $expressionEvaluator; + + /** + * @var AccessorStrategyInterface + */ + private $accessorStrategy; + + public static function create() + { + return new static(); + } + + public function __construct() + { + $this->handlerRegistry = new HandlerRegistry(); + $this->eventDispatcher = new EventDispatcher(); + $this->driverFactory = new DefaultDriverFactory(); + $this->serializationVisitors = new Map(); + $this->deserializationVisitors = new Map(); + } + + public function setAccessorStrategy(AccessorStrategyInterface $accessorStrategy) + { + $this->accessorStrategy = $accessorStrategy; + } + + protected function getAccessorStrategy() + { + if (!$this->accessorStrategy) { + $this->accessorStrategy = new DefaultAccessorStrategy(); + + if ($this->expressionEvaluator) { + $this->accessorStrategy = new ExpressionAccessorStrategy($this->expressionEvaluator, $this->accessorStrategy); + } + } + return $this->accessorStrategy; + } + + public function setExpressionEvaluator(ExpressionEvaluatorInterface $expressionEvaluator) + { + $this->expressionEvaluator = $expressionEvaluator; + + return $this; + } + + public function setAnnotationReader(Reader $reader) + { + $this->annotationReader = $reader; + + return $this; + } + + public function setDebug($bool) + { + $this->debug = (boolean)$bool; + + return $this; + } + + public function setCacheDir($dir) + { + if (!is_dir($dir)) { + $this->createDir($dir); + } + if (!is_writable($dir)) { + throw new InvalidArgumentException(sprintf('The cache directory "%s" is not writable.', $dir)); + } + + $this->cacheDir = $dir; + + return $this; + } + + public function addDefaultHandlers() + { + $this->handlersConfigured = true; + $this->handlerRegistry->registerSubscribingHandler(new DateHandler()); + $this->handlerRegistry->registerSubscribingHandler(new StdClassHandler()); + $this->handlerRegistry->registerSubscribingHandler(new PhpCollectionHandler()); + $this->handlerRegistry->registerSubscribingHandler(new ArrayCollectionHandler()); + $this->handlerRegistry->registerSubscribingHandler(new PropelCollectionHandler()); + + return $this; + } + + public function configureHandlers(\Closure $closure) + { + $this->handlersConfigured = true; + $closure($this->handlerRegistry); + + return $this; + } + + public function addDefaultListeners() + { + $this->listenersConfigured = true; + $this->eventDispatcher->addSubscriber(new DoctrineProxySubscriber()); + + return $this; + } + + public function configureListeners(\Closure $closure) + { + $this->listenersConfigured = true; + $closure($this->eventDispatcher); + + return $this; + } + + public function setObjectConstructor(ObjectConstructorInterface $constructor) + { + $this->objectConstructor = $constructor; + + return $this; + } + + public function setPropertyNamingStrategy(PropertyNamingStrategyInterface $propertyNamingStrategy) + { + $this->propertyNamingStrategy = $propertyNamingStrategy; + + return $this; + } + + public function setAdvancedNamingStrategy(AdvancedNamingStrategyInterface $advancedNamingStrategy) + { + $this->propertyNamingStrategy = $advancedNamingStrategy; + + return $this; + } + + public function setSerializationVisitor($format, VisitorInterface $visitor) + { + $this->visitorsAdded = true; + $this->serializationVisitors->set($format, $visitor); + + return $this; + } + + public function setDeserializationVisitor($format, VisitorInterface $visitor) + { + $this->visitorsAdded = true; + $this->deserializationVisitors->set($format, $visitor); + + return $this; + } + + public function addDefaultSerializationVisitors() + { + $this->initializePropertyNamingStrategy(); + + $this->visitorsAdded = true; + $this->serializationVisitors->setAll(array( + 'xml' => new XmlSerializationVisitor($this->propertyNamingStrategy, $this->getAccessorStrategy()), + 'yml' => new YamlSerializationVisitor($this->propertyNamingStrategy, $this->getAccessorStrategy()), + 'json' => new JsonSerializationVisitor($this->propertyNamingStrategy, $this->getAccessorStrategy()), + )); + + return $this; + } + + public function addDefaultDeserializationVisitors() + { + $this->initializePropertyNamingStrategy(); + + $this->visitorsAdded = true; + $this->deserializationVisitors->setAll(array( + 'xml' => new XmlDeserializationVisitor($this->propertyNamingStrategy), + 'json' => new JsonDeserializationVisitor($this->propertyNamingStrategy), + )); + + return $this; + } + + /** + * @param Boolean $include Whether to include the metadata from the interfaces + * + * @return SerializerBuilder + */ + public function includeInterfaceMetadata($include) + { + $this->includeInterfaceMetadata = (Boolean)$include; + + return $this; + } + + /** + * Sets a map of namespace prefixes to directories. + * + * This method overrides any previously defined directories. + * + * @param array $namespacePrefixToDirMap + * + * @return SerializerBuilder + * + * @throws InvalidArgumentException When a directory does not exist + */ + public function setMetadataDirs(array $namespacePrefixToDirMap) + { + foreach ($namespacePrefixToDirMap as $dir) { + if (!is_dir($dir)) { + throw new InvalidArgumentException(sprintf('The directory "%s" does not exist.', $dir)); + } + } + + $this->metadataDirs = $namespacePrefixToDirMap; + + return $this; + } + + /** + * Adds a directory where the serializer will look for class metadata. + * + * The namespace prefix will make the names of the actual metadata files a bit shorter. For example, let's assume + * that you have a directory where you only store metadata files for the ``MyApplication\Entity`` namespace. + * + * If you use an empty prefix, your metadata files would need to look like: + * + * ``my-dir/MyApplication.Entity.SomeObject.yml`` + * ``my-dir/MyApplication.Entity.OtherObject.xml`` + * + * If you use ``MyApplication\Entity`` as prefix, your metadata files would need to look like: + * + * ``my-dir/SomeObject.yml`` + * ``my-dir/OtherObject.yml`` + * + * Please keep in mind that you currently may only have one directory per namespace prefix. + * + * @param string $dir The directory where metadata files are located. + * @param string $namespacePrefix An optional prefix if you only store metadata for specific namespaces in this directory. + * + * @return SerializerBuilder + * + * @throws InvalidArgumentException When a directory does not exist + * @throws InvalidArgumentException When a directory has already been registered + */ + public function addMetadataDir($dir, $namespacePrefix = '') + { + if (!is_dir($dir)) { + throw new InvalidArgumentException(sprintf('The directory "%s" does not exist.', $dir)); + } + + if (isset($this->metadataDirs[$namespacePrefix])) { + throw new InvalidArgumentException(sprintf('There is already a directory configured for the namespace prefix "%s". Please use replaceMetadataDir() to override directories.', $namespacePrefix)); + } + + $this->metadataDirs[$namespacePrefix] = $dir; + + return $this; + } + + /** + * Adds a map of namespace prefixes to directories. + * + * @param array $namespacePrefixToDirMap + * + * @return SerializerBuilder + */ + public function addMetadataDirs(array $namespacePrefixToDirMap) + { + foreach ($namespacePrefixToDirMap as $prefix => $dir) { + $this->addMetadataDir($dir, $prefix); + } + + return $this; + } + + /** + * Similar to addMetadataDir(), but overrides an existing entry. + * + * @param string $dir + * @param string $namespacePrefix + * + * @return SerializerBuilder + * + * @throws InvalidArgumentException When a directory does not exist + * @throws InvalidArgumentException When no directory is configured for the ns prefix + */ + public function replaceMetadataDir($dir, $namespacePrefix = '') + { + if (!is_dir($dir)) { + throw new InvalidArgumentException(sprintf('The directory "%s" does not exist.', $dir)); + } + + if (!isset($this->metadataDirs[$namespacePrefix])) { + throw new InvalidArgumentException(sprintf('There is no directory configured for namespace prefix "%s". Please use addMetadataDir() for adding new directories.', $namespacePrefix)); + } + + $this->metadataDirs[$namespacePrefix] = $dir; + + return $this; + } + + public function setMetadataDriverFactory(DriverFactoryInterface $driverFactory) + { + $this->driverFactory = $driverFactory; + + return $this; + } + + /** + * @param SerializationContextFactoryInterface|callable $serializationContextFactory + * + * @return self + */ + public function setSerializationContextFactory($serializationContextFactory) + { + if ($serializationContextFactory instanceof SerializationContextFactoryInterface) { + $this->serializationContextFactory = $serializationContextFactory; + } elseif (is_callable($serializationContextFactory)) { + $this->serializationContextFactory = new CallableSerializationContextFactory( + $serializationContextFactory + ); + } else { + throw new InvalidArgumentException('expected SerializationContextFactoryInterface or callable.'); + } + + return $this; + } + + /** + * @param DeserializationContextFactoryInterface|callable $deserializationContextFactory + * + * @return self + */ + public function setDeserializationContextFactory($deserializationContextFactory) + { + if ($deserializationContextFactory instanceof DeserializationContextFactoryInterface) { + $this->deserializationContextFactory = $deserializationContextFactory; + } elseif (is_callable($deserializationContextFactory)) { + $this->deserializationContextFactory = new CallableDeserializationContextFactory( + $deserializationContextFactory + ); + } else { + throw new InvalidArgumentException('expected DeserializationContextFactoryInterface or callable.'); + } + + return $this; + } + + public function build() + { + $annotationReader = $this->annotationReader; + if (null === $annotationReader) { + $annotationReader = new AnnotationReader(); + + if (null !== $this->cacheDir) { + $this->createDir($this->cacheDir . '/annotations'); + $annotationsCache = new FilesystemCache($this->cacheDir . '/annotations'); + $annotationReader = new CachedReader($annotationReader, $annotationsCache, $this->debug); + } + } + + $metadataDriver = $this->driverFactory->createDriver($this->metadataDirs, $annotationReader); + $metadataFactory = new MetadataFactory($metadataDriver, null, $this->debug); + + $metadataFactory->setIncludeInterfaces($this->includeInterfaceMetadata); + + if (null !== $this->cacheDir) { + $this->createDir($this->cacheDir . '/metadata'); + $metadataFactory->setCache(new FileCache($this->cacheDir . '/metadata')); + } + + if (!$this->handlersConfigured) { + $this->addDefaultHandlers(); + } + + if (!$this->listenersConfigured) { + $this->addDefaultListeners(); + } + + if (!$this->visitorsAdded) { + $this->addDefaultSerializationVisitors(); + $this->addDefaultDeserializationVisitors(); + } + + $serializer = new Serializer( + $metadataFactory, + $this->handlerRegistry, + $this->objectConstructor ?: new UnserializeObjectConstructor(), + $this->serializationVisitors, + $this->deserializationVisitors, + $this->eventDispatcher, + null, + $this->expressionEvaluator + ); + + if (null !== $this->serializationContextFactory) { + $serializer->setSerializationContextFactory($this->serializationContextFactory); + } + + if (null !== $this->deserializationContextFactory) { + $serializer->setDeserializationContextFactory($this->deserializationContextFactory); + } + + return $serializer; + } + + private function initializePropertyNamingStrategy() + { + if (null !== $this->propertyNamingStrategy) { + return; + } + + $this->propertyNamingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); + } + + private function createDir($dir) + { + if (is_dir($dir)) { + return; + } + + if (false === @mkdir($dir, 0777, true) && false === is_dir($dir)) { + throw new RuntimeException(sprintf('Could not create directory "%s".', $dir)); + } + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/SerializerInterface.php b/vendor/jms/serializer/src/JMS/Serializer/SerializerInterface.php new file mode 100644 index 0000000..2eb320d --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/SerializerInterface.php @@ -0,0 +1,50 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +/** + * Serializer Interface. + * + * @author Johannes M. Schmitt + */ +interface SerializerInterface +{ + /** + * Serializes the given data to the specified output format. + * + * @param object|array|scalar $data + * @param string $format + * @param Context $context + * + * @return string + */ + public function serialize($data, $format, SerializationContext $context = null); + + /** + * Deserializes the given data to the specified type. + * + * @param string $data + * @param string $type + * @param string $format + * @param Context $context + * + * @return object|array|scalar + */ + public function deserialize($data, $type, $format, DeserializationContext $context = null); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Twig/SerializerExtension.php b/vendor/jms/serializer/src/JMS/Serializer/Twig/SerializerExtension.php new file mode 100644 index 0000000..b34fcd9 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Twig/SerializerExtension.php @@ -0,0 +1,66 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Twig; + +use JMS\Serializer\SerializationContext; +use JMS\Serializer\SerializerInterface; + +/** + * Serializer helper twig extension + * + * Basically provides access to JMSSerializer from Twig + */ +class SerializerExtension extends \Twig_Extension +{ + protected $serializer; + + public function getName() + { + return 'jms_serializer'; + } + + public function __construct(SerializerInterface $serializer) + { + $this->serializer = $serializer; + } + + public function getFilters() + { + return array( + new \Twig_SimpleFilter('serialize', array($this, 'serialize')), + ); + } + + public function getFunctions() + { + return array( + new \Twig_SimpleFunction('serialization_context', '\JMS\Serializer\SerializationContext::create'), + ); + } + + /** + * @param object $object + * @param string $type + * @param SerializationContext $context + */ + public function serialize($object, $type = 'json', SerializationContext $context = null) + { + return $this->serializer->serialize($object, $type, $context); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeExtension.php b/vendor/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeExtension.php new file mode 100644 index 0000000..12a214a --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeExtension.php @@ -0,0 +1,45 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Twig; + +/** + * @author Asmir Mustafic + */ +final class SerializerRuntimeExtension extends \Twig_Extension +{ + + public function getName() + { + return 'jms_serializer'; + } + + public function getFilters() + { + return array( + new \Twig_SimpleFilter('serialize', array(SerializerRuntimeHelper::class, 'serialize')), + ); + } + + public function getFunctions() + { + return array( + new \Twig_SimpleFunction('serialization_context', '\JMS\Serializer\SerializationContext::create'), + ); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeHelper.php b/vendor/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeHelper.php new file mode 100644 index 0000000..39286b7 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Twig/SerializerRuntimeHelper.php @@ -0,0 +1,46 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Twig; + +use JMS\Serializer\SerializationContext; +use JMS\Serializer\SerializerInterface; + +/** + * @author Asmir Mustafic + */ +final class SerializerRuntimeHelper +{ + protected $serializer; + + public function __construct(SerializerInterface $serializer) + { + $this->serializer = $serializer; + } + + /** + * @param $object + * @param string $type + * @param SerializationContext|null $context + * @return string + */ + public function serialize($object, $type = 'json', SerializationContext $context = null) + { + return $this->serializer->serialize($object, $type, $context); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/TypeParser.php b/vendor/jms/serializer/src/JMS/Serializer/TypeParser.php new file mode 100644 index 0000000..b0fe218 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/TypeParser.php @@ -0,0 +1,105 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +/** + * Parses a serializer type. + * + * @author Johannes M. Schmitt + */ +final class TypeParser extends \JMS\Parser\AbstractParser +{ + const T_NAME = 1; + const T_STRING = 2; + const T_OPEN_BRACKET = 3; + const T_CLOSE_BRACKET = 4; + const T_COMMA = 5; + const T_NONE = 6; + + public function __construct() + { + parent::__construct(new \JMS\Parser\SimpleLexer( + '/ + # PHP Class Names + ((?:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\\\\)*[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*) + + # Strings + |("(?:[^"]|"")*"|\'(?:[^\']|\'\')*\') + + # Ignore whitespace + |\s* + + # Terminals + |(.) + /x', + array(self::T_NAME => 'T_NAME', self::T_STRING => 'T_STRING', self::T_OPEN_BRACKET => 'T_OPEN_BRACKET', + self::T_CLOSE_BRACKET => 'T_CLOSE_BRACKET', self::T_COMMA => 'T_COMMA', self::T_NONE => 'T_NONE'), + function ($value) { + switch ($value[0]) { + case '"': + case "'": + return array(TypeParser::T_STRING, substr($value, 1, -1)); + + case '<': + return array(TypeParser::T_OPEN_BRACKET, '<'); + + case '>': + return array(TypeParser::T_CLOSE_BRACKET, '>'); + + case ',': + return array(TypeParser::T_COMMA, ','); + + default: + if (preg_match('/^(?:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\\\\)*[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $value)) { + return array(TypeParser::T_NAME, $value); + } + + return array(TypeParser::T_NONE, $value); + } + } + )); + } + + /** + * @return array of the format ["name" => string, "params" => array] + */ + protected function parseInternal() + { + $typeName = $this->match(self::T_NAME); + if (!$this->lexer->isNext(self::T_OPEN_BRACKET)) { + return array('name' => $typeName, 'params' => array()); + } + + $this->match(self::T_OPEN_BRACKET); + $params = array(); + do { + if ($this->lexer->isNext(self::T_NAME)) { + $params[] = $this->parseInternal(); + } else if ($this->lexer->isNext(self::T_STRING)) { + $params[] = $this->match(self::T_STRING); + } else { + $this->matchAny(array(self::T_NAME, self::T_STRING)); // Will throw an exception. + } + } while ($this->lexer->isNext(self::T_COMMA) && $this->lexer->moveNext()); + + $this->match(self::T_CLOSE_BRACKET); + + return array('name' => $typeName, 'params' => $params); + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/Util/Writer.php b/vendor/jms/serializer/src/JMS/Serializer/Util/Writer.php new file mode 100644 index 0000000..1b61623 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/Util/Writer.php @@ -0,0 +1,138 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Util; + +use JMS\Serializer\Exception\RuntimeException; + +/** + * A writer implementation. + * + * This may be used to simplify writing well-formatted code. + * + * @author Johannes M. Schmitt + */ +class Writer +{ + public $indentationSpaces = 4; + public $indentationLevel = 0; + public $content = ''; + public $changeCount = 0; + + private $changes = array(); + + public function indent() + { + $this->indentationLevel += 1; + + return $this; + } + + public function outdent() + { + $this->indentationLevel -= 1; + + if ($this->indentationLevel < 0) { + throw new RuntimeException('The identation level cannot be less than zero.'); + } + + return $this; + } + + /** + * @param string $content + * + * @return Writer + */ + public function writeln($content) + { + $this->write($content . "\n"); + + return $this; + } + + public function revert() + { + $change = array_pop($this->changes); + $this->changeCount -= 1; + $this->content = substr($this->content, 0, -1 * strlen($change)); + } + + /** + * @param string $content + * + * @return Writer + */ + public function write($content) + { + $addition = ''; + + $lines = explode("\n", $content); + for ($i = 0, $c = count($lines); $i < $c; $i++) { + if ($this->indentationLevel > 0 + && !empty($lines[$i]) + && ((empty($addition) && "\n" === substr($this->content, -1)) || "\n" === substr($addition, -1)) + ) { + $addition .= str_repeat(' ', $this->indentationLevel * $this->indentationSpaces); + } + + $addition .= $lines[$i]; + + if ($i + 1 < $c) { + $addition .= "\n"; + } + } + + $this->content .= $addition; + $this->changes[] = $addition; + $this->changeCount += 1; + + return $this; + } + + public function rtrim($preserveNewLines = true) + { + if (!$preserveNewLines) { + $this->content = rtrim($this->content); + + return $this; + } + + $addNl = "\n" === substr($this->content, -1); + $this->content = rtrim($this->content); + + if ($addNl) { + $this->content .= "\n"; + } + + return $this; + } + + public function reset() + { + $this->content = ''; + $this->indentationLevel = 0; + + return $this; + } + + public function getContent() + { + return $this->content; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/VisitorInterface.php b/vendor/jms/serializer/src/JMS/Serializer/VisitorInterface.php new file mode 100644 index 0000000..7b84800 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/VisitorInterface.php @@ -0,0 +1,141 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + * Interface for visitors. + * + * This contains the minimal set of values that must be supported for any + * output format. + * + * @author Johannes M. Schmitt + */ +interface VisitorInterface +{ + /** + * Allows visitors to convert the input data to a different representation + * before the actual serialization/deserialization process starts. + * + * @param mixed $data + * + * @return mixed + */ + public function prepare($data); + + /** + * @param mixed $data + * @param array $type + * + * @return mixed + */ + public function visitNull($data, array $type, Context $context); + + /** + * @param mixed $data + * @param array $type + * + * @return mixed + */ + public function visitString($data, array $type, Context $context); + + /** + * @param mixed $data + * @param array $type + * + * @return mixed + */ + public function visitBoolean($data, array $type, Context $context); + + /** + * @param mixed $data + * @param array $type + * + * @return mixed + */ + public function visitDouble($data, array $type, Context $context); + + /** + * @param mixed $data + * @param array $type + * + * @return mixed + */ + public function visitInteger($data, array $type, Context $context); + + /** + * @param mixed $data + * @param array $type + * + * @return mixed + */ + public function visitArray($data, array $type, Context $context); + + /** + * Called before the properties of the object are being visited. + * + * @param ClassMetadata $metadata + * @param mixed $data + * @param array $type + * + * @return void + */ + public function startVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context); + + /** + * @param PropertyMetadata $metadata + * @param mixed $data + * + * @return void + */ + public function visitProperty(PropertyMetadata $metadata, $data, Context $context); + + /** + * Called after all properties of the object have been visited. + * + * @param ClassMetadata $metadata + * @param mixed $data + * @param array $type + * + * @return mixed + */ + public function endVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context); + + /** + * Called before serialization/deserialization starts. + * + * @param GraphNavigator $navigator + * + * @return void + */ + public function setNavigator(GraphNavigator $navigator); + + /** + * @deprecated use Context::getNavigator/Context::accept instead + * @return GraphNavigator + */ + public function getNavigator(); + + /** + * @return object|array|scalar + */ + public function getResult(); +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/XmlDeserializationVisitor.php b/vendor/jms/serializer/src/JMS/Serializer/XmlDeserializationVisitor.php new file mode 100644 index 0000000..0fe23b3 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/XmlDeserializationVisitor.php @@ -0,0 +1,450 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Exception\InvalidArgumentException; +use JMS\Serializer\Exception\LogicException; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\Exception\XmlErrorException; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Naming\AdvancedNamingStrategyInterface; + +class XmlDeserializationVisitor extends AbstractVisitor implements NullAwareVisitorInterface +{ + private $objectStack; + private $metadataStack; + private $objectMetadataStack; + private $currentObject; + private $currentMetadata; + private $result; + private $navigator; + private $disableExternalEntities = true; + private $doctypeWhitelist = array(); + + public function enableExternalEntities() + { + $this->disableExternalEntities = false; + } + + public function setNavigator(GraphNavigator $navigator) + { + $this->navigator = $navigator; + $this->objectStack = new \SplStack; + $this->metadataStack = new \SplStack; + $this->objectMetadataStack = new \SplStack; + $this->result = null; + } + + public function getNavigator() + { + return $this->navigator; + } + + public function prepare($data) + { + $data = $this->emptyStringToSpaceCharacter($data); + + $previous = libxml_use_internal_errors(true); + libxml_clear_errors(); + + $previousEntityLoaderState = libxml_disable_entity_loader($this->disableExternalEntities); + + if (false !== stripos($data, 'getDomDocumentTypeEntitySubset($data); + if (!in_array($internalSubset, $this->doctypeWhitelist, true)) { + throw new InvalidArgumentException(sprintf( + 'The document type "%s" is not allowed. If it is safe, you may add it to the whitelist configuration.', + $internalSubset + )); + } + } + + $doc = simplexml_load_string($data); + + libxml_use_internal_errors($previous); + libxml_disable_entity_loader($previousEntityLoaderState); + + if (false === $doc) { + throw new XmlErrorException(libxml_get_last_error()); + } + + return $doc; + } + + private function emptyStringToSpaceCharacter($data) + { + return $data === '' ? ' ' : (string)$data; + } + + public function visitNull($data, array $type, Context $context) + { + return null; + } + + public function visitString($data, array $type, Context $context) + { + $data = (string)$data; + + if (null === $this->result) { + $this->result = $data; + } + + return $data; + } + + public function visitBoolean($data, array $type, Context $context) + { + $data = (string)$data; + + if ('true' === $data || '1' === $data) { + $data = true; + } elseif ('false' === $data || '0' === $data) { + $data = false; + } else { + throw new RuntimeException(sprintf('Could not convert data to boolean. Expected "true", "false", "1" or "0", but got %s.', json_encode($data))); + } + + if (null === $this->result) { + $this->result = $data; + } + + return $data; + } + + public function visitInteger($data, array $type, Context $context) + { + $data = (integer)$data; + + if (null === $this->result) { + $this->result = $data; + } + + return $data; + } + + public function visitDouble($data, array $type, Context $context) + { + $data = (double)$data; + + if (null === $this->result) { + $this->result = $data; + } + + return $data; + } + + public function visitArray($data, array $type, Context $context) + { + // handle key-value-pairs + if (null !== $this->currentMetadata && $this->currentMetadata->xmlKeyValuePairs) { + if (2 !== count($type['params'])) { + throw new RuntimeException('The array type must be specified as "array" for Key-Value-Pairs.'); + } + $this->revertCurrentMetadata(); + + list($keyType, $entryType) = $type['params']; + + $result = []; + foreach ($data as $key => $v) { + $k = $this->navigator->accept($key, $keyType, $context); + $result[$k] = $this->navigator->accept($v, $entryType, $context); + } + + return $result; + } + + $entryName = null !== $this->currentMetadata && $this->currentMetadata->xmlEntryName ? $this->currentMetadata->xmlEntryName : 'entry'; + $namespace = null !== $this->currentMetadata && $this->currentMetadata->xmlEntryNamespace ? $this->currentMetadata->xmlEntryNamespace : null; + + if ($namespace === null && $this->objectMetadataStack->count()) { + $classMetadata = $this->objectMetadataStack->top(); + $namespace = isset($classMetadata->xmlNamespaces['']) ? $classMetadata->xmlNamespaces[''] : $namespace; + if ($namespace === null) { + $namespaces = $data->getDocNamespaces(); + if (isset($namespaces[''])) { + $namespace = $namespaces['']; + } + } + } + + if (null !== $namespace) { + $prefix = uniqid('ns-'); + $data->registerXPathNamespace($prefix, $namespace); + $nodes = $data->xpath("$prefix:$entryName"); + } else { + $nodes = $data->xpath($entryName); + } + + if (!count($nodes)) { + if (null === $this->result) { + return $this->result = array(); + } + + return array(); + } + + switch (count($type['params'])) { + case 0: + throw new RuntimeException(sprintf('The array type must be specified either as "array", or "array".')); + + case 1: + $result = array(); + + if (null === $this->result) { + $this->result = &$result; + } + + foreach ($nodes as $v) { + $result[] = $this->navigator->accept($v, $type['params'][0], $context); + } + + return $result; + + case 2: + if (null === $this->currentMetadata) { + throw new RuntimeException('Maps are not supported on top-level without metadata.'); + } + + list($keyType, $entryType) = $type['params']; + $result = array(); + if (null === $this->result) { + $this->result = &$result; + } + + $nodes = $data->children($namespace)->$entryName; + foreach ($nodes as $v) { + $attrs = $v->attributes(); + if (!isset($attrs[$this->currentMetadata->xmlKeyAttribute])) { + throw new RuntimeException(sprintf('The key attribute "%s" must be set for each entry of the map.', $this->currentMetadata->xmlKeyAttribute)); + } + + $k = $this->navigator->accept($attrs[$this->currentMetadata->xmlKeyAttribute], $keyType, $context); + $result[$k] = $this->navigator->accept($v, $entryType, $context); + } + + return $result; + + default: + throw new LogicException(sprintf('The array type does not support more than 2 parameters, but got %s.', json_encode($type['params']))); + } + } + + public function startVisitingObject(ClassMetadata $metadata, $object, array $type, Context $context) + { + $this->setCurrentObject($object); + $this->objectMetadataStack->push($metadata); + if (null === $this->result) { + $this->result = $this->currentObject; + } + } + + public function visitProperty(PropertyMetadata $metadata, $data, Context $context) + { + if ($this->namingStrategy instanceof AdvancedNamingStrategyInterface) { + $name = $this->namingStrategy->getPropertyName($metadata, $context); + } else { + $name = $this->namingStrategy->translateName($metadata); + } + + if (!$metadata->type) { + throw new RuntimeException(sprintf('You must define a type for %s::$%s.', $metadata->reflection->class, $metadata->name)); + } + + if ($metadata->xmlAttribute) { + + $attributes = $data->attributes($metadata->xmlNamespace); + if (isset($attributes[$name])) { + $v = $this->navigator->accept($attributes[$name], $metadata->type, $context); + $this->accessor->setValue($this->currentObject, $v, $metadata); + } + + return; + } + + if ($metadata->xmlValue) { + $v = $this->navigator->accept($data, $metadata->type, $context); + $this->accessor->setValue($this->currentObject, $v, $metadata); + + return; + } + + if ($metadata->xmlCollection) { + $enclosingElem = $data; + if (!$metadata->xmlCollectionInline) { + $enclosingElem = $data->children($metadata->xmlNamespace)->$name; + } + + $this->setCurrentMetadata($metadata); + $v = $this->navigator->accept($enclosingElem, $metadata->type, $context); + $this->revertCurrentMetadata(); + $this->accessor->setValue($this->currentObject, $v, $metadata); + + return; + } + + if ($metadata->xmlNamespace) { + $node = $data->children($metadata->xmlNamespace)->$name; + if (!$node->count()) { + return; + } + } else { + + $namespaces = $data->getDocNamespaces(); + + if (isset($namespaces[''])) { + $prefix = uniqid('ns-'); + $data->registerXPathNamespace($prefix, $namespaces['']); + $nodes = $data->xpath('./' . $prefix . ':' . $name); + } else { + $nodes = $data->xpath('./' . $name); + } + if (empty($nodes)) { + return; + } + $node = reset($nodes); + } + + if ($metadata->xmlKeyValuePairs) { + $this->setCurrentMetadata($metadata); + } + + $v = $this->navigator->accept($node, $metadata->type, $context); + + $this->accessor->setValue($this->currentObject, $v, $metadata); + } + + public function endVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + $rs = $this->currentObject; + $this->objectMetadataStack->pop(); + $this->revertCurrentObject(); + + return $rs; + } + + public function setCurrentObject($object) + { + $this->objectStack->push($this->currentObject); + $this->currentObject = $object; + } + + public function getCurrentObject() + { + return $this->currentObject; + } + + public function revertCurrentObject() + { + return $this->currentObject = $this->objectStack->pop(); + } + + public function setCurrentMetadata(PropertyMetadata $metadata) + { + $this->metadataStack->push($this->currentMetadata); + $this->currentMetadata = $metadata; + } + + public function getCurrentMetadata() + { + return $this->currentMetadata; + } + + public function revertCurrentMetadata() + { + return $this->currentMetadata = $this->metadataStack->pop(); + } + + public function getResult() + { + return $this->result; + } + + /** + * @param array $doctypeWhitelist + */ + public function setDoctypeWhitelist(array $doctypeWhitelist) + { + $this->doctypeWhitelist = $doctypeWhitelist; + } + + /** + * @return array + */ + public function getDoctypeWhitelist() + { + return $this->doctypeWhitelist; + } + + /** + * Retrieves internalSubset even in bugfixed php versions + * + * @param \DOMDocumentType $child + * @param string $data + * @return string + */ + private function getDomDocumentTypeEntitySubset($data) + { + $startPos = $endPos = stripos($data, '') { + --$braces; + } + } while ($braces > 0); + + $internalSubset = substr($data, $startPos, $endPos - $startPos); + $internalSubset = str_replace(array("\n", "\r"), '', $internalSubset); + $internalSubset = preg_replace('/\s{2,}/', ' ', $internalSubset); + $internalSubset = str_replace(array("[ ]>"), array('[]>'), $internalSubset); + + return $internalSubset; + } + + /** + * @param mixed $value + * + * @return bool + */ + public function isNull($value) + { + if ($value instanceof \SimpleXMLElement) { + // Workaround for https://bugs.php.net/bug.php?id=75168 and https://github.com/schmittjoh/serializer/issues/817 + // If the "name" is empty means that we are on an not-existent node and subsequent operations on the object will trigger the warning: + // "Node no longer exists" + if ($value->getName() === "") { + // @todo should be "true", but for collections needs a default collection value. maybe something for the 2.0 + return false; + } + + $xsiAttributes = $value->attributes('http://www.w3.org/2001/XMLSchema-instance'); + if (isset($xsiAttributes['nil']) + && ((string) $xsiAttributes['nil'] === 'true' || (string) $xsiAttributes['nil'] === '1') + ) { + return true; + } + } + + return $value === null; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/XmlSerializationVisitor.php b/vendor/jms/serializer/src/JMS/Serializer/XmlSerializationVisitor.php new file mode 100644 index 0000000..feaf942 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/XmlSerializationVisitor.php @@ -0,0 +1,533 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Accessor\AccessorStrategyInterface; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Naming\AdvancedNamingStrategyInterface; +use JMS\Serializer\Naming\PropertyNamingStrategyInterface; + +/** + * XmlSerializationVisitor. + * + * @author Johannes M. Schmitt + */ +class XmlSerializationVisitor extends AbstractVisitor +{ + public $document; + + private $navigator; + private $defaultRootName = 'result'; + private $defaultRootNamespace; + private $defaultVersion = '1.0'; + private $defaultEncoding = 'UTF-8'; + private $stack; + private $metadataStack; + private $currentNode; + private $currentMetadata; + private $hasValue; + private $nullWasVisited; + private $objectMetadataStack; + + /** @var boolean */ + private $formatOutput; + + public function __construct($namingStrategy, AccessorStrategyInterface $accessorStrategy = null) + { + parent::__construct($namingStrategy, $accessorStrategy); + $this->objectMetadataStack = new \SplStack; + $this->formatOutput = true; + } + + public function setDefaultRootName($name, $namespace = null) + { + $this->defaultRootName = $name; + $this->defaultRootNamespace = $namespace; + } + + /** + * @return boolean + */ + public function hasDefaultRootName() + { + return 'result' === $this->defaultRootName; + } + + public function setDefaultVersion($version) + { + $this->defaultVersion = $version; + } + + public function setDefaultEncoding($encoding) + { + $this->defaultEncoding = $encoding; + } + + public function setNavigator(GraphNavigator $navigator) + { + $this->navigator = $navigator; + $this->document = null; + $this->stack = new \SplStack; + $this->metadataStack = new \SplStack; + } + + public function getNavigator() + { + return $this->navigator; + } + + public function visitNull($data, array $type, Context $context) + { + if (null === $this->document) { + $this->document = $this->createDocument(null, null, true); + $node = $this->document->createAttribute('xsi:nil'); + $node->value = 'true'; + $this->currentNode->appendChild($node); + + $this->attachNullNamespace(); + + return; + } + + $node = $this->document->createAttribute('xsi:nil'); + $node->value = 'true'; + $this->attachNullNamespace(); + + return $node; + } + + public function visitString($data, array $type, Context $context) + { + + if (null !== $this->currentMetadata) { + $doCData = $this->currentMetadata->xmlElementCData; + } else { + $doCData = true; + } + + if (null === $this->document) { + $this->document = $this->createDocument(null, null, true); + $this->currentNode->appendChild($doCData ? $this->document->createCDATASection($data) : $this->document->createTextNode((string)$data)); + + return; + } + + return $doCData ? $this->document->createCDATASection($data) : $this->document->createTextNode((string)$data); + } + + public function visitSimpleString($data, array $type, Context $context) + { + if (null === $this->document) { + $this->document = $this->createDocument(null, null, true); + $this->currentNode->appendChild($this->document->createTextNode((string)$data)); + + return; + } + + return $this->document->createTextNode((string)$data); + } + + public function visitBoolean($data, array $type, Context $context) + { + if (null === $this->document) { + $this->document = $this->createDocument(null, null, true); + $this->currentNode->appendChild($this->document->createTextNode($data ? 'true' : 'false')); + + return; + } + + return $this->document->createTextNode($data ? 'true' : 'false'); + } + + public function visitInteger($data, array $type, Context $context) + { + return $this->visitNumeric($data, $type); + } + + public function visitDouble($data, array $type, Context $context) + { + return $this->visitNumeric($data, $type); + } + + public function visitArray($data, array $type, Context $context) + { + if (null === $this->document) { + $this->document = $this->createDocument(null, null, true); + } + + $entryName = (null !== $this->currentMetadata && null !== $this->currentMetadata->xmlEntryName) ? $this->currentMetadata->xmlEntryName : 'entry'; + $keyAttributeName = (null !== $this->currentMetadata && null !== $this->currentMetadata->xmlKeyAttribute) ? $this->currentMetadata->xmlKeyAttribute : null; + $namespace = (null !== $this->currentMetadata && null !== $this->currentMetadata->xmlEntryNamespace) ? $this->currentMetadata->xmlEntryNamespace : null; + + foreach ($data as $k => $v) { + + if (null === $v && $context->shouldSerializeNull() !== true) { + continue; + } + + $tagName = (null !== $this->currentMetadata && $this->currentMetadata->xmlKeyValuePairs && $this->isElementNameValid($k)) ? $k : $entryName; + + $entryNode = $this->createElement($tagName, $namespace); + $this->currentNode->appendChild($entryNode); + $this->setCurrentNode($entryNode); + + if (null !== $keyAttributeName) { + $entryNode->setAttribute($keyAttributeName, (string)$k); + } + + if (null !== $node = $this->navigator->accept($v, $this->getElementType($type), $context)) { + $this->currentNode->appendChild($node); + } + + $this->revertCurrentNode(); + } + } + + public function startVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + $this->objectMetadataStack->push($metadata); + + if (null === $this->document) { + $this->document = $this->createDocument(null, null, false); + if ($metadata->xmlRootName) { + $rootName = $metadata->xmlRootName; + $rootNamespace = $metadata->xmlRootNamespace ?: $this->getClassDefaultNamespace($metadata); + } else { + $rootName = $this->defaultRootName; + $rootNamespace = $this->defaultRootNamespace; + } + + if ($rootNamespace) { + $this->currentNode = $this->document->createElementNS($rootNamespace, $rootName); + } else { + $this->currentNode = $this->document->createElement($rootName); + } + + $this->document->appendChild($this->currentNode); + } + + $this->addNamespaceAttributes($metadata, $this->currentNode); + + $this->hasValue = false; + } + + public function visitProperty(PropertyMetadata $metadata, $object, Context $context) + { + $v = $this->accessor->getValue($object, $metadata); + + if (null === $v && $context->shouldSerializeNull() !== true) { + return; + } + + if ($metadata->xmlAttribute) { + $this->setCurrentMetadata($metadata); + $node = $this->navigator->accept($v, $metadata->type, $context); + $this->revertCurrentMetadata(); + + if (!$node instanceof \DOMCharacterData) { + throw new RuntimeException(sprintf('Unsupported value for XML attribute for %s. Expected character data, but got %s.', $metadata->name, json_encode($v))); + } + if ($this->namingStrategy instanceof AdvancedNamingStrategyInterface) { + $attributeName = $this->namingStrategy->getPropertyName($metadata, $context); + } else { + $attributeName = $this->namingStrategy->translateName($metadata); + } + $this->setAttributeOnNode($this->currentNode, $attributeName, $node->nodeValue, $metadata->xmlNamespace); + + return; + } + + if (($metadata->xmlValue && $this->currentNode->childNodes->length > 0) + || (!$metadata->xmlValue && $this->hasValue) + ) { + throw new RuntimeException(sprintf('If you make use of @XmlValue, all other properties in the class must have the @XmlAttribute annotation. Invalid usage detected in class %s.', $metadata->class)); + } + + if ($metadata->xmlValue) { + $this->hasValue = true; + + $this->setCurrentMetadata($metadata); + $node = $this->navigator->accept($v, $metadata->type, $context); + $this->revertCurrentMetadata(); + + if (!$node instanceof \DOMCharacterData) { + throw new RuntimeException(sprintf('Unsupported value for property %s::$%s. Expected character data, but got %s.', $metadata->reflection->class, $metadata->reflection->name, is_object($node) ? get_class($node) : gettype($node))); + } + + $this->currentNode->appendChild($node); + + return; + } + + if ($metadata->xmlAttributeMap) { + if (!is_array($v)) { + throw new RuntimeException(sprintf('Unsupported value type for XML attribute map. Expected array but got %s.', gettype($v))); + } + + foreach ($v as $key => $value) { + $this->setCurrentMetadata($metadata); + $node = $this->navigator->accept($value, null, $context); + $this->revertCurrentMetadata(); + + if (!$node instanceof \DOMCharacterData) { + throw new RuntimeException(sprintf('Unsupported value for a XML attribute map value. Expected character data, but got %s.', json_encode($v))); + } + + $this->setAttributeOnNode($this->currentNode, $key, $node->nodeValue, $metadata->xmlNamespace); + } + + return; + } + + if ($addEnclosingElement = !$this->isInLineCollection($metadata) && !$metadata->inline) { + if ($this->namingStrategy instanceof AdvancedNamingStrategyInterface) { + $elementName = $this->namingStrategy->getPropertyName($metadata, $context); + } else { + $elementName = $this->namingStrategy->translateName($metadata); + } + + $namespace = null !== $metadata->xmlNamespace + ? $metadata->xmlNamespace + : $this->getClassDefaultNamespace($this->objectMetadataStack->top()); + + $element = $this->createElement($elementName, $namespace); + $this->currentNode->appendChild($element); + $this->setCurrentNode($element); + } + + $this->setCurrentMetadata($metadata); + + if (null !== $node = $this->navigator->accept($v, $metadata->type, $context)) { + $this->currentNode->appendChild($node); + } + + $this->revertCurrentMetadata(); + + if ($addEnclosingElement) { + $this->revertCurrentNode(); + + if ($this->isElementEmpty($element) && ($v === null || $this->isSkippableCollection($metadata) || $this->isSkippableEmptyObject($node, $metadata) || $this->isCircularRef($context, $v))) { + $this->currentNode->removeChild($element); + } + } + + $this->hasValue = false; + } + + private function isInLineCollection(PropertyMetadata $metadata) + { + return $metadata->xmlCollection && $metadata->xmlCollectionInline; + } + + private function isCircularRef(SerializationContext $context, $v) + { + return $context->isVisiting($v); + } + + private function isSkippableEmptyObject($node, PropertyMetadata $metadata) + { + return $node === null && !$metadata->xmlCollection && $metadata->skipWhenEmpty; + } + + private function isSkippableCollection(PropertyMetadata $metadata) + { + return $metadata->xmlCollection && $metadata->xmlCollectionSkipWhenEmpty; + } + + private function isElementEmpty(\DOMElement $element) + { + return !$element->hasChildNodes() && !$element->hasAttributes(); + } + + public function endVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + $this->objectMetadataStack->pop(); + } + + public function getResult() + { + return $this->document->saveXML(); + } + + public function getCurrentNode() + { + return $this->currentNode; + } + + public function getCurrentMetadata() + { + return $this->currentMetadata; + } + + public function getDocument() + { + return $this->document; + } + + public function setCurrentMetadata(PropertyMetadata $metadata) + { + $this->metadataStack->push($this->currentMetadata); + $this->currentMetadata = $metadata; + } + + public function setCurrentNode(\DOMNode $node) + { + $this->stack->push($this->currentNode); + $this->currentNode = $node; + } + + public function revertCurrentNode() + { + return $this->currentNode = $this->stack->pop(); + } + + public function revertCurrentMetadata() + { + return $this->currentMetadata = $this->metadataStack->pop(); + } + + public function createDocument($version = null, $encoding = null, $addRoot = true) + { + $doc = new \DOMDocument($version ?: $this->defaultVersion, $encoding ?: $this->defaultEncoding); + $doc->formatOutput = $this->isFormatOutput(); + + if ($addRoot) { + if ($this->defaultRootNamespace) { + $rootNode = $doc->createElementNS($this->defaultRootNamespace, $this->defaultRootName); + } else { + $rootNode = $doc->createElement($this->defaultRootName); + } + $this->setCurrentNode($rootNode); + $doc->appendChild($rootNode); + } + + return $doc; + } + + public function prepare($data) + { + $this->nullWasVisited = false; + + return $data; + } + + private function visitNumeric($data, array $type) + { + if (null === $this->document) { + $this->document = $this->createDocument(null, null, true); + $this->currentNode->appendChild($textNode = $this->document->createTextNode((string)$data)); + + return $textNode; + } + + return $this->document->createTextNode((string)$data); + } + + /** + * Checks that the name is a valid XML element name. + * + * @param string $name + * + * @return boolean + */ + private function isElementNameValid($name) + { + return $name && false === strpos($name, ' ') && preg_match('#^[\pL_][\pL0-9._-]*$#ui', $name); + } + + private function attachNullNamespace() + { + if (!$this->nullWasVisited) { + $this->document->documentElement->setAttributeNS( + 'http://www.w3.org/2000/xmlns/', + 'xmlns:xsi', + 'http://www.w3.org/2001/XMLSchema-instance' + ); + $this->nullWasVisited = true; + } + } + + /** + * Adds namespace attributes to the XML root element + * + * @param \JMS\Serializer\Metadata\ClassMetadata $metadata + * @param \DOMElement $element + */ + private function addNamespaceAttributes(ClassMetadata $metadata, \DOMElement $element) + { + foreach ($metadata->xmlNamespaces as $prefix => $uri) { + $attribute = 'xmlns'; + if ($prefix !== '') { + $attribute .= ':' . $prefix; + } elseif ($element->namespaceURI === $uri) { + continue; + } + $element->setAttributeNS('http://www.w3.org/2000/xmlns/', $attribute, $uri); + } + } + + private function createElement($tagName, $namespace = null) + { + if (null === $namespace) { + return $this->document->createElement($tagName); + } + if ($this->currentNode->isDefaultNamespace($namespace)) { + return $this->document->createElementNS($namespace, $tagName); + } + if (!($prefix = $this->currentNode->lookupPrefix($namespace)) && !($prefix = $this->document->lookupPrefix($namespace))) { + $prefix = 'ns-' . substr(sha1($namespace), 0, 8); + } + return $this->document->createElementNS($namespace, $prefix . ':' . $tagName); + } + + private function setAttributeOnNode(\DOMElement $node, $name, $value, $namespace = null) + { + if (null !== $namespace) { + if (!$prefix = $node->lookupPrefix($namespace)) { + $prefix = 'ns-' . substr(sha1($namespace), 0, 8); + } + $node->setAttributeNS($namespace, $prefix . ':' . $name, $value); + } else { + $node->setAttribute($name, $value); + } + } + + private function getClassDefaultNamespace(ClassMetadata $metadata) + { + return (isset($metadata->xmlNamespaces['']) ? $metadata->xmlNamespaces[''] : null); + } + + /** + * @return bool + */ + public function isFormatOutput() + { + return $this->formatOutput; + } + + /** + * @param bool $formatOutput + */ + public function setFormatOutput($formatOutput) + { + $this->formatOutput = (boolean)$formatOutput; + } +} diff --git a/vendor/jms/serializer/src/JMS/Serializer/YamlSerializationVisitor.php b/vendor/jms/serializer/src/JMS/Serializer/YamlSerializationVisitor.php new file mode 100644 index 0000000..52b0677 --- /dev/null +++ b/vendor/jms/serializer/src/JMS/Serializer/YamlSerializationVisitor.php @@ -0,0 +1,223 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer; + +use JMS\Serializer\Accessor\AccessorStrategyInterface; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Naming\AdvancedNamingStrategyInterface; +use JMS\Serializer\Naming\PropertyNamingStrategyInterface; +use JMS\Serializer\Util\Writer; +use Symfony\Component\Yaml\Inline; + +/** + * Serialization Visitor for the YAML format. + * + * @see http://www.yaml.org/spec/ + * @author Johannes M. Schmitt + */ +class YamlSerializationVisitor extends AbstractVisitor +{ + public $writer; + + private $navigator; + private $stack; + private $metadataStack; + private $currentMetadata; + + public function __construct($namingStrategy, AccessorStrategyInterface $accessorStrategy = null) + { + parent::__construct($namingStrategy, $accessorStrategy); + + $this->writer = new Writer(); + } + + public function setNavigator(GraphNavigator $navigator) + { + $this->navigator = $navigator; + $this->writer->reset(); + $this->stack = new \SplStack; + $this->metadataStack = new \SplStack; + } + + public function visitNull($data, array $type, Context $context) + { + if ('' === $this->writer->content) { + $this->writer->writeln('null'); + } + + return 'null'; + } + + public function visitString($data, array $type, Context $context) + { + $v = Inline::dump($data); + + if ('' === $this->writer->content) { + $this->writer->writeln($v); + } + + return $v; + } + + /** + * @param array $data + * @param array $type + */ + public function visitArray($data, array $type, Context $context) + { + $isHash = isset($type['params'][1]); + + $count = $this->writer->changeCount; + $isList = (isset($type['params'][0]) && !isset($type['params'][1])) + || array_keys($data) === range(0, count($data) - 1); + + foreach ($data as $k => $v) { + if (null === $v && $context->shouldSerializeNull() !== true) { + continue; + } + + if ($isList && !$isHash) { + $this->writer->writeln('-'); + } else { + $this->writer->writeln(Inline::dump($k) . ':'); + } + + $this->writer->indent(); + + if (null !== $v = $this->navigator->accept($v, $this->getElementType($type), $context)) { + $this->writer + ->rtrim(false) + ->writeln(' ' . $v); + } + + $this->writer->outdent(); + } + + if ($count === $this->writer->changeCount && isset($type['params'][1])) { + $this->writer + ->rtrim(false) + ->writeln(' {}'); + } elseif (empty($data)) { + $this->writer + ->rtrim(false) + ->writeln(' []'); + } + } + + public function visitBoolean($data, array $type, Context $context) + { + $v = $data ? 'true' : 'false'; + + if ('' === $this->writer->content) { + $this->writer->writeln($v); + } + + return $v; + } + + public function visitDouble($data, array $type, Context $context) + { + $v = (string)$data; + + if ('' === $this->writer->content) { + $this->writer->writeln($v); + } + + return $v; + } + + public function visitInteger($data, array $type, Context $context) + { + $v = (string)$data; + + if ('' === $this->writer->content) { + $this->writer->writeln($v); + } + + return $v; + } + + public function startVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + } + + public function visitProperty(PropertyMetadata $metadata, $data, Context $context) + { + $v = $this->accessor->getValue($data, $metadata); + + if (null === $v && $context->shouldSerializeNull() !== true) { + return; + } + + if ($this->namingStrategy instanceof AdvancedNamingStrategyInterface) { + $name = $this->namingStrategy->getPropertyName($metadata, $context); + } else { + $name = $this->namingStrategy->translateName($metadata); + } + + if (!$metadata->inline) { + $this->writer + ->writeln(Inline::dump($name) . ':') + ->indent(); + } + + $this->setCurrentMetadata($metadata); + + $count = $this->writer->changeCount; + + if (null !== $v = $this->navigator->accept($v, $metadata->type, $context)) { + $this->writer + ->rtrim(false) + ->writeln(' ' . $v); + } elseif ($count === $this->writer->changeCount && !$metadata->inline) { + $this->writer->revert(); + } + + if (!$metadata->inline) { + $this->writer->outdent(); + } + $this->revertCurrentMetadata(); + } + + public function endVisitingObject(ClassMetadata $metadata, $data, array $type, Context $context) + { + } + + public function setCurrentMetadata(PropertyMetadata $metadata) + { + $this->metadataStack->push($this->currentMetadata); + $this->currentMetadata = $metadata; + } + + public function revertCurrentMetadata() + { + return $this->currentMetadata = $this->metadataStack->pop(); + } + + public function getNavigator() + { + return $this->navigator; + } + + public function getResult() + { + return $this->writer->getContent(); + } +} diff --git a/vendor/jms/serializer/tests/Exclusion/DisjunctExclusionStrategyTest.php b/vendor/jms/serializer/tests/Exclusion/DisjunctExclusionStrategyTest.php new file mode 100644 index 0000000..1f70f9b --- /dev/null +++ b/vendor/jms/serializer/tests/Exclusion/DisjunctExclusionStrategyTest.php @@ -0,0 +1,161 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Exclusion; + +use JMS\Serializer\Exclusion\DisjunctExclusionStrategy; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\StaticPropertyMetadata; +use JMS\Serializer\SerializationContext; + +class DisjunctExclusionStrategyTest extends \PHPUnit_Framework_TestCase +{ + public function testShouldSkipClassShortCircuiting() + { + $metadata = new ClassMetadata('stdClass'); + $context = SerializationContext::create(); + + $strat = new DisjunctExclusionStrategy(array( + $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + )); + + $first->expects($this->once()) + ->method('shouldSkipClass') + ->with($metadata, $context) + ->will($this->returnValue(true)); + + $last->expects($this->never()) + ->method('shouldSkipClass'); + + $this->assertTrue($strat->shouldSkipClass($metadata, $context)); + } + + public function testShouldSkipClassDisjunctBehavior() + { + $metadata = new ClassMetadata('stdClass'); + $context = SerializationContext::create(); + + $strat = new DisjunctExclusionStrategy(array( + $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + )); + + $first->expects($this->once()) + ->method('shouldSkipClass') + ->with($metadata, $context) + ->will($this->returnValue(false)); + + $last->expects($this->once()) + ->method('shouldSkipClass') + ->with($metadata, $context) + ->will($this->returnValue(true)); + + $this->assertTrue($strat->shouldSkipClass($metadata, $context)); + } + + public function testShouldSkipClassReturnsFalseIfNoPredicateMatched() + { + $metadata = new ClassMetadata('stdClass'); + $context = SerializationContext::create(); + + $strat = new DisjunctExclusionStrategy(array( + $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + )); + + $first->expects($this->once()) + ->method('shouldSkipClass') + ->with($metadata, $context) + ->will($this->returnValue(false)); + + $last->expects($this->once()) + ->method('shouldSkipClass') + ->with($metadata, $context) + ->will($this->returnValue(false)); + + $this->assertFalse($strat->shouldSkipClass($metadata, $context)); + } + + public function testShouldSkipPropertyShortCircuiting() + { + $metadata = new StaticPropertyMetadata('stdClass', 'foo', 'bar'); + $context = SerializationContext::create(); + + $strat = new DisjunctExclusionStrategy(array( + $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + )); + + $first->expects($this->once()) + ->method('shouldSkipProperty') + ->with($metadata, $context) + ->will($this->returnValue(true)); + + $last->expects($this->never()) + ->method('shouldSkipProperty'); + + $this->assertTrue($strat->shouldSkipProperty($metadata, $context)); + } + + public function testShouldSkipPropertyDisjunct() + { + $metadata = new StaticPropertyMetadata('stdClass', 'foo', 'bar'); + $context = SerializationContext::create(); + + $strat = new DisjunctExclusionStrategy(array( + $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + )); + + $first->expects($this->once()) + ->method('shouldSkipProperty') + ->with($metadata, $context) + ->will($this->returnValue(false)); + + $last->expects($this->once()) + ->method('shouldSkipProperty') + ->with($metadata, $context) + ->will($this->returnValue(true)); + + $this->assertTrue($strat->shouldSkipProperty($metadata, $context)); + } + + public function testShouldSkipPropertyReturnsFalseIfNoPredicateMatches() + { + $metadata = new StaticPropertyMetadata('stdClass', 'foo', 'bar'); + $context = SerializationContext::create(); + + $strat = new DisjunctExclusionStrategy(array( + $first = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + $last = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(), + )); + + $first->expects($this->once()) + ->method('shouldSkipProperty') + ->with($metadata, $context) + ->will($this->returnValue(false)); + + $last->expects($this->once()) + ->method('shouldSkipProperty') + ->with($metadata, $context) + ->will($this->returnValue(false)); + + $this->assertFalse($strat->shouldSkipProperty($metadata, $context)); + } +} diff --git a/vendor/jms/serializer/tests/Exclusion/ExpressionLanguageExclusionStrategyTest.php b/vendor/jms/serializer/tests/Exclusion/ExpressionLanguageExclusionStrategyTest.php new file mode 100644 index 0000000..02245a7 --- /dev/null +++ b/vendor/jms/serializer/tests/Exclusion/ExpressionLanguageExclusionStrategyTest.php @@ -0,0 +1,75 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Exclusion; + +use JMS\Serializer\Exclusion\ExpressionLanguageExclusionStrategy; +use JMS\Serializer\Expression\ExpressionEvaluator; +use JMS\Serializer\Metadata\StaticPropertyMetadata; +use JMS\Serializer\SerializationContext; + +/** + * @author Asmir Mustafic + */ +class ExpressionLanguageExclusionStrategyTest extends \PHPUnit_Framework_TestCase +{ + private $visitedObject; + private $context; + private $expressionEvaluator; + private $exclusionStrategy; + + public function setUp() + { + $this->visitedObject = new \stdClass(); + + $this->context = $this->getMockBuilder(SerializationContext::class)->getMock(); + $this->context->method('getObject')->willReturn($this->visitedObject); + + $this->expressionEvaluator = $this->getMockBuilder(ExpressionEvaluator::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->exclusionStrategy = new ExpressionLanguageExclusionStrategy($this->expressionEvaluator); + } + + public function testExpressionLanguageExclusionWorks() + { + $metadata = new StaticPropertyMetadata('stdClass', 'prop', 'propVal'); + $metadata->excludeIf = 'foo'; + + $this->expressionEvaluator->expects($this->once()) + ->method('evaluate') + ->with('foo', array( + 'context' => $this->context, + 'property_metadata' => $metadata, + 'object' => $this->visitedObject, + )) + ->willReturn(true); + + $this->assertSame(true, $this->exclusionStrategy->shouldSkipProperty($metadata, $this->context)); + } + + public function testExpressionLanguageSkipsWhenNoExpression() + { + $metadata = new StaticPropertyMetadata('stdClass', 'prop', 'propVal'); + + $this->expressionEvaluator->expects($this->never())->method('evaluate'); + + $this->assertSame(false, $this->exclusionStrategy->shouldSkipProperty($metadata, $this->context)); + } +} diff --git a/vendor/jms/serializer/tests/Exclusion/GroupsExclusionStrategyTest.php b/vendor/jms/serializer/tests/Exclusion/GroupsExclusionStrategyTest.php new file mode 100644 index 0000000..f073b11 --- /dev/null +++ b/vendor/jms/serializer/tests/Exclusion/GroupsExclusionStrategyTest.php @@ -0,0 +1,68 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Exclusion; + +use JMS\Serializer\Exclusion\GroupsExclusionStrategy; +use JMS\Serializer\Metadata\StaticPropertyMetadata; +use JMS\Serializer\SerializationContext; + +class GroupsExclusionStrategyTest extends \PHPUnit_Framework_TestCase +{ + /** + * @dataProvider getExclusionRules + * @param array $propertyGroups + * @param array $groups + * @param $exclude + */ + public function testUninitializedContextIsWorking(array $propertyGroups, array $groups, $exclude) + { + $metadata = new StaticPropertyMetadata('stdClass', 'prop', 'propVal'); + $metadata->groups = $propertyGroups; + + $strat = new GroupsExclusionStrategy($groups); + $this->assertEquals($strat->shouldSkipProperty($metadata, SerializationContext::create()), $exclude); + } + + public function getExclusionRules() + { + return [ + [['foo'], ['foo'], false], + [['foo'], [], true], + [[], ['foo'], true], + [['foo'], ['bar'], true], + [['bar'], ['foo'], true], + + [['foo', GroupsExclusionStrategy::DEFAULT_GROUP], [], false], + [['foo', 'bar'], [], true], + [['foo', 'bar'], [GroupsExclusionStrategy::DEFAULT_GROUP], true], + [['foo', 'bar'], ['foo'], false], + + [['foo', GroupsExclusionStrategy::DEFAULT_GROUP], ['test'], true], + [['foo', GroupsExclusionStrategy::DEFAULT_GROUP, 'test'], ['test'], false], + + [['foo'], [GroupsExclusionStrategy::DEFAULT_GROUP], true], + [[GroupsExclusionStrategy::DEFAULT_GROUP], [], false], + [[], [GroupsExclusionStrategy::DEFAULT_GROUP], false], + [[GroupsExclusionStrategy::DEFAULT_GROUP], [GroupsExclusionStrategy::DEFAULT_GROUP], false], + [[GroupsExclusionStrategy::DEFAULT_GROUP, 'foo'], [GroupsExclusionStrategy::DEFAULT_GROUP], false], + [[GroupsExclusionStrategy::DEFAULT_GROUP], [GroupsExclusionStrategy::DEFAULT_GROUP, 'foo'], false], + [['foo'], [GroupsExclusionStrategy::DEFAULT_GROUP, 'foo'], false], + ]; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/AccessorOrderChild.php b/vendor/jms/serializer/tests/Fixtures/AccessorOrderChild.php new file mode 100644 index 0000000..273b8b9 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/AccessorOrderChild.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** @Serializer\AccessorOrder("custom", custom = {"c", "d", "a", "b"}) */ +class AccessorOrderChild extends AccessorOrderParent +{ + private $c = 'c', $d = 'd'; +} diff --git a/vendor/jms/serializer/tests/Fixtures/AccessorOrderMethod.php b/vendor/jms/serializer/tests/Fixtures/AccessorOrderMethod.php new file mode 100644 index 0000000..2277ff9 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/AccessorOrderMethod.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** @Serializer\AccessorOrder("custom", custom = {"method", "b", "a"}) */ +class AccessorOrderMethod +{ + private $b = 'b', $a = 'a'; + + /** + * @Serializer\VirtualProperty + * @Serializer\SerializedName("foo") + * + * @return string + */ + public function getMethod() + { + return 'c'; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/AccessorOrderParent.php b/vendor/jms/serializer/tests/Fixtures/AccessorOrderParent.php new file mode 100644 index 0000000..7b2d850 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/AccessorOrderParent.php @@ -0,0 +1,27 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** @Serializer\AccessorOrder("alphabetical") */ +class AccessorOrderParent +{ + private $b = 'b', $a = 'a'; +} diff --git a/vendor/jms/serializer/tests/Fixtures/AccessorSetter.php b/vendor/jms/serializer/tests/Fixtures/AccessorSetter.php new file mode 100644 index 0000000..95d4529 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/AccessorSetter.php @@ -0,0 +1,108 @@ +") + * @Serializer\Accessor(setter="setCollectionDifferent") + * @Serializer\XmlList(inline=false) + */ + protected $collection; + + /** + * @return \stdClass + */ + public function getElement() + { + return $this->element; + } + + /** + * @param AccessorSetterElement $element + */ + public function setElementDifferent(AccessorSetterElement $element) + { + $this->element = new \stdClass(); + $this->element->element = $element; + } + + /** + * @return array + */ + public function getCollection() + { + return $this->collection; + } + + /** + * @param array $collection + */ + public function setCollectionDifferent($collection) + { + $this->collection = array_combine($collection, $collection); + } +} + +class AccessorSetterElement +{ + /** + * @var string + * @Serializer\Type("string") + * @Serializer\Accessor(setter="setAttributeDifferent") + * @Serializer\XmlAttribute + */ + protected $attribute; + + /** + * @var string + * @Serializer\Type("string") + * @Serializer\Accessor(setter="setElementDifferent") + * @Serializer\XmlValue + */ + protected $element; + + /** + * @return string + */ + public function getAttribute() + { + return $this->attribute; + } + + /** + * @param string $attribute + */ + public function setAttributeDifferent($attribute) + { + $this->attribute = $attribute . "-different"; + } + + + /** + * @param string $element + */ + public function setElementDifferent($element) + { + $this->element = $element . "-different"; + } + + /** + * @return string + */ + public function getElement() + { + return $this->element; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/AllExcludedObject.php b/vendor/jms/serializer/tests/Fixtures/AllExcludedObject.php new file mode 100644 index 0000000..f5a313a --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/AllExcludedObject.php @@ -0,0 +1,37 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\ExclusionPolicy; +use JMS\Serializer\Annotation\Expose; + +/** + * @ExclusionPolicy("all") + * + * @author Johannes M. Schmitt + */ +class AllExcludedObject +{ + private $foo = 'foo'; + + /** + * @Expose + */ + private $bar = 'bar'; +} diff --git a/vendor/jms/serializer/tests/Fixtures/Article.php b/vendor/jms/serializer/tests/Fixtures/Article.php new file mode 100644 index 0000000..8ef1afe --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Article.php @@ -0,0 +1,70 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\HandlerCallback; +use JMS\Serializer\Context; +use JMS\Serializer\JsonDeserializationVisitor; +use JMS\Serializer\JsonSerializationVisitor; +use JMS\Serializer\XmlDeserializationVisitor; +use JMS\Serializer\XmlSerializationVisitor; +use JMS\Serializer\YamlSerializationVisitor; +use Symfony\Component\Yaml\Inline; + +class Article +{ + public $element; + public $value; + + /** @HandlerCallback("xml", direction = "serialization") */ + public function serializeToXml(XmlSerializationVisitor $visitor, $data, Context $context) + { + if (null === $visitor->document) { + $visitor->document = $visitor->createDocument(null, null, false); + } + + $visitor->document->appendChild($visitor->document->createElement($this->element, $this->value)); + } + + /** @HandlerCallback("json", direction = "serialization") */ + public function serializeToJson(JsonSerializationVisitor $visitor) + { + $visitor->setRoot(array($this->element => $this->value)); + } + + /** @HandlerCallback("yml", direction = "serialization") */ + public function serializeToYml(YamlSerializationVisitor $visitor) + { + $visitor->writer->writeln(Inline::dump($this->element) . ': ' . Inline::dump($this->value)); + } + + /** @HandlerCallback("xml", direction = "deserialization") */ + public function deserializeFromXml(XmlDeserializationVisitor $visitor, \SimpleXMLElement $data) + { + $this->element = $data->getName(); + $this->value = (string)$data; + } + + /** @HandlerCallback("json", direction = "deserialization") */ + public function deserializeFromJson(JsonDeserializationVisitor $visitor, array $data) + { + $this->element = key($data); + $this->value = reset($data); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Author.php b/vendor/jms/serializer/tests/Fixtures/Author.php new file mode 100644 index 0000000..4171761 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Author.php @@ -0,0 +1,41 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; + +class Author +{ + /** + * @Type("string") + * @SerializedName("full_name") + */ + private $name; + + public function __construct($name) + { + $this->name = $name; + } + + public function getName() + { + return $this->name; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/AuthorExpressionAccess.php b/vendor/jms/serializer/tests/Fixtures/AuthorExpressionAccess.php new file mode 100644 index 0000000..4969023 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/AuthorExpressionAccess.php @@ -0,0 +1,59 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\VirtualProperty("firstName", exp="object.getFirstName()", options={@Serializer\SerializedName("my_first_name")}) + */ +class AuthorExpressionAccess +{ + private $id; + /** + * @Serializer\Exclude() + */ + private $firstName; + + /** + * @Serializer\Exclude() + */ + private $lastName; + + public function __construct($id, $firstName, $lastName) + { + $this->id = $id; + $this->firstName = $firstName; + $this->lastName = $lastName; + } + + public function getFirstName() + { + return $this->firstName; + } + + /** + * @Serializer\VirtualProperty() + */ + public function getLastName() + { + return $this->lastName; + } + +} diff --git a/vendor/jms/serializer/tests/Fixtures/AuthorList.php b/vendor/jms/serializer/tests/Fixtures/AuthorList.php new file mode 100644 index 0000000..642bef8 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/AuthorList.php @@ -0,0 +1,94 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** + * An array-acting object that holds many author instances. + */ +class AuthorList implements \IteratorAggregate, \Countable, \ArrayAccess +{ + /** + * @Serializer\Type("array") + * @var array + */ + protected $authors = array(); + + /** + * @param Author $author + */ + public function add(Author $author) + { + $this->authors[] = $author; + } + + /** + * @see IteratorAggregate + */ + public function getIterator() + { + return new \ArrayIterator($this->authors); + } + + /** + * @see Countable + */ + public function count() + { + return count($this->authors); + } + + /** + * @see ArrayAccess + */ + public function offsetExists($offset) + { + return isset($this->authors[$offset]); + } + + /** + * @see ArrayAccess + */ + public function offsetGet($offset) + { + return isset($this->authors[$offset]) ? $this->authors[$offset] : null; + } + + /** + * @see ArrayAccess + */ + public function offsetSet($offset, $value) + { + if (null === $offset) { + $this->authors[] = $value; + } else { + $this->authors[$offset] = $value; + } + } + + /** + * @see ArrayAccess + */ + public function offsetUnset($offset) + { + unset($this->authors[$offset]); + } + +} diff --git a/vendor/jms/serializer/tests/Fixtures/AuthorReadOnly.php b/vendor/jms/serializer/tests/Fixtures/AuthorReadOnly.php new file mode 100644 index 0000000..d9bc482 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/AuthorReadOnly.php @@ -0,0 +1,58 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Accessor; +use JMS\Serializer\Annotation\ReadOnly; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlRoot; + +/** @XmlRoot("author") */ +class AuthorReadOnly +{ + /** + * @ReadOnly + * @SerializedName("id") + */ + private $id; + + /** + * @Type("string") + * @SerializedName("full_name") + * @Accessor("getName") + */ + private $name; + + public function __construct($id, $name) + { + $this->id = $id; + $this->name = $name; + } + + public function getId() + { + return $this->id; + } + + public function getName() + { + return $this->name; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/AuthorReadOnlyPerClass.php b/vendor/jms/serializer/tests/Fixtures/AuthorReadOnlyPerClass.php new file mode 100644 index 0000000..360b22f --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/AuthorReadOnlyPerClass.php @@ -0,0 +1,62 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Accessor; +use JMS\Serializer\Annotation\ReadOnly; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("author") + * @ReadOnly + */ +class AuthorReadOnlyPerClass +{ + /** + * @ReadOnly + * @SerializedName("id") + */ + private $id; + + /** + * @Type("string") + * @SerializedName("full_name") + * @Accessor("getName") + * @ReadOnly(false) + */ + private $name; + + public function __construct($id, $name) + { + $this->id = $id; + $this->name = $name; + } + + public function getId() + { + return $this->id; + } + + public function getName() + { + return $this->name; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/BlogPost.php b/vendor/jms/serializer/tests/Fixtures/BlogPost.php new file mode 100644 index 0000000..b496a91 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/BlogPost.php @@ -0,0 +1,159 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use Doctrine\Common\Collections\ArrayCollection; +use JMS\Serializer\Annotation\Groups; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlMap; +use JMS\Serializer\Annotation\XmlNamespace; +use JMS\Serializer\Annotation\XmlRoot; +use PhpCollection\Map; +use PhpCollection\Sequence; + +/** + * @XmlRoot("blog-post") + * @XmlNamespace(uri="http://example.com/namespace") + * @XmlNamespace(uri="http://schemas.google.com/g/2005", prefix="gd") + * @XmlNamespace(uri="http://www.w3.org/2005/Atom", prefix="atom") + * @XmlNamespace(uri="http://purl.org/dc/elements/1.1/", prefix="dc") + */ +class BlogPost +{ + /** + * @Type("string") + * @XmlElement(cdata=false) + * @Groups({"comments","post"}) + */ + private $id = 'what_a_nice_id'; + + /** + * @Type("string") + * @Groups({"comments","post"}) + * @XmlElement(namespace="http://purl.org/dc/elements/1.1/"); + */ + private $title; + + /** + * @Type("DateTime") + * @XmlAttribute + */ + private $createdAt; + + /** + * @Type("boolean") + * @SerializedName("is_published") + * @XmlAttribute + * @Groups({"post"}) + */ + private $published; + + /** + * @Type("bool") + * @SerializedName("is_reviewed") + * @XmlAttribute + * @Groups({"post"}) + */ + private $reviewed; + + /** + * @Type("string") + * @XmlAttribute(namespace="http://schemas.google.com/g/2005") + * @Groups({"post"}) + */ + private $etag; + + /** + * @Type("ArrayCollection") + * @XmlList(inline=true, entry="comment") + * @Groups({"comments"}) + */ + private $comments; + + /** + * @Type("PhpCollection\Sequence") + * @XmlList(inline=true, entry="comment2") + * @Groups({"comments"}) + */ + private $comments2; + + /** + * @Type("PhpCollection\Map") + * @XmlMap(keyAttribute = "key") + */ + private $metadata; + + /** + * @Type("JMS\Serializer\Tests\Fixtures\Author") + * @Groups({"post"}) + * @XmlElement(namespace="http://www.w3.org/2005/Atom") + */ + private $author; + + /** + * @Type("JMS\Serializer\Tests\Fixtures\Publisher") + */ + private $publisher; + + /** + * @Type("array") + * @XmlList(inline=true, entry="tag", namespace="http://purl.org/dc/elements/1.1/"); + */ + private $tag; + + public function __construct($title, Author $author, \DateTime $createdAt, Publisher $publisher) + { + $this->title = $title; + $this->author = $author; + $this->publisher = $publisher; + $this->published = false; + $this->reviewed = false; + $this->comments = new ArrayCollection(); + $this->comments2 = new Sequence(); + $this->metadata = new Map(); + $this->metadata->set('foo', 'bar'); + $this->createdAt = $createdAt; + $this->etag = sha1($this->createdAt->format(\DateTime::ISO8601)); + } + + public function setPublished() + { + $this->published = true; + } + + public function getMetadata() + { + return $this->metadata; + } + + public function addComment(Comment $comment) + { + $this->comments->add($comment); + $this->comments2->add($comment); + } + + public function addTag(Tag $tag) + { + $this->tag[] = $tag; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/CircularReferenceChild.php b/vendor/jms/serializer/tests/Fixtures/CircularReferenceChild.php new file mode 100644 index 0000000..c31f1b4 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/CircularReferenceChild.php @@ -0,0 +1,51 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + +class CircularReferenceChild +{ + /** @Type("string") */ + private $name; + + /** @Type("JMS\Serializer\Tests\Fixtures\CircularReferenceParent") */ + private $parent; + + public function __construct($name, CircularReferenceParent $parent) + { + $this->name = $name; + $this->parent = $parent; + } + + public function getName() + { + return $this->name; + } + + public function getParent() + { + return $this->parent; + } + + public function setParent(CircularReferenceParent $parent) + { + $this->parent = $parent; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/CircularReferenceParent.php b/vendor/jms/serializer/tests/Fixtures/CircularReferenceParent.php new file mode 100644 index 0000000..329e509 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/CircularReferenceParent.php @@ -0,0 +1,61 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use Doctrine\Common\Collections\ArrayCollection; +use JMS\Serializer\Annotation\PostDeserialize; +use JMS\Serializer\Annotation\Type; + +/** No annotation */ +class CircularReferenceParent +{ + /** @Type("array") */ + protected $collection = array(); + + /** @Type("ArrayCollection") */ + private $anotherCollection; + + public function __construct() + { + $this->collection[] = new CircularReferenceChild('child1', $this); + $this->collection[] = new CircularReferenceChild('child2', $this); + + $this->anotherCollection = new ArrayCollection(); + $this->anotherCollection->add(new CircularReferenceChild('child1', $this)); + $this->anotherCollection->add(new CircularReferenceChild('child2', $this)); + } + + /** @PostDeserialize */ + private function afterDeserialization() + { + if (!$this->collection) { + $this->collection = array(); + } + foreach ($this->collection as $v) { + $v->setParent($this); + } + + if (!$this->anotherCollection) { + $this->anotherCollection = new ArrayCollection(); + } + foreach ($this->anotherCollection as $v) { + $v->setParent($this); + } + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Comment.php b/vendor/jms/serializer/tests/Fixtures/Comment.php new file mode 100644 index 0000000..9c06157 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Comment.php @@ -0,0 +1,45 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + +class Comment +{ + /** + * @Type("JMS\Serializer\Tests\Fixtures\Author") + */ + private $author; + + /** + * @Type("string") + */ + private $text; + + public function __construct(Author $author = null, $text) + { + $this->author = $author; + $this->text = $text; + } + + public function getAuthor() + { + return $this->author; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ContextualNamingStrategy.php b/vendor/jms/serializer/tests/Fixtures/ContextualNamingStrategy.php new file mode 100644 index 0000000..befa0bf --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ContextualNamingStrategy.php @@ -0,0 +1,40 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Context; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Naming\AdvancedNamingStrategyInterface; + +/** + * Class ContextualNamingStrategy + * + * Only use this class for testing purpose + */ +class ContextualNamingStrategy implements AdvancedNamingStrategyInterface +{ + public function getPropertyName(PropertyMetadata $property, Context $context) + { + if ($context->getDirection() == GraphNavigator::DIRECTION_SERIALIZATION) { + return strtoupper($property->name); + } + return ucfirst($property->name); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/CurrencyAwareOrder.php b/vendor/jms/serializer/tests/Fixtures/CurrencyAwareOrder.php new file mode 100644 index 0000000..b4b0bc7 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/CurrencyAwareOrder.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlRoot; + +/** @XmlRoot("order") */ +class CurrencyAwareOrder +{ + /** @Type("JMS\Serializer\Tests\Fixtures\CurrencyAwarePrice") */ + private $cost; + + public function __construct(CurrencyAwarePrice $price = null) + { + $this->cost = $price ?: new CurrencyAwarePrice(5); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/CurrencyAwarePrice.php b/vendor/jms/serializer/tests/Fixtures/CurrencyAwarePrice.php new file mode 100644 index 0000000..654022e --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/CurrencyAwarePrice.php @@ -0,0 +1,43 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** @Serializer\XmlRoot("price") */ +class CurrencyAwarePrice +{ + /** + * @Serializer\XmlAttribute + * @Serializer\Type("string") + */ + private $currency; + + /** + * @Serializer\XmlValue + * @Serializer\Type("double") + */ + private $amount; + + public function __construct($amount, $currency = 'EUR') + { + $this->currency = $currency; + $this->amount = $amount; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/CustomDeserializationObject.php b/vendor/jms/serializer/tests/Fixtures/CustomDeserializationObject.php new file mode 100644 index 0000000..3a37e49 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/CustomDeserializationObject.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + +class CustomDeserializationObject +{ + /** + * @Type("string") + */ + public $someProperty; + + public function __construct($value) + { + $this->someProperty = $value; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/DateTimeArraysObject.php b/vendor/jms/serializer/tests/Fixtures/DateTimeArraysObject.php new file mode 100644 index 0000000..4e59f57 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/DateTimeArraysObject.php @@ -0,0 +1,60 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + + +class DateTimeArraysObject +{ + /** + * @var \DateTime[] + * @Type("array") + */ + private $arrayWithDefaultDateTime; + + /** + * @var \DateTime[] + * @Type("array>") + */ + private $arrayWithFormattedDateTime; + + + function __construct($arrayWithDefaultDateTime, $arrayWithFormattedDateTime) + { + $this->arrayWithDefaultDateTime = $arrayWithDefaultDateTime; + $this->arrayWithFormattedDateTime = $arrayWithFormattedDateTime; + } + + /** + * @return \DateTime[] + */ + public function getArrayWithDefaultDateTime() + { + return $this->arrayWithDefaultDateTime; + } + + /** + * @return \DateTime[] + */ + public function getArrayWithFormattedDateTime() + { + return $this->arrayWithFormattedDateTime; + } + +} diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/Car.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/Car.php new file mode 100644 index 0000000..3b2ed3d --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/Car.php @@ -0,0 +1,23 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +class Car extends Vehicle implements VehicleInterface +{ +} diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/Moped.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/Moped.php new file mode 100644 index 0000000..d6867b2 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/Moped.php @@ -0,0 +1,23 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +class Moped extends Vehicle implements VehicleInterface +{ +} diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorChild.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorChild.php new file mode 100644 index 0000000..2a39644 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorChild.php @@ -0,0 +1,23 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +class ObjectWithXmlAttributeDiscriminatorChild extends ObjectWithXmlAttributeDiscriminatorParent +{ +} \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorParent.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorParent.php new file mode 100644 index 0000000..8aeded6 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlAttributeDiscriminatorParent.php @@ -0,0 +1,32 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\Discriminator(field = "type", map = { + * "child": "JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlAttributeDiscriminatorChild" + * }) + * @Serializer\XmlDiscriminator(attribute=true, cdata=false) + */ +class ObjectWithXmlAttributeDiscriminatorParent +{ + +} \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorChild.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorChild.php new file mode 100644 index 0000000..2ffd428 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorChild.php @@ -0,0 +1,23 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +class ObjectWithXmlNamespaceDiscriminatorChild extends ObjectWithXmlNamespaceDiscriminatorParent +{ +} diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorParent.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorParent.php new file mode 100644 index 0000000..ca433a4 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNamespaceDiscriminatorParent.php @@ -0,0 +1,33 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\Discriminator(field = "type", map = { + * "child": "JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNamespaceDiscriminatorChild" + * }) + * @Serializer\XmlDiscriminator(namespace="http://example.com/", cdata=false) + * @Serializer\XmlNamespace(prefix="foo", uri="http://example.com/") + */ +class ObjectWithXmlNamespaceDiscriminatorParent +{ + +} diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorChild.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorChild.php new file mode 100644 index 0000000..e45af7b --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorChild.php @@ -0,0 +1,23 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +class ObjectWithXmlNotCDataDiscriminatorChild extends ObjectWithXmlNotCDataDiscriminatorParent +{ +} diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorParent.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorParent.php new file mode 100644 index 0000000..b57d568 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/ObjectWithXmlNotCDataDiscriminatorParent.php @@ -0,0 +1,32 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\Discriminator(field = "type", map = { + * "child": "JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNotCDataDiscriminatorChild" + * }) + * @Serializer\XmlDiscriminator(cdata=false) + */ +class ObjectWithXmlNotCDataDiscriminatorParent +{ + +} diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/Vehicle.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/Vehicle.php new file mode 100644 index 0000000..6c6e223 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/Vehicle.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\Discriminator(field = "type", map = { + * "car": "JMS\Serializer\Tests\Fixtures\Discriminator\Car", + * "moped": "JMS\Serializer\Tests\Fixtures\Discriminator\Moped", + * }) + */ +abstract class Vehicle +{ + /** @Serializer\Type("integer") */ + public $km; + + public function __construct($km) + { + $this->km = (integer)$km; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Discriminator/VehicleInterface.php b/vendor/jms/serializer/tests/Fixtures/Discriminator/VehicleInterface.php new file mode 100644 index 0000000..1fe39e5 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Discriminator/VehicleInterface.php @@ -0,0 +1,31 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Discriminator; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\Discriminator(field = "type", map = { + * "car": "JMS\Serializer\Tests\Fixtures\Discriminator\Car", + * "moped": "JMS\Serializer\Tests\Fixtures\Discriminator\Moped", + * }) + */ +interface VehicleInterface +{ +} diff --git a/vendor/jms/serializer/tests/Fixtures/DiscriminatorGroup/Car.php b/vendor/jms/serializer/tests/Fixtures/DiscriminatorGroup/Car.php new file mode 100644 index 0000000..01a10bb --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/DiscriminatorGroup/Car.php @@ -0,0 +1,23 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\DiscriminatorGroup; + +class Car extends Vehicle +{ +} diff --git a/vendor/jms/serializer/tests/Fixtures/DiscriminatorGroup/Vehicle.php b/vendor/jms/serializer/tests/Fixtures/DiscriminatorGroup/Vehicle.php new file mode 100644 index 0000000..857be1e --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/DiscriminatorGroup/Vehicle.php @@ -0,0 +1,40 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\DiscriminatorGroup; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\Discriminator(field = "type", groups={"foo"}, map = { + * "car": "JMS\Serializer\Tests\Fixtures\DiscriminatorGroup\Car" + * }) + */ +abstract class Vehicle +{ + /** + * @Serializer\Type("integer") + * @Serializer\Groups({"foo"}) + */ + public $km; + + public function __construct($km) + { + $this->km = (integer)$km; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Doctrine/Author.php b/vendor/jms/serializer/tests/Fixtures/Doctrine/Author.php new file mode 100644 index 0000000..bf2c2a0 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Doctrine/Author.php @@ -0,0 +1,48 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Doctrine; + +use Doctrine\ORM\Mapping as ORM; +use JMS\Serializer\Annotation\SerializedName; + +/** @ORM\Entity */ +class Author +{ + /** + * @ORM\Id @ORM\Column(type="integer") + */ + protected $id; + + /** + * @ORM\Column(type="string") + * @SerializedName("full_name") + */ + private $name; + + public function __construct($name, $id = null) + { + $this->name = $name; + $this->id = $id; + } + + public function getName() + { + return $this->name; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Doctrine/BlogPost.php b/vendor/jms/serializer/tests/Fixtures/Doctrine/BlogPost.php new file mode 100644 index 0000000..8a493fa --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Doctrine/BlogPost.php @@ -0,0 +1,117 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Doctrine; + +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Mapping as ORM; +use JMS\Serializer\Annotation as Serializer; +use JMS\Serializer\Annotation\Groups; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @ORM\Entity + * @XmlRoot("blog-post") + */ +class BlogPost +{ + /** + * @ORM\Id @ORM\Column(type="guid") @ORM\GeneratedValue(strategy="UUID") + */ + protected $id; + + /** + * @ORM\Column(type="string") + * @Groups({"comments","post"}) + */ + private $title; + + /** + * @ORM\Column(type="some_custom_type") + */ + protected $slug; + + /** + * @ORM\Column(type="datetime") + * @XmlAttribute + */ + private $createdAt; + + /** + * @ORM\Column(type="boolean") + * @Type("integer") + * This boolean to integer conversion is one of the few changes between this + * and the standard BlogPost class. It's used to test the override behavior + * of the DoctrineTypeDriver so notice it, but please don't change it. + * + * @SerializedName("is_published") + * @Groups({"post"}) + * @XmlAttribute + */ + private $published; + + /** + * @ORM\OneToMany(targetEntity="Comment", mappedBy="blogPost") + * @XmlList(inline=true, entry="comment") + * @Groups({"comments"}) + */ + private $comments; + + /** + * @ORM\OneToOne(targetEntity="Author") + * @Groups({"post"}) + */ + private $author; + + /** + * @ORM\Column(type="integer") + * @Serializer\Exclude() + */ + private $ref; + + public function __construct($title, Author $author, \DateTime $createdAt) + { + $this->title = $title; + $this->author = $author; + $this->published = false; + $this->comments = new ArrayCollection(); + $this->createdAt = $createdAt; + } + + public function setPublished() + { + $this->published = true; + } + + public function addComment(Comment $comment) + { + $this->comments->add($comment); + } + + /** + * @Serializer\VirtualProperty() + */ + public function getRef() + { + return $this->ref; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Doctrine/Comment.php b/vendor/jms/serializer/tests/Fixtures/Doctrine/Comment.php new file mode 100644 index 0000000..8885ac1 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Doctrine/Comment.php @@ -0,0 +1,56 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\Doctrine; + +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Mapping as ORM; + +/** @ORM\Entity */ +class Comment +{ + /** + * @ORM\Id @ORM\Column(type="integer") + */ + protected $id; + + /** + * @ORM\Column(type="Author") + */ + private $author; + + /** @ORM\ManyToOne(targetEntity="BlogPost") */ + private $blogPost; + + /** + * @ORM\Column(type="string") + */ + private $text; + + public function __construct(Author $author, $text) + { + $this->author = $author; + $this->text = $text; + $this->blogPost = new ArrayCollection(); + } + + public function getAuthor() + { + return $this->author; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/AbstractModel.php b/vendor/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/AbstractModel.php new file mode 100644 index 0000000..d6994e4 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/AbstractModel.php @@ -0,0 +1,10 @@ +teacher = $teacher; + $this->students = new ArrayCollection($students); + } + + public function getId() + { + return $this->id; + } + + public function getTeacher() + { + return $this->teacher; + } + + public function getStudents() + { + return $this->students; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Organization.php b/vendor/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Organization.php new file mode 100644 index 0000000..1c386b4 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Doctrine/SingleTableInheritance/Organization.php @@ -0,0 +1,19 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\DoctrinePHPCR; + +use Doctrine\ODM\PHPCR\Mapping\Annotations as PHPCRODM; +use JMS\Serializer\Annotation\SerializedName; + +/** @PHPCRODM\Document */ +class Author +{ + /** + * @PHPCRODM\Id() + */ + protected $id; + + /** + * @PHPCRODM\Field(type="string") + * @SerializedName("full_name") + */ + private $name; + + public function __construct($name) + { + $this->name = $name; + } + + public function getName() + { + return $this->name; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/DoctrinePHPCR/BlogPost.php b/vendor/jms/serializer/tests/Fixtures/DoctrinePHPCR/BlogPost.php new file mode 100644 index 0000000..2ae4f63 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/DoctrinePHPCR/BlogPost.php @@ -0,0 +1,102 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\DoctrinePHPCR; + +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ODM\PHPCR\Mapping\Annotations as PHPCRODM; +use JMS\Serializer\Annotation\Groups; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @PHPCRODM\Document + * @XmlRoot("blog-post") + */ +class BlogPost +{ + /** + * @PHPCRODM\Id() + */ + protected $id; + + /** + * @PHPCRODM\Field(type="string") + * @Groups({"comments","post"}) + */ + private $title; + + /** + * @PHPCRODM\Field(type="string") + */ + protected $slug; + + /** + * @PHPCRODM\Field(type="date") + * @XmlAttribute + */ + private $createdAt; + + /** + * @PHPCRODM\Field(type="boolean") + * @Type("integer") + * This boolean to integer conversion is one of the few changes between this + * and the standard BlogPost class. It's used to test the override behavior + * of the DoctrineTypeDriver so notice it, but please don't change it. + * + * @SerializedName("is_published") + * @Groups({"post"}) + * @XmlAttribute + */ + private $published; + + /** + * @PHPCRODM\ReferenceMany(targetDocument="Comment", property="blogPost") + * @XmlList(inline=true, entry="comment") + * @Groups({"comments"}) + */ + private $comments; + + /** + * @PHPCRODM\ReferenceOne(targetDocument="Author") + * @Groups({"post"}) + */ + private $author; + + public function __construct($title, Author $author, \DateTime $createdAt) + { + $this->title = $title; + $this->author = $author; + $this->published = false; + $this->comments = new ArrayCollection(); + $this->createdAt = $createdAt; + } + + public function setPublished() + { + $this->published = true; + } + + public function addComment(Comment $comment) + { + $this->comments->add($comment); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/DoctrinePHPCR/Comment.php b/vendor/jms/serializer/tests/Fixtures/DoctrinePHPCR/Comment.php new file mode 100644 index 0000000..ac195cf --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/DoctrinePHPCR/Comment.php @@ -0,0 +1,56 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures\DoctrinePHPCR; + +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ODM\PHPCR\Mapping\Annotations as PHPCRODM; + +/** @PHPCRODM\Document */ +class Comment +{ + /** + * @PHPCRODM\Id() + */ + protected $id; + + /** + * @PHPCRODM\ReferenceOne(targetDocument="Author") + */ + private $author; + + /** @PHPCRODM\ReferenceOne(targetDocument="BlogPost") */ + private $blogPost; + + /** + * @PHPCRODM\Field(type="string") + */ + private $text; + + public function __construct(Author $author, $text) + { + $this->author = $author; + $this->text = $text; + $this->blogPost = new ArrayCollection(); + } + + public function getAuthor() + { + return $this->author; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ExcludePublicAccessor.php b/vendor/jms/serializer/tests/Fixtures/ExcludePublicAccessor.php new file mode 100644 index 0000000..3224d3f --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ExcludePublicAccessor.php @@ -0,0 +1,50 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\AccessType; +use JMS\Serializer\Annotation\Exclude; +use JMS\Serializer\Annotation\ReadOnly; + +/** + */ + +/** + * @AccessType("public_method") + * @ReadOnly + */ +class ExcludePublicAccessor +{ + /** + * @Exclude + * + * @var mixed + */ + private $iShallNotBeAccessed; + + /** + * @var int + */ + private $id = 1; + + public function getId() + { + return $this->id; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ExclusionStrategy/AlwaysExcludeExclusionStrategy.php b/vendor/jms/serializer/tests/Fixtures/ExclusionStrategy/AlwaysExcludeExclusionStrategy.php new file mode 100644 index 0000000..184a0e7 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ExclusionStrategy/AlwaysExcludeExclusionStrategy.php @@ -0,0 +1,21 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + +class Garage +{ + /** + * @Type("array") + */ + public $vehicles; + + public function __construct($vehicles) + { + $this->vehicles = $vehicles; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/GetSetObject.php b/vendor/jms/serializer/tests/Fixtures/GetSetObject.php new file mode 100644 index 0000000..2094f3e --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/GetSetObject.php @@ -0,0 +1,65 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\AccessType; +use JMS\Serializer\Annotation\Exclude; +use JMS\Serializer\Annotation\ReadOnly; +use JMS\Serializer\Annotation\Type; + +/** @AccessType("public_method") */ +class GetSetObject +{ + /** @AccessType("property") @Type("integer") */ + private $id = 1; + + /** @Type("string") */ + private $name = 'Foo'; + + /** + * @ReadOnly + */ + private $readOnlyProperty = 42; + + /** + * This property should be exlcluded + * @Exclude() + */ + private $excludedProperty; + + public function getId() + { + throw new \RuntimeException('This should not be called.'); + } + + public function getName() + { + return 'Johannes'; + } + + public function setName($name) + { + $this->name = $name; + } + + public function getReadOnlyProperty() + { + return $this->readOnlyProperty; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/GroupsObject.php b/vendor/jms/serializer/tests/Fixtures/GroupsObject.php new file mode 100644 index 0000000..c3b1f8b --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/GroupsObject.php @@ -0,0 +1,57 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Groups; +use JMS\Serializer\Annotation\Type; + +/** blablub */ +class GroupsObject +{ + /** + * @Groups({"foo"}) + * @Type("string") + */ + private $foo; + + /** + * @Groups({"foo","bar"}) + * @Type("string") + */ + private $foobar; + + /** + * @Groups({"bar", "Default"}) + * @Type("string") + */ + private $bar; + + /** + * @Type("string") + */ + private $none; + + public function __construct() + { + $this->foo = "foo"; + $this->bar = "bar"; + $this->foobar = "foobar"; + $this->none = "none"; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/GroupsTrim.php b/vendor/jms/serializer/tests/Fixtures/GroupsTrim.php new file mode 100644 index 0000000..e25d418 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/GroupsTrim.php @@ -0,0 +1,51 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\Groups; + +class GroupsTrim +{ + /** + * @var int + */ + private $amount; + + /** + * @var string + */ + private $currency; + + public function __construct($amount, $currency) + { + $this->amount = (int) $amount; + $this->currency = $currency; + } + + public function getAmount() + { + return $this->amount; + } + + public function getCurrency() + { + return $this->currency; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/GroupsUser.php b/vendor/jms/serializer/tests/Fixtures/GroupsUser.php new file mode 100644 index 0000000..534df65 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/GroupsUser.php @@ -0,0 +1,48 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Groups; + +class GroupsUser +{ + private $name; + + /** + * @Groups({"nickname_group"}) + */ + private $nickname = 'nickname'; + + /** + * @Groups({"manager_group"}) + */ + private $manager; + + /** + * @Groups({"friends_group"}) + */ + private $friends; + + public function __construct($name, GroupsUser $manager = null, array $friends = array()) + { + $this->name = $name; + $this->manager = $manager; + $this->friends = $friends; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/IndexedCommentsBlogPost.php b/vendor/jms/serializer/tests/Fixtures/IndexedCommentsBlogPost.php new file mode 100644 index 0000000..b23bf3e --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/IndexedCommentsBlogPost.php @@ -0,0 +1,73 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Accessor; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlMap; +use JMS\Serializer\Annotation\XmlRoot; + +/** @XmlRoot("post") */ +class IndexedCommentsBlogPost +{ + /** + * @XmlMap(keyAttribute="author-name", inline=true, entry="comments") + * @Accessor(getter="getCommentsIndexedByAuthor") + */ + private $comments = array(); + + public function __construct() + { + $author = new Author('Foo'); + $this->comments[] = new Comment($author, 'foo'); + $this->comments[] = new Comment($author, 'bar'); + } + + public function getCommentsIndexedByAuthor() + { + $indexedComments = array(); + foreach ($this->comments as $comment) { + $authorName = $comment->getAuthor()->getName(); + + if (!isset($indexedComments[$authorName])) { + $indexedComments[$authorName] = new IndexedCommentsList(); + } + + $indexedComments[$authorName]->addComment($comment); + } + + return $indexedComments; + } +} + +class IndexedCommentsList +{ + /** @XmlList(inline=true, entry="comment") */ + private $comments = array(); + + /** @XmlAttribute */ + private $count = 0; + + public function addComment(Comment $comment) + { + $this->comments[] = $comment; + $this->count += 1; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/InitializedBlogPostConstructor.php b/vendor/jms/serializer/tests/Fixtures/InitializedBlogPostConstructor.php new file mode 100644 index 0000000..8955458 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/InitializedBlogPostConstructor.php @@ -0,0 +1,36 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Construction\UnserializeObjectConstructor; +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\VisitorInterface; + +class InitializedBlogPostConstructor extends UnserializeObjectConstructor +{ + public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context) + { + if ($type['name'] !== 'JMS\Serializer\Tests\Fixtures\BlogPost') { + return parent::construct($visitor, $metadata, $data, $type); + } + + return new BlogPost('This is a nice title.', new Author('Foo Bar'), new \DateTime('2011-07-30 00:00', new \DateTimeZone('UTC')), new Publisher('Bar Foo')); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/InitializedObjectConstructor.php b/vendor/jms/serializer/tests/Fixtures/InitializedObjectConstructor.php new file mode 100644 index 0000000..b2a0e75 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/InitializedObjectConstructor.php @@ -0,0 +1,56 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Construction\ObjectConstructorInterface; +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\VisitorInterface; + +/** + * Object constructor that allows deserialization into already constructed + * objects passed through the deserialization context + */ +class InitializedObjectConstructor implements ObjectConstructorInterface +{ + private $fallbackConstructor; + + /** + * Constructor. + * + * @param ObjectConstructorInterface $fallbackConstructor Fallback object constructor + */ + public function __construct(ObjectConstructorInterface $fallbackConstructor) + { + $this->fallbackConstructor = $fallbackConstructor; + } + + /** + * {@inheritdoc} + */ + public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context) + { + if ($context->attributes->containsKey('target') && $context->getDepth() === 1) { + return $context->attributes->get('target')->get(); + } + + return $this->fallbackConstructor->construct($visitor, $metadata, $data, $type, $context); + } + +} diff --git a/vendor/jms/serializer/tests/Fixtures/InlineChild.php b/vendor/jms/serializer/tests/Fixtures/InlineChild.php new file mode 100644 index 0000000..2121da9 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/InlineChild.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + +class InlineChild +{ + /** + * @Type("string") + */ + public $a = 'a'; + + /** + * @Type("string") + */ + public $b = 'b'; +} diff --git a/vendor/jms/serializer/tests/Fixtures/InlineChildEmpty.php b/vendor/jms/serializer/tests/Fixtures/InlineChildEmpty.php new file mode 100644 index 0000000..04eda30 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/InlineChildEmpty.php @@ -0,0 +1,24 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +class InlineChildEmpty +{ + +} diff --git a/vendor/jms/serializer/tests/Fixtures/InlineChildWithGroups.php b/vendor/jms/serializer/tests/Fixtures/InlineChildWithGroups.php new file mode 100644 index 0000000..ceb592b --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/InlineChildWithGroups.php @@ -0,0 +1,37 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; +use JMS\Serializer\Annotation\Type; + +class InlineChildWithGroups +{ + /** + * @Type("string") + * @Serializer\Groups({"a"}) + */ + public $a = 'a'; + + /** + * @Type("string") + * @Serializer\Groups({"b"}) + */ + public $b = 'b'; +} diff --git a/vendor/jms/serializer/tests/Fixtures/InlineParent.php b/vendor/jms/serializer/tests/Fixtures/InlineParent.php new file mode 100644 index 0000000..39b71a6 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/InlineParent.php @@ -0,0 +1,46 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; +use JMS\Serializer\Annotation\Type; + +/** @Serializer\AccessorOrder("alphabetical") */ +class InlineParent +{ + /** + * @Type("string") + */ + private $c = 'c'; + + /** + * @Type("string") + */ + private $d = 'd'; + + /** + * @Serializer\Inline + */ + private $child; + + public function __construct($child = null) + { + $this->child = $child ?: new InlineChild(); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Input.php b/vendor/jms/serializer/tests/Fixtures/Input.php new file mode 100644 index 0000000..a052ba3 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Input.php @@ -0,0 +1,41 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\XmlRoot("input") + */ +class Input +{ + /** + * @Serializer\XmlAttributeMap + */ + private $attributes; + + public function __construct($attributes = null) + { + $this->attributes = $attributes ?: array( + 'type' => 'text', + 'name' => 'firstname', + 'value' => 'Adrien', + ); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/InvalidGroupsObject.php b/vendor/jms/serializer/tests/Fixtures/InvalidGroupsObject.php new file mode 100644 index 0000000..737a167 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/InvalidGroupsObject.php @@ -0,0 +1,31 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Groups; +use JMS\Serializer\Annotation\Type; + +class InvalidGroupsObject +{ + /** + * @Groups({"foo, bar"}) + * @Type("string") + */ + private $foo; +} diff --git a/vendor/jms/serializer/tests/Fixtures/InvalidUsageOfXmlValue.php b/vendor/jms/serializer/tests/Fixtures/InvalidUsageOfXmlValue.php new file mode 100644 index 0000000..4001433 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/InvalidUsageOfXmlValue.php @@ -0,0 +1,30 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\XmlValue; + +/** Dummy */ +class InvalidUsageOfXmlValue +{ + /** @XmlValue */ + private $value = 'bar'; + + private $element = 'foo'; +} diff --git a/vendor/jms/serializer/tests/Fixtures/Log.php b/vendor/jms/serializer/tests/Fixtures/Log.php new file mode 100644 index 0000000..69a8717 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Log.php @@ -0,0 +1,55 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlMap; +use JMS\Serializer\Annotation\XmlRoot; + +/** @XmlRoot("log") */ +class Log +{ + /** + * @SerializedName("author_list") + * @XmlMap + * @Type("AuthorList") + */ + private $authors; + + /** + * @XmlList(inline=true, entry = "comment") + * @Type("array") + */ + private $comments; + + public function __construct() + { + $this->authors = new AuthorList(); + $this->authors->add(new Author('Johannes Schmitt')); + $this->authors->add(new Author('John Doe')); + + $author = new Author('Foo Bar'); + $this->comments = array(); + $this->comments[] = new Comment($author, 'foo'); + $this->comments[] = new Comment($author, 'bar'); + $this->comments[] = new Comment($author, 'baz'); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/MaxDepth/Gh236Bar.php b/vendor/jms/serializer/tests/Fixtures/MaxDepth/Gh236Bar.php new file mode 100644 index 0000000..ab08c13 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/MaxDepth/Gh236Bar.php @@ -0,0 +1,19 @@ +a = new Gh236Bar(); + $this->a->inner = new Gh236Bar(); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/MultilineGroupsFormat.php b/vendor/jms/serializer/tests/Fixtures/MultilineGroupsFormat.php new file mode 100644 index 0000000..05490b6 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/MultilineGroupsFormat.php @@ -0,0 +1,51 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\Groups; + +class MultilineGroupsFormat +{ + /** + * @var int + */ + private $amount; + + /** + * @var string + */ + private $currency; + + public function __construct($amount, $currency) + { + $this->amount = (int) $amount; + $this->currency = $currency; + } + + public function getAmount() + { + return $this->amount; + } + + public function getCurrency() + { + return $this->currency; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/NamedDateTimeArraysObject.php b/vendor/jms/serializer/tests/Fixtures/NamedDateTimeArraysObject.php new file mode 100644 index 0000000..7c21578 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/NamedDateTimeArraysObject.php @@ -0,0 +1,45 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlKeyValuePairs; + + +class NamedDateTimeArraysObject +{ + /** + * @var \DateTime[] + * @Type("array>") + * @XmlKeyValuePairs + */ + private $namedArrayWithFormattedDate; + + function __construct($namedArrayWithFormattedDate) + { + $this->namedArrayWithFormattedDate = $namedArrayWithFormattedDate; + } + + /** + * @return \DateTime[] + */ + public function getNamedArrayWithFormattedDate() + { + return $this->namedArrayWithFormattedDate; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/NamedDateTimeImmutableArraysObject.php b/vendor/jms/serializer/tests/Fixtures/NamedDateTimeImmutableArraysObject.php new file mode 100644 index 0000000..d0174c6 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/NamedDateTimeImmutableArraysObject.php @@ -0,0 +1,44 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlKeyValuePairs; + +class NamedDateTimeImmutableArraysObject +{ + /** + * @var \DateTime[] + * @Type("array>") + * @XmlKeyValuePairs + */ + private $namedArrayWithFormattedDate; + + function __construct($namedArrayWithFormattedDate) + { + $this->namedArrayWithFormattedDate = $namedArrayWithFormattedDate; + } + + /** + * @return \DateTimeImmutable[] + */ + public function getNamedArrayWithFormattedDate() + { + return $this->namedArrayWithFormattedDate; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Node.php b/vendor/jms/serializer/tests/Fixtures/Node.php new file mode 100644 index 0000000..0de749c --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Node.php @@ -0,0 +1,36 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +class Node +{ + /** + * @Serializer\MaxDepth(2) + */ + public $children; + + public $foo = 'bar'; + + public function __construct($children = array()) + { + $this->children = $children; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithAbsentXmlListNode.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithAbsentXmlListNode.php new file mode 100644 index 0000000..739c643 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithAbsentXmlListNode.php @@ -0,0 +1,47 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +class ObjectWithAbsentXmlListNode +{ + /** + * @Serializer\XmlList(inline=false, entry="comment", skipWhenEmpty=true) + * @Serializer\Type("array") + */ + public $absent; + /** + * @Serializer\XmlList(inline=false, entry="comment", skipWhenEmpty=false) + * @Serializer\Type("array") + */ + public $present; + + /** + * @Serializer\XmlList(inline=false, entry="comment") + * @Serializer\Type("array") + */ + public $skipDefault; + + /** + * @Serializer\XmlList(inline=false, namespace="http://www.example.com") + * @Serializer\Type("array") + */ + public $absentAndNs; +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithEmptyArrayAndHash.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithEmptyArrayAndHash.php new file mode 100644 index 0000000..6376b82 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithEmptyArrayAndHash.php @@ -0,0 +1,45 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +class ObjectWithEmptyArrayAndHash +{ + /** + * @Serializer\Type("array") + * @Serializer\SkipWhenEmpty() + */ + private $hash = array(); + /** + * @Serializer\Type("array") + * @Serializer\SkipWhenEmpty() + */ + private $array = array(); + + /** + * @Serializer\SkipWhenEmpty() + */ + private $object = array(); + + public function __construct() + { + $this->object = new InlineChildEmpty(); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithEmptyHash.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithEmptyHash.php new file mode 100644 index 0000000..032b6d0 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithEmptyHash.php @@ -0,0 +1,30 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +class ObjectWithEmptyHash +{ + /** + * @Serializer\Type("array") + * @Serializer\XmlList(skipWhenEmpty=false) + */ + private $hash = array(); +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithEmptyNullableAndEmptyArrays.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithEmptyNullableAndEmptyArrays.php new file mode 100644 index 0000000..b8a0b17 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithEmptyNullableAndEmptyArrays.php @@ -0,0 +1,80 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +class ObjectWithEmptyNullableAndEmptyArrays +{ + /** + * @Serializer\XmlList(inline = true, entry = "comment") + * @Serializer\Type("array") + */ + public $null_inline = null; + + /** + * @Serializer\XmlList(inline = true, entry = "comment") + * @Serializer\Type("array") + */ + public $empty_inline = []; + + + /** + * @Serializer\XmlList(inline = true, entry = "comment") + * @Serializer\Type("array") + */ + public $not_empty_inline = ['not_empty_inline']; + + /** + * @Serializer\XmlList(inline = false, entry = "comment") + * @Serializer\Type("array") + */ + public $null_not_inline = null; + + /** + * @Serializer\XmlList(inline = false, entry = "comment") + * @Serializer\Type("array") + */ + public $empty_not_inline = []; + + /** + * @Serializer\XmlList(inline = false, entry = "comment", skipWhenEmpty=false) + * @Serializer\Type("array") + */ + public $not_empty_not_inline = ['not_empty_not_inline']; + + /** + * @Serializer\XmlList(inline = false, entry = "comment", skipWhenEmpty=false) + * @Serializer\Type("array") + */ + public $null_not_inline_skip = null; + + /** + * @Serializer\XmlList(inline = false, entry = "comment", skipWhenEmpty=false) + * @Serializer\Type("array") + */ + public $empty_not_inline_skip = []; + + + /** + * @Serializer\XmlList(inline = false, entry = "comment", skipWhenEmpty=false) + * @Serializer\Type("array") + */ + public $not_empty_not_inline_skip = ['not_empty_not_inline_skip']; +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithExpressionVirtualPropertiesAndExcludeAll.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithExpressionVirtualPropertiesAndExcludeAll.php new file mode 100644 index 0000000..8c9ab76 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithExpressionVirtualPropertiesAndExcludeAll.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\ExclusionPolicy; +use JMS\Serializer\Annotation\VirtualProperty; + +/** + * @VirtualProperty( + * "virtualValue", + * exp="object.getVirtualValue()" + * ) + * @ExclusionPolicy("all") + */ +class ObjectWithExpressionVirtualPropertiesAndExcludeAll +{ + + public function getVirtualValue() + { + return 'value'; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithHandlerCallbacks.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithHandlerCallbacks.php new file mode 100644 index 0000000..3ab9c3d --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithHandlerCallbacks.php @@ -0,0 +1,46 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\HandlerCallback; +use JMS\Serializer\Annotation\Type; + +class ObjectWithHandlerCallbacks +{ + /** + * @Type("string") + */ + public $name; + + /** + * @HandlerCallback(direction="serialization", format="json") + */ + public function toJson() + { + return $this->name; + } + + /** + * @HandlerCallback(direction="serialization", format="xml") + */ + public function toXml() + { + return $this->name; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithIntListAndIntMap.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithIntListAndIntMap.php new file mode 100644 index 0000000..f5f1e8d --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithIntListAndIntMap.php @@ -0,0 +1,20 @@ +") @Serializer\XmlList */ + private $list; + + /** @Serializer\Type("array") @Serializer\XmlMap */ + private $map; + + public function __construct(array $list, array $map) + { + $this->list = $list; + $this->map = $map; + } +} \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithLifecycleCallbacks.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithLifecycleCallbacks.php new file mode 100644 index 0000000..cf1ca5f --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithLifecycleCallbacks.php @@ -0,0 +1,74 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Exclude; +use JMS\Serializer\Annotation\PostDeserialize; +use JMS\Serializer\Annotation\PostSerialize; +use JMS\Serializer\Annotation\PreSerialize; +use JMS\Serializer\Annotation\Type; + +class ObjectWithLifecycleCallbacks +{ + /** + * @Exclude + */ + private $firstname; + + /** + * @Exclude + */ + private $lastname; + + /** + * @Type("string") + */ + private $name; + + public function __construct($firstname = 'Foo', $lastname = 'Bar') + { + $this->firstname = $firstname; + $this->lastname = $lastname; + } + + /** + * @PreSerialize + */ + private function prepareForSerialization() + { + $this->name = $this->firstname . ' ' . $this->lastname; + } + + /** + * @PostSerialize + */ + private function cleanUpAfterSerialization() + { + $this->name = null; + } + + /** + * @PostDeserialize + */ + private function afterDeserialization() + { + list($this->firstname, $this->lastname) = explode(' ', $this->name); + $this->name = null; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndList.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndList.php new file mode 100644 index 0000000..e8cec4c --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndList.php @@ -0,0 +1,104 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlMap; +use JMS\Serializer\Annotation\XmlNamespace; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("ObjectWithNamespacesAndList", namespace="http://example.com/namespace") + * @XmlNamespace(uri="http://example.com/namespace") + * @XmlNamespace(uri="http://example.com/namespace2", prefix="x") + */ +class ObjectWithNamespacesAndList +{ + /** + * @Type("string") + * @SerializedName("name") + * @XmlElement(namespace="http://example.com/namespace") + */ + public $name; + /** + * @Type("string") + * @SerializedName("name") + * @XmlElement(namespace="http://example.com/namespace2") + */ + public $nameAlternativeB; + + /** + * @Type("array") + * @SerializedName("phones") + * @XmlElement(namespace="http://example.com/namespace2") + * @XmlList(inline = false, entry = "phone", namespace="http://example.com/namespace2") + */ + public $phones; + /** + * @Type("array") + * @SerializedName("addresses") + * @XmlElement(namespace="http://example.com/namespace2") + * @XmlMap(inline = false, entry = "address", keyAttribute = "id", namespace="http://example.com/namespace2") + */ + public $addresses; + + /** + * @Type("array") + * @SerializedName("phones") + * @XmlList(inline = true, entry = "phone", namespace="http://example.com/namespace") + */ + public $phonesAlternativeB; + /** + * @Type("array") + * @SerializedName("addresses") + * @XmlMap(inline = true, entry = "address", keyAttribute = "id", namespace="http://example.com/namespace") + */ + public $addressesAlternativeB; + + /** + * @Type("array") + * @SerializedName("phones") + * @XmlList(inline = true, entry = "phone", namespace="http://example.com/namespace2") + */ + public $phonesAlternativeC; + /** + * @Type("array") + * @SerializedName("addresses") + * @XmlMap(inline = true, entry = "address", keyAttribute = "id", namespace="http://example.com/namespace2") + */ + public $addressesAlternativeC; + + /** + * @Type("array") + * @SerializedName("phones") + * @XmlList(inline = false, entry = "phone") + */ + public $phonesAlternativeD; + /** + * @Type("array") + * @SerializedName("addresses") + * @XmlMap(inline = false, entry = "address", keyAttribute = "id") + */ + public $addressesAlternativeD; + +} + diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndNestedList.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndNestedList.php new file mode 100644 index 0000000..4b342bb --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithNamespacesAndNestedList.php @@ -0,0 +1,43 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlMap; +use JMS\Serializer\Annotation\XmlNamespace; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("ObjectWithNamespacesAndNestedList", namespace="http://example.com/namespace") + * @XmlNamespace(uri="http://example.com/namespace") + * @XmlNamespace(uri="http://example.com/namespace2", prefix="x") + */ +class ObjectWithNamespacesAndNestedList +{ + /** + * @Type("JMS\Serializer\Tests\Fixtures\PersonCollection") + * @SerializedName("person_collection") + */ + public $personCollection; +} + diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithNullProperty.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithNullProperty.php new file mode 100644 index 0000000..af88db1 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithNullProperty.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + +class ObjectWithNullProperty extends SimpleObject +{ + /** + * @var null + * @Type("string") + */ + private $nullProperty = null; + + /** + * @return null + */ + public function getNullProperty() + { + return $this->nullProperty; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithObjectProperty.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithObjectProperty.php new file mode 100644 index 0000000..ea56a56 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithObjectProperty.php @@ -0,0 +1,53 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + + +class ObjectWithObjectProperty +{ + /** + * @Type("string") + */ + private $foo; + + /** + * @Type("JMS\Serializer\Tests\Fixtures\Author") + */ + private $author; + + /** + * @return string + */ + public function getFoo() + { + return $this->foo; + } + + /** + * @return \JMS\Serializer\Tests\Fixtures\Author + */ + public function getAuthor() + { + return $this->author; + } + + +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithToString.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithToString.php new file mode 100644 index 0000000..e4df6b9 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithToString.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +class ObjectWithToString +{ + private $input; + + public function __construct($input) + { + $this->input = $input; + } + + public function __toString() + { + return $this->input; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithVersionedVirtualProperties.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithVersionedVirtualProperties.php new file mode 100644 index 0000000..4a25ad6 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithVersionedVirtualProperties.php @@ -0,0 +1,53 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Groups; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Since; +use JMS\Serializer\Annotation\Until; +use JMS\Serializer\Annotation\VirtualProperty; + +/** + * dummy comment + */ +class ObjectWithVersionedVirtualProperties +{ + /** + * @Groups({"versions"}) + * @VirtualProperty + * @SerializedName("low") + * @Until("8") + */ + public function getVirualLowValue() + { + return 1; + } + + /** + * @Groups({"versions"}) + * @VirtualProperty + * @SerializedName("high") + * @Since("6") + */ + public function getVirualHighValue() + { + return 8; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithVirtualProperties.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithVirtualProperties.php new file mode 100644 index 0000000..36aae98 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithVirtualProperties.php @@ -0,0 +1,63 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\AccessorOrder; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\VirtualProperty; + +/** + * @AccessorOrder("custom", custom = {"prop_name", "existField", "foo" }) + */ +class ObjectWithVirtualProperties +{ + + /** + * @Type("string") + */ + protected $existField = 'value'; + + /** + * + * @VirtualProperty + */ + public function getVirtualValue() + { + return 'value'; + } + + /** + * @VirtualProperty + * @SerializedName("test") + */ + public function getVirtualSerializedValue() + { + return 'other-name'; + } + + /** + * @VirtualProperty + * @Type("integer") + */ + public function getTypedVirtualProperty() + { + return '1'; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithVirtualPropertiesAndExcludeAll.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithVirtualPropertiesAndExcludeAll.php new file mode 100644 index 0000000..dffca04 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithVirtualPropertiesAndExcludeAll.php @@ -0,0 +1,36 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\ExclusionPolicy; +use JMS\Serializer\Annotation\VirtualProperty; + +/** + * @ExclusionPolicy("all") + */ +class ObjectWithVirtualPropertiesAndExcludeAll +{ + /** + * @VirtualProperty + */ + public function getVirtualValue() + { + return 'value'; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithVirtualXmlProperties.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithVirtualXmlProperties.php new file mode 100644 index 0000000..71d5249 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithVirtualXmlProperties.php @@ -0,0 +1,108 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Groups; +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Since; +use JMS\Serializer\Annotation\Until; +use JMS\Serializer\Annotation\VirtualProperty; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlMap; +use JMS\Serializer\Annotation\XmlValue; + +class ObjectWithVirtualXmlProperties +{ + + /** + * + * @VirtualProperty + * @SerializedName("foo") + * @Groups({"attributes"}) + * @XmlAttribute + */ + public function getVirualXmlAttributeValue() + { + return 'bar'; + } + + /** + * + * @VirtualProperty + * @SerializedName("xml-value") + * @Groups({"values"}) + * @XmlValue + */ + public function getVirualXmlValue() + { + return 'xml-value'; + } + + /** + * + * @VirtualProperty + * @SerializedName("list") + * @Groups({"list"}) + * @XmlList(inline = true, entry = "val") + */ + public function getVirualXmlList() + { + return array('One', 'Two'); + } + + /** + * + * @VirtualProperty + * @SerializedName("map") + * @Groups({"map"}) + * @XmlMap(keyAttribute = "key") + */ + public function getVirualXmlMap() + { + return array( + 'key-one' => 'One', + 'key-two' => 'Two' + ); + } + + /** + * + * @VirtualProperty + * @SerializedName("low") + * @Groups({"versions"}) + * @Until("8") + */ + public function getVirualLowValue() + { + return 1; + } + + /** + * @VirtualProperty + * @SerializedName("hight") + * @Groups({"versions"}) + * @Since("8") + */ + public function getVirualHighValue() + { + return 8; + } + +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairs.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairs.php new file mode 100644 index 0000000..95a3469 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairs.php @@ -0,0 +1,46 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\XmlKeyValuePairs; + +class ObjectWithXmlKeyValuePairs +{ + /** + * @var array + * @XmlKeyValuePairs + */ + private $array = array( + 'key-one' => 'foo', + 'key-two' => 1, + 'nested-array' => array( + 'bar' => 'foo', + ), + 'without-keys' => array( + 1, + 'test' + ), + 'mixed' => array( + 'test', + 'foo' => 'bar', + '1_foo' => 'bar' + ), + 1 => 'foo' + ); +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithObjectType.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithObjectType.php new file mode 100644 index 0000000..c1ec07d --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithObjectType.php @@ -0,0 +1,47 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlKeyValuePairs; + +class ObjectWithXmlKeyValuePairsWithObjectType +{ + /** + * @var array + * @Type("array") + * @XmlKeyValuePairs + */ + private $list; + + public function __construct(array $list) + { + $this->list = $list; + } + + public static function create1() + { + return new self( + [ + 'key_first' => ObjectWithXmlKeyValuePairsWithType::create1(), + 'key_second' => ObjectWithXmlKeyValuePairsWithType::create2(), + ] + ); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithType.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithType.php new file mode 100644 index 0000000..f6ebc55 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlKeyValuePairsWithType.php @@ -0,0 +1,68 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlKeyValuePairs; + +class ObjectWithXmlKeyValuePairsWithType +{ + /** + * @var array + * @Type("array") + * @XmlKeyValuePairs + */ + private $list; + + /** + * @var array + * @Type("array") + */ + private $list2; + + public function __construct(array $list, array $list2 = []) + { + $this->list = $list; + $this->list2 = $list2; + } + + public static function create1() + { + return new self( + [ + 'key-one' => 'foo', + 'key-two' => 'bar', + ] + ); + } + + public static function create2() + { + return new self( + [ + 'key_01' => 'One', + 'key_02' => 'Two', + 'key_03' => 'Three', + ], + [ + 'Four', + ] + ); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespaces.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespaces.php new file mode 100644 index 0000000..13b1f84 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespaces.php @@ -0,0 +1,73 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlNamespace; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("test-object", namespace="http://example.com/namespace") + * @XmlNamespace(uri="http://example.com/namespace") + * @XmlNamespace(uri="http://schemas.google.com/g/2005", prefix="gd") + * @XmlNamespace(uri="http://www.w3.org/2005/Atom", prefix="atom") + */ +class ObjectWithXmlNamespaces +{ + /** + * @Type("string") + * @XmlElement(namespace="http://purl.org/dc/elements/1.1/"); + */ + private $title; + + /** + * @Type("DateTime") + * @XmlAttribute + */ + private $createdAt; + + /** + * @Type("string") + * @XmlAttribute(namespace="http://schemas.google.com/g/2005") + */ + private $etag; + + /** + * @Type("string") + * @XmlElement(namespace="http://www.w3.org/2005/Atom") + */ + private $author; + + /** + * @Type("string") + * @XmlAttribute(namespace="http://purl.org/dc/elements/1.1/"); + */ + private $language; + + public function __construct($title, $author, \DateTime $createdAt, $language) + { + $this->title = $title; + $this->author = $author; + $this->createdAt = $createdAt; + $this->language = $language; + $this->etag = sha1($this->createdAt->format(\DateTime::ISO8601)); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectProperty.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectProperty.php new file mode 100644 index 0000000..95b9cf1 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectProperty.php @@ -0,0 +1,49 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlNamespace; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("property:test-object", namespace="http://example.com/namespace-property") + * @XmlNamespace(uri="http://example.com/namespace-property", prefix="property") + */ +class ObjectWithXmlNamespacesAndObjectProperty +{ + /** + * @Type("string") + * @XmlElement(namespace="http://example.com/namespace-property"); + */ + private $title; + + /** + * @Type("JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespacesAndObjectPropertyAuthor") + * @XmlElement(namespace="http://example.com/namespace-property") + */ + private $author; + + public function __construct($title, $author) + { + $this->title = $title; + $this->author = $author; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyAuthor.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyAuthor.php new file mode 100644 index 0000000..80e6359 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyAuthor.php @@ -0,0 +1,53 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlNamespace; + +/** + * @XmlNamespace(uri="http://example.com/namespace-author") + */ +class ObjectWithXmlNamespacesAndObjectPropertyAuthor +{ + /** + * @Type("string") + * @XmlElement(namespace="http://example.com/namespace-modified"); + */ + private $author; + + /** + * @Type("string") + * @XmlElement(namespace="http://example.com/namespace-author"); + */ + private $info = "hidden-info"; + + /** + * @Type("string") + * @XmlElement(namespace="http://example.com/namespace-property") + */ + private $name; + + public function __construct($name, $author) + { + $this->name = $name; + $this->author = $author; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyVirtual.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyVirtual.php new file mode 100644 index 0000000..7675198 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlNamespacesAndObjectPropertyVirtual.php @@ -0,0 +1,49 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlNamespace; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("property:test-object", namespace="http://example.com/namespace-property") + * @XmlNamespace(uri="http://example.com/namespace-property", prefix="property") + */ +class ObjectWithXmlNamespacesAndObjectPropertyVirtual +{ + /** + * @Type("string") + * @XmlElement(namespace="http://example.com/namespace-property"); + */ + private $title; + + /** + * @Type("ObjectWithXmlNamespacesAndObjectPropertyAuthorVirtual") + * @XmlElement(namespace="http://example.com/namespace-property") + */ + private $author; + + public function __construct($title, $author) + { + $this->title = $title; + $this->author = $author; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlRootNamespace.php b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlRootNamespace.php new file mode 100644 index 0000000..bcf5466 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ObjectWithXmlRootNamespace.php @@ -0,0 +1,66 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("test-object", namespace="http://example.com/namespace") + */ +class ObjectWithXmlRootNamespace +{ + /** + * @Type("string") + */ + private $title; + + /** + * @Type("DateTime") + * @XmlAttribute + */ + private $createdAt; + + /** + * @Type("string") + * @XmlAttribute + */ + private $etag; + + /** + * @Type("string") + */ + private $author; + + /** + * @Type("string") + * @XmlAttribute + */ + private $language; + + public function __construct($title, $author, \DateTime $createdAt, $language) + { + $this->title = $title; + $this->author = $author; + $this->createdAt = $createdAt; + $this->language = $language; + $this->etag = sha1($this->createdAt->format(\DateTime::ISO8601)); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Order.php b/vendor/jms/serializer/tests/Fixtures/Order.php new file mode 100644 index 0000000..2e6900d --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Order.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlRoot; + +/** @XmlRoot("order") */ +class Order +{ + /** @Type("JMS\Serializer\Tests\Fixtures\Price") */ + private $cost; + + public function __construct(Price $price = null) + { + $this->cost = $price ?: new Price(5); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ParentDoNotSkipWithEmptyChild.php b/vendor/jms/serializer/tests/Fixtures/ParentDoNotSkipWithEmptyChild.php new file mode 100644 index 0000000..7cc30b4 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ParentDoNotSkipWithEmptyChild.php @@ -0,0 +1,36 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +class ParentDoNotSkipWithEmptyChild +{ + private $c = 'c'; + + private $d = 'd'; + + /** + * @var InlineChild + */ + private $child; + + public function __construct($child = null) + { + $this->child = $child ?: new InlineChild(); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/ParentSkipWithEmptyChild.php b/vendor/jms/serializer/tests/Fixtures/ParentSkipWithEmptyChild.php new file mode 100644 index 0000000..5c05f97 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/ParentSkipWithEmptyChild.php @@ -0,0 +1,39 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +class ParentSkipWithEmptyChild +{ + private $c = 'c'; + + private $d = 'd'; + + /** + * @Serializer\SkipWhenEmpty() + * @var InlineChild + */ + private $child; + + public function __construct($child = null) + { + $this->child = $child ?: new InlineChild(); + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Person.php b/vendor/jms/serializer/tests/Fixtures/Person.php new file mode 100644 index 0000000..80d9704 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Person.php @@ -0,0 +1,42 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlRoot; +use JMS\Serializer\Annotation\XmlValue; + +/** + * @XmlRoot("child") + */ +class Person +{ + /** + * @Type("string") + * @XmlValue(cdata=false) + */ + public $name; + + /** + * @Type("int") + * @XmlAttribute + */ + public $age; +} diff --git a/vendor/jms/serializer/tests/Fixtures/PersonCollection.php b/vendor/jms/serializer/tests/Fixtures/PersonCollection.php new file mode 100644 index 0000000..7ee19a5 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/PersonCollection.php @@ -0,0 +1,46 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use Doctrine\Common\Collections\ArrayCollection; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlList; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("person_collection") + */ +class PersonCollection +{ + /** + * @Type("ArrayCollection") + * @XmlList(entry = "person", inline = true) + */ + public $persons; + + /** + * @Type("string") + */ + public $location; + + public function __construct() + { + $this->persons = new ArrayCollection; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/PersonLocation.php b/vendor/jms/serializer/tests/Fixtures/PersonLocation.php new file mode 100644 index 0000000..a6ec277 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/PersonLocation.php @@ -0,0 +1,38 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("person_location") + */ +class PersonLocation +{ + /** + * @Type("JMS\Serializer\Tests\Fixtures\Person") + */ + public $person; + + /** + * @Type("string") + */ + public $location; +} diff --git a/vendor/jms/serializer/tests/Fixtures/PersonSecret.php b/vendor/jms/serializer/tests/Fixtures/PersonSecret.php new file mode 100644 index 0000000..a2dc13c --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/PersonSecret.php @@ -0,0 +1,45 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\ExclusionPolicy("NONE") + * @Serializer\AccessorOrder("custom",custom = {"name", "gender" ,"age"}) + */ +class PersonSecret +{ + /** + * @Serializer\Type("string") + */ + public $name; + + /** + * @Serializer\Type("string") + * @Serializer\Exclude(if="show_data('gender')") + */ + public $gender; + + /** + * @Serializer\Type("string") + * @Serializer\Expose(if="show_data('age')") + */ + public $age; +} diff --git a/vendor/jms/serializer/tests/Fixtures/PersonSecretMore.php b/vendor/jms/serializer/tests/Fixtures/PersonSecretMore.php new file mode 100644 index 0000000..ef78773 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/PersonSecretMore.php @@ -0,0 +1,40 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\ExclusionPolicy("ALL") + * @Serializer\AccessorOrder("custom",custom = {"name", "gender"}) + */ +class PersonSecretMore +{ + /** + * @Serializer\Type("string") + * @Serializer\Expose() + */ + public $name; + + /** + * @Serializer\Type("string") + * @Serializer\Expose(if="show_data('gender')") + */ + public $gender; +} diff --git a/vendor/jms/serializer/tests/Fixtures/PersonSecretMoreVirtual.php b/vendor/jms/serializer/tests/Fixtures/PersonSecretMoreVirtual.php new file mode 100644 index 0000000..2f0a64a --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/PersonSecretMoreVirtual.php @@ -0,0 +1,46 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\ExclusionPolicy("ALL") + * @Serializer\AccessorOrder("custom",custom = {"name", "gender"}) + */ +class PersonSecretMoreVirtual +{ + /** + * @Serializer\Type("string") + * @Serializer\Expose() + */ + public $name; + + public $gender; + + /** + * @Serializer\VirtualProperty() + * @Serializer\Type("string") + * @Serializer\Expose(if="show_data('gender')") + */ + public function getGender() + { + return $this->gender; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/PersonSecretVirtual.php b/vendor/jms/serializer/tests/Fixtures/PersonSecretVirtual.php new file mode 100644 index 0000000..913ff47 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/PersonSecretVirtual.php @@ -0,0 +1,54 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +/** + * @Serializer\ExclusionPolicy("NONE") + * @Serializer\AccessorOrder("custom",custom = {"name", "gender", "age"}) + */ +class PersonSecretVirtual +{ + /** + * @Serializer\Type("string") + */ + public $name; + + /** + * @Serializer\Exclude() + */ + public $gender; + + /** + * @Serializer\Type("string") + * @Serializer\Expose(if="show_data('age')") + */ + public $age; + + /** + * @Serializer\VirtualProperty() + * @Serializer\Type("string") + * @Serializer\Exclude(if="show_data('gender')") + */ + public function getGender() + { + return $this->gender; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/PersonSecretWithVariables.php b/vendor/jms/serializer/tests/Fixtures/PersonSecretWithVariables.php new file mode 100644 index 0000000..6d81d98 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/PersonSecretWithVariables.php @@ -0,0 +1,45 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; +use JMS\Serializer\Context; +use JMS\Serializer\Metadata\PropertyMetadata; + +/** + */ +class PersonSecretWithVariables +{ + /** + * @Serializer\Type("string") + */ + public $name; + + /** + * @Serializer\Type("string") + * @Serializer\Expose(if="context.getDirection()==2 || object.test(property_metadata, context)") + */ + public $gender; + + + public function test(PropertyMetadata $propertyMetadata, Context $context) + { + return true; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Price.php b/vendor/jms/serializer/tests/Fixtures/Price.php new file mode 100644 index 0000000..f320be3 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Price.php @@ -0,0 +1,40 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlRoot; +use JMS\Serializer\Annotation\XmlValue; + +/** + * @XmlRoot("price") + */ +class Price +{ + /** + * @Type("float") + * @XmlValue + */ + private $price; + + public function __construct($price) + { + $this->price = $price; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Publisher.php b/vendor/jms/serializer/tests/Fixtures/Publisher.php new file mode 100644 index 0000000..410229b --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Publisher.php @@ -0,0 +1,49 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlNamespace; +use JMS\Serializer\Annotation\XmlRoot; + +/** + * @XmlRoot("publisher") + * @XmlNamespace(uri="http://example.com/namespace2", prefix="ns2") + */ +class Publisher +{ + /** + * @Type("string") + * @XmlElement(namespace="http://example.com/namespace2") + * @SerializedName("pub_name") + */ + private $name; + + public function __construct($name) + { + $this->name = $name; + } + + public function getName() + { + return $this->name; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/SimpleClassObject.php b/vendor/jms/serializer/tests/Fixtures/SimpleClassObject.php new file mode 100644 index 0000000..be64cce --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/SimpleClassObject.php @@ -0,0 +1,51 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlAttribute; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlNamespace; + +/** + * @XmlNamespace(prefix="old_foo", uri="http://old.foo.example.org"); + * @XmlNamespace(prefix="foo", uri="http://foo.example.org"); + * @XmlNamespace(prefix="new_foo", uri="http://new.foo.example.org"); + */ +class SimpleClassObject +{ + /** + * @Type("string") + * @XmlAttribute(namespace="http://old.foo.example.org") + */ + public $foo; + + /** + * @Type("string") + * @XmlElement(namespace="http://foo.example.org") + */ + public $bar; + + /** + * @Type("string") + * @XmlElement(namespace="http://new.foo.example.org") + */ + public $moo; + +} diff --git a/vendor/jms/serializer/tests/Fixtures/SimpleObject.php b/vendor/jms/serializer/tests/Fixtures/SimpleObject.php new file mode 100644 index 0000000..77a9686 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/SimpleObject.php @@ -0,0 +1,53 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Type; + +class SimpleObject +{ + /** @Type("string") */ + private $foo; + + /** + * @SerializedName("moo") + * @Type("string") + */ + private $bar; + + /** @Type("string") */ + protected $camelCase = 'boo'; + + public function __construct($foo, $bar) + { + $this->foo = $foo; + $this->bar = $bar; + } + + public function getFoo() + { + return $this->foo; + } + + public function getBar() + { + return $this->bar; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/SimpleObjectProxy.php b/vendor/jms/serializer/tests/Fixtures/SimpleObjectProxy.php new file mode 100644 index 0000000..dffa726 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/SimpleObjectProxy.php @@ -0,0 +1,41 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use Doctrine\Common\Persistence\Proxy; + +class SimpleObjectProxy extends SimpleObject implements Proxy +{ + public $__isInitialized__ = false; + + private $baz = 'baz'; + + public function __load() + { + if (!$this->__isInitialized__) { + $this->camelCase = 'proxy-boo'; + $this->__isInitialized__ = true; + } + } + + public function __isInitialized() + { + return $this->__isInitialized__; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/SimpleSubClassObject.php b/vendor/jms/serializer/tests/Fixtures/SimpleSubClassObject.php new file mode 100644 index 0000000..27944e4 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/SimpleSubClassObject.php @@ -0,0 +1,51 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; +use JMS\Serializer\Annotation\XmlElement; +use JMS\Serializer\Annotation\XmlNamespace; + +/** + * @XmlNamespace(prefix="old_foo", uri="http://foo.example.org"); + * @XmlNamespace(prefix="foo", uri="http://better.foo.example.org"); + */ +class SimpleSubClassObject + extends SimpleClassObject +{ + + /** + * @Type("string") + * @XmlElement(namespace="http://better.foo.example.org") + */ + public $moo; + + /** + * @Type("string") + * @XmlElement(namespace="http://foo.example.org") + */ + public $baz; + + /** + * @Type("string") + * @XmlElement(namespace="http://new.foo.example.org") + */ + public $qux; + +} diff --git a/vendor/jms/serializer/tests/Fixtures/Tag.php b/vendor/jms/serializer/tests/Fixtures/Tag.php new file mode 100644 index 0000000..a324d20 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Tag.php @@ -0,0 +1,43 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as JMS; + + +/** + * @JMS\XmlRoot("tag") + * @JMS\XmlNamespace(uri="http://purl.org/dc/elements/1.1/", prefix="dc") + */ +class Tag +{ + + /** + * @JMS\XmlElement(cdata=false) + * @JMS\Type("string") + */ + public $name; + + function __construct($name) + { + $this->name = $name; + } + + +} diff --git a/vendor/jms/serializer/tests/Fixtures/Timestamp.php b/vendor/jms/serializer/tests/Fixtures/Timestamp.php new file mode 100755 index 0000000..7d3d047 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Timestamp.php @@ -0,0 +1,39 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + +class Timestamp +{ + /** + * @Type("DateTime<'U'>") + */ + private $timestamp; + + public function __construct($timestamp) + { + $this->timestamp = $timestamp; + } + + public function getTimestamp() + { + return $this->timestamp; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/Tree.php b/vendor/jms/serializer/tests/Fixtures/Tree.php new file mode 100644 index 0000000..e5066b8 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/Tree.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation as Serializer; + +class Tree +{ + /** + * @Serializer\MaxDepth(10) + */ + public $tree; + + public function __construct($tree) + { + $this->tree = $tree; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/VehicleInterfaceGarage.php b/vendor/jms/serializer/tests/Fixtures/VehicleInterfaceGarage.php new file mode 100644 index 0000000..f816ac8 --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/VehicleInterfaceGarage.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\Type; + +class VehicleInterfaceGarage +{ + /** + * @Type("array") + */ + public $vehicles; + + public function __construct($vehicles) + { + $this->vehicles = $vehicles; + } +} diff --git a/vendor/jms/serializer/tests/Fixtures/VersionedObject.php b/vendor/jms/serializer/tests/Fixtures/VersionedObject.php new file mode 100644 index 0000000..9890f4a --- /dev/null +++ b/vendor/jms/serializer/tests/Fixtures/VersionedObject.php @@ -0,0 +1,43 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Fixtures; + +use JMS\Serializer\Annotation\SerializedName; +use JMS\Serializer\Annotation\Since; +use JMS\Serializer\Annotation\Until; + +class VersionedObject +{ + /** + * @Until("1.0.0") + */ + private $name; + + /** + * @Since("1.0.1") + * @SerializedName("name") + */ + private $name2; + + public function __construct($name, $name2) + { + $this->name = $name; + $this->name2 = $name2; + } +} diff --git a/vendor/jms/serializer/tests/Handler/ArrayCollectionHandlerTest.php b/vendor/jms/serializer/tests/Handler/ArrayCollectionHandlerTest.php new file mode 100644 index 0000000..4012a07 --- /dev/null +++ b/vendor/jms/serializer/tests/Handler/ArrayCollectionHandlerTest.php @@ -0,0 +1,52 @@ +getMockBuilder(VisitorInterface::class)->getMock(); + $visitor->method('visitArray')->with(['foo'])->willReturn(['foo']); + + $context = $this->getMockBuilder(SerializationContext::class)->getMock(); + $type = ['name' => 'ArrayCollection', 'params' => []]; + + $collection = new ArrayCollection(['foo']); + + $handler->serializeCollection($visitor, $collection, $type, $context); + } + + public function testSerializeArraySkipByExclusionStrategy() + { + $handler = new ArrayCollectionHandler(false); + + $visitor = $this->getMockBuilder(VisitorInterface::class)->getMock(); + $visitor->method('visitArray')->with([])->willReturn([]); + + $context = $this->getMockBuilder(SerializationContext::class)->getMock(); + + $factoryMock = $this->getMockBuilder(MetadataFactoryInterface::class)->getMock(); + $factoryMock->method('getMetadataForClass')->willReturn(new ClassMetadata(ArrayCollection::class)); + + $context->method('getExclusionStrategy')->willReturn(new AlwaysExcludeExclusionStrategy()); + $context->method('getMetadataFactory')->willReturn($factoryMock); + + + $type = ['name' => 'ArrayCollection', 'params' => []]; + + $collection = new ArrayCollection(['foo']); + + $handler->serializeCollection($visitor, $collection, $type, $context); + } +} diff --git a/vendor/jms/serializer/tests/Handler/DateHandlerTest.php b/vendor/jms/serializer/tests/Handler/DateHandlerTest.php new file mode 100644 index 0000000..0df3ed1 --- /dev/null +++ b/vendor/jms/serializer/tests/Handler/DateHandlerTest.php @@ -0,0 +1,137 @@ +handler = new DateHandler(); + $this->timezone = new \DateTimeZone('UTC'); + } + + public function getParams() + { + return [ + [['Y-m-d']], + [['Y-m-d', '', 'Y-m-d|']], + [['Y-m-d', '', 'Y']], + ]; + } + + /** + * @dataProvider getParams + * @param array $params + */ + public function testSerializeDate(array $params) + { + $context = $this->getMockBuilder(SerializationContext::class)->getMock(); + + $visitor = $this->getMockBuilder(VisitorInterface::class)->getMock(); + $visitor->method('visitString')->with('2017-06-18'); + + $datetime = new \DateTime('2017-06-18 14:30:59', $this->timezone); + $type = ['name' => 'DateTime', 'params' => $params]; + $this->handler->serializeDateTime($visitor, $datetime, $type, $context); + } + + public function testTimePartGetsRemoved() + { + $visitor = $this->getMockBuilder(JsonDeserializationVisitor::class) + ->disableOriginalConstructor() + ->getMock(); + + $type = ['name' => 'DateTime', 'params' => ['Y-m-d', '', 'Y-m-d|']]; + $this->assertEquals( + \DateTime::createFromFormat('Y-m-d|', '2017-06-18', $this->timezone), + $this->handler->deserializeDateTimeFromJson($visitor, '2017-06-18', $type) + ); + } + + public function testTimePartGetsPreserved() + { + $visitor = $this->getMockBuilder(JsonDeserializationVisitor::class) + ->disableOriginalConstructor() + ->getMock(); + + $expectedDateTime = \DateTime::createFromFormat('Y-m-d', '2017-06-18', $this->timezone); + // if the test is executed exactly at midnight, it might not detect a possible failure since the time component will be "00:00:00 + // I know, this is a bit paranoid + if ($expectedDateTime->format("H:i:s") === "00:00:00") { + sleep(1); + $expectedDateTime = \DateTime::createFromFormat('Y-m-d', '2017-06-18', $this->timezone); + } + + // no custom deserialization format specified + $type = ['name' => 'DateTime', 'params' => ['Y-m-d']]; + $this->assertEquals( + $expectedDateTime, + $this->handler->deserializeDateTimeFromJson($visitor, '2017-06-18', $type) + ); + + // custom deserialization format specified + $type = ['name' => 'DateTime', 'params' => ['Y-m-d', '', 'Y-m-d']]; + $this->assertEquals( + $expectedDateTime, + $this->handler->deserializeDateTimeFromJson($visitor, '2017-06-18', $type) + ); + } + + public function testTimeZoneGetsPreservedWithUnixTimestamp() + { + $visitor = $this->getMockBuilder(JsonDeserializationVisitor::class) + ->disableOriginalConstructor() + ->getMock(); + + + $timestamp = time(); + $timezone = 'Europe/Brussels'; + $type = ['name' => 'DateTime', 'params' => ['U', $timezone]]; + + $expectedDateTime = \DateTime::createFromFormat('U', $timestamp); + $expectedDateTime->setTimezone(new \DateTimeZone($timezone)); + + $actualDateTime = $this->handler->deserializeDateTimeFromJson($visitor, $timestamp, $type); + + $this->assertEquals( + $expectedDateTime->format(\DateTime::RFC3339), + $actualDateTime->format(\DateTime::RFC3339) + ); + } + + public function testImmutableTimeZoneGetsPreservedWithUnixTimestamp() + { + $visitor = $this->getMockBuilder(JsonDeserializationVisitor::class) + ->disableOriginalConstructor() + ->getMock(); + + + $timestamp = time(); + $timezone = 'Europe/Brussels'; + $type = ['name' => 'DateTimeImmutable', 'params' => ['U', $timezone]]; + + $expectedDateTime = \DateTime::createFromFormat('U', $timestamp); + $expectedDateTime->setTimezone(new \DateTimeZone($timezone)); + + $actualDateTime = $this->handler->deserializeDateTimeImmutableFromJson($visitor, $timestamp, $type); + + $this->assertEquals( + $expectedDateTime->format(\DateTime::RFC3339), + $actualDateTime->format(\DateTime::RFC3339) + ); + } +} diff --git a/vendor/jms/serializer/tests/Handler/FormErrorHandlerTest.php b/vendor/jms/serializer/tests/Handler/FormErrorHandlerTest.php new file mode 100644 index 0000000..4c44bc0 --- /dev/null +++ b/vendor/jms/serializer/tests/Handler/FormErrorHandlerTest.php @@ -0,0 +1,254 @@ +handler = new FormErrorHandler(new Translator('en')); + $this->visitor = new JsonSerializationVisitor(new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy())); + $this->dispatcher = new EventDispatcher(); + $this->factory = $this->getMockBuilder('Symfony\Component\Form\FormFactoryInterface')->getMock(); + } + + protected function tearDown() + { + $this->handler = null; + $this->visitor = null; + $this->dispatcher = null; + $this->factory = null; + } + + public function testSerializeEmptyFormError() + { + $form = $this->createForm(); + $json = json_encode($this->handler->serializeFormToJson($this->visitor, $form, array())); + + $this->assertSame('{}', $json); + } + + public function testErrorHandlerWithoutTranslator() + { + $this->handler = new FormErrorHandler(); + $form = $this->createForm(); + $form->addError(new FormError('error!')); + $json = json_encode($this->handler->serializeFormToJson($this->visitor, $form, array())); + + $this->assertSame(json_encode(array( + 'errors' => array( + 'error!', + ), + )), $json); + } + + public function testSerializeHasFormError() + { + $form = $this->createForm(); + $form->addError(new FormError('error!')); + $json = json_encode($this->handler->serializeFormToJson($this->visitor, $form, array())); + + $this->assertSame(json_encode(array( + 'errors' => array( + 'error!', + ), + )), $json); + } + + + public function testSerializeChildElements() + { + $formFactory = Forms::createFormFactory(); + $form = $formFactory->createBuilder() + ->add('child') + ->add('date') + ->getForm(); + + $form->addError(new FormError('error!')); + $form->get('date')->addError(new FormError('child-error')); + + $json = json_encode($this->handler->serializeFormToJson($this->visitor, $form, array())); + + $this->assertSame(json_encode(array( + 'errors' => array( + 'error!', + ), + 'children' => [ + 'child' => new \stdClass(), + 'date' => ['errors' => ['child-error']] + ] + )), $json); + + } + + public function testDefaultTranslationDomain() + { + /** @var Translator|\PHPUnit_Framework_MockObject_MockObject $translator */ + $translator = $this->getMockBuilder('Symfony\Component\Translation\TranslatorInterface')->getMock(); + + $handler = new FormErrorHandler($translator); + + $translator->expects($this->once()) + ->method('trans') + ->with( + $this->equalTo('error!'), + $this->equalTo([]), + $this->equalTo('validators') + ); + + $formError = $this->getMockBuilder('Symfony\Component\Form\FormError')->disableOriginalConstructor()->getMock(); + $formError->expects($this->once())->method('getMessageTemplate')->willReturn('error!'); + $formError->expects($this->once())->method('getMessagePluralization')->willReturn(null); + $formError->expects($this->once())->method('getMessageParameters')->willReturn([]); + + $this->invokeMethod($handler, 'getErrorMessage', [$formError,]); + } + + public function testDefaultTranslationDomainWithPluralTranslation() + { + /** @var Translator|\PHPUnit_Framework_MockObject_MockObject $translator */ + $translator = $this->getMockBuilder('Symfony\Component\Translation\TranslatorInterface')->getMock(); + + $handler = new FormErrorHandler($translator); + + $translator->expects($this->once()) + ->method('transChoice') + ->with( + $this->equalTo('error!'), + $this->equalTo(0), + $this->equalTo([]), + $this->equalTo('validators') + ); + + $formError = $this->getMockBuilder('Symfony\Component\Form\FormError')->disableOriginalConstructor()->getMock(); + $formError->expects($this->once())->method('getMessageTemplate')->willReturn('error!'); + $formError->expects($this->exactly(2))->method('getMessagePluralization')->willReturn(0); + $formError->expects($this->once())->method('getMessageParameters')->willReturn([]); + + $this->invokeMethod($handler, 'getErrorMessage', [$formError,]); + } + + public function testCustomTranslationDomain() + { + /** @var Translator|\PHPUnit_Framework_MockObject_MockObject $translator */ + $translator = $this->getMockBuilder('Symfony\Component\Translation\TranslatorInterface')->getMock(); + + $handler = new FormErrorHandler($translator, 'custom_domain'); + + $translator->expects($this->once()) + ->method('trans') + ->with( + $this->equalTo('error!'), + $this->equalTo([]), + $this->equalTo('custom_domain') + ); + + $formError = $this->getMockBuilder('Symfony\Component\Form\FormError')->disableOriginalConstructor()->getMock(); + $formError->expects($this->once())->method('getMessageTemplate')->willReturn('error!'); + $formError->expects($this->once())->method('getMessagePluralization')->willReturn(null); + $formError->expects($this->once())->method('getMessageParameters')->willReturn([]); + + $this->invokeMethod($handler, 'getErrorMessage', [$formError,]); + } + + public function testCustomTranslationDomainWithPluralTranslation() + { + /** @var Translator|\PHPUnit_Framework_MockObject_MockObject $translator */ + $translator = $this->getMockBuilder('Symfony\Component\Translation\TranslatorInterface')->getMock(); + + $handler = new FormErrorHandler($translator, 'custom_domain'); + + $translator->expects($this->once()) + ->method('transChoice') + ->with( + $this->equalTo('error!'), + $this->equalTo(0), + $this->equalTo([]), + $this->equalTo('custom_domain') + ); + + $formError = $this->getMockBuilder('Symfony\Component\Form\FormError')->disableOriginalConstructor()->getMock(); + $formError->expects($this->once())->method('getMessageTemplate')->willReturn('error!'); + $formError->expects($this->exactly(2))->method('getMessagePluralization')->willReturn(0); + $formError->expects($this->once())->method('getMessageParameters')->willReturn([]); + + $this->invokeMethod($handler, 'getErrorMessage', [$formError,]); + + } + + /** + * @param string $name + * @param EventDispatcherInterface $dispatcher + * @param string $dataClass + * + * @return FormBuilder + */ + protected function getBuilder($name = 'name', EventDispatcherInterface $dispatcher = null, $dataClass = null) + { + return new FormBuilder($name, $dataClass, $dispatcher ?: $this->dispatcher, $this->factory); + } + + /** + * @param string $name + * + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function getMockForm($name = 'name') + { + $form = $this->getMockBuilder('Symfony\Component\Form\Test\FormInterface')->getMock(); + $config = $this->getMockBuilder('Symfony\Component\Form\FormConfigInterface')->getMock(); + + $form->expects($this->any()) + ->method('getName') + ->will($this->returnValue($name)); + $form->expects($this->any()) + ->method('getConfig') + ->will($this->returnValue($config)); + + return $form; + } + + protected function createForm() + { + return $this->getBuilder()->getForm(); + } + + protected function invokeMethod($object, $method, array $args = []) + { + $reflectionMethod = new \ReflectionMethod($object, $method); + $reflectionMethod->setAccessible(true); + + return $reflectionMethod->invokeArgs($object, $args); + } +} diff --git a/vendor/jms/serializer/tests/Handler/HandlerRegistryTest.php b/vendor/jms/serializer/tests/Handler/HandlerRegistryTest.php new file mode 100644 index 0000000..02f0f3a --- /dev/null +++ b/vendor/jms/serializer/tests/Handler/HandlerRegistryTest.php @@ -0,0 +1,64 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Handler; + +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Handler\HandlerRegistry; + +class HandlerRegistryTest extends \PHPUnit_Framework_TestCase +{ + protected $handlerRegistry; + + protected function setUp() + { + $this->handlerRegistry = $this->createHandlerRegistry(); + } + + public function testRegisteredHandlersCanBeRetrieved() + { + $jsonSerializationHandler = new DummyHandler(); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, '\stdClass', 'json', $jsonSerializationHandler); + + $jsonDeserializationHandler = new DummyHandler(); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_DESERIALIZATION, '\stdClass', 'json', $jsonDeserializationHandler); + + $xmlSerializationHandler = new DummyHandler(); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, '\stdClass', 'xml', $xmlSerializationHandler); + + $xmlDeserializationHandler = new DummyHandler(); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_DESERIALIZATION, '\stdClass', 'xml', $xmlDeserializationHandler); + + $this->assertSame($jsonSerializationHandler, $this->handlerRegistry->getHandler(GraphNavigator::DIRECTION_SERIALIZATION, '\stdClass', 'json')); + $this->assertSame($jsonDeserializationHandler, $this->handlerRegistry->getHandler(GraphNavigator::DIRECTION_DESERIALIZATION, '\stdClass', 'json')); + $this->assertSame($xmlSerializationHandler, $this->handlerRegistry->getHandler(GraphNavigator::DIRECTION_SERIALIZATION, '\stdClass', 'xml')); + $this->assertSame($xmlDeserializationHandler, $this->handlerRegistry->getHandler(GraphNavigator::DIRECTION_DESERIALIZATION, '\stdClass', 'xml')); + } + + protected function createHandlerRegistry() + { + return new HandlerRegistry(); + } +} + +class DummyHandler +{ + public function __call($name, $arguments) + { + } +} diff --git a/vendor/jms/serializer/tests/Handler/LazyHandlerRegistryTest.php b/vendor/jms/serializer/tests/Handler/LazyHandlerRegistryTest.php new file mode 100644 index 0000000..075bb26 --- /dev/null +++ b/vendor/jms/serializer/tests/Handler/LazyHandlerRegistryTest.php @@ -0,0 +1,74 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Handler; + +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Handler\LazyHandlerRegistry; + +abstract class LazyHandlerRegistryTest extends HandlerRegistryTest +{ + protected $container; + + protected function setUp() + { + $this->container = $this->createContainer(); + + parent::setUp(); + } + + protected function createHandlerRegistry() + { + return new LazyHandlerRegistry($this->container); + } + + public function testRegisteredHandlersCanBeRetrievedWhenBeingDefinedAsServices() + { + $jsonSerializationHandler = new HandlerService(); + $this->registerHandlerService('handler.serialization.json', $jsonSerializationHandler); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, '\stdClass', 'json', array('handler.serialization.json', 'handle')); + + $jsonDeserializationHandler = new HandlerService(); + $this->registerHandlerService('handler.deserialization.json', $jsonDeserializationHandler); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_DESERIALIZATION, '\stdClass', 'json', array('handler.deserialization.json', 'handle')); + + $xmlSerializationHandler = new HandlerService(); + $this->registerHandlerService('handler.serialization.xml', $xmlSerializationHandler); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, '\stdClass', 'xml', array('handler.serialization.xml', 'handle')); + + $xmlDeserializationHandler = new HandlerService(); + $this->registerHandlerService('handler.deserialization.xml', $xmlDeserializationHandler); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_DESERIALIZATION, '\stdClass', 'xml', array('handler.deserialization.xml', 'handle')); + + $this->assertSame(array($jsonSerializationHandler, 'handle'), $this->handlerRegistry->getHandler(GraphNavigator::DIRECTION_SERIALIZATION, '\stdClass', 'json')); + $this->assertSame(array($jsonDeserializationHandler, 'handle'), $this->handlerRegistry->getHandler(GraphNavigator::DIRECTION_DESERIALIZATION, '\stdClass', 'json')); + $this->assertSame(array($xmlSerializationHandler, 'handle'), $this->handlerRegistry->getHandler(GraphNavigator::DIRECTION_SERIALIZATION, '\stdClass', 'xml')); + $this->assertSame(array($xmlDeserializationHandler, 'handle'), $this->handlerRegistry->getHandler(GraphNavigator::DIRECTION_DESERIALIZATION, '\stdClass', 'xml')); + } + + abstract protected function createContainer(); + + abstract protected function registerHandlerService($serviceId, $listener); +} + +class HandlerService +{ + public function handle() + { + } +} diff --git a/vendor/jms/serializer/tests/Handler/LazyHandlerRegistryWithPsr11ContainerTest.php b/vendor/jms/serializer/tests/Handler/LazyHandlerRegistryWithPsr11ContainerTest.php new file mode 100644 index 0000000..dd80c3b --- /dev/null +++ b/vendor/jms/serializer/tests/Handler/LazyHandlerRegistryWithPsr11ContainerTest.php @@ -0,0 +1,54 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Handler; + +use Psr\Container\ContainerInterface; + +class LazyHandlerRegistryWithPsr11ContainerTest extends LazyHandlerRegistryTest +{ + protected function createContainer() + { + return new Psr11Container(); + } + + protected function registerHandlerService($serviceId, $listener) + { + $this->container->set($serviceId, $listener); + } +} + +class Psr11Container implements ContainerInterface +{ + private $services; + + public function get($id) + { + return $this->services[$id]; + } + + public function has($id) + { + return isset($this->services[$id]); + } + + public function set($id, $service) + { + $this->services[$id] = $service; + } +} diff --git a/vendor/jms/serializer/tests/Handler/LazyHandlerRegistryWithSymfonyContainerTest.php b/vendor/jms/serializer/tests/Handler/LazyHandlerRegistryWithSymfonyContainerTest.php new file mode 100644 index 0000000..2518864 --- /dev/null +++ b/vendor/jms/serializer/tests/Handler/LazyHandlerRegistryWithSymfonyContainerTest.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Handler; + +use Symfony\Component\DependencyInjection\Container; + +class LazyHandlerRegistryWithSymfonyContainerTest extends LazyHandlerRegistryTest +{ + protected function createContainer() + { + return new Container(); + } + + protected function registerHandlerService($serviceId, $listener) + { + $this->container->set($serviceId, $listener); + } +} diff --git a/vendor/jms/serializer/tests/Handler/PropelCollectionHandlerTest.php b/vendor/jms/serializer/tests/Handler/PropelCollectionHandlerTest.php new file mode 100644 index 0000000..71114ce --- /dev/null +++ b/vendor/jms/serializer/tests/Handler/PropelCollectionHandlerTest.php @@ -0,0 +1,43 @@ +serializer = SerializerBuilder::create() + ->addDefaultHandlers()//load PropelCollectionHandler + ->build(); + } + + public function testSerializePropelObjectCollection() + { + $collection = new \PropelObjectCollection(); + $collection->setData(array(new TestSubject('lolo'), new TestSubject('pepe'))); + $json = $this->serializer->serialize($collection, 'json'); + + $data = json_decode($json, true); + + $this->assertCount(2, $data); //will fail if PropelCollectionHandler not loaded + + foreach ($data as $testSubject) { + $this->assertArrayHasKey('name', $testSubject); + } + } +} + +class TestSubject +{ + protected $name; + + public function __construct($name) + { + $this->name = $name; + } +} diff --git a/vendor/jms/serializer/tests/JMS/Serializer/Tests/Fixtures/ObjectWithInlineArray.php b/vendor/jms/serializer/tests/JMS/Serializer/Tests/Fixtures/ObjectWithInlineArray.php new file mode 100644 index 0000000..a14fe32 --- /dev/null +++ b/vendor/jms/serializer/tests/JMS/Serializer/Tests/Fixtures/ObjectWithInlineArray.php @@ -0,0 +1,22 @@ +") + */ + public $array; + + /** + * @param array $array + */ + public function __construct(array $array) + { + $this->array = $array; + } +} diff --git a/vendor/jms/serializer/tests/Metadata/ClassMetadataTest.php b/vendor/jms/serializer/tests/Metadata/ClassMetadataTest.php new file mode 100644 index 0000000..e1408fe --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/ClassMetadataTest.php @@ -0,0 +1,168 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Metadata; + +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; + +class ClassMetadataTest extends \PHPUnit_Framework_TestCase +{ + public function getAccessOrderCases() + { + return [ + [array('b', 'a'), array('b', 'a')], + [array('a', 'b'), array('a', 'b')], + [array('b'), array('b', 'a')], + [array('a'), array('a', 'b')], + [array('foo', 'bar'), array('b', 'a')], + ]; + } + + public function testSerialization() + { + $meta = new PropertyMetadata('JMS\Serializer\Tests\Metadata\PropertyMetadataOrder', 'b'); + $restoredMeta = unserialize(serialize($meta)); + $this->assertEquals($meta, $restoredMeta); + } + + /** + * @dataProvider getAccessOrderCases + */ + public function testSetAccessorOrderCustom(array $order, array $expected) + { + $metadata = new ClassMetadata('JMS\Serializer\Tests\Metadata\PropertyMetadataOrder'); + $metadata->addPropertyMetadata(new PropertyMetadata('JMS\Serializer\Tests\Metadata\PropertyMetadataOrder', 'b')); + $metadata->addPropertyMetadata(new PropertyMetadata('JMS\Serializer\Tests\Metadata\PropertyMetadataOrder', 'a')); + $this->assertEquals(array('b', 'a'), array_keys($metadata->propertyMetadata)); + + $metadata->setAccessorOrder(ClassMetadata::ACCESSOR_ORDER_CUSTOM, $order); + $this->assertEquals($expected, array_keys($metadata->propertyMetadata)); + } + + public function testSetAccessorOrderAlphabetical() + { + $metadata = new ClassMetadata('JMS\Serializer\Tests\Metadata\PropertyMetadataOrder'); + $metadata->addPropertyMetadata(new PropertyMetadata('JMS\Serializer\Tests\Metadata\PropertyMetadataOrder', 'b')); + $metadata->addPropertyMetadata(new PropertyMetadata('JMS\Serializer\Tests\Metadata\PropertyMetadataOrder', 'a')); + $this->assertEquals(array('b', 'a'), array_keys($metadata->propertyMetadata)); + + $metadata->setAccessorOrder(ClassMetadata::ACCESSOR_ORDER_ALPHABETICAL); + $this->assertEquals(array('a', 'b'), array_keys($metadata->propertyMetadata)); + } + + /** + * @dataProvider providerPublicMethodData + */ + public function testAccessorTypePublicMethod($property, $getterInit, $setterInit, $getterName, $setterName) + { + $object = new PropertyMetadataPublicMethod(); + + $metadata = new PropertyMetadata(get_class($object), $property); + $metadata->setAccessor(PropertyMetadata::ACCESS_TYPE_PUBLIC_METHOD, $getterInit, $setterInit); + + $this->assertEquals($getterName, $metadata->getter); + $this->assertEquals($setterName, $metadata->setter); + + $metadata->setValue($object, 'x'); + + $this->assertEquals(sprintf('%1$s:%1$s:x', strtoupper($property)), $metadata->getValue($object)); + } + + /** + * @dataProvider providerPublicMethodException + */ + public function testAccessorTypePublicMethodException($getter, $setter, $message) + { + $this->setExpectedException('\JMS\Serializer\Exception\RuntimeException', $message); + + $object = new PropertyMetadataPublicMethod(); + + $metadata = new PropertyMetadata(get_class($object), 'e'); + $metadata->setAccessor(PropertyMetadata::ACCESS_TYPE_PUBLIC_METHOD, $getter, $setter); + } + + public function providerPublicMethodData() + { + return array( + array('a', null, null, 'geta', 'seta'), + array('b', null, null, 'isb', 'setb'), + array('c', null, null, 'hasc', 'setc'), + array('d', 'fetchd', 'saved', 'fetchd', 'saved') + ); + } + + public function providerPublicMethodException() + { + return array( + array(null, null, 'a public getE method, nor a public isE method, nor a public hasE method in class'), + array(null, 'setx', 'a public getE method, nor a public isE method, nor a public hasE method in class'), + array('getx', null, 'no public setE method in class'), + ); + } +} + +class PropertyMetadataOrder +{ + private $b, $a; +} + +class PropertyMetadataPublicMethod +{ + private $a, $b, $c, $d, $e; + + public function getA() + { + return 'A:' . $this->a; + } + + public function setA($a) + { + $this->a = 'A:' . $a; + } + + public function isB() + { + return 'B:' . $this->b; + } + + public function setB($b) + { + $this->b = 'B:' . $b; + } + + public function hasC() + { + return 'C:' . $this->c; + } + + public function setC($c) + { + $this->c = 'C:' . $c; + } + + public function fetchD() + { + return 'D:' . $this->d; + } + + public function saveD($d) + { + $this->d = 'D:' . $d; + } +} diff --git a/vendor/jms/serializer/tests/Metadata/Driver/AnnotationDriverTest.php b/vendor/jms/serializer/tests/Metadata/Driver/AnnotationDriverTest.php new file mode 100644 index 0000000..419d11e --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/AnnotationDriverTest.php @@ -0,0 +1,30 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Metadata\Driver; + +use Doctrine\Common\Annotations\AnnotationReader; +use JMS\Serializer\Metadata\Driver\AnnotationDriver; + +class AnnotationDriverTest extends BaseDriverTest +{ + protected function getDriver() + { + return new AnnotationDriver(new AnnotationReader()); + } +} diff --git a/vendor/jms/serializer/tests/Metadata/Driver/BaseDriverTest.php b/vendor/jms/serializer/tests/Metadata/Driver/BaseDriverTest.php new file mode 100644 index 0000000..eac5628 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/BaseDriverTest.php @@ -0,0 +1,496 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Metadata\Driver; + +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\ExpressionPropertyMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\Metadata\VirtualPropertyMetadata; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlAttributeDiscriminatorChild; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlAttributeDiscriminatorParent; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNamespaceDiscriminatorChild; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNamespaceDiscriminatorParent; +use JMS\Serializer\Tests\Fixtures\ParentSkipWithEmptyChild; +use Metadata\Driver\DriverInterface; + +abstract class BaseDriverTest extends \PHPUnit_Framework_TestCase +{ + public function testLoadBlogPostMetadata() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost')); + + $this->assertNotNull($m); + $this->assertEquals('blog-post', $m->xmlRootName); + $this->assertCount(4, $m->xmlNamespaces); + $this->assertArrayHasKey('', $m->xmlNamespaces); + $this->assertEquals('http://example.com/namespace', $m->xmlNamespaces['']); + $this->assertArrayHasKey('gd', $m->xmlNamespaces); + $this->assertEquals('http://schemas.google.com/g/2005', $m->xmlNamespaces['gd']); + $this->assertArrayHasKey('atom', $m->xmlNamespaces); + $this->assertEquals('http://www.w3.org/2005/Atom', $m->xmlNamespaces['atom']); + $this->assertArrayHasKey('dc', $m->xmlNamespaces); + $this->assertEquals('http://purl.org/dc/elements/1.1/', $m->xmlNamespaces['dc']); + + $p = new PropertyMetadata($m->name, 'id'); + $p->type = array('name' => 'string', 'params' => array()); + $p->groups = array("comments", "post"); + $p->xmlElementCData = false; + $this->assertEquals($p, $m->propertyMetadata['id']); + + $p = new PropertyMetadata($m->name, 'title'); + $p->type = array('name' => 'string', 'params' => array()); + $p->groups = array("comments", "post"); + $p->xmlNamespace = "http://purl.org/dc/elements/1.1/"; + $this->assertEquals($p, $m->propertyMetadata['title']); + + $p = new PropertyMetadata($m->name, 'createdAt'); + $p->type = array('name' => 'DateTime', 'params' => array()); + $p->xmlAttribute = true; + $this->assertEquals($p, $m->propertyMetadata['createdAt']); + + $p = new PropertyMetadata($m->name, 'published'); + $p->type = array('name' => 'boolean', 'params' => array()); + $p->serializedName = 'is_published'; + $p->xmlAttribute = true; + $p->groups = array("post"); + $this->assertEquals($p, $m->propertyMetadata['published']); + + $p = new PropertyMetadata($m->name, 'etag'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlAttribute = true; + $p->groups = array("post"); + $p->xmlNamespace = "http://schemas.google.com/g/2005"; + $this->assertEquals($p, $m->propertyMetadata['etag']); + + $p = new PropertyMetadata($m->name, 'comments'); + $p->type = array('name' => 'ArrayCollection', 'params' => array(array('name' => 'JMS\Serializer\Tests\Fixtures\Comment', 'params' => array()))); + $p->xmlCollection = true; + $p->xmlCollectionInline = true; + $p->xmlEntryName = 'comment'; + $p->groups = array("comments"); + $this->assertEquals($p, $m->propertyMetadata['comments']); + + $p = new PropertyMetadata($m->name, 'author'); + $p->type = array('name' => 'JMS\Serializer\Tests\Fixtures\Author', 'params' => array()); + $p->groups = array("post"); + $p->xmlNamespace = 'http://www.w3.org/2005/Atom'; + $this->assertEquals($p, $m->propertyMetadata['author']); + + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\Price')); + $this->assertNotNull($m); + + $p = new PropertyMetadata($m->name, 'price'); + $p->type = array('name' => 'float', 'params' => array()); + $p->xmlValue = true; + $this->assertEquals($p, $m->propertyMetadata['price']); + } + + public function testXMLListAbsentNode() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\ObjectWithAbsentXmlListNode')); + + $this->assertArrayHasKey('absent', $m->propertyMetadata); + $this->assertArrayHasKey('present', $m->propertyMetadata); + $this->assertArrayHasKey('skipDefault', $m->propertyMetadata); + + $this->assertTrue($m->propertyMetadata['absent']->xmlCollectionSkipWhenEmpty); + $this->assertTrue($m->propertyMetadata['skipDefault']->xmlCollectionSkipWhenEmpty); + $this->assertFalse($m->propertyMetadata['present']->xmlCollectionSkipWhenEmpty); + } + + public function testVirtualProperty() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\ObjectWithVirtualProperties')); + + $this->assertArrayHasKey('existField', $m->propertyMetadata); + $this->assertArrayHasKey('virtualValue', $m->propertyMetadata); + $this->assertArrayHasKey('virtualSerializedValue', $m->propertyMetadata); + $this->assertArrayHasKey('typedVirtualProperty', $m->propertyMetadata); + + $this->assertEquals($m->propertyMetadata['virtualSerializedValue']->serializedName, 'test', 'Serialized name is missing'); + + $p = new VirtualPropertyMetadata($m->name, 'virtualValue'); + $p->getter = 'getVirtualValue'; + + $this->assertEquals($p, $m->propertyMetadata['virtualValue']); + } + + public function testXmlKeyValuePairs() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\ObjectWithXmlKeyValuePairs')); + + $this->assertArrayHasKey('array', $m->propertyMetadata); + $this->assertTrue($m->propertyMetadata['array']->xmlKeyValuePairs); + } + + public function testExpressionVirtualPropertyWithExcludeAll() + { + $a = new \JMS\Serializer\Tests\Fixtures\ObjectWithExpressionVirtualPropertiesAndExcludeAll(); + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass($a));; + + $this->assertArrayHasKey('virtualValue', $m->propertyMetadata); + + $p = new ExpressionPropertyMetadata($m->name, 'virtualValue', 'object.getVirtualValue()'); + $this->assertEquals($p, $m->propertyMetadata['virtualValue']); + } + + public function testVirtualPropertyWithExcludeAll() + { + $a = new \JMS\Serializer\Tests\Fixtures\ObjectWithVirtualPropertiesAndExcludeAll(); + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass($a)); + + $this->assertArrayHasKey('virtualValue', $m->propertyMetadata); + + $p = new VirtualPropertyMetadata($m->name, 'virtualValue'); + $p->getter = 'getVirtualValue'; + + $this->assertEquals($p, $m->propertyMetadata['virtualValue']); + } + + public function testReadOnlyDefinedBeforeGetterAndSetter() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\AuthorReadOnly')); + + $this->assertNotNull($m); + } + + public function testExpressionVirtualProperty() + { + /** @var $m ClassMetadata */ + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\AuthorExpressionAccess')); + + $keys = array_keys($m->propertyMetadata); + $this->assertEquals(['firstName', 'lastName', 'id'], $keys); + } + + public function testLoadDiscriminator() + { + /** @var $m ClassMetadata */ + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\Discriminator\Vehicle')); + + $this->assertNotNull($m); + $this->assertEquals('type', $m->discriminatorFieldName); + $this->assertEquals($m->name, $m->discriminatorBaseClass); + $this->assertEquals( + array( + 'car' => 'JMS\Serializer\Tests\Fixtures\Discriminator\Car', + 'moped' => 'JMS\Serializer\Tests\Fixtures\Discriminator\Moped', + ), + $m->discriminatorMap + ); + } + + public function testLoadXmlDiscriminator() + { + /** @var $m ClassMetadata */ + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass(ObjectWithXmlAttributeDiscriminatorParent::class)); + + $this->assertNotNull($m); + $this->assertEquals('type', $m->discriminatorFieldName); + $this->assertEquals($m->name, $m->discriminatorBaseClass); + $this->assertEquals( + array( + 'child' => ObjectWithXmlAttributeDiscriminatorChild::class, + ), + $m->discriminatorMap + ); + $this->assertTrue($m->xmlDiscriminatorAttribute); + $this->assertFalse($m->xmlDiscriminatorCData); + } + + public function testLoadXmlDiscriminatorWithNamespaces() + { + /** @var $m ClassMetadata */ + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass(ObjectWithXmlNamespaceDiscriminatorParent::class)); + + $this->assertNotNull($m); + $this->assertEquals('type', $m->discriminatorFieldName); + $this->assertEquals($m->name, $m->discriminatorBaseClass); + $this->assertEquals( + array( + 'child' => ObjectWithXmlNamespaceDiscriminatorChild::class, + ), + $m->discriminatorMap + ); + $this->assertEquals('http://example.com/', $m->xmlDiscriminatorNamespace); + } + + public function testLoadDiscriminatorWithGroup() + { + /** @var $m ClassMetadata */ + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\DiscriminatorGroup\Vehicle')); + + $this->assertNotNull($m); + $this->assertEquals('type', $m->discriminatorFieldName); + $this->assertEquals(array('foo'), $m->discriminatorGroups); + $this->assertEquals($m->name, $m->discriminatorBaseClass); + $this->assertEquals( + array( + 'car' => 'JMS\Serializer\Tests\Fixtures\DiscriminatorGroup\Car' + ), + $m->discriminatorMap + ); + } + + public function testSkipWhenEmptyOption() + { + /** @var $m ClassMetadata */ + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass(ParentSkipWithEmptyChild::class)); + + $this->assertNotNull($m); + + $this->assertInstanceOf(PropertyMetadata::class, $m->propertyMetadata['c']); + $this->assertInstanceOf(PropertyMetadata::class, $m->propertyMetadata['d']); + $this->assertInstanceOf(PropertyMetadata::class, $m->propertyMetadata['child']); + $this->assertFalse($m->propertyMetadata['c']->skipWhenEmpty); + $this->assertFalse($m->propertyMetadata['d']->skipWhenEmpty); + $this->assertTrue($m->propertyMetadata['child']->skipWhenEmpty); + } + + public function testLoadDiscriminatorSubClass() + { + /** @var $m ClassMetadata */ + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\Discriminator\Car')); + + $this->assertNotNull($m); + $this->assertNull($m->discriminatorValue); + $this->assertNull($m->discriminatorBaseClass); + $this->assertNull($m->discriminatorFieldName); + $this->assertEquals(array(), $m->discriminatorMap); + } + + public function testLoadXmlObjectWithNamespacesMetadata() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespaces')); + $this->assertNotNull($m); + $this->assertEquals('test-object', $m->xmlRootName); + $this->assertEquals('http://example.com/namespace', $m->xmlRootNamespace); + $this->assertCount(3, $m->xmlNamespaces); + $this->assertArrayHasKey('', $m->xmlNamespaces); + $this->assertEquals('http://example.com/namespace', $m->xmlNamespaces['']); + $this->assertArrayHasKey('gd', $m->xmlNamespaces); + $this->assertEquals('http://schemas.google.com/g/2005', $m->xmlNamespaces['gd']); + $this->assertArrayHasKey('atom', $m->xmlNamespaces); + $this->assertEquals('http://www.w3.org/2005/Atom', $m->xmlNamespaces['atom']); + + $p = new PropertyMetadata($m->name, 'title'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://purl.org/dc/elements/1.1/"; + $this->assertEquals($p, $m->propertyMetadata['title']); + + $p = new PropertyMetadata($m->name, 'createdAt'); + $p->type = array('name' => 'DateTime', 'params' => array()); + $p->xmlAttribute = true; + $this->assertEquals($p, $m->propertyMetadata['createdAt']); + + $p = new PropertyMetadata($m->name, 'etag'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlAttribute = true; + $p->xmlNamespace = "http://schemas.google.com/g/2005"; + $this->assertEquals($p, $m->propertyMetadata['etag']); + + $p = new PropertyMetadata($m->name, 'author'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlAttribute = false; + $p->xmlNamespace = "http://www.w3.org/2005/Atom"; + $this->assertEquals($p, $m->propertyMetadata['author']); + + $p = new PropertyMetadata($m->name, 'language'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlAttribute = true; + $p->xmlNamespace = "http://purl.org/dc/elements/1.1/"; + $this->assertEquals($p, $m->propertyMetadata['language']); + } + + public function testMaxDepth() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\Node')); + + $this->assertEquals(2, $m->propertyMetadata['children']->maxDepth); + } + + public function testPersonCData() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\Person')); + + $this->assertNotNull($m); + $this->assertFalse($m->propertyMetadata['name']->xmlElementCData); + } + + public function testXmlNamespaceInheritanceMetadata() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\SimpleClassObject')); + $this->assertNotNull($m); + $this->assertCount(3, $m->xmlNamespaces); + $this->assertArrayHasKey('old_foo', $m->xmlNamespaces); + $this->assertEquals('http://old.foo.example.org', $m->xmlNamespaces['old_foo']); + $this->assertArrayHasKey('foo', $m->xmlNamespaces); + $this->assertEquals('http://foo.example.org', $m->xmlNamespaces['foo']); + $this->assertArrayHasKey('new_foo', $m->xmlNamespaces); + $this->assertEquals('http://new.foo.example.org', $m->xmlNamespaces['new_foo']); + $this->assertCount(3, $m->propertyMetadata); + + $p = new PropertyMetadata($m->name, 'foo'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://old.foo.example.org"; + $p->xmlAttribute = true; + $this->assertEquals($p, $m->propertyMetadata['foo']); + + $p = new PropertyMetadata($m->name, 'bar'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://foo.example.org"; + $this->assertEquals($p, $m->propertyMetadata['bar']); + + $p = new PropertyMetadata($m->name, 'moo'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://new.foo.example.org"; + $this->assertEquals($p, $m->propertyMetadata['moo']); + + + $subm = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\SimpleSubClassObject')); + $this->assertNotNull($subm); + $this->assertCount(2, $subm->xmlNamespaces); + $this->assertArrayHasKey('old_foo', $subm->xmlNamespaces); + $this->assertEquals('http://foo.example.org', $subm->xmlNamespaces['old_foo']); + $this->assertArrayHasKey('foo', $subm->xmlNamespaces); + $this->assertEquals('http://better.foo.example.org', $subm->xmlNamespaces['foo']); + $this->assertCount(3, $subm->propertyMetadata); + + $p = new PropertyMetadata($subm->name, 'moo'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://better.foo.example.org"; + $this->assertEquals($p, $subm->propertyMetadata['moo']); + + $p = new PropertyMetadata($subm->name, 'baz'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://foo.example.org"; + $this->assertEquals($p, $subm->propertyMetadata['baz']); + + $p = new PropertyMetadata($subm->name, 'qux'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://new.foo.example.org"; + $this->assertEquals($p, $subm->propertyMetadata['qux']); + + $m->merge($subm); + $this->assertNotNull($m); + $this->assertCount(3, $m->xmlNamespaces); + $this->assertArrayHasKey('old_foo', $m->xmlNamespaces); + $this->assertEquals('http://foo.example.org', $m->xmlNamespaces['old_foo']); + $this->assertArrayHasKey('foo', $m->xmlNamespaces); + $this->assertEquals('http://better.foo.example.org', $m->xmlNamespaces['foo']); + $this->assertArrayHasKey('new_foo', $m->xmlNamespaces); + $this->assertEquals('http://new.foo.example.org', $m->xmlNamespaces['new_foo']); + $this->assertCount(5, $m->propertyMetadata); + + $p = new PropertyMetadata($m->name, 'foo'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://old.foo.example.org"; + $p->xmlAttribute = true; + $p->class = 'JMS\Serializer\Tests\Fixtures\SimpleClassObject'; + $this->assetMetadataEquals($p, $m->propertyMetadata['foo']); + + $p = new PropertyMetadata($m->name, 'bar'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://foo.example.org"; + $p->class = 'JMS\Serializer\Tests\Fixtures\SimpleClassObject'; + $this->assetMetadataEquals($p, $m->propertyMetadata['bar']); + + $p = new PropertyMetadata($m->name, 'moo'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://better.foo.example.org"; + $this->assetMetadataEquals($p, $m->propertyMetadata['moo']); + + $p = new PropertyMetadata($m->name, 'baz'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://foo.example.org"; + $this->assetMetadataEquals($p, $m->propertyMetadata['baz']); + + $p = new PropertyMetadata($m->name, 'qux'); + $p->type = array('name' => 'string', 'params' => array()); + $p->xmlNamespace = "http://new.foo.example.org"; + $this->assetMetadataEquals($p, $m->propertyMetadata['qux']); + } + + private function assetMetadataEquals(PropertyMetadata $expected, PropertyMetadata $actual) + { + $expectedVars = get_object_vars($expected); + $actualVars = get_object_vars($actual); + + $expectedReflection = (array)$expectedVars['reflection']; + $actualReflection = (array)$actualVars['reflection']; + + // HHVM bug with class property + unset($expectedVars['reflection'], $actualVars['reflection']); + $this->assertEquals($expectedVars, $actualVars); + + // HHVM bug with class property + if (isset($expectedReflection['info']) || isset($actualReflection['info'])) { + $expectedReflection['class'] = $expectedReflection['info']['class']; + $actualReflection['class'] = $actualReflection['info']['class']; + } + + $this->assertEquals($expectedReflection, $actualReflection); + } + + public function testHandlerCallbacks() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\ObjectWithHandlerCallbacks')); + + $this->assertEquals('toJson', $m->handlerCallbacks[GraphNavigator::DIRECTION_SERIALIZATION]['json']); + $this->assertEquals('toXml', $m->handlerCallbacks[GraphNavigator::DIRECTION_SERIALIZATION]['xml']); + } + + public function testExclusionIf() + { + $class = 'JMS\Serializer\Tests\Fixtures\PersonSecret'; + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass($class)); + + $p = new PropertyMetadata($class, 'name'); + $p->type = array('name' => 'string', 'params' => array()); + $this->assertEquals($p, $m->propertyMetadata['name']); + + $p = new PropertyMetadata($class, 'gender'); + $p->type = array('name' => 'string', 'params' => array()); + $p->excludeIf = "show_data('gender')"; + $this->assertEquals($p, $m->propertyMetadata['gender']); + + $p = new PropertyMetadata($class, 'age'); + $p->type = array('name' => 'string', 'params' => array()); + $p->excludeIf = "!(show_data('age'))"; + $this->assertEquals($p, $m->propertyMetadata['age']); + } + + public function testExcludePropertyNoPublicAccessorException() + { + $first = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\ExcludePublicAccessor')); + + if ($this instanceof PhpDriverTest) { + return; + } + $this->assertArrayHasKey('id', $first->propertyMetadata); + $this->assertArrayNotHasKey('iShallNotBeAccessed', $first->propertyMetadata); + } + + + /** + * @return DriverInterface + */ + abstract protected function getDriver(); +} diff --git a/vendor/jms/serializer/tests/Metadata/Driver/DoctrineDriverTest.php b/vendor/jms/serializer/tests/Metadata/Driver/DoctrineDriverTest.php new file mode 100644 index 0000000..db02608 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/DoctrineDriverTest.php @@ -0,0 +1,162 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Metadata\Driver; + +use Doctrine\Common\Annotations\AnnotationReader; +use Doctrine\ORM\Configuration; +use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\Driver\AnnotationDriver as DoctrineDriver; +use JMS\Serializer\Metadata\Driver\AnnotationDriver; +use JMS\Serializer\Metadata\Driver\DoctrineTypeDriver; + +class DoctrineDriverTest extends \PHPUnit_Framework_TestCase +{ + public function getMetadata() + { + $refClass = new \ReflectionClass('JMS\Serializer\Tests\Fixtures\Doctrine\BlogPost'); + $metadata = $this->getDoctrineDriver()->loadMetadataForClass($refClass); + + return $metadata; + } + + public function testTypelessPropertyIsGivenTypeFromDoctrineMetadata() + { + $metadata = $this->getMetadata(); + + $this->assertEquals( + array('name' => 'DateTime', 'params' => array()), + $metadata->propertyMetadata['createdAt']->type + ); + } + + public function testSingleValuedAssociationIsProperlyHinted() + { + $metadata = $this->getMetadata(); + $this->assertEquals( + array('name' => 'JMS\Serializer\Tests\Fixtures\Doctrine\Author', 'params' => array()), + $metadata->propertyMetadata['author']->type + ); + } + + public function testMultiValuedAssociationIsProperlyHinted() + { + $metadata = $this->getMetadata(); + + $this->assertEquals( + array('name' => 'ArrayCollection', 'params' => array( + array('name' => 'JMS\Serializer\Tests\Fixtures\Doctrine\Comment', 'params' => array())) + ), + $metadata->propertyMetadata['comments']->type + ); + } + + public function testTypeGuessByDoctrineIsOverwrittenByDelegateDriver() + { + $metadata = $this->getMetadata(); + + // This would be guessed as boolean but we've overriden it to integer + $this->assertEquals( + array('name' => 'integer', 'params' => array()), + $metadata->propertyMetadata['published']->type + ); + } + + public function testUnknownDoctrineTypeDoesNotResultInAGuess() + { + $metadata = $this->getMetadata(); + $this->assertNull($metadata->propertyMetadata['slug']->type); + } + + public function testNonDoctrineEntityClassIsNotModified() + { + // Note: Using regular BlogPost fixture here instead of Doctrine fixture + // because it has no Doctrine metadata. + $refClass = new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost'); + + $plainMetadata = $this->getAnnotationDriver()->loadMetadataForClass($refClass); + $doctrineMetadata = $this->getDoctrineDriver()->loadMetadataForClass($refClass); + + // Do not compare timestamps + if (abs($doctrineMetadata->createdAt - $plainMetadata->createdAt) < 2) { + $plainMetadata->createdAt = $doctrineMetadata->createdAt; + } + + $this->assertEquals($plainMetadata, $doctrineMetadata); + } + + public function testExcludePropertyNoPublicAccessorException() + { + $first = $this->getAnnotationDriver() + ->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\ExcludePublicAccessor')); + + $this->assertArrayHasKey('id', $first->propertyMetadata); + $this->assertArrayNotHasKey('iShallNotBeAccessed', $first->propertyMetadata); + } + + public function testVirtualPropertiesAreNotModified() + { + $doctrineMetadata = $this->getMetadata(); + $this->assertNull($doctrineMetadata->propertyMetadata['ref']->type); + } + + public function testGuidPropertyIsGivenStringType() + { + $metadata = $this->getMetadata(); + + $this->assertEquals( + array('name' => 'string', 'params' => array()), + $metadata->propertyMetadata['id']->type + ); + } + + protected function getEntityManager() + { + $config = new Configuration(); + $config->setProxyDir(sys_get_temp_dir() . '/JMSDoctrineTestProxies'); + $config->setProxyNamespace('JMS\Tests\Proxies'); + $config->setMetadataDriverImpl( + new DoctrineDriver(new AnnotationReader(), __DIR__ . '/../../Fixtures/Doctrine') + ); + + $conn = array( + 'driver' => 'pdo_sqlite', + 'memory' => true, + ); + + return EntityManager::create($conn, $config); + } + + public function getAnnotationDriver() + { + return new AnnotationDriver(new AnnotationReader()); + } + + protected function getDoctrineDriver() + { + $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock(); + $registry->expects($this->atLeastOnce()) + ->method('getManagerForClass') + ->will($this->returnValue($this->getEntityManager())); + + return new DoctrineTypeDriver( + $this->getAnnotationDriver(), + $registry + ); + } +} diff --git a/vendor/jms/serializer/tests/Metadata/Driver/DoctrinePHPCRDriverTest.php b/vendor/jms/serializer/tests/Metadata/Driver/DoctrinePHPCRDriverTest.php new file mode 100644 index 0000000..05ab43d --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/DoctrinePHPCRDriverTest.php @@ -0,0 +1,127 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Metadata\Driver; + +use Doctrine\Common\Annotations\AnnotationReader; +use Doctrine\ODM\PHPCR\Configuration; +use Doctrine\ODM\PHPCR\DocumentManager; +use Doctrine\ODM\PHPCR\Mapping\Driver\AnnotationDriver as DoctrinePHPCRDriver; +use JMS\Serializer\Metadata\Driver\AnnotationDriver; +use JMS\Serializer\Metadata\Driver\DoctrinePHPCRTypeDriver; + +class DoctrinePHPCRDriverTest extends \PHPUnit_Framework_TestCase +{ + public function getMetadata() + { + $refClass = new \ReflectionClass('JMS\Serializer\Tests\Fixtures\DoctrinePHPCR\BlogPost'); + $metadata = $this->getDoctrinePHPCRDriver()->loadMetadataForClass($refClass); + + return $metadata; + } + + public function testTypelessPropertyIsGivenTypeFromDoctrineMetadata() + { + $metadata = $this->getMetadata(); + $this->assertEquals( + array('name' => 'DateTime', 'params' => array()), + $metadata->propertyMetadata['createdAt']->type + ); + } + + public function testSingleValuedAssociationIsProperlyHinted() + { + $metadata = $this->getMetadata(); + $this->assertEquals( + array('name' => 'JMS\Serializer\Tests\Fixtures\DoctrinePHPCR\Author', 'params' => array()), + $metadata->propertyMetadata['author']->type + ); + } + + public function testMultiValuedAssociationIsProperlyHinted() + { + $metadata = $this->getMetadata(); + + $this->assertEquals( + array('name' => 'ArrayCollection', 'params' => array( + array('name' => 'JMS\Serializer\Tests\Fixtures\DoctrinePHPCR\Comment', 'params' => array())) + ), + $metadata->propertyMetadata['comments']->type + ); + } + + public function testTypeGuessByDoctrineIsOverwrittenByDelegateDriver() + { + $metadata = $this->getMetadata(); + + // This would be guessed as boolean but we've overridden it to integer + $this->assertEquals( + array('name' => 'integer', 'params' => array()), + $metadata->propertyMetadata['published']->type + ); + } + + public function testNonDoctrineDocumentClassIsNotModified() + { + // Note: Using regular BlogPost fixture here instead of Doctrine fixture + // because it has no Doctrine metadata. + $refClass = new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost'); + + $plainMetadata = $this->getAnnotationDriver()->loadMetadataForClass($refClass); + $doctrineMetadata = $this->getDoctrinePHPCRDriver()->loadMetadataForClass($refClass); + + // Do not compare timestamps + if (abs($doctrineMetadata->createdAt - $plainMetadata->createdAt) < 2) { + $plainMetadata->createdAt = $doctrineMetadata->createdAt; + } + + $this->assertEquals($plainMetadata, $doctrineMetadata); + } + + protected function getDocumentManager() + { + $config = new Configuration(); + $config->setProxyDir(sys_get_temp_dir() . '/JMSDoctrineTestProxies'); + $config->setProxyNamespace('JMS\Tests\Proxies'); + $config->setMetadataDriverImpl( + new DoctrinePHPCRDriver(new AnnotationReader(), __DIR__ . '/../../Fixtures/DoctrinePHPCR') + ); + + $session = $this->getMockBuilder('PHPCR\SessionInterface')->getMock(); + + return DocumentManager::create($session, $config); + } + + public function getAnnotationDriver() + { + return new AnnotationDriver(new AnnotationReader()); + } + + protected function getDoctrinePHPCRDriver() + { + $registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock(); + $registry->expects($this->atLeastOnce()) + ->method('getManagerForClass') + ->will($this->returnValue($this->getDocumentManager())); + + return new DoctrinePHPCRTypeDriver( + $this->getAnnotationDriver(), + $registry + ); + } +} diff --git a/vendor/jms/serializer/tests/Metadata/Driver/NullDriverTest.php b/vendor/jms/serializer/tests/Metadata/Driver/NullDriverTest.php new file mode 100644 index 0000000..f55b07f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/NullDriverTest.php @@ -0,0 +1,35 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Metadata\Driver; + +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\Driver\NullDriver; + +class NullDriverTest extends \PHPUnit_Framework_TestCase +{ + public function testReturnsValidMetadata() + { + $driver = new NullDriver(); + + $metadata = $driver->loadMetadataForClass(new \ReflectionClass('stdClass')); + + $this->assertInstanceOf(ClassMetadata::class, $metadata); + $this->assertCount(0, $metadata->propertyMetadata); + } +} diff --git a/vendor/jms/serializer/tests/Metadata/Driver/PhpDriverTest.php b/vendor/jms/serializer/tests/Metadata/Driver/PhpDriverTest.php new file mode 100644 index 0000000..5bfeffe --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/PhpDriverTest.php @@ -0,0 +1,32 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Metadata\Driver; + +use JMS\Serializer\Metadata\Driver\PhpDriver; +use Metadata\Driver\FileLocator; + +class PhpDriverTest extends BaseDriverTest +{ + protected function getDriver() + { + return new PhpDriver(new FileLocator(array( + 'JMS\Serializer\Tests\Fixtures' => __DIR__ . '/php', + ))); + } +} diff --git a/vendor/jms/serializer/tests/Metadata/Driver/XmlDriverTest.php b/vendor/jms/serializer/tests/Metadata/Driver/XmlDriverTest.php new file mode 100644 index 0000000..1cf3570 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/XmlDriverTest.php @@ -0,0 +1,112 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Metadata\Driver; + +use JMS\Serializer\Metadata\Driver\XmlDriver; +use JMS\Serializer\Metadata\PropertyMetadata; +use Metadata\Driver\FileLocator; + +class XmlDriverTest extends BaseDriverTest +{ + /** + * @expectedException JMS\Serializer\Exception\XmlErrorException + * @expectedExceptionMessage [FATAL] Start tag expected, '<' not found + */ + public function testInvalidXml() + { + $driver = $this->getDriver(); + + $ref = new \ReflectionMethod($driver, 'loadMetadataFromFile'); + $ref->setAccessible(true); + $ref->invoke($driver, new \ReflectionClass('stdClass'), __DIR__ . '/xml/invalid.xml'); + } + + public function testBlogPostExcludeAllStrategy() + { + $m = $this->getDriver('exclude_all')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost')); + + $this->assertArrayHasKey('title', $m->propertyMetadata); + + $excluded = array('createdAt', 'published', 'comments', 'author'); + foreach ($excluded as $key) { + $this->assertArrayNotHasKey($key, $m->propertyMetadata); + } + } + + public function testBlogPostExcludeNoneStrategy() + { + $m = $this->getDriver('exclude_none')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost')); + + $this->assertArrayNotHasKey('title', $m->propertyMetadata); + + $excluded = array('createdAt', 'published', 'comments', 'author'); + foreach ($excluded as $key) { + $this->assertArrayHasKey($key, $m->propertyMetadata); + } + } + + public function testBlogPostCaseInsensitive() + { + $m = $this->getDriver('case')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost')); + + $p = new PropertyMetadata($m->name, 'title'); + $p->type = array('name' => 'string', 'params' => array()); + $this->assertEquals($p, $m->propertyMetadata['title']); + } + + public function testAccessorAttributes() + { + $m = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\GetSetObject')); + + $p = new PropertyMetadata($m->name, 'name'); + $p->type = array('name' => 'string', 'params' => array()); + $p->getter = 'getTrimmedName'; + $p->setter = 'setCapitalizedName'; + + $this->assertEquals($p, $m->propertyMetadata['name']); + } + + public function testGroupsTrim() + { + $first = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\GroupsTrim')); + + $this->assertArrayHasKey('amount', $first->propertyMetadata); + $this->assertArraySubset(['first.test.group', 'second.test.group'], $first->propertyMetadata['currency']->groups); + } + + public function testMultilineGroups() + { + $first = $this->getDriver()->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\MultilineGroupsFormat')); + + $this->assertArrayHasKey('amount', $first->propertyMetadata); + $this->assertArraySubset(['first.test.group', 'second.test.group'], $first->propertyMetadata['currency']->groups); + } + + protected function getDriver() + { + $append = ''; + if (func_num_args() == 1) { + $append = '/' . func_get_arg(0); + } + + return new XmlDriver(new FileLocator(array( + 'JMS\Serializer\Tests\Fixtures' => __DIR__ . '/xml' . $append, + ))); + } +} diff --git a/vendor/jms/serializer/tests/Metadata/Driver/YamlDriverTest.php b/vendor/jms/serializer/tests/Metadata/Driver/YamlDriverTest.php new file mode 100644 index 0000000..df332f3 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/YamlDriverTest.php @@ -0,0 +1,97 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Metadata\Driver; + +use JMS\Serializer\Metadata\Driver\YamlDriver; +use JMS\Serializer\Metadata\PropertyMetadata; +use Metadata\Driver\FileLocator; + +class YamlDriverTest extends BaseDriverTest +{ + public function testAccessorOrderIsInferred() + { + $m = $this->getDriverForSubDir('accessor_inferred')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\Person')); + $this->assertEquals(array('age', 'name'), array_keys($m->propertyMetadata)); + } + + public function testShortExposeSyntax() + { + $m = $this->getDriverForSubDir('short_expose')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\Person')); + + $this->assertArrayHasKey('name', $m->propertyMetadata); + $this->assertArrayNotHasKey('age', $m->propertyMetadata); + } + + public function testBlogPost() + { + $m = $this->getDriverForSubDir('exclude_all')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost')); + + $this->assertArrayHasKey('title', $m->propertyMetadata); + + $excluded = array('createdAt', 'published', 'comments', 'author'); + foreach ($excluded as $key) { + $this->assertArrayNotHasKey($key, $m->propertyMetadata); + } + } + + public function testBlogPostExcludeNoneStrategy() + { + $m = $this->getDriverForSubDir('exclude_none')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost')); + + $this->assertArrayNotHasKey('title', $m->propertyMetadata); + + $excluded = array('createdAt', 'published', 'comments', 'author'); + foreach ($excluded as $key) { + $this->assertArrayHasKey($key, $m->propertyMetadata); + } + } + + public function testBlogPostCaseInsensitive() + { + $m = $this->getDriverForSubDir('case')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost')); + + $p = new PropertyMetadata($m->name, 'title'); + $p->type = array('name' => 'string', 'params' => array()); + $this->assertEquals($p, $m->propertyMetadata['title']); + } + + public function testBlogPostAccessor() + { + $m = $this->getDriverForSubDir('accessor')->loadMetadataForClass(new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost')); + + $this->assertArrayHasKey('title', $m->propertyMetadata); + + $p = new PropertyMetadata($m->name, 'title'); + $p->getter = 'getOtherTitle'; + $p->setter = 'setOtherTitle'; + $this->assertEquals($p, $m->propertyMetadata['title']); + } + + private function getDriverForSubDir($subDir = null) + { + return new YamlDriver(new FileLocator(array( + 'JMS\Serializer\Tests\Fixtures' => __DIR__ . '/yml' . ($subDir ? '/' . $subDir : ''), + ))); + } + + protected function getDriver() + { + return $this->getDriverForSubDir(); + } +} diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/AuthorExpressionAccess.php b/vendor/jms/serializer/tests/Metadata/Driver/php/AuthorExpressionAccess.php new file mode 100644 index 0000000..ac76613 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/AuthorExpressionAccess.php @@ -0,0 +1,19 @@ +addPropertyMetadata($p); + +$p = new VirtualPropertyMetadata('JMS\Serializer\Tests\Fixtures\AuthorExpressionAccess', 'getLastName'); +$metadata->addPropertyMetadata($p); + +$p = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\AuthorExpressionAccess', 'id'); +$metadata->addPropertyMetadata($p); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/AuthorReadOnly.php b/vendor/jms/serializer/tests/Metadata/Driver/php/AuthorReadOnly.php new file mode 100644 index 0000000..d323d6e --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/AuthorReadOnly.php @@ -0,0 +1,7 @@ +xmlRootName = 'blog-post'; + +$metadata->registerNamespace('http://example.com/namespace'); +$metadata->registerNamespace('http://schemas.google.com/g/2005', 'gd'); +$metadata->registerNamespace('http://www.w3.org/2005/Atom', 'atom'); +$metadata->registerNamespace('http://purl.org/dc/elements/1.1/', 'dc'); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\BlogPost', 'id'); +$pMetadata->setType('string'); +$pMetadata->groups = array('comments', 'post'); +$pMetadata->xmlElementCData = false; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\BlogPost', 'title'); +$pMetadata->setType('string'); +$pMetadata->groups = array('comments', 'post'); +$pMetadata->xmlNamespace = "http://purl.org/dc/elements/1.1/"; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\BlogPost', 'createdAt'); +$pMetadata->setType('DateTime'); +$pMetadata->xmlAttribute = true; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\BlogPost', 'published'); +$pMetadata->setType('boolean'); +$pMetadata->serializedName = 'is_published'; +$pMetadata->groups = array('post'); +$pMetadata->xmlAttribute = true; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\BlogPost', 'etag'); +$pMetadata->setType('string'); +$pMetadata->groups = array('post'); +$pMetadata->xmlAttribute = true; +$pMetadata->xmlNamespace = 'http://schemas.google.com/g/2005'; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\BlogPost', 'comments'); +$pMetadata->setType('ArrayCollection'); +$pMetadata->xmlCollection = true; +$pMetadata->xmlCollectionInline = true; +$pMetadata->xmlEntryName = 'comment'; +$pMetadata->groups = array('comments'); + +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\BlogPost', 'author'); +$pMetadata->setType('JMS\Serializer\Tests\Fixtures\Author'); +$pMetadata->groups = array('post'); +$pMetadata->xmlNamespace = 'http://www.w3.org/2005/Atom'; + +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/Discriminator.Car.php b/vendor/jms/serializer/tests/Metadata/Driver/php/Discriminator.Car.php new file mode 100644 index 0000000..a3b07b5 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/Discriminator.Car.php @@ -0,0 +1,7 @@ +setDiscriminator('type', array( + 'child' => 'JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlAttributeDiscriminatorChild' +)); +$metadata->xmlDiscriminatorAttribute = true; +$metadata->xmlDiscriminatorCData = false; +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/Discriminator.ObjectWithXmlNamespaceDiscriminatorParent.php b/vendor/jms/serializer/tests/Metadata/Driver/php/Discriminator.ObjectWithXmlNamespaceDiscriminatorParent.php new file mode 100644 index 0000000..a10ee1f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/Discriminator.ObjectWithXmlNamespaceDiscriminatorParent.php @@ -0,0 +1,11 @@ +setDiscriminator('type', array( + 'child' => 'JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNamespaceDiscriminatorChild' +)); +$metadata->xmlDiscriminatorNamespace = 'http://example.com/'; + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/Discriminator.Vehicle.php b/vendor/jms/serializer/tests/Metadata/Driver/php/Discriminator.Vehicle.php new file mode 100644 index 0000000..9267162 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/Discriminator.Vehicle.php @@ -0,0 +1,16 @@ +setDiscriminator('type', array( + 'car' => 'JMS\Serializer\Tests\Fixtures\Discriminator\Car', + 'moped' => 'JMS\Serializer\Tests\Fixtures\Discriminator\Moped', +)); + +$km = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\Discriminator\Vehicle', 'km'); +$km->setType('integer'); +$metadata->addPropertyMetadata($km); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/DiscriminatorGroup.Vehicle.php b/vendor/jms/serializer/tests/Metadata/Driver/php/DiscriminatorGroup.Vehicle.php new file mode 100644 index 0000000..792d93f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/DiscriminatorGroup.Vehicle.php @@ -0,0 +1,15 @@ +setDiscriminator('type', array( + 'car' => 'JMS\Serializer\Tests\Fixtures\DiscriminatorGroup\Car', +), array('foo')); + +$km = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\DiscriminatorGroup\Vehicle', 'km'); +$km->setType('integer'); +$metadata->addPropertyMetadata($km); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/Node.php b/vendor/jms/serializer/tests/Metadata/Driver/php/Node.php new file mode 100644 index 0000000..782c9ab --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/Node.php @@ -0,0 +1,12 @@ +maxDepth = 2; +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithAbsentXmlListNode.php b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithAbsentXmlListNode.php new file mode 100644 index 0000000..d8a8e20 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithAbsentXmlListNode.php @@ -0,0 +1,22 @@ +xmlCollectionSkipWhenEmpty = true; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata($className, 'present'); +$pMetadata->xmlCollectionSkipWhenEmpty = false; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata($className, 'skipDefault'); +$metadata->addPropertyMetadata($pMetadata); + + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithExpressionVirtualPropertiesAndExcludeAll.php b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithExpressionVirtualPropertiesAndExcludeAll.php new file mode 100644 index 0000000..691e3d4 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithExpressionVirtualPropertiesAndExcludeAll.php @@ -0,0 +1,13 @@ +addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithHandlerCallbacks.php b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithHandlerCallbacks.php new file mode 100644 index 0000000..5edaa0c --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithHandlerCallbacks.php @@ -0,0 +1,16 @@ +type = 'string'; +$metadata->addPropertyMetadata($pMetadata); + +$metadata->addHandlerCallback(GraphNavigator::DIRECTION_SERIALIZATION, 'json', 'toJson'); +$metadata->addHandlerCallback(GraphNavigator::DIRECTION_SERIALIZATION, 'xml', 'toXml'); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithVirtualProperties.php b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithVirtualProperties.php new file mode 100644 index 0000000..db14578 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithVirtualProperties.php @@ -0,0 +1,28 @@ +addPropertyMetadata($pMetadata); + +$pMetadata = new VirtualPropertyMetadata($className, 'virtualValue'); +$pMetadata->getter = 'getVirtualValue'; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new VirtualPropertyMetadata($className, 'virtualSerializedValue'); +$pMetadata->getter = 'getVirtualSerializedValue'; +$pMetadata->serializedName = 'test'; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new VirtualPropertyMetadata($className, 'typedVirtualProperty'); +$pMetadata->getter = 'getTypedVirtualProperty'; +$pMetadata->setType('integer'); +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithVirtualPropertiesAndExcludeAll.php b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithVirtualPropertiesAndExcludeAll.php new file mode 100644 index 0000000..a3f2ef6 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithVirtualPropertiesAndExcludeAll.php @@ -0,0 +1,14 @@ +getter = 'getVirtualValue'; +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithXmlKeyValuePairs.php b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithXmlKeyValuePairs.php new file mode 100644 index 0000000..ca1115b --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithXmlKeyValuePairs.php @@ -0,0 +1,13 @@ +xmlKeyValuePairs = true; +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithXmlNamespaces.php b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithXmlNamespaces.php new file mode 100644 index 0000000..a240070 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/ObjectWithXmlNamespaces.php @@ -0,0 +1,41 @@ +xmlRootName = 'test-object'; +$metadata->xmlRootNamespace = 'http://example.com/namespace'; + +$metadata->registerNamespace('http://example.com/namespace'); +$metadata->registerNamespace('http://schemas.google.com/g/2005', 'gd'); +$metadata->registerNamespace('http://www.w3.org/2005/Atom', 'atom'); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespaces', 'title'); +$pMetadata->setType('string'); +$pMetadata->xmlNamespace = "http://purl.org/dc/elements/1.1/"; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespaces', 'createdAt'); +$pMetadata->setType('DateTime'); +$pMetadata->xmlAttribute = true; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespaces', 'etag'); +$pMetadata->setType('string'); +$pMetadata->xmlAttribute = true; +$pMetadata->xmlNamespace = 'http://schemas.google.com/g/2005'; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespaces', 'author'); +$pMetadata->setType('string'); +$pMetadata->xmlNamespace = 'http://www.w3.org/2005/Atom'; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespaces', 'language'); +$pMetadata->setType('string'); +$pMetadata->xmlAttribute = true; +$pMetadata->xmlNamespace = 'http://purl.org/dc/elements/1.1/'; +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/ParentSkipWithEmptyChild.php b/vendor/jms/serializer/tests/Metadata/Driver/php/ParentSkipWithEmptyChild.php new file mode 100644 index 0000000..537430f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/ParentSkipWithEmptyChild.php @@ -0,0 +1,19 @@ +name, 'c'); +$metadata->addPropertyMetadata($pMeta); + +$pMeta = new PropertyMetadata($metadata->name, 'd'); +$metadata->addPropertyMetadata($pMeta); + +$pMeta = new PropertyMetadata($metadata->name, 'child'); +$pMeta->skipWhenEmpty = true; + +$metadata->addPropertyMetadata($pMeta); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/Person.php b/vendor/jms/serializer/tests/Metadata/Driver/php/Person.php new file mode 100644 index 0000000..1de706f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/Person.php @@ -0,0 +1,20 @@ +xmlRootName = 'child'; + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\Person', 'name'); +$pMetadata->setType('string'); +$pMetadata->xmlValue = true; +$pMetadata->xmlElementCData = false; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\Person', 'age'); +$pMetadata->setType('integer'); +$pMetadata->xmlAttribute = true; +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/PersonSecret.php b/vendor/jms/serializer/tests/Metadata/Driver/php/PersonSecret.php new file mode 100644 index 0000000..065ea45 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/PersonSecret.php @@ -0,0 +1,22 @@ +setType('string'); +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\PersonSecret', 'gender'); +$pMetadata->setType('string'); +$pMetadata->excludeIf = "show_data('gender')"; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\PersonSecret', 'age'); +$pMetadata->setType('string'); +$pMetadata->excludeIf = "!(show_data('age'))"; +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/Price.php b/vendor/jms/serializer/tests/Metadata/Driver/php/Price.php new file mode 100644 index 0000000..541bcd8 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/Price.php @@ -0,0 +1,13 @@ +setType('float'); +$pMetadata->xmlValue = true; +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/SimpleClassObject.php b/vendor/jms/serializer/tests/Metadata/Driver/php/SimpleClassObject.php new file mode 100644 index 0000000..8baf68a --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/SimpleClassObject.php @@ -0,0 +1,28 @@ +registerNamespace('http://foo.example.org', 'foo'); +$metadata->registerNamespace('http://old.foo.example.org', 'old_foo'); +$metadata->registerNamespace('http://new.foo.example.org', 'new_foo'); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\SimpleClassObject', 'foo'); +$pMetadata->setType('string'); +$pMetadata->xmlNamespace = "http://old.foo.example.org"; +$pMetadata->xmlAttribute = true; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\SimpleClassObject', 'bar'); +$pMetadata->setType('string'); +$pMetadata->xmlNamespace = "http://foo.example.org"; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\SimpleClassObject', 'moo'); +$pMetadata->setType('string'); +$pMetadata->xmlNamespace = "http://new.foo.example.org"; +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/php/SimpleSubClassObject.php b/vendor/jms/serializer/tests/Metadata/Driver/php/SimpleSubClassObject.php new file mode 100644 index 0000000..ed75085 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/php/SimpleSubClassObject.php @@ -0,0 +1,26 @@ +registerNamespace('http://better.foo.example.org', 'foo'); +$metadata->registerNamespace('http://foo.example.org', 'old_foo'); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\SimpleSubClassObject', 'moo'); +$pMetadata->setType('string'); +$pMetadata->xmlNamespace = "http://better.foo.example.org"; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\SimpleSubClassObject', 'baz'); +$pMetadata->setType('string'); +$pMetadata->xmlNamespace = "http://foo.example.org"; +$metadata->addPropertyMetadata($pMetadata); + +$pMetadata = new PropertyMetadata('JMS\Serializer\Tests\Fixtures\SimpleSubClassObject', 'qux'); +$pMetadata->setType('string'); +$pMetadata->xmlNamespace = "http://new.foo.example.org"; +$metadata->addPropertyMetadata($pMetadata); + +return $metadata; \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/AuthorExpressionAccess.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/AuthorExpressionAccess.xml new file mode 100644 index 0000000..426ed6f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/AuthorExpressionAccess.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/AuthorReadOnly.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/AuthorReadOnly.xml new file mode 100644 index 0000000..d145ced --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/AuthorReadOnly.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/AuthorReadOnlyPerClass.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/AuthorReadOnlyPerClass.xml new file mode 100644 index 0000000..b7a140f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/AuthorReadOnlyPerClass.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/BlogPost.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/BlogPost.xml new file mode 100644 index 0000000..98fb667 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/BlogPost.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.Car.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.Car.xml new file mode 100644 index 0000000..638d67b --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.Car.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.Moped.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.Moped.xml new file mode 100644 index 0000000..b46eca1 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.Moped.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.ObjectWithXmlAttributeDiscriminatorParent.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.ObjectWithXmlAttributeDiscriminatorParent.xml new file mode 100644 index 0000000..5a5ac6e --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.ObjectWithXmlAttributeDiscriminatorParent.xml @@ -0,0 +1,9 @@ + + + + JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlAttributeDiscriminatorChild + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.ObjectWithXmlNamespaceDiscriminatorParent.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.ObjectWithXmlNamespaceDiscriminatorParent.xml new file mode 100644 index 0000000..ff021cc --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.ObjectWithXmlNamespaceDiscriminatorParent.xml @@ -0,0 +1,9 @@ + + + + JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNamespaceDiscriminatorChild + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.Vehicle.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.Vehicle.xml new file mode 100644 index 0000000..252c5a3 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/Discriminator.Vehicle.xml @@ -0,0 +1,8 @@ + + + + JMS\Serializer\Tests\Fixtures\Discriminator\Car + JMS\Serializer\Tests\Fixtures\Discriminator\Moped + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/DiscriminatorGroup.Vehicle.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/DiscriminatorGroup.Vehicle.xml new file mode 100644 index 0000000..4b40bbb --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/DiscriminatorGroup.Vehicle.xml @@ -0,0 +1,10 @@ + + + + JMS\Serializer\Tests\Fixtures\DiscriminatorGroup\Car + + foo + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/ExcludePublicAccessor.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/ExcludePublicAccessor.xml new file mode 100644 index 0000000..4580ca5 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/ExcludePublicAccessor.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/GetSetObject.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/GetSetObject.xml new file mode 100644 index 0000000..1835a5b --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/GetSetObject.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/GroupsTrim.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/GroupsTrim.xml new file mode 100644 index 0000000..1d00553 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/GroupsTrim.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/MultilineGroupsFormat.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/MultilineGroupsFormat.xml new file mode 100644 index 0000000..18fee08 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/MultilineGroupsFormat.xml @@ -0,0 +1,19 @@ + + + + + + first.test.group + + + + + first.test.group + second.test.group + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/Node.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/Node.xml new file mode 100644 index 0000000..fd4162c --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/Node.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithAbsentXmlListNode.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithAbsentXmlListNode.xml new file mode 100644 index 0000000..5ebeb9a --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithAbsentXmlListNode.xml @@ -0,0 +1,16 @@ + + + + + array + + + + array + + + + array + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithExpressionVirtualPropertiesAndExcludeAll.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithExpressionVirtualPropertiesAndExcludeAll.xml new file mode 100644 index 0000000..0219cbe --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithExpressionVirtualPropertiesAndExcludeAll.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithHandlerCallbacks.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithHandlerCallbacks.xml new file mode 100644 index 0000000..1420290 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithHandlerCallbacks.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithVirtualProperties.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithVirtualProperties.xml new file mode 100644 index 0000000..9f65def --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithVirtualProperties.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithVirtualPropertiesAndExcludeAll.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithVirtualPropertiesAndExcludeAll.xml new file mode 100644 index 0000000..8128445 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithVirtualPropertiesAndExcludeAll.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithXmlKeyValuePairs.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithXmlKeyValuePairs.xml new file mode 100644 index 0000000..6cabc2c --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithXmlKeyValuePairs.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithXmlNamespaces.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithXmlNamespaces.xml new file mode 100644 index 0000000..c9a0b5f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/ObjectWithXmlNamespaces.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/ParentSkipWithEmptyChild.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/ParentSkipWithEmptyChild.xml new file mode 100644 index 0000000..30b8643 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/ParentSkipWithEmptyChild.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/Person.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/Person.xml new file mode 100644 index 0000000..a723e7b --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/Person.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/PersonSecret.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/PersonSecret.xml new file mode 100644 index 0000000..141f795 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/PersonSecret.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/Price.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/Price.xml new file mode 100644 index 0000000..1e6c31f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/Price.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/SimpleClassObject.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/SimpleClassObject.xml new file mode 100644 index 0000000..bdd1711 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/SimpleClassObject.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/SimpleSubClassObject.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/SimpleSubClassObject.xml new file mode 100644 index 0000000..8acd396 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/SimpleSubClassObject.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/case/BlogPost.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/case/BlogPost.xml new file mode 100644 index 0000000..663ccd6 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/case/BlogPost.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/exclude_all/BlogPost.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/exclude_all/BlogPost.xml new file mode 100644 index 0000000..a0e77c5 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/exclude_all/BlogPost.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/exclude_none/BlogPost.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/exclude_none/BlogPost.xml new file mode 100644 index 0000000..e0394ee --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/exclude_none/BlogPost.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/xml/invalid.xml b/vendor/jms/serializer/tests/Metadata/Driver/xml/invalid.xml new file mode 100644 index 0000000..619d54a --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/xml/invalid.xml @@ -0,0 +1 @@ +This contains no valid XML markup. \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/AuthorExpressionAccess.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/AuthorExpressionAccess.yml new file mode 100644 index 0000000..9d65e62 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/AuthorExpressionAccess.yml @@ -0,0 +1,11 @@ +JMS\Serializer\Tests\Fixtures\AuthorExpressionAccess: + xml_root_name: author + properties: + id: + expose: true + virtual_properties: + firstName: + exp: object.getFirstName() + getLastName: + expose: true + diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/AuthorReadOnly.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/AuthorReadOnly.yml new file mode 100644 index 0000000..07859d2 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/AuthorReadOnly.yml @@ -0,0 +1,10 @@ +JMS\Serializer\Tests\Fixtures\AuthorReadOnly: + xml_root_name: author + properties: + id: + read_only: true + name: + serialized_name: full_name + access_type: public_method + accessor_getter: getName + read_only: true diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/AuthorReadOnlyPerClass.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/AuthorReadOnlyPerClass.yml new file mode 100644 index 0000000..95f87ee --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/AuthorReadOnlyPerClass.yml @@ -0,0 +1,11 @@ +JMS\Serializer\Tests\Fixtures\AuthorReadOnlyPerClass: + xml_root_name: author + read_only: true + properties: + id: + + name: + serialized_name: full_name + access_type: public_method + accessor_getter: getName + read_only: false diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/BlogPost.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/BlogPost.yml new file mode 100644 index 0000000..bb9ff7f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/BlogPost.yml @@ -0,0 +1,43 @@ +JMS\Serializer\Tests\Fixtures\BlogPost: + xml_root_name: blog-post + xml_namespaces: + "": http://example.com/namespace + gd: http://schemas.google.com/g/2005 + atom: http://www.w3.org/2005/Atom + dc: http://purl.org/dc/elements/1.1/ + properties: + id: + type: string + groups: [comments, post] + xml_element: + cdata: false + title: + type: string + groups: [comments, post] + xml_element: + namespace: http://purl.org/dc/elements/1.1/ + createdAt: + type: DateTime + xml_attribute: true + published: + type: boolean + serialized_name: is_published + xml_attribute: true + groups: [post] + etag: + type: string + groups: [post] + xml_attribute: true + xml_element: + namespace: http://schemas.google.com/g/2005 + comments: + type: ArrayCollection + groups: [comments] + xml_list: + inline: true + entry_name: comment + author: + type: JMS\Serializer\Tests\Fixtures\Author + groups: [post] + xml_element: + namespace: http://www.w3.org/2005/Atom diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.Car.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.Car.yml new file mode 100644 index 0000000..9f0fcba --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.Car.yml @@ -0,0 +1 @@ +JMS\Serializer\Tests\Fixtures\Discriminator\Car: { } \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.Moped.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.Moped.yml new file mode 100644 index 0000000..d52a81d --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.Moped.yml @@ -0,0 +1 @@ +JMS\Serializer\Tests\Fixtures\Discriminator\Moped: { } \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.ObjectWithXmlAttributeDiscriminatorParent.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.ObjectWithXmlAttributeDiscriminatorParent.yml new file mode 100644 index 0000000..ba572c5 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.ObjectWithXmlAttributeDiscriminatorParent.yml @@ -0,0 +1,8 @@ +JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlAttributeDiscriminatorParent: + discriminator: + field_name: type + map: + child: JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlAttributeDiscriminatorChild + xml_attribute: true + xml_element: + cdata: false \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.ObjectWithXmlNamespaceDiscriminatorParent.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.ObjectWithXmlNamespaceDiscriminatorParent.yml new file mode 100644 index 0000000..e04a81d --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.ObjectWithXmlNamespaceDiscriminatorParent.yml @@ -0,0 +1,7 @@ +JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNamespaceDiscriminatorParent: + discriminator: + field_name: type + map: + child: JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNamespaceDiscriminatorChild + xml_element: + namespace: http://example.com/ diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.Vehicle.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.Vehicle.yml new file mode 100644 index 0000000..bcd5dc9 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/Discriminator.Vehicle.yml @@ -0,0 +1,10 @@ +JMS\Serializer\Tests\Fixtures\Discriminator\Vehicle: + discriminator: + field_name: type + map: + car: JMS\Serializer\Tests\Fixtures\Discriminator\Car + moped: JMS\Serializer\Tests\Fixtures\Discriminator\Moped + + properties: + km: + type: integer \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/DiscriminatorGroup.Vehicle.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/DiscriminatorGroup.Vehicle.yml new file mode 100644 index 0000000..6d1ad8d --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/DiscriminatorGroup.Vehicle.yml @@ -0,0 +1,10 @@ +JMS\Serializer\Tests\Fixtures\DiscriminatorGroup\Vehicle: + discriminator: + field_name: type + map: + car: JMS\Serializer\Tests\Fixtures\DiscriminatorGroup\Car + groups: [foo] + + properties: + km: + type: integer diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/ExcludePublicAccessor.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/ExcludePublicAccessor.yml new file mode 100644 index 0000000..acf04f3 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/ExcludePublicAccessor.yml @@ -0,0 +1,6 @@ +JMS\Serializer\Tests\Fixtures\ExcludePublicAccessor: + access_type: public_method + read_only: false + properties: + iShallNotBeAccessed: + exclude: true diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/Node.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/Node.yml new file mode 100644 index 0000000..c4651fd --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/Node.yml @@ -0,0 +1,4 @@ +JMS\Serializer\Tests\Fixtures\Node: + properties: + children: + max_depth: 2 diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithAbsentXmlListNode.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithAbsentXmlListNode.yml new file mode 100644 index 0000000..fd4d8e6 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithAbsentXmlListNode.yml @@ -0,0 +1,14 @@ +JMS\Serializer\Tests\Fixtures\ObjectWithAbsentXmlListNode: + properties: + absent: + type: array + xml_list: + skip_when_empty: true + present: + type: array + xml_list: + skip_when_empty: false + skipDefault: + type: array + xml_list: + inline: false diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithExpressionVirtualPropertiesAndExcludeAll.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithExpressionVirtualPropertiesAndExcludeAll.yml new file mode 100644 index 0000000..4b7efd0 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithExpressionVirtualPropertiesAndExcludeAll.yml @@ -0,0 +1,5 @@ +JMS\Serializer\Tests\Fixtures\ObjectWithExpressionVirtualPropertiesAndExcludeAll: + exclusion_policy: all + virtual_properties: + virtualValue: + exp: object.getVirtualValue() diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithHandlerCallbacks.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithHandlerCallbacks.yml new file mode 100644 index 0000000..6c5ad76 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithHandlerCallbacks.yml @@ -0,0 +1,8 @@ +JMS\Serializer\Tests\Fixtures\ObjectWithHandlerCallbacks: + properties: + name: + type: string + handler_callbacks: + serialization: + xml: toXml + json: toJson diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithVirtualProperties.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithVirtualProperties.yml new file mode 100644 index 0000000..9f6a04d --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithVirtualProperties.yml @@ -0,0 +1,10 @@ +JMS\Serializer\Tests\Fixtures\ObjectWithVirtualProperties: + properties: + existField: + type: string + virtual_properties: + getVirtualValue: ~ + getVirtualSerializedValue: + serialized_name: test + getTypedVirtualProperty: + type: integer diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithVirtualPropertiesAndExcludeAll.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithVirtualPropertiesAndExcludeAll.yml new file mode 100644 index 0000000..7351bf7 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithVirtualPropertiesAndExcludeAll.yml @@ -0,0 +1,4 @@ +JMS\Serializer\Tests\Fixtures\ObjectWithVirtualPropertiesAndExcludeAll: + exclusion_policy: all + virtual_properties: + getVirtualValue: ~ \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithXmlKeyValuePairs.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithXmlKeyValuePairs.yml new file mode 100644 index 0000000..2195b67 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithXmlKeyValuePairs.yml @@ -0,0 +1,5 @@ +JMS\Serializer\Tests\Fixtures\ObjectWithXmlKeyValuePairs: + properties: + array: + type: array + xml_key_value_pairs: true diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithXmlNamespaces.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithXmlNamespaces.yml new file mode 100644 index 0000000..3e340d1 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/ObjectWithXmlNamespaces.yml @@ -0,0 +1,29 @@ +JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespaces: + xml_root_name: test-object + xml_root_namespace: http://example.com/namespace + xml_namespaces: + "": http://example.com/namespace + gd: http://schemas.google.com/g/2005 + atom: http://www.w3.org/2005/Atom + properties: + title: + type: string + xml_element: + namespace: http://purl.org/dc/elements/1.1/ + createdAt: + type: DateTime + xml_attribute: true + etag: + type: string + xml_attribute: true + xml_element: + namespace: http://schemas.google.com/g/2005 + author: + type: string + xml_element: + namespace: http://www.w3.org/2005/Atom + language: + type: string + xml_attribute: true + xml_element: + namespace: http://purl.org/dc/elements/1.1/ diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/ParentSkipWithEmptyChild.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/ParentSkipWithEmptyChild.yml new file mode 100644 index 0000000..daf228b --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/ParentSkipWithEmptyChild.yml @@ -0,0 +1,8 @@ +JMS\Serializer\Tests\Fixtures\ParentSkipWithEmptyChild: + properties: + c: + type: string + d: + type: string + child: + skip_when_empty: true diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/Person.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/Person.yml new file mode 100644 index 0000000..c98e865 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/Person.yml @@ -0,0 +1,11 @@ +JMS\Serializer\Tests\Fixtures\Person: + xml_root_name: child + properties: + name: + type: string + xml_value: true + xml_element: + cdata: false + age: + type: integer + xml_attribute: true diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/PersonSecret.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/PersonSecret.yml new file mode 100644 index 0000000..88a6f55 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/PersonSecret.yml @@ -0,0 +1,10 @@ +JMS\Serializer\Tests\Fixtures\PersonSecret: + properties: + name: + type: string + gender: + type: string + exclude_if: "show_data('gender')" + age: + type: string + expose_if: "show_data('age')" diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/Price.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/Price.yml new file mode 100644 index 0000000..678d53e --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/Price.yml @@ -0,0 +1,5 @@ +JMS\Serializer\Tests\Fixtures\Price: + properties: + price: + type: float + xml_value: true diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/SimpleClassObject.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/SimpleClassObject.yml new file mode 100644 index 0000000..6097134 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/SimpleClassObject.yml @@ -0,0 +1,19 @@ +JMS\Serializer\Tests\Fixtures\SimpleClassObject: + xml_namespaces: + foo: http://foo.example.org + old_foo: http://old.foo.example.org + new_foo: http://new.foo.example.org + properties: + foo: + type: string + xml_attribute: true + xml_element: + namespace: http://old.foo.example.org + bar: + type: string + xml_element: + namespace: http://foo.example.org + moo: + type: string + xml_element: + namespace: http://new.foo.example.org \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/SimpleSubClassObject.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/SimpleSubClassObject.yml new file mode 100644 index 0000000..d99c7b1 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/SimpleSubClassObject.yml @@ -0,0 +1,17 @@ +JMS\Serializer\Tests\Fixtures\SimpleSubClassObject: + xml_namespaces: + foo: http://better.foo.example.org + old_foo: http://foo.example.org + properties: + moo: + type: string + xml_element: + namespace: http://better.foo.example.org + baz: + type: string + xml_element: + namespace: http://foo.example.org + qux: + type: string + xml_element: + namespace: http://new.foo.example.org \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/accessor/BlogPost.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/accessor/BlogPost.yml new file mode 100644 index 0000000..9b57d39 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/accessor/BlogPost.yml @@ -0,0 +1,7 @@ +JMS\Serializer\Tests\Fixtures\BlogPost: + xml_root_name: blog-post + properties: + title: + accessor: + getter: getOtherTitle + setter: setOtherTitle diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/accessor_inferred/Person.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/accessor_inferred/Person.yml new file mode 100644 index 0000000..933e03f --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/accessor_inferred/Person.yml @@ -0,0 +1,6 @@ +JMS\Serializer\Tests\Fixtures\Person: + custom_accessor_order: ["age", "name"] + + properties: + age: ~ + name: ~ diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/case/BlogPost.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/case/BlogPost.yml new file mode 100644 index 0000000..4cc2f8a --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/case/BlogPost.yml @@ -0,0 +1,7 @@ +JMS\Serializer\Tests\Fixtures\BlogPost: + xml_root_name: blog-post + exclusion_policy: all + properties: + title: + type: string + expose: TRUE diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/exclude_all/BlogPost.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/exclude_all/BlogPost.yml new file mode 100644 index 0000000..419cb7e --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/exclude_all/BlogPost.yml @@ -0,0 +1,7 @@ +JMS\Serializer\Tests\Fixtures\BlogPost: + xml_root_name: blog-post + exclusion_policy: ALL + properties: + title: + type: string + expose: true diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/exclude_none/BlogPost.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/exclude_none/BlogPost.yml new file mode 100644 index 0000000..7067cf8 --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/exclude_none/BlogPost.yml @@ -0,0 +1,7 @@ +JMS\Serializer\Tests\Fixtures\BlogPost: + xml_root_name: blog-post + exclusion_policy: NONE + properties: + title: + type: string + exclude: true diff --git a/vendor/jms/serializer/tests/Metadata/Driver/yml/short_expose/Person.yml b/vendor/jms/serializer/tests/Metadata/Driver/yml/short_expose/Person.yml new file mode 100644 index 0000000..4ab55be --- /dev/null +++ b/vendor/jms/serializer/tests/Metadata/Driver/yml/short_expose/Person.yml @@ -0,0 +1,4 @@ +JMS\Serializer\Tests\Fixtures\Person: + exclusion_policy: ALL + properties: + name: ~ diff --git a/vendor/jms/serializer/tests/Serializer/ArrayTest.php b/vendor/jms/serializer/tests/Serializer/ArrayTest.php new file mode 100644 index 0000000..9fb3bc8 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/ArrayTest.php @@ -0,0 +1,123 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use Doctrine\Common\Annotations\AnnotationReader; +use JMS\Serializer\Construction\UnserializeObjectConstructor; +use JMS\Serializer\Handler\HandlerRegistry; +use JMS\Serializer\JsonDeserializationVisitor; +use JMS\Serializer\JsonSerializationVisitor; +use JMS\Serializer\Metadata\Driver\AnnotationDriver; +use JMS\Serializer\Naming\CamelCaseNamingStrategy; +use JMS\Serializer\Naming\SerializedNameAnnotationStrategy; +use JMS\Serializer\Serializer; +use JMS\Serializer\Tests\Fixtures\Author; +use JMS\Serializer\Tests\Fixtures\AuthorList; +use JMS\Serializer\Tests\Fixtures\Order; +use JMS\Serializer\Tests\Fixtures\Price; +use Metadata\MetadataFactory; +use PhpCollection\Map; + +class ArrayTest extends \PHPUnit_Framework_TestCase +{ + protected $serializer; + + public function setUp() + { + $namingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); + + $this->serializer = new Serializer( + new MetadataFactory(new AnnotationDriver(new AnnotationReader())), + new HandlerRegistry(), + new UnserializeObjectConstructor(), + new Map(array('json' => new JsonSerializationVisitor($namingStrategy))), + new Map(array('json' => new JsonDeserializationVisitor($namingStrategy))) + ); + } + + public function testToArray() + { + $order = new Order(new Price(5)); + + $expected = array( + 'cost' => array( + 'price' => 5 + ) + ); + + $result = $this->serializer->toArray($order); + + $this->assertEquals($expected, $result); + } + + /** + * @dataProvider scalarValues + */ + public function testToArrayWithScalar($input) + { + $this->setExpectedException('JMS\Serializer\Exception\RuntimeException', sprintf( + 'The input data of type "%s" did not convert to an array, but got a result of type "%s".', + gettype($input), + gettype($input) + )); + $result = $this->serializer->toArray($input); + + $this->assertEquals(array($input), $result); + } + + public function scalarValues() + { + return array( + array(42), + array(3.14159), + array('helloworld'), + array(true), + ); + } + + public function testFromArray() + { + $data = array( + 'cost' => array( + 'price' => 2.5 + ) + ); + + $expected = new Order(new Price(2.5)); + $result = $this->serializer->fromArray($data, 'JMS\Serializer\Tests\Fixtures\Order'); + + $this->assertEquals($expected, $result); + } + + public function testToArrayReturnsArrayObjectAsArray() + { + $result = $this->serializer->toArray(new Author(null)); + + $this->assertSame(array(), $result); + } + + public function testToArrayConversNestedArrayObjects() + { + $list = new AuthorList(); + $list->add(new Author(null)); + + $result = $this->serializer->toArray($list); + $this->assertSame(array('authors' => array(array())), $result); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/BaseSerializationTest.php b/vendor/jms/serializer/tests/Serializer/BaseSerializationTest.php new file mode 100644 index 0000000..04badf5 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/BaseSerializationTest.php @@ -0,0 +1,1456 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use Doctrine\Common\Annotations\AnnotationReader; +use Doctrine\Common\Collections\ArrayCollection; +use JMS\Serializer\Accessor\DefaultAccessorStrategy; +use JMS\Serializer\Accessor\ExpressionAccessorStrategy; +use JMS\Serializer\Construction\UnserializeObjectConstructor; +use JMS\Serializer\Context; +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\EventDispatcher\EventDispatcher; +use JMS\Serializer\EventDispatcher\Subscriber\DoctrineProxySubscriber; +use JMS\Serializer\Exclusion\DepthExclusionStrategy; +use JMS\Serializer\Exclusion\GroupsExclusionStrategy; +use JMS\Serializer\Expression\ExpressionEvaluator; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Handler\ArrayCollectionHandler; +use JMS\Serializer\Handler\ConstraintViolationHandler; +use JMS\Serializer\Handler\DateHandler; +use JMS\Serializer\Handler\FormErrorHandler; +use JMS\Serializer\Handler\HandlerRegistry; +use JMS\Serializer\Handler\PhpCollectionHandler; +use JMS\Serializer\Handler\StdClassHandler; +use JMS\Serializer\JsonDeserializationVisitor; +use JMS\Serializer\JsonSerializationVisitor; +use JMS\Serializer\Metadata\Driver\AnnotationDriver; +use JMS\Serializer\Naming\CamelCaseNamingStrategy; +use JMS\Serializer\Naming\SerializedNameAnnotationStrategy; +use JMS\Serializer\SerializationContext; +use JMS\Serializer\Serializer; +use JMS\Serializer\Tests\Fixtures\AccessorOrderChild; +use JMS\Serializer\Tests\Fixtures\AccessorOrderMethod; +use JMS\Serializer\Tests\Fixtures\AccessorOrderParent; +use JMS\Serializer\Tests\Fixtures\Article; +use JMS\Serializer\Tests\Fixtures\Author; +use JMS\Serializer\Tests\Fixtures\AuthorExpressionAccess; +use JMS\Serializer\Tests\Fixtures\AuthorList; +use JMS\Serializer\Tests\Fixtures\AuthorReadOnly; +use JMS\Serializer\Tests\Fixtures\AuthorReadOnlyPerClass; +use JMS\Serializer\Tests\Fixtures\BlogPost; +use JMS\Serializer\Tests\Fixtures\CircularReferenceParent; +use JMS\Serializer\Tests\Fixtures\Comment; +use JMS\Serializer\Tests\Fixtures\CurrencyAwareOrder; +use JMS\Serializer\Tests\Fixtures\CurrencyAwarePrice; +use JMS\Serializer\Tests\Fixtures\CustomDeserializationObject; +use JMS\Serializer\Tests\Fixtures\DateTimeArraysObject; +use JMS\Serializer\Tests\Fixtures\Discriminator\Car; +use JMS\Serializer\Tests\Fixtures\Discriminator\Moped; +use JMS\Serializer\Tests\Fixtures\Garage; +use JMS\Serializer\Tests\Fixtures\GetSetObject; +use JMS\Serializer\Tests\Fixtures\GroupsObject; +use JMS\Serializer\Tests\Fixtures\GroupsUser; +use JMS\Serializer\Tests\Fixtures\IndexedCommentsBlogPost; +use JMS\Serializer\Tests\Fixtures\InitializedBlogPostConstructor; +use JMS\Serializer\Tests\Fixtures\InitializedObjectConstructor; +use JMS\Serializer\Tests\Fixtures\InlineChild; +use JMS\Serializer\Tests\Fixtures\InlineChildEmpty; +use JMS\Serializer\Tests\Fixtures\InlineChildWithGroups; +use JMS\Serializer\Tests\Fixtures\InlineParent; +use JMS\Serializer\Tests\Fixtures\Input; +use JMS\Serializer\Tests\Fixtures\InvalidGroupsObject; +use JMS\Serializer\Tests\Fixtures\Log; +use JMS\Serializer\Tests\Fixtures\MaxDepth\Gh236Foo; +use JMS\Serializer\Tests\Fixtures\NamedDateTimeArraysObject; +use JMS\Serializer\Tests\Fixtures\NamedDateTimeImmutableArraysObject; +use JMS\Serializer\Tests\Fixtures\Node; +use JMS\Serializer\Tests\Fixtures\ObjectWithEmptyHash; +use JMS\Serializer\Tests\Fixtures\ObjectWithEmptyNullableAndEmptyArrays; +use JMS\Serializer\Tests\Fixtures\ObjectWithIntListAndIntMap; +use JMS\Serializer\Tests\Fixtures\ObjectWithLifecycleCallbacks; +use JMS\Serializer\Tests\Fixtures\ObjectWithNullProperty; +use JMS\Serializer\Tests\Fixtures\ObjectWithVersionedVirtualProperties; +use JMS\Serializer\Tests\Fixtures\ObjectWithVirtualProperties; +use JMS\Serializer\Tests\Fixtures\Order; +use JMS\Serializer\Tests\Fixtures\ParentDoNotSkipWithEmptyChild; +use JMS\Serializer\Tests\Fixtures\ParentSkipWithEmptyChild; +use JMS\Serializer\Tests\Fixtures\PersonSecret; +use JMS\Serializer\Tests\Fixtures\PersonSecretMore; +use JMS\Serializer\Tests\Fixtures\PersonSecretMoreVirtual; +use JMS\Serializer\Tests\Fixtures\PersonSecretVirtual; +use JMS\Serializer\Tests\Fixtures\Price; +use JMS\Serializer\Tests\Fixtures\Publisher; +use JMS\Serializer\Tests\Fixtures\SimpleObject; +use JMS\Serializer\Tests\Fixtures\SimpleObjectProxy; +use JMS\Serializer\Tests\Fixtures\Tag; +use JMS\Serializer\Tests\Fixtures\Timestamp; +use JMS\Serializer\Tests\Fixtures\Tree; +use JMS\Serializer\Tests\Fixtures\VehicleInterfaceGarage; +use JMS\Serializer\VisitorInterface; +use JMS\Serializer\XmlDeserializationVisitor; +use JMS\Serializer\XmlSerializationVisitor; +use JMS\Serializer\YamlSerializationVisitor; +use Metadata\MetadataFactory; +use PhpCollection\Map; +use PhpCollection\Sequence; +use Symfony\Component\ExpressionLanguage\ExpressionFunction; +use Symfony\Component\ExpressionLanguage\ExpressionLanguage; +use Symfony\Component\Form\Form; +use Symfony\Component\Form\FormError; +use Symfony\Component\Form\FormFactoryBuilder; +use Symfony\Component\Translation\IdentityTranslator; +use Symfony\Component\Translation\MessageSelector; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; + +abstract class BaseSerializationTest extends \PHPUnit_Framework_TestCase +{ + protected $factory; + + /** + * @var EventDispatcher + */ + protected $dispatcher; + + /** @var Serializer */ + protected $serializer; + protected $handlerRegistry; + protected $serializationVisitors; + protected $deserializationVisitors; + protected $objectConstructor; + + public function testSerializeNullArray() + { + $arr = array('foo' => 'bar', 'baz' => null, null); + + $this->assertEquals( + $this->getContent('nullable'), + $this->serializer->serialize($arr, $this->getFormat(), SerializationContext::create()->setSerializeNull(true)) + ); + } + + public function testSerializeNullArrayExcludingNulls() + { + $arr = array('foo' => 'bar', 'baz' => null, null); + + $this->assertEquals( + $this->getContent('nullable_skip'), + $this->serializer->serialize($arr, $this->getFormat(), SerializationContext::create()->setSerializeNull(false)) + ); + } + + public function testSerializeNullObject() + { + $obj = new ObjectWithNullProperty('foo', 'bar'); + + $this->assertEquals( + $this->getContent('simple_object_nullable'), + $this->serializer->serialize($obj, $this->getFormat(), SerializationContext::create()->setSerializeNull(true)) + ); + } + + public function testDeserializeNullObject() + { + if (!$this->hasDeserializer()) { + $this->markTestSkipped(sprintf('No deserializer available for format `%s`', $this->getFormat())); + } + + $obj = new ObjectWithNullProperty('foo', 'bar'); + + /** @var ObjectWithNullProperty $dObj */ + $dObj = $this->serializer->deserialize( + $this->getContent('simple_object_nullable'), + ObjectWithNullProperty::class, + $this->getFormat() + ); + + $this->assertEquals($obj, $dObj); + $this->assertNull($dObj->getNullProperty()); + } + + /** + * @dataProvider getTypes + */ + public function testNull($type) + { + $this->assertEquals($this->getContent('null'), $this->serialize(null), $type); + + if ($this->hasDeserializer()) { + $this->assertEquals(null, $this->deserialize($this->getContent('null'), $type)); + } + } + + public function getTypes() + { + return array( + array('NULL'), + array('integer'), + array('double'), + array('float'), + array('string'), + array('DateTime'), + ); + } + + public function testString() + { + $this->assertEquals($this->getContent('string'), $this->serialize('foo')); + + if ($this->hasDeserializer()) { + $this->assertEquals('foo', $this->deserialize($this->getContent('string'), 'string')); + } + } + + /** + * @expectedException \JMS\Serializer\Exception\ExpressionLanguageRequiredException + * @expectedExceptionMessage To use conditional exclude/expose in JMS\Serializer\Tests\Fixtures\PersonSecret you must configure the expression language. + */ + public function testExpressionExclusionNotConfigured() + { + $person = new PersonSecret(); + $person->gender = 'f'; + $person->name = 'mike'; + $this->serialize($person); + } + + + public function testExpressionExclusionConfiguredWithDisjunctStrategy() + { + $person = new PersonSecret(); + $person->gender = 'f'; + $person->name = 'mike'; + + $language = new ExpressionLanguage(); + $language->addFunction(new ExpressionFunction('show_data', function () { + return "true"; + }, function () { + return true; + })); + + $serializer = new Serializer($this->factory, $this->handlerRegistry, $this->objectConstructor, $this->serializationVisitors, $this->deserializationVisitors, $this->dispatcher, null, new ExpressionEvaluator($language)); + + $this->assertEquals($this->getContent('person_secret_hide'), $serializer->serialize($person, $this->getFormat())); + } + + public function expressionFunctionProvider() + { + $person = new PersonSecret(); + $person->gender = 'f'; + $person->name = 'mike'; + + $personMoreSecret = new PersonSecretMore(); + $personMoreSecret->gender = 'f'; + $personMoreSecret->name = 'mike'; + + $personVirtual = new PersonSecretVirtual(); + $personVirtual->gender = 'f'; + $personVirtual->name = 'mike'; + + $personMoreSecretVirtual = new PersonSecretMoreVirtual(); + $personMoreSecretVirtual->gender = 'f'; + $personMoreSecretVirtual->name = 'mike'; + + $showGender = new ExpressionFunction('show_data', function () { + return "true"; + }, function () { + return true; + }); + + $hideGender = new ExpressionFunction('show_data', function () { + return "false"; + }, function () { + return false; + }); + + return [ + [ + $person, + $showGender, + 'person_secret_hide' + ], + [ + $person, + $hideGender, + 'person_secret_show' + ], + [ + $personMoreSecret, + $showGender, + 'person_secret_show' + ], + [ + $personMoreSecret, + $hideGender, + 'person_secret_hide' + ], + [ + $personVirtual, + $showGender, + 'person_secret_hide' + ], + [ + $personVirtual, + $hideGender, + 'person_secret_show' + ], + [ + $personMoreSecretVirtual, + $showGender, + 'person_secret_show' + ], + [ + $personMoreSecretVirtual, + $hideGender, + 'person_secret_hide' + ] + ]; + } + + /** + * @dataProvider expressionFunctionProvider + * @param PersonSecret|PersonSecretMore $person + * @param ExpressionFunction $function + * @param $json + */ + public function testExpressionExclusion($person, ExpressionFunction $function, $json) + { + $language = new ExpressionLanguage(); + $language->addFunction($function); + + $serializer = new Serializer($this->factory, $this->handlerRegistry, $this->objectConstructor, $this->serializationVisitors, $this->deserializationVisitors, $this->dispatcher, null, new ExpressionEvaluator($language)); + $this->assertEquals($this->getContent($json), $serializer->serialize($person, $this->getFormat())); + } + + /** + * @dataProvider getBooleans + */ + public function testBooleans($strBoolean, $boolean) + { + $this->assertEquals($this->getContent('boolean_' . $strBoolean), $this->serialize($boolean)); + + if ($this->hasDeserializer()) { + $this->assertSame($boolean, $this->deserialize($this->getContent('boolean_' . $strBoolean), 'boolean')); + } + } + + public function getBooleans() + { + return array(array('true', true), array('false', false)); + } + + /** + * @dataProvider getNumerics + */ + public function testNumerics($key, $value, $type) + { + $this->assertEquals($this->getContent($key), $this->serialize($value)); + + if ($this->hasDeserializer()) { + $this->assertEquals($value, $this->deserialize($this->getContent($key), $type)); + } + } + + public function getNumerics() + { + return array( + array('integer', 1, 'integer'), + array('float', 4.533, 'double'), + array('float', 4.533, 'float'), + array('float_trailing_zero', 1.0, 'double'), + array('float_trailing_zero', 1.0, 'float'), + ); + } + + public function testSimpleObject() + { + $this->assertEquals($this->getContent('simple_object'), $this->serialize($obj = new SimpleObject('foo', 'bar'))); + + if ($this->hasDeserializer()) { + $this->assertEquals($obj, $this->deserialize($this->getContent('simple_object'), get_class($obj))); + } + } + + public function testArrayStrings() + { + $data = array('foo', 'bar'); + $this->assertEquals($this->getContent('array_strings'), $this->serialize($data)); + + if ($this->hasDeserializer()) { + $this->assertEquals($data, $this->deserialize($this->getContent('array_strings'), 'array')); + } + } + + public function testArrayBooleans() + { + $data = array(true, false); + $this->assertEquals($this->getContent('array_booleans'), $this->serialize($data)); + + if ($this->hasDeserializer()) { + $this->assertEquals($data, $this->deserialize($this->getContent('array_booleans'), 'array')); + } + } + + public function testArrayIntegers() + { + $data = array(1, 3, 4); + $this->assertEquals($this->getContent('array_integers'), $this->serialize($data)); + + if ($this->hasDeserializer()) { + $this->assertEquals($data, $this->deserialize($this->getContent('array_integers'), 'array')); + } + } + + public function testArrayEmpty() + { + if ('xml' === $this->getFormat()) { + $this->markTestSkipped('XML can\'t be tested for empty array'); + } + + $data = array('array' => []); + $this->assertEquals($this->getContent('array_empty'), $this->serialize($data)); + + if ($this->hasDeserializer()) { + $this->assertEquals($data, $this->deserialize($this->getContent('array_empty'), 'array')); + } + } + + public function testArrayFloats() + { + $data = array(1.34, 3.0, 6.42); + $this->assertEquals($this->getContent('array_floats'), $this->serialize($data)); + + if ($this->hasDeserializer()) { + $this->assertEquals($data, $this->deserialize($this->getContent('array_floats'), 'array')); + } + } + + public function testArrayObjects() + { + $data = array(new SimpleObject('foo', 'bar'), new SimpleObject('baz', 'boo')); + $this->assertEquals($this->getContent('array_objects'), $this->serialize($data)); + + if ($this->hasDeserializer()) { + $this->assertEquals($data, $this->deserialize($this->getContent('array_objects'), 'array')); + } + } + + public function testArrayListAndMapDifference() + { + $arrayData = array(0 => 1, 2 => 2, 3 => 3); // Misses key 1 + $data = new ObjectWithIntListAndIntMap($arrayData, $arrayData); + + $this->assertEquals($this->getContent('array_list_and_map_difference'), $this->serialize($data)); + } + + public function testDateTimeArrays() + { + $data = array( + new \DateTime('2047-01-01 12:47:47', new \DateTimeZone('UTC')), + new \DateTime('2016-12-05 00:00:00', new \DateTimeZone('UTC')) + ); + + $object = new DateTimeArraysObject($data, $data); + $serializedObject = $this->serialize($object); + + $this->assertEquals($this->getContent('array_datetimes_object'), $serializedObject); + + if ($this->hasDeserializer()) { + /** @var DateTimeArraysObject $deserializedObject */ + $deserializedObject = $this->deserialize($this->getContent('array_datetimes_object'), 'Jms\Serializer\Tests\Fixtures\DateTimeArraysObject'); + + /** deserialized object has a default timezone set depending on user's timezone settings. That's why we manually set the UTC timezone on the DateTime objects. */ + foreach ($deserializedObject->getArrayWithDefaultDateTime() as $dateTime) { + $dateTime->setTimezone(new \DateTimeZone('UTC')); + } + + foreach ($deserializedObject->getArrayWithFormattedDateTime() as $dateTime) { + $dateTime->setTimezone(new \DateTimeZone('UTC')); + } + + $this->assertEquals($object, $deserializedObject); + } + } + + public function testNamedDateTimeArrays() + { + $data = array( + new \DateTime('2047-01-01 12:47:47', new \DateTimeZone('UTC')), + new \DateTime('2016-12-05 00:00:00', new \DateTimeZone('UTC')) + ); + + $object = new NamedDateTimeArraysObject(array('testdate1' => $data[0], 'testdate2' => $data[1])); + $serializedObject = $this->serialize($object); + + $this->assertEquals($this->getContent('array_named_datetimes_object'), $serializedObject); + + if ($this->hasDeserializer()) { + + // skip XML deserialization + if ($this->getFormat() === 'xml') { + return; + } + + /** @var NamedDateTimeArraysObject $deserializedObject */ + $deserializedObject = $this->deserialize($this->getContent('array_named_datetimes_object'), 'Jms\Serializer\Tests\Fixtures\NamedDateTimeArraysObject'); + + /** deserialized object has a default timezone set depending on user's timezone settings. That's why we manually set the UTC timezone on the DateTime objects. */ + foreach ($deserializedObject->getNamedArrayWithFormattedDate() as $dateTime) { + $dateTime->setTimezone(new \DateTimeZone('UTC')); + } + + $this->assertEquals($object, $deserializedObject); + } + } + + /** + * @group datetime + */ + public function testNamedDateTimeImmutableArrays() + { + $data = array( + new \DateTimeImmutable('2047-01-01 12:47:47', new \DateTimeZone('UTC')), + new \DateTimeImmutable('2016-12-05 00:00:00', new \DateTimeZone('UTC')) + ); + + $object = new NamedDateTimeImmutableArraysObject(array('testdate1' => $data[0], 'testdate2' => $data[1])); + $serializedObject = $this->serialize($object); + + $this->assertEquals($this->getContent('array_named_datetimeimmutables_object'), $serializedObject); + + if ($this->hasDeserializer()) { + + if ('xml' == $this->getFormat()) { + $this->markTestSkipped("XML deserialization does not support key-val pairs mode"); + } + /** @var NamedDateTimeArraysObject $deserializedObject */ + $deserializedObject = $this->deserialize($this->getContent('array_named_datetimeimmutables_object'), 'Jms\Serializer\Tests\Fixtures\NamedDateTimeImmutableArraysObject'); + + /** deserialized object has a default timezone set depending on user's timezone settings. That's why we manually set the UTC timezone on the DateTime objects. */ + foreach ($deserializedObject->getNamedArrayWithFormattedDate() as $dateTime) { + $dateTime->setTimezone(new \DateTimeZone('UTC')); + } + + $this->assertEquals($object, $deserializedObject); + } + } + + + public function testArrayMixed() + { + $this->assertEquals($this->getContent('array_mixed'), $this->serialize(array('foo', 1, true, new SimpleObject('foo', 'bar'), array(1, 3, true)))); + } + + /** + * @dataProvider getDateTime + * @group datetime + */ + public function testDateTime($key, $value, $type) + { + $this->assertEquals($this->getContent($key), $this->serialize($value)); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent($key), $type); + + $this->assertTrue(is_object($deserialized)); + $this->assertEquals(get_class($value), get_class($deserialized)); + $this->assertEquals($value->getTimestamp(), $deserialized->getTimestamp()); + } + } + + public function getDateTime() + { + return array( + array('date_time', new \DateTime('2011-08-30 00:00', new \DateTimeZone('UTC')), 'DateTime'), + ); + } + + /** + * @dataProvider getDateTimeImmutable + * @group datetime + */ + public function testDateTimeImmutable($key, $value, $type) + { + $this->assertEquals($this->getContent($key), $this->serialize($value)); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent($key), $type); + + $this->assertTrue(is_object($deserialized)); + $this->assertEquals(get_class($value), get_class($deserialized)); + $this->assertEquals($value->getTimestamp(), $deserialized->getTimestamp()); + } + } + + public function getDateTimeImmutable() + { + return array( + array('date_time_immutable', new \DateTimeImmutable('2011-08-30 00:00', new \DateTimeZone('UTC')), 'DateTimeImmutable'), + ); + } + + public function testTimestamp() + { + $value = new Timestamp(new \DateTime('2016-02-11 00:00:00', new \DateTimeZone('UTC'))); + $this->assertEquals($this->getContent('timestamp'), $this->serialize($value)); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('timestamp'), Timestamp::class); + $this->assertEquals($value, $deserialized); + $this->assertEquals($value->getTimestamp()->getTimestamp(), $deserialized->getTimestamp()->getTimestamp()); + + $deserialized = $this->deserialize($this->getContent('timestamp_prev'), Timestamp::class); + $this->assertEquals($value, $deserialized); + $this->assertEquals($value->getTimestamp()->getTimestamp(), $deserialized->getTimestamp()->getTimestamp()); + } + } + + public function testDateInterval() + { + $duration = new \DateInterval('PT45M'); + + $this->assertEquals($this->getContent('date_interval'), $this->serializer->serialize($duration, $this->getFormat())); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('date_interval'), \DateInterval::class); + $this->assertEquals($duration, $deserialized); + $this->assertEquals($duration->i, $deserialized->i); + } + } + + public function testBlogPost() + { + $post = new BlogPost('This is a nice title.', $author = new Author('Foo Bar'), new \DateTime('2011-07-30 00:00', new \DateTimeZone('UTC')), new Publisher('Bar Foo')); + $post->addComment($comment = new Comment($author, 'foo')); + + $post->addTag($tag1 = New Tag("tag1")); + $post->addTag($tag2 = New Tag("tag2")); + + $this->assertEquals($this->getContent('blog_post'), $this->serialize($post)); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('blog_post'), get_class($post)); + $this->assertEquals('2011-07-30T00:00:00+0000', $this->getField($deserialized, 'createdAt')->format(\DateTime::ISO8601)); + $this->assertAttributeEquals('This is a nice title.', 'title', $deserialized); + $this->assertAttributeSame(false, 'published', $deserialized); + $this->assertAttributeSame(false, 'reviewed', $deserialized); + $this->assertAttributeSame('1edf9bf60a32d89afbb85b2be849e3ceed5f5b10', 'etag', $deserialized); + $this->assertAttributeEquals(new ArrayCollection(array($comment)), 'comments', $deserialized); + $this->assertAttributeEquals(new Sequence(array($comment)), 'comments2', $deserialized); + $this->assertAttributeEquals($author, 'author', $deserialized); + $this->assertAttributeEquals(array($tag1, $tag2), 'tag', $deserialized); + } + } + + public function testDeserializingNull() + { + $objectConstructor = new InitializedBlogPostConstructor(); + $this->serializer = new Serializer($this->factory, $this->handlerRegistry, $objectConstructor, $this->serializationVisitors, $this->deserializationVisitors, $this->dispatcher); + + $post = new BlogPost('This is a nice title.', $author = new Author('Foo Bar'), new \DateTime('2011-07-30 00:00', new \DateTimeZone('UTC')), new Publisher('Bar Foo')); + + $this->setField($post, 'author', null); + $this->setField($post, 'publisher', null); + + $this->assertEquals($this->getContent('blog_post_unauthored'), $this->serialize($post, SerializationContext::create()->setSerializeNull(true))); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('blog_post_unauthored'), get_class($post), DeserializationContext::create()->setSerializeNull(true)); + + $this->assertEquals('2011-07-30T00:00:00+0000', $this->getField($deserialized, 'createdAt')->format(\DateTime::ISO8601)); + $this->assertAttributeEquals('This is a nice title.', 'title', $deserialized); + $this->assertAttributeSame(false, 'published', $deserialized); + $this->assertAttributeSame(false, 'reviewed', $deserialized); + $this->assertAttributeEquals(new ArrayCollection(), 'comments', $deserialized); + $this->assertEquals(null, $this->getField($deserialized, 'author')); + } + } + + public function testExpressionAuthor() + { + $namingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); + + $evaluator = new ExpressionEvaluator(new ExpressionLanguage()); + $accessor = new ExpressionAccessorStrategy($evaluator, new DefaultAccessorStrategy()); + + $this->serializationVisitors = new Map(array( + 'json' => new JsonSerializationVisitor($namingStrategy, $accessor), + 'xml' => new XmlSerializationVisitor($namingStrategy, $accessor), + 'yml' => new YamlSerializationVisitor($namingStrategy, $accessor), + )); + + $serializer = new Serializer($this->factory, $this->handlerRegistry, $this->objectConstructor, $this->serializationVisitors, $this->deserializationVisitors, $this->dispatcher, null, $evaluator); + + $author = new AuthorExpressionAccess(123, "Ruud", "Kamphuis"); + $this->assertEquals($this->getContent('author_expression'), $serializer->serialize($author, $this->getFormat())); + } + + /** + * @expectedException \JMS\Serializer\Exception\ExpressionLanguageRequiredException + * @expectedExceptionMessage The property firstName on JMS\Serializer\Tests\Fixtures\AuthorExpressionAccess requires the expression accessor strategy to be enabled. + */ + public function testExpressionAccessorStrategNotEnabled() + { + $author = new AuthorExpressionAccess(123, "Ruud", "Kamphuis"); + $this->assertEquals($this->getContent('author_expression'), $this->serialize($author)); + } + + public function testReadOnly() + { + $author = new AuthorReadOnly(123, 'Ruud Kamphuis'); + $this->assertEquals($this->getContent('readonly'), $this->serialize($author)); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('readonly'), get_class($author)); + $this->assertNull($this->getField($deserialized, 'id')); + $this->assertEquals('Ruud Kamphuis', $this->getField($deserialized, 'name')); + } + } + + public function testReadOnlyClass() + { + $author = new AuthorReadOnlyPerClass(123, 'Ruud Kamphuis'); + $this->assertEquals($this->getContent('readonly'), $this->serialize($author)); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('readonly'), get_class($author)); + $this->assertNull($this->getField($deserialized, 'id')); + $this->assertEquals('Ruud Kamphuis', $this->getField($deserialized, 'name')); + } + } + + public function testPrice() + { + $price = new Price(3); + $this->assertEquals($this->getContent('price'), $this->serialize($price)); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('price'), get_class($price)); + $this->assertEquals(3, $this->getField($deserialized, 'price')); + } + } + + public function testOrder() + { + $order = new Order(new Price(12.34)); + $this->assertEquals($this->getContent('order'), $this->serialize($order)); + + if ($this->hasDeserializer()) { + $this->assertEquals($order, $this->deserialize($this->getContent('order'), get_class($order))); + } + } + + public function testCurrencyAwarePrice() + { + $price = new CurrencyAwarePrice(2.34); + $this->assertEquals($this->getContent('currency_aware_price'), $this->serialize($price)); + + if ($this->hasDeserializer()) { + $this->assertEquals($price, $this->deserialize($this->getContent('currency_aware_price'), get_class($price))); + } + } + + public function testOrderWithCurrencyAwarePrice() + { + $order = new CurrencyAwareOrder(new CurrencyAwarePrice(1.23)); + $this->assertEquals($this->getContent('order_with_currency_aware_price'), $this->serialize($order)); + + if ($this->hasDeserializer()) { + $this->assertEquals($order, $this->deserialize($this->getContent('order_with_currency_aware_price'), get_class($order))); + } + } + + /** + * @group handlerCallback + */ + public function testArticle() + { + $article = new Article(); + $article->element = 'custom'; + $article->value = 'serialized'; + + $result = $this->serialize($article); + $this->assertEquals($this->getContent('article'), $result); + + if ($this->hasDeserializer()) { + $this->assertEquals($article, $this->deserialize($result, 'JMS\Serializer\Tests\Fixtures\Article')); + } + } + + public function testInline() + { + $inline = new InlineParent(); + + $result = $this->serialize($inline); + $this->assertEquals($this->getContent('inline'), $result); + + // no deserialization support + } + + public function testInlineEmptyChild() + { + $inline = new InlineParent(new InlineChildEmpty()); + + $result = $this->serialize($inline); + $this->assertEquals($this->getContent('inline_child_empty'), $result); + + // no deserialization support + } + + public function testEmptyChild() + { + // by empty object + $inline = new ParentDoNotSkipWithEmptyChild(new InlineChildEmpty()); + $this->assertEquals($this->getContent('empty_child'), $this->serialize($inline)); + + // by nulls + $inner = new InlineChild(); + $inner->a = null; + $inner->b = null; + $inline = new ParentDoNotSkipWithEmptyChild($inner); + $this->assertEquals($this->getContent('empty_child'), $this->serialize($inline)); + + // by exclusion strategy + $context = SerializationContext::create()->setGroups(['Default']); + $inline = new ParentDoNotSkipWithEmptyChild(new InlineChildWithGroups()); + $this->assertEquals($this->getContent('empty_child'), $this->serialize($inline, $context)); + } + + public function testSkipEmptyChild() + { + // by empty object + $inline = new ParentSkipWithEmptyChild(new InlineChildEmpty()); + $this->assertEquals($this->getContent('empty_child_skip'), $this->serialize($inline)); + + // by nulls + $inner = new InlineChild(); + $inner->a = null; + $inner->b = null; + $inline = new ParentSkipWithEmptyChild($inner); + $this->assertEquals($this->getContent('empty_child_skip'), $this->serialize($inline)); + + // by exclusion strategy + $context = SerializationContext::create()->setGroups(['Default']); + $inline = new ParentSkipWithEmptyChild(new InlineChildWithGroups()); + $this->assertEquals($this->getContent('empty_child_skip'), $this->serialize($inline, $context)); + } + + /** + * @group log + */ + public function testLog() + { + $this->assertEquals($this->getContent('log'), $this->serialize($log = new Log())); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('log'), get_class($log)); + $this->assertEquals($log, $deserialized); + } + } + + public function testCircularReference() + { + $object = new CircularReferenceParent(); + $this->assertEquals($this->getContent('circular_reference'), $this->serialize($object)); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('circular_reference'), get_class($object)); + + $col = $this->getField($deserialized, 'collection'); + $this->assertEquals(2, count($col)); + $this->assertEquals('child1', $col[0]->getName()); + $this->assertEquals('child2', $col[1]->getName()); + $this->assertSame($deserialized, $col[0]->getParent()); + $this->assertSame($deserialized, $col[1]->getParent()); + + $col = $this->getField($deserialized, 'anotherCollection'); + $this->assertEquals(2, count($col)); + $this->assertEquals('child1', $col[0]->getName()); + $this->assertEquals('child2', $col[1]->getName()); + $this->assertSame($deserialized, $col[0]->getParent()); + $this->assertSame($deserialized, $col[1]->getParent()); + } + } + + public function testLifecycleCallbacks() + { + $object = new ObjectWithLifecycleCallbacks(); + $this->assertEquals($this->getContent('lifecycle_callbacks'), $this->serialize($object)); + $this->assertAttributeSame(null, 'name', $object); + + if ($this->hasDeserializer()) { + $deserialized = $this->deserialize($this->getContent('lifecycle_callbacks'), get_class($object)); + $this->assertEquals($object, $deserialized); + } + } + + public function testFormErrors() + { + $errors = array( + new FormError('This is the form error'), + new FormError('Another error') + ); + + $this->assertEquals($this->getContent('form_errors'), $this->serialize($errors)); + } + + public function testNestedFormErrors() + { + $dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock(); + + $formConfigBuilder = new \Symfony\Component\Form\FormConfigBuilder('foo', null, $dispatcher); + $formConfigBuilder->setCompound(true); + $formConfigBuilder->setDataMapper($this->getMockBuilder('Symfony\Component\Form\DataMapperInterface')->getMock()); + $fooConfig = $formConfigBuilder->getFormConfig(); + + $form = new Form($fooConfig); + $form->addError(new FormError('This is the form error')); + + $formConfigBuilder = new \Symfony\Component\Form\FormConfigBuilder('bar', null, $dispatcher); + $barConfig = $formConfigBuilder->getFormConfig(); + $child = new Form($barConfig); + $child->addError(new FormError('Error of the child form')); + $form->add($child); + + $this->assertEquals($this->getContent('nested_form_errors'), $this->serialize($form)); + } + + public function testFormErrorsWithNonFormComponents() + { + if (!class_exists('Symfony\Component\Form\Extension\Core\Type\SubmitType')) { + $this->markTestSkipped('Not using Symfony Form >= 2.3 with submit type'); + } + + $dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock(); + + $factoryBuilder = new FormFactoryBuilder(); + $factoryBuilder->addType(new \Symfony\Component\Form\Extension\Core\Type\SubmitType); + $factoryBuilder->addType(new \Symfony\Component\Form\Extension\Core\Type\ButtonType); + $factory = $factoryBuilder->getFormFactory(); + + $formConfigBuilder = new \Symfony\Component\Form\FormConfigBuilder('foo', null, $dispatcher); + $formConfigBuilder->setFormFactory($factory); + $formConfigBuilder->setCompound(true); + $formConfigBuilder->setDataMapper($this->getMockBuilder('Symfony\Component\Form\DataMapperInterface')->getMock()); + $fooConfig = $formConfigBuilder->getFormConfig(); + + $form = new Form($fooConfig); + $form->add('save', \Symfony\Component\Form\Extension\Core\Type\SubmitType::class); + + try { + $this->serialize($form); + } catch (\Exception $e) { + $this->assertTrue(false, 'Serialization should not throw an exception'); + } + } + + public function testConstraintViolation() + { + $violation = new ConstraintViolation('Message of violation', 'Message of violation', array(), null, 'foo', null); + + $this->assertEquals($this->getContent('constraint_violation'), $this->serialize($violation)); + } + + public function testConstraintViolationList() + { + $violations = new ConstraintViolationList(); + $violations->add(new ConstraintViolation('Message of violation', 'Message of violation', array(), null, 'foo', null)); + $violations->add(new ConstraintViolation('Message of another violation', 'Message of another violation', array(), null, 'bar', null)); + + $this->assertEquals($this->getContent('constraint_violation_list'), $this->serialize($violations)); + } + + public function testDoctrineProxy() + { + if (!class_exists('Doctrine\ORM\Version')) { + $this->markTestSkipped('Doctrine is not available.'); + } + + $object = new SimpleObjectProxy('foo', 'bar'); + + $this->assertEquals($this->getContent('orm_proxy'), $this->serialize($object)); + } + + public function testInitializedDoctrineProxy() + { + if (!class_exists('Doctrine\ORM\Version')) { + $this->markTestSkipped('Doctrine is not available.'); + } + + $object = new SimpleObjectProxy('foo', 'bar'); + $object->__load(); + + $this->assertEquals($this->getContent('orm_proxy'), $this->serialize($object)); + } + + public function testCustomAccessor() + { + $post = new IndexedCommentsBlogPost(); + + $this->assertEquals($this->getContent('custom_accessor'), $this->serialize($post)); + } + + public function testMixedAccessTypes() + { + $object = new GetSetObject(); + + $this->assertEquals($this->getContent('mixed_access_types'), $this->serialize($object)); + + if ($this->hasDeserializer()) { + $object = $this->deserialize($this->getContent('mixed_access_types'), 'JMS\Serializer\Tests\Fixtures\GetSetObject'); + $this->assertAttributeEquals(1, 'id', $object); + $this->assertAttributeEquals('Johannes', 'name', $object); + $this->assertAttributeEquals(42, 'readOnlyProperty', $object); + } + } + + public function testAccessorOrder() + { + $this->assertEquals($this->getContent('accessor_order_child'), $this->serialize(new AccessorOrderChild())); + $this->assertEquals($this->getContent('accessor_order_parent'), $this->serialize(new AccessorOrderParent())); + $this->assertEquals($this->getContent('accessor_order_methods'), $this->serialize(new AccessorOrderMethod())); + } + + public function testGroups() + { + $groupsObject = new GroupsObject(); + + $this->assertEquals($this->getContent('groups_all'), $this->serializer->serialize($groupsObject, $this->getFormat())); + + $this->assertEquals( + $this->getContent('groups_foo'), + $this->serializer->serialize($groupsObject, $this->getFormat(), SerializationContext::create()->setGroups(array('foo'))) + ); + + $this->assertEquals( + $this->getContent('groups_foobar'), + $this->serializer->serialize($groupsObject, $this->getFormat(), SerializationContext::create()->setGroups(array('foo', 'bar'))) + ); + + $this->assertEquals( + $this->getContent('groups_all'), + $this->serializer->serialize($groupsObject, $this->getFormat()) + ); + + $this->assertEquals( + $this->getContent('groups_default'), + $this->serializer->serialize($groupsObject, $this->getFormat(), SerializationContext::create()->setGroups(array(GroupsExclusionStrategy::DEFAULT_GROUP))) + ); + + $this->assertEquals( + $this->getContent('groups_default'), + $this->serializer->serialize($groupsObject, $this->getFormat(), SerializationContext::create()->setGroups(array(GroupsExclusionStrategy::DEFAULT_GROUP))) + ); + } + + public function testAdvancedGroups() + { + $adrien = new GroupsUser( + 'John', + new GroupsUser( + 'John Manager', + null, + array( + new GroupsUser( + 'John Manager friend 1', + new GroupsUser('John Manager friend 1 manager') + ), + new GroupsUser('John Manager friend 2'), + ) + ), + array( + new GroupsUser( + 'John friend 1', + new GroupsUser('John friend 1 manager') + ), + new GroupsUser( + 'John friend 2', + new GroupsUser('John friend 2 manager') + ) + ) + ); + + $this->assertEquals( + $this->getContent('groups_advanced'), + $this->serializer->serialize( + $adrien, + $this->getFormat(), + SerializationContext::create()->setGroups(array( + GroupsExclusionStrategy::DEFAULT_GROUP, + 'manager_group', + 'friends_group', + + 'manager' => array( + GroupsExclusionStrategy::DEFAULT_GROUP, + 'friends_group', + + 'friends' => array('nickname_group'), + ), + 'friends' => array( + 'manager_group' + ) + )) + ) + ); + } + + /** + * @expectedException JMS\Serializer\Exception\InvalidArgumentException + * @expectedExceptionMessage Invalid group name "foo, bar" on "JMS\Serializer\Tests\Fixtures\InvalidGroupsObject->foo", did you mean to create multiple groups? + */ + public function testInvalidGroupName() + { + $groupsObject = new InvalidGroupsObject(); + + $this->serializer->serialize($groupsObject, $this->getFormat()); + } + + public function testVirtualProperty() + { + $this->assertEquals($this->getContent('virtual_properties'), $this->serialize(new ObjectWithVirtualProperties())); + } + + public function testVirtualVersions() + { + $this->assertEquals( + $this->getContent('virtual_properties_low'), + $this->serialize(new ObjectWithVersionedVirtualProperties(), SerializationContext::create()->setVersion(2)) + ); + + $this->assertEquals( + $this->getContent('virtual_properties_all'), + $this->serialize(new ObjectWithVersionedVirtualProperties(), SerializationContext::create()->setVersion(7)) + ); + + $this->assertEquals( + $this->getContent('virtual_properties_high'), + $this->serialize(new ObjectWithVersionedVirtualProperties(), SerializationContext::create()->setVersion(9)) + ); + } + + public function testCustomHandler() + { + if (!$this->hasDeserializer()) { + return; + } + + $handler = function () { + return new CustomDeserializationObject('customly_unserialized_value'); + }; + + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_DESERIALIZATION, 'CustomDeserializationObject', $this->getFormat(), $handler); + + $serialized = $this->serializer->serialize(new CustomDeserializationObject('sometext'), $this->getFormat()); + $object = $this->serializer->deserialize($serialized, 'CustomDeserializationObject', $this->getFormat()); + $this->assertEquals('customly_unserialized_value', $object->someProperty); + } + + public function testInput() + { + $this->assertEquals($this->getContent('input'), $this->serializer->serialize(new Input(), $this->getFormat())); + } + + public function testObjectWithEmptyHash() + { + $this->assertEquals($this->getContent('hash_empty'), $this->serializer->serialize(new ObjectWithEmptyHash(), $this->getFormat())); + } + + /** + * @group null + */ + public function testSerializeObjectWhenNull() + { + $this->assertEquals( + $this->getContent('object_when_null'), + $this->serialize(new Comment(null, 'foo'), SerializationContext::create()->setSerializeNull(false)) + ); + + $this->assertEquals( + $this->getContent('object_when_null_and_serialized'), + $this->serialize(new Comment(null, 'foo'), SerializationContext::create()->setSerializeNull(true)) + ); + } + + /** + * @group polymorphic + */ + public function testPolymorphicObjectsWithGroup() + { + $context = SerializationContext::create(); + $context->setGroups(array("foo")); + + $this->assertEquals( + $this->getContent('car'), + $this->serialize(new \JMS\Serializer\Tests\Fixtures\DiscriminatorGroup\Car(5), $context) + ); + } + + /** + * @group polymorphic + */ + public function testPolymorphicObjects() + { + $this->assertEquals( + $this->getContent('car'), + $this->serialize(new Car(5)) + ); + + if ($this->hasDeserializer()) { + $this->assertEquals( + new Car(5), + $this->deserialize( + $this->getContent('car'), + 'JMS\Serializer\Tests\Fixtures\Discriminator\Car' + ), + 'Class is resolved correctly when concrete sub-class is used.' + ); + + $this->assertEquals( + new Car(5), + $this->deserialize( + $this->getContent('car'), + 'JMS\Serializer\Tests\Fixtures\Discriminator\Vehicle' + ), + 'Class is resolved correctly when least supertype is used.' + ); + + $this->assertEquals( + new Car(5), + $this->deserialize( + $this->getContent('car_without_type'), + 'JMS\Serializer\Tests\Fixtures\Discriminator\Car' + ), + 'Class is resolved correctly when concrete sub-class is used and no type is defined.' + ); + } + } + + /** + * @group polymorphic + */ + public function testNestedPolymorphicObjects() + { + $garage = new Garage(array(new Car(3), new Moped(1))); + $this->assertEquals( + $this->getContent('garage'), + $this->serialize($garage) + ); + + if ($this->hasDeserializer()) { + $this->assertEquals( + $garage, + $this->deserialize( + $this->getContent('garage'), + 'JMS\Serializer\Tests\Fixtures\Garage' + ) + ); + } + } + + /** + * @group polymorphic + */ + public function testNestedPolymorphicInterfaces() + { + $garage = new VehicleInterfaceGarage(array(new Car(3), new Moped(1))); + $this->assertEquals( + $this->getContent('garage'), + $this->serialize($garage) + ); + + if ($this->hasDeserializer()) { + $this->assertEquals( + $garage, + $this->deserialize( + $this->getContent('garage'), + 'JMS\Serializer\Tests\Fixtures\VehicleInterfaceGarage' + ) + ); + } + } + + /** + * @group polymorphic + * @expectedException LogicException + */ + public function testPolymorphicObjectsInvalidDeserialization() + { + if (!$this->hasDeserializer()) { + throw new \LogicException('No deserializer'); + } + + $this->deserialize( + $this->getContent('car_without_type'), + 'JMS\Serializer\Tests\Fixtures\Discriminator\Vehicle' + ); + } + + public function testDepthExclusionStrategy() + { + $context = SerializationContext::create() + ->addExclusionStrategy(new DepthExclusionStrategy()); + + $data = new Tree( + new Node(array( + new Node(array( + new Node(array( + new Node(array( + new Node(), + )), + )), + )), + )) + ); + + $this->assertEquals($this->getContent('tree'), $this->serializer->serialize($data, $this->getFormat(), $context)); + } + + public function testMaxDepthWithSkippableObject() + { + $data = new Gh236Foo(); + + $context = SerializationContext::create()->enableMaxDepthChecks(); + $serialized = $this->serialize($data, $context); + + $this->assertEquals($this->getContent('maxdepth_skippabe_object'), $serialized); + } + + public function testDeserializingIntoExistingObject() + { + if (!$this->hasDeserializer()) { + return; + } + + $objectConstructor = new InitializedObjectConstructor(new UnserializeObjectConstructor()); + $serializer = new Serializer( + $this->factory, $this->handlerRegistry, $objectConstructor, + $this->serializationVisitors, $this->deserializationVisitors, $this->dispatcher + ); + + $order = new Order(new Price(12)); + + $context = new DeserializationContext(); + $context->attributes->set('target', $order); + + $deseralizedOrder = $serializer->deserialize( + $this->getContent('order'), + get_class($order), + $this->getFormat(), + $context + ); + + $this->assertSame($order, $deseralizedOrder); + $this->assertEquals(new Order(new Price(12.34)), $deseralizedOrder); + $this->assertAttributeInstanceOf('JMS\Serializer\Tests\Fixtures\Price', 'cost', $deseralizedOrder); + } + + public function testObjectWithNullableArrays() + { + $object = new ObjectWithEmptyNullableAndEmptyArrays(); + $this->assertEquals($this->getContent('nullable_arrays'), $this->serializer->serialize($object, $this->getFormat())); + } + + abstract protected function getContent($key); + + abstract protected function getFormat(); + + protected function hasDeserializer() + { + return true; + } + + protected function serialize($data, Context $context = null) + { + return $this->serializer->serialize($data, $this->getFormat(), $context); + } + + protected function deserialize($content, $type, Context $context = null) + { + return $this->serializer->deserialize($content, $type, $this->getFormat(), $context); + } + + protected function setUp() + { + $this->factory = new MetadataFactory(new AnnotationDriver(new AnnotationReader())); + + $this->handlerRegistry = new HandlerRegistry(); + $this->handlerRegistry->registerSubscribingHandler(new ConstraintViolationHandler()); + $this->handlerRegistry->registerSubscribingHandler(new StdClassHandler()); + $this->handlerRegistry->registerSubscribingHandler(new DateHandler()); + $this->handlerRegistry->registerSubscribingHandler(new FormErrorHandler(new IdentityTranslator(new MessageSelector()))); + $this->handlerRegistry->registerSubscribingHandler(new PhpCollectionHandler()); + $this->handlerRegistry->registerSubscribingHandler(new ArrayCollectionHandler()); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, 'AuthorList', $this->getFormat(), + function (VisitorInterface $visitor, $object, array $type, Context $context) { + return $visitor->visitArray(iterator_to_array($object), $type, $context); + } + ); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_DESERIALIZATION, 'AuthorList', $this->getFormat(), + function (VisitorInterface $visitor, $data, $type, Context $context) { + $type = array( + 'name' => 'array', + 'params' => array( + array('name' => 'integer', 'params' => array()), + array('name' => 'JMS\Serializer\Tests\Fixtures\Author', 'params' => array()), + ), + ); + + $elements = $visitor->getNavigator()->accept($data, $type, $context); + $list = new AuthorList(); + foreach ($elements as $author) { + $list->add($author); + } + + return $list; + } + ); + + $this->dispatcher = new EventDispatcher(); + $this->dispatcher->addSubscriber(new DoctrineProxySubscriber()); + + $namingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); + $this->objectConstructor = new UnserializeObjectConstructor(); + $this->serializationVisitors = new Map(array( + 'json' => new JsonSerializationVisitor($namingStrategy), + 'xml' => new XmlSerializationVisitor($namingStrategy), + 'yml' => new YamlSerializationVisitor($namingStrategy), + )); + $this->deserializationVisitors = new Map(array( + 'json' => new JsonDeserializationVisitor($namingStrategy), + 'xml' => new XmlDeserializationVisitor($namingStrategy), + )); + + $this->serializer = new Serializer($this->factory, $this->handlerRegistry, $this->objectConstructor, $this->serializationVisitors, $this->deserializationVisitors, $this->dispatcher); + } + + protected function getField($obj, $name) + { + $ref = new \ReflectionProperty($obj, $name); + $ref->setAccessible(true); + + return $ref->getValue($obj); + } + + private function setField($obj, $name, $value) + { + $ref = new \ReflectionProperty($obj, $name); + $ref->setAccessible(true); + $ref->setValue($obj, $value); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/ContextTest.php b/vendor/jms/serializer/tests/Serializer/ContextTest.php new file mode 100644 index 0000000..da504c5 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/ContextTest.php @@ -0,0 +1,201 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Metadata\PropertyMetadata; +use JMS\Serializer\SerializationContext; +use JMS\Serializer\SerializerBuilder; +use JMS\Serializer\Tests\Fixtures\InlineChild; +use JMS\Serializer\Tests\Fixtures\Node; + +class ContextTest extends \PHPUnit_Framework_TestCase +{ + public function testSerializationContextPathAndDepth() + { + $object = new Node(array( + new Node(), + new Node(array( + new Node() + )), + )); + $objects = array($object, $object->children[0], $object->children[1], $object->children[1]->children[0]); + + $self = $this; + + $exclusionStrategy = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(); + $exclusionStrategy->expects($this->any()) + ->method('shouldSkipClass') + ->with($this->anything(), $this->callback(function (SerializationContext $context) use ($self, $objects) { + $expectedDepth = $expectedPath = null; + + if ($context->getObject() === $objects[0]) { + $expectedDepth = 1; + $expectedPath = 'JMS\Serializer\Tests\Fixtures\Node'; + } elseif ($context->getObject() === $objects[1]) { + $expectedDepth = 2; + $expectedPath = 'JMS\Serializer\Tests\Fixtures\Node -> JMS\Serializer\Tests\Fixtures\Node'; + } elseif ($context->getObject() === $objects[2]) { + $expectedDepth = 2; + $expectedPath = 'JMS\Serializer\Tests\Fixtures\Node -> JMS\Serializer\Tests\Fixtures\Node'; + } elseif ($context->getObject() === $objects[3]) { + $expectedDepth = 3; + $expectedPath = 'JMS\Serializer\Tests\Fixtures\Node -> JMS\Serializer\Tests\Fixtures\Node -> JMS\Serializer\Tests\Fixtures\Node'; + } + + $self->assertEquals($expectedDepth, $context->getDepth(), 'shouldSkipClass depth'); + $self->assertEquals($expectedPath, $context->getPath(), 'shouldSkipClass path'); + + return true; + })) + ->will($this->returnValue(false)); + + $exclusionStrategy->expects($this->any()) + ->method('shouldSkipProperty') + ->with($this->anything(), $this->callback(function (SerializationContext $context) use ($self, $objects) { + $expectedDepth = $expectedPath = null; + + if ($context->getObject() === $objects[0]) { + $expectedDepth = 1; + $expectedPath = 'JMS\Serializer\Tests\Fixtures\Node'; + } elseif ($context->getObject() === $objects[1]) { + $expectedDepth = 2; + $expectedPath = 'JMS\Serializer\Tests\Fixtures\Node -> JMS\Serializer\Tests\Fixtures\Node'; + } elseif ($context->getObject() === $objects[2]) { + $expectedDepth = 2; + $expectedPath = 'JMS\Serializer\Tests\Fixtures\Node -> JMS\Serializer\Tests\Fixtures\Node'; + } elseif ($context->getObject() === $objects[3]) { + $expectedDepth = 3; + $expectedPath = 'JMS\Serializer\Tests\Fixtures\Node -> JMS\Serializer\Tests\Fixtures\Node -> JMS\Serializer\Tests\Fixtures\Node'; + } + + $self->assertEquals($expectedDepth, $context->getDepth(), 'shouldSkipProperty depth'); + $self->assertEquals($expectedPath, $context->getPath(), 'shouldSkipProperty path'); + + return true; + })) + ->will($this->returnValue(false)); + + $serializer = SerializerBuilder::create()->build(); + + $serializer->serialize($object, 'json', SerializationContext::create()->addExclusionStrategy($exclusionStrategy)); + } + + public function testSerializationMetadataStack() + { + $object = new Node(array( + $child = new InlineChild(), + )); + $self = $this; + + $exclusionStrategy = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(); + $exclusionStrategy->expects($this->any()) + ->method('shouldSkipClass') + ->will($this->returnCallback(function (ClassMetadata $classMetadata, SerializationContext $context) use ($self, $object, $child) { + $stack = $context->getMetadataStack(); + + if ($object === $context->getObject()) { + $self->assertEquals(0, $stack->count()); + } + + if ($child === $context->getObject()) { + $self->assertEquals(2, $stack->count()); + $self->assertEquals('JMS\Serializer\Tests\Fixtures\Node', $stack[1]->name); + $self->assertEquals('children', $stack[0]->name); + } + + return false; + })); + + $exclusionStrategy->expects($this->any()) + ->method('shouldSkipProperty') + ->will($this->returnCallback(function (PropertyMetadata $propertyMetadata, SerializationContext $context) use ($self, $object, $child) { + $stack = $context->getMetadataStack(); + + if ('JMS\Serializer\Tests\Fixtures\Node' === $propertyMetadata->class && $propertyMetadata->name === 'children') { + $self->assertEquals(1, $stack->count()); + $self->assertEquals('JMS\Serializer\Tests\Fixtures\Node', $stack[0]->name); + } + + if ('JMS\Serializer\Tests\Fixtures\InlineChild' === $propertyMetadata->class) { + $self->assertEquals(3, $stack->count()); + $self->assertEquals('JMS\Serializer\Tests\Fixtures\Node', $stack[2]->name); + $self->assertEquals('children', $stack[1]->name); + $self->assertEquals('JMS\Serializer\Tests\Fixtures\InlineChild', $stack[0]->name); + } + + return false; + })); + + $serializer = SerializerBuilder::create()->build(); + $serializer->serialize($object, 'json', SerializationContext::create()->addExclusionStrategy($exclusionStrategy)); + } + + public function getScalars() + { + return array( + array("string"), + array(5), + array(5.5), + array(array()) + ); + } + + /** + * @dataProvider getScalars + */ + public function testCanVisitScalars($scalar) + { + $context = SerializationContext::create(); + + $context->startVisiting($scalar); + $this->assertFalse($context->isVisiting($scalar)); + $context->stopVisiting($scalar); + } + + public function testInitialTypeCompatibility() + { + $context = SerializationContext::create(); + $context->setInitialType('foo'); + $this->assertEquals('foo', $context->getInitialType()); + $this->assertEquals('foo', $context->attributes->get('initial_type')->get()); + + $context = SerializationContext::create(); + $context->attributes->set('initial_type', 'foo'); + $this->assertEquals('foo', $context->getInitialType()); + } + + public function testSerializeNullOption() + { + $context = SerializationContext::create(); + $this->assertNull($context->shouldSerializeNull()); + + $context->setSerializeNull(false); + $this->assertFalse($context->shouldSerializeNull()); + + $context->setSerializeNull(true); + $this->assertTrue($context->shouldSerializeNull()); + + $context->setSerializeNull("foo"); + $this->assertTrue($context->shouldSerializeNull()); + + $context->setSerializeNull("0"); + $this->assertFalse($context->shouldSerializeNull()); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/DateIntervalFormatTest.php b/vendor/jms/serializer/tests/Serializer/DateIntervalFormatTest.php new file mode 100644 index 0000000..1a624ac --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/DateIntervalFormatTest.php @@ -0,0 +1,47 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use JMS\Serializer\Handler\DateHandler; + +class DateIntervalFormatTest extends \PHPUnit_Framework_TestCase +{ + public function testFormat() + { + $dtf = new DateHandler(); + + $iso8601DateIntervalString = $dtf->format(new \DateInterval('P0D')); + $this->assertEquals($iso8601DateIntervalString, 'P0DT0S'); + + $iso8601DateIntervalString = $dtf->format(new \DateInterval('P0DT0S')); + $this->assertEquals($iso8601DateIntervalString, 'P0DT0S'); + + $iso8601DateIntervalString = $dtf->format(new \DateInterval('PT45M')); + + $this->assertEquals($iso8601DateIntervalString, 'PT45M'); + + $iso8601DateIntervalString = $dtf->format(new \DateInterval('P2YT45M')); + + $this->assertEquals($iso8601DateIntervalString, 'P2YT45M'); + + $iso8601DateIntervalString = $dtf->format(new \DateInterval('P2Y4DT6H8M16S')); + + $this->assertEquals($iso8601DateIntervalString, 'P2Y4DT6H8M16S'); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/Doctrine/IntegrationTest.php b/vendor/jms/serializer/tests/Serializer/Doctrine/IntegrationTest.php new file mode 100644 index 0000000..93306ce --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/Doctrine/IntegrationTest.php @@ -0,0 +1,203 @@ +serializer->serialize($school, 'json'); + $this->assertEquals('{"type":"school"}', $json); + + $deserialized = $this->serializer->deserialize($json, Organization::class, 'json'); + $this->assertEquals($school, $deserialized); + } + + public function testDiscriminatorIsInferredForGenericBaseClass() + { + $student = new Student(); + $json = $this->serializer->serialize($student, 'json'); + $this->assertEquals('{"type":"student"}', $json); + + $deserialized = $this->serializer->deserialize($json, Person::class, 'json'); + $this->assertEquals($student, $deserialized); + } + + public function testDiscriminatorIsInferredFromDoctrine() + { + /** @var EntityManager $em */ + $em = $this->registry->getManager(); + + $student1 = new Student(); + $student2 = new Student(); + $teacher = new Teacher(); + $class = new Clazz($teacher, array($student1, $student2)); + + $em->persist($student1); + $em->persist($student2); + $em->persist($teacher); + $em->persist($class); + $em->flush(); + $em->clear(); + + $reloadedClass = $em->find(get_class($class), $class->getId()); + $this->assertNotSame($class, $reloadedClass); + + $json = $this->serializer->serialize($reloadedClass, 'json'); + $this->assertEquals('{"id":1,"teacher":{"id":1,"type":"teacher"},"students":[{"id":2,"type":"student"},{"id":3,"type":"student"}]}', $json); + } + + protected function setUp() + { + $connection = $this->createConnection(); + $entityManager = $this->createEntityManager($connection); + + $this->registry = $registry = new SimpleManagerRegistry( + function ($id) use ($connection, $entityManager) { + switch ($id) { + case 'default_connection': + return $connection; + + case 'default_manager': + return $entityManager; + + default: + throw new \RuntimeException(sprintf('Unknown service id "%s".', $id)); + } + } + ); + + $this->serializer = SerializerBuilder::create() + ->setMetadataDriverFactory(new CallbackDriverFactory( + function (array $metadataDirs, Reader $annotationReader) use ($registry) { + $defaultFactory = new DefaultDriverFactory(); + + return new DoctrineTypeDriver($defaultFactory->createDriver($metadataDirs, $annotationReader), $registry); + } + )) + ->build(); + + $this->prepareDatabase(); + } + + private function prepareDatabase() + { + /** @var EntityManager $em */ + $em = $this->registry->getManager(); + + $tool = new SchemaTool($em); + $tool->createSchema($em->getMetadataFactory()->getAllMetadata()); + } + + private function createConnection() + { + $con = DriverManager::getConnection(array( + 'driver' => 'pdo_sqlite', + 'memory' => true, + )); + + return $con; + } + + private function createEntityManager(Connection $con) + { + $cfg = new Configuration(); + $cfg->setMetadataDriverImpl(new AnnotationDriver(new AnnotationReader(), array( + __DIR__ . '/../../Fixtures/Doctrine/SingleTableInheritance', + ))); + $cfg->setAutoGenerateProxyClasses(true); + $cfg->setProxyNamespace('JMS\Serializer\DoctrineProxy'); + $cfg->setProxyDir(sys_get_temp_dir() . '/serializer-test-proxies'); + + $em = EntityManager::create($con, $cfg); + + return $em; + } +} + +class SimpleManagerRegistry extends AbstractManagerRegistry +{ + private $services = array(); + private $serviceCreator; + + public function __construct($serviceCreator, $name = 'anonymous', array $connections = array('default' => 'default_connection'), array $managers = array('default' => 'default_manager'), $defaultConnection = null, $defaultManager = null, $proxyInterface = 'Doctrine\Common\Persistence\Proxy') + { + if (null === $defaultConnection) { + $defaultConnection = key($connections); + } + if (null === $defaultManager) { + $defaultManager = key($managers); + } + + parent::__construct($name, $connections, $managers, $defaultConnection, $defaultManager, $proxyInterface); + + if (!is_callable($serviceCreator)) { + throw new \InvalidArgumentException('$serviceCreator must be a valid callable.'); + } + $this->serviceCreator = $serviceCreator; + } + + public function getService($name) + { + if (isset($this->services[$name])) { + return $this->services[$name]; + } + + return $this->services[$name] = call_user_func($this->serviceCreator, $name); + } + + public function resetService($name) + { + unset($this->services[$name]); + } + + public function getAliasNamespace($alias) + { + foreach (array_keys($this->getManagers()) as $name) { + $manager = $this->getManager($name); + + if ($manager instanceof EntityManager) { + try { + return $manager->getConfiguration()->getEntityNamespace($alias); + } catch (ORMException $ex) { + // Probably mapped by another entity manager, or invalid, just ignore this here. + } + } else { + throw new \LogicException(sprintf('Unsupported manager type "%s".', get_class($manager))); + } + } + + throw new \RuntimeException(sprintf('The namespace alias "%s" is not known to any manager.', $alias)); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/Doctrine/ObjectConstructorTest.php b/vendor/jms/serializer/tests/Serializer/Doctrine/ObjectConstructorTest.php new file mode 100644 index 0000000..d89dafd --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/Doctrine/ObjectConstructorTest.php @@ -0,0 +1,313 @@ +registry->getManager(); + + $author = new Author('John', 5); + $em->persist($author); + $em->flush(); + $em->clear(); + + $fallback = $this->getMockBuilder(ObjectConstructorInterface::class)->getMock(); + + $type = array('name' => Author::class, 'params' => array()); + $class = new ClassMetadata(Author::class); + + $constructor = new DoctrineObjectConstructor($this->registry, $fallback); + $authorFetched = $constructor->construct($this->visitor, $class, ['id' => 5], $type, $this->context); + + $this->assertEquals($author, $authorFetched); + } + + public function testFindManagedEntity() + { + $em = $this->registry->getManager(); + + $author = new Author('John', 5); + $em->persist($author); + $em->flush(); + + $fallback = $this->getMockBuilder(ObjectConstructorInterface::class)->getMock(); + + $type = array('name' => Author::class, 'params' => array()); + $class = new ClassMetadata(Author::class); + + $constructor = new DoctrineObjectConstructor($this->registry, $fallback); + $authorFetched = $constructor->construct($this->visitor, $class, ['id' => 5], $type, $this->context); + + $this->assertSame($author, $authorFetched); + } + + public function testMissingAuthor() + { + $fallback = $this->getMockBuilder(ObjectConstructorInterface::class)->getMock(); + + $type = array('name' => Author::class, 'params' => array()); + $class = new ClassMetadata(Author::class); + + $constructor = new DoctrineObjectConstructor($this->registry, $fallback); + $author = $constructor->construct($this->visitor, $class, ['id' => 5], $type, $this->context); + $this->assertNull($author); + } + + public function testMissingAuthorFallback() + { + $author = new Author('John'); + + $fallback = $this->getMockBuilder(ObjectConstructorInterface::class)->getMock(); + $fallback->expects($this->once())->method('construct')->willReturn($author); + + $type = array('name' => Author::class, 'params' => array()); + $class = new ClassMetadata(Author::class); + + $constructor = new DoctrineObjectConstructor($this->registry, $fallback, DoctrineObjectConstructor::ON_MISSING_FALLBACK); + $authorFetched = $constructor->construct($this->visitor, $class, ['id' => 5], $type, $this->context); + $this->assertSame($author, $authorFetched); + } + + public function testMissingNotManaged() + { + $author = new \JMS\Serializer\Tests\Fixtures\DoctrinePHPCR\Author('foo'); + + $fallback = $this->getMockBuilder(ObjectConstructorInterface::class)->getMock(); + $fallback->expects($this->once())->method('construct')->willReturn($author); + + $type = array('name' => Author::class, 'params' => array()); + $class = new ClassMetadata(Author::class); + + $constructor = new DoctrineObjectConstructor($this->registry, $fallback, DoctrineObjectConstructor::ON_MISSING_FALLBACK); + $authorFetched = $constructor->construct($this->visitor, $class, ['id' => 5], $type, $this->context); + $this->assertSame($author, $authorFetched); + } + + public function testReference() + { + $em = $this->registry->getManager(); + + $author = new Author('John', 5); + $em->persist($author); + $em->flush(); + + $fallback = $this->getMockBuilder(ObjectConstructorInterface::class)->getMock(); + + $type = array('name' => Author::class, 'params' => array()); + $class = new ClassMetadata(Author::class); + + $constructor = new DoctrineObjectConstructor($this->registry, $fallback, DoctrineObjectConstructor::ON_MISSING_FALLBACK); + $authorFetched = $constructor->construct($this->visitor, $class, 5, $type, $this->context); + $this->assertSame($author, $authorFetched); + } + + /** + * @expectedException \JMS\Serializer\Exception\ObjectConstructionException + */ + public function testMissingAuthorException() + { + $fallback = $this->getMockBuilder(ObjectConstructorInterface::class)->getMock(); + + $type = array('name' => Author::class, 'params' => array()); + $class = new ClassMetadata(Author::class); + + $constructor = new DoctrineObjectConstructor($this->registry, $fallback, DoctrineObjectConstructor::ON_MISSING_EXCEPTION); + $constructor->construct($this->visitor, $class, ['id' => 5], $type, $this->context); + } + + /** + * @expectedException \JMS\Serializer\Exception\InvalidArgumentException + */ + public function testInvalidArg() + { + $fallback = $this->getMockBuilder(ObjectConstructorInterface::class)->getMock(); + + $type = array('name' => Author::class, 'params' => array()); + $class = new ClassMetadata(Author::class); + + $constructor = new DoctrineObjectConstructor($this->registry, $fallback, 'foo'); + $constructor->construct($this->visitor, $class, ['id' => 5], $type, $this->context); + } + + public function testMissingData() + { + $author = new Author('John'); + + $fallback = $this->getMockBuilder(ObjectConstructorInterface::class)->getMock(); + $fallback->expects($this->once())->method('construct')->willReturn($author); + + $type = array('name' => Author::class, 'params' => array()); + $class = new ClassMetadata(Author::class); + + $constructor = new DoctrineObjectConstructor($this->registry, $fallback, 'foo'); + $authorFetched = $constructor->construct($this->visitor, $class, ['foo' => 5], $type, $this->context); + $this->assertSame($author, $authorFetched); + } + + protected function setUp() + { + $this->visitor = $this->getMockBuilder('JMS\Serializer\VisitorInterface')->getMock(); + $this->context = $this->getMockBuilder('JMS\Serializer\DeserializationContext')->getMock(); + + $connection = $this->createConnection(); + $entityManager = $this->createEntityManager($connection); + + $this->registry = $registry = new SimpleBaseManagerRegistry( + function ($id) use ($connection, $entityManager) { + switch ($id) { + case 'default_connection': + return $connection; + + case 'default_manager': + return $entityManager; + + default: + throw new \RuntimeException(sprintf('Unknown service id "%s".', $id)); + } + } + ); + + $this->serializer = SerializerBuilder::create() + ->setMetadataDriverFactory(new CallbackDriverFactory( + function (array $metadataDirs, Reader $annotationReader) use ($registry) { + $defaultFactory = new DefaultDriverFactory(); + + return new DoctrineTypeDriver($defaultFactory->createDriver($metadataDirs, $annotationReader), $registry); + } + )) + ->build(); + + $this->prepareDatabase(); + } + + private function prepareDatabase() + { + /** @var EntityManager $em */ + $em = $this->registry->getManager(); + + $tool = new SchemaTool($em); + $tool->createSchema($em->getMetadataFactory()->getAllMetadata()); + } + + private function createConnection() + { + $con = DriverManager::getConnection(array( + 'driver' => 'pdo_sqlite', + 'memory' => true, + )); + + return $con; + } + + private function createEntityManager(Connection $con) + { + $cfg = new Configuration(); + $cfg->setMetadataDriverImpl(new AnnotationDriver(new AnnotationReader(), array( + __DIR__ . '/../../Fixtures/Doctrine', + ))); + $cfg->setAutoGenerateProxyClasses(true); + $cfg->setProxyNamespace('JMS\Serializer\DoctrineProxy'); + $cfg->setProxyDir(sys_get_temp_dir() . '/serializer-test-proxies'); + + $em = EntityManager::create($con, $cfg); + + return $em; + } +} + +\Doctrine\DBAL\Types\Type::addType('Author', 'Doctrine\DBAL\Types\StringType'); +\Doctrine\DBAL\Types\Type::addType('some_custom_type', 'Doctrine\DBAL\Types\StringType'); + +class SimpleBaseManagerRegistry extends AbstractManagerRegistry +{ + private $services = array(); + private $serviceCreator; + + public function __construct($serviceCreator, $name = 'anonymous', array $connections = array('default' => 'default_connection'), array $managers = array('default' => 'default_manager'), $defaultConnection = null, $defaultManager = null, $proxyInterface = 'Doctrine\Common\Persistence\Proxy') + { + if (null === $defaultConnection) { + $defaultConnection = key($connections); + } + if (null === $defaultManager) { + $defaultManager = key($managers); + } + + parent::__construct($name, $connections, $managers, $defaultConnection, $defaultManager, $proxyInterface); + + if (!is_callable($serviceCreator)) { + throw new \InvalidArgumentException('$serviceCreator must be a valid callable.'); + } + $this->serviceCreator = $serviceCreator; + } + + public function getService($name) + { + if (isset($this->services[$name])) { + return $this->services[$name]; + } + + return $this->services[$name] = call_user_func($this->serviceCreator, $name); + } + + public function resetService($name) + { + unset($this->services[$name]); + } + + public function getAliasNamespace($alias) + { + foreach (array_keys($this->getManagers()) as $name) { + $manager = $this->getManager($name); + + if ($manager instanceof EntityManager) { + try { + return $manager->getConfiguration()->getEntityNamespace($alias); + } catch (ORMException $ex) { + // Probably mapped by another entity manager, or invalid, just ignore this here. + } + } else { + throw new \LogicException(sprintf('Unsupported manager type "%s".', get_class($manager))); + } + } + + throw new \RuntimeException(sprintf('The namespace alias "%s" is not known to any manager.', $alias)); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/EventDispatcher/EventDispatcherTest.php b/vendor/jms/serializer/tests/Serializer/EventDispatcher/EventDispatcherTest.php new file mode 100644 index 0000000..ac8b086 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/EventDispatcher/EventDispatcherTest.php @@ -0,0 +1,212 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer\EventDispatcher; + +use JMS\Serializer\EventDispatcher\Event; +use JMS\Serializer\EventDispatcher\EventDispatcher; +use JMS\Serializer\EventDispatcher\EventDispatcherInterface; +use JMS\Serializer\EventDispatcher\EventSubscriberInterface; +use JMS\Serializer\EventDispatcher\ObjectEvent; + +class EventDispatcherTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var EventDispatcher + */ + protected $dispatcher; + protected $event; + + public function testHasListeners() + { + $this->assertFalse($this->dispatcher->hasListeners('foo', 'Foo', 'json')); + $this->dispatcher->addListener('foo', function () { + }); + $this->assertTrue($this->dispatcher->hasListeners('foo', 'Foo', 'json')); + + $this->assertFalse($this->dispatcher->hasListeners('bar', 'Bar', 'json')); + $this->dispatcher->addListener('bar', function () { + }, 'Foo'); + $this->assertFalse($this->dispatcher->hasListeners('bar', 'Bar', 'json')); + $this->dispatcher->addListener('bar', function () { + }, 'Bar', 'xml'); + $this->assertFalse($this->dispatcher->hasListeners('bar', 'Bar', 'json')); + $this->dispatcher->addListener('bar', function () { + }, null, 'json'); + $this->assertTrue($this->dispatcher->hasListeners('bar', 'Baz', 'json')); + $this->assertTrue($this->dispatcher->hasListeners('bar', 'Bar', 'json')); + + $this->assertFalse($this->dispatcher->hasListeners('baz', 'Bar', 'xml')); + $this->dispatcher->addListener('baz', function () { + }, 'Bar'); + $this->assertTrue($this->dispatcher->hasListeners('baz', 'Bar', 'xml')); + $this->assertTrue($this->dispatcher->hasListeners('baz', 'bAr', 'xml')); + } + + public function testDispatch() + { + $a = new MockListener(); + $this->dispatcher->addListener('foo', array($a, 'foo')); + $this->dispatch('bar'); + $a->_verify('Listener is not called for other event.'); + + $b = new MockListener(); + $this->dispatcher->addListener('pre', array($b, 'bar'), 'Bar'); + $this->dispatcher->addListener('pre', array($b, 'foo'), 'Foo'); + $this->dispatcher->addListener('pre', array($b, 'all')); + + $b->bar($this->event, 'pre', 'bar', 'json', $this->dispatcher); + $b->all($this->event, 'pre', 'bar', 'json', $this->dispatcher); + $b->foo($this->event, 'pre', 'foo', 'json', $this->dispatcher); + $b->all($this->event, 'pre', 'foo', 'json', $this->dispatcher); + $b->_replay(); + $this->dispatch('pre', 'Bar'); + $this->dispatch('pre', 'Foo'); + $b->_verify(); + } + + public function testListenerCanStopPropagation() + { + $listener1 = false; + $listener2 = false; + + $this->dispatcher->addListener('pre', function (Event $event) use (&$listener1) { + $event->stopPropagation(); + $listener1 = true; + }); + + $this->dispatcher->addListener('pre', function () use (&$listener2) { + $listener2 = true; + }); + + $this->dispatch('pre'); + + $this->assertTrue($listener1); + $this->assertFalse($listener2); + } + + public function testListenerCanDispatchEvent() + { + $listener1 = false; + $listener2 = false; + $listener3 = false; + + $this->dispatcher->addListener('pre', function (Event $event, $eventName, $loweredClass, $format, EventDispatcherInterface $dispatcher) use (&$listener1) { + $listener1 = true; + + $event = new Event($event->getContext(), $event->getType()); + + $this->assertSame('pre', $eventName); + $this->assertSame('json', $format); + $this->assertSame('foo', $loweredClass); + + $dispatcher->dispatch('post', 'Blah', 'xml', $event); + }); + + $this->dispatcher->addListener('pre', function () use (&$listener2) { + $listener2 = true; + }); + + $this->dispatcher->addListener('post', function (Event $event, $eventName, $loweredClass, $format, EventDispatcherInterface $dispatcher) use (&$listener3) { + $listener3 = true; + + $this->assertSame('post', $eventName); + $this->assertSame('xml', $format); + $this->assertSame('blah', $loweredClass); + }); + + $this->dispatch('pre'); + + $this->assertTrue($listener1); + $this->assertTrue($listener2); + $this->assertTrue($listener3); + } + + public function testAddSubscriber() + { + $subscriber = new MockSubscriber(); + MockSubscriber::$events = array( + array('event' => 'foo.bar_baz', 'format' => 'foo'), + array('event' => 'bar', 'method' => 'bar', 'class' => 'foo'), + ); + + $this->dispatcher->addSubscriber($subscriber); + $this->assertAttributeEquals(array( + 'foo.bar_baz' => array( + array(array($subscriber, 'onfoobarbaz'), null, 'foo'), + ), + 'bar' => array( + array(array($subscriber, 'bar'), 'foo', null), + ), + ), 'listeners', $this->dispatcher); + } + + protected function setUp() + { + $this->dispatcher = $this->createEventDispatcher(); + $this->event = new ObjectEvent($this->getMockBuilder('JMS\Serializer\Context')->getMock(), new \stdClass(), array('name' => 'foo', 'params' => array())); + } + + protected function createEventDispatcher() + { + return new EventDispatcher(); + } + + protected function dispatch($eventName, $class = 'Foo', $format = 'json', Event $event = null) + { + $this->dispatcher->dispatch($eventName, $class, $format, $event ?: $this->event); + } +} + +class MockSubscriber implements EventSubscriberInterface +{ + public static $events = array(); + + public static function getSubscribedEvents() + { + return self::$events; + } +} + +class MockListener +{ + private $expected = array(); + private $actual = array(); + private $wasReplayed = false; + + public function __call($method, array $args = array()) + { + if (!$this->wasReplayed) { + $this->expected[] = array($method, $args); + + return; + } + + $this->actual[] = array($method, $args); + } + + public function _replay() + { + $this->wasReplayed = true; + } + + public function _verify($message = null) + { + \PHPUnit_Framework_Assert::assertSame($this->expected, $this->actual, $message); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherTest.php b/vendor/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherTest.php new file mode 100644 index 0000000..ca39259 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherTest.php @@ -0,0 +1,78 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer\EventDispatcher; + +use JMS\Serializer\EventDispatcher\LazyEventDispatcher; + +abstract class LazyEventDispatcherTest extends EventDispatcherTest +{ + protected $container; + + protected function setUp() + { + $this->container = $this->createContainer(); + + parent::setUp(); + } + + public function testHasListenersWithListenerAsService() + { + $a = new MockListener(); + $this->registerListenerService('a', $a); + + $this->assertFalse($this->dispatcher->hasListeners('foo', 'Foo', 'json')); + $this->dispatcher->addListener('foo', ['a', 'foo']); + $this->assertTrue($this->dispatcher->hasListeners('foo', 'Foo', 'json')); + } + + public function testDispatchWithListenerAsService() + { + $a = new MockListener(); + $this->registerListenerService('a', $a); + + $this->dispatcher->addListener('foo', ['a', 'foo']); + $this->dispatch('bar'); + $a->_verify('Listener is not called for other event.'); + + $b = new MockListener(); + $this->registerListenerService('b', $b); + + $this->dispatcher->addListener('pre', array('b', 'bar'), 'Bar'); + $this->dispatcher->addListener('pre', array('b', 'foo'), 'Foo'); + $this->dispatcher->addListener('pre', array('b', 'all')); + + $b->bar($this->event, 'pre', 'bar', 'json', $this->dispatcher); + $b->all($this->event, 'pre', 'bar', 'json', $this->dispatcher); + $b->foo($this->event, 'pre', 'foo', 'json', $this->dispatcher); + $b->all($this->event, 'pre', 'foo', 'json', $this->dispatcher); + $b->_replay(); + $this->dispatch('pre', 'Bar'); + $this->dispatch('pre', 'Foo'); + $b->_verify(); + } + + protected function createEventDispatcher() + { + return new LazyEventDispatcher($this->container); + } + + abstract protected function createContainer(); + + abstract protected function registerListenerService($serviceId, MockListener $listener); +} diff --git a/vendor/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithPsr11ContainerTest.php b/vendor/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithPsr11ContainerTest.php new file mode 100644 index 0000000..03833b8 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithPsr11ContainerTest.php @@ -0,0 +1,54 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer\EventDispatcher; + +use Psr\Container\ContainerInterface; + +class LazyEventDispatcherWithPsr11ContainerTest extends LazyEventDispatcherTest +{ + protected function createContainer() + { + return new Psr11Container(); + } + + protected function registerListenerService($serviceId, MockListener $listener) + { + $this->container->set($serviceId, $listener); + } +} + +class Psr11Container implements ContainerInterface +{ + private $services; + + public function get($id) + { + return $this->services[$id]; + } + + public function has($id) + { + return isset($this->services[$id]); + } + + public function set($id, $service) + { + $this->services[$id] = $service; + } +} diff --git a/vendor/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithSymfonyContainerTest.php b/vendor/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithSymfonyContainerTest.php new file mode 100644 index 0000000..66cb276 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/EventDispatcher/LazyEventDispatcherWithSymfonyContainerTest.php @@ -0,0 +1,34 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer\EventDispatcher; + +use Symfony\Component\DependencyInjection\Container; + +class LazyEventDispatcherWithSymfonyContainerTest extends LazyEventDispatcherTest +{ + protected function createContainer() + { + return new Container(); + } + + protected function registerListenerService($serviceId, MockListener $listener) + { + $this->container->set($serviceId, $listener); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriberTest.php b/vendor/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriberTest.php new file mode 100644 index 0000000..ebb3796 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/DoctrineProxySubscriberTest.php @@ -0,0 +1,157 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer\EventDispatcher\Subscriber; + +use JMS\Serializer\EventDispatcher\EventDispatcher; +use JMS\Serializer\EventDispatcher\PreSerializeEvent; +use JMS\Serializer\EventDispatcher\Subscriber\DoctrineProxySubscriber; +use JMS\Serializer\Metadata\ClassMetadata; +use JMS\Serializer\Tests\Fixtures\ExclusionStrategy\AlwaysExcludeExclusionStrategy; +use JMS\Serializer\Tests\Fixtures\SimpleObject; +use JMS\Serializer\Tests\Fixtures\SimpleObjectProxy; +use JMS\Serializer\VisitorInterface; +use Metadata\MetadataFactoryInterface; + +class DoctrineProxySubscriberTest extends \PHPUnit_Framework_TestCase +{ + /** @var VisitorInterface */ + private $visitor; + + /** @var DoctrineProxySubscriber */ + private $subscriber; + + /** + * @var EventDispatcher + */ + private $dispatcher; + + public function testRewritesProxyClassName() + { + $event = $this->createEvent($obj = new SimpleObjectProxy('a', 'b'), array('name' => get_class($obj), 'params' => array())); + $this->subscriber->onPreSerialize($event); + + $this->assertEquals(array('name' => get_parent_class($obj), 'params' => array()), $event->getType()); + $this->assertTrue($obj->__isInitialized()); + } + + public function testDoesNotRewriteCustomType() + { + $event = $this->createEvent($obj = new SimpleObjectProxy('a', 'b'), array('name' => 'FakedName', 'params' => array())); + $this->subscriber->onPreSerialize($event); + + $this->assertEquals(array('name' => 'FakedName', 'params' => array()), $event->getType()); + $this->assertTrue($obj->__isInitialized()); + } + + public function testProxyLoadingCanBeSkippedForVirtualTypes() + { + $subscriber = new DoctrineProxySubscriber(true); + + $event = $this->createEvent($obj = new SimpleObjectProxy('a', 'b'), array('name' => 'FakedName', 'params' => array())); + $subscriber->onPreSerialize($event); + + $this->assertEquals(array('name' => 'FakedName', 'params' => array()), $event->getType()); + $this->assertFalse($obj->__isInitialized()); + } + + public function testProxyLoadingCanBeSkippedByExclusionStrategy() + { + $subscriber = new DoctrineProxySubscriber(false, false); + + $factoryMock = $this->getMockBuilder(MetadataFactoryInterface::class)->getMock(); + $factoryMock->method('getMetadataForClass')->willReturn(new ClassMetadata(SimpleObject::class)); + + $this->visitor->method('getExclusionStrategy')->willReturn(new AlwaysExcludeExclusionStrategy()); + $this->visitor->method('getMetadataFactory')->willReturn($factoryMock); + + $event = $this->createEvent($obj = new SimpleObjectProxy('a', 'b'), array('name' => SimpleObjectProxy::class, 'params' => array())); + $subscriber->onPreSerialize($event); + $this->assertFalse($obj->__isInitialized()); + + // virtual types are still initialized + $event = $this->createEvent($obj = new SimpleObjectProxy('a', 'b'), array('name' => 'FakeName', 'params' => array())); + $subscriber->onPreSerialize($event); + $this->assertTrue($obj->__isInitialized()); + } + + public function testEventTriggeredOnRealClassName() + { + $proxy = new SimpleObjectProxy('foo', 'bar'); + + $realClassEventTriggered1 = false; + $this->dispatcher->addListener('serializer.pre_serialize', function () use (&$realClassEventTriggered1) { + $realClassEventTriggered1 = true; + }, get_parent_class($proxy)); + + $event = $this->createEvent($proxy, array('name' => get_class($proxy), 'params' => array())); + $this->dispatcher->dispatch('serializer.pre_serialize', get_class($proxy), 'json', $event); + + $this->assertTrue($realClassEventTriggered1); + } + + public function testListenersCanChangeType() + { + $proxy = new SimpleObjectProxy('foo', 'bar'); + + $realClassEventTriggered1 = false; + $this->dispatcher->addListener('serializer.pre_serialize', function (PreSerializeEvent $event) use (&$realClassEventTriggered1) { + $event->setType('foo', ['bar']); + }, get_parent_class($proxy)); + + $event = $this->createEvent($proxy, array('name' => get_class($proxy), 'params' => array())); + $this->dispatcher->dispatch('serializer.pre_serialize', get_class($proxy), 'json', $event); + + $this->assertSame(['name' => 'foo', 'params' => ['bar']], $event->getType()); + } + + public function testListenersDoNotChangeTypeOnProxiesAndVirtualTypes() + { + $proxy = new SimpleObjectProxy('foo', 'bar'); + + $event = $this->createEvent($proxy, ['name' => 'foo', 'params' => []]); + $this->dispatcher->dispatch('serializer.pre_serialize', get_class($proxy), 'json', $event); + + $this->assertSame(['name' => 'foo', 'params' => []], $event->getType()); + } + + public function testOnPreSerializeMaintainsParams() + { + $object = new SimpleObjectProxy('foo', 'bar'); + $type = ['name' => SimpleObjectProxy::class, 'params' => ['baz']]; + + $event = $this->createEvent($object, $type); + $this->subscriber->onPreSerialize($event); + + $this->assertSame(['name' => SimpleObject::class, 'params' => ['baz']], $event->getType()); + } + + protected function setUp() + { + $this->subscriber = new DoctrineProxySubscriber(); + $this->visitor = $this->getMockBuilder('JMS\Serializer\Context')->getMock(); + + $this->dispatcher = new EventDispatcher(); + $this->dispatcher->addSubscriber($this->subscriber); + } + + private function createEvent($object, array $type) + { + return new PreSerializeEvent($this->visitor, $object, $type); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriberTest.php b/vendor/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriberTest.php new file mode 100644 index 0000000..0dbb227 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorSubscriberTest.php @@ -0,0 +1,108 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer\EventDispatcher\Subscriber; + +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\EventDispatcher\EventDispatcher; +use JMS\Serializer\EventDispatcher\ObjectEvent; +use JMS\Serializer\EventDispatcher\Subscriber\SymfonyValidatorSubscriber; +use JMS\Serializer\SerializerBuilder; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; + +class SymfonyValidatorSubscriberTest extends \PHPUnit_Framework_TestCase +{ + private $validator; + + /** @var SymfonyValidatorSubscriber */ + private $subscriber; + + public function testValidate() + { + $obj = new \stdClass; + + $this->validator->expects($this->once()) + ->method('validate') + ->with($obj, array('foo')) + ->will($this->returnValue(new ConstraintViolationList())); + + $context = DeserializationContext::create()->setAttribute('validation_groups', array('foo')); + + $this->subscriber->onPostDeserialize(new ObjectEvent($context, $obj, array())); + } + + /** + * @expectedException JMS\Serializer\Exception\ValidationFailedException + * @expectedExceptionMessage Validation failed with 1 error(s). + */ + public function testValidateThrowsExceptionWhenListIsNotEmpty() + { + $obj = new \stdClass; + + $this->validator->expects($this->once()) + ->method('validate') + ->with($obj, array('foo')) + ->will($this->returnValue(new ConstraintViolationList(array(new ConstraintViolation('foo', 'foo', array(), 'a', 'b', 'c'))))); + + $context = DeserializationContext::create()->setAttribute('validation_groups', array('foo')); + + $this->subscriber->onPostDeserialize(new ObjectEvent($context, $obj, array())); + } + + public function testValidatorIsNotCalledWhenNoGroupsAreSet() + { + $this->validator->expects($this->never()) + ->method('validate'); + + $this->subscriber->onPostDeserialize(new ObjectEvent(DeserializationContext::create(), new \stdClass, array())); + } + + public function testValidationIsOnlyPerformedOnRootObject() + { + $this->validator->expects($this->once()) + ->method('validate') + ->with($this->isInstanceOf('JMS\Serializer\Tests\Fixtures\AuthorList'), array('Foo')) + ->will($this->returnValue(new ConstraintViolationList())); + + $subscriber = $this->subscriber; + $list = SerializerBuilder::create() + ->configureListeners(function (EventDispatcher $dispatcher) use ($subscriber) { + $dispatcher->addSubscriber($subscriber); + }) + ->build() + ->deserialize( + '{"authors":[{"full_name":"foo"},{"full_name":"bar"}]}', + 'JMS\Serializer\Tests\Fixtures\AuthorList', + 'json', + DeserializationContext::create()->setAttribute('validation_groups', array('Foo')) + ); + + $this->assertCount(2, $list); + } + + protected function setUp() + { + if (!interface_exists('Symfony\Component\Validator\ValidatorInterface')) { + $this->markTestSkipped('Symfony\Component\Validator\ValidatorInterface is not available'); + } + + $this->validator = $this->getMockBuilder('Symfony\Component\Validator\ValidatorInterface')->getMock(); + $this->subscriber = new SymfonyValidatorSubscriber($this->validator); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriberTest.php b/vendor/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriberTest.php new file mode 100644 index 0000000..747e247 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/EventDispatcher/Subscriber/SymfonyValidatorValidatorSubscriberTest.php @@ -0,0 +1,109 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer\EventDispatcher\Subscriber; + +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\EventDispatcher\EventDispatcher; +use JMS\Serializer\EventDispatcher\ObjectEvent; +use JMS\Serializer\EventDispatcher\Subscriber\SymfonyValidatorSubscriber; +use JMS\Serializer\EventDispatcher\Subscriber\SymfonyValidatorValidatorSubscriber; +use JMS\Serializer\SerializerBuilder; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; + +class SymfonyValidatorValidatorSubscriberTest extends \PHPUnit_Framework_TestCase +{ + private $validator; + + /** @var SymfonyValidatorSubscriber */ + private $subscriber; + + public function testValidate() + { + $obj = new \stdClass; + + $this->validator->expects($this->once()) + ->method('validate') + ->with($obj, null, array('foo')) + ->will($this->returnValue(new ConstraintViolationList())); + + $context = DeserializationContext::create()->setAttribute('validation_groups', array('foo')); + + $this->subscriber->onPostDeserialize(new ObjectEvent($context, $obj, array())); + } + + /** + * @expectedException \JMS\Serializer\Exception\ValidationFailedException + * @expectedExceptionMessage Validation failed with 1 error(s). + */ + public function testValidateThrowsExceptionWhenListIsNotEmpty() + { + $obj = new \stdClass; + + $this->validator->expects($this->once()) + ->method('validate') + ->with($obj, null, array('foo')) + ->will($this->returnValue(new ConstraintViolationList(array(new ConstraintViolation('foo', 'foo', array(), 'a', 'b', 'c'))))); + + $context = DeserializationContext::create()->setAttribute('validation_groups', array('foo')); + + $this->subscriber->onPostDeserialize(new ObjectEvent($context, $obj, array())); + } + + public function testValidatorIsNotCalledWhenNoGroupsAreSet() + { + $this->validator->expects($this->never()) + ->method('validate'); + + $this->subscriber->onPostDeserialize(new ObjectEvent(DeserializationContext::create(), new \stdClass, array())); + } + + public function testValidationIsOnlyPerformedOnRootObject() + { + $this->validator->expects($this->once()) + ->method('validate') + ->with($this->isInstanceOf('JMS\Serializer\Tests\Fixtures\AuthorList'), null, array('Foo')) + ->will($this->returnValue(new ConstraintViolationList())); + + $subscriber = $this->subscriber; + $list = SerializerBuilder::create() + ->configureListeners(function (EventDispatcher $dispatcher) use ($subscriber) { + $dispatcher->addSubscriber($subscriber); + }) + ->build() + ->deserialize( + '{"authors":[{"full_name":"foo"},{"full_name":"bar"}]}', + 'JMS\Serializer\Tests\Fixtures\AuthorList', + 'json', + DeserializationContext::create()->setAttribute('validation_groups', array('Foo')) + ); + + $this->assertCount(2, $list); + } + + protected function setUp() + { + if (!interface_exists('Symfony\Component\Validator\Validator\ValidatorInterface')) { + $this->markTestSkipped('Symfony\Component\Validator\Validator\ValidatorInterface ^2.6|^3.0 is not available'); + } + + $this->validator = $this->getMockBuilder('Symfony\Component\Validator\Validator\ValidatorInterface')->getMock(); + $this->subscriber = new SymfonyValidatorValidatorSubscriber($this->validator); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/GraphNavigatorTest.php b/vendor/jms/serializer/tests/Serializer/GraphNavigatorTest.php new file mode 100644 index 0000000..4bd9aa9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/GraphNavigatorTest.php @@ -0,0 +1,177 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use Doctrine\Common\Annotations\AnnotationReader; +use JMS\Serializer\Construction\UnserializeObjectConstructor; +use JMS\Serializer\EventDispatcher\EventDispatcher; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Handler\HandlerRegistry; +use JMS\Serializer\Handler\SubscribingHandlerInterface; +use JMS\Serializer\Metadata\Driver\AnnotationDriver; +use Metadata\MetadataFactory; + +class GraphNavigatorTest extends \PHPUnit_Framework_TestCase +{ + private $metadataFactory; + private $handlerRegistry; + private $objectConstructor; + private $dispatcher; + private $navigator; + private $context; + + /** + * @expectedException JMS\Serializer\Exception\RuntimeException + * @expectedExceptionMessage Resources are not supported in serialized data. + */ + public function testResourceThrowsException() + { + $this->context->expects($this->any()) + ->method('getDirection') + ->will($this->returnValue(GraphNavigator::DIRECTION_SERIALIZATION)); + + $this->navigator->accept(STDIN, null, $this->context); + } + + public function testNavigatorPassesInstanceOnSerialization() + { + $object = new SerializableClass; + $metadata = $this->metadataFactory->getMetadataForClass(get_class($object)); + + $self = $this; + $context = $this->context; + $exclusionStrategy = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(); + $exclusionStrategy->expects($this->once()) + ->method('shouldSkipClass') + ->will($this->returnCallback(function ($passedMetadata, $passedContext) use ($metadata, $context, $self) { + $self->assertSame($metadata, $passedMetadata); + $self->assertSame($context, $passedContext); + })); + $exclusionStrategy->expects($this->once()) + ->method('shouldSkipProperty') + ->will($this->returnCallback(function ($propertyMetadata, $passedContext) use ($context, $metadata, $self) { + $self->assertSame($metadata->propertyMetadata['foo'], $propertyMetadata); + $self->assertSame($context, $passedContext); + })); + + $this->context->expects($this->once()) + ->method('getExclusionStrategy') + ->will($this->returnValue($exclusionStrategy)); + + $this->context->expects($this->any()) + ->method('getDirection') + ->will($this->returnValue(GraphNavigator::DIRECTION_SERIALIZATION)); + + $this->context->expects($this->any()) + ->method('getVisitor') + ->will($this->returnValue($this->getMockBuilder('JMS\Serializer\VisitorInterface')->getMock())); + + $this->navigator = new GraphNavigator($this->metadataFactory, $this->handlerRegistry, $this->objectConstructor, $this->dispatcher); + $this->navigator->accept($object, null, $this->context); + } + + public function testNavigatorPassesNullOnDeserialization() + { + $class = __NAMESPACE__ . '\SerializableClass'; + $metadata = $this->metadataFactory->getMetadataForClass($class); + + $context = $this->context; + $exclusionStrategy = $this->getMockBuilder('JMS\Serializer\Exclusion\ExclusionStrategyInterface')->getMock(); + $exclusionStrategy->expects($this->once()) + ->method('shouldSkipClass') + ->with($metadata, $this->callback(function ($navigatorContext) use ($context) { + return $navigatorContext === $context; + })); + + $exclusionStrategy->expects($this->once()) + ->method('shouldSkipProperty') + ->with($metadata->propertyMetadata['foo'], $this->callback(function ($navigatorContext) use ($context) { + return $navigatorContext === $context; + })); + + $this->context->expects($this->once()) + ->method('getExclusionStrategy') + ->will($this->returnValue($exclusionStrategy)); + + $this->context->expects($this->any()) + ->method('getDirection') + ->will($this->returnValue(GraphNavigator::DIRECTION_DESERIALIZATION)); + + $this->context->expects($this->any()) + ->method('getVisitor') + ->will($this->returnValue($this->getMockBuilder('JMS\Serializer\VisitorInterface')->getMock())); + + $this->navigator = new GraphNavigator($this->metadataFactory, $this->handlerRegistry, $this->objectConstructor, $this->dispatcher); + $this->navigator->accept('random', array('name' => $class, 'params' => array()), $this->context); + } + + public function testNavigatorChangeTypeOnSerialization() + { + $object = new SerializableClass; + $typeName = 'JsonSerializable'; + + $this->dispatcher->addListener('serializer.pre_serialize', function ($event) use ($typeName) { + $type = $event->getType(); + $type['name'] = $typeName; + $event->setType($type['name'], $type['params']); + }); + + $this->handlerRegistry->registerSubscribingHandler(new TestSubscribingHandler()); + + $this->context->expects($this->any()) + ->method('getDirection') + ->will($this->returnValue(GraphNavigator::DIRECTION_SERIALIZATION)); + + $this->context->expects($this->any()) + ->method('getVisitor') + ->will($this->returnValue($this->getMockBuilder('JMS\Serializer\VisitorInterface')->getMock())); + + $this->navigator = new GraphNavigator($this->metadataFactory, $this->handlerRegistry, $this->objectConstructor, $this->dispatcher); + $this->navigator->accept($object, null, $this->context); + } + + protected function setUp() + { + $this->context = $this->getMockBuilder('JMS\Serializer\Context')->getMock(); + $this->dispatcher = new EventDispatcher(); + $this->handlerRegistry = new HandlerRegistry(); + $this->objectConstructor = new UnserializeObjectConstructor(); + + $this->metadataFactory = new MetadataFactory(new AnnotationDriver(new AnnotationReader())); + $this->navigator = new GraphNavigator($this->metadataFactory, $this->handlerRegistry, $this->objectConstructor, $this->dispatcher); + } +} + +class SerializableClass +{ + public $foo = 'bar'; +} + +class TestSubscribingHandler implements SubscribingHandlerInterface +{ + public static function getSubscribingMethods() + { + return array(array( + 'type' => 'JsonSerializable', + 'format' => 'foo', + 'direction' => GraphNavigator::DIRECTION_SERIALIZATION, + 'method' => 'serialize' + )); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/JsonSerializationTest.php b/vendor/jms/serializer/tests/Serializer/JsonSerializationTest.php new file mode 100644 index 0000000..431955a --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/JsonSerializationTest.php @@ -0,0 +1,437 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use JMS\Serializer\Context; +use JMS\Serializer\EventDispatcher\Event; +use JMS\Serializer\EventDispatcher\EventSubscriberInterface; +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\SerializationContext; +use JMS\Serializer\Tests\Fixtures\Author; +use JMS\Serializer\Tests\Fixtures\AuthorList; +use JMS\Serializer\Tests\Fixtures\ObjectWithEmptyArrayAndHash; +use JMS\Serializer\Tests\Fixtures\ObjectWithInlineArray; +use JMS\Serializer\Tests\Fixtures\Tag; +use JMS\Serializer\VisitorInterface; + +class JsonSerializationTest extends BaseSerializationTest +{ + protected function getContent($key) + { + static $outputs = array(); + + if (!$outputs) { + $outputs['readonly'] = '{"id":123,"full_name":"Ruud Kamphuis"}'; + $outputs['string'] = '"foo"'; + $outputs['boolean_true'] = 'true'; + $outputs['boolean_false'] = 'false'; + $outputs['integer'] = '1'; + $outputs['float'] = '4.533'; + $outputs['float_trailing_zero'] = '1'; + $outputs['simple_object'] = '{"foo":"foo","moo":"bar","camel_case":"boo"}'; + $outputs['circular_reference'] = '{"collection":[{"name":"child1"},{"name":"child2"}],"another_collection":[{"name":"child1"},{"name":"child2"}]}'; + $outputs['array_strings'] = '["foo","bar"]'; + $outputs['array_booleans'] = '[true,false]'; + $outputs['array_integers'] = '[1,3,4]'; + $outputs['array_empty'] = '{"array":[]}'; + $outputs['array_floats'] = '[1.34,3,6.42]'; + $outputs['array_objects'] = '[{"foo":"foo","moo":"bar","camel_case":"boo"},{"foo":"baz","moo":"boo","camel_case":"boo"}]'; + $outputs['array_list_and_map_difference'] = '{"list":[1,2,3],"map":{"0":1,"2":2,"3":3}}'; + $outputs['array_mixed'] = '["foo",1,true,{"foo":"foo","moo":"bar","camel_case":"boo"},[1,3,true]]'; + $outputs['array_datetimes_object'] = '{"array_with_default_date_time":["2047-01-01T12:47:47+0000","2016-12-05T00:00:00+0000"],"array_with_formatted_date_time":["01.01.2047 12:47:47","05.12.2016 00:00:00"]}'; + $outputs['array_named_datetimes_object'] = '{"named_array_with_formatted_date":{"testdate1":"01.01.2047 12:47:47","testdate2":"05.12.2016 00:00:00"}}'; + $outputs['array_datetimes_object'] = '{"array_with_default_date_time":["2047-01-01T12:47:47+0000","2016-12-05T00:00:00+0000"],"array_with_formatted_date_time":["01.01.2047 12:47:47","05.12.2016 00:00:00"]}'; + $outputs['array_named_datetimes_object'] = '{"named_array_with_formatted_date":{"testdate1":"01.01.2047 12:47:47","testdate2":"05.12.2016 00:00:00"}}'; + $outputs['array_named_datetimeimmutables_object'] = '{"named_array_with_formatted_date":{"testdate1":"01.01.2047 12:47:47","testdate2":"05.12.2016 00:00:00"}}'; + $outputs['blog_post'] = '{"id":"what_a_nice_id","title":"This is a nice title.","created_at":"2011-07-30T00:00:00+0000","is_published":false,"is_reviewed":false,"etag":"1edf9bf60a32d89afbb85b2be849e3ceed5f5b10","comments":[{"author":{"full_name":"Foo Bar"},"text":"foo"}],"comments2":[{"author":{"full_name":"Foo Bar"},"text":"foo"}],"metadata":{"foo":"bar"},"author":{"full_name":"Foo Bar"},"publisher":{"pub_name":"Bar Foo"},"tag":[{"name":"tag1"},{"name":"tag2"}]}'; + $outputs['blog_post_unauthored'] = '{"id":"what_a_nice_id","title":"This is a nice title.","created_at":"2011-07-30T00:00:00+0000","is_published":false,"is_reviewed":false,"etag":"1edf9bf60a32d89afbb85b2be849e3ceed5f5b10","comments":[],"comments2":[],"metadata":{"foo":"bar"},"author":null,"publisher":null,"tag":null}'; + $outputs['price'] = '{"price":3}'; + $outputs['currency_aware_price'] = '{"currency":"EUR","amount":2.34}'; + $outputs['order'] = '{"cost":{"price":12.34}}'; + $outputs['order_with_currency_aware_price'] = '{"cost":{"currency":"EUR","amount":1.23}}'; + $outputs['log'] = '{"author_list":[{"full_name":"Johannes Schmitt"},{"full_name":"John Doe"}],"comments":[{"author":{"full_name":"Foo Bar"},"text":"foo"},{"author":{"full_name":"Foo Bar"},"text":"bar"},{"author":{"full_name":"Foo Bar"},"text":"baz"}]}'; + $outputs['lifecycle_callbacks'] = '{"name":"Foo Bar"}'; + $outputs['form_errors'] = '["This is the form error","Another error"]'; + $outputs['nested_form_errors'] = '{"errors":["This is the form error"],"children":{"bar":{"errors":["Error of the child form"]}}}'; + $outputs['constraint_violation'] = '{"property_path":"foo","message":"Message of violation"}'; + $outputs['constraint_violation_list'] = '[{"property_path":"foo","message":"Message of violation"},{"property_path":"bar","message":"Message of another violation"}]'; + $outputs['article'] = '{"custom":"serialized"}'; + $outputs['orm_proxy'] = '{"foo":"foo","moo":"bar","camel_case":"proxy-boo"}'; + $outputs['custom_accessor'] = '{"comments":{"Foo":{"comments":[{"author":{"full_name":"Foo"},"text":"foo"},{"author":{"full_name":"Foo"},"text":"bar"}],"count":2}}}'; + $outputs['mixed_access_types'] = '{"id":1,"name":"Johannes","read_only_property":42}'; + $outputs['accessor_order_child'] = '{"c":"c","d":"d","a":"a","b":"b"}'; + $outputs['accessor_order_parent'] = '{"a":"a","b":"b"}'; + $outputs['accessor_order_methods'] = '{"foo":"c","b":"b","a":"a"}'; + $outputs['inline'] = '{"c":"c","a":"a","b":"b","d":"d"}'; + $outputs['inline_child_empty'] = '{"c":"c","d":"d"}'; + $outputs['empty_child'] = '{"c":"c","d":"d","child":{}}'; + $outputs['empty_child_skip'] = '{"c":"c","d":"d"}'; + $outputs['groups_all'] = '{"foo":"foo","foobar":"foobar","bar":"bar","none":"none"}'; + $outputs['groups_foo'] = '{"foo":"foo","foobar":"foobar"}'; + $outputs['groups_foobar'] = '{"foo":"foo","foobar":"foobar","bar":"bar"}'; + $outputs['groups_default'] = '{"bar":"bar","none":"none"}'; + $outputs['groups_advanced'] = '{"name":"John","manager":{"name":"John Manager","friends":[{"nickname":"nickname"},{"nickname":"nickname"}]},"friends":[{"manager":{"name":"John friend 1 manager"}},{"manager":{"name":"John friend 2 manager"}}]}'; + $outputs['virtual_properties'] = '{"exist_field":"value","virtual_value":"value","test":"other-name","typed_virtual_property":1}'; + $outputs['virtual_properties_low'] = '{"low":1}'; + $outputs['virtual_properties_high'] = '{"high":8}'; + $outputs['virtual_properties_all'] = '{"low":1,"high":8}'; + $outputs['nullable'] = '{"foo":"bar","baz":null,"0":null}'; + $outputs['nullable_skip'] = '{"foo":"bar"}'; + $outputs['person_secret_show'] = '{"name":"mike","gender":"f"}'; + $outputs['person_secret_hide'] = '{"name":"mike"}'; + $outputs['null'] = 'null'; + $outputs['simple_object_nullable'] = '{"foo":"foo","moo":"bar","camel_case":"boo","null_property":null}'; + $outputs['input'] = '{"attributes":{"type":"text","name":"firstname","value":"Adrien"}}'; + $outputs['hash_empty'] = '{"hash":{}}'; + $outputs['object_when_null'] = '{"text":"foo"}'; + $outputs['object_when_null_and_serialized'] = '{"author":null,"text":"foo"}'; + $outputs['date_time'] = '"2011-08-30T00:00:00+0000"'; + $outputs['date_time_immutable'] = '"2011-08-30T00:00:00+0000"'; + $outputs['timestamp'] = '{"timestamp":1455148800}'; + $outputs['timestamp_prev'] = '{"timestamp":"1455148800"}'; + $outputs['date_interval'] = '"PT45M"'; + $outputs['car'] = '{"km":5,"type":"car"}'; + $outputs['car_without_type'] = '{"km":5}'; + $outputs['garage'] = '{"vehicles":[{"km":3,"type":"car"},{"km":1,"type":"moped"}]}'; + $outputs['tree'] = '{"tree":{"children":[{"children":[{"children":[],"foo":"bar"}],"foo":"bar"}],"foo":"bar"}}'; + $outputs['nullable_arrays'] = '{"empty_inline":[],"not_empty_inline":["not_empty_inline"],"empty_not_inline":[],"not_empty_not_inline":["not_empty_not_inline"],"empty_not_inline_skip":[],"not_empty_not_inline_skip":["not_empty_not_inline_skip"]}'; + $outputs['object_with_object_property_no_array_to_author'] = '{"foo": "bar", "author": "baz"}'; + $outputs['object_with_object_property'] = '{"foo": "bar", "author": {"full_name": "baz"}}'; + $outputs['author_expression'] = '{"my_first_name":"Ruud","last_name":"Kamphuis","id":123}'; + $outputs['maxdepth_skippabe_object'] = '{"a":{"xxx":"yyy"}}'; + } + + if (!isset($outputs[$key])) { + throw new RuntimeException(sprintf('The key "%s" is not supported.', $key)); + } + + return $outputs[$key]; + } + + public function testSkipEmptyArrayAndHash() + { + $object = new ObjectWithEmptyArrayAndHash(); + + $this->assertEquals('{}', $this->serialize($object)); + } + + public function testAddLinksToOutput() + { + $this->dispatcher->addListener('serializer.post_serialize', function (Event $event) { + $this->assertFalse($event->getVisitor()->hasData('_links')); + }, 'JMS\Serializer\Tests\Fixtures\Author', 'json'); + + $this->dispatcher->addSubscriber(new LinkAddingSubscriber()); + + $this->dispatcher->addListener('serializer.post_serialize', function (Event $event) { + $this->assertTrue($event->getVisitor()->hasData('_links')); + }, 'JMS\Serializer\Tests\Fixtures\Author', 'json'); + + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, 'JMS\Serializer\Tests\Fixtures\AuthorList', 'json', + function (VisitorInterface $visitor, AuthorList $data, array $type, Context $context) { + return $visitor->visitArray(iterator_to_array($data), $type, $context); + } + ); + + $list = new AuthorList(); + $list->add(new Author('foo')); + $list->add(new Author('bar')); + + $this->assertEquals('[{"full_name":"foo","_links":{"details":"http:\/\/foo.bar\/details\/foo","comments":"http:\/\/foo.bar\/details\/foo\/comments"}},{"full_name":"bar","_links":{"details":"http:\/\/foo.bar\/details\/bar","comments":"http:\/\/foo.bar\/details\/bar\/comments"}}]', $this->serialize($list)); + } + + public function testReplaceNameInOutput() + { + $this->dispatcher->addSubscriber(new ReplaceNameSubscriber()); + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, 'JMS\Serializer\Tests\Fixtures\AuthorList', 'json', + function (VisitorInterface $visitor, AuthorList $data, array $type, Context $context) { + return $visitor->visitArray(iterator_to_array($data), $type, $context); + } + ); + + $list = new AuthorList(); + $list->add(new Author('foo')); + $list->add(new Author('bar')); + + $this->assertEquals('[{"full_name":"new name"},{"full_name":"new name"}]', $this->serialize($list)); + } + + /** + * @expectedException RuntimeException + * @expectedExceptionMessage Invalid data "baz"(string), expected "JMS\Serializer\Tests\Fixtures\Author". + */ + public function testDeserializingObjectWithObjectPropertyWithNoArrayToObject() + { + $content = $this->getContent('object_with_object_property_no_array_to_author'); + $object = $this->deserialize($content, 'JMS\Serializer\Tests\Fixtures\ObjectWithObjectProperty'); + $this->assertEquals('bar', $object->getFoo()); + $this->assertInstanceOf('JMS\Serializer\Tests\Fixtures\Author', $object->getAuthor()); + } + + public function testDeserializingObjectWithObjectProperty() + { + $content = $this->getContent('object_with_object_property'); + $object = $this->deserialize($content, 'JMS\Serializer\Tests\Fixtures\ObjectWithObjectProperty'); + $this->assertEquals('bar', $object->getFoo()); + $this->assertInstanceOf('JMS\Serializer\Tests\Fixtures\Author', $object->getAuthor()); + $this->assertEquals('baz', $object->getAuthor()->getName()); + } + + public function getPrimitiveTypes() + { + return array( + array( + 'type' => 'boolean', + 'data' => true, + ), + array( + 'type' => 'boolean', + 'data' => 1, + ), + array( + 'type' => 'integer', + 'data' => 123, + ), + array( + 'type' => 'integer', + 'data' => "123", + ), + array( + 'type' => 'string', + 'data' => "hello", + ), + array( + 'type' => 'string', + 'data' => 123, + ), + array( + 'type' => 'double', + 'data' => 0.1234, + ), + array( + 'type' => 'double', + 'data' => "0.1234", + ), + ); + } + + /** + * @dataProvider getPrimitiveTypes + */ + public function testPrimitiveTypes($primitiveType, $data) + { + $visitor = $this->serializationVisitors->get('json')->get(); + $functionToCall = 'visit' . ucfirst($primitiveType); + $result = $visitor->$functionToCall($data, array(), $this->getMockBuilder('JMS\Serializer\Context')->getMock()); + if ($primitiveType == 'double') { + $primitiveType = 'float'; + } + $this->assertInternalType($primitiveType, $result); + } + + /** + * @group empty-object + */ + public function testSerializeEmptyObject() + { + $this->assertEquals('{}', $this->serialize(new Author(null))); + } + + /** + * @group encoding + * @expectedException RuntimeException + * @expectedExceptionMessage Your data could not be encoded because it contains invalid UTF8 characters. + */ + public function testSerializeWithNonUtf8EncodingWhenDisplayErrorsOff() + { + ini_set('display_errors', 1); + $this->serialize(array('foo' => 'bar', 'bar' => pack("H*", 'c32e'))); + } + + /** + * @group encoding + * @expectedException RuntimeException + * @expectedExceptionMessage Your data could not be encoded because it contains invalid UTF8 characters. + */ + public function testSerializeWithNonUtf8EncodingWhenDisplayErrorsOn() + { + ini_set('display_errors', 0); + $this->serialize(array('foo' => 'bar', 'bar' => pack("H*", 'c32e'))); + } + + public function testSerializeArrayWithEmptyObject() + { + $this->assertEquals('[{}]', $this->serialize(array(new \stdClass()))); + } + + public function testInlineArray() + { + $object = new ObjectWithInlineArray(['a' => 'b', 'c' => 'd']); + + $this->assertEquals('{"a":"b","c":"d"}', $this->serialize($object)); + } + + public function testSerializeRootArrayWithDefinedKeys() + { + $author1 = new Author("Jim"); + $author2 = new Author("Mark"); + + $data = array( + 'jim' => $author1, + 'mark' => $author2, + ); + + $this->assertEquals('{"jim":{"full_name":"Jim"},"mark":{"full_name":"Mark"}}', $this->serializer->serialize($data, $this->getFormat(), SerializationContext::create()->setInitialType('array'))); + $this->assertEquals('[{"full_name":"Jim"},{"full_name":"Mark"}]', $this->serializer->serialize($data, $this->getFormat(), SerializationContext::create()->setInitialType('array'))); + $this->assertEquals('{"jim":{"full_name":"Jim"},"mark":{"full_name":"Mark"}}', $this->serializer->serialize($data, $this->getFormat(), SerializationContext::create()->setInitialType('array'))); + + $data = array( + $author1, + $author2, + ); + $this->assertEquals('[{"full_name":"Jim"},{"full_name":"Mark"}]', $this->serializer->serialize($data, $this->getFormat(), SerializationContext::create()->setInitialType('array'))); + $this->assertEquals('{"0":{"full_name":"Jim"},"1":{"full_name":"Mark"}}', $this->serializer->serialize($data, $this->getFormat(), SerializationContext::create()->setInitialType('array'))); + $this->assertEquals('{"0":{"full_name":"Jim"},"1":{"full_name":"Mark"}}', $this->serializer->serialize($data, $this->getFormat(), SerializationContext::create()->setInitialType('array'))); + } + + public function getTypeHintedArrays() + { + return [ + + [[1, 2], '[1,2]', null], + [['a', 'b'], '["a","b"]', null], + [['a' => 'a', 'b' => 'b'], '{"a":"a","b":"b"}', null], + + [[], '[]', null], + [[], '[]', SerializationContext::create()->setInitialType('array')], + [[], '[]', SerializationContext::create()->setInitialType('array')], + [[], '{}', SerializationContext::create()->setInitialType('array')], + + + [[1, 2], '[1,2]', SerializationContext::create()->setInitialType('array')], + [[1 => 1, 2 => 2], '{"1":1,"2":2}', SerializationContext::create()->setInitialType('array')], + [[1 => 1, 2 => 2], '[1,2]', SerializationContext::create()->setInitialType('array')], + [['a', 'b'], '["a","b"]', SerializationContext::create()->setInitialType('array')], + + [[1 => 'a', 2 => 'b'], '["a","b"]', SerializationContext::create()->setInitialType('array')], + [['a' => 'a', 'b' => 'b'], '["a","b"]', SerializationContext::create()->setInitialType('array')], + + + [[1, 2], '{"0":1,"1":2}', SerializationContext::create()->setInitialType('array')], + [[1, 2], '{"0":1,"1":2}', SerializationContext::create()->setInitialType('array')], + [[1, 2], '{"0":"1","1":"2"}', SerializationContext::create()->setInitialType('array')], + + + [['a', 'b'], '{"0":"a","1":"b"}', SerializationContext::create()->setInitialType('array')], + [['a' => 'a', 'b' => 'b'], '{"a":"a","b":"b"}', SerializationContext::create()->setInitialType('array')], + ]; + } + + /** + * @dataProvider getTypeHintedArrays + * @param array $array + * @param string $expected + * @param SerializationContext|null $context + */ + public function testTypeHintedArraySerialization(array $array, $expected, $context = null) + { + $this->assertEquals($expected, $this->serialize($array, $context)); + } + + public function getTypeHintedArraysAndStdClass() + { + $c1 = new \stdClass(); + $c2 = new \stdClass(); + $c2->foo = 'bar'; + + $tag = new Tag("tag"); + + $c3 = new \stdClass(); + $c3->foo = $tag; + + return [ + + [[$c1], '[{}]', SerializationContext::create()->setInitialType('array')], + + [[$c2], '[{"foo":"bar"}]', SerializationContext::create()->setInitialType('array')], + + [[$tag], '[{"name":"tag"}]', SerializationContext::create()->setInitialType('array')], + + [[$c1], '{"0":{}}', SerializationContext::create()->setInitialType('array')], + [[$c2], '{"0":{"foo":"bar"}}', SerializationContext::create()->setInitialType('array')], + + [[$c3], '{"0":{"foo":{"name":"tag"}}}', SerializationContext::create()->setInitialType('array')], + [[$c3], '[{"foo":{"name":"tag"}}]', SerializationContext::create()->setInitialType('array')], + + [[$tag], '{"0":{"name":"tag"}}', SerializationContext::create()->setInitialType('array')], + ]; + } + + /** + * @dataProvider getTypeHintedArraysAndStdClass + * @param array $array + * @param string $expected + * @param SerializationContext|null $context + */ + public function testTypeHintedArrayAndStdClassSerialization(array $array, $expected, $context = null) + { + $this->assertEquals($expected, $this->serialize($array, $context)); + } + + protected function getFormat() + { + return 'json'; + } +} + +class LinkAddingSubscriber implements EventSubscriberInterface +{ + public function onPostSerialize(Event $event) + { + $author = $event->getObject(); + + $event->getVisitor()->addData('_links', array( + 'details' => 'http://foo.bar/details/' . $author->getName(), + 'comments' => 'http://foo.bar/details/' . $author->getName() . '/comments', + )); + } + + public static function getSubscribedEvents() + { + return array( + array('event' => 'serializer.post_serialize', 'method' => 'onPostSerialize', 'format' => 'json', 'class' => 'JMS\Serializer\Tests\Fixtures\Author'), + ); + } +} + +class ReplaceNameSubscriber implements EventSubscriberInterface +{ + public function onPostSerialize(Event $event) + { + $event->getVisitor()->setData('full_name', 'new name'); + } + + public static function getSubscribedEvents() + { + return array( + array('event' => 'serializer.post_serialize', 'method' => 'onPostSerialize', 'format' => 'json', 'class' => 'JMS\Serializer\Tests\Fixtures\Author'), + ); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/Naming/IdenticalPropertyNamingStrategyTest.php b/vendor/jms/serializer/tests/Serializer/Naming/IdenticalPropertyNamingStrategyTest.php new file mode 100644 index 0000000..b36cb31 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/Naming/IdenticalPropertyNamingStrategyTest.php @@ -0,0 +1,45 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer\Naming; + +use JMS\Serializer\Naming\IdenticalPropertyNamingStrategy; + +class IdenticalPropertyNamingStrategyTest extends \PHPUnit_Framework_TestCase +{ + public function providePropertyNames() + { + return array( + array('createdAt'), + array('my_field'), + array('identical') + ); + } + + /** + * @dataProvider providePropertyNames + */ + public function testTranslateName($propertyName) + { + $mockProperty = $this->getMockBuilder('JMS\Serializer\Metadata\PropertyMetadata')->disableOriginalConstructor()->getMock(); + $mockProperty->name = $propertyName; + + $strategy = new IdenticalPropertyNamingStrategy(); + $this->assertEquals($propertyName, $strategy->translateName($mockProperty)); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/SerializationContextFactoryTest.php b/vendor/jms/serializer/tests/Serializer/SerializationContextFactoryTest.php new file mode 100644 index 0000000..c9f1af0 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/SerializationContextFactoryTest.php @@ -0,0 +1,123 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use Doctrine\Common\Annotations\AnnotationReader; +use JMS\Serializer\Construction\UnserializeObjectConstructor; +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\Handler\HandlerRegistry; +use JMS\Serializer\JsonDeserializationVisitor; +use JMS\Serializer\JsonSerializationVisitor; +use JMS\Serializer\Metadata\Driver\AnnotationDriver; +use JMS\Serializer\Naming\CamelCaseNamingStrategy; +use JMS\Serializer\Naming\SerializedNameAnnotationStrategy; +use JMS\Serializer\SerializationContext; +use JMS\Serializer\Serializer; +use Metadata\MetadataFactory; +use PhpCollection\Map; + +class SerializationContextFactoryTest extends \PHPUnit_Framework_TestCase +{ + protected $serializer; + + public function setUp() + { + parent::setUp(); + + $namingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); + + $this->serializer = new Serializer( + new MetadataFactory(new AnnotationDriver(new AnnotationReader())), + new HandlerRegistry(), + new UnserializeObjectConstructor(), + new Map(array('json' => new JsonSerializationVisitor($namingStrategy))), + new Map(array('json' => new JsonDeserializationVisitor($namingStrategy))) + ); + } + + public function testSerializeUseProvidedSerializationContext() + { + $contextFactoryMock = $this->getMockForAbstractClass('JMS\\Serializer\\ContextFactory\\SerializationContextFactoryInterface'); + $context = new SerializationContext(); + $context->setSerializeNull(true); + + $contextFactoryMock + ->expects($this->once()) + ->method('createSerializationContext') + ->will($this->returnValue($context)); + + $this->serializer->setSerializationContextFactory($contextFactoryMock); + + $result = $this->serializer->serialize(array('value' => null), 'json'); + + $this->assertEquals('{"value":null}', $result); + } + + public function testDeserializeUseProvidedDeserializationContext() + { + $contextFactoryMock = $this->getMockForAbstractClass('JMS\\Serializer\\ContextFactory\\DeserializationContextFactoryInterface'); + $context = new DeserializationContext(); + + $contextFactoryMock + ->expects($this->once()) + ->method('createDeserializationContext') + ->will($this->returnValue($context)); + + $this->serializer->setDeserializationContextFactory($contextFactoryMock); + + $result = $this->serializer->deserialize('{"value":null}', 'array', 'json'); + + $this->assertEquals(array('value' => null), $result); + } + + public function testToArrayUseProvidedSerializationContext() + { + $contextFactoryMock = $this->getMockForAbstractClass('JMS\\Serializer\\ContextFactory\\SerializationContextFactoryInterface'); + $context = new SerializationContext(); + $context->setSerializeNull(true); + + $contextFactoryMock + ->expects($this->once()) + ->method('createSerializationContext') + ->will($this->returnValue($context)); + + $this->serializer->setSerializationContextFactory($contextFactoryMock); + + $result = $this->serializer->toArray(array('value' => null)); + + $this->assertEquals(array('value' => null), $result); + } + + public function testFromArrayUseProvidedDeserializationContext() + { + $contextFactoryMock = $this->getMockForAbstractClass('JMS\\Serializer\\ContextFactory\\DeserializationContextFactoryInterface'); + $context = new DeserializationContext(); + + $contextFactoryMock + ->expects($this->once()) + ->method('createDeserializationContext') + ->will($this->returnValue($context)); + + $this->serializer->setDeserializationContextFactory($contextFactoryMock); + + $result = $this->serializer->fromArray(array('value' => null), 'array'); + + $this->assertEquals(array('value' => null), $result); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/TypeParserTest.php b/vendor/jms/serializer/tests/Serializer/TypeParserTest.php new file mode 100644 index 0000000..1572c25 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/TypeParserTest.php @@ -0,0 +1,99 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use JMS\Serializer\TypeParser; + +class TypeParserTest extends \PHPUnit_Framework_TestCase +{ + private $parser; + + /** + * @dataProvider getTypes + */ + public function testParse($type, $name, array $params = array()) + { + $this->assertEquals(array('name' => $name, 'params' => $params), $this->parser->parse($type)); + } + + public function getTypes() + { + $types = array(); + $types[] = array('string', 'string'); + $types[] = array('array', 'array', array(array('name' => 'Foo', 'params' => array()))); + $types[] = array('array', 'array', array(array('name' => 'Foo', 'params' => array()), array('name' => 'Bar', 'params' => array()))); + $types[] = array('array', 'array', array(array('name' => 'Foo\Bar', 'params' => array()), array('name' => 'Baz\Boo', 'params' => array()))); + $types[] = array('a,e>', 'a', array(array('name' => 'b', 'params' => array(array('name' => 'c', 'params' => array()), array('name' => 'd', 'params' => array()))), array('name' => 'e', 'params' => array()))); + $types[] = array('Foo', 'Foo'); + $types[] = array('Foo\Bar', 'Foo\Bar'); + $types[] = array('Foo<"asdf asdf">', 'Foo', array('asdf asdf')); + + return $types; + } + + /** + * @expectedException \JMS\Parser\SyntaxErrorException + * @expectedExceptionMessage Expected T_CLOSE_BRACKET, but got end of input. + */ + public function testParamTypeMustEndWithBracket() + { + $this->parser->parse('Fooparser->parse(','); + } + + /** + * @expectedException \JMS\Parser\SyntaxErrorException + * @expectedExceptionMessage Expected any of T_NAME or T_STRING, but got ">" of type T_CLOSE_BRACKET at position 4 (0-based). + */ + public function testEmptyParams() + { + $this->parser->parse('Foo<>'); + } + + /** + * @expectedException \JMS\Parser\SyntaxErrorException + * @expectedExceptionMessage Expected any of T_NAME or T_STRING, but got ">" of type T_CLOSE_BRACKET at position 7 (0-based). + */ + public function testNoTrailingComma() + { + $this->parser->parse('Foo'); + } + + /** + * @expectedException \JMS\Parser\SyntaxErrorException + * @expectedExceptionMessage Expected any of T_NAME or T_STRING, but got "\" of type T_NONE at position 4 (0-based). + */ + public function testLeadingBackslash() + { + $this->parser->parse('Foo<\Bar>'); + } + + protected function setUp() + { + $this->parser = new TypeParser(); + } +} diff --git a/vendor/jms/serializer/tests/Serializer/XmlSerializationTest.php b/vendor/jms/serializer/tests/Serializer/XmlSerializationTest.php new file mode 100644 index 0000000..49071f2 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/XmlSerializationTest.php @@ -0,0 +1,581 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use JMS\Serializer\Construction\UnserializeObjectConstructor; +use JMS\Serializer\Context; +use JMS\Serializer\Exception\InvalidArgumentException; +use JMS\Serializer\GraphNavigator; +use JMS\Serializer\Handler\DateHandler; +use JMS\Serializer\Handler\HandlerRegistry; +use JMS\Serializer\Metadata\StaticPropertyMetadata; +use JMS\Serializer\Naming\CamelCaseNamingStrategy; +use JMS\Serializer\Naming\PropertyNamingStrategyInterface; +use JMS\Serializer\Naming\SerializedNameAnnotationStrategy; +use JMS\Serializer\SerializationContext; +use JMS\Serializer\Serializer; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlAttributeDiscriminatorChild; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlAttributeDiscriminatorParent; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNamespaceDiscriminatorChild; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNamespaceDiscriminatorParent; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNotCDataDiscriminatorChild; +use JMS\Serializer\Tests\Fixtures\Discriminator\ObjectWithXmlNotCDataDiscriminatorParent; +use JMS\Serializer\Tests\Fixtures\Input; +use JMS\Serializer\Tests\Fixtures\InvalidUsageOfXmlValue; +use JMS\Serializer\Tests\Fixtures\ObjectWithNamespacesAndList; +use JMS\Serializer\Tests\Fixtures\ObjectWithNamespacesAndNestedList; +use JMS\Serializer\Tests\Fixtures\ObjectWithToString; +use JMS\Serializer\Tests\Fixtures\ObjectWithVirtualXmlProperties; +use JMS\Serializer\Tests\Fixtures\ObjectWithXmlKeyValuePairs; +use JMS\Serializer\Tests\Fixtures\ObjectWithXmlKeyValuePairsWithObjectType; +use JMS\Serializer\Tests\Fixtures\ObjectWithXmlKeyValuePairsWithType; +use JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespaces; +use JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespacesAndObjectProperty; +use JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespacesAndObjectPropertyAuthor; +use JMS\Serializer\Tests\Fixtures\ObjectWithXmlNamespacesAndObjectPropertyVirtual; +use JMS\Serializer\Tests\Fixtures\ObjectWithXmlRootNamespace; +use JMS\Serializer\Tests\Fixtures\Person; +use JMS\Serializer\Tests\Fixtures\PersonCollection; +use JMS\Serializer\Tests\Fixtures\PersonLocation; +use JMS\Serializer\Tests\Fixtures\SimpleClassObject; +use JMS\Serializer\Tests\Fixtures\SimpleObject; +use JMS\Serializer\Tests\Fixtures\SimpleSubClassObject; +use JMS\Serializer\XmlDeserializationVisitor; +use JMS\Serializer\XmlSerializationVisitor; +use PhpCollection\Map; + +class XmlSerializationTest extends BaseSerializationTest +{ + /** + * @expectedException JMS\Serializer\Exception\RuntimeException + */ + public function testInvalidUsageOfXmlValue() + { + $obj = new InvalidUsageOfXmlValue(); + $this->serialize($obj); + } + + + /** + * @dataProvider getXMLBooleans + */ + public function testXMLBooleans($xmlBoolean, $boolean) + { + if ($this->hasDeserializer()) { + $this->assertSame($boolean, $this->deserialize('' . $xmlBoolean . '', 'boolean')); + } + } + + public function getXMLBooleans() + { + return array(array('true', true), array('false', false), array('1', true), array('0', false)); + } + + public function testAccessorSetterDeserialization() + { + /** @var \JMS\Serializer\Tests\Fixtures\AccessorSetter $object */ + $object = $this->deserialize(' + + element + + collectionEntry + + ', + 'JMS\Serializer\Tests\Fixtures\AccessorSetter' + ); + + $this->assertInstanceOf('stdClass', $object->getElement()); + $this->assertInstanceOf('JMS\Serializer\Tests\Fixtures\AccessorSetterElement', $object->getElement()->element); + $this->assertEquals('attribute-different', $object->getElement()->element->getAttribute()); + $this->assertEquals('element-different', $object->getElement()->element->getElement()); + $this->assertEquals(['collectionEntry' => 'collectionEntry'], $object->getCollection()); + } + + public function testPropertyIsObjectWithAttributeAndValue() + { + $personCollection = new PersonLocation; + $person = new Person; + $person->name = 'Matthias Noback'; + $person->age = 28; + $personCollection->person = $person; + $personCollection->location = 'The Netherlands'; + + $this->assertEquals($this->getContent('person_location'), $this->serialize($personCollection)); + } + + public function testPropertyIsCollectionOfObjectsWithAttributeAndValue() + { + $personCollection = new PersonCollection; + $person = new Person; + $person->name = 'Matthias Noback'; + $person->age = 28; + $personCollection->persons->add($person); + $personCollection->location = 'The Netherlands'; + + $this->assertEquals($this->getContent('person_collection'), $this->serialize($personCollection)); + } + + /** + * @expectedException JMS\Serializer\Exception\InvalidArgumentException + * @expectedExceptionMessage The document type "]>" is not allowed. If it is safe, you may add it to the whitelist configuration. + */ + public function testExternalEntitiesAreDisabledByDefault() + { + $this->deserialize(' + + ]> + + &foo; + ', 'stdClass'); + } + + /** + * @expectedException JMS\Serializer\Exception\InvalidArgumentException + * @expectedExceptionMessage The document type "" is not allowed. If it is safe, you may add it to the whitelist configuration. + */ + public function testDocumentTypesAreNotAllowed() + { + $this->deserialize('', 'stdClass'); + } + + public function testWhitelistedDocumentTypesAreAllowed() + { + $this->deserializationVisitors->get('xml')->get()->setDoctypeWhitelist(array( + '', + ']>')); + + $this->serializer->deserialize(' + + ', 'stdClass', 'xml'); + + $this->serializer->deserialize(' + + ]> + ', 'stdClass', 'xml'); + } + + public function testVirtualAttributes() + { + $this->assertEquals( + $this->getContent('virtual_attributes'), + $this->serialize(new ObjectWithVirtualXmlProperties(), SerializationContext::create()->setGroups(array('attributes'))) + ); + } + + public function testVirtualValues() + { + $this->assertEquals( + $this->getContent('virtual_values'), + $this->serialize(new ObjectWithVirtualXmlProperties(), SerializationContext::create()->setGroups(array('values'))) + ); + } + + public function testVirtualXmlList() + { + $this->assertEquals( + $this->getContent('virtual_properties_list'), + $this->serialize(new ObjectWithVirtualXmlProperties(), SerializationContext::create()->setGroups(array('list'))) + ); + } + + public function testVirtualXmlMap() + { + $this->assertEquals( + $this->getContent('virtual_properties_map'), + $this->serialize(new ObjectWithVirtualXmlProperties(), SerializationContext::create()->setGroups(array('map'))) + ); + } + + public function testUnserializeMissingArray() + { + $xml = ''; + $object = $this->serializer->deserialize($xml, 'JMS\Serializer\Tests\Fixtures\ObjectWithAbsentXmlListNode', 'xml'); + $this->assertEquals($object->absentAndNs, array()); + + $xml = ' + + foo + + '; + $object = $this->serializer->deserialize($xml, 'JMS\Serializer\Tests\Fixtures\ObjectWithAbsentXmlListNode', 'xml'); + $this->assertEquals($object->absentAndNs, array("foo")); + } + + public function testObjectWithNamespacesAndList() + { + $object = new ObjectWithNamespacesAndList(); + $object->name = 'name'; + $object->nameAlternativeB = 'nameB'; + + $object->phones = array('111', '222'); + $object->addresses = array('A' => 'Street 1', 'B' => 'Street 2'); + + $object->phonesAlternativeB = array('555', '666'); + $object->addressesAlternativeB = array('A' => 'Street 5', 'B' => 'Street 6'); + + $object->phonesAlternativeC = array('777', '888'); + $object->addressesAlternativeC = array('A' => 'Street 7', 'B' => 'Street 8'); + + $object->phonesAlternativeD = array('999', 'AAA'); + $object->addressesAlternativeD = array('A' => 'Street 9', 'B' => 'Street A'); + + $this->assertEquals( + $this->getContent('object_with_namespaces_and_list'), + $this->serialize($object, SerializationContext::create()) + ); + $this->assertEquals( + $object, + $this->deserialize($this->getContent('object_with_namespaces_and_list'), get_class($object)) + ); + } + + public function testObjectWithNamespaceAndNestedList() + { + $object = new ObjectWithNamespacesAndNestedList(); + $personCollection = new PersonCollection(); + $personA = new Person(); + $personA->age = 11; + $personA->name = 'AAA'; + + $personB = new Person(); + $personB->age = 22; + $personB->name = 'BBB'; + + $personCollection->persons->add($personA); + $personCollection->persons->add($personB); + + $object->personCollection = $personCollection; + + $this->assertEquals( + $this->getContent('object_with_namespaces_and_nested_list'), + $this->serialize($object, SerializationContext::create()) + ); + $this->assertEquals( + $object, + $this->deserialize($this->getContent('object_with_namespaces_and_nested_list'), get_class($object)) + ); + } + + public function testArrayKeyValues() + { + $this->assertEquals($this->getContent('array_key_values'), $this->serializer->serialize(new ObjectWithXmlKeyValuePairs(), 'xml')); + } + + public function testDeserializeArrayKeyValues() + { + $xml = $this->getContent('array_key_values_with_type_1'); + $result = $this->serializer->deserialize($xml, ObjectWithXmlKeyValuePairsWithType::class, 'xml'); + + $this->assertInstanceOf(ObjectWithXmlKeyValuePairsWithType::class, $result); + $this->assertEquals(ObjectWithXmlKeyValuePairsWithType::create1(), $result); + + $xml2 = $this->getContent('array_key_values_with_type_2'); + $result2 = $this->serializer->deserialize($xml2, ObjectWithXmlKeyValuePairsWithType::class, 'xml'); + + $this->assertInstanceOf(ObjectWithXmlKeyValuePairsWithType::class, $result2); + $this->assertEquals(ObjectWithXmlKeyValuePairsWithType::create2(), $result2); + } + + public function testDeserializeTypedAndNestedArrayKeyValues() + { + $xml = $this->getContent('array_key_values_with_nested_type'); + $result = $this->serializer->deserialize($xml, ObjectWithXmlKeyValuePairsWithObjectType::class, 'xml'); + + $this->assertInstanceOf(ObjectWithXmlKeyValuePairsWithObjectType::class, $result); + $this->assertEquals(ObjectWithXmlKeyValuePairsWithObjectType::create1(), $result); + } + + /** + * @dataProvider getDateTime + * @group datetime + */ + public function testDateTimeNoCData($key, $value, $type) + { + $handlerRegistry = new HandlerRegistry(); + $handlerRegistry->registerSubscribingHandler(new DateHandler(\DateTime::ISO8601, 'UTC', false)); + $objectConstructor = new UnserializeObjectConstructor(); + + $serializer = new Serializer($this->factory, $handlerRegistry, $objectConstructor, $this->serializationVisitors, $this->deserializationVisitors); + + $this->assertEquals($this->getContent($key . '_no_cdata'), $serializer->serialize($value, $this->getFormat())); + } + + /** + * @dataProvider getDateTimeImmutable + * @group datetime + */ + public function testDateTimeImmutableNoCData($key, $value, $type) + { + $handlerRegistry = new HandlerRegistry(); + $handlerRegistry->registerSubscribingHandler(new DateHandler(\DateTime::ISO8601, 'UTC', false)); + $objectConstructor = new UnserializeObjectConstructor(); + + $serializer = new Serializer($this->factory, $handlerRegistry, $objectConstructor, $this->serializationVisitors, $this->deserializationVisitors); + + $this->assertEquals($this->getContent($key . '_no_cdata'), $serializer->serialize($value, $this->getFormat())); + } + + /** + * @expectedException JMS\Serializer\Exception\RuntimeException + * @expectedExceptionMessage Unsupported value type for XML attribute map. Expected array but got object + */ + public function testXmlAttributeMapWithoutArray() + { + $attributes = new \ArrayObject(array( + 'type' => 'text', + )); + + $this->serializer->serialize(new Input($attributes), $this->getFormat()); + } + + public function testObjectWithOnlyNamespacesAndList() + { + $object = new ObjectWithNamespacesAndList(); + + $object->phones = array(); + $object->addresses = array(); + + $object->phonesAlternativeB = array(); + $object->addressesAlternativeB = array(); + + $object->phonesAlternativeC = array('777', '888'); + $object->addressesAlternativeC = array('A' => 'Street 7', 'B' => 'Street 8'); + + $object->phonesAlternativeD = array(); + $object->addressesAlternativeD = array(); + + $this->assertEquals( + $this->getContent('object_with_only_namespaces_and_list'), + $this->serialize($object, SerializationContext::create()) + ); + + $deserialized = $this->deserialize($this->getContent('object_with_only_namespaces_and_list'), get_class($object)); + $this->assertEquals($object, $deserialized); + } + + public function testDeserializingNull() + { + $this->markTestSkipped('Not supported in XML.'); + } + + public function testDeserializeWithObjectWithToStringMethod() + { + $input = new ObjectWithToString($this->getContent('simple_object')); + + $object = $this->deserialize($input, SimpleObject::class); + + $this->assertInstanceOf(SimpleObject::class, $object); + } + + public function testObjectWithXmlNamespaces() + { + $object = new ObjectWithXmlNamespaces('This is a nice title.', 'Foo Bar', new \DateTime('2011-07-30 00:00', new \DateTimeZone('UTC')), 'en'); + + $serialized = $this->serialize($object); + $this->assertEquals($this->getContent('object_with_xml_namespaces'), $this->serialize($object)); + + $xml = simplexml_load_string($this->serialize($object)); + $xml->registerXPathNamespace('ns1', "http://purl.org/dc/elements/1.1/"); + $xml->registerXPathNamespace('ns2', "http://schemas.google.com/g/2005"); + $xml->registerXPathNamespace('ns3', "http://www.w3.org/2005/Atom"); + + $this->assertEquals('2011-07-30T00:00:00+0000', $this->xpathFirstToString($xml, './@created_at')); + $this->assertEquals('1edf9bf60a32d89afbb85b2be849e3ceed5f5b10', $this->xpathFirstToString($xml, './@ns2:etag')); + $this->assertEquals('en', $this->xpathFirstToString($xml, './@ns1:language')); + $this->assertEquals('This is a nice title.', $this->xpathFirstToString($xml, './ns1:title')); + $this->assertEquals('Foo Bar', $this->xpathFirstToString($xml, './ns3:author')); + + $deserialized = $this->deserialize($this->getContent('object_with_xml_namespacesalias'), get_class($object)); + $this->assertEquals('2011-07-30T00:00:00+0000', $this->getField($deserialized, 'createdAt')->format(\DateTime::ISO8601)); + $this->assertAttributeEquals('This is a nice title.', 'title', $deserialized); + $this->assertAttributeSame('1edf9bf60a32d89afbb85b2be849e3ceed5f5b10', 'etag', $deserialized); + $this->assertAttributeSame('en', 'language', $deserialized); + $this->assertAttributeEquals('Foo Bar', 'author', $deserialized); + + } + + public function testObjectWithXmlNamespacesAndBackReferencedNamespaces() + { + $author = new ObjectWithXmlNamespacesAndObjectPropertyAuthor('mr', 'smith'); + $object = new ObjectWithXmlNamespacesAndObjectProperty('This is a nice title.', $author); + + $serialized = $this->serialize($object); + $this->assertEquals($this->getContent('object_with_xml_namespaces_and_object_property'), $serialized); + } + + public function testObjectWithXmlNamespacesAndBackReferencedNamespacesWithListeners() + { + $author = new ObjectWithXmlNamespacesAndObjectPropertyAuthor('mr', 'smith'); + $object = new ObjectWithXmlNamespacesAndObjectPropertyVirtual('This is a nice title.', new \stdClass()); + + $this->handlerRegistry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, 'ObjectWithXmlNamespacesAndObjectPropertyAuthorVirtual', $this->getFormat(), + function (XmlSerializationVisitor $visitor, $data, $type, Context $context) use ($author) { + $factory = $context->getMetadataFactory(get_class($author)); + $classMetadata = $factory->getMetadataForClass(get_class($author)); + + $metadata = new StaticPropertyMetadata(get_class($author), 'foo', $author); + $metadata->xmlNamespace = $classMetadata->xmlRootNamespace; + $metadata->xmlNamespace = $classMetadata->xmlRootNamespace; + + $visitor->visitProperty($metadata, $author, $context); + } + ); + + $serialized = $this->serialize($object); + $this->assertEquals($this->getContent('object_with_xml_namespaces_and_object_property_virtual'), $serialized); + } + + public function testObjectWithXmlRootNamespace() + { + $object = new ObjectWithXmlRootNamespace('This is a nice title.', 'Foo Bar', new \DateTime('2011-07-30 00:00', new \DateTimeZone('UTC')), 'en'); + $this->assertEquals($this->getContent('object_with_xml_root_namespace'), $this->serialize($object)); + } + + public function testXmlNamespacesInheritance() + { + $object = new SimpleClassObject(); + $object->foo = 'foo'; + $object->bar = 'bar'; + $object->moo = 'moo'; + + $this->assertEquals($this->getContent('simple_class_object'), $this->serialize($object)); + + $childObject = new SimpleSubClassObject(); + $childObject->foo = 'foo'; + $childObject->bar = 'bar'; + $childObject->moo = 'moo'; + $childObject->baz = 'baz'; + $childObject->qux = 'qux'; + + $this->assertEquals($this->getContent('simple_subclass_object'), $this->serialize($childObject)); + } + + public function testWithoutFormatedOutputByXmlSerializationVisitor() + { + $namingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); + $xmlVisitor = new XmlSerializationVisitor($namingStrategy); + $xmlVisitor->setFormatOutput(false); + + $visitors = new Map(array( + 'xml' => new XmlSerializationVisitor($namingStrategy), + )); + + $serializer = new Serializer( + $this->factory, + $this->handlerRegistry, + new UnserializeObjectConstructor(), + $visitors, + $this->deserializationVisitors, + $this->dispatcher + ); + + $object = new SimpleClassObject; + $object->foo = 'foo'; + $object->bar = 'bar'; + $object->moo = 'moo'; + + $stringXml = $serializer->serialize($object, $this->getFormat()); + $this->assertXmlStringEqualsXmlString($this->getContent('simple_class_object_minified'), $stringXml); + } + + public function testDiscriminatorAsXmlAttribute() + { + $xml = $this->serialize(new ObjectWithXmlAttributeDiscriminatorChild()); + $this->assertEquals($this->getContent('xml_discriminator_attribute'), $xml); + $this->assertInstanceOf( + ObjectWithXmlAttributeDiscriminatorChild::class, + $this->deserialize( + $xml, + ObjectWithXmlAttributeDiscriminatorParent::class + ) + ); + } + + public function testDiscriminatorAsNotCData() + { + $xml = $this->serialize(new ObjectWithXmlNotCDataDiscriminatorChild()); + $this->assertEquals($this->getContent('xml_discriminator_not_cdata'), $xml); + $this->assertInstanceOf( + ObjectWithXmlNotCDataDiscriminatorChild::class, + $this->deserialize( + $xml, + ObjectWithXmlNotCDataDiscriminatorParent::class + ) + ); + } + + public function testDiscriminatorWithNamespace() + { + $xml = $this->serialize(new ObjectWithXmlNamespaceDiscriminatorChild()); + $this->assertEquals($this->getContent('xml_discriminator_namespace'), $xml); + + $this->assertInstanceOf( + ObjectWithXmlNamespaceDiscriminatorChild::class, + $this->deserialize( + $xml, + ObjectWithXmlNamespaceDiscriminatorParent::class + ) + ); + } + + /** + * @expectedException \JMS\Serializer\Exception\XmlErrorException + */ + public function testDeserializeEmptyString() + { + $this->deserialize('', 'stdClass'); + } + + public function testEvaluatesToNull() + { + $namingStrategy = $this->getMockBuilder(PropertyNamingStrategyInterface::class)->getMock(); + $visitor = new XmlDeserializationVisitor($namingStrategy); + $xsdNilAsTrueElement = simplexml_load_string(''); + $xsdNilAsOneElement = simplexml_load_string(''); + + $this->assertTrue($visitor->isNull($xsdNilAsTrueElement)); + $this->assertTrue($visitor->isNull($xsdNilAsOneElement)); + $this->assertTrue($visitor->isNull(null)); + } + + private function xpathFirstToString(\SimpleXMLElement $xml, $xpath) + { + $nodes = $xml->xpath($xpath); + return (string)reset($nodes); + } + + /** + * @param string $key + */ + protected function getContent($key) + { + if (!file_exists($file = __DIR__ . '/xml/' . $key . '.xml')) { + throw new InvalidArgumentException(sprintf('The key "%s" is not supported.', $key)); + } + + return file_get_contents($file); + } + + protected function getFormat() + { + return 'xml'; + } +} diff --git a/vendor/jms/serializer/tests/Serializer/YamlSerializationTest.php b/vendor/jms/serializer/tests/Serializer/YamlSerializationTest.php new file mode 100644 index 0000000..e623ffe --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/YamlSerializationTest.php @@ -0,0 +1,124 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Serializer; + +use JMS\Serializer\Exception\RuntimeException; +use JMS\Serializer\SerializationContext; + +class YamlSerializationTest extends BaseSerializationTest +{ + public function testEmptyChild() + { + $this->markTestSkipped('This is not available for the YAML format.'); + } + + public function testSkipEmptyChild() + { + $this->markTestSkipped('This is not available for the YAML format.'); + } + + public function testConstraintViolation() + { + $this->markTestSkipped('This is not available for the YAML format.'); + } + + public function testConstraintViolationList() + { + $this->markTestSkipped('This is not available for the YAML format.'); + } + + public function testFormErrors() + { + $this->markTestSkipped('This is not available for the YAML format.'); + } + + public function testNestedFormErrors() + { + $this->markTestSkipped('This is not available for the YAML format.'); + } + + public function testFormErrorsWithNonFormComponents() + { + $this->markTestSkipped('This is not available for the YAML format.'); + } + + protected function getContent($key) + { + if (!file_exists($file = __DIR__ . '/yml/' . $key . '.yml')) { + throw new RuntimeException(sprintf('The content with key "%s" does not exist.', $key)); + } + + return file_get_contents($file); + } + + public function getTypeHintedArrays() + { + return [ + + [[1, 2], "- 1\n- 2\n", null], + [['a', 'b'], "- a\n- b\n", null], + [['a' => 'a', 'b' => 'b'], "a: a\nb: b\n", null], + + [[], " []\n", null], + [[], " []\n", SerializationContext::create()->setInitialType('array')], + [[], " []\n", SerializationContext::create()->setInitialType('array')], + [[], " {}\n", SerializationContext::create()->setInitialType('array')], + + + [[1, 2], "- 1\n- 2\n", SerializationContext::create()->setInitialType('array')], + [[1 => 1, 2 => 2], "1: 1\n2: 2\n", SerializationContext::create()->setInitialType('array')], + [[1 => 1, 2 => 2], "- 1\n- 2\n", SerializationContext::create()->setInitialType('array')], + [['a', 'b'], "- a\n- b\n", SerializationContext::create()->setInitialType('array')], + + [[1 => 'a', 2 => 'b'], "- a\n- b\n", SerializationContext::create()->setInitialType('array')], + [['a' => 'a', 'b' => 'b'], "- a\n- b\n", SerializationContext::create()->setInitialType('array')], + + + [[1, 2], "0: 1\n1: 2\n", SerializationContext::create()->setInitialType('array')], + [[1, 2], "0: 1\n1: 2\n", SerializationContext::create()->setInitialType('array')], + [[1, 2], "0: 1\n1: 2\n", SerializationContext::create()->setInitialType('array')], + + + [['a', 'b'], "0: a\n1: b\n", SerializationContext::create()->setInitialType('array')], + [['a' => 'a', 'b' => 'b'], "a: a\nb: b\n", SerializationContext::create()->setInitialType('array')], + ]; + } + + /** + * @dataProvider getTypeHintedArrays + * @param array $array + * @param string $expected + * @param SerializationContext|null $context + */ + public function testTypeHintedArraySerialization(array $array, $expected, $context = null) + { + $this->assertEquals($expected, $this->serialize($array, $context)); + } + + + protected function getFormat() + { + return 'yml'; + } + + protected function hasDeserializer() + { + return false; + } +} diff --git a/vendor/jms/serializer/tests/Serializer/xml/accessor_order_child.xml b/vendor/jms/serializer/tests/Serializer/xml/accessor_order_child.xml new file mode 100644 index 0000000..1dc3df9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/accessor_order_child.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/accessor_order_methods.xml b/vendor/jms/serializer/tests/Serializer/xml/accessor_order_methods.xml new file mode 100644 index 0000000..0818c57 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/accessor_order_methods.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/accessor_order_parent.xml b/vendor/jms/serializer/tests/Serializer/xml/accessor_order_parent.xml new file mode 100644 index 0000000..1fe55f5 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/accessor_order_parent.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_booleans.xml b/vendor/jms/serializer/tests/Serializer/xml/array_booleans.xml new file mode 100644 index 0000000..2bce419 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_booleans.xml @@ -0,0 +1,5 @@ + + + true + false + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_datetimes_object.xml b/vendor/jms/serializer/tests/Serializer/xml/array_datetimes_object.xml new file mode 100644 index 0000000..648ccbb --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_datetimes_object.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_floats.xml b/vendor/jms/serializer/tests/Serializer/xml/array_floats.xml new file mode 100644 index 0000000..8a11166 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_floats.xml @@ -0,0 +1,6 @@ + + + 1.34 + 3 + 6.42 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_integers.xml b/vendor/jms/serializer/tests/Serializer/xml/array_integers.xml new file mode 100644 index 0000000..9a9ca15 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_integers.xml @@ -0,0 +1,6 @@ + + + 1 + 3 + 4 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_key_values.xml b/vendor/jms/serializer/tests/Serializer/xml/array_key_values.xml new file mode 100644 index 0000000..91fdfb1 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_key_values.xml @@ -0,0 +1,20 @@ + + + + + 1 + + + + + 1 + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_key_values_with_nested_type.xml b/vendor/jms/serializer/tests/Serializer/xml/array_key_values_with_nested_type.xml new file mode 100644 index 0000000..7c076c5 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_key_values_with_nested_type.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_key_values_with_type_1.xml b/vendor/jms/serializer/tests/Serializer/xml/array_key_values_with_type_1.xml new file mode 100644 index 0000000..7b3bfc9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_key_values_with_type_1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_key_values_with_type_2.xml b/vendor/jms/serializer/tests/Serializer/xml/array_key_values_with_type_2.xml new file mode 100644 index 0000000..a5a518b --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_key_values_with_type_2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_list_and_map_difference.xml b/vendor/jms/serializer/tests/Serializer/xml/array_list_and_map_difference.xml new file mode 100644 index 0000000..557b0ad --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_list_and_map_difference.xml @@ -0,0 +1,13 @@ + + + + 1 + 2 + 3 + + + 1 + 2 + 3 + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_mixed.xml b/vendor/jms/serializer/tests/Serializer/xml/array_mixed.xml new file mode 100644 index 0000000..0a4ffa3 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_mixed.xml @@ -0,0 +1,16 @@ + + + + 1 + true + + + + + + + 1 + 3 + true + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_named_datetimeimmutables_object.xml b/vendor/jms/serializer/tests/Serializer/xml/array_named_datetimeimmutables_object.xml new file mode 100644 index 0000000..40c13c0 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_named_datetimeimmutables_object.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_named_datetimes_object.xml b/vendor/jms/serializer/tests/Serializer/xml/array_named_datetimes_object.xml new file mode 100644 index 0000000..40c13c0 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_named_datetimes_object.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_objects.xml b/vendor/jms/serializer/tests/Serializer/xml/array_objects.xml new file mode 100644 index 0000000..ffaf5a9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_objects.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/array_strings.xml b/vendor/jms/serializer/tests/Serializer/xml/array_strings.xml new file mode 100644 index 0000000..d51496a --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/array_strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/article.xml b/vendor/jms/serializer/tests/Serializer/xml/article.xml new file mode 100644 index 0000000..a769bc0 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/article.xml @@ -0,0 +1,2 @@ + +serialized diff --git a/vendor/jms/serializer/tests/Serializer/xml/author_expression.xml b/vendor/jms/serializer/tests/Serializer/xml/author_expression.xml new file mode 100644 index 0000000..73068ce --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/author_expression.xml @@ -0,0 +1,6 @@ + + + + + 123 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/blog_post.xml b/vendor/jms/serializer/tests/Serializer/xml/blog_post.xml new file mode 100644 index 0000000..a9471dd --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/blog_post.xml @@ -0,0 +1,32 @@ + + + what_a_nice_id + + + + + + + + + + + + + + + + + + + + + + + + tag1 + + + tag2 + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/blog_post_unauthored.xml b/vendor/jms/serializer/tests/Serializer/xml/blog_post_unauthored.xml new file mode 100644 index 0000000..08ed951 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/blog_post_unauthored.xml @@ -0,0 +1,5 @@ + + + <![CDATA[This is a nice title.]]> + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/boolean_false.xml b/vendor/jms/serializer/tests/Serializer/xml/boolean_false.xml new file mode 100644 index 0000000..4eaf315 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/boolean_false.xml @@ -0,0 +1,2 @@ + +false diff --git a/vendor/jms/serializer/tests/Serializer/xml/boolean_true.xml b/vendor/jms/serializer/tests/Serializer/xml/boolean_true.xml new file mode 100644 index 0000000..15bf5c4 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/boolean_true.xml @@ -0,0 +1,2 @@ + +true diff --git a/vendor/jms/serializer/tests/Serializer/xml/car.xml b/vendor/jms/serializer/tests/Serializer/xml/car.xml new file mode 100644 index 0000000..de04116 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/car.xml @@ -0,0 +1,5 @@ + + + 5 + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/car_without_type.xml b/vendor/jms/serializer/tests/Serializer/xml/car_without_type.xml new file mode 100644 index 0000000..6ff670b --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/car_without_type.xml @@ -0,0 +1,4 @@ + + + 5 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/circular_reference.xml b/vendor/jms/serializer/tests/Serializer/xml/circular_reference.xml new file mode 100644 index 0000000..8507eb4 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/circular_reference.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/constraint_violation.xml b/vendor/jms/serializer/tests/Serializer/xml/constraint_violation.xml new file mode 100644 index 0000000..0805786 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/constraint_violation.xml @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/constraint_violation_list.xml b/vendor/jms/serializer/tests/Serializer/xml/constraint_violation_list.xml new file mode 100644 index 0000000..a5715a4 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/constraint_violation_list.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/currency_aware_price.xml b/vendor/jms/serializer/tests/Serializer/xml/currency_aware_price.xml new file mode 100644 index 0000000..e97a756 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/currency_aware_price.xml @@ -0,0 +1,2 @@ + +2.34 diff --git a/vendor/jms/serializer/tests/Serializer/xml/custom_accessor.xml b/vendor/jms/serializer/tests/Serializer/xml/custom_accessor.xml new file mode 100644 index 0000000..614196d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/custom_accessor.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/date_interval.xml b/vendor/jms/serializer/tests/Serializer/xml/date_interval.xml new file mode 100644 index 0000000..a564b6c --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/date_interval.xml @@ -0,0 +1,2 @@ + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/date_time.xml b/vendor/jms/serializer/tests/Serializer/xml/date_time.xml new file mode 100644 index 0000000..00156d4 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/date_time.xml @@ -0,0 +1,2 @@ + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/date_time_immutable.xml b/vendor/jms/serializer/tests/Serializer/xml/date_time_immutable.xml new file mode 100644 index 0000000..00156d4 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/date_time_immutable.xml @@ -0,0 +1,2 @@ + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/date_time_immutable_no_cdata.xml b/vendor/jms/serializer/tests/Serializer/xml/date_time_immutable_no_cdata.xml new file mode 100644 index 0000000..b9c36c2 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/date_time_immutable_no_cdata.xml @@ -0,0 +1,2 @@ + +2011-08-30T00:00:00+0000 diff --git a/vendor/jms/serializer/tests/Serializer/xml/date_time_no_cdata.xml b/vendor/jms/serializer/tests/Serializer/xml/date_time_no_cdata.xml new file mode 100644 index 0000000..b9c36c2 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/date_time_no_cdata.xml @@ -0,0 +1,2 @@ + +2011-08-30T00:00:00+0000 diff --git a/vendor/jms/serializer/tests/Serializer/xml/empty_child.xml b/vendor/jms/serializer/tests/Serializer/xml/empty_child.xml new file mode 100644 index 0000000..c782346 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/empty_child.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/empty_child_skip.xml b/vendor/jms/serializer/tests/Serializer/xml/empty_child_skip.xml new file mode 100644 index 0000000..4ec8b62 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/empty_child_skip.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/float.xml b/vendor/jms/serializer/tests/Serializer/xml/float.xml new file mode 100644 index 0000000..70e02f4 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/float.xml @@ -0,0 +1,2 @@ + +4.533 diff --git a/vendor/jms/serializer/tests/Serializer/xml/float_trailing_zero.xml b/vendor/jms/serializer/tests/Serializer/xml/float_trailing_zero.xml new file mode 100644 index 0000000..5b5b635 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/float_trailing_zero.xml @@ -0,0 +1,2 @@ + +1 diff --git a/vendor/jms/serializer/tests/Serializer/xml/form_errors.xml b/vendor/jms/serializer/tests/Serializer/xml/form_errors.xml new file mode 100644 index 0000000..78c8071 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/form_errors.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/garage.xml b/vendor/jms/serializer/tests/Serializer/xml/garage.xml new file mode 100644 index 0000000..25f486d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/garage.xml @@ -0,0 +1,13 @@ + + + + + 3 + + + + 1 + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/groups_advanced.xml b/vendor/jms/serializer/tests/Serializer/xml/groups_advanced.xml new file mode 100644 index 0000000..d37c7d1 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/groups_advanced.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/groups_all.xml b/vendor/jms/serializer/tests/Serializer/xml/groups_all.xml new file mode 100644 index 0000000..4d8c74f --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/groups_all.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/groups_default.xml b/vendor/jms/serializer/tests/Serializer/xml/groups_default.xml new file mode 100644 index 0000000..2ec803a --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/groups_default.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/groups_foo.xml b/vendor/jms/serializer/tests/Serializer/xml/groups_foo.xml new file mode 100644 index 0000000..93b4a0d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/groups_foo.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/groups_foobar.xml b/vendor/jms/serializer/tests/Serializer/xml/groups_foobar.xml new file mode 100644 index 0000000..d922cb6 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/groups_foobar.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/hash_empty.xml b/vendor/jms/serializer/tests/Serializer/xml/hash_empty.xml new file mode 100644 index 0000000..0ea94e9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/hash_empty.xml @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/inline.xml b/vendor/jms/serializer/tests/Serializer/xml/inline.xml new file mode 100644 index 0000000..bccba87 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/inline.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/inline_child_empty.xml b/vendor/jms/serializer/tests/Serializer/xml/inline_child_empty.xml new file mode 100644 index 0000000..4ec8b62 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/inline_child_empty.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/input.xml b/vendor/jms/serializer/tests/Serializer/xml/input.xml new file mode 100644 index 0000000..3c3f731 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/input.xml @@ -0,0 +1,2 @@ + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/integer.xml b/vendor/jms/serializer/tests/Serializer/xml/integer.xml new file mode 100644 index 0000000..5b5b635 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/integer.xml @@ -0,0 +1,2 @@ + +1 diff --git a/vendor/jms/serializer/tests/Serializer/xml/lifecycle_callbacks.xml b/vendor/jms/serializer/tests/Serializer/xml/lifecycle_callbacks.xml new file mode 100644 index 0000000..fe0501f --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/lifecycle_callbacks.xml @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/log.xml b/vendor/jms/serializer/tests/Serializer/xml/log.xml new file mode 100644 index 0000000..f4de814 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/log.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/maxdepth_skippabe_object.xml b/vendor/jms/serializer/tests/Serializer/xml/maxdepth_skippabe_object.xml new file mode 100644 index 0000000..8d455af --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/maxdepth_skippabe_object.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/mixed_access_types.xml b/vendor/jms/serializer/tests/Serializer/xml/mixed_access_types.xml new file mode 100644 index 0000000..0badb57 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/mixed_access_types.xml @@ -0,0 +1,6 @@ + + + 1 + + 42 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/nested_form_errors.xml b/vendor/jms/serializer/tests/Serializer/xml/nested_form_errors.xml new file mode 100644 index 0000000..75b467d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/nested_form_errors.xml @@ -0,0 +1,11 @@ + +
+ + + + + + + +
+ diff --git a/vendor/jms/serializer/tests/Serializer/xml/null.xml b/vendor/jms/serializer/tests/Serializer/xml/null.xml new file mode 100644 index 0000000..36766ec --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/null.xml @@ -0,0 +1,2 @@ + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/nullable.xml b/vendor/jms/serializer/tests/Serializer/xml/nullable.xml new file mode 100644 index 0000000..edc0833 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/nullable.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/nullable_arrays.xml b/vendor/jms/serializer/tests/Serializer/xml/nullable_arrays.xml new file mode 100644 index 0000000..d8c1685 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/nullable_arrays.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/nullable_skip.xml b/vendor/jms/serializer/tests/Serializer/xml/nullable_skip.xml new file mode 100644 index 0000000..8534731 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/nullable_skip.xml @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_when_null.xml b/vendor/jms/serializer/tests/Serializer/xml/object_when_null.xml new file mode 100644 index 0000000..3132213 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_when_null.xml @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_when_null_and_serialized.xml b/vendor/jms/serializer/tests/Serializer/xml/object_when_null_and_serialized.xml new file mode 100644 index 0000000..bd83a5c --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_when_null_and_serialized.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_with_namespaces_and_list.xml b/vendor/jms/serializer/tests/Serializer/xml/object_with_namespaces_and_list.xml new file mode 100644 index 0000000..a3022bb --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_with_namespaces_and_list.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
+
+
diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_with_namespaces_and_nested_list.xml b/vendor/jms/serializer/tests/Serializer/xml/object_with_namespaces_and_nested_list.xml new file mode 100644 index 0000000..55110fe --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_with_namespaces_and_nested_list.xml @@ -0,0 +1,7 @@ + + + + AAA + BBB + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_with_only_namespaces_and_list.xml b/vendor/jms/serializer/tests/Serializer/xml/object_with_only_namespaces_and_list.xml new file mode 100644 index 0000000..0c0242e --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_with_only_namespaces_and_list.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespaces.xml b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespaces.xml new file mode 100644 index 0000000..6ff33d9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespaces.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespaces_and_object_property.xml b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespaces_and_object_property.xml new file mode 100644 index 0000000..a6eb805 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespaces_and_object_property.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespaces_and_object_property_virtual.xml b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespaces_and_object_property_virtual.xml new file mode 100644 index 0000000..b1dadc1 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespaces_and_object_property_virtual.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespacesalias.xml b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespacesalias.xml new file mode 100644 index 0000000..63a8c74 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_namespacesalias.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_root_namespace.xml b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_root_namespace.xml new file mode 100644 index 0000000..9d5cde4 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/object_with_xml_root_namespace.xml @@ -0,0 +1,5 @@ + + + <![CDATA[This is a nice title.]]> + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/order.xml b/vendor/jms/serializer/tests/Serializer/xml/order.xml new file mode 100644 index 0000000..ca7c70b --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/order.xml @@ -0,0 +1,4 @@ + + + 12.34 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/order_with_currency_aware_price.xml b/vendor/jms/serializer/tests/Serializer/xml/order_with_currency_aware_price.xml new file mode 100644 index 0000000..3ab583f --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/order_with_currency_aware_price.xml @@ -0,0 +1,4 @@ + + + 1.23 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/orm_proxy.xml b/vendor/jms/serializer/tests/Serializer/xml/orm_proxy.xml new file mode 100644 index 0000000..ecd8c13 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/orm_proxy.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/person_collection.xml b/vendor/jms/serializer/tests/Serializer/xml/person_collection.xml new file mode 100644 index 0000000..37654cc --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/person_collection.xml @@ -0,0 +1,5 @@ + + + Matthias Noback + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/person_location.xml b/vendor/jms/serializer/tests/Serializer/xml/person_location.xml new file mode 100644 index 0000000..fa2aa87 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/person_location.xml @@ -0,0 +1,5 @@ + + + Matthias Noback + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/person_secret_hide.xml b/vendor/jms/serializer/tests/Serializer/xml/person_secret_hide.xml new file mode 100644 index 0000000..adf0737 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/person_secret_hide.xml @@ -0,0 +1,4 @@ + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/person_secret_show.xml b/vendor/jms/serializer/tests/Serializer/xml/person_secret_show.xml new file mode 100644 index 0000000..46fe167 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/person_secret_show.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/price.xml b/vendor/jms/serializer/tests/Serializer/xml/price.xml new file mode 100644 index 0000000..2ee2959 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/price.xml @@ -0,0 +1,2 @@ + +3 diff --git a/vendor/jms/serializer/tests/Serializer/xml/readonly.xml b/vendor/jms/serializer/tests/Serializer/xml/readonly.xml new file mode 100644 index 0000000..1c3ea3b --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/readonly.xml @@ -0,0 +1,5 @@ + + + 123 + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/simple_class_object.xml b/vendor/jms/serializer/tests/Serializer/xml/simple_class_object.xml new file mode 100644 index 0000000..d58fc70 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/simple_class_object.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/simple_class_object_minified.xml b/vendor/jms/serializer/tests/Serializer/xml/simple_class_object_minified.xml new file mode 100644 index 0000000..ff4fbf5 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/simple_class_object_minified.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/vendor/jms/serializer/tests/Serializer/xml/simple_object.xml b/vendor/jms/serializer/tests/Serializer/xml/simple_object.xml new file mode 100644 index 0000000..84568d0 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/simple_object.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/simple_object_nullable.xml b/vendor/jms/serializer/tests/Serializer/xml/simple_object_nullable.xml new file mode 100644 index 0000000..32f07c2 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/simple_object_nullable.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/simple_subclass_object.xml b/vendor/jms/serializer/tests/Serializer/xml/simple_subclass_object.xml new file mode 100644 index 0000000..6c0ff7d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/simple_subclass_object.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/string.xml b/vendor/jms/serializer/tests/Serializer/xml/string.xml new file mode 100644 index 0000000..b182540 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/string.xml @@ -0,0 +1,2 @@ + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/timestamp.xml b/vendor/jms/serializer/tests/Serializer/xml/timestamp.xml new file mode 100755 index 0000000..a9bf077 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/timestamp.xml @@ -0,0 +1,4 @@ + + + 1455148800 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/timestamp_prev.xml b/vendor/jms/serializer/tests/Serializer/xml/timestamp_prev.xml new file mode 100755 index 0000000..a9bf077 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/timestamp_prev.xml @@ -0,0 +1,4 @@ + + + 1455148800 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/tree.xml b/vendor/jms/serializer/tests/Serializer/xml/tree.xml new file mode 100644 index 0000000..5388f3d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/tree.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/virtual_attributes.xml b/vendor/jms/serializer/tests/Serializer/xml/virtual_attributes.xml new file mode 100644 index 0000000..0724013 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/virtual_attributes.xml @@ -0,0 +1,2 @@ + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/virtual_properties.xml b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties.xml new file mode 100644 index 0000000..237655e --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties.xml @@ -0,0 +1,7 @@ + + + + + + 1 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_all.xml b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_all.xml new file mode 100644 index 0000000..6341cb4 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_all.xml @@ -0,0 +1,5 @@ + + + 1 + 8 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_high.xml b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_high.xml new file mode 100644 index 0000000..30632e8 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_high.xml @@ -0,0 +1,4 @@ + + + 8 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_list.xml b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_list.xml new file mode 100644 index 0000000..06d9842 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_list.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_low.xml b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_low.xml new file mode 100644 index 0000000..5cce97a --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_low.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_map.xml b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_map.xml new file mode 100644 index 0000000..f851853 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/virtual_properties_map.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/virtual_values.xml b/vendor/jms/serializer/tests/Serializer/xml/virtual_values.xml new file mode 100644 index 0000000..c37e734 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/virtual_values.xml @@ -0,0 +1,2 @@ + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/xml_discriminator_attribute.xml b/vendor/jms/serializer/tests/Serializer/xml/xml_discriminator_attribute.xml new file mode 100644 index 0000000..0deec45 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/xml_discriminator_attribute.xml @@ -0,0 +1,2 @@ + + diff --git a/vendor/jms/serializer/tests/Serializer/xml/xml_discriminator_namespace.xml b/vendor/jms/serializer/tests/Serializer/xml/xml_discriminator_namespace.xml new file mode 100644 index 0000000..d312627 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/xml_discriminator_namespace.xml @@ -0,0 +1,4 @@ + + + child + diff --git a/vendor/jms/serializer/tests/Serializer/xml/xml_discriminator_not_cdata.xml b/vendor/jms/serializer/tests/Serializer/xml/xml_discriminator_not_cdata.xml new file mode 100644 index 0000000..7037d52 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/xml/xml_discriminator_not_cdata.xml @@ -0,0 +1,4 @@ + + + child + diff --git a/vendor/jms/serializer/tests/Serializer/yml/accessor_order_child.yml b/vendor/jms/serializer/tests/Serializer/yml/accessor_order_child.yml new file mode 100644 index 0000000..4e35702 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/accessor_order_child.yml @@ -0,0 +1,4 @@ +c: c +d: d +a: a +b: b diff --git a/vendor/jms/serializer/tests/Serializer/yml/accessor_order_methods.yml b/vendor/jms/serializer/tests/Serializer/yml/accessor_order_methods.yml new file mode 100644 index 0000000..ee822f2 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/accessor_order_methods.yml @@ -0,0 +1,3 @@ +foo: c +b: b +a: a diff --git a/vendor/jms/serializer/tests/Serializer/yml/accessor_order_parent.yml b/vendor/jms/serializer/tests/Serializer/yml/accessor_order_parent.yml new file mode 100644 index 0000000..5422ec2 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/accessor_order_parent.yml @@ -0,0 +1,2 @@ +a: a +b: b diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_booleans.yml b/vendor/jms/serializer/tests/Serializer/yml/array_booleans.yml new file mode 100644 index 0000000..5c72ab2 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_booleans.yml @@ -0,0 +1,2 @@ +- true +- false diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_datetimes_object.yml b/vendor/jms/serializer/tests/Serializer/yml/array_datetimes_object.yml new file mode 100644 index 0000000..c5f131d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_datetimes_object.yml @@ -0,0 +1,6 @@ +array_with_default_date_time: + - '2047-01-01T12:47:47+0000' + - '2016-12-05T00:00:00+0000' +array_with_formatted_date_time: + - '01.01.2047 12:47:47' + - '05.12.2016 00:00:00' diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_empty.yml b/vendor/jms/serializer/tests/Serializer/yml/array_empty.yml new file mode 100644 index 0000000..d4def9a --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_empty.yml @@ -0,0 +1 @@ +array: [] diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_floats.yml b/vendor/jms/serializer/tests/Serializer/yml/array_floats.yml new file mode 100644 index 0000000..8255623 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_floats.yml @@ -0,0 +1,3 @@ +- 1.34 +- 3 +- 6.42 diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_integers.yml b/vendor/jms/serializer/tests/Serializer/yml/array_integers.yml new file mode 100644 index 0000000..06c0e53 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_integers.yml @@ -0,0 +1,3 @@ +- 1 +- 3 +- 4 diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_list_and_map_difference.yml b/vendor/jms/serializer/tests/Serializer/yml/array_list_and_map_difference.yml new file mode 100644 index 0000000..05d6fde --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_list_and_map_difference.yml @@ -0,0 +1,8 @@ +list: + - 1 + - 2 + - 3 +map: + 0: 1 + 2: 2 + 3: 3 diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_mixed.yml b/vendor/jms/serializer/tests/Serializer/yml/array_mixed.yml new file mode 100644 index 0000000..cd9b7f3 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_mixed.yml @@ -0,0 +1,11 @@ +- foo +- 1 +- true +- + foo: foo + moo: bar + camel_case: boo +- + - 1 + - 3 + - true diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_named_datetimeimmutables_object.yml b/vendor/jms/serializer/tests/Serializer/yml/array_named_datetimeimmutables_object.yml new file mode 100644 index 0000000..287bcd9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_named_datetimeimmutables_object.yml @@ -0,0 +1,3 @@ +named_array_with_formatted_date: + testdate1: '01.01.2047 12:47:47' + testdate2: '05.12.2016 00:00:00' diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_named_datetimes_object.yml b/vendor/jms/serializer/tests/Serializer/yml/array_named_datetimes_object.yml new file mode 100644 index 0000000..287bcd9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_named_datetimes_object.yml @@ -0,0 +1,3 @@ +named_array_with_formatted_date: + testdate1: '01.01.2047 12:47:47' + testdate2: '05.12.2016 00:00:00' diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_objects.yml b/vendor/jms/serializer/tests/Serializer/yml/array_objects.yml new file mode 100644 index 0000000..b1609d4 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_objects.yml @@ -0,0 +1,8 @@ +- + foo: foo + moo: bar + camel_case: boo +- + foo: baz + moo: boo + camel_case: boo diff --git a/vendor/jms/serializer/tests/Serializer/yml/array_strings.yml b/vendor/jms/serializer/tests/Serializer/yml/array_strings.yml new file mode 100644 index 0000000..59121da --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/array_strings.yml @@ -0,0 +1,2 @@ +- foo +- bar diff --git a/vendor/jms/serializer/tests/Serializer/yml/article.yml b/vendor/jms/serializer/tests/Serializer/yml/article.yml new file mode 100644 index 0000000..267643d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/article.yml @@ -0,0 +1 @@ +custom: serialized diff --git a/vendor/jms/serializer/tests/Serializer/yml/author_expression.yml b/vendor/jms/serializer/tests/Serializer/yml/author_expression.yml new file mode 100644 index 0000000..335e871 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/author_expression.yml @@ -0,0 +1,3 @@ +my_first_name: Ruud +last_name: Kamphuis +id: 123 diff --git a/vendor/jms/serializer/tests/Serializer/yml/blog_post.yml b/vendor/jms/serializer/tests/Serializer/yml/blog_post.yml new file mode 100644 index 0000000..24d2e9e --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/blog_post.yml @@ -0,0 +1,27 @@ +id: what_a_nice_id +title: 'This is a nice title.' +created_at: '2011-07-30T00:00:00+0000' +is_published: false +is_reviewed: false +etag: 1edf9bf60a32d89afbb85b2be849e3ceed5f5b10 +comments: + - + author: + full_name: 'Foo Bar' + text: foo +comments2: + - + author: + full_name: 'Foo Bar' + text: foo +metadata: + foo: bar +author: + full_name: 'Foo Bar' +publisher: + pub_name: 'Bar Foo' +tag: + - + name: tag1 + - + name: tag2 diff --git a/vendor/jms/serializer/tests/Serializer/yml/blog_post_unauthored.yml b/vendor/jms/serializer/tests/Serializer/yml/blog_post_unauthored.yml new file mode 100644 index 0000000..b72061e --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/blog_post_unauthored.yml @@ -0,0 +1,13 @@ +id: what_a_nice_id +title: 'This is a nice title.' +created_at: '2011-07-30T00:00:00+0000' +is_published: false +is_reviewed: false +etag: 1edf9bf60a32d89afbb85b2be849e3ceed5f5b10 +comments: [] +comments2: [] +metadata: + foo: bar +author: null +publisher: null +tag: null diff --git a/vendor/jms/serializer/tests/Serializer/yml/boolean_false.yml b/vendor/jms/serializer/tests/Serializer/yml/boolean_false.yml new file mode 100644 index 0000000..c508d53 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/boolean_false.yml @@ -0,0 +1 @@ +false diff --git a/vendor/jms/serializer/tests/Serializer/yml/boolean_true.yml b/vendor/jms/serializer/tests/Serializer/yml/boolean_true.yml new file mode 100644 index 0000000..27ba77d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/boolean_true.yml @@ -0,0 +1 @@ +true diff --git a/vendor/jms/serializer/tests/Serializer/yml/car.yml b/vendor/jms/serializer/tests/Serializer/yml/car.yml new file mode 100644 index 0000000..b2e9c9a --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/car.yml @@ -0,0 +1,2 @@ +km: 5 +type: car diff --git a/vendor/jms/serializer/tests/Serializer/yml/car_without_type.yml b/vendor/jms/serializer/tests/Serializer/yml/car_without_type.yml new file mode 100644 index 0000000..886bbb9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/car_without_type.yml @@ -0,0 +1 @@ +km: 5 diff --git a/vendor/jms/serializer/tests/Serializer/yml/circular_reference.yml b/vendor/jms/serializer/tests/Serializer/yml/circular_reference.yml new file mode 100644 index 0000000..011b690 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/circular_reference.yml @@ -0,0 +1,10 @@ +collection: + - + name: child1 + - + name: child2 +another_collection: + - + name: child1 + - + name: child2 diff --git a/vendor/jms/serializer/tests/Serializer/yml/currency_aware_price.yml b/vendor/jms/serializer/tests/Serializer/yml/currency_aware_price.yml new file mode 100644 index 0000000..66185f5 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/currency_aware_price.yml @@ -0,0 +1,2 @@ +currency: EUR +amount: 2.34 diff --git a/vendor/jms/serializer/tests/Serializer/yml/custom_accessor.yml b/vendor/jms/serializer/tests/Serializer/yml/custom_accessor.yml new file mode 100644 index 0000000..5eeb1b2 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/custom_accessor.yml @@ -0,0 +1,12 @@ +comments: + Foo: + comments: + - + author: + full_name: Foo + text: foo + - + author: + full_name: Foo + text: bar + count: 2 diff --git a/vendor/jms/serializer/tests/Serializer/yml/date_interval.yml b/vendor/jms/serializer/tests/Serializer/yml/date_interval.yml new file mode 100644 index 0000000..e8286c5 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/date_interval.yml @@ -0,0 +1 @@ +PT45M diff --git a/vendor/jms/serializer/tests/Serializer/yml/date_time.yml b/vendor/jms/serializer/tests/Serializer/yml/date_time.yml new file mode 100644 index 0000000..a8f98ee --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/date_time.yml @@ -0,0 +1 @@ +'2011-08-30T00:00:00+0000' diff --git a/vendor/jms/serializer/tests/Serializer/yml/date_time_immutable.yml b/vendor/jms/serializer/tests/Serializer/yml/date_time_immutable.yml new file mode 100644 index 0000000..a8f98ee --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/date_time_immutable.yml @@ -0,0 +1 @@ +'2011-08-30T00:00:00+0000' diff --git a/vendor/jms/serializer/tests/Serializer/yml/float.yml b/vendor/jms/serializer/tests/Serializer/yml/float.yml new file mode 100644 index 0000000..a955e81 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/float.yml @@ -0,0 +1 @@ +4.533 diff --git a/vendor/jms/serializer/tests/Serializer/yml/float_trailing_zero.yml b/vendor/jms/serializer/tests/Serializer/yml/float_trailing_zero.yml new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/float_trailing_zero.yml @@ -0,0 +1 @@ +1 diff --git a/vendor/jms/serializer/tests/Serializer/yml/garage.yml b/vendor/jms/serializer/tests/Serializer/yml/garage.yml new file mode 100644 index 0000000..b32204d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/garage.yml @@ -0,0 +1,7 @@ +vehicles: + - + km: 3 + type: car + - + km: 1 + type: moped diff --git a/vendor/jms/serializer/tests/Serializer/yml/groups_advanced.yml b/vendor/jms/serializer/tests/Serializer/yml/groups_advanced.yml new file mode 100644 index 0000000..fbd7c63 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/groups_advanced.yml @@ -0,0 +1,15 @@ +name: John +manager: + name: 'John Manager' + friends: + - + nickname: nickname + - + nickname: nickname +friends: + - + manager: + name: 'John friend 1 manager' + - + manager: + name: 'John friend 2 manager' diff --git a/vendor/jms/serializer/tests/Serializer/yml/groups_all.yml b/vendor/jms/serializer/tests/Serializer/yml/groups_all.yml new file mode 100644 index 0000000..6504e20 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/groups_all.yml @@ -0,0 +1,4 @@ +foo: foo +foobar: foobar +bar: bar +none: none diff --git a/vendor/jms/serializer/tests/Serializer/yml/groups_default.yml b/vendor/jms/serializer/tests/Serializer/yml/groups_default.yml new file mode 100644 index 0000000..c34136a --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/groups_default.yml @@ -0,0 +1,2 @@ +bar: bar +none: none diff --git a/vendor/jms/serializer/tests/Serializer/yml/groups_foo.yml b/vendor/jms/serializer/tests/Serializer/yml/groups_foo.yml new file mode 100644 index 0000000..58a24e6 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/groups_foo.yml @@ -0,0 +1,2 @@ +foo: foo +foobar: foobar diff --git a/vendor/jms/serializer/tests/Serializer/yml/groups_foobar.yml b/vendor/jms/serializer/tests/Serializer/yml/groups_foobar.yml new file mode 100644 index 0000000..f50c43e --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/groups_foobar.yml @@ -0,0 +1,3 @@ +foo: foo +foobar: foobar +bar: bar diff --git a/vendor/jms/serializer/tests/Serializer/yml/hash_empty.yml b/vendor/jms/serializer/tests/Serializer/yml/hash_empty.yml new file mode 100644 index 0000000..6ec4ff7 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/hash_empty.yml @@ -0,0 +1 @@ +hash: {} diff --git a/vendor/jms/serializer/tests/Serializer/yml/inline.yml b/vendor/jms/serializer/tests/Serializer/yml/inline.yml new file mode 100644 index 0000000..5b6dfe9 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/inline.yml @@ -0,0 +1,4 @@ +c: c +a: a +b: b +d: d diff --git a/vendor/jms/serializer/tests/Serializer/yml/inline_child_empty.yml b/vendor/jms/serializer/tests/Serializer/yml/inline_child_empty.yml new file mode 100644 index 0000000..606ed68 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/inline_child_empty.yml @@ -0,0 +1,2 @@ +c: c +d: d diff --git a/vendor/jms/serializer/tests/Serializer/yml/input.yml b/vendor/jms/serializer/tests/Serializer/yml/input.yml new file mode 100644 index 0000000..6df3ab0 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/input.yml @@ -0,0 +1,4 @@ +attributes: + type: text + name: firstname + value: Adrien diff --git a/vendor/jms/serializer/tests/Serializer/yml/integer.yml b/vendor/jms/serializer/tests/Serializer/yml/integer.yml new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/integer.yml @@ -0,0 +1 @@ +1 diff --git a/vendor/jms/serializer/tests/Serializer/yml/lifecycle_callbacks.yml b/vendor/jms/serializer/tests/Serializer/yml/lifecycle_callbacks.yml new file mode 100644 index 0000000..7c302c0 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/lifecycle_callbacks.yml @@ -0,0 +1 @@ +name: 'Foo Bar' diff --git a/vendor/jms/serializer/tests/Serializer/yml/log.yml b/vendor/jms/serializer/tests/Serializer/yml/log.yml new file mode 100644 index 0000000..99d4773 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/log.yml @@ -0,0 +1,18 @@ +author_list: + - + full_name: 'Johannes Schmitt' + - + full_name: 'John Doe' +comments: + - + author: + full_name: 'Foo Bar' + text: foo + - + author: + full_name: 'Foo Bar' + text: bar + - + author: + full_name: 'Foo Bar' + text: baz diff --git a/vendor/jms/serializer/tests/Serializer/yml/maxdepth_skippabe_object.yml b/vendor/jms/serializer/tests/Serializer/yml/maxdepth_skippabe_object.yml new file mode 100644 index 0000000..4c0be60 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/maxdepth_skippabe_object.yml @@ -0,0 +1,2 @@ +a: + xxx: yyy diff --git a/vendor/jms/serializer/tests/Serializer/yml/mixed_access_types.yml b/vendor/jms/serializer/tests/Serializer/yml/mixed_access_types.yml new file mode 100644 index 0000000..ef18306 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/mixed_access_types.yml @@ -0,0 +1,3 @@ +id: 1 +name: Johannes +read_only_property: 42 diff --git a/vendor/jms/serializer/tests/Serializer/yml/null.yml b/vendor/jms/serializer/tests/Serializer/yml/null.yml new file mode 100644 index 0000000..19765bd --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/null.yml @@ -0,0 +1 @@ +null diff --git a/vendor/jms/serializer/tests/Serializer/yml/nullable.yml b/vendor/jms/serializer/tests/Serializer/yml/nullable.yml new file mode 100644 index 0000000..acb6263 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/nullable.yml @@ -0,0 +1,3 @@ +foo: bar +baz: null +0: null diff --git a/vendor/jms/serializer/tests/Serializer/yml/nullable_arrays.yml b/vendor/jms/serializer/tests/Serializer/yml/nullable_arrays.yml new file mode 100644 index 0000000..4454d39 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/nullable_arrays.yml @@ -0,0 +1,9 @@ +empty_inline: [] +not_empty_inline: + - not_empty_inline +empty_not_inline: [] +not_empty_not_inline: + - not_empty_not_inline +empty_not_inline_skip: [] +not_empty_not_inline_skip: + - not_empty_not_inline_skip diff --git a/vendor/jms/serializer/tests/Serializer/yml/nullable_skip.yml b/vendor/jms/serializer/tests/Serializer/yml/nullable_skip.yml new file mode 100644 index 0000000..20e9ff3 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/nullable_skip.yml @@ -0,0 +1 @@ +foo: bar diff --git a/vendor/jms/serializer/tests/Serializer/yml/object_when_null.yml b/vendor/jms/serializer/tests/Serializer/yml/object_when_null.yml new file mode 100644 index 0000000..10d56bf --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/object_when_null.yml @@ -0,0 +1 @@ +text: foo diff --git a/vendor/jms/serializer/tests/Serializer/yml/object_when_null_and_serialized.yml b/vendor/jms/serializer/tests/Serializer/yml/object_when_null_and_serialized.yml new file mode 100644 index 0000000..119ce0e --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/object_when_null_and_serialized.yml @@ -0,0 +1,2 @@ +author: null +text: foo diff --git a/vendor/jms/serializer/tests/Serializer/yml/order.yml b/vendor/jms/serializer/tests/Serializer/yml/order.yml new file mode 100644 index 0000000..e25bd6b --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/order.yml @@ -0,0 +1,2 @@ +cost: + price: 12.34 diff --git a/vendor/jms/serializer/tests/Serializer/yml/order_with_currency_aware_price.yml b/vendor/jms/serializer/tests/Serializer/yml/order_with_currency_aware_price.yml new file mode 100644 index 0000000..4000322 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/order_with_currency_aware_price.yml @@ -0,0 +1,3 @@ +cost: + currency: EUR + amount: 1.23 diff --git a/vendor/jms/serializer/tests/Serializer/yml/orm_proxy.yml b/vendor/jms/serializer/tests/Serializer/yml/orm_proxy.yml new file mode 100644 index 0000000..6f26058 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/orm_proxy.yml @@ -0,0 +1,3 @@ +foo: foo +moo: bar +camel_case: proxy-boo diff --git a/vendor/jms/serializer/tests/Serializer/yml/person_secret_hide.yml b/vendor/jms/serializer/tests/Serializer/yml/person_secret_hide.yml new file mode 100644 index 0000000..710e7dc --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/person_secret_hide.yml @@ -0,0 +1 @@ +name: mike diff --git a/vendor/jms/serializer/tests/Serializer/yml/person_secret_show.yml b/vendor/jms/serializer/tests/Serializer/yml/person_secret_show.yml new file mode 100644 index 0000000..f03db3e --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/person_secret_show.yml @@ -0,0 +1,2 @@ +name: mike +gender: f diff --git a/vendor/jms/serializer/tests/Serializer/yml/price.yml b/vendor/jms/serializer/tests/Serializer/yml/price.yml new file mode 100644 index 0000000..dc5a58b --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/price.yml @@ -0,0 +1 @@ +price: 3 diff --git a/vendor/jms/serializer/tests/Serializer/yml/readonly.yml b/vendor/jms/serializer/tests/Serializer/yml/readonly.yml new file mode 100644 index 0000000..3c428c3 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/readonly.yml @@ -0,0 +1,2 @@ +id: 123 +full_name: 'Ruud Kamphuis' diff --git a/vendor/jms/serializer/tests/Serializer/yml/simple_object.yml b/vendor/jms/serializer/tests/Serializer/yml/simple_object.yml new file mode 100644 index 0000000..594b289 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/simple_object.yml @@ -0,0 +1,3 @@ +foo: foo +moo: bar +camel_case: boo diff --git a/vendor/jms/serializer/tests/Serializer/yml/simple_object_nullable.yml b/vendor/jms/serializer/tests/Serializer/yml/simple_object_nullable.yml new file mode 100644 index 0000000..126d625 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/simple_object_nullable.yml @@ -0,0 +1,4 @@ +foo: foo +moo: bar +camel_case: boo +null_property: null diff --git a/vendor/jms/serializer/tests/Serializer/yml/string.yml b/vendor/jms/serializer/tests/Serializer/yml/string.yml new file mode 100644 index 0000000..257cc56 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/string.yml @@ -0,0 +1 @@ +foo diff --git a/vendor/jms/serializer/tests/Serializer/yml/timestamp.yml b/vendor/jms/serializer/tests/Serializer/yml/timestamp.yml new file mode 100755 index 0000000..b1c38be --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/timestamp.yml @@ -0,0 +1 @@ +timestamp: 1455148800 diff --git a/vendor/jms/serializer/tests/Serializer/yml/timestamp_prev.yml b/vendor/jms/serializer/tests/Serializer/yml/timestamp_prev.yml new file mode 100755 index 0000000..3df27d6 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/timestamp_prev.yml @@ -0,0 +1 @@ +timestamp: "1455148800" diff --git a/vendor/jms/serializer/tests/Serializer/yml/tree.yml b/vendor/jms/serializer/tests/Serializer/yml/tree.yml new file mode 100644 index 0000000..01e8387 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/tree.yml @@ -0,0 +1,10 @@ +tree: + children: + - + children: + - + children: + - + foo: bar + foo: bar + foo: bar diff --git a/vendor/jms/serializer/tests/Serializer/yml/virtual_properties.yml b/vendor/jms/serializer/tests/Serializer/yml/virtual_properties.yml new file mode 100644 index 0000000..7d1c0b2 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/virtual_properties.yml @@ -0,0 +1,4 @@ +exist_field: value +virtual_value: value +test: other-name +typed_virtual_property: 1 diff --git a/vendor/jms/serializer/tests/Serializer/yml/virtual_properties_all.yml b/vendor/jms/serializer/tests/Serializer/yml/virtual_properties_all.yml new file mode 100644 index 0000000..0bcf04b --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/virtual_properties_all.yml @@ -0,0 +1,2 @@ +low: 1 +high: 8 diff --git a/vendor/jms/serializer/tests/Serializer/yml/virtual_properties_high.yml b/vendor/jms/serializer/tests/Serializer/yml/virtual_properties_high.yml new file mode 100644 index 0000000..2be358d --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/virtual_properties_high.yml @@ -0,0 +1 @@ +high: 8 diff --git a/vendor/jms/serializer/tests/Serializer/yml/virtual_properties_low.yml b/vendor/jms/serializer/tests/Serializer/yml/virtual_properties_low.yml new file mode 100644 index 0000000..a021172 --- /dev/null +++ b/vendor/jms/serializer/tests/Serializer/yml/virtual_properties_low.yml @@ -0,0 +1 @@ +low: 1 diff --git a/vendor/jms/serializer/tests/SerializerBuilderTest.php b/vendor/jms/serializer/tests/SerializerBuilderTest.php new file mode 100644 index 0000000..3e84dc2 --- /dev/null +++ b/vendor/jms/serializer/tests/SerializerBuilderTest.php @@ -0,0 +1,299 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests; + +use JMS\Serializer\DeserializationContext; +use JMS\Serializer\Expression\ExpressionEvaluator; +use JMS\Serializer\Handler\HandlerRegistry; +use JMS\Serializer\JsonSerializationVisitor; +use JMS\Serializer\Naming\CamelCaseNamingStrategy; +use JMS\Serializer\SerializationContext; +use JMS\Serializer\SerializerBuilder; +use JMS\Serializer\Tests\Fixtures\ContextualNamingStrategy; +use JMS\Serializer\Tests\Fixtures\Person; +use JMS\Serializer\Tests\Fixtures\PersonSecret; +use JMS\Serializer\Tests\Fixtures\PersonSecretWithVariables; +use Symfony\Component\ExpressionLanguage\ExpressionFunction; +use Symfony\Component\ExpressionLanguage\ExpressionLanguage; +use Symfony\Component\Filesystem\Filesystem; + +class SerializerBuilderTest extends \PHPUnit_Framework_TestCase +{ + /** @var SerializerBuilder */ + private $builder; + private $fs; + private $tmpDir; + + public function testBuildWithoutAnythingElse() + { + $serializer = $this->builder->build(); + + $this->assertEquals('"foo"', $serializer->serialize('foo', 'json')); + $this->assertEquals(' + +', $serializer->serialize('foo', 'xml')); + $this->assertEquals('foo +', $serializer->serialize('foo', 'yml')); + + $this->assertEquals('foo', $serializer->deserialize('"foo"', 'string', 'json')); + $this->assertEquals('foo', $serializer->deserialize('', 'string', 'xml')); + } + + public function testWithCache() + { + $this->assertFileNotExists($this->tmpDir); + + $this->assertSame($this->builder, $this->builder->setCacheDir($this->tmpDir)); + $serializer = $this->builder->build(); + + $this->assertFileExists($this->tmpDir); + $this->assertFileExists($this->tmpDir . '/annotations'); + $this->assertFileExists($this->tmpDir . '/metadata'); + + $factory = $this->getField($serializer, 'factory'); + $this->assertAttributeSame(false, 'debug', $factory); + $this->assertAttributeNotSame(null, 'cache', $factory); + } + + public function testDoesAddDefaultHandlers() + { + $serializer = $this->builder->build(); + + $this->assertEquals('"2020-04-16T00:00:00+0000"', $serializer->serialize(new \DateTime('2020-04-16', new \DateTimeZone('UTC')), 'json')); + } + + public function testDoesNotAddDefaultHandlersWhenExplicitlyConfigured() + { + $this->assertSame($this->builder, $this->builder->configureHandlers(function (HandlerRegistry $registry) { + })); + + $this->assertEquals('{}', $this->builder->build()->serialize(new \DateTime('2020-04-16'), 'json')); + } + + /** + * @expectedException JMS\Serializer\Exception\UnsupportedFormatException + * @expectedExceptionMessage The format "xml" is not supported for serialization. + */ + public function testDoesNotAddOtherVisitorsWhenConfiguredExplicitly() + { + $this->assertSame( + $this->builder, + $this->builder->setSerializationVisitor('json', new JsonSerializationVisitor(new CamelCaseNamingStrategy())) + ); + + $this->builder->build()->serialize('foo', 'xml'); + } + + public function testIncludeInterfaceMetadata() + { + $this->assertFalse( + $this->getIncludeInterfaces($this->builder), + 'Interface metadata are not included by default' + ); + + $this->assertTrue( + $this->getIncludeInterfaces($this->builder->includeInterfaceMetadata(true)), + 'Force including interface metadata' + ); + + $this->assertFalse( + $this->getIncludeInterfaces($this->builder->includeInterfaceMetadata(false)), + 'Force not including interface metadata' + ); + + $this->assertSame( + $this->builder, + $this->builder->includeInterfaceMetadata(true) + ); + } + + public function testSetSerializationContext() + { + $contextFactoryMock = $this->getMockForAbstractClass('JMS\\Serializer\\ContextFactory\\SerializationContextFactoryInterface'); + $context = new SerializationContext(); + $context->setSerializeNull(true); + + $contextFactoryMock + ->expects($this->once()) + ->method('createSerializationContext') + ->will($this->returnValue($context)); + + $this->builder->setSerializationContextFactory($contextFactoryMock); + + $serializer = $this->builder->build(); + + $result = $serializer->serialize(array('value' => null), 'json'); + + $this->assertEquals('{"value":null}', $result); + } + + public function testSetDeserializationContext() + { + $contextFactoryMock = $this->getMockForAbstractClass('JMS\\Serializer\\ContextFactory\\DeserializationContextFactoryInterface'); + $context = new DeserializationContext(); + + $contextFactoryMock + ->expects($this->once()) + ->method('createDeserializationContext') + ->will($this->returnValue($context)); + + $this->builder->setDeserializationContextFactory($contextFactoryMock); + + $serializer = $this->builder->build(); + + $result = $serializer->deserialize('{"value":null}', 'array', 'json'); + + $this->assertEquals(array('value' => null), $result); + } + + public function testSetCallbackSerializationContextWithSerializeNull() + { + $this->builder->setSerializationContextFactory(function () { + return SerializationContext::create() + ->setSerializeNull(true); + }); + + $serializer = $this->builder->build(); + + $result = $serializer->serialize(array('value' => null), 'json'); + + $this->assertEquals('{"value":null}', $result); + } + + public function testSetCallbackSerializationContextWithNotSerializeNull() + { + $this->builder->setSerializationContextFactory(function () { + return SerializationContext::create() + ->setSerializeNull(false); + }); + + $serializer = $this->builder->build(); + + $result = $serializer->serialize(array('value' => null, 'not_null' => 'ok'), 'json'); + + $this->assertEquals('{"not_null":"ok"}', $result); + } + + public function expressionFunctionProvider() + { + return [ + [ + new ExpressionFunction('show_data', function () { + return "true"; + }, function () { + return true; + }), + '{"name":"mike"}' + ], + [ + new ExpressionFunction('show_data', function () { + return "false"; + }, function () { + return false; + }), + '{"name":"mike","gender":"f"}' + ] + ]; + } + + /** + * @dataProvider expressionFunctionProvider + * @param ExpressionFunction $function + * @param $json + */ + public function testExpressionEngine(ExpressionFunction $function, $json) + { + $language = new ExpressionLanguage(); + $language->addFunction($function); + + $this->builder->setExpressionEvaluator(new ExpressionEvaluator($language)); + + $serializer = $this->builder->build(); + + $person = new PersonSecret(); + $person->gender = 'f'; + $person->name = 'mike'; + + $this->assertEquals($json, $serializer->serialize($person, 'json')); + } + + public function testExpressionEngineWhenDeserializing() + { + $language = new ExpressionLanguage(); + $this->builder->setExpressionEvaluator(new ExpressionEvaluator($language)); + + $serializer = $this->builder->build(); + + $person = new PersonSecretWithVariables(); + $person->gender = 'f'; + $person->name = 'mike'; + + $serialized = $serializer->serialize($person, 'json'); + $this->assertEquals('{"name":"mike","gender":"f"}', $serialized); + + $object = $serializer->deserialize($serialized, PersonSecretWithVariables::class, 'json'); + $this->assertEquals($person, $object); + } + + public function testAdvancedNamingStrategy() + { + $this->builder->setAdvancedNamingStrategy(new ContextualNamingStrategy()); + $serializer = $this->builder->build(); + + $person = new Person(); + $person->name = "bar"; + + $json = $serializer->serialize($person, "json"); + $this->assertEquals('{"NAME":"bar"}', $json); + + $json = '{"Name": "bar"}'; + $person = $serializer->deserialize($json, Person::class, "json"); + $this->assertEquals("bar", $person->name); + } + + protected function setUp() + { + $this->builder = SerializerBuilder::create(); + $this->fs = new Filesystem(); + + $this->tmpDir = sys_get_temp_dir() . '/serializer'; + $this->fs->remove($this->tmpDir); + clearstatcache(); + } + + protected function tearDown() + { + $this->fs->remove($this->tmpDir); + } + + private function getField($obj, $name) + { + $ref = new \ReflectionProperty($obj, $name); + $ref->setAccessible(true); + + return $ref->getValue($obj); + } + + private function getIncludeInterfaces(SerializerBuilder $builder) + { + $factory = $this->getField($builder->build(), 'factory'); + + return $this->getField($factory, 'includeInterfaces'); + } +} diff --git a/vendor/jms/serializer/tests/Twig/SerializerExtensionTest.php b/vendor/jms/serializer/tests/Twig/SerializerExtensionTest.php new file mode 100644 index 0000000..3fdaf79 --- /dev/null +++ b/vendor/jms/serializer/tests/Twig/SerializerExtensionTest.php @@ -0,0 +1,78 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace JMS\Serializer\Tests\Twig; + +use JMS\Serializer\Twig\SerializerExtension; +use JMS\Serializer\Twig\SerializerRuntimeExtension; +use JMS\Serializer\Twig\SerializerRuntimeHelper; + +class SerializerExtensionTest extends \PHPUnit_Framework_TestCase +{ + public function testSerialize() + { + $mockSerializer = $this->getMockBuilder('JMS\Serializer\SerializerInterface')->getMock(); + $obj = new \stdClass(); + $mockSerializer + ->expects($this->once()) + ->method('serialize') + ->with($this->equalTo($obj), $this->equalTo('json')); + $serializerExtension = new SerializerExtension($mockSerializer); + $serializerExtension->serialize($obj); + + $this->assertEquals('jms_serializer', $serializerExtension->getName()); + + $filters = $serializerExtension->getFilters(); + $this->assertInstanceOf('Twig_SimpleFilter', $filters[0]); + $this->assertSame(array($serializerExtension, 'serialize'), $filters[0]->getCallable()); + + $this->assertEquals( + array(new \Twig_SimpleFunction('serialization_context', '\JMS\Serializer\SerializationContext::create')), + $serializerExtension->getFunctions() + ); + } + + public function testRuntimeSerializerHelper() + { + $obj = new \stdClass(); + + $mockSerializer = $this->getMockBuilder('JMS\Serializer\SerializerInterface')->getMock(); + $mockSerializer + ->expects($this->once()) + ->method('serialize') + ->with($this->equalTo($obj), $this->equalTo('json')); + + $serializerExtension = new SerializerRuntimeHelper($mockSerializer); + $serializerExtension->serialize($obj); + } + + public function testRuntimeSerializerExtension() + { + $serializerExtension = new SerializerRuntimeExtension(); + + $this->assertEquals('jms_serializer', $serializerExtension->getName()); + $this->assertEquals( + array(new \Twig_SimpleFilter('serialize', array(SerializerRuntimeHelper::class, 'serialize'))), + $serializerExtension->getFilters() + ); + $this->assertEquals( + array(new \Twig_SimpleFunction('serialization_context', '\JMS\Serializer\SerializationContext::create')), + $serializerExtension->getFunctions() + ); + } +} diff --git a/vendor/jms/serializer/tests/benchmark.php b/vendor/jms/serializer/tests/benchmark.php new file mode 100644 index 0000000..8f7c09c --- /dev/null +++ b/vendor/jms/serializer/tests/benchmark.php @@ -0,0 +1,63 @@ + [output-file]' . PHP_EOL; + exit(1); +} + +list(, $format, $iterations) = $_SERVER['argv']; + +require_once 'bootstrap.php'; + +function benchmark(\Closure $f, $times = 10) +{ + $time = microtime(true); + for ($i = 0; $i < $times; $i++) { + $f(); + } + + return (microtime(true) - $time) / $times; +} + +function createCollection() +{ + $collection = array(); + for ($i = 0; $i < 50; $i++) { + $collection[] = createObject(); + } + + return $collection; +} + +function createObject() +{ + $p = new \JMS\Serializer\Tests\Fixtures\Publisher('bar'); + $post = new \JMS\Serializer\Tests\Fixtures\BlogPost('FooooooooooooooooooooooBAR', new \JMS\Serializer\Tests\Fixtures\Author('Foo'), new \DateTime, $p); + for ($i = 0; $i < 10; $i++) { + $post->addComment(new \JMS\Serializer\Tests\Fixtures\Comment(new \JMS\Serializer\Tests\Fixtures\Author('foo'), 'foobar')); + } + + return $post; +} + +$serializer = \JMS\Serializer\SerializerBuilder::create()->build(); +$collection = createCollection(); +$metrics = array(); +$f = function () use ($serializer, $collection, $format) { + $serializer->serialize($collection, $format); +}; + +// Load all necessary classes into memory. +benchmark($f, 1); + +printf('Benchmarking collection for format "%s".' . PHP_EOL, $format); +$metrics['benchmark-collection-' . $format] = benchmark($f, $iterations); + +$output = json_encode(array('metrics' => $metrics)); + +if (isset($_SERVER['argv'][3])) { + file_put_contents($_SERVER['argv'][3], $output); + echo "Done." . PHP_EOL; +} else { + echo $output . PHP_EOL; +} diff --git a/vendor/jms/serializer/tests/bootstrap.php b/vendor/jms/serializer/tests/bootstrap.php new file mode 100644 index 0000000..2d18590 --- /dev/null +++ b/vendor/jms/serializer/tests/bootstrap.php @@ -0,0 +1,30 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use Doctrine\Common\Annotations\AnnotationRegistry; + +call_user_func(function () { + if (!is_file($autoloadFile = __DIR__ . '/../vendor/autoload.php')) { + throw new \RuntimeException('Did not find vendor/autoload.php. Did you run "composer install --dev"?'); + } + + $loader = require $autoloadFile; + $loader->add('JMS\Serializer\Tests', __DIR__); + + AnnotationRegistry::registerLoader('class_exists'); +}); diff --git a/vendor/justinrainbow/json-schema/.gitattributes b/vendor/justinrainbow/json-schema/.gitattributes new file mode 100644 index 0000000..beeff5b --- /dev/null +++ b/vendor/justinrainbow/json-schema/.gitattributes @@ -0,0 +1,5 @@ +/docs export-ignore +/tests export-ignore +.gitignore export-ignore +.travis.yml export-ignore +phpunit.dist.xml export-ignore diff --git a/vendor/justinrainbow/json-schema/LICENSE b/vendor/justinrainbow/json-schema/LICENSE new file mode 100644 index 0000000..6210e7c --- /dev/null +++ b/vendor/justinrainbow/json-schema/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2008, Gradua Networks +Author: Bruno Prieto Reis +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 Gradua Networks 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. diff --git a/vendor/justinrainbow/json-schema/README.md b/vendor/justinrainbow/json-schema/README.md new file mode 100644 index 0000000..3f9c58c --- /dev/null +++ b/vendor/justinrainbow/json-schema/README.md @@ -0,0 +1,55 @@ +# JSON Schema for PHP + +[![Build Status](https://travis-ci.org/justinrainbow/json-schema.svg?branch=master)](https://travis-ci.org/justinrainbow/json-schema) +[![Latest Stable Version](https://poser.pugx.org/justinrainbow/json-schema/v/stable.png)](https://packagist.org/packages/justinrainbow/json-schema) +[![Total Downloads](https://poser.pugx.org/justinrainbow/json-schema/downloads.png)](https://packagist.org/packages/justinrainbow/json-schema) + +A PHP Implementation for validating `JSON` Structures against a given `Schema`. + +See [json-schema](http://json-schema.org/) for more details. + +## Installation + +### Library + + $ git clone https://github.com/justinrainbow/json-schema.git + +### Dependencies + +#### [`Composer`](https://github.com/composer/composer) (*will use the Composer ClassLoader*) + + $ wget http://getcomposer.org/composer.phar + $ php composer.phar require justinrainbow/json-schema:~1.3 + +## Usage + +```php +retrieve('file://' . realpath('schema.json')); +$data = json_decode(file_get_contents('data.json')); + +// If you use $ref or if you are unsure, resolve those references here +// This modifies the $schema object +$refResolver = new JsonSchema\RefResolver($retriever); +$refResolver->resolve($schema, 'file://' . __DIR__); + +// Validate +$validator = new JsonSchema\Validator(); +$validator->check($data, $schema); + +if ($validator->isValid()) { + echo "The supplied JSON validates against the schema.\n"; +} else { + echo "JSON does not validate. Violations:\n"; + foreach ($validator->getErrors() as $error) { + echo sprintf("[%s] %s\n", $error['property'], $error['message']); + } +} +``` + +## Running the tests + + $ vendor/bin/phpunit diff --git a/vendor/justinrainbow/json-schema/bin/validate-json b/vendor/justinrainbow/json-schema/bin/validate-json new file mode 100755 index 0000000..e93d53a --- /dev/null +++ b/vendor/justinrainbow/json-schema/bin/validate-json @@ -0,0 +1,245 @@ +#!/usr/bin/env php + + */ + +/** + * Dead simple autoloader + * + * @param string $className Name of class to load + * + * @return void + */ +function __autoload($className) +{ + $className = ltrim($className, '\\'); + $fileName = ''; + $namespace = ''; + if ($lastNsPos = strrpos($className, '\\')) { + $namespace = substr($className, 0, $lastNsPos); + $className = substr($className, $lastNsPos + 1); + $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; + } + $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; + if (stream_resolve_include_path($fileName)) { + require_once $fileName; + } +} + +/** + * Show the json parse error that happened last + * + * @return void + */ +function showJsonError() +{ + $constants = get_defined_constants(true); + $json_errors = array(); + foreach ($constants['json'] as $name => $value) { + if (!strncmp($name, 'JSON_ERROR_', 11)) { + $json_errors[$value] = $name; + } + } + + echo 'JSON parse error: ' . $json_errors[json_last_error()] . "\n"; +} + +function getUrlFromPath($path) +{ + if (parse_url($path, PHP_URL_SCHEME) !== null) { + //already an URL + return $path; + } + if ($path{0} == '/') { + //absolute path + return 'file://' . $path; + } + + //relative path: make absolute + return 'file://' . getcwd() . '/' . $path; +} + +/** + * Take a HTTP header value and split it up into parts. + * + * @return array Key "_value" contains the main value, all others + * as given in the header value + */ +function parseHeaderValue($headerValue) +{ + if (strpos($headerValue, ';') === false) { + return array('_value' => $headerValue); + } + + $parts = explode(';', $headerValue); + $arData = array('_value' => array_shift($parts)); + foreach ($parts as $part) { + list($name, $value) = explode('=', $part); + $arData[$name] = trim($value, ' "\''); + } + return $arData; +} + + +// support running this tool from git checkout +if (is_dir(__DIR__ . '/../src/JsonSchema')) { + set_include_path(__DIR__ . '/../src' . PATH_SEPARATOR . get_include_path()); +} + +$arOptions = array(); +$arArgs = array(); +array_shift($argv);//script itself +foreach ($argv as $arg) { + if ($arg{0} == '-') { + $arOptions[$arg] = true; + } else { + $arArgs[] = $arg; + } +} + +if (count($arArgs) == 0 + || isset($arOptions['--help']) || isset($arOptions['-h']) +) { + echo << array( + 'header' => array( + 'Accept: */*', + 'Connection: Close' + ), + 'max_redirects' => 5 + ) + ) +); +$dataString = file_get_contents($pathData, false, $context); +if ($dataString == '') { + echo "Data file is not readable or empty.\n"; + exit(3); +} + +$data = json_decode($dataString); +unset($dataString); +if ($data === null) { + echo "Error loading JSON data file\n"; + showJsonError(); + exit(5); +} + +if ($pathSchema === null) { + if (isset($http_response_header)) { + array_shift($http_response_header);//HTTP/1.0 line + foreach ($http_response_header as $headerLine) { + list($hName, $hValue) = explode(':', $headerLine, 2); + $hName = strtolower($hName); + if ($hName == 'link') { + //Link: ; rel="describedBy" + $hParts = parseHeaderValue($hValue); + if (isset($hParts['rel']) && $hParts['rel'] == 'describedBy') { + $pathSchema = trim($hParts['_value'], ' <>'); + } + } else if ($hName == 'content-type') { + //Content-Type: application/my-media-type+json; + // profile=http://example.org/schema# + $hParts = parseHeaderValue($hValue); + if (isset($hParts['profile'])) { + $pathSchema = $hParts['profile']; + } + + } + } + } + if (is_object($data) && property_exists($data, '$schema')) { + $pathSchema = $data->{'$schema'}; + } + + //autodetect schema + if ($pathSchema === null) { + echo "JSON data must be an object and have a \$schema property.\n"; + echo "You can pass the schema file on the command line as well.\n"; + echo "Schema autodetection failed.\n"; + exit(6); + } +} +if ($pathSchema{0} == '/') { + $pathSchema = 'file://' . $pathSchema; +} + +$resolver = new JsonSchema\Uri\UriResolver(); +$retriever = new JsonSchema\Uri\UriRetriever(); +try { + $urlSchema = $resolver->resolve($pathSchema, $urlData); + + if (isset($arOptions['--dump-schema-url'])) { + echo $urlSchema . "\n"; + exit(); + } + + $schema = $retriever->retrieve($urlSchema); + if ($schema === null) { + echo "Error loading JSON schema file\n"; + echo $urlSchema . "\n"; + showJsonError(); + exit(2); + } +} catch (Exception $e) { + echo "Error loading JSON schema file\n"; + echo $urlSchema . "\n"; + echo $e->getMessage() . "\n"; + exit(2); +} +$refResolver = new JsonSchema\RefResolver($retriever); +$refResolver->resolve($schema, $urlSchema); + +if (isset($arOptions['--dump-schema'])) { + $options = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0; + echo json_encode($schema, $options) . "\n"; + exit(); +} + +try { + $validator = new JsonSchema\Validator(); + $validator->check($data, $schema); + + if ($validator->isValid()) { + echo "OK. The supplied JSON validates against the schema.\n"; + } else { + echo "JSON does not validate. Violations:\n"; + foreach ($validator->getErrors() as $error) { + echo sprintf("[%s] %s\n", $error['property'], $error['message']); + } + exit(23); + } +} catch (Exception $e) { + echo "JSON does not validate. Error:\n"; + echo $e->getMessage() . "\n"; + echo "Error code: " . $e->getCode() . "\n"; + exit(24); +} +?> diff --git a/vendor/justinrainbow/json-schema/composer.json b/vendor/justinrainbow/json-schema/composer.json new file mode 100644 index 0000000..68b3933 --- /dev/null +++ b/vendor/justinrainbow/json-schema/composer.json @@ -0,0 +1,58 @@ +{ + "name": "justinrainbow/json-schema", + "description": "A library to validate a json schema.", + "keywords": ["json", "schema"], + "homepage": "https://github.com/justinrainbow/json-schema", + "type": "library", + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "repositories": [{ + "type": "package", + "package": { + "name": "json-schema/JSON-Schema-Test-Suite", + "version": "1.1.0", + "source": { + "url": "https://github.com/json-schema/JSON-Schema-Test-Suite", + "type": "git", + "reference": "1.1.0" + } + } + }], + "require": { + "php": ">=5.3.29" + }, + "require-dev": { + "json-schema/JSON-Schema-Test-Suite": "1.1.0", + "phpunit/phpunit": "~3.7", + "phpdocumentor/phpdocumentor": "~2" + }, + "autoload": { + "psr-4": { "JsonSchema\\": "src/JsonSchema/" } + }, + "autoload-dev": { + "psr-4": { "JsonSchema\\Tests\\": "tests/JsonSchema/Tests/" } + }, + "bin": ["bin/validate-json"], + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + } +} diff --git a/vendor/justinrainbow/json-schema/phpunit.xml.dist b/vendor/justinrainbow/json-schema/phpunit.xml.dist new file mode 100644 index 0000000..0136d8e --- /dev/null +++ b/vendor/justinrainbow/json-schema/phpunit.xml.dist @@ -0,0 +1,26 @@ + + + + + + tests + + + + + + ./src/JsonSchema/ + + + diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php new file mode 100644 index 0000000..b43bace --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php @@ -0,0 +1,112 @@ + + * @author Bruno Prieto Reis + */ +class CollectionConstraint extends Constraint +{ + /** + * {@inheritDoc} + */ + public function check($value, $schema = null, $path = null, $i = null) + { + // Verify minItems + if (isset($schema->minItems) && count($value) < $schema->minItems) { + $this->addError($path, "There must be a minimum of " . $schema->minItems . " items in the array", 'minItems', array('minItems' => $schema->minItems,)); + } + + // Verify maxItems + if (isset($schema->maxItems) && count($value) > $schema->maxItems) { + $this->addError($path, "There must be a maximum of " . $schema->maxItems . " items in the array", 'maxItems', array('maxItems' => $schema->maxItems,)); + } + + // Verify uniqueItems + if (isset($schema->uniqueItems) && $schema->uniqueItems) { + $unique = $value; + if (is_array($value) && count($value)) { + $unique = array_map(function($e) { return var_export($e, true); }, $value); + } + if (count(array_unique($unique)) != count($value)) { + $this->addError($path, "There are no duplicates allowed in the array", 'uniqueItems'); + } + } + + // Verify items + if (isset($schema->items)) { + $this->validateItems($value, $schema, $path, $i); + } + } + + /** + * Validates the items + * + * @param array $value + * @param \stdClass $schema + * @param string $path + * @param string $i + */ + protected function validateItems($value, $schema = null, $path = null, $i = null) + { + if (is_object($schema->items)) { + // just one type definition for the whole array + foreach ($value as $k => $v) { + $initErrors = $this->getErrors(); + + // First check if its defined in "items" + $this->checkUndefined($v, $schema->items, $path, $k); + + // Recheck with "additionalItems" if the first test fails + if (count($initErrors) < count($this->getErrors()) && (isset($schema->additionalItems) && $schema->additionalItems !== false)) { + $secondErrors = $this->getErrors(); + $this->checkUndefined($v, $schema->additionalItems, $path, $k); + } + + // Reset errors if needed + if (isset($secondErrors) && count($secondErrors) < count($this->getErrors())) { + $this->errors = $secondErrors; + } else if (isset($secondErrors) && count($secondErrors) === count($this->getErrors())) { + $this->errors = $initErrors; + } + } + } else { + // Defined item type definitions + foreach ($value as $k => $v) { + if (array_key_exists($k, $schema->items)) { + $this->checkUndefined($v, $schema->items[$k], $path, $k); + } else { + // Additional items + if (property_exists($schema, 'additionalItems')) { + if ($schema->additionalItems !== false) { + $this->checkUndefined($v, $schema->additionalItems, $path, $k); + } else { + $this->addError( + $path, 'The item ' . $i . '[' . $k . '] is not defined and the definition does not allow additional items', 'additionalItems', array('additionalItems' => $schema->additionalItems,)); + } + } else { + // Should be valid against an empty schema + $this->checkUndefined($v, new \stdClass(), $path, $k); + } + } + } + + // Treat when we have more schema definitions than values, not for empty arrays + if(count($value) > 0) { + for ($k = count($value); $k < count($schema->items); $k++) { + $this->checkUndefined(new UndefinedConstraint(), $schema->items[$k], $path, $k); + } + } + } + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php new file mode 100644 index 0000000..cb3ee80 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php @@ -0,0 +1,291 @@ + + * @author Bruno Prieto Reis + */ +abstract class Constraint implements ConstraintInterface +{ + protected $checkMode = self::CHECK_MODE_NORMAL; + protected $uriRetriever; + protected $errors = array(); + protected $inlineSchemaProperty = '$schema'; + + const CHECK_MODE_NORMAL = 1; + const CHECK_MODE_TYPE_CAST = 2; + + /** + * @var null|Factory + */ + private $factory; + + /** + * @param int $checkMode + * @param UriRetriever $uriRetriever + * @param Factory $factory + */ + public function __construct($checkMode = self::CHECK_MODE_NORMAL, UriRetriever $uriRetriever = null, Factory $factory = null) + { + $this->checkMode = $checkMode; + $this->uriRetriever = $uriRetriever; + $this->factory = $factory; + } + + /** + * @return UriRetriever $uriRetriever + */ + public function getUriRetriever() + { + if (is_null($this->uriRetriever)) + { + $this->setUriRetriever(new UriRetriever); + } + + return $this->uriRetriever; + } + + /** + * @return Factory + */ + public function getFactory() + { + if (!$this->factory) { + $this->factory = new Factory($this->getUriRetriever()); + } + + return $this->factory; + } + + /** + * @param UriRetriever $uriRetriever + */ + public function setUriRetriever(UriRetriever $uriRetriever) + { + $this->uriRetriever = $uriRetriever; + } + + /** + * {@inheritDoc} + */ + public function addError($path, $message, $constraint='', array $more=null) + { + $error = array( + 'property' => $path, + 'message' => $message, + 'constraint' => $constraint, + ); + + if (is_array($more) && count($more) > 0) + { + $error += $more; + } + + $this->errors[] = $error; + } + + /** + * {@inheritDoc} + */ + public function addErrors(array $errors) + { + $this->errors = array_merge($this->errors, $errors); + } + + /** + * {@inheritDoc} + */ + public function getErrors() + { + return $this->errors; + } + + /** + * {@inheritDoc} + */ + public function isValid() + { + return !$this->getErrors(); + } + + /** + * Clears any reported errors. Should be used between + * multiple validation checks. + */ + public function reset() + { + $this->errors = array(); + } + + /** + * Bubble down the path + * + * @param string $path Current path + * @param mixed $i What to append to the path + * + * @return string + */ + protected function incrementPath($path, $i) + { + if ($path !== '') { + if (is_int($i)) { + $path .= '[' . $i . ']'; + } elseif ($i == '') { + $path .= ''; + } else { + $path .= '.' . $i; + } + } else { + $path = $i; + } + + return $path; + } + + /** + * Validates an array + * + * @param mixed $value + * @param mixed $schema + * @param mixed $path + * @param mixed $i + */ + protected function checkArray($value, $schema = null, $path = null, $i = null) + { + $validator = $this->getFactory()->createInstanceFor('collection'); + $validator->check($value, $schema, $path, $i); + + $this->addErrors($validator->getErrors()); + } + + /** + * Validates an object + * + * @param mixed $value + * @param mixed $schema + * @param mixed $path + * @param mixed $i + * @param mixed $patternProperties + */ + protected function checkObject($value, $schema = null, $path = null, $i = null, $patternProperties = null) + { + $validator = $this->getFactory()->createInstanceFor('object'); + $validator->check($value, $schema, $path, $i, $patternProperties); + + $this->addErrors($validator->getErrors()); + } + + /** + * Validates the type of a property + * + * @param mixed $value + * @param mixed $schema + * @param mixed $path + * @param mixed $i + */ + protected function checkType($value, $schema = null, $path = null, $i = null) + { + $validator = $this->getFactory()->createInstanceFor('type'); + $validator->check($value, $schema, $path, $i); + + $this->addErrors($validator->getErrors()); + } + + /** + * Checks a undefined element + * + * @param mixed $value + * @param mixed $schema + * @param mixed $path + * @param mixed $i + */ + protected function checkUndefined($value, $schema = null, $path = null, $i = null) + { + $validator = $this->getFactory()->createInstanceFor('undefined'); + $validator->check($value, $schema, $path, $i); + + $this->addErrors($validator->getErrors()); + } + + /** + * Checks a string element + * + * @param mixed $value + * @param mixed $schema + * @param mixed $path + * @param mixed $i + */ + protected function checkString($value, $schema = null, $path = null, $i = null) + { + $validator = $this->getFactory()->createInstanceFor('string'); + $validator->check($value, $schema, $path, $i); + + $this->addErrors($validator->getErrors()); + } + + /** + * Checks a number element + * + * @param mixed $value + * @param mixed $schema + * @param mixed $path + * @param mixed $i + */ + protected function checkNumber($value, $schema = null, $path = null, $i = null) + { + $validator = $this->getFactory()->createInstanceFor('number'); + $validator->check($value, $schema, $path, $i); + + $this->addErrors($validator->getErrors()); + } + + /** + * Checks a enum element + * + * @param mixed $value + * @param mixed $schema + * @param mixed $path + * @param mixed $i + */ + protected function checkEnum($value, $schema = null, $path = null, $i = null) + { + $validator = $this->getFactory()->createInstanceFor('enum'); + $validator->check($value, $schema, $path, $i); + + $this->addErrors($validator->getErrors()); + } + + protected function checkFormat($value, $schema = null, $path = null, $i = null) + { + $validator = $this->getFactory()->createInstanceFor('format'); + $validator->check($value, $schema, $path, $i); + + $this->addErrors($validator->getErrors()); + } + + /** + * @param string $uri JSON Schema URI + * @return string JSON Schema contents + */ + protected function retrieveUri($uri) + { + if (null === $this->uriRetriever) { + $this->setUriRetriever(new UriRetriever); + } + $jsonSchema = $this->uriRetriever->retrieve($uri); + // TODO validate using schema + return $jsonSchema; + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php new file mode 100644 index 0000000..34280f4 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php @@ -0,0 +1,60 @@ + + */ +interface ConstraintInterface +{ + /** + * returns all collected errors + * + * @return array + */ + public function getErrors(); + + /** + * adds errors to this validator + * + * @param array $errors + */ + public function addErrors(array $errors); + + /** + * adds an error + * + * @param string $path + * @param string $message + * @param string $constraint the constraint/rule that is broken, e.g.: 'minLength' + * @param array $more more array elements to add to the error + */ + public function addError($path, $message, $constraint='', array $more=null); + + /** + * checks if the validator has not raised errors + * + * @return boolean + */ + public function isValid(); + + /** + * invokes the validation of an element + * + * @abstract + * @param mixed $value + * @param mixed $schema + * @param mixed $path + * @param mixed $i + */ + public function check($value, $schema = null, $path = null, $i = null); +} \ No newline at end of file diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php new file mode 100644 index 0000000..df413e4 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php @@ -0,0 +1,46 @@ + + * @author Bruno Prieto Reis + */ +class EnumConstraint extends Constraint +{ + /** + * {@inheritDoc} + */ + public function check($element, $schema = null, $path = null, $i = null) + { + // Only validate enum if the attribute exists + if ($element instanceof UndefinedConstraint && (!isset($schema->required) || !$schema->required)) { + return; + } + + foreach ($schema->enum as $enum) { + $type = gettype($element); + if ($type === gettype($enum)) { + if ($type == "object") { + if ($element == $enum) + return; + } else { + if ($element === $enum) + return; + + } + } + } + + $this->addError($path, "Does not have a value in the enumeration " . print_r($schema->enum, true), 'enum', array('enum' => $schema->enum,)); + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php new file mode 100644 index 0000000..8cd25c1 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php @@ -0,0 +1,96 @@ + 'JsonSchema\Constraints\CollectionConstraint', + 'collection' => 'JsonSchema\Constraints\CollectionConstraint', + 'object' => 'JsonSchema\Constraints\ObjectConstraint', + 'type' => 'JsonSchema\Constraints\TypeConstraint', + 'undefined' => 'JsonSchema\Constraints\UndefinedConstraint', + 'string' => 'JsonSchema\Constraints\StringConstraint', + 'number' => 'JsonSchema\Constraints\NumberConstraint', + 'enum' => 'JsonSchema\Constraints\EnumConstraint', + 'format' => 'JsonSchema\Constraints\FormatConstraint', + 'schema' => 'JsonSchema\Constraints\SchemaConstraint', + 'validator' => 'JsonSchema\Validator', + ); + + /** + * @param UriRetriever $uriRetriever + */ + public function __construct(UriRetriever $uriRetriever = null) + { + if (!$uriRetriever) { + $uriRetriever = new UriRetriever(); + } + + $this->uriRetriever = $uriRetriever; + } + + /** + * @return UriRetriever + */ + public function getUriRetriever() + { + return $this->uriRetriever; + } + + /** + * @param string $name + * @param string $class + * @return Factory + */ + public function setConstraintClass($name, $class) + { + // Ensure class exists + if (!class_exists($class)) { + throw new InvalidArgumentException('Unknown constraint ' . $name); + } + // Ensure class is appropriate + if (!in_array('JsonSchema\Constraints\ConstraintInterface', class_implements($class))) { + throw new InvalidArgumentException('Invalid class ' . $name); + } + $this->constraintMap[$name] = $class; + return $this; + } + + /** + * Create a constraint instance for the given constraint name. + * + * @param string $constraintName + * @return ConstraintInterface|ObjectConstraint + * @throws InvalidArgumentException if is not possible create the constraint instance. + */ + public function createInstanceFor($constraintName) + { + if (array_key_exists($constraintName, $this->constraintMap)) { + return new $this->constraintMap[$constraintName](Constraint::CHECK_MODE_NORMAL, $this->uriRetriever, $this); + } + throw new InvalidArgumentException('Unknown constraint ' . $constraintName); + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php new file mode 100644 index 0000000..c789753 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php @@ -0,0 +1,181 @@ + + * @link http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.23 + */ +class FormatConstraint extends Constraint +{ + /** + * {@inheritDoc} + */ + public function check($element, $schema = null, $path = null, $i = null) + { + if (!isset($schema->format)) { + return; + } + + switch ($schema->format) { + case 'date': + if (!$date = $this->validateDateTime($element, 'Y-m-d')) { + $this->addError($path, sprintf('Invalid date %s, expected format YYYY-MM-DD', json_encode($element)), 'format', array('format' => $schema->format,)); + } + break; + + case 'time': + if (!$this->validateDateTime($element, 'H:i:s')) { + $this->addError($path, sprintf('Invalid time %s, expected format hh:mm:ss', json_encode($element)), 'format', array('format' => $schema->format,)); + } + break; + + case 'date-time': + if (!$this->validateDateTime($element, 'Y-m-d\TH:i:s\Z') && + !$this->validateDateTime($element, 'Y-m-d\TH:i:s.u\Z') && + !$this->validateDateTime($element, 'Y-m-d\TH:i:sP') && + !$this->validateDateTime($element, 'Y-m-d\TH:i:sO') + ) { + $this->addError($path, sprintf('Invalid date-time %s, expected format YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ss+hh:mm', json_encode($element)), 'format', array('format' => $schema->format,)); + } + break; + + case 'utc-millisec': + if (!$this->validateDateTime($element, 'U')) { + $this->addError($path, sprintf('Invalid time %s, expected integer of milliseconds since Epoch', json_encode($element)), 'format', array('format' => $schema->format,)); + } + break; + + case 'regex': + if (!$this->validateRegex($element)) { + $this->addError($path, 'Invalid regex format ' . $element, 'format', array('format' => $schema->format,)); + } + break; + + case 'color': + if (!$this->validateColor($element)) { + $this->addError($path, "Invalid color", 'format', array('format' => $schema->format,)); + } + break; + + case 'style': + if (!$this->validateStyle($element)) { + $this->addError($path, "Invalid style", 'format', array('format' => $schema->format,)); + } + break; + + case 'phone': + if (!$this->validatePhone($element)) { + $this->addError($path, "Invalid phone number", 'format', array('format' => $schema->format,)); + } + break; + + case 'uri': + if (null === filter_var($element, FILTER_VALIDATE_URL, FILTER_NULL_ON_FAILURE)) { + $this->addError($path, "Invalid URL format", 'format', array('format' => $schema->format,)); + } + break; + + case 'email': + if (null === filter_var($element, FILTER_VALIDATE_EMAIL, FILTER_NULL_ON_FAILURE)) { + $this->addError($path, "Invalid email", 'format', array('format' => $schema->format,)); + } + break; + + case 'ip-address': + case 'ipv4': + if (null === filter_var($element, FILTER_VALIDATE_IP, FILTER_NULL_ON_FAILURE | FILTER_FLAG_IPV4)) { + $this->addError($path, "Invalid IP address", 'format', array('format' => $schema->format,)); + } + break; + + case 'ipv6': + if (null === filter_var($element, FILTER_VALIDATE_IP, FILTER_NULL_ON_FAILURE | FILTER_FLAG_IPV6)) { + $this->addError($path, "Invalid IP address", 'format', array('format' => $schema->format,)); + } + break; + + case 'host-name': + case 'hostname': + if (!$this->validateHostname($element)) { + $this->addError($path, "Invalid hostname", 'format', array('format' => $schema->format,)); + } + break; + + default: + // Empty as it should be: + // The value of this keyword is called a format attribute. It MUST be a string. + // A format attribute can generally only validate a given set of instance types. + // If the type of the instance to validate is not in this set, validation for + // this format attribute and instance SHOULD succeed. + // http://json-schema.org/latest/json-schema-validation.html#anchor105 + break; + } + } + + protected function validateDateTime($datetime, $format) + { + $dt = \DateTime::createFromFormat($format, $datetime); + + if (!$dt) { + return false; + } + + if ($datetime === $dt->format($format)) { + return true; + } + + // handles the case where a non-6 digit microsecond datetime is passed + // which will fail the above string comparison because the passed + // $datetime may be '2000-05-01T12:12:12.123Z' but format() will return + // '2000-05-01T12:12:12.123000Z' + if ((strpos('u', $format) !== -1) && (intval($dt->format('u')) > 0)) { + return true; + } + + return false; + } + + protected function validateRegex($regex) + { + return false !== @preg_match('/' . $regex . '/', ''); + } + + protected function validateColor($color) + { + if (in_array(strtolower($color), array('aqua', 'black', 'blue', 'fuchsia', + 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'orange', 'purple', + 'red', 'silver', 'teal', 'white', 'yellow'))) { + return true; + } + + return preg_match('/^#([a-f0-9]{3}|[a-f0-9]{6})$/i', $color); + } + + protected function validateStyle($style) + { + $properties = explode(';', rtrim($style, ';')); + $invalidEntries = preg_grep('/^\s*[-a-z]+\s*:\s*.+$/i', $properties, PREG_GREP_INVERT); + + return empty($invalidEntries); + } + + protected function validatePhone($phone) + { + return preg_match('/^\+?(\(\d{3}\)|\d{3}) \d{3} \d{4}$/', $phone); + } + + protected function validateHostname($host) + { + return preg_match('/^[_a-z]+\.([_a-z]+\.?)+$/i', $host); + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php new file mode 100644 index 0000000..c5aaf6a --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php @@ -0,0 +1,83 @@ + + * @author Bruno Prieto Reis + */ +class NumberConstraint extends Constraint +{ + /** + * {@inheritDoc} + */ + public function check($element, $schema = null, $path = null, $i = null) + { + // Verify minimum + if (isset($schema->exclusiveMinimum)) { + if (isset($schema->minimum)) { + if ($schema->exclusiveMinimum && $element <= $schema->minimum) { + $this->addError($path, "Must have a minimum value of " . $schema->minimum, 'exclusiveMinimum', array('minimum' => $schema->minimum,)); + } else if ($element < $schema->minimum) { + $this->addError($path, "Must have a minimum value of " . $schema->minimum, 'minimum', array('minimum' => $schema->minimum,)); + } + } else { + $this->addError($path, "Use of exclusiveMinimum requires presence of minimum", 'missingMinimum'); + } + } else if (isset($schema->minimum) && $element < $schema->minimum) { + $this->addError($path, "Must have a minimum value of " . $schema->minimum, 'minimum', array('minimum' => $schema->minimum,)); + } + + // Verify maximum + if (isset($schema->exclusiveMaximum)) { + if (isset($schema->maximum)) { + if ($schema->exclusiveMaximum && $element >= $schema->maximum) { + $this->addError($path, "Must have a maximum value of " . $schema->maximum, 'exclusiveMaximum', array('maximum' => $schema->maximum,)); + } else if ($element > $schema->maximum) { + $this->addError($path, "Must have a maximum value of " . $schema->maximum, 'maximum', array('maximum' => $schema->maximum,)); + } + } else { + $this->addError($path, "Use of exclusiveMaximum requires presence of maximum", 'missingMinimum'); + } + } else if (isset($schema->maximum) && $element > $schema->maximum) { + $this->addError($path, "Must have a maximum value of " . $schema->maximum, 'maximum', array('maximum' => $schema->maximum,)); + } + + // Verify divisibleBy - Draft v3 + if (isset($schema->divisibleBy) && $this->fmod($element, $schema->divisibleBy) != 0) { + $this->addError($path, "Is not divisible by " . $schema->divisibleBy, 'divisibleBy', array('divisibleBy' => $schema->divisibleBy,)); + } + + // Verify multipleOf - Draft v4 + if (isset($schema->multipleOf) && $this->fmod($element, $schema->multipleOf) != 0) { + $this->addError($path, "Must be a multiple of " . $schema->multipleOf, 'multipleOf', array('multipleOf' => $schema->multipleOf,)); + } + + $this->checkFormat($element, $schema, $path, $i); + } + + private function fmod($number1, $number2) + { + $modulus = fmod($number1, $number2); + $precision = abs(0.0000000001); + $diff = (float)($modulus - $number2); + + if (-$precision < $diff && $diff < $precision) { + return 0.0; + } + + $decimals1 = mb_strpos($number1, ".") ? mb_strlen($number1) - mb_strpos($number1, ".") - 1 : 0; + $decimals2 = mb_strpos($number2, ".") ? mb_strlen($number2) - mb_strpos($number2, ".") - 1 : 0; + + return (float)round($modulus, max($decimals1, $decimals2)); + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php new file mode 100644 index 0000000..0e5cf1b --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php @@ -0,0 +1,149 @@ + + * @author Bruno Prieto Reis + */ +class ObjectConstraint extends Constraint +{ + /** + * {@inheritDoc} + */ + function check($element, $definition = null, $path = null, $additionalProp = null, $patternProperties = null) + { + if ($element instanceof UndefinedConstraint) { + return; + } + + $matches = array(); + if ($patternProperties) { + $matches = $this->validatePatternProperties($element, $path, $patternProperties); + } + + if ($definition) { + // validate the definition properties + $this->validateDefinition($element, $definition, $path); + } + + // additional the element properties + $this->validateElement($element, $matches, $definition, $path, $additionalProp); + } + + public function validatePatternProperties($element, $path, $patternProperties) + { + $try = array('/','#','+','~','%'); + $matches = array(); + foreach ($patternProperties as $pregex => $schema) { + $delimiter = '/'; + // Choose delimiter. Necessary for patterns like ^/ , otherwise you get error + foreach ($try as $delimiter) { + if (strpos($pregex, $delimiter) === false) { // safe to use + break; + } + } + + // Validate the pattern before using it to test for matches + if (@preg_match($delimiter. $pregex . $delimiter, '') === false) { + $this->addError($path, 'The pattern "' . $pregex . '" is invalid', 'pregex', array('pregex' => $pregex,)); + continue; + } + foreach ($element as $i => $value) { + if (preg_match($delimiter . $pregex . $delimiter, $i)) { + $matches[] = $i; + $this->checkUndefined($value, $schema ? : new \stdClass(), $path, $i); + } + } + } + return $matches; + } + + /** + * Validates the element properties + * + * @param \stdClass $element Element to validate + * @param array $matches Matches from patternProperties (if any) + * @param \stdClass $objectDefinition ObjectConstraint definition + * @param string $path Path to test? + * @param mixed $additionalProp Additional properties + */ + public function validateElement($element, $matches, $objectDefinition = null, $path = null, $additionalProp = null) + { + foreach ($element as $i => $value) { + + $property = $this->getProperty($element, $i, new UndefinedConstraint()); + $definition = $this->getProperty($objectDefinition, $i); + + // no additional properties allowed + if (!in_array($i, $matches) && $additionalProp === false && $this->inlineSchemaProperty !== $i && !$definition) { + $this->addError($path, "The property " . $i . " is not defined and the definition does not allow additional properties", 'additionalProp'); + } + + // additional properties defined + if (!in_array($i, $matches) && $additionalProp && !$definition) { + if ($additionalProp === true) { + $this->checkUndefined($value, null, $path, $i); + } else { + $this->checkUndefined($value, $additionalProp, $path, $i); + } + } + + // property requires presence of another + $require = $this->getProperty($definition, 'requires'); + if ($require && !$this->getProperty($element, $require)) { + $this->addError($path, "The presence of the property " . $i . " requires that " . $require . " also be present", 'requires'); + } + + if (!$definition) { + // normal property verification + $this->checkUndefined($value, new \stdClass(), $path, $i); + } + } + } + + /** + * Validates the definition properties + * + * @param \stdClass $element Element to validate + * @param \stdClass $objectDefinition ObjectConstraint definition + * @param string $path Path? + */ + public function validateDefinition($element, $objectDefinition = null, $path = null) + { + foreach ($objectDefinition as $i => $value) { + $property = $this->getProperty($element, $i, new UndefinedConstraint()); + $definition = $this->getProperty($objectDefinition, $i); + $this->checkUndefined($property, $definition, $path, $i); + } + } + + /** + * retrieves a property from an object or array + * + * @param mixed $element Element to validate + * @param string $property Property to retrieve + * @param mixed $fallback Default value if property is not found + * + * @return mixed + */ + protected function getProperty($element, $property, $fallback = null) + { + if (is_array($element) /*$this->checkMode == self::CHECK_MODE_TYPE_CAST*/) { + return array_key_exists($property, $element) ? $element[$property] : $fallback; + } elseif (is_object($element)) { + return property_exists($element, $property) ? $element->$property : $fallback; + } + + return $fallback; + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php new file mode 100644 index 0000000..b856a11 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php @@ -0,0 +1,37 @@ + + * @author Bruno Prieto Reis + */ +class SchemaConstraint extends Constraint +{ + /** + * {@inheritDoc} + */ + public function check($element, $schema = null, $path = null, $i = null) + { + if ($schema !== null) { + // passed schema + $this->checkUndefined($element, $schema, '', ''); + } elseif (property_exists($element, $this->inlineSchemaProperty)) { + // inline schema + $this->checkUndefined($element, $element->{$this->inlineSchemaProperty}, '', ''); + } else { + throw new InvalidArgumentException('no schema found to verify against'); + } + } +} \ No newline at end of file diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php new file mode 100644 index 0000000..f57f64c --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php @@ -0,0 +1,57 @@ + + * @author Bruno Prieto Reis + */ +class StringConstraint extends Constraint +{ + /** + * {@inheritDoc} + */ + public function check($element, $schema = null, $path = null, $i = null) + { + // Verify maxLength + if (isset($schema->maxLength) && $this->strlen($element) > $schema->maxLength) { + $this->addError($path, "Must be at most " . $schema->maxLength . " characters long", 'maxLength', array( + 'maxLength' => $schema->maxLength, + )); + } + + //verify minLength + if (isset($schema->minLength) && $this->strlen($element) < $schema->minLength) { + $this->addError($path, "Must be at least " . $schema->minLength . " characters long", 'minLength', array( + 'minLength' => $schema->minLength, + )); + } + + // Verify a regex pattern + if (isset($schema->pattern) && !preg_match('#' . str_replace('#', '\\#', $schema->pattern) . '#', $element)) { + $this->addError($path, "Does not match the regex pattern " . $schema->pattern, 'pattern', array( + 'pattern' => $schema->pattern, + )); + } + + $this->checkFormat($element, $schema, $path, $i); + } + + private function strlen($string) + { + if (extension_loaded('mbstring')) { + return mb_strlen($string, mb_detect_encoding($string)); + } else { + return strlen($string); + } + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php new file mode 100644 index 0000000..837cfd8 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php @@ -0,0 +1,145 @@ + + * @author Bruno Prieto Reis + */ +class TypeConstraint extends Constraint +{ + /** + * @var array|string[] type wordings for validation error messages + */ + static $wording = array( + 'integer' => 'an integer', + 'number' => 'a number', + 'boolean' => 'a boolean', + 'object' => 'an object', + 'array' => 'an array', + 'string' => 'a string', + 'null' => 'a null', + 'any' => NULL, // validation of 'any' is always true so is not needed in message wording + 0 => NULL, // validation of a false-y value is always true, so not needed as well + ); + + /** + * {@inheritDoc} + */ + public function check($value = null, $schema = null, $path = null, $i = null) + { + $type = isset($schema->type) ? $schema->type : null; + $isValid = true; + + if (is_array($type)) { + // @TODO refactor + $validatedOneType = false; + $errors = array(); + foreach ($type as $tp) { + $validator = new TypeConstraint($this->checkMode); + $subSchema = new \stdClass(); + $subSchema->type = $tp; + $validator->check($value, $subSchema, $path, null); + $error = $validator->getErrors(); + + if (!count($error)) { + $validatedOneType = true; + break; + } + + $errors = $error; + } + + if (!$validatedOneType) { + $this->addErrors($errors); + + return; + } + } elseif (is_object($type)) { + $this->checkUndefined($value, $type, $path); + } else { + $isValid = $this->validateType($value, $type); + } + + if ($isValid === false) { + if (!isset(self::$wording[$type])) { + throw new StandardUnexpectedValueException( + sprintf( + "No wording for %s available, expected wordings are: [%s]", + var_export($type, true), + implode(', ', array_filter(self::$wording))) + ); + } + $this->addError($path, ucwords(gettype($value)) . " value found, but " . self::$wording[$type] . " is required", 'type'); + } + } + + /** + * Verifies that a given value is of a certain type + * + * @param mixed $value Value to validate + * @param string $type TypeConstraint to check against + * + * @return boolean + * + * @throws InvalidArgumentException + */ + protected function validateType($value, $type) + { + //mostly the case for inline schema + if (!$type) { + return true; + } + + if ('integer' === $type) { + return is_int($value); + } + + if ('number' === $type) { + return is_numeric($value) && !is_string($value); + } + + if ('boolean' === $type) { + return is_bool($value); + } + + if ('object' === $type) { + return is_object($value); + //return ($this::CHECK_MODE_TYPE_CAST == $this->checkMode) ? is_array($value) : is_object($value); + } + + if ('array' === $type) { + return is_array($value); + } + + if ('string' === $type) { + return is_string($value); + } + + if ('email' === $type) { + return is_string($value); + } + + if ('null' === $type) { + return is_null($value); + } + + if ('any' === $type) { + return true; + } + + throw new InvalidArgumentException((is_object($value) ? 'object' : $value) . ' is an invalid type for ' . $type); + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php new file mode 100644 index 0000000..c033720 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php @@ -0,0 +1,307 @@ + + * @author Bruno Prieto Reis + */ +class UndefinedConstraint extends Constraint +{ + /** + * {@inheritDoc} + */ + public function check($value, $schema = null, $path = null, $i = null) + { + if (is_null($schema)) { + return; + } + + if (!is_object($schema)) { + throw new InvalidArgumentException( + 'Given schema must be an object in ' . $path + . ' but is a ' . gettype($schema) + ); + } + + $i = is_null($i) ? "" : $i; + $path = $this->incrementPath($path, $i); + + // check special properties + $this->validateCommonProperties($value, $schema, $path); + + // check allOf, anyOf, and oneOf properties + $this->validateOfProperties($value, $schema, $path); + + // check known types + $this->validateTypes($value, $schema, $path, $i); + } + + /** + * Validates the value against the types + * + * @param mixed $value + * @param mixed $schema + * @param string $path + * @param string $i + */ + public function validateTypes($value, $schema = null, $path = null, $i = null) + { + // check array + if (is_array($value)) { + $this->checkArray($value, $schema, $path, $i); + } + + // check object + if (is_object($value) && (isset($schema->properties) || isset($schema->patternProperties) || isset($schema->additionalProperties))) { + $this->checkObject( + $value, + isset($schema->properties) ? $schema->properties : null, + $path, + isset($schema->additionalProperties) ? $schema->additionalProperties : null, + isset($schema->patternProperties) ? $schema->patternProperties : null + ); + } + + // check string + if (is_string($value)) { + $this->checkString($value, $schema, $path, $i); + } + + // check numeric + if (is_numeric($value)) { + $this->checkNumber($value, $schema, $path, $i); + } + + // check enum + if (isset($schema->enum)) { + $this->checkEnum($value, $schema, $path, $i); + } + } + + /** + * Validates common properties + * + * @param mixed $value + * @param mixed $schema + * @param string $path + * @param string $i + */ + protected function validateCommonProperties($value, $schema = null, $path = null, $i = "") + { + // if it extends another schema, it must pass that schema as well + if (isset($schema->extends)) { + if (is_string($schema->extends)) { + $schema->extends = $this->validateUri($schema, $schema->extends); + } + if (is_array($schema->extends)) { + foreach ($schema->extends as $extends) { + $this->checkUndefined($value, $extends, $path, $i); + } + } else { + $this->checkUndefined($value, $schema->extends, $path, $i); + } + } + + // Verify required values + if (is_object($value)) { + if (!($value instanceof UndefinedConstraint) && isset($schema->required) && is_array($schema->required) ) { + // Draft 4 - Required is an array of strings - e.g. "required": ["foo", ...] + foreach ($schema->required as $required) { + if (!property_exists($value, $required)) { + $this->addError((!$path) ? $required : "$path.$required", "The property " . $required . " is required", 'required'); + } + } + } else if (isset($schema->required) && !is_array($schema->required)) { + // Draft 3 - Required attribute - e.g. "foo": {"type": "string", "required": true} + if ( $schema->required && $value instanceof UndefinedConstraint) { + $this->addError($path, "Is missing and it is required", 'required'); + } + } + } + + // Verify type + if (!($value instanceof UndefinedConstraint)) { + $this->checkType($value, $schema, $path); + } + + // Verify disallowed items + if (isset($schema->disallow)) { + $initErrors = $this->getErrors(); + + $typeSchema = new \stdClass(); + $typeSchema->type = $schema->disallow; + $this->checkType($value, $typeSchema, $path); + + // if no new errors were raised it must be a disallowed value + if (count($this->getErrors()) == count($initErrors)) { + $this->addError($path, "Disallowed value was matched", 'disallow'); + } else { + $this->errors = $initErrors; + } + } + + if (isset($schema->not)) { + $initErrors = $this->getErrors(); + $this->checkUndefined($value, $schema->not, $path, $i); + + // if no new errors were raised then the instance validated against the "not" schema + if (count($this->getErrors()) == count($initErrors)) { + $this->addError($path, "Matched a schema which it should not", 'not'); + } else { + $this->errors = $initErrors; + } + } + + // Verify minimum and maximum number of properties + if (is_object($value)) { + if (isset($schema->minProperties)) { + if (count(get_object_vars($value)) < $schema->minProperties) { + $this->addError($path, "Must contain a minimum of " . $schema->minProperties . " properties", 'minProperties', array('minProperties' => $schema->minProperties,)); + } + } + if (isset($schema->maxProperties)) { + if (count(get_object_vars($value)) > $schema->maxProperties) { + $this->addError($path, "Must contain no more than " . $schema->maxProperties . " properties", 'maxProperties', array('maxProperties' => $schema->maxProperties,)); + } + } + } + + // Verify that dependencies are met + if (is_object($value) && isset($schema->dependencies)) { + $this->validateDependencies($value, $schema->dependencies, $path); + } + } + + /** + * Validate allOf, anyOf, and oneOf properties + * + * @param mixed $value + * @param mixed $schema + * @param string $path + * @param string $i + */ + protected function validateOfProperties($value, $schema, $path, $i = "") + { + // Verify type + if ($value instanceof UndefinedConstraint) { + return; + } + + if (isset($schema->allOf)) { + $isValid = true; + foreach ($schema->allOf as $allOf) { + $initErrors = $this->getErrors(); + $this->checkUndefined($value, $allOf, $path, $i); + $isValid = $isValid && (count($this->getErrors()) == count($initErrors)); + } + if (!$isValid) { + $this->addError($path, "Failed to match all schemas", 'allOf'); + } + } + + if (isset($schema->anyOf)) { + $isValid = false; + $startErrors = $this->getErrors(); + foreach ($schema->anyOf as $anyOf) { + $initErrors = $this->getErrors(); + $this->checkUndefined($value, $anyOf, $path, $i); + if ($isValid = (count($this->getErrors()) == count($initErrors))) { + break; + } + } + if (!$isValid) { + $this->addError($path, "Failed to match at least one schema", 'anyOf'); + } else { + $this->errors = $startErrors; + } + } + + if (isset($schema->oneOf)) { + $allErrors = array(); + $matchedSchemas = 0; + $startErrors = $this->getErrors(); + foreach ($schema->oneOf as $oneOf) { + $this->errors = array(); + $this->checkUndefined($value, $oneOf, $path, $i); + if (count($this->getErrors()) == 0) { + $matchedSchemas++; + } + $allErrors = array_merge($allErrors, array_values($this->getErrors())); + } + if ($matchedSchemas !== 1) { + $this->addErrors( + array_merge( + $allErrors, + array(array( + 'property' => $path, + 'message' => "Failed to match exactly one schema", + 'constraint' => 'oneOf', + ),), + $startErrors + ) + ); + } else { + $this->errors = $startErrors; + } + } + } + + /** + * Validate dependencies + * + * @param mixed $value + * @param mixed $dependencies + * @param string $path + * @param string $i + */ + protected function validateDependencies($value, $dependencies, $path, $i = "") + { + foreach ($dependencies as $key => $dependency) { + if (property_exists($value, $key)) { + if (is_string($dependency)) { + // Draft 3 string is allowed - e.g. "dependencies": {"bar": "foo"} + if (!property_exists($value, $dependency)) { + $this->addError($path, "$key depends on $dependency and $dependency is missing", 'dependencies'); + } + } else if (is_array($dependency)) { + // Draft 4 must be an array - e.g. "dependencies": {"bar": ["foo"]} + foreach ($dependency as $d) { + if (!property_exists($value, $d)) { + $this->addError($path, "$key depends on $d and $d is missing", 'dependencies'); + } + } + } else if (is_object($dependency)) { + // Schema - e.g. "dependencies": {"bar": {"properties": {"foo": {...}}}} + $this->checkUndefined($value, $dependency, $path, $i); + } + } + } + } + + protected function validateUri($schema, $schemaUri = null) + { + $resolver = new UriResolver(); + $retriever = $this->getUriRetriever(); + + $jsonSchema = null; + if ($resolver->isValid($schemaUri)) { + $schemaId = property_exists($schema, 'id') ? $schema->id : null; + $jsonSchema = $retriever->retrieve($schemaId, $schemaUri); + } + + return $jsonSchema; + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php new file mode 100644 index 0000000..ec702a7 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php @@ -0,0 +1,17 @@ + + * @see README.md + */ +class RefResolver +{ + /** + * HACK to prevent too many recursive expansions. + * Happens e.g. when you want to validate a schema against the schema + * definition. + * + * @var integer + */ + protected static $depth = 0; + + /** + * maximum references depth + * @var integer + */ + public static $maxDepth = 7; + + /** + * @var UriRetrieverInterface + */ + protected $uriRetriever = null; + + /** + * @var object + */ + protected $rootSchema = null; + + /** + * @param UriRetriever $retriever + */ + public function __construct($retriever = null) + { + $this->uriRetriever = $retriever; + } + + /** + * Retrieves a given schema given a ref and a source URI + * + * @param string $ref Reference from schema + * @param string $sourceUri URI where original schema was located + * @return object Schema + */ + public function fetchRef($ref, $sourceUri) + { + $retriever = $this->getUriRetriever(); + $jsonSchema = $retriever->retrieve($ref, $sourceUri); + $this->resolve($jsonSchema); + + return $jsonSchema; + } + + /** + * Return the URI Retriever, defaulting to making a new one if one + * was not yet set. + * + * @return UriRetriever + */ + public function getUriRetriever() + { + if (is_null($this->uriRetriever)) { + $this->setUriRetriever(new UriRetriever); + } + + return $this->uriRetriever; + } + + /** + * Resolves all $ref references for a given schema. Recurses through + * the object to resolve references of any child schemas. + * + * The 'format' property is omitted because it isn't required for + * validation. Theoretically, this class could be extended to look + * for URIs in formats: "These custom formats MAY be expressed as + * an URI, and this URI MAY reference a schema of that format." + * + * The 'id' property is not filled in, but that could be made to happen. + * + * @param object $schema JSON Schema to flesh out + * @param string $sourceUri URI where this schema was located + */ + public function resolve($schema, $sourceUri = null) + { + if (self::$depth > self::$maxDepth) { + self::$depth = 0; + throw new JsonDecodingException(JSON_ERROR_DEPTH); + } + ++self::$depth; + + if (! is_object($schema)) { + --self::$depth; + return; + } + + if (null === $sourceUri && ! empty($schema->id)) { + $sourceUri = $schema->id; + } + + if (null === $this->rootSchema) { + $this->rootSchema = $schema; + } + + // Resolve $ref first + $this->resolveRef($schema, $sourceUri); + + // These properties are just schemas + // eg. items can be a schema or an array of schemas + foreach (array('additionalItems', 'additionalProperties', 'extends', 'items') as $propertyName) { + $this->resolveProperty($schema, $propertyName, $sourceUri); + } + + // These are all potentially arrays that contain schema objects + // eg. type can be a value or an array of values/schemas + // eg. items can be a schema or an array of schemas + foreach (array('disallow', 'extends', 'items', 'type', 'allOf', 'anyOf', 'oneOf') as $propertyName) { + $this->resolveArrayOfSchemas($schema, $propertyName, $sourceUri); + } + + // These are all objects containing properties whose values are schemas + foreach (array('dependencies', 'patternProperties', 'properties') as $propertyName) { + $this->resolveObjectOfSchemas($schema, $propertyName, $sourceUri); + } + + --self::$depth; + } + + /** + * Given an object and a property name, that property should be an + * array whose values can be schemas. + * + * @param object $schema JSON Schema to flesh out + * @param string $propertyName Property to work on + * @param string $sourceUri URI where this schema was located + */ + public function resolveArrayOfSchemas($schema, $propertyName, $sourceUri) + { + if (! isset($schema->$propertyName) || ! is_array($schema->$propertyName)) { + return; + } + + foreach ($schema->$propertyName as $possiblySchema) { + $this->resolve($possiblySchema, $sourceUri); + } + } + + /** + * Given an object and a property name, that property should be an + * object whose properties are schema objects. + * + * @param object $schema JSON Schema to flesh out + * @param string $propertyName Property to work on + * @param string $sourceUri URI where this schema was located + */ + public function resolveObjectOfSchemas($schema, $propertyName, $sourceUri) + { + if (! isset($schema->$propertyName) || ! is_object($schema->$propertyName)) { + return; + } + + foreach (get_object_vars($schema->$propertyName) as $possiblySchema) { + $this->resolve($possiblySchema, $sourceUri); + } + } + + /** + * Given an object and a property name, that property should be a + * schema object. + * + * @param object $schema JSON Schema to flesh out + * @param string $propertyName Property to work on + * @param string $sourceUri URI where this schema was located + */ + public function resolveProperty($schema, $propertyName, $sourceUri) + { + if (! isset($schema->$propertyName)) { + return; + } + + $this->resolve($schema->$propertyName, $sourceUri); + } + + /** + * Look for the $ref property in the object. If found, remove the + * reference and augment this object with the contents of another + * schema. + * + * @param object $schema JSON Schema to flesh out + * @param string $sourceUri URI where this schema was located + */ + public function resolveRef($schema, $sourceUri) + { + $ref = '$ref'; + + if (empty($schema->$ref)) { + return; + } + + $splitRef = explode('#', $schema->$ref, 2); + + $refDoc = $splitRef[0]; + $refPath = null; + if (count($splitRef) === 2) { + $refPath = explode('/', $splitRef[1]); + array_shift($refPath); + } + + if (empty($refDoc) && empty($refPath)) { + // TODO: Not yet implemented - root pointer ref, causes recursion issues + return; + } + + if (!empty($refDoc)) { + $refSchema = $this->fetchRef($refDoc, $sourceUri); + } else { + $refSchema = $this->rootSchema; + } + + if (null !== $refPath) { + $refSchema = $this->resolveRefSegment($refSchema, $refPath); + } + + unset($schema->$ref); + + // Augment the current $schema object with properties fetched + foreach (get_object_vars($refSchema) as $prop => $value) { + $schema->$prop = $value; + } + } + + /** + * Set URI Retriever for use with the Ref Resolver + * + * @param UriRetriever $retriever + * @return $this for chaining + */ + public function setUriRetriever(UriRetriever $retriever) + { + $this->uriRetriever = $retriever; + + return $this; + } + + protected function resolveRefSegment($data, $pathParts) + { + foreach ($pathParts as $path) { + $path = strtr($path, array('~1' => '/', '~0' => '~', '%25' => '%')); + + if (is_array($data)) { + $data = $data[$path]; + } else { + $data = $data->{$path}; + } + } + + return $data; + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php new file mode 100644 index 0000000..f924ad8 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php @@ -0,0 +1,29 @@ + + */ +abstract class AbstractRetriever implements UriRetrieverInterface +{ + /** + * Media content type + * @var string + */ + protected $contentType; + + /** + * {@inheritDoc} + * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::getContentType() + */ + public function getContentType() + { + return $this->contentType; + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php new file mode 100644 index 0000000..cd8414f --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php @@ -0,0 +1,79 @@ + + */ +class Curl extends AbstractRetriever +{ + protected $messageBody; + + public function __construct() + { + if (!function_exists('curl_init')) { + throw new \RuntimeException("cURL not installed"); + } + } + + /** + * {@inheritDoc} + * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::retrieve() + */ + public function retrieve($uri) + { + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $uri); + curl_setopt($ch, CURLOPT_HEADER, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: ' . Validator::SCHEMA_MEDIA_TYPE)); + + $response = curl_exec($ch); + if (false === $response) { + throw new \JsonSchema\Exception\ResourceNotFoundException('JSON schema not found'); + } + + $this->fetchMessageBody($response); + $this->fetchContentType($response); + + curl_close($ch); + + return $this->messageBody; + } + + /** + * @param string $response cURL HTTP response + */ + private function fetchMessageBody($response) + { + preg_match("/(?:\r\n){2}(.*)$/ms", $response, $match); + $this->messageBody = $match[1]; + } + + /** + * @param string $response cURL HTTP response + * @return boolean Whether the Content-Type header was found or not + */ + protected function fetchContentType($response) + { + if (0 < preg_match("/Content-Type:(\V*)/ims", $response, $match)) { + $this->contentType = trim($match[1]); + + return true; + } + + return false; + } +} \ No newline at end of file diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php new file mode 100644 index 0000000..bc43de6 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php @@ -0,0 +1,87 @@ + + */ +class FileGetContents extends AbstractRetriever +{ + protected $messageBody; + + /** + * {@inheritDoc} + * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::retrieve() + */ + public function retrieve($uri) + { + $context = stream_context_create(array( + 'http' => array( + 'method' => 'GET', + 'header' => "Accept: " . Validator::SCHEMA_MEDIA_TYPE + ))); + + set_error_handler(function() use ($uri) { + throw new ResourceNotFoundException('JSON schema not found at ' . $uri); + }); + $response = file_get_contents($uri); + restore_error_handler(); + + if (false === $response) { + throw new ResourceNotFoundException('JSON schema not found at ' . $uri); + } + if ($response == '' + && substr($uri, 0, 7) == 'file://' && substr($uri, -1) == '/' + ) { + throw new ResourceNotFoundException('JSON schema not found at ' . $uri); + } + + $this->messageBody = $response; + if (! empty($http_response_header)) { + $this->fetchContentType($http_response_header); + } else { + // Could be a "file://" url or something else - fake up the response + $this->contentType = null; + } + + return $this->messageBody; + } + + /** + * @param array $headers HTTP Response Headers + * @return boolean Whether the Content-Type header was found or not + */ + private function fetchContentType(array $headers) + { + foreach ($headers as $header) { + if ($this->contentType = self::getContentTypeMatchInHeader($header)) { + return true; + } + } + + return false; + } + + /** + * @param string $header + * @return string|null + */ + protected static function getContentTypeMatchInHeader($header) + { + if (0 < preg_match("/Content-Type:(\V*)/ims", $header, $match)) { + return trim($match[1]); + } + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php new file mode 100644 index 0000000..7652c42 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php @@ -0,0 +1,54 @@ + '{ ... }', + * 'http://acme.com/schemas/address#' => '{ ... }', + * )) + * + * $schema = $retriever->retrieve('http://acme.com/schemas/person#'); + */ +class PredefinedArray extends AbstractRetriever +{ + /** + * Contains schemas as URI => JSON + * @var array + */ + private $schemas; + + /** + * Constructor + * + * @param array $schemas + * @param string $contentType + */ + public function __construct(array $schemas, $contentType = Validator::SCHEMA_MEDIA_TYPE) + { + $this->schemas = $schemas; + $this->contentType = $contentType; + } + + /** + * {@inheritDoc} + * @see \JsonSchema\Uri\Retrievers\UriRetrieverInterface::retrieve() + */ + public function retrieve($uri) + { + if (!array_key_exists($uri, $this->schemas)) { + throw new \JsonSchema\Exception\ResourceNotFoundException(sprintf( + 'The JSON schema "%s" was not found.', + $uri + )); + } + + return $this->schemas[$uri]; + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php new file mode 100644 index 0000000..c324998 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php @@ -0,0 +1,32 @@ + + */ +interface UriRetrieverInterface +{ + /** + * Retrieve a schema from the specified URI + * @param string $uri URI that resolves to a JSON schema + * @throws \JsonSchema\Exception\ResourceNotFoundException + * @return mixed string|null + */ + public function retrieve($uri); + + /** + * Get media content type + * @return string + */ + public function getContentType(); +} \ No newline at end of file diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php new file mode 100644 index 0000000..9784114 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php @@ -0,0 +1,157 @@ + + */ +class UriResolver +{ + /** + * Parses a URI into five main components + * + * @param string $uri + * @return array + */ + public function parse($uri) + { + preg_match('|^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?|', $uri, $match); + + $components = array(); + if (5 < count($match)) { + $components = array( + 'scheme' => $match[2], + 'authority' => $match[4], + 'path' => $match[5] + ); + } + if (7 < count($match)) { + $components['query'] = $match[7]; + } + if (9 < count($match)) { + $components['fragment'] = $match[9]; + } + + return $components; + } + + /** + * Builds a URI based on n array with the main components + * + * @param array $components + * @return string + */ + public function generate(array $components) + { + $uri = $components['scheme'] . '://' + . $components['authority'] + . $components['path']; + + if (array_key_exists('query', $components)) { + $uri .= $components['query']; + } + if (array_key_exists('fragment', $components)) { + $uri .= '#' . $components['fragment']; + } + + return $uri; + } + + /** + * Resolves a URI + * + * @param string $uri Absolute or relative + * @param string $baseUri Optional base URI + * @return string Absolute URI + */ + public function resolve($uri, $baseUri = null) + { + if ($uri == '') { + return $baseUri; + } + + $components = $this->parse($uri); + $path = $components['path']; + + if (! empty($components['scheme'])) { + return $uri; + } + $baseComponents = $this->parse($baseUri); + $basePath = $baseComponents['path']; + + $baseComponents['path'] = self::combineRelativePathWithBasePath($path, $basePath); + if (isset($components['fragment'])) { + $baseComponents['fragment'] = $components['fragment']; + } + + return $this->generate($baseComponents); + } + + /** + * Tries to glue a relative path onto an absolute one + * + * @param string $relativePath + * @param string $basePath + * @return string Merged path + * @throws UriResolverException + */ + public static function combineRelativePathWithBasePath($relativePath, $basePath) + { + $relativePath = self::normalizePath($relativePath); + if ($relativePath == '') { + return $basePath; + } + if ($relativePath{0} == '/') { + return $relativePath; + } + + $basePathSegments = explode('/', $basePath); + + preg_match('|^/?(\.\./(?:\./)*)*|', $relativePath, $match); + $numLevelUp = strlen($match[0]) /3 + 1; + if ($numLevelUp >= count($basePathSegments)) { + throw new UriResolverException(sprintf("Unable to resolve URI '%s' from base '%s'", $relativePath, $basePath)); + } + + $basePathSegments = array_slice($basePathSegments, 0, -$numLevelUp); + $path = preg_replace('|^/?(\.\./(\./)*)*|', '', $relativePath); + + return implode('/', $basePathSegments) . '/' . $path; + } + + /** + * Normalizes a URI path component by removing dot-slash and double slashes + * + * @param string $path + * @return string + */ + private static function normalizePath($path) + { + $path = preg_replace('|((?parse($uri); + + return !empty($components); + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php new file mode 100644 index 0000000..c723cd9 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php @@ -0,0 +1,289 @@ + + */ +class UriRetriever +{ + /** + * @var null|UriRetrieverInterface + */ + protected $uriRetriever = null; + + /** + * @var array|object[] + * @see loadSchema + */ + private $schemaCache = array(); + + /** + * Guarantee the correct media type was encountered + * + * @param UriRetrieverInterface $uriRetriever + * @param string $uri + * @return bool|void + */ + public function confirmMediaType($uriRetriever, $uri) + { + $contentType = $uriRetriever->getContentType(); + + if (is_null($contentType)) { + // Well, we didn't get an invalid one + return; + } + + if (Validator::SCHEMA_MEDIA_TYPE === $contentType) { + return; + } + + if (substr($uri, 0, 23) == 'http://json-schema.org/') { + //HACK; they deliver broken content types + return true; + } + + throw new InvalidSchemaMediaTypeException(sprintf('Media type %s expected', Validator::SCHEMA_MEDIA_TYPE)); + } + + /** + * Get a URI Retriever + * + * If none is specified, sets a default FileGetContents retriever and + * returns that object. + * + * @return UriRetrieverInterface + */ + public function getUriRetriever() + { + if (is_null($this->uriRetriever)) { + $this->setUriRetriever(new FileGetContents); + } + + return $this->uriRetriever; + } + + /** + * Resolve a schema based on pointer + * + * URIs can have a fragment at the end in the format of + * #/path/to/object and we are to look up the 'path' property of + * the first object then the 'to' and 'object' properties. + * + * @param object $jsonSchema JSON Schema contents + * @param string $uri JSON Schema URI + * @return object JSON Schema after walking down the fragment pieces + * + * @throws ResourceNotFoundException + */ + public function resolvePointer($jsonSchema, $uri) + { + $resolver = new UriResolver(); + $parsed = $resolver->parse($uri); + if (empty($parsed['fragment'])) { + return $jsonSchema; + } + + $path = explode('/', $parsed['fragment']); + while ($path) { + $pathElement = array_shift($path); + if (! empty($pathElement)) { + $pathElement = str_replace('~1', '/', $pathElement); + $pathElement = str_replace('~0', '~', $pathElement); + if (! empty($jsonSchema->$pathElement)) { + $jsonSchema = $jsonSchema->$pathElement; + } else { + throw new ResourceNotFoundException( + 'Fragment "' . $parsed['fragment'] . '" not found' + . ' in ' . $uri + ); + } + + if (! is_object($jsonSchema)) { + throw new ResourceNotFoundException( + 'Fragment part "' . $pathElement . '" is no object ' + . ' in ' . $uri + ); + } + } + } + + return $jsonSchema; + } + + /** + * Retrieve a URI + * + * @param string $uri JSON Schema URI + * @param string|null $baseUri + * @return object JSON Schema contents + */ + public function retrieve($uri, $baseUri = null) + { + $resolver = new UriResolver(); + $resolvedUri = $fetchUri = $resolver->resolve($uri, $baseUri); + + //fetch URL without #fragment + $arParts = $resolver->parse($resolvedUri); + if (isset($arParts['fragment'])) { + unset($arParts['fragment']); + $fetchUri = $resolver->generate($arParts); + } + + $jsonSchema = $this->loadSchema($fetchUri); + + // Use the JSON pointer if specified + $jsonSchema = $this->resolvePointer($jsonSchema, $resolvedUri); + + if ($jsonSchema instanceof \stdClass) { + $jsonSchema->id = $resolvedUri; + } + + return $jsonSchema; + } + + /** + * Fetch a schema from the given URI, json-decode it and return it. + * Caches schema objects. + * + * @param string $fetchUri Absolute URI + * + * @return object JSON schema object + */ + protected function loadSchema($fetchUri) + { + if (isset($this->schemaCache[$fetchUri])) { + return $this->schemaCache[$fetchUri]; + } + + $uriRetriever = $this->getUriRetriever(); + $contents = $this->uriRetriever->retrieve($fetchUri); + $this->confirmMediaType($uriRetriever, $fetchUri); + $jsonSchema = json_decode($contents); + + if (JSON_ERROR_NONE < $error = json_last_error()) { + throw new JsonDecodingException($error); + } + + $this->schemaCache[$fetchUri] = $jsonSchema; + + return $jsonSchema; + } + + /** + * Set the URI Retriever + * + * @param UriRetrieverInterface $uriRetriever + * @return $this for chaining + */ + public function setUriRetriever(UriRetrieverInterface $uriRetriever) + { + $this->uriRetriever = $uriRetriever; + + return $this; + } + + /** + * Parses a URI into five main components + * + * @param string $uri + * @return array + */ + public function parse($uri) + { + preg_match('|^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?|', $uri, $match); + + $components = array(); + if (5 < count($match)) { + $components = array( + 'scheme' => $match[2], + 'authority' => $match[4], + 'path' => $match[5] + ); + } + + if (7 < count($match)) { + $components['query'] = $match[7]; + } + + if (9 < count($match)) { + $components['fragment'] = $match[9]; + } + + return $components; + } + + /** + * Builds a URI based on n array with the main components + * + * @param array $components + * @return string + */ + public function generate(array $components) + { + $uri = $components['scheme'] . '://' + . $components['authority'] + . $components['path']; + + if (array_key_exists('query', $components)) { + $uri .= $components['query']; + } + + if (array_key_exists('fragment', $components)) { + $uri .= $components['fragment']; + } + + return $uri; + } + + /** + * Resolves a URI + * + * @param string $uri Absolute or relative + * @param string $baseUri Optional base URI + * @return string + */ + public function resolve($uri, $baseUri = null) + { + $components = $this->parse($uri); + $path = $components['path']; + + if ((array_key_exists('scheme', $components)) && ('http' === $components['scheme'])) { + return $uri; + } + + $baseComponents = $this->parse($baseUri); + $basePath = $baseComponents['path']; + + $baseComponents['path'] = UriResolver::combineRelativePathWithBasePath($path, $basePath); + + return $this->generate($baseComponents); + } + + /** + * @param string $uri + * @return boolean + */ + public function isValid($uri) + { + $components = $this->parse($uri); + + return !empty($components); + } +} diff --git a/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php new file mode 100644 index 0000000..14dbb60 --- /dev/null +++ b/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php @@ -0,0 +1,40 @@ + + * @author Bruno Prieto Reis + * @see README.md + */ +class Validator extends Constraint +{ + const SCHEMA_MEDIA_TYPE = 'application/schema+json'; + + /** + * Validates the given data against the schema and returns an object containing the results + * Both the php object and the schema are supposed to be a result of a json_decode call. + * The validation works as defined by the schema proposal in http://json-schema.org + * + * {@inheritDoc} + */ + public function check($value, $schema = null, $path = null, $i = null) + { + $validator = $this->getFactory()->createInstanceFor('schema'); + $validator->check($value, $schema); + + $this->addErrors(array_unique($validator->getErrors(), SORT_REGULAR)); + } +} diff --git a/vendor/kherge/version/.gitignore b/vendor/kherge/version/.gitignore new file mode 100644 index 0000000..5580651 --- /dev/null +++ b/vendor/kherge/version/.gitignore @@ -0,0 +1,5 @@ +.* +!.gitignore +!.travis.yml +composer.lock +coverage/ diff --git a/vendor/kherge/version/.travis.yml b/vendor/kherge/version/.travis.yml new file mode 100644 index 0000000..82dda1c --- /dev/null +++ b/vendor/kherge/version/.travis.yml @@ -0,0 +1,5 @@ +language: php + +php: + - 5.3 + - 5.4 diff --git a/vendor/kherge/version/LICENSE b/vendor/kherge/version/LICENSE new file mode 100644 index 0000000..e1550be --- /dev/null +++ b/vendor/kherge/version/LICENSE @@ -0,0 +1,18 @@ +Copyright (c) 2012 Kevin Herrera + +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. \ No newline at end of file diff --git a/vendor/kherge/version/README.md b/vendor/kherge/version/README.md new file mode 100644 index 0000000..1fa0b22 --- /dev/null +++ b/vendor/kherge/version/README.md @@ -0,0 +1,21 @@ +# Version + +[![Build Status](https://secure.travis-ci.org/kherge/Version.png?branch=master)](http://travis-ci.org/kherge/Version) + +A parsing and comparison library for [semantic versioning](http://semver.org/). + +## Installing + +To install Version, you must add it to the list of dependencies in your [`composer.json`][Composer] file. + + $ php composer.phar require kherge/version=1.* + +If you are not using Composer to manage your dependencies, you may use any [PSR-0][PSR-0] class loader to load it from the `src/lib` directory. + +## Usage + +Please see [the wiki][wiki] for detail usage information. + +[Composer]: http://getcomposer.org/ +[PSR-0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md +[wiki]: https://github.com/kherge/Version/wiki/API diff --git a/vendor/kherge/version/composer.json b/vendor/kherge/version/composer.json new file mode 100644 index 0000000..3ed3a07 --- /dev/null +++ b/vendor/kherge/version/composer.json @@ -0,0 +1,29 @@ +{ + "type": "library", + "name": "kherge/version", + "description": "A parsing and comparison library for semantic versioning.", + "homepage": "http://github.com/kherge/Version", + "license": "MIT", + "authors": [ + { + "name": "Kevin Herrera", + "email": "me@kevingh.com" + } + ], + + "require": { + "php": ">=5.3.3" + }, + + "autoload": { + "psr-0": { + "KevinGH\\Version": "src/lib/" + } + }, + + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + } +} diff --git a/vendor/kherge/version/phpunit.xml.dist b/vendor/kherge/version/phpunit.xml.dist new file mode 100644 index 0000000..b738670 --- /dev/null +++ b/vendor/kherge/version/phpunit.xml.dist @@ -0,0 +1,22 @@ + + + + + src/lib/ + + + + + src/tests/ + + + diff --git a/vendor/kherge/version/src/lib/KevinGH/Version/Version.php b/vendor/kherge/version/src/lib/KevinGH/Version/Version.php new file mode 100644 index 0000000..193c61a --- /dev/null +++ b/vendor/kherge/version/src/lib/KevinGH/Version/Version.php @@ -0,0 +1,467 @@ + + */ +class Version +{ + /** + * The semantic version regular expression. + * + * @var string + */ + const REGEX = '/^\d+\.\d+\.\d+(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/'; + + /** + * The build information. + * + * @var array + */ + private $build; + + /** + * The major version number. + * + * @var integer + */ + private $major = 0; + + /** + * The minor version number. + * + * @var integer + */ + private $minor = 0; + + /** + * The patch number. + * + * @var integer + */ + private $patch = 0; + + /** + * The pre-release information. + * + * @var array + */ + private $pre; + + /** + * Parses the string representation of the version information. + * + * @param string $string The string representation. + */ + public function __construct($string = '') + { + if (false === empty($string)) { + $this->parseString($string); + } + } + + /** + * Generates a string using the current version information. + * + * @return string The string representation of the information. + * + * @api + */ + public function __toString() + { + $string = sprintf('%d.%d.%d', $this->major, $this->minor, $this->patch); + + if ($this->pre) { + $string .= '-' . join('.', $this->pre); + } + + if ($this->build) { + $string .= '+' . join('.', $this->build); + } + + return $string; + } + + /** + * Compares one version to another. + * + * @param Version $version Another version. + * + * @return -1 If this one is greater, 0 if equal, or 1 if $version is greater. + * + * @api + */ + public function compareTo($version) + { + $major = $version->getMajor(); + $minor = $version->getMinor(); + $patch = $version->getPatch(); + $pre = $version->getPreRelease(); + $build = $version->getBuild(); + + switch (true) { + case ($this->major < $major): + return 1; + case ($this->major > $major): + return -1; + case ($this->minor > $minor): + return -1; + case ($this->minor < $minor): + return 1; + case ($this->patch > $patch): + return -1; + case ($this->patch < $patch): + return 1; + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd + + if ($pre || $this->pre) { + if (empty($this->pre) && $pre) { + return -1; + } + + if ($this->pre && empty($pre)) { + return 1; + } + + if (0 !== ($weight = $this->precedence($this->pre, $pre))) { + return $weight; + } + } + + if ($build || $this->build) { + if ((null === $this->build) && $build) { + return 1; + } + + if ($this->build && (null === $build)) { + return -1; + } + + return $this->precedence($this->build, $build); + } + + return 0; + } + + /** + * Creates a new Version instance. + * + * @param string $string The string representation. + * + * @return Version The Version instance. + * + * @api + */ + public static function create($string = '') + { + return new static($string); + } + + /** + * Checks if the version is equal to the given one. + * + * @param Version $version The version to compare against. + * + * @return boolean TRUE if equal, FALSE if not. + * + * @api + */ + public function isEqualTo(Version $version) + { + return ((string)$this == (string)$version); + } + + /** + * Checks if this version is greater than the given one. + * + * @param Version $version The version to compare against. + * + * @return boolean TRUE if greater, FALSE if not. + */ + public function isGreaterThan(Version $version) + { + return (0 > $this->compareTo($version)); + } + + /** + * Checks if this version is less than the given one. + * + * @param Version $version The version to compare against. + * + * @return boolean TRUE if less than, FALSE if not. + * + * @api + */ + public function isLessThan(Version $version) + { + return (0 < $this->compareTo($version)); + } + + /** + * Checks if the version is for a stable release. + * + * @return boolean TRUE if stable, FALSE if not. + */ + public function isStable() + { + return empty($this->pre); + } + + /** + * Checks if the string is a valid string representation of a version. + * + * @param string $string The string. + * + * @return boolean TRUE if valid, FALSE if not. + * + * @api + */ + public static function isValid($string) + { + return (bool) preg_match(static::REGEX, $string); + } + + /** + * Returns the build version information. + * + * @return array|null The build version information. + * + * @api + */ + public function getBuild() + { + return $this->build; + } + + /** + * Returns the pre-release version information. + * + * @return array|null The pre-release version information. + * + * @api + */ + public function getPreRelease() + { + return $this->pre; + } + + /** + * Returns the major version number. + * + * @return integer The major version number. + * + * @api + */ + public function getMajor() + { + return $this->major; + } + + /** + * Returns the minor version number. + * + * @return integer The minor version number. + * + * @api + */ + public function getMinor() + { + return $this->minor; + } + + /** + * Returns the patch version number. + * + * @api + * @return integer The patch version number. + */ + public function getPatch() + { + return $this->patch; + } + + /** + * Sets the build version information. + * + * @param array|integer|string $build The build version information. + * + * @api + */ + public function setBuild($build) + { + $this->build = array_values((array)$build); + + array_walk( + $this->build, + function (&$v) { + if (preg_match('/^[0-9]+$/', $v)) { + $v = (int)$v; + } + } + ); + } + + /** + * Sets the pre-release version information. + * + * @param array|integer|string $pre The pre-release version information. + * + * @api + */ + public function setPreRelease($pre) + { + $this->pre = array_values((array)$pre); + + array_walk( + $this->pre, + function (&$v) { + if (preg_match('/^[0-9]+$/', $v)) { + $v = (int)$v; + } + } + ); + } + + /** + * Sets the major version number. + * + * @param integer|string $major The major version number. + * + * @api + */ + public function setMajor($major) + { + $this->major = (int)$major; + } + + /** + * Sets the minor version number. + * + * @param integer|string $minor The minor version number. + * + * @api + */ + public function setMinor($minor) + { + $this->minor = (int)$minor; + } + + /** + * Sets the patch version number. + * + * @param integer|string $patch The patch version number. + * + * @api + */ + public function setPatch($patch) + { + $this->patch = (int)$patch; + } + + /** + * Parses the version string, replacing current any data. + * + * @param string $string The string representation. + * + * @throws InvalidArgumentException If the string is invalid. + */ + protected function parseString($string) + { + $this->build = null; + $this->major = 0; + $this->minor = 0; + $this->patch = 0; + $this->pre = null; + + if (false === static::isValid($string)) { + throw new InvalidArgumentException(sprintf('The version string "%s" is invalid.', $string)); + } + + if (false !== strpos($string, '+')) { + list($string, $build) = explode('+', $string); + + $this->setBuild(explode('.', $build)); + } + + if (false !== strpos($string, '-')) { + list($string, $pre) = explode('-', $string); + + $this->setPreRelease(explode('.', $pre)); + } + + $version = explode('.', $string); + + $this->major = (int)$version[0]; + + if (isset($version[1])) { + $this->minor = (int)$version[1]; + } + + if (isset($version[2])) { + $this->patch = (int)$version[2]; + } + } + + /** + * Checks the precedence of each data set. + * + * @param array $a A data set. + * @param array $b A data set. + * + * @return integer -1 if $a > $b, 0 if $a = $b, 1 if $a < $b. + */ + protected function precedence($a, $b) + { + if (count($a) > count($b)) { + $l = -1; + $r = 1; + $x = $a; + $y = $b; + } else { + $l = 1; + $r = -1; + $x = $b; + $y = $a; + } + + foreach (array_keys($x) as $i) { + if (false === isset($y[$i])) { + return $l; + } + + if ($x[$i] === $y[$i]) { + continue; + } + + $xi = is_integer($x[$i]); + $yi = is_integer($y[$i]); + + if ($xi && $yi) { + return ($x[$i] > $y[$i]) ? $l : $r; + } elseif ((false === $xi) && (false === $yi)) { + return (max($x[$i], $y[$i]) == $x[$i]) ? $l : $r; + } else { + return $xi ? $r : $l; + } + } + + return 0; + } +} + diff --git a/vendor/kherge/version/src/tests/KevinGH/Version/VersionTest.php b/vendor/kherge/version/src/tests/KevinGH/Version/VersionTest.php new file mode 100644 index 0000000..8876a97 --- /dev/null +++ b/vendor/kherge/version/src/tests/KevinGH/Version/VersionTest.php @@ -0,0 +1,612 @@ +assertInstanceOf('KevinGH\Version\Version', $version = Version::create('1.0.0')); + + $this->assertEquals(1, $version->getMajor()); + $this->assertEquals(0, $version->getMinor()); + $this->assertEquals(0, $version->getPatch()); + $this->assertNull($version->getPreRelease()); + $this->assertNull($version->getBuild()); + } + + /** + * @dataProvider getGoodVersions + */ + public function testIsValid($string) + { + $this->assertTrue(Version::isValid($string)); + } + + /** + * @dataProvider getBadVersions + */ + public function testIsValidInvalid($string) + { + $this->assertFalse(Version::isValid($string)); + } + + public function testDefaults() + { + $version = new Version; + + $this->assertEquals(0, $version->getMajor()); + $this->assertEquals(0, $version->getMinor()); + $this->assertEquals(0, $version->getPatch()); + $this->assertNull($version->getPreRelease()); + $this->assertNull($version->getBuild()); + } + + /** + * @dataProvider getParseDataSet + */ + public function testParse($input, $expected) + { + $version = new Version($input); + + $this->assertSame($expected['major'], $version->getMajor()); + $this->assertSame($expected['minor'], $version->getMinor()); + $this->assertSame($expected['patch'], $version->getPatch()); + $this->assertSame($expected['pre'], $version->getPreRelease()); + $this->assertSame($expected['build'], $version->getBuild()); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage The version string "a.0.0" is invalid. + */ + public function testParseInvalid() + { + $version = new Version('a.0.0'); + } + + /** + * @dataProvider getCompareDataSet + */ + public function testCompare($left, $right, $result) + { + $left = new Version($left); + $right = new Version($right); + + $this->assertSame($result, $left->compareTo($right)); + } + + /** + * @dataProvider getEqualDataSet + */ + public function testEqualTo($left, $right, $result) + { + $left = new Version($left); + $right = new Version($right); + + $this->assertTrue($left->isEqualTo($right)); + } + + /** + * @dataProvider getGreaterDataSet + */ + public function testGreaterThan($left, $right, $reuslt) + { + $left = new Version($left); + $right = new Version($right); + + $this->assertTrue($left->isGreaterThan($right)); + } + + /** + * @dataProvider getLessDataSet + */ + public function testLessThan($left, $right, $reuslt) + { + $left = new Version($left); + $right = new Version($right); + + $this->assertTrue($left->isLessThan($right)); + } + + /** + * @dataProvider getGoodVersions + */ + public function testStable($version) + { + $stable = !(bool) strpos($version, '-'); + + $version = new Version($version); + + $this->assertSame($stable, $version->isStable()); + } + + /** + * @depends testDefaults + */ + public function testSetMajor() + { + $version = new Version; + + $version->setMajor(1); + + $this->assertSame(1, $version->getMajor()); + } + + /** + * @depends testDefaults + */ + public function testSetMinor() + { + $version = new Version; + + $version->setMinor(1); + + $this->assertSame(1, $version->getMinor()); + } + + /** + * @depends testDefaults + */ + public function testSetPatch() + { + $version = new Version; + + $version->setPatch(1); + + $this->assertSame(1, $version->getPatch()); + } + + public function getBadVersions() + { + return array( + array('x.0.0-0.x.1.b'), + array('0.0.0-'), + array('0.0.0-1.'), + array('1.x.0-0.x.1.b+build.123.abcdef1'), + array('1.0.x-alpha'), + array('1.0.0-!.1'), + array('1.0.0-beta!2'), + array('1.0.0-rc.1!build.1'), + array('1.0.0+'), + array('1.0.0!0.3.7'), + array('1.3.7!build'), + array('1.3.7+build.1.'), + array('1.3.7+build.11!e0f985a') + ); + } + + public function getCompareDataSet() + { + return array_merge($this->getLessDataSet(), $this->getGreaterDataSet(), $this->getEqualDataSet()); + } + + public function getEqualDataSet() + { + return array( + array( + '0.0.0-alpha', + '0.0.0-alpha', + 0 + ), + array( + '0.1.0-alpha', + '0.1.0-alpha', + 0 + ), + array( + '1.0.0-alpha', + '1.0.0-alpha', + 0 + ), + array( + '1.0.0-alpha.1', + '1.0.0-alpha.1', + 0 + ), + array( + '1.0.0-beta.2', + '1.0.0-beta.2', + 0 + ), + array( + '1.0.0-beta.11', + '1.0.0-beta.11', + 0 + ), + array( + '1.0.0-rc.1', + '1.0.0-rc.1', + 0 + ), + array( + '1.0.0-rc.1+build.1', + '1.0.0-rc.1+build.1', + 0 + ), + array( + '1.0.0', + '1.0.0', + 0 + ), + array( + '1.0.0+0.3.7', + '1.0.0+0.3.7', + 0 + ), + array( + '1.3.7+build', + '1.3.7+build', + 0 + ), + array( + '1.3.7+build.2.b8f12d7', + '1.3.7+build.2.b8f12d7', + 0 + ), + array( + '1.3.7+build.11.e0f985a', + '1.3.7+build.11.e0f985a', + 0 + ) + ); + } + + public function getLessDataSet() + { + return array( + array( + '0.1.0-alpha.1', + '0.1.1-alpha.1', + 1 + ), + array( + '0.1.0-alpha.1', + '1.0.0-alpha.1', + 1 + ), + array( + '1.0.0-alpha', + '1.0.0-alpha.1', + 1 + ), + array( + '1.0.0-alpha.1', + '1.0.0-alpha.1.1', + 1 + ), + array( + '1.0.0-alpha.1', + '1.0.0-beta.2', + 1 + ), + array( + '1.0.0-beta.2', + '1.0.0-beta.11', + 1 + ), + array( + '1.0.0-beta.11', + '1.0.0-rc.1', + 1 + ), + array( + '1.0.0-rc.1', + '1.0.0-rc.1+build.1', + 1 + ), + array( + '1.0.0-rc.1+build.1', + '1.0.0', + 1 + ), + array( + '1.0.0', + '1.0.0+0.3.7', + 1 + ), + array( + '1.0.0+0.3.7', + '1.3.7+build', + 1 + ), + array( + '1.3.7+build', + '1.3.7+build.2.b8f12d7', + 1 + ), + array( + '1.3.7+build.2.b8f12d7', + '1.3.7+build.11.e0f985a', + 1 + ), + array( + '1.3.7+1', + '1.3.7+build.2', + 1 + ), + ); + } + + public function getGoodVersions() + { + return array( + array('1.0.0-0.x.1.b'), + array('1.0.0-0.x.1.b+build.123.abcdef1'), + array('1.0.0-alpha'), + array('1.0.0-alpha.1'), + array('1.0.0-beta.2'), + array('1.0.0-beta.11'), + array('1.0.0-rc.1'), + array('1.0.0-rc.1+build.1'), + array('1.0.0'), + array('1.0.0+0.3.7'), + array('1.3.7+build'), + array('1.3.7+build.2.b8f12d7'), + array('1.3.7+build.11.e0f985a') + ); + } + + public function getGreaterDataSet() + { + return array( + array( + '0.1.1-alpha.1', + '0.1.0-alpha.1', + -1 + ), + array( + '1.0.0-alpha.1', + '0.1.0-alpha.1', + -1 + ), + array( + '1.0.0-alpha.1', + '1.0.0-alpha', + -1 + ), + array( + '1.0.0-beta.2', + '1.0.0-alpha.1', + -1 + ), + array( + '1.0.0-beta.11', + '1.0.0-beta.2', + -1 + ), + array( + '1.0.0-rc.1', + '1.0.0-beta.11', + -1 + ), + array( + '1.0.0-rc.1+build.1', + '1.0.0-rc.1', + -1 + ), + array( + '1.0.0', + '1.0.0-rc.1+build.1', + -1 + ), + array( + '1.0.0+0.3.7', + '1.0.0', + -1 + ), + array( + '1.3.7+build', + '1.0.0+0.3.7', + -1 + ), + array( + '1.3.7+build.2.b8f12d7', + '1.3.7+build', + -1 + ), + array( + '1.3.7+build.11.e0f985a', + '1.3.7+build.2.b8f12d7', + -1 + ), + array( + '1.3.7+build.2', + '1.3.7+1', + -1 + ), + ); + } + + public function getParseDataSet() + { + return array( + array( + '1.0.0-0.x.1.b', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => array( + 0, + 'x', + 1, + 'b' + ), + 'build' => null + ) + ), + array( + '1.0.0-0.x.1.b+build.123.abcdef1', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => array( + 0, + 'x', + 1, + 'b' + ), + 'build' => array( + 'build', + 123, + 'abcdef1' + ) + ) + ), + array( + '1.0.0-alpha', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => array('alpha'), + 'build' => null + ) + ), + array( + '1.0.0-alpha.1', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => array( + 'alpha', + 1 + ), + 'build' => null + ) + ), + array( + '1.0.0-beta.2', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => array( + 'beta', + 2 + ), + 'build' => null + ) + ), + array( + '1.0.0-beta.11', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => array( + 'beta', + 11 + ), + 'build' => null + ) + ), + array( + '1.0.0-rc.1', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => array( + 'rc', + 1 + ), + 'build' => null + ) + ), + array( + '1.0.0-rc.1+build.1', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => array( + 'rc', + 1 + ), + 'build' => array( + 'build', + 1 + ) + ) + ), + array( + '1.0.0', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => null, + 'build' => null + ) + ), + array( + '1.0.0+0.3.7', + array( + 'major' => 1, + 'minor' => 0, + 'patch' => 0, + 'pre' => null, + 'build' => array( + 0, + 3, + 7 + ) + ) + ), + array( + '1.3.7+build', + array( + 'major' => 1, + 'minor' => 3, + 'patch' => 7, + 'pre' => null, + 'build' => array('build') + ) + ), + array( + '1.3.7+build.2.b8f12d7', + array( + 'major' => 1, + 'minor' => 3, + 'patch' => 7, + 'pre' => null, + 'build' => array( + 'build', + 2, + 'b8f12d7' + ) + ) + ), + array( + '1.3.7+build.11.e0f985a', + array( + 'major' => 1, + 'minor' => 3, + 'patch' => 7, + 'pre' => null, + 'build' => array( + 'build', + 11, + 'e0f985a' + ) + ) + ) + ); + } +} + diff --git a/vendor/kherge/version/src/tests/load.php b/vendor/kherge/version/src/tests/load.php new file mode 100644 index 0000000..c8a50f4 --- /dev/null +++ b/vendor/kherge/version/src/tests/load.php @@ -0,0 +1,14 @@ + + +For the full copyright and license information, please view the LICENSE +file that was distributed with this source code. +EOF; + +$finder = Symfony\CS\Finder::create() + ->files() + ->name('*.php') + ->exclude('Fixtures') + ->in(__DIR__.'/src') + ->in(__DIR__.'/tests') +; + +return Symfony\CS\Config::create() + ->setUsingCache(true) + //->setUsingLinter(false) + ->setRiskyAllowed(true) + ->setRules(array( + '@PSR2' => true, + 'binary_operator_spaces' => true, + 'blank_line_before_return' => true, + 'header_comment' => array('header' => $header), + 'include' => true, + 'long_array_syntax' => true, + 'method_separation' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_blank_lines_between_uses' => true, + 'no_duplicate_semicolons' => true, + 'no_extra_consecutive_blank_lines' => true, + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_unused_imports' => true, + 'object_operator_without_whitespace' => true, + 'phpdoc_align' => true, + 'phpdoc_indent' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_package' => true, + 'phpdoc_order' => true, + 'phpdoc_scalar' => true, + 'phpdoc_trim' => true, + 'phpdoc_type_to_var' => true, + 'psr0' => true, + 'single_blank_line_before_namespace' => true, + 'spaces_cast' => true, + 'standardize_not_equals' => true, + 'ternary_operator_spaces' => true, + 'trailing_comma_in_multiline_array' => true, + 'whitespacy_lines' => true, + )) + ->finder($finder) +; diff --git a/vendor/monolog/monolog/CHANGELOG.md b/vendor/monolog/monolog/CHANGELOG.md new file mode 100644 index 0000000..cd1142d --- /dev/null +++ b/vendor/monolog/monolog/CHANGELOG.md @@ -0,0 +1,342 @@ +### 1.23.0 (2017-06-19) + + * Improved SyslogUdpHandler's support for RFC5424 and added optional `$ident` argument + * Fixed GelfHandler truncation to be per field and not per message + * Fixed compatibility issue with PHP <5.3.6 + * Fixed support for headless Chrome in ChromePHPHandler + * Fixed support for latest Aws SDK in DynamoDbHandler + * Fixed support for SwiftMailer 6.0+ in SwiftMailerHandler + +### 1.22.1 (2017-03-13) + + * Fixed lots of minor issues in the new Slack integrations + * Fixed support for allowInlineLineBreaks in LineFormatter when formatting exception backtraces + +### 1.22.0 (2016-11-26) + + * Added SlackbotHandler and SlackWebhookHandler to set up Slack integration more easily + * Added MercurialProcessor to add mercurial revision and branch names to log records + * Added support for AWS SDK v3 in DynamoDbHandler + * Fixed fatal errors occuring when normalizing generators that have been fully consumed + * Fixed RollbarHandler to include a level (rollbar level), monolog_level (original name), channel and datetime (unix) + * Fixed RollbarHandler not flushing records automatically, calling close() explicitly is not necessary anymore + * Fixed SyslogUdpHandler to avoid sending empty frames + * Fixed a few PHP 7.0 and 7.1 compatibility issues + +### 1.21.0 (2016-07-29) + + * Break: Reverted the addition of $context when the ErrorHandler handles regular php errors from 1.20.0 as it was causing issues + * Added support for more formats in RotatingFileHandler::setFilenameFormat as long as they have Y, m and d in order + * Added ability to format the main line of text the SlackHandler sends by explictly setting a formatter on the handler + * Added information about SoapFault instances in NormalizerFormatter + * Added $handleOnlyReportedErrors option on ErrorHandler::registerErrorHandler (default true) to allow logging of all errors no matter the error_reporting level + +### 1.20.0 (2016-07-02) + + * Added FingersCrossedHandler::activate() to manually trigger the handler regardless of the activation policy + * Added StreamHandler::getUrl to retrieve the stream's URL + * Added ability to override addRow/addTitle in HtmlFormatter + * Added the $context to context information when the ErrorHandler handles a regular php error + * Deprecated RotatingFileHandler::setFilenameFormat to only support 3 formats: Y, Y-m and Y-m-d + * Fixed WhatFailureGroupHandler to work with PHP7 throwables + * Fixed a few minor bugs + +### 1.19.0 (2016-04-12) + + * Break: StreamHandler will not close streams automatically that it does not own. If you pass in a stream (not a path/url), then it will not close it for you. You can retrieve those using getStream() if needed + * Added DeduplicationHandler to remove duplicate records from notifications across multiple requests, useful for email or other notifications on errors + * Added ability to use `%message%` and other LineFormatter replacements in the subject line of emails sent with NativeMailHandler and SwiftMailerHandler + * Fixed HipChatHandler handling of long messages + +### 1.18.2 (2016-04-02) + + * Fixed ElasticaFormatter to use more precise dates + * Fixed GelfMessageFormatter sending too long messages + +### 1.18.1 (2016-03-13) + + * Fixed SlackHandler bug where slack dropped messages randomly + * Fixed RedisHandler issue when using with the PHPRedis extension + * Fixed AmqpHandler content-type being incorrectly set when using with the AMQP extension + * Fixed BrowserConsoleHandler regression + +### 1.18.0 (2016-03-01) + + * Added optional reduction of timestamp precision via `Logger->useMicrosecondTimestamps(false)`, disabling it gets you a bit of performance boost but reduces the precision to the second instead of microsecond + * Added possibility to skip some extra stack frames in IntrospectionProcessor if you have some library wrapping Monolog that is always adding frames + * Added `Logger->withName` to clone a logger (keeping all handlers) with a new name + * Added FluentdFormatter for the Fluentd unix socket protocol + * Added HandlerWrapper base class to ease the creation of handler wrappers, just extend it and override as needed + * Added support for replacing context sub-keys using `%context.*%` in LineFormatter + * Added support for `payload` context value in RollbarHandler + * Added setRelease to RavenHandler to describe the application version, sent with every log + * Added support for `fingerprint` context value in RavenHandler + * Fixed JSON encoding errors that would gobble up the whole log record, we now handle those more gracefully by dropping chars as needed + * Fixed write timeouts in SocketHandler and derivatives, set to 10sec by default, lower it with `setWritingTimeout()` + * Fixed PHP7 compatibility with regard to Exception/Throwable handling in a few places + +### 1.17.2 (2015-10-14) + + * Fixed ErrorHandler compatibility with non-Monolog PSR-3 loggers + * Fixed SlackHandler handling to use slack functionalities better + * Fixed SwiftMailerHandler bug when sending multiple emails they all had the same id + * Fixed 5.3 compatibility regression + +### 1.17.1 (2015-08-31) + + * Fixed RollbarHandler triggering PHP notices + +### 1.17.0 (2015-08-30) + + * Added support for `checksum` and `release` context/extra values in RavenHandler + * Added better support for exceptions in RollbarHandler + * Added UidProcessor::getUid + * Added support for showing the resource type in NormalizedFormatter + * Fixed IntrospectionProcessor triggering PHP notices + +### 1.16.0 (2015-08-09) + + * Added IFTTTHandler to notify ifttt.com triggers + * Added Logger::setHandlers() to allow setting/replacing all handlers + * Added $capSize in RedisHandler to cap the log size + * Fixed StreamHandler creation of directory to only trigger when the first log write happens + * Fixed bug in the handling of curl failures + * Fixed duplicate logging of fatal errors when both error and fatal error handlers are registered in monolog's ErrorHandler + * Fixed missing fatal errors records with handlers that need to be closed to flush log records + * Fixed TagProcessor::addTags support for associative arrays + +### 1.15.0 (2015-07-12) + + * Added addTags and setTags methods to change a TagProcessor + * Added automatic creation of directories if they are missing for a StreamHandler to open a log file + * Added retry functionality to Loggly, Cube and Mandrill handlers so they retry up to 5 times in case of network failure + * Fixed process exit code being incorrectly reset to 0 if ErrorHandler::registerExceptionHandler was used + * Fixed HTML/JS escaping in BrowserConsoleHandler + * Fixed JSON encoding errors being silently suppressed (PHP 5.5+ only) + +### 1.14.0 (2015-06-19) + + * Added PHPConsoleHandler to send record to Chrome's PHP Console extension and library + * Added support for objects implementing __toString in the NormalizerFormatter + * Added support for HipChat's v2 API in HipChatHandler + * Added Logger::setTimezone() to initialize the timezone monolog should use in case date.timezone isn't correct for your app + * Added an option to send formatted message instead of the raw record on PushoverHandler via ->useFormattedMessage(true) + * Fixed curl errors being silently suppressed + +### 1.13.1 (2015-03-09) + + * Fixed regression in HipChat requiring a new token to be created + +### 1.13.0 (2015-03-05) + + * Added Registry::hasLogger to check for the presence of a logger instance + * Added context.user support to RavenHandler + * Added HipChat API v2 support in the HipChatHandler + * Added NativeMailerHandler::addParameter to pass params to the mail() process + * Added context data to SlackHandler when $includeContextAndExtra is true + * Added ability to customize the Swift_Message per-email in SwiftMailerHandler + * Fixed SwiftMailerHandler to lazily create message instances if a callback is provided + * Fixed serialization of INF and NaN values in Normalizer and LineFormatter + +### 1.12.0 (2014-12-29) + + * Break: HandlerInterface::isHandling now receives a partial record containing only a level key. This was always the intent and does not break any Monolog handler but is strictly speaking a BC break and you should check if you relied on any other field in your own handlers. + * Added PsrHandler to forward records to another PSR-3 logger + * Added SamplingHandler to wrap around a handler and include only every Nth record + * Added MongoDBFormatter to support better storage with MongoDBHandler (it must be enabled manually for now) + * Added exception codes in the output of most formatters + * Added LineFormatter::includeStacktraces to enable exception stack traces in logs (uses more than one line) + * Added $useShortAttachment to SlackHandler to minify attachment size and $includeExtra to append extra data + * Added $host to HipChatHandler for users of private instances + * Added $transactionName to NewRelicHandler and support for a transaction_name context value + * Fixed MandrillHandler to avoid outputing API call responses + * Fixed some non-standard behaviors in SyslogUdpHandler + +### 1.11.0 (2014-09-30) + + * Break: The NewRelicHandler extra and context data are now prefixed with extra_ and context_ to avoid clashes. Watch out if you have scripts reading those from the API and rely on names + * Added WhatFailureGroupHandler to suppress any exception coming from the wrapped handlers and avoid chain failures if a logging service fails + * Added MandrillHandler to send emails via the Mandrillapp.com API + * Added SlackHandler to log records to a Slack.com account + * Added FleepHookHandler to log records to a Fleep.io account + * Added LogglyHandler::addTag to allow adding tags to an existing handler + * Added $ignoreEmptyContextAndExtra to LineFormatter to avoid empty [] at the end + * Added $useLocking to StreamHandler and RotatingFileHandler to enable flock() while writing + * Added support for PhpAmqpLib in the AmqpHandler + * Added FingersCrossedHandler::clear and BufferHandler::clear to reset them between batches in long running jobs + * Added support for adding extra fields from $_SERVER in the WebProcessor + * Fixed support for non-string values in PrsLogMessageProcessor + * Fixed SwiftMailer messages being sent with the wrong date in long running scripts + * Fixed minor PHP 5.6 compatibility issues + * Fixed BufferHandler::close being called twice + +### 1.10.0 (2014-06-04) + + * Added Logger::getHandlers() and Logger::getProcessors() methods + * Added $passthruLevel argument to FingersCrossedHandler to let it always pass some records through even if the trigger level is not reached + * Added support for extra data in NewRelicHandler + * Added $expandNewlines flag to the ErrorLogHandler to create multiple log entries when a message has multiple lines + +### 1.9.1 (2014-04-24) + + * Fixed regression in RotatingFileHandler file permissions + * Fixed initialization of the BufferHandler to make sure it gets flushed after receiving records + * Fixed ChromePHPHandler and FirePHPHandler's activation strategies to be more conservative + +### 1.9.0 (2014-04-20) + + * Added LogEntriesHandler to send logs to a LogEntries account + * Added $filePermissions to tweak file mode on StreamHandler and RotatingFileHandler + * Added $useFormatting flag to MemoryProcessor to make it send raw data in bytes + * Added support for table formatting in FirePHPHandler via the table context key + * Added a TagProcessor to add tags to records, and support for tags in RavenHandler + * Added $appendNewline flag to the JsonFormatter to enable using it when logging to files + * Added sound support to the PushoverHandler + * Fixed multi-threading support in StreamHandler + * Fixed empty headers issue when ChromePHPHandler received no records + * Fixed default format of the ErrorLogHandler + +### 1.8.0 (2014-03-23) + + * Break: the LineFormatter now strips newlines by default because this was a bug, set $allowInlineLineBreaks to true if you need them + * Added BrowserConsoleHandler to send logs to any browser's console via console.log() injection in the output + * Added FilterHandler to filter records and only allow those of a given list of levels through to the wrapped handler + * Added FlowdockHandler to send logs to a Flowdock account + * Added RollbarHandler to send logs to a Rollbar account + * Added HtmlFormatter to send prettier log emails with colors for each log level + * Added GitProcessor to add the current branch/commit to extra record data + * Added a Monolog\Registry class to allow easier global access to pre-configured loggers + * Added support for the new official graylog2/gelf-php lib for GelfHandler, upgrade if you can by replacing the mlehner/gelf-php requirement + * Added support for HHVM + * Added support for Loggly batch uploads + * Added support for tweaking the content type and encoding in NativeMailerHandler + * Added $skipClassesPartials to tweak the ignored classes in the IntrospectionProcessor + * Fixed batch request support in GelfHandler + +### 1.7.0 (2013-11-14) + + * Added ElasticSearchHandler to send logs to an Elastic Search server + * Added DynamoDbHandler and ScalarFormatter to send logs to Amazon's Dynamo DB + * Added SyslogUdpHandler to send logs to a remote syslogd server + * Added LogglyHandler to send logs to a Loggly account + * Added $level to IntrospectionProcessor so it only adds backtraces when needed + * Added $version to LogstashFormatter to allow using the new v1 Logstash format + * Added $appName to NewRelicHandler + * Added configuration of Pushover notification retries/expiry + * Added $maxColumnWidth to NativeMailerHandler to change the 70 chars default + * Added chainability to most setters for all handlers + * Fixed RavenHandler batch processing so it takes the message from the record with highest priority + * Fixed HipChatHandler batch processing so it sends all messages at once + * Fixed issues with eAccelerator + * Fixed and improved many small things + +### 1.6.0 (2013-07-29) + + * Added HipChatHandler to send logs to a HipChat chat room + * Added ErrorLogHandler to send logs to PHP's error_log function + * Added NewRelicHandler to send logs to NewRelic's service + * Added Monolog\ErrorHandler helper class to register a Logger as exception/error/fatal handler + * Added ChannelLevelActivationStrategy for the FingersCrossedHandler to customize levels by channel + * Added stack traces output when normalizing exceptions (json output & co) + * Added Monolog\Logger::API constant (currently 1) + * Added support for ChromePHP's v4.0 extension + * Added support for message priorities in PushoverHandler, see $highPriorityLevel and $emergencyLevel + * Added support for sending messages to multiple users at once with the PushoverHandler + * Fixed RavenHandler's support for batch sending of messages (when behind a Buffer or FingersCrossedHandler) + * Fixed normalization of Traversables with very large data sets, only the first 1000 items are shown now + * Fixed issue in RotatingFileHandler when an open_basedir restriction is active + * Fixed minor issues in RavenHandler and bumped the API to Raven 0.5.0 + * Fixed SyslogHandler issue when many were used concurrently with different facilities + +### 1.5.0 (2013-04-23) + + * Added ProcessIdProcessor to inject the PID in log records + * Added UidProcessor to inject a unique identifier to all log records of one request/run + * Added support for previous exceptions in the LineFormatter exception serialization + * Added Monolog\Logger::getLevels() to get all available levels + * Fixed ChromePHPHandler so it avoids sending headers larger than Chrome can handle + +### 1.4.1 (2013-04-01) + + * Fixed exception formatting in the LineFormatter to be more minimalistic + * Fixed RavenHandler's handling of context/extra data, requires Raven client >0.1.0 + * Fixed log rotation in RotatingFileHandler to work with long running scripts spanning multiple days + * Fixed WebProcessor array access so it checks for data presence + * Fixed Buffer, Group and FingersCrossed handlers to make use of their processors + +### 1.4.0 (2013-02-13) + + * Added RedisHandler to log to Redis via the Predis library or the phpredis extension + * Added ZendMonitorHandler to log to the Zend Server monitor + * Added the possibility to pass arrays of handlers and processors directly in the Logger constructor + * Added `$useSSL` option to the PushoverHandler which is enabled by default + * Fixed ChromePHPHandler and FirePHPHandler issue when multiple instances are used simultaneously + * Fixed header injection capability in the NativeMailHandler + +### 1.3.1 (2013-01-11) + + * Fixed LogstashFormatter to be usable with stream handlers + * Fixed GelfMessageFormatter levels on Windows + +### 1.3.0 (2013-01-08) + + * Added PSR-3 compliance, the `Monolog\Logger` class is now an instance of `Psr\Log\LoggerInterface` + * Added PsrLogMessageProcessor that you can selectively enable for full PSR-3 compliance + * Added LogstashFormatter (combine with SocketHandler or StreamHandler to send logs to Logstash) + * Added PushoverHandler to send mobile notifications + * Added CouchDBHandler and DoctrineCouchDBHandler + * Added RavenHandler to send data to Sentry servers + * Added support for the new MongoClient class in MongoDBHandler + * Added microsecond precision to log records' timestamps + * Added `$flushOnOverflow` param to BufferHandler to flush by batches instead of losing + the oldest entries + * Fixed normalization of objects with cyclic references + +### 1.2.1 (2012-08-29) + + * Added new $logopts arg to SyslogHandler to provide custom openlog options + * Fixed fatal error in SyslogHandler + +### 1.2.0 (2012-08-18) + + * Added AmqpHandler (for use with AMQP servers) + * Added CubeHandler + * Added NativeMailerHandler::addHeader() to send custom headers in mails + * Added the possibility to specify more than one recipient in NativeMailerHandler + * Added the possibility to specify float timeouts in SocketHandler + * Added NOTICE and EMERGENCY levels to conform with RFC 5424 + * Fixed the log records to use the php default timezone instead of UTC + * Fixed BufferHandler not being flushed properly on PHP fatal errors + * Fixed normalization of exotic resource types + * Fixed the default format of the SyslogHandler to avoid duplicating datetimes in syslog + +### 1.1.0 (2012-04-23) + + * Added Monolog\Logger::isHandling() to check if a handler will + handle the given log level + * Added ChromePHPHandler + * Added MongoDBHandler + * Added GelfHandler (for use with Graylog2 servers) + * Added SocketHandler (for use with syslog-ng for example) + * Added NormalizerFormatter + * Added the possibility to change the activation strategy of the FingersCrossedHandler + * Added possibility to show microseconds in logs + * Added `server` and `referer` to WebProcessor output + +### 1.0.2 (2011-10-24) + + * Fixed bug in IE with large response headers and FirePHPHandler + +### 1.0.1 (2011-08-25) + + * Added MemoryPeakUsageProcessor and MemoryUsageProcessor + * Added Monolog\Logger::getName() to get a logger's channel name + +### 1.0.0 (2011-07-06) + + * Added IntrospectionProcessor to get info from where the logger was called + * Fixed WebProcessor in CLI + +### 1.0.0-RC1 (2011-07-01) + + * Initial release diff --git a/vendor/monolog/monolog/LICENSE b/vendor/monolog/monolog/LICENSE new file mode 100644 index 0000000..1647321 --- /dev/null +++ b/vendor/monolog/monolog/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011-2016 Jordi Boggiano + +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. diff --git a/vendor/monolog/monolog/README.md b/vendor/monolog/monolog/README.md new file mode 100644 index 0000000..7d8ade5 --- /dev/null +++ b/vendor/monolog/monolog/README.md @@ -0,0 +1,95 @@ +# Monolog - Logging for PHP [![Build Status](https://img.shields.io/travis/Seldaek/monolog.svg)](https://travis-ci.org/Seldaek/monolog) + +[![Total Downloads](https://img.shields.io/packagist/dt/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog) +[![Latest Stable Version](https://img.shields.io/packagist/v/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog) +[![Reference Status](https://www.versioneye.com/php/monolog:monolog/reference_badge.svg)](https://www.versioneye.com/php/monolog:monolog/references) + + +Monolog sends your logs to files, sockets, inboxes, databases and various +web services. See the complete list of handlers below. Special handlers +allow you to build advanced logging strategies. + +This library implements the [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) +interface that you can type-hint against in your own libraries to keep +a maximum of interoperability. You can also use it in your applications to +make sure you can always use another compatible logger at a later time. +As of 1.11.0 Monolog public APIs will also accept PSR-3 log levels. +Internally Monolog still uses its own level scheme since it predates PSR-3. + +## Installation + +Install the latest version with + +```bash +$ composer require monolog/monolog +``` + +## Basic Usage + +```php +pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); + +// add records to the log +$log->addWarning('Foo'); +$log->addError('Bar'); +``` + +## Documentation + +- [Usage Instructions](doc/01-usage.md) +- [Handlers, Formatters and Processors](doc/02-handlers-formatters-processors.md) +- [Utility classes](doc/03-utilities.md) +- [Extending Monolog](doc/04-extending.md) + +## Third Party Packages + +Third party handlers, formatters and processors are +[listed in the wiki](https://github.com/Seldaek/monolog/wiki/Third-Party-Packages). You +can also add your own there if you publish one. + +## About + +### Requirements + +- Monolog works with PHP 5.3 or above, and is also tested to work with HHVM. + +### Submitting bugs and feature requests + +Bugs and feature request are tracked on [GitHub](https://github.com/Seldaek/monolog/issues) + +### Framework Integrations + +- Frameworks and libraries using [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) + can be used very easily with Monolog since it implements the interface. +- [Symfony2](http://symfony.com) comes out of the box with Monolog. +- [Silex](http://silex.sensiolabs.org/) comes out of the box with Monolog. +- [Laravel 4 & 5](http://laravel.com/) come out of the box with Monolog. +- [Lumen](http://lumen.laravel.com/) comes out of the box with Monolog. +- [PPI](http://www.ppi.io/) comes out of the box with Monolog. +- [CakePHP](http://cakephp.org/) is usable with Monolog via the [cakephp-monolog](https://github.com/jadb/cakephp-monolog) plugin. +- [Slim](http://www.slimframework.com/) is usable with Monolog via the [Slim-Monolog](https://github.com/Flynsarmy/Slim-Monolog) log writer. +- [XOOPS 2.6](http://xoops.org/) comes out of the box with Monolog. +- [Aura.Web_Project](https://github.com/auraphp/Aura.Web_Project) comes out of the box with Monolog. +- [Nette Framework](http://nette.org/en/) can be used with Monolog via [Kdyby/Monolog](https://github.com/Kdyby/Monolog) extension. +- [Proton Micro Framework](https://github.com/alexbilbie/Proton) comes out of the box with Monolog. + +### Author + +Jordi Boggiano - -
+See also the list of [contributors](https://github.com/Seldaek/monolog/contributors) which participated in this project. + +### License + +Monolog is licensed under the MIT License - see the `LICENSE` file for details + +### Acknowledgements + +This library is heavily inspired by Python's [Logbook](http://packages.python.org/Logbook/) +library, although most concepts have been adjusted to fit to the PHP world. diff --git a/vendor/monolog/monolog/composer.json b/vendor/monolog/monolog/composer.json new file mode 100644 index 0000000..3b0c880 --- /dev/null +++ b/vendor/monolog/monolog/composer.json @@ -0,0 +1,66 @@ +{ + "name": "monolog/monolog", + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "keywords": ["log", "logging", "psr-3"], + "homepage": "http://github.com/Seldaek/monolog", + "type": "library", + "license": "MIT", + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.5", + "graylog2/gelf-php": "~1.0", + "sentry/sentry": "^0.13", + "ruflin/elastica": ">=0.90 <3.0", + "doctrine/couchdb": "~1.0@dev", + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "php-amqplib/php-amqplib": "~2.4", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit-mock-objects": "2.3.0", + "jakub-onderka/php-parallel-lint": "0.9" + }, + "_": "phpunit/phpunit-mock-objects required in 2.3.0 due to https://github.com/sebastianbergmann/phpunit-mock-objects/issues/223 - needs hhvm 3.8+ on travis", + "suggest": { + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "sentry/sentry": "Allow sending log messages to a Sentry server", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "php-console/php-console": "Allow sending log messages to Google Chrome" + }, + "autoload": { + "psr-4": {"Monolog\\": "src/Monolog"} + }, + "autoload-dev": { + "psr-4": {"Monolog\\": "tests/Monolog"} + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "scripts": { + "test": [ + "parallel-lint . --exclude vendor", + "phpunit" + ] + } +} diff --git a/vendor/monolog/monolog/doc/01-usage.md b/vendor/monolog/monolog/doc/01-usage.md new file mode 100644 index 0000000..8e2551f --- /dev/null +++ b/vendor/monolog/monolog/doc/01-usage.md @@ -0,0 +1,231 @@ +# Using Monolog + +- [Installation](#installation) +- [Core Concepts](#core-concepts) +- [Log Levels](#log-levels) +- [Configuring a logger](#configuring-a-logger) +- [Adding extra data in the records](#adding-extra-data-in-the-records) +- [Leveraging channels](#leveraging-channels) +- [Customizing the log format](#customizing-the-log-format) + +## Installation + +Monolog is available on Packagist ([monolog/monolog](http://packagist.org/packages/monolog/monolog)) +and as such installable via [Composer](http://getcomposer.org/). + +```bash +composer require monolog/monolog +``` + +If you do not use Composer, you can grab the code from GitHub, and use any +PSR-0 compatible autoloader (e.g. the [Symfony2 ClassLoader component](https://github.com/symfony/ClassLoader)) +to load Monolog classes. + +## Core Concepts + +Every `Logger` instance has a channel (name) and a stack of handlers. Whenever +you add a record to the logger, it traverses the handler stack. Each handler +decides whether it fully handled the record, and if so, the propagation of the +record ends there. + +This allows for flexible logging setups, for example having a `StreamHandler` at +the bottom of the stack that will log anything to disk, and on top of that add +a `MailHandler` that will send emails only when an error message is logged. +Handlers also have a `$bubble` property which defines whether they block the +record or not if they handled it. In this example, setting the `MailHandler`'s +`$bubble` argument to false means that records handled by the `MailHandler` will +not propagate to the `StreamHandler` anymore. + +You can create many `Logger`s, each defining a channel (e.g.: db, request, +router, ..) and each of them combining various handlers, which can be shared +or not. The channel is reflected in the logs and allows you to easily see or +filter records. + +Each Handler also has a Formatter, a default one with settings that make sense +will be created if you don't set one. The formatters normalize and format +incoming records so that they can be used by the handlers to output useful +information. + +Custom severity levels are not available. Only the eight +[RFC 5424](http://tools.ietf.org/html/rfc5424) levels (debug, info, notice, +warning, error, critical, alert, emergency) are present for basic filtering +purposes, but for sorting and other use cases that would require +flexibility, you should add Processors to the Logger that can add extra +information (tags, user ip, ..) to the records before they are handled. + +## Log Levels + +Monolog supports the logging levels described by [RFC 5424](http://tools.ietf.org/html/rfc5424). + +- **DEBUG** (100): Detailed debug information. + +- **INFO** (200): Interesting events. Examples: User logs in, SQL logs. + +- **NOTICE** (250): Normal but significant events. + +- **WARNING** (300): Exceptional occurrences that are not errors. Examples: + Use of deprecated APIs, poor use of an API, undesirable things that are not + necessarily wrong. + +- **ERROR** (400): Runtime errors that do not require immediate action but + should typically be logged and monitored. + +- **CRITICAL** (500): Critical conditions. Example: Application component + unavailable, unexpected exception. + +- **ALERT** (550): Action must be taken immediately. Example: Entire website + down, database unavailable, etc. This should trigger the SMS alerts and wake + you up. + +- **EMERGENCY** (600): Emergency: system is unusable. + +## Configuring a logger + +Here is a basic setup to log to a file and to firephp on the DEBUG level: + +```php +pushHandler(new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG)); +$logger->pushHandler(new FirePHPHandler()); + +// You can now use your logger +$logger->addInfo('My logger is now ready'); +``` + +Let's explain it. The first step is to create the logger instance which will +be used in your code. The argument is a channel name, which is useful when +you use several loggers (see below for more details about it). + +The logger itself does not know how to handle a record. It delegates it to +some handlers. The code above registers two handlers in the stack to allow +handling records in two different ways. + +Note that the FirePHPHandler is called first as it is added on top of the +stack. This allows you to temporarily add a logger with bubbling disabled if +you want to override other configured loggers. + +> If you use Monolog standalone and are looking for an easy way to +> configure many handlers, the [theorchard/monolog-cascade](https://github.com/theorchard/monolog-cascade) +> can help you build complex logging configs via PHP arrays, yaml or json configs. + +## Adding extra data in the records + +Monolog provides two different ways to add extra informations along the simple +textual message. + +### Using the logging context + +The first way is the context, allowing to pass an array of data along the +record: + +```php +addInfo('Adding a new user', array('username' => 'Seldaek')); +``` + +Simple handlers (like the StreamHandler for instance) will simply format +the array to a string but richer handlers can take advantage of the context +(FirePHP is able to display arrays in pretty way for instance). + +### Using processors + +The second way is to add extra data for all records by using a processor. +Processors can be any callable. They will get the record as parameter and +must return it after having eventually changed the `extra` part of it. Let's +write a processor adding some dummy data in the record: + +```php +pushProcessor(function ($record) { + $record['extra']['dummy'] = 'Hello world!'; + + return $record; +}); +``` + +Monolog provides some built-in processors that can be used in your project. +Look at the [dedicated chapter](https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md#processors) for the list. + +> Tip: processors can also be registered on a specific handler instead of + the logger to apply only for this handler. + +## Leveraging channels + +Channels are a great way to identify to which part of the application a record +is related. This is useful in big applications (and is leveraged by +MonologBundle in Symfony2). + +Picture two loggers sharing a handler that writes to a single log file. +Channels would allow you to identify the logger that issued every record. +You can easily grep through the log files filtering this or that channel. + +```php +pushHandler($stream); +$logger->pushHandler($firephp); + +// Create a logger for the security-related stuff with a different channel +$securityLogger = new Logger('security'); +$securityLogger->pushHandler($stream); +$securityLogger->pushHandler($firephp); + +// Or clone the first one to only change the channel +$securityLogger = $logger->withName('security'); +``` + +## Customizing the log format + +In Monolog it's easy to customize the format of the logs written into files, +sockets, mails, databases and other handlers. Most of the handlers use the + +```php +$record['formatted'] +``` + +value to be automatically put into the log device. This value depends on the +formatter settings. You can choose between predefined formatter classes or +write your own (e.g. a multiline text file for human-readable output). + +To configure a predefined formatter class, just set it as the handler's field: + +```php +// the default date format is "Y-m-d H:i:s" +$dateFormat = "Y n j, g:i a"; +// the default output format is "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n" +$output = "%datetime% > %level_name% > %message% %context% %extra%\n"; +// finally, create a formatter +$formatter = new LineFormatter($output, $dateFormat); + +// Create a handler +$stream = new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG); +$stream->setFormatter($formatter); +// bind it to a logger object +$securityLogger = new Logger('security'); +$securityLogger->pushHandler($stream); +``` + +You may also reuse the same formatter between multiple handlers and share those +handlers between multiple loggers. + +[Handlers, Formatters and Processors](02-handlers-formatters-processors.md) → diff --git a/vendor/monolog/monolog/doc/02-handlers-formatters-processors.md b/vendor/monolog/monolog/doc/02-handlers-formatters-processors.md new file mode 100644 index 0000000..bea968a --- /dev/null +++ b/vendor/monolog/monolog/doc/02-handlers-formatters-processors.md @@ -0,0 +1,157 @@ +# Handlers, Formatters and Processors + +- [Handlers](#handlers) + - [Log to files and syslog](#log-to-files-and-syslog) + - [Send alerts and emails](#send-alerts-and-emails) + - [Log specific servers and networked logging](#log-specific-servers-and-networked-logging) + - [Logging in development](#logging-in-development) + - [Log to databases](#log-to-databases) + - [Wrappers / Special Handlers](#wrappers--special-handlers) +- [Formatters](#formatters) +- [Processors](#processors) +- [Third Party Packages](#third-party-packages) + +## Handlers + +### Log to files and syslog + +- _StreamHandler_: Logs records into any PHP stream, use this for log files. +- _RotatingFileHandler_: Logs records to a file and creates one logfile per day. + It will also delete files older than `$maxFiles`. You should use + [logrotate](http://linuxcommand.org/man_pages/logrotate8.html) for high profile + setups though, this is just meant as a quick and dirty solution. +- _SyslogHandler_: Logs records to the syslog. +- _ErrorLogHandler_: Logs records to PHP's + [`error_log()`](http://docs.php.net/manual/en/function.error-log.php) function. + +### Send alerts and emails + +- _NativeMailerHandler_: Sends emails using PHP's + [`mail()`](http://php.net/manual/en/function.mail.php) function. +- _SwiftMailerHandler_: Sends emails using a [`Swift_Mailer`](http://swiftmailer.org/) instance. +- _PushoverHandler_: Sends mobile notifications via the [Pushover](https://www.pushover.net/) API. +- _HipChatHandler_: Logs records to a [HipChat](http://hipchat.com) chat room using its API. +- _FlowdockHandler_: Logs records to a [Flowdock](https://www.flowdock.com/) account. +- _SlackHandler_: Logs records to a [Slack](https://www.slack.com/) account using the Slack API. +- _SlackbotHandler_: Logs records to a [Slack](https://www.slack.com/) account using the Slackbot incoming hook. +- _SlackWebhookHandler_: Logs records to a [Slack](https://www.slack.com/) account using Slack Webhooks. +- _MandrillHandler_: Sends emails via the Mandrill API using a [`Swift_Message`](http://swiftmailer.org/) instance. +- _FleepHookHandler_: Logs records to a [Fleep](https://fleep.io/) conversation using Webhooks. +- _IFTTTHandler_: Notifies an [IFTTT](https://ifttt.com/maker) trigger with the log channel, level name and message. + +### Log specific servers and networked logging + +- _SocketHandler_: Logs records to [sockets](http://php.net/fsockopen), use this + for UNIX and TCP sockets. See an [example](sockets.md). +- _AmqpHandler_: Logs records to an [amqp](http://www.amqp.org/) compatible + server. Requires the [php-amqp](http://pecl.php.net/package/amqp) extension (1.0+). +- _GelfHandler_: Logs records to a [Graylog2](http://www.graylog2.org) server. +- _CubeHandler_: Logs records to a [Cube](http://square.github.com/cube/) server. +- _RavenHandler_: Logs records to a [Sentry](http://getsentry.com/) server using + [raven](https://packagist.org/packages/raven/raven). +- _ZendMonitorHandler_: Logs records to the Zend Monitor present in Zend Server. +- _NewRelicHandler_: Logs records to a [NewRelic](http://newrelic.com/) application. +- _LogglyHandler_: Logs records to a [Loggly](http://www.loggly.com/) account. +- _RollbarHandler_: Logs records to a [Rollbar](https://rollbar.com/) account. +- _SyslogUdpHandler_: Logs records to a remote [Syslogd](http://www.rsyslog.com/) server. +- _LogEntriesHandler_: Logs records to a [LogEntries](http://logentries.com/) account. + +### Logging in development + +- _FirePHPHandler_: Handler for [FirePHP](http://www.firephp.org/), providing + inline `console` messages within [FireBug](http://getfirebug.com/). +- _ChromePHPHandler_: Handler for [ChromePHP](http://www.chromephp.com/), providing + inline `console` messages within Chrome. +- _BrowserConsoleHandler_: Handler to send logs to browser's Javascript `console` with + no browser extension required. Most browsers supporting `console` API are supported. +- _PHPConsoleHandler_: Handler for [PHP Console](https://chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef), providing + inline `console` and notification popup messages within Chrome. + +### Log to databases + +- _RedisHandler_: Logs records to a [redis](http://redis.io) server. +- _MongoDBHandler_: Handler to write records in MongoDB via a + [Mongo](http://pecl.php.net/package/mongo) extension connection. +- _CouchDBHandler_: Logs records to a CouchDB server. +- _DoctrineCouchDBHandler_: Logs records to a CouchDB server via the Doctrine CouchDB ODM. +- _ElasticSearchHandler_: Logs records to an Elastic Search server. +- _DynamoDbHandler_: Logs records to a DynamoDB table with the [AWS SDK](https://github.com/aws/aws-sdk-php). + +### Wrappers / Special Handlers + +- _FingersCrossedHandler_: A very interesting wrapper. It takes a logger as + parameter and will accumulate log records of all levels until a record + exceeds the defined severity level. At which point it delivers all records, + including those of lower severity, to the handler it wraps. This means that + until an error actually happens you will not see anything in your logs, but + when it happens you will have the full information, including debug and info + records. This provides you with all the information you need, but only when + you need it. +- _DeduplicationHandler_: Useful if you are sending notifications or emails + when critical errors occur. It takes a logger as parameter and will + accumulate log records of all levels until the end of the request (or + `flush()` is called). At that point it delivers all records to the handler + it wraps, but only if the records are unique over a given time period + (60seconds by default). If the records are duplicates they are simply + discarded. The main use of this is in case of critical failure like if your + database is unreachable for example all your requests will fail and that + can result in a lot of notifications being sent. Adding this handler reduces + the amount of notifications to a manageable level. +- _WhatFailureGroupHandler_: This handler extends the _GroupHandler_ ignoring + exceptions raised by each child handler. This allows you to ignore issues + where a remote tcp connection may have died but you do not want your entire + application to crash and may wish to continue to log to other handlers. +- _BufferHandler_: This handler will buffer all the log records it receives + until `close()` is called at which point it will call `handleBatch()` on the + handler it wraps with all the log messages at once. This is very useful to + send an email with all records at once for example instead of having one mail + for every log record. +- _GroupHandler_: This handler groups other handlers. Every record received is + sent to all the handlers it is configured with. +- _FilterHandler_: This handler only lets records of the given levels through + to the wrapped handler. +- _SamplingHandler_: Wraps around another handler and lets you sample records + if you only want to store some of them. +- _NullHandler_: Any record it can handle will be thrown away. This can be used + to put on top of an existing handler stack to disable it temporarily. +- _PsrHandler_: Can be used to forward log records to an existing PSR-3 logger +- _TestHandler_: Used for testing, it records everything that is sent to it and + has accessors to read out the information. +- _HandlerWrapper_: A simple handler wrapper you can inherit from to create + your own wrappers easily. + +## Formatters + +- _LineFormatter_: Formats a log record into a one-line string. +- _HtmlFormatter_: Used to format log records into a human readable html table, mainly suitable for emails. +- _NormalizerFormatter_: Normalizes objects/resources down to strings so a record can easily be serialized/encoded. +- _ScalarFormatter_: Used to format log records into an associative array of scalar values. +- _JsonFormatter_: Encodes a log record into json. +- _WildfireFormatter_: Used to format log records into the Wildfire/FirePHP protocol, only useful for the FirePHPHandler. +- _ChromePHPFormatter_: Used to format log records into the ChromePHP format, only useful for the ChromePHPHandler. +- _GelfMessageFormatter_: Used to format log records into Gelf message instances, only useful for the GelfHandler. +- _LogstashFormatter_: Used to format log records into [logstash](http://logstash.net/) event json, useful for any handler listed under inputs [here](http://logstash.net/docs/latest). +- _ElasticaFormatter_: Used to format log records into an Elastica\Document object, only useful for the ElasticSearchHandler. +- _LogglyFormatter_: Used to format log records into Loggly messages, only useful for the LogglyHandler. +- _FlowdockFormatter_: Used to format log records into Flowdock messages, only useful for the FlowdockHandler. +- _MongoDBFormatter_: Converts \DateTime instances to \MongoDate and objects recursively to arrays, only useful with the MongoDBHandler. + +## Processors + +- _PsrLogMessageProcessor_: Processes a log record's message according to PSR-3 rules, replacing `{foo}` with the value from `$context['foo']`. +- _IntrospectionProcessor_: Adds the line/file/class/method from which the log call originated. +- _WebProcessor_: Adds the current request URI, request method and client IP to a log record. +- _MemoryUsageProcessor_: Adds the current memory usage to a log record. +- _MemoryPeakUsageProcessor_: Adds the peak memory usage to a log record. +- _ProcessIdProcessor_: Adds the process id to a log record. +- _UidProcessor_: Adds a unique identifier to a log record. +- _GitProcessor_: Adds the current git branch and commit to a log record. +- _TagProcessor_: Adds an array of predefined tags to a log record. + +## Third Party Packages + +Third party handlers, formatters and processors are +[listed in the wiki](https://github.com/Seldaek/monolog/wiki/Third-Party-Packages). You +can also add your own there if you publish one. + +← [Usage](01-usage.md) | [Utility classes](03-utilities.md) → diff --git a/vendor/monolog/monolog/doc/03-utilities.md b/vendor/monolog/monolog/doc/03-utilities.md new file mode 100644 index 0000000..c62aa41 --- /dev/null +++ b/vendor/monolog/monolog/doc/03-utilities.md @@ -0,0 +1,13 @@ +# Utilities + +- _Registry_: The `Monolog\Registry` class lets you configure global loggers that you + can then statically access from anywhere. It is not really a best practice but can + help in some older codebases or for ease of use. +- _ErrorHandler_: The `Monolog\ErrorHandler` class allows you to easily register + a Logger instance as an exception handler, error handler or fatal error handler. +- _ErrorLevelActivationStrategy_: Activates a FingersCrossedHandler when a certain log + level is reached. +- _ChannelLevelActivationStrategy_: Activates a FingersCrossedHandler when a certain + log level is reached, depending on which channel received the log record. + +← [Handlers, Formatters and Processors](02-handlers-formatters-processors.md) | [Extending Monolog](04-extending.md) → diff --git a/vendor/monolog/monolog/doc/04-extending.md b/vendor/monolog/monolog/doc/04-extending.md new file mode 100644 index 0000000..ebd9104 --- /dev/null +++ b/vendor/monolog/monolog/doc/04-extending.md @@ -0,0 +1,76 @@ +# Extending Monolog + +Monolog is fully extensible, allowing you to adapt your logger to your needs. + +## Writing your own handler + +Monolog provides many built-in handlers. But if the one you need does not +exist, you can write it and use it in your logger. The only requirement is +to implement `Monolog\Handler\HandlerInterface`. + +Let's write a PDOHandler to log records to a database. We will extend the +abstract class provided by Monolog to keep things DRY. + +```php +pdo = $pdo; + parent::__construct($level, $bubble); + } + + protected function write(array $record) + { + if (!$this->initialized) { + $this->initialize(); + } + + $this->statement->execute(array( + 'channel' => $record['channel'], + 'level' => $record['level'], + 'message' => $record['formatted'], + 'time' => $record['datetime']->format('U'), + )); + } + + private function initialize() + { + $this->pdo->exec( + 'CREATE TABLE IF NOT EXISTS monolog ' + .'(channel VARCHAR(255), level INTEGER, message LONGTEXT, time INTEGER UNSIGNED)' + ); + $this->statement = $this->pdo->prepare( + 'INSERT INTO monolog (channel, level, message, time) VALUES (:channel, :level, :message, :time)' + ); + + $this->initialized = true; + } +} +``` + +You can now use this handler in your logger: + +```php +pushHandler(new PDOHandler(new PDO('sqlite:logs.sqlite'))); + +// You can now use your logger +$logger->addInfo('My logger is now ready'); +``` + +The `Monolog\Handler\AbstractProcessingHandler` class provides most of the +logic needed for the handler, including the use of processors and the formatting +of the record (which is why we use ``$record['formatted']`` instead of ``$record['message']``). + +← [Utility classes](03-utilities.md) diff --git a/vendor/monolog/monolog/doc/sockets.md b/vendor/monolog/monolog/doc/sockets.md new file mode 100644 index 0000000..ea9cf0e --- /dev/null +++ b/vendor/monolog/monolog/doc/sockets.md @@ -0,0 +1,39 @@ +Sockets Handler +=============== + +This handler allows you to write your logs to sockets using [fsockopen](http://php.net/fsockopen) +or [pfsockopen](http://php.net/pfsockopen). + +Persistent sockets are mainly useful in web environments where you gain some performance not closing/opening +the connections between requests. + +You can use a `unix://` prefix to access unix sockets and `udp://` to open UDP sockets instead of the default TCP. + +Basic Example +------------- + +```php +setPersistent(true); + +// Now add the handler +$logger->pushHandler($handler, Logger::DEBUG); + +// You can now use your logger +$logger->addInfo('My logger is now ready'); + +``` + +In this example, using syslog-ng, you should see the log on the log server: + + cweb1 [2012-02-26 00:12:03] my_logger.INFO: My logger is now ready [] [] + diff --git a/vendor/monolog/monolog/phpunit.xml.dist b/vendor/monolog/monolog/phpunit.xml.dist new file mode 100644 index 0000000..20d82b6 --- /dev/null +++ b/vendor/monolog/monolog/phpunit.xml.dist @@ -0,0 +1,19 @@ + + + + + + tests/Monolog/ + + + + + + src/Monolog/ + + + + + + + diff --git a/vendor/monolog/monolog/src/Monolog/ErrorHandler.php b/vendor/monolog/monolog/src/Monolog/ErrorHandler.php new file mode 100644 index 0000000..7bfcd83 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/ErrorHandler.php @@ -0,0 +1,230 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use Psr\Log\LoggerInterface; +use Psr\Log\LogLevel; +use Monolog\Handler\AbstractHandler; + +/** + * Monolog error handler + * + * A facility to enable logging of runtime errors, exceptions and fatal errors. + * + * Quick setup: ErrorHandler::register($logger); + * + * @author Jordi Boggiano + */ +class ErrorHandler +{ + private $logger; + + private $previousExceptionHandler; + private $uncaughtExceptionLevel; + + private $previousErrorHandler; + private $errorLevelMap; + private $handleOnlyReportedErrors; + + private $hasFatalErrorHandler; + private $fatalLevel; + private $reservedMemory; + private static $fatalErrors = array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR); + + public function __construct(LoggerInterface $logger) + { + $this->logger = $logger; + } + + /** + * Registers a new ErrorHandler for a given Logger + * + * By default it will handle errors, exceptions and fatal errors + * + * @param LoggerInterface $logger + * @param array|false $errorLevelMap an array of E_* constant to LogLevel::* constant mapping, or false to disable error handling + * @param int|false $exceptionLevel a LogLevel::* constant, or false to disable exception handling + * @param int|false $fatalLevel a LogLevel::* constant, or false to disable fatal error handling + * @return ErrorHandler + */ + public static function register(LoggerInterface $logger, $errorLevelMap = array(), $exceptionLevel = null, $fatalLevel = null) + { + //Forces the autoloader to run for LogLevel. Fixes an autoload issue at compile-time on PHP5.3. See https://github.com/Seldaek/monolog/pull/929 + class_exists('\\Psr\\Log\\LogLevel', true); + + $handler = new static($logger); + if ($errorLevelMap !== false) { + $handler->registerErrorHandler($errorLevelMap); + } + if ($exceptionLevel !== false) { + $handler->registerExceptionHandler($exceptionLevel); + } + if ($fatalLevel !== false) { + $handler->registerFatalHandler($fatalLevel); + } + + return $handler; + } + + public function registerExceptionHandler($level = null, $callPrevious = true) + { + $prev = set_exception_handler(array($this, 'handleException')); + $this->uncaughtExceptionLevel = $level; + if ($callPrevious && $prev) { + $this->previousExceptionHandler = $prev; + } + } + + public function registerErrorHandler(array $levelMap = array(), $callPrevious = true, $errorTypes = -1, $handleOnlyReportedErrors = true) + { + $prev = set_error_handler(array($this, 'handleError'), $errorTypes); + $this->errorLevelMap = array_replace($this->defaultErrorLevelMap(), $levelMap); + if ($callPrevious) { + $this->previousErrorHandler = $prev ?: true; + } + + $this->handleOnlyReportedErrors = $handleOnlyReportedErrors; + } + + public function registerFatalHandler($level = null, $reservedMemorySize = 20) + { + register_shutdown_function(array($this, 'handleFatalError')); + + $this->reservedMemory = str_repeat(' ', 1024 * $reservedMemorySize); + $this->fatalLevel = $level; + $this->hasFatalErrorHandler = true; + } + + protected function defaultErrorLevelMap() + { + return array( + E_ERROR => LogLevel::CRITICAL, + E_WARNING => LogLevel::WARNING, + E_PARSE => LogLevel::ALERT, + E_NOTICE => LogLevel::NOTICE, + E_CORE_ERROR => LogLevel::CRITICAL, + E_CORE_WARNING => LogLevel::WARNING, + E_COMPILE_ERROR => LogLevel::ALERT, + E_COMPILE_WARNING => LogLevel::WARNING, + E_USER_ERROR => LogLevel::ERROR, + E_USER_WARNING => LogLevel::WARNING, + E_USER_NOTICE => LogLevel::NOTICE, + E_STRICT => LogLevel::NOTICE, + E_RECOVERABLE_ERROR => LogLevel::ERROR, + E_DEPRECATED => LogLevel::NOTICE, + E_USER_DEPRECATED => LogLevel::NOTICE, + ); + } + + /** + * @private + */ + public function handleException($e) + { + $this->logger->log( + $this->uncaughtExceptionLevel === null ? LogLevel::ERROR : $this->uncaughtExceptionLevel, + sprintf('Uncaught Exception %s: "%s" at %s line %s', get_class($e), $e->getMessage(), $e->getFile(), $e->getLine()), + array('exception' => $e) + ); + + if ($this->previousExceptionHandler) { + call_user_func($this->previousExceptionHandler, $e); + } + + exit(255); + } + + /** + * @private + */ + public function handleError($code, $message, $file = '', $line = 0, $context = array()) + { + if ($this->handleOnlyReportedErrors && !(error_reporting() & $code)) { + return; + } + + // fatal error codes are ignored if a fatal error handler is present as well to avoid duplicate log entries + if (!$this->hasFatalErrorHandler || !in_array($code, self::$fatalErrors, true)) { + $level = isset($this->errorLevelMap[$code]) ? $this->errorLevelMap[$code] : LogLevel::CRITICAL; + $this->logger->log($level, self::codeToString($code).': '.$message, array('code' => $code, 'message' => $message, 'file' => $file, 'line' => $line)); + } + + if ($this->previousErrorHandler === true) { + return false; + } elseif ($this->previousErrorHandler) { + return call_user_func($this->previousErrorHandler, $code, $message, $file, $line, $context); + } + } + + /** + * @private + */ + public function handleFatalError() + { + $this->reservedMemory = null; + + $lastError = error_get_last(); + if ($lastError && in_array($lastError['type'], self::$fatalErrors, true)) { + $this->logger->log( + $this->fatalLevel === null ? LogLevel::ALERT : $this->fatalLevel, + 'Fatal Error ('.self::codeToString($lastError['type']).'): '.$lastError['message'], + array('code' => $lastError['type'], 'message' => $lastError['message'], 'file' => $lastError['file'], 'line' => $lastError['line']) + ); + + if ($this->logger instanceof Logger) { + foreach ($this->logger->getHandlers() as $handler) { + if ($handler instanceof AbstractHandler) { + $handler->close(); + } + } + } + } + } + + private static function codeToString($code) + { + switch ($code) { + case E_ERROR: + return 'E_ERROR'; + case E_WARNING: + return 'E_WARNING'; + case E_PARSE: + return 'E_PARSE'; + case E_NOTICE: + return 'E_NOTICE'; + case E_CORE_ERROR: + return 'E_CORE_ERROR'; + case E_CORE_WARNING: + return 'E_CORE_WARNING'; + case E_COMPILE_ERROR: + return 'E_COMPILE_ERROR'; + case E_COMPILE_WARNING: + return 'E_COMPILE_WARNING'; + case E_USER_ERROR: + return 'E_USER_ERROR'; + case E_USER_WARNING: + return 'E_USER_WARNING'; + case E_USER_NOTICE: + return 'E_USER_NOTICE'; + case E_STRICT: + return 'E_STRICT'; + case E_RECOVERABLE_ERROR: + return 'E_RECOVERABLE_ERROR'; + case E_DEPRECATED: + return 'E_DEPRECATED'; + case E_USER_DEPRECATED: + return 'E_USER_DEPRECATED'; + } + + return 'Unknown PHP error'; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php new file mode 100644 index 0000000..9beda1e --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php @@ -0,0 +1,78 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; + +/** + * Formats a log message according to the ChromePHP array format + * + * @author Christophe Coevoet + */ +class ChromePHPFormatter implements FormatterInterface +{ + /** + * Translates Monolog log levels to Wildfire levels. + */ + private $logLevels = array( + Logger::DEBUG => 'log', + Logger::INFO => 'info', + Logger::NOTICE => 'info', + Logger::WARNING => 'warn', + Logger::ERROR => 'error', + Logger::CRITICAL => 'error', + Logger::ALERT => 'error', + Logger::EMERGENCY => 'error', + ); + + /** + * {@inheritdoc} + */ + public function format(array $record) + { + // Retrieve the line and file if set and remove them from the formatted extra + $backtrace = 'unknown'; + if (isset($record['extra']['file'], $record['extra']['line'])) { + $backtrace = $record['extra']['file'].' : '.$record['extra']['line']; + unset($record['extra']['file'], $record['extra']['line']); + } + + $message = array('message' => $record['message']); + if ($record['context']) { + $message['context'] = $record['context']; + } + if ($record['extra']) { + $message['extra'] = $record['extra']; + } + if (count($message) === 1) { + $message = reset($message); + } + + return array( + $record['channel'], + $message, + $backtrace, + $this->logLevels[$record['level']], + ); + } + + public function formatBatch(array $records) + { + $formatted = array(); + + foreach ($records as $record) { + $formatted[] = $this->format($record); + } + + return $formatted; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php new file mode 100644 index 0000000..4c556cf --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php @@ -0,0 +1,89 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Elastica\Document; + +/** + * Format a log message into an Elastica Document + * + * @author Jelle Vink + */ +class ElasticaFormatter extends NormalizerFormatter +{ + /** + * @var string Elastic search index name + */ + protected $index; + + /** + * @var string Elastic search document type + */ + protected $type; + + /** + * @param string $index Elastic Search index name + * @param string $type Elastic Search document type + */ + public function __construct($index, $type) + { + // elasticsearch requires a ISO 8601 format date with optional millisecond precision. + parent::__construct('Y-m-d\TH:i:s.uP'); + + $this->index = $index; + $this->type = $type; + } + + /** + * {@inheritdoc} + */ + public function format(array $record) + { + $record = parent::format($record); + + return $this->getDocument($record); + } + + /** + * Getter index + * @return string + */ + public function getIndex() + { + return $this->index; + } + + /** + * Getter type + * @return string + */ + public function getType() + { + return $this->type; + } + + /** + * Convert a log message into an Elastica Document + * + * @param array $record Log message + * @return Document + */ + protected function getDocument($record) + { + $document = new Document(); + $document->setData($record); + $document->setType($this->type); + $document->setIndex($this->index); + + return $document; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php new file mode 100644 index 0000000..5094af3 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php @@ -0,0 +1,116 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * formats the record to be used in the FlowdockHandler + * + * @author Dominik Liebler + */ +class FlowdockFormatter implements FormatterInterface +{ + /** + * @var string + */ + private $source; + + /** + * @var string + */ + private $sourceEmail; + + /** + * @param string $source + * @param string $sourceEmail + */ + public function __construct($source, $sourceEmail) + { + $this->source = $source; + $this->sourceEmail = $sourceEmail; + } + + /** + * {@inheritdoc} + */ + public function format(array $record) + { + $tags = array( + '#logs', + '#' . strtolower($record['level_name']), + '#' . $record['channel'], + ); + + foreach ($record['extra'] as $value) { + $tags[] = '#' . $value; + } + + $subject = sprintf( + 'in %s: %s - %s', + $this->source, + $record['level_name'], + $this->getShortMessage($record['message']) + ); + + $record['flowdock'] = array( + 'source' => $this->source, + 'from_address' => $this->sourceEmail, + 'subject' => $subject, + 'content' => $record['message'], + 'tags' => $tags, + 'project' => $this->source, + ); + + return $record; + } + + /** + * {@inheritdoc} + */ + public function formatBatch(array $records) + { + $formatted = array(); + + foreach ($records as $record) { + $formatted[] = $this->format($record); + } + + return $formatted; + } + + /** + * @param string $message + * + * @return string + */ + public function getShortMessage($message) + { + static $hasMbString; + + if (null === $hasMbString) { + $hasMbString = function_exists('mb_strlen'); + } + + $maxLength = 45; + + if ($hasMbString) { + if (mb_strlen($message, 'UTF-8') > $maxLength) { + $message = mb_substr($message, 0, $maxLength - 4, 'UTF-8') . ' ...'; + } + } else { + if (strlen($message) > $maxLength) { + $message = substr($message, 0, $maxLength - 4) . ' ...'; + } + } + + return $message; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php new file mode 100644 index 0000000..02632bb --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php @@ -0,0 +1,85 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * Class FluentdFormatter + * + * Serializes a log message to Fluentd unix socket protocol + * + * Fluentd config: + * + * + * type unix + * path /var/run/td-agent/td-agent.sock + * + * + * Monolog setup: + * + * $logger = new Monolog\Logger('fluent.tag'); + * $fluentHandler = new Monolog\Handler\SocketHandler('unix:///var/run/td-agent/td-agent.sock'); + * $fluentHandler->setFormatter(new Monolog\Formatter\FluentdFormatter()); + * $logger->pushHandler($fluentHandler); + * + * @author Andrius Putna + */ +class FluentdFormatter implements FormatterInterface +{ + /** + * @var bool $levelTag should message level be a part of the fluentd tag + */ + protected $levelTag = false; + + public function __construct($levelTag = false) + { + if (!function_exists('json_encode')) { + throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter'); + } + + $this->levelTag = (bool) $levelTag; + } + + public function isUsingLevelsInTag() + { + return $this->levelTag; + } + + public function format(array $record) + { + $tag = $record['channel']; + if ($this->levelTag) { + $tag .= '.' . strtolower($record['level_name']); + } + + $message = array( + 'message' => $record['message'], + 'extra' => $record['extra'], + ); + + if (!$this->levelTag) { + $message['level'] = $record['level']; + $message['level_name'] = $record['level_name']; + } + + return json_encode(array($tag, $record['datetime']->getTimestamp(), $message)); + } + + public function formatBatch(array $records) + { + $message = ''; + foreach ($records as $record) { + $message .= $this->format($record); + } + + return $message; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php b/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php new file mode 100644 index 0000000..b5de751 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * Interface for formatters + * + * @author Jordi Boggiano + */ +interface FormatterInterface +{ + /** + * Formats a log record. + * + * @param array $record A record to format + * @return mixed The formatted record + */ + public function format(array $record); + + /** + * Formats a set of log records. + * + * @param array $records A set of records to format + * @return mixed The formatted set of records + */ + public function formatBatch(array $records); +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php new file mode 100644 index 0000000..2c1b0e8 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; +use Gelf\Message; + +/** + * Serializes a log message to GELF + * @see http://www.graylog2.org/about/gelf + * + * @author Matt Lehner + */ +class GelfMessageFormatter extends NormalizerFormatter +{ + const DEFAULT_MAX_LENGTH = 32766; + + /** + * @var string the name of the system for the Gelf log message + */ + protected $systemName; + + /** + * @var string a prefix for 'extra' fields from the Monolog record (optional) + */ + protected $extraPrefix; + + /** + * @var string a prefix for 'context' fields from the Monolog record (optional) + */ + protected $contextPrefix; + + /** + * @var int max length per field + */ + protected $maxLength; + + /** + * Translates Monolog log levels to Graylog2 log priorities. + */ + private $logLevels = array( + Logger::DEBUG => 7, + Logger::INFO => 6, + Logger::NOTICE => 5, + Logger::WARNING => 4, + Logger::ERROR => 3, + Logger::CRITICAL => 2, + Logger::ALERT => 1, + Logger::EMERGENCY => 0, + ); + + public function __construct($systemName = null, $extraPrefix = null, $contextPrefix = 'ctxt_', $maxLength = null) + { + parent::__construct('U.u'); + + $this->systemName = $systemName ?: gethostname(); + + $this->extraPrefix = $extraPrefix; + $this->contextPrefix = $contextPrefix; + $this->maxLength = is_null($maxLength) ? self::DEFAULT_MAX_LENGTH : $maxLength; + } + + /** + * {@inheritdoc} + */ + public function format(array $record) + { + $record = parent::format($record); + + if (!isset($record['datetime'], $record['message'], $record['level'])) { + throw new \InvalidArgumentException('The record should at least contain datetime, message and level keys, '.var_export($record, true).' given'); + } + + $message = new Message(); + $message + ->setTimestamp($record['datetime']) + ->setShortMessage((string) $record['message']) + ->setHost($this->systemName) + ->setLevel($this->logLevels[$record['level']]); + + // message length + system name length + 200 for padding / metadata + $len = 200 + strlen((string) $record['message']) + strlen($this->systemName); + + if ($len > $this->maxLength) { + $message->setShortMessage(substr($record['message'], 0, $this->maxLength)); + } + + if (isset($record['channel'])) { + $message->setFacility($record['channel']); + } + if (isset($record['extra']['line'])) { + $message->setLine($record['extra']['line']); + unset($record['extra']['line']); + } + if (isset($record['extra']['file'])) { + $message->setFile($record['extra']['file']); + unset($record['extra']['file']); + } + + foreach ($record['extra'] as $key => $val) { + $val = is_scalar($val) || null === $val ? $val : $this->toJson($val); + $len = strlen($this->extraPrefix . $key . $val); + if ($len > $this->maxLength) { + $message->setAdditional($this->extraPrefix . $key, substr($val, 0, $this->maxLength)); + break; + } + $message->setAdditional($this->extraPrefix . $key, $val); + } + + foreach ($record['context'] as $key => $val) { + $val = is_scalar($val) || null === $val ? $val : $this->toJson($val); + $len = strlen($this->contextPrefix . $key . $val); + if ($len > $this->maxLength) { + $message->setAdditional($this->contextPrefix . $key, substr($val, 0, $this->maxLength)); + break; + } + $message->setAdditional($this->contextPrefix . $key, $val); + } + + if (null === $message->getFile() && isset($record['context']['exception']['file'])) { + if (preg_match("/^(.+):([0-9]+)$/", $record['context']['exception']['file'], $matches)) { + $message->setFile($matches[1]); + $message->setLine($matches[2]); + } + } + + return $message; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php new file mode 100644 index 0000000..3eec95f --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php @@ -0,0 +1,141 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; + +/** + * Formats incoming records into an HTML table + * + * This is especially useful for html email logging + * + * @author Tiago Brito + */ +class HtmlFormatter extends NormalizerFormatter +{ + /** + * Translates Monolog log levels to html color priorities. + */ + protected $logLevels = array( + Logger::DEBUG => '#cccccc', + Logger::INFO => '#468847', + Logger::NOTICE => '#3a87ad', + Logger::WARNING => '#c09853', + Logger::ERROR => '#f0ad4e', + Logger::CRITICAL => '#FF7708', + Logger::ALERT => '#C12A19', + Logger::EMERGENCY => '#000000', + ); + + /** + * @param string $dateFormat The format of the timestamp: one supported by DateTime::format + */ + public function __construct($dateFormat = null) + { + parent::__construct($dateFormat); + } + + /** + * Creates an HTML table row + * + * @param string $th Row header content + * @param string $td Row standard cell content + * @param bool $escapeTd false if td content must not be html escaped + * @return string + */ + protected function addRow($th, $td = ' ', $escapeTd = true) + { + $th = htmlspecialchars($th, ENT_NOQUOTES, 'UTF-8'); + if ($escapeTd) { + $td = '
'.htmlspecialchars($td, ENT_NOQUOTES, 'UTF-8').'
'; + } + + return "\n$th:\n".$td."\n"; + } + + /** + * Create a HTML h1 tag + * + * @param string $title Text to be in the h1 + * @param int $level Error level + * @return string + */ + protected function addTitle($title, $level) + { + $title = htmlspecialchars($title, ENT_NOQUOTES, 'UTF-8'); + + return '

'.$title.'

'; + } + + /** + * Formats a log record. + * + * @param array $record A record to format + * @return mixed The formatted record + */ + public function format(array $record) + { + $output = $this->addTitle($record['level_name'], $record['level']); + $output .= ''; + + $output .= $this->addRow('Message', (string) $record['message']); + $output .= $this->addRow('Time', $record['datetime']->format($this->dateFormat)); + $output .= $this->addRow('Channel', $record['channel']); + if ($record['context']) { + $embeddedTable = '
'; + foreach ($record['context'] as $key => $value) { + $embeddedTable .= $this->addRow($key, $this->convertToString($value)); + } + $embeddedTable .= '
'; + $output .= $this->addRow('Context', $embeddedTable, false); + } + if ($record['extra']) { + $embeddedTable = ''; + foreach ($record['extra'] as $key => $value) { + $embeddedTable .= $this->addRow($key, $this->convertToString($value)); + } + $embeddedTable .= '
'; + $output .= $this->addRow('Extra', $embeddedTable, false); + } + + return $output.''; + } + + /** + * Formats a set of log records. + * + * @param array $records A set of records to format + * @return mixed The formatted set of records + */ + public function formatBatch(array $records) + { + $message = ''; + foreach ($records as $record) { + $message .= $this->format($record); + } + + return $message; + } + + protected function convertToString($data) + { + if (null === $data || is_scalar($data)) { + return (string) $data; + } + + $data = $this->normalize($data); + if (version_compare(PHP_VERSION, '5.4.0', '>=')) { + return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + } + + return str_replace('\\/', '/', json_encode($data)); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php new file mode 100644 index 0000000..0782f14 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php @@ -0,0 +1,208 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Exception; +use Throwable; + +/** + * Encodes whatever record data is passed to it as json + * + * This can be useful to log to databases or remote APIs + * + * @author Jordi Boggiano + */ +class JsonFormatter extends NormalizerFormatter +{ + const BATCH_MODE_JSON = 1; + const BATCH_MODE_NEWLINES = 2; + + protected $batchMode; + protected $appendNewline; + + /** + * @var bool + */ + protected $includeStacktraces = false; + + /** + * @param int $batchMode + * @param bool $appendNewline + */ + public function __construct($batchMode = self::BATCH_MODE_JSON, $appendNewline = true) + { + $this->batchMode = $batchMode; + $this->appendNewline = $appendNewline; + } + + /** + * The batch mode option configures the formatting style for + * multiple records. By default, multiple records will be + * formatted as a JSON-encoded array. However, for + * compatibility with some API endpoints, alternative styles + * are available. + * + * @return int + */ + public function getBatchMode() + { + return $this->batchMode; + } + + /** + * True if newlines are appended to every formatted record + * + * @return bool + */ + public function isAppendingNewlines() + { + return $this->appendNewline; + } + + /** + * {@inheritdoc} + */ + public function format(array $record) + { + return $this->toJson($this->normalize($record), true) . ($this->appendNewline ? "\n" : ''); + } + + /** + * {@inheritdoc} + */ + public function formatBatch(array $records) + { + switch ($this->batchMode) { + case static::BATCH_MODE_NEWLINES: + return $this->formatBatchNewlines($records); + + case static::BATCH_MODE_JSON: + default: + return $this->formatBatchJson($records); + } + } + + /** + * @param bool $include + */ + public function includeStacktraces($include = true) + { + $this->includeStacktraces = $include; + } + + /** + * Return a JSON-encoded array of records. + * + * @param array $records + * @return string + */ + protected function formatBatchJson(array $records) + { + return $this->toJson($this->normalize($records), true); + } + + /** + * Use new lines to separate records instead of a + * JSON-encoded array. + * + * @param array $records + * @return string + */ + protected function formatBatchNewlines(array $records) + { + $instance = $this; + + $oldNewline = $this->appendNewline; + $this->appendNewline = false; + array_walk($records, function (&$value, $key) use ($instance) { + $value = $instance->format($value); + }); + $this->appendNewline = $oldNewline; + + return implode("\n", $records); + } + + /** + * Normalizes given $data. + * + * @param mixed $data + * + * @return mixed + */ + protected function normalize($data) + { + if (is_array($data) || $data instanceof \Traversable) { + $normalized = array(); + + $count = 1; + foreach ($data as $key => $value) { + if ($count++ >= 1000) { + $normalized['...'] = 'Over 1000 items, aborting normalization'; + break; + } + $normalized[$key] = $this->normalize($value); + } + + return $normalized; + } + + if ($data instanceof Exception || $data instanceof Throwable) { + return $this->normalizeException($data); + } + + return $data; + } + + /** + * Normalizes given exception with or without its own stack trace based on + * `includeStacktraces` property. + * + * @param Exception|Throwable $e + * + * @return array + */ + protected function normalizeException($e) + { + // TODO 2.0 only check for Throwable + if (!$e instanceof Exception && !$e instanceof Throwable) { + throw new \InvalidArgumentException('Exception/Throwable expected, got '.gettype($e).' / '.get_class($e)); + } + + $data = array( + 'class' => get_class($e), + 'message' => $e->getMessage(), + 'code' => $e->getCode(), + 'file' => $e->getFile().':'.$e->getLine(), + ); + + if ($this->includeStacktraces) { + $trace = $e->getTrace(); + foreach ($trace as $frame) { + if (isset($frame['file'])) { + $data['trace'][] = $frame['file'].':'.$frame['line']; + } elseif (isset($frame['function']) && $frame['function'] === '{closure}') { + // We should again normalize the frames, because it might contain invalid items + $data['trace'][] = $frame['function']; + } else { + // We should again normalize the frames, because it might contain invalid items + $data['trace'][] = $this->normalize($frame); + } + } + } + + if ($previous = $e->getPrevious()) { + $data['previous'] = $this->normalizeException($previous); + } + + return $data; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php new file mode 100644 index 0000000..d3e209e --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php @@ -0,0 +1,179 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * Formats incoming records into a one-line string + * + * This is especially useful for logging to files + * + * @author Jordi Boggiano + * @author Christophe Coevoet + */ +class LineFormatter extends NormalizerFormatter +{ + const SIMPLE_FORMAT = "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"; + + protected $format; + protected $allowInlineLineBreaks; + protected $ignoreEmptyContextAndExtra; + protected $includeStacktraces; + + /** + * @param string $format The format of the message + * @param string $dateFormat The format of the timestamp: one supported by DateTime::format + * @param bool $allowInlineLineBreaks Whether to allow inline line breaks in log entries + * @param bool $ignoreEmptyContextAndExtra + */ + public function __construct($format = null, $dateFormat = null, $allowInlineLineBreaks = false, $ignoreEmptyContextAndExtra = false) + { + $this->format = $format ?: static::SIMPLE_FORMAT; + $this->allowInlineLineBreaks = $allowInlineLineBreaks; + $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra; + parent::__construct($dateFormat); + } + + public function includeStacktraces($include = true) + { + $this->includeStacktraces = $include; + if ($this->includeStacktraces) { + $this->allowInlineLineBreaks = true; + } + } + + public function allowInlineLineBreaks($allow = true) + { + $this->allowInlineLineBreaks = $allow; + } + + public function ignoreEmptyContextAndExtra($ignore = true) + { + $this->ignoreEmptyContextAndExtra = $ignore; + } + + /** + * {@inheritdoc} + */ + public function format(array $record) + { + $vars = parent::format($record); + + $output = $this->format; + + foreach ($vars['extra'] as $var => $val) { + if (false !== strpos($output, '%extra.'.$var.'%')) { + $output = str_replace('%extra.'.$var.'%', $this->stringify($val), $output); + unset($vars['extra'][$var]); + } + } + + + foreach ($vars['context'] as $var => $val) { + if (false !== strpos($output, '%context.'.$var.'%')) { + $output = str_replace('%context.'.$var.'%', $this->stringify($val), $output); + unset($vars['context'][$var]); + } + } + + if ($this->ignoreEmptyContextAndExtra) { + if (empty($vars['context'])) { + unset($vars['context']); + $output = str_replace('%context%', '', $output); + } + + if (empty($vars['extra'])) { + unset($vars['extra']); + $output = str_replace('%extra%', '', $output); + } + } + + foreach ($vars as $var => $val) { + if (false !== strpos($output, '%'.$var.'%')) { + $output = str_replace('%'.$var.'%', $this->stringify($val), $output); + } + } + + // remove leftover %extra.xxx% and %context.xxx% if any + if (false !== strpos($output, '%')) { + $output = preg_replace('/%(?:extra|context)\..+?%/', '', $output); + } + + return $output; + } + + public function formatBatch(array $records) + { + $message = ''; + foreach ($records as $record) { + $message .= $this->format($record); + } + + return $message; + } + + public function stringify($value) + { + return $this->replaceNewlines($this->convertToString($value)); + } + + protected function normalizeException($e) + { + // TODO 2.0 only check for Throwable + if (!$e instanceof \Exception && !$e instanceof \Throwable) { + throw new \InvalidArgumentException('Exception/Throwable expected, got '.gettype($e).' / '.get_class($e)); + } + + $previousText = ''; + if ($previous = $e->getPrevious()) { + do { + $previousText .= ', '.get_class($previous).'(code: '.$previous->getCode().'): '.$previous->getMessage().' at '.$previous->getFile().':'.$previous->getLine(); + } while ($previous = $previous->getPrevious()); + } + + $str = '[object] ('.get_class($e).'(code: '.$e->getCode().'): '.$e->getMessage().' at '.$e->getFile().':'.$e->getLine().$previousText.')'; + if ($this->includeStacktraces) { + $str .= "\n[stacktrace]\n".$e->getTraceAsString()."\n"; + } + + return $str; + } + + protected function convertToString($data) + { + if (null === $data || is_bool($data)) { + return var_export($data, true); + } + + if (is_scalar($data)) { + return (string) $data; + } + + if (version_compare(PHP_VERSION, '5.4.0', '>=')) { + return $this->toJson($data, true); + } + + return str_replace('\\/', '/', @json_encode($data)); + } + + protected function replaceNewlines($str) + { + if ($this->allowInlineLineBreaks) { + if (0 === strpos($str, '{')) { + return str_replace(array('\r', '\n'), array("\r", "\n"), $str); + } + + return $str; + } + + return str_replace(array("\r\n", "\r", "\n"), ' ', $str); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php new file mode 100644 index 0000000..401859b --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * Encodes message information into JSON in a format compatible with Loggly. + * + * @author Adam Pancutt + */ +class LogglyFormatter extends JsonFormatter +{ + /** + * Overrides the default batch mode to new lines for compatibility with the + * Loggly bulk API. + * + * @param int $batchMode + */ + public function __construct($batchMode = self::BATCH_MODE_NEWLINES, $appendNewline = false) + { + parent::__construct($batchMode, $appendNewline); + } + + /** + * Appends the 'timestamp' parameter for indexing by Loggly. + * + * @see https://www.loggly.com/docs/automated-parsing/#json + * @see \Monolog\Formatter\JsonFormatter::format() + */ + public function format(array $record) + { + if (isset($record["datetime"]) && ($record["datetime"] instanceof \DateTime)) { + $record["timestamp"] = $record["datetime"]->format("Y-m-d\TH:i:s.uO"); + // TODO 2.0 unset the 'datetime' parameter, retained for BC + } + + return parent::format($record); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php new file mode 100644 index 0000000..8f83bec --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php @@ -0,0 +1,166 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * Serializes a log message to Logstash Event Format + * + * @see http://logstash.net/ + * @see https://github.com/logstash/logstash/blob/master/lib/logstash/event.rb + * + * @author Tim Mower + */ +class LogstashFormatter extends NormalizerFormatter +{ + const V0 = 0; + const V1 = 1; + + /** + * @var string the name of the system for the Logstash log message, used to fill the @source field + */ + protected $systemName; + + /** + * @var string an application name for the Logstash log message, used to fill the @type field + */ + protected $applicationName; + + /** + * @var string a prefix for 'extra' fields from the Monolog record (optional) + */ + protected $extraPrefix; + + /** + * @var string a prefix for 'context' fields from the Monolog record (optional) + */ + protected $contextPrefix; + + /** + * @var int logstash format version to use + */ + protected $version; + + /** + * @param string $applicationName the application that sends the data, used as the "type" field of logstash + * @param string $systemName the system/machine name, used as the "source" field of logstash, defaults to the hostname of the machine + * @param string $extraPrefix prefix for extra keys inside logstash "fields" + * @param string $contextPrefix prefix for context keys inside logstash "fields", defaults to ctxt_ + * @param int $version the logstash format version to use, defaults to 0 + */ + public function __construct($applicationName, $systemName = null, $extraPrefix = null, $contextPrefix = 'ctxt_', $version = self::V0) + { + // logstash requires a ISO 8601 format date with optional millisecond precision. + parent::__construct('Y-m-d\TH:i:s.uP'); + + $this->systemName = $systemName ?: gethostname(); + $this->applicationName = $applicationName; + $this->extraPrefix = $extraPrefix; + $this->contextPrefix = $contextPrefix; + $this->version = $version; + } + + /** + * {@inheritdoc} + */ + public function format(array $record) + { + $record = parent::format($record); + + if ($this->version === self::V1) { + $message = $this->formatV1($record); + } else { + $message = $this->formatV0($record); + } + + return $this->toJson($message) . "\n"; + } + + protected function formatV0(array $record) + { + if (empty($record['datetime'])) { + $record['datetime'] = gmdate('c'); + } + $message = array( + '@timestamp' => $record['datetime'], + '@source' => $this->systemName, + '@fields' => array(), + ); + if (isset($record['message'])) { + $message['@message'] = $record['message']; + } + if (isset($record['channel'])) { + $message['@tags'] = array($record['channel']); + $message['@fields']['channel'] = $record['channel']; + } + if (isset($record['level'])) { + $message['@fields']['level'] = $record['level']; + } + if ($this->applicationName) { + $message['@type'] = $this->applicationName; + } + if (isset($record['extra']['server'])) { + $message['@source_host'] = $record['extra']['server']; + } + if (isset($record['extra']['url'])) { + $message['@source_path'] = $record['extra']['url']; + } + if (!empty($record['extra'])) { + foreach ($record['extra'] as $key => $val) { + $message['@fields'][$this->extraPrefix . $key] = $val; + } + } + if (!empty($record['context'])) { + foreach ($record['context'] as $key => $val) { + $message['@fields'][$this->contextPrefix . $key] = $val; + } + } + + return $message; + } + + protected function formatV1(array $record) + { + if (empty($record['datetime'])) { + $record['datetime'] = gmdate('c'); + } + $message = array( + '@timestamp' => $record['datetime'], + '@version' => 1, + 'host' => $this->systemName, + ); + if (isset($record['message'])) { + $message['message'] = $record['message']; + } + if (isset($record['channel'])) { + $message['type'] = $record['channel']; + $message['channel'] = $record['channel']; + } + if (isset($record['level_name'])) { + $message['level'] = $record['level_name']; + } + if ($this->applicationName) { + $message['type'] = $this->applicationName; + } + if (!empty($record['extra'])) { + foreach ($record['extra'] as $key => $val) { + $message[$this->extraPrefix . $key] = $val; + } + } + if (!empty($record['context'])) { + foreach ($record['context'] as $key => $val) { + $message[$this->contextPrefix . $key] = $val; + } + } + + return $message; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php new file mode 100644 index 0000000..eb067bb --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php @@ -0,0 +1,105 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * Formats a record for use with the MongoDBHandler. + * + * @author Florian Plattner + */ +class MongoDBFormatter implements FormatterInterface +{ + private $exceptionTraceAsString; + private $maxNestingLevel; + + /** + * @param int $maxNestingLevel 0 means infinite nesting, the $record itself is level 1, $record['context'] is 2 + * @param bool $exceptionTraceAsString set to false to log exception traces as a sub documents instead of strings + */ + public function __construct($maxNestingLevel = 3, $exceptionTraceAsString = true) + { + $this->maxNestingLevel = max($maxNestingLevel, 0); + $this->exceptionTraceAsString = (bool) $exceptionTraceAsString; + } + + /** + * {@inheritDoc} + */ + public function format(array $record) + { + return $this->formatArray($record); + } + + /** + * {@inheritDoc} + */ + public function formatBatch(array $records) + { + foreach ($records as $key => $record) { + $records[$key] = $this->format($record); + } + + return $records; + } + + protected function formatArray(array $record, $nestingLevel = 0) + { + if ($this->maxNestingLevel == 0 || $nestingLevel <= $this->maxNestingLevel) { + foreach ($record as $name => $value) { + if ($value instanceof \DateTime) { + $record[$name] = $this->formatDate($value, $nestingLevel + 1); + } elseif ($value instanceof \Exception) { + $record[$name] = $this->formatException($value, $nestingLevel + 1); + } elseif (is_array($value)) { + $record[$name] = $this->formatArray($value, $nestingLevel + 1); + } elseif (is_object($value)) { + $record[$name] = $this->formatObject($value, $nestingLevel + 1); + } + } + } else { + $record = '[...]'; + } + + return $record; + } + + protected function formatObject($value, $nestingLevel) + { + $objectVars = get_object_vars($value); + $objectVars['class'] = get_class($value); + + return $this->formatArray($objectVars, $nestingLevel); + } + + protected function formatException(\Exception $exception, $nestingLevel) + { + $formattedException = array( + 'class' => get_class($exception), + 'message' => $exception->getMessage(), + 'code' => $exception->getCode(), + 'file' => $exception->getFile() . ':' . $exception->getLine(), + ); + + if ($this->exceptionTraceAsString === true) { + $formattedException['trace'] = $exception->getTraceAsString(); + } else { + $formattedException['trace'] = $exception->getTrace(); + } + + return $this->formatArray($formattedException, $nestingLevel); + } + + protected function formatDate(\DateTime $value, $nestingLevel) + { + return new \MongoDate($value->getTimestamp()); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php new file mode 100644 index 0000000..d441488 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php @@ -0,0 +1,297 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Exception; + +/** + * Normalizes incoming records to remove objects/resources so it's easier to dump to various targets + * + * @author Jordi Boggiano + */ +class NormalizerFormatter implements FormatterInterface +{ + const SIMPLE_DATE = "Y-m-d H:i:s"; + + protected $dateFormat; + + /** + * @param string $dateFormat The format of the timestamp: one supported by DateTime::format + */ + public function __construct($dateFormat = null) + { + $this->dateFormat = $dateFormat ?: static::SIMPLE_DATE; + if (!function_exists('json_encode')) { + throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter'); + } + } + + /** + * {@inheritdoc} + */ + public function format(array $record) + { + return $this->normalize($record); + } + + /** + * {@inheritdoc} + */ + public function formatBatch(array $records) + { + foreach ($records as $key => $record) { + $records[$key] = $this->format($record); + } + + return $records; + } + + protected function normalize($data) + { + if (null === $data || is_scalar($data)) { + if (is_float($data)) { + if (is_infinite($data)) { + return ($data > 0 ? '' : '-') . 'INF'; + } + if (is_nan($data)) { + return 'NaN'; + } + } + + return $data; + } + + if (is_array($data)) { + $normalized = array(); + + $count = 1; + foreach ($data as $key => $value) { + if ($count++ >= 1000) { + $normalized['...'] = 'Over 1000 items ('.count($data).' total), aborting normalization'; + break; + } + $normalized[$key] = $this->normalize($value); + } + + return $normalized; + } + + if ($data instanceof \DateTime) { + return $data->format($this->dateFormat); + } + + if (is_object($data)) { + // TODO 2.0 only check for Throwable + if ($data instanceof Exception || (PHP_VERSION_ID > 70000 && $data instanceof \Throwable)) { + return $this->normalizeException($data); + } + + // non-serializable objects that implement __toString stringified + if (method_exists($data, '__toString') && !$data instanceof \JsonSerializable) { + $value = $data->__toString(); + } else { + // the rest is json-serialized in some way + $value = $this->toJson($data, true); + } + + return sprintf("[object] (%s: %s)", get_class($data), $value); + } + + if (is_resource($data)) { + return sprintf('[resource] (%s)', get_resource_type($data)); + } + + return '[unknown('.gettype($data).')]'; + } + + protected function normalizeException($e) + { + // TODO 2.0 only check for Throwable + if (!$e instanceof Exception && !$e instanceof \Throwable) { + throw new \InvalidArgumentException('Exception/Throwable expected, got '.gettype($e).' / '.get_class($e)); + } + + $data = array( + 'class' => get_class($e), + 'message' => $e->getMessage(), + 'code' => $e->getCode(), + 'file' => $e->getFile().':'.$e->getLine(), + ); + + if ($e instanceof \SoapFault) { + if (isset($e->faultcode)) { + $data['faultcode'] = $e->faultcode; + } + + if (isset($e->faultactor)) { + $data['faultactor'] = $e->faultactor; + } + + if (isset($e->detail)) { + $data['detail'] = $e->detail; + } + } + + $trace = $e->getTrace(); + foreach ($trace as $frame) { + if (isset($frame['file'])) { + $data['trace'][] = $frame['file'].':'.$frame['line']; + } elseif (isset($frame['function']) && $frame['function'] === '{closure}') { + // We should again normalize the frames, because it might contain invalid items + $data['trace'][] = $frame['function']; + } else { + // We should again normalize the frames, because it might contain invalid items + $data['trace'][] = $this->toJson($this->normalize($frame), true); + } + } + + if ($previous = $e->getPrevious()) { + $data['previous'] = $this->normalizeException($previous); + } + + return $data; + } + + /** + * Return the JSON representation of a value + * + * @param mixed $data + * @param bool $ignoreErrors + * @throws \RuntimeException if encoding fails and errors are not ignored + * @return string + */ + protected function toJson($data, $ignoreErrors = false) + { + // suppress json_encode errors since it's twitchy with some inputs + if ($ignoreErrors) { + return @$this->jsonEncode($data); + } + + $json = $this->jsonEncode($data); + + if ($json === false) { + $json = $this->handleJsonError(json_last_error(), $data); + } + + return $json; + } + + /** + * @param mixed $data + * @return string JSON encoded data or null on failure + */ + private function jsonEncode($data) + { + if (version_compare(PHP_VERSION, '5.4.0', '>=')) { + return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + } + + return json_encode($data); + } + + /** + * Handle a json_encode failure. + * + * If the failure is due to invalid string encoding, try to clean the + * input and encode again. If the second encoding attempt fails, the + * inital error is not encoding related or the input can't be cleaned then + * raise a descriptive exception. + * + * @param int $code return code of json_last_error function + * @param mixed $data data that was meant to be encoded + * @throws \RuntimeException if failure can't be corrected + * @return string JSON encoded data after error correction + */ + private function handleJsonError($code, $data) + { + if ($code !== JSON_ERROR_UTF8) { + $this->throwEncodeError($code, $data); + } + + if (is_string($data)) { + $this->detectAndCleanUtf8($data); + } elseif (is_array($data)) { + array_walk_recursive($data, array($this, 'detectAndCleanUtf8')); + } else { + $this->throwEncodeError($code, $data); + } + + $json = $this->jsonEncode($data); + + if ($json === false) { + $this->throwEncodeError(json_last_error(), $data); + } + + return $json; + } + + /** + * Throws an exception according to a given code with a customized message + * + * @param int $code return code of json_last_error function + * @param mixed $data data that was meant to be encoded + * @throws \RuntimeException + */ + private function throwEncodeError($code, $data) + { + switch ($code) { + case JSON_ERROR_DEPTH: + $msg = 'Maximum stack depth exceeded'; + break; + case JSON_ERROR_STATE_MISMATCH: + $msg = 'Underflow or the modes mismatch'; + break; + case JSON_ERROR_CTRL_CHAR: + $msg = 'Unexpected control character found'; + break; + case JSON_ERROR_UTF8: + $msg = 'Malformed UTF-8 characters, possibly incorrectly encoded'; + break; + default: + $msg = 'Unknown error'; + } + + throw new \RuntimeException('JSON encoding failed: '.$msg.'. Encoding: '.var_export($data, true)); + } + + /** + * Detect invalid UTF-8 string characters and convert to valid UTF-8. + * + * Valid UTF-8 input will be left unmodified, but strings containing + * invalid UTF-8 codepoints will be reencoded as UTF-8 with an assumed + * original encoding of ISO-8859-15. This conversion may result in + * incorrect output if the actual encoding was not ISO-8859-15, but it + * will be clean UTF-8 output and will not rely on expensive and fragile + * detection algorithms. + * + * Function converts the input in place in the passed variable so that it + * can be used as a callback for array_walk_recursive. + * + * @param mixed &$data Input to check and convert if needed + * @private + */ + public function detectAndCleanUtf8(&$data) + { + if (is_string($data) && !preg_match('//u', $data)) { + $data = preg_replace_callback( + '/[\x80-\xFF]+/', + function ($m) { return utf8_encode($m[0]); }, + $data + ); + $data = str_replace( + array('¤', '¦', '¨', '´', '¸', '¼', '½', '¾'), + array('€', 'Š', 'š', 'Ž', 'ž', 'Œ', 'œ', 'Ÿ'), + $data + ); + } + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php new file mode 100644 index 0000000..5d345d5 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * Formats data into an associative array of scalar values. + * Objects and arrays will be JSON encoded. + * + * @author Andrew Lawson + */ +class ScalarFormatter extends NormalizerFormatter +{ + /** + * {@inheritdoc} + */ + public function format(array $record) + { + foreach ($record as $key => $value) { + $record[$key] = $this->normalizeValue($value); + } + + return $record; + } + + /** + * @param mixed $value + * @return mixed + */ + protected function normalizeValue($value) + { + $normalized = $this->normalize($value); + + if (is_array($normalized) || is_object($normalized)) { + return $this->toJson($normalized, true); + } + + return $normalized; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php new file mode 100644 index 0000000..654710a --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php @@ -0,0 +1,113 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; + +/** + * Serializes a log message according to Wildfire's header requirements + * + * @author Eric Clemmons (@ericclemmons) + * @author Christophe Coevoet + * @author Kirill chEbba Chebunin + */ +class WildfireFormatter extends NormalizerFormatter +{ + const TABLE = 'table'; + + /** + * Translates Monolog log levels to Wildfire levels. + */ + private $logLevels = array( + Logger::DEBUG => 'LOG', + Logger::INFO => 'INFO', + Logger::NOTICE => 'INFO', + Logger::WARNING => 'WARN', + Logger::ERROR => 'ERROR', + Logger::CRITICAL => 'ERROR', + Logger::ALERT => 'ERROR', + Logger::EMERGENCY => 'ERROR', + ); + + /** + * {@inheritdoc} + */ + public function format(array $record) + { + // Retrieve the line and file if set and remove them from the formatted extra + $file = $line = ''; + if (isset($record['extra']['file'])) { + $file = $record['extra']['file']; + unset($record['extra']['file']); + } + if (isset($record['extra']['line'])) { + $line = $record['extra']['line']; + unset($record['extra']['line']); + } + + $record = $this->normalize($record); + $message = array('message' => $record['message']); + $handleError = false; + if ($record['context']) { + $message['context'] = $record['context']; + $handleError = true; + } + if ($record['extra']) { + $message['extra'] = $record['extra']; + $handleError = true; + } + if (count($message) === 1) { + $message = reset($message); + } + + if (isset($record['context'][self::TABLE])) { + $type = 'TABLE'; + $label = $record['channel'] .': '. $record['message']; + $message = $record['context'][self::TABLE]; + } else { + $type = $this->logLevels[$record['level']]; + $label = $record['channel']; + } + + // Create JSON object describing the appearance of the message in the console + $json = $this->toJson(array( + array( + 'Type' => $type, + 'File' => $file, + 'Line' => $line, + 'Label' => $label, + ), + $message, + ), $handleError); + + // The message itself is a serialization of the above JSON object + it's length + return sprintf( + '%s|%s|', + strlen($json), + $json + ); + } + + public function formatBatch(array $records) + { + throw new \BadMethodCallException('Batch formatting does not make sense for the WildfireFormatter'); + } + + protected function normalize($data) + { + if (is_object($data) && !$data instanceof \DateTime) { + return $data; + } + + return parent::normalize($data); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php new file mode 100644 index 0000000..758a425 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php @@ -0,0 +1,186 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\LineFormatter; + +/** + * Base Handler class providing the Handler structure + * + * @author Jordi Boggiano + */ +abstract class AbstractHandler implements HandlerInterface +{ + protected $level = Logger::DEBUG; + protected $bubble = true; + + /** + * @var FormatterInterface + */ + protected $formatter; + protected $processors = array(); + + /** + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($level = Logger::DEBUG, $bubble = true) + { + $this->setLevel($level); + $this->bubble = $bubble; + } + + /** + * {@inheritdoc} + */ + public function isHandling(array $record) + { + return $record['level'] >= $this->level; + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + foreach ($records as $record) { + $this->handle($record); + } + } + + /** + * Closes the handler. + * + * This will be called automatically when the object is destroyed + */ + public function close() + { + } + + /** + * {@inheritdoc} + */ + public function pushProcessor($callback) + { + if (!is_callable($callback)) { + throw new \InvalidArgumentException('Processors must be valid callables (callback or object with an __invoke method), '.var_export($callback, true).' given'); + } + array_unshift($this->processors, $callback); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function popProcessor() + { + if (!$this->processors) { + throw new \LogicException('You tried to pop from an empty processor stack.'); + } + + return array_shift($this->processors); + } + + /** + * {@inheritdoc} + */ + public function setFormatter(FormatterInterface $formatter) + { + $this->formatter = $formatter; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getFormatter() + { + if (!$this->formatter) { + $this->formatter = $this->getDefaultFormatter(); + } + + return $this->formatter; + } + + /** + * Sets minimum logging level at which this handler will be triggered. + * + * @param int|string $level Level or level name + * @return self + */ + public function setLevel($level) + { + $this->level = Logger::toMonologLevel($level); + + return $this; + } + + /** + * Gets minimum logging level at which this handler will be triggered. + * + * @return int + */ + public function getLevel() + { + return $this->level; + } + + /** + * Sets the bubbling behavior. + * + * @param Boolean $bubble true means that this handler allows bubbling. + * false means that bubbling is not permitted. + * @return self + */ + public function setBubble($bubble) + { + $this->bubble = $bubble; + + return $this; + } + + /** + * Gets the bubbling behavior. + * + * @return Boolean true means that this handler allows bubbling. + * false means that bubbling is not permitted. + */ + public function getBubble() + { + return $this->bubble; + } + + public function __destruct() + { + try { + $this->close(); + } catch (\Exception $e) { + // do nothing + } catch (\Throwable $e) { + // do nothing + } + } + + /** + * Gets the default formatter. + * + * @return FormatterInterface + */ + protected function getDefaultFormatter() + { + return new LineFormatter(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php new file mode 100644 index 0000000..6f18f72 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php @@ -0,0 +1,66 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +/** + * Base Handler class providing the Handler structure + * + * Classes extending it should (in most cases) only implement write($record) + * + * @author Jordi Boggiano + * @author Christophe Coevoet + */ +abstract class AbstractProcessingHandler extends AbstractHandler +{ + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + if (!$this->isHandling($record)) { + return false; + } + + $record = $this->processRecord($record); + + $record['formatted'] = $this->getFormatter()->format($record); + + $this->write($record); + + return false === $this->bubble; + } + + /** + * Writes the record down to the log of the implementing handler + * + * @param array $record + * @return void + */ + abstract protected function write(array $record); + + /** + * Processes a record. + * + * @param array $record + * @return array + */ + protected function processRecord(array $record) + { + if ($this->processors) { + foreach ($this->processors as $processor) { + $record = call_user_func($processor, $record); + } + } + + return $record; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php new file mode 100644 index 0000000..e2b2832 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php @@ -0,0 +1,101 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\LineFormatter; + +/** + * Common syslog functionality + */ +abstract class AbstractSyslogHandler extends AbstractProcessingHandler +{ + protected $facility; + + /** + * Translates Monolog log levels to syslog log priorities. + */ + protected $logLevels = array( + Logger::DEBUG => LOG_DEBUG, + Logger::INFO => LOG_INFO, + Logger::NOTICE => LOG_NOTICE, + Logger::WARNING => LOG_WARNING, + Logger::ERROR => LOG_ERR, + Logger::CRITICAL => LOG_CRIT, + Logger::ALERT => LOG_ALERT, + Logger::EMERGENCY => LOG_EMERG, + ); + + /** + * List of valid log facility names. + */ + protected $facilities = array( + 'auth' => LOG_AUTH, + 'authpriv' => LOG_AUTHPRIV, + 'cron' => LOG_CRON, + 'daemon' => LOG_DAEMON, + 'kern' => LOG_KERN, + 'lpr' => LOG_LPR, + 'mail' => LOG_MAIL, + 'news' => LOG_NEWS, + 'syslog' => LOG_SYSLOG, + 'user' => LOG_USER, + 'uucp' => LOG_UUCP, + ); + + /** + * @param mixed $facility + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($facility = LOG_USER, $level = Logger::DEBUG, $bubble = true) + { + parent::__construct($level, $bubble); + + if (!defined('PHP_WINDOWS_VERSION_BUILD')) { + $this->facilities['local0'] = LOG_LOCAL0; + $this->facilities['local1'] = LOG_LOCAL1; + $this->facilities['local2'] = LOG_LOCAL2; + $this->facilities['local3'] = LOG_LOCAL3; + $this->facilities['local4'] = LOG_LOCAL4; + $this->facilities['local5'] = LOG_LOCAL5; + $this->facilities['local6'] = LOG_LOCAL6; + $this->facilities['local7'] = LOG_LOCAL7; + } else { + $this->facilities['local0'] = 128; // LOG_LOCAL0 + $this->facilities['local1'] = 136; // LOG_LOCAL1 + $this->facilities['local2'] = 144; // LOG_LOCAL2 + $this->facilities['local3'] = 152; // LOG_LOCAL3 + $this->facilities['local4'] = 160; // LOG_LOCAL4 + $this->facilities['local5'] = 168; // LOG_LOCAL5 + $this->facilities['local6'] = 176; // LOG_LOCAL6 + $this->facilities['local7'] = 184; // LOG_LOCAL7 + } + + // convert textual description of facility to syslog constant + if (array_key_exists(strtolower($facility), $this->facilities)) { + $facility = $this->facilities[strtolower($facility)]; + } elseif (!in_array($facility, array_values($this->facilities), true)) { + throw new \UnexpectedValueException('Unknown facility value "'.$facility.'" given'); + } + + $this->facility = $facility; + } + + /** + * {@inheritdoc} + */ + protected function getDefaultFormatter() + { + return new LineFormatter('%channel%.%level_name%: %message% %context% %extra%'); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php new file mode 100644 index 0000000..e5a46bc --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php @@ -0,0 +1,148 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\JsonFormatter; +use PhpAmqpLib\Message\AMQPMessage; +use PhpAmqpLib\Channel\AMQPChannel; +use AMQPExchange; + +class AmqpHandler extends AbstractProcessingHandler +{ + /** + * @var AMQPExchange|AMQPChannel $exchange + */ + protected $exchange; + + /** + * @var string + */ + protected $exchangeName; + + /** + * @param AMQPExchange|AMQPChannel $exchange AMQPExchange (php AMQP ext) or PHP AMQP lib channel, ready for use + * @param string $exchangeName + * @param int $level + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($exchange, $exchangeName = 'log', $level = Logger::DEBUG, $bubble = true) + { + if ($exchange instanceof AMQPExchange) { + $exchange->setName($exchangeName); + } elseif ($exchange instanceof AMQPChannel) { + $this->exchangeName = $exchangeName; + } else { + throw new \InvalidArgumentException('PhpAmqpLib\Channel\AMQPChannel or AMQPExchange instance required'); + } + $this->exchange = $exchange; + + parent::__construct($level, $bubble); + } + + /** + * {@inheritDoc} + */ + protected function write(array $record) + { + $data = $record["formatted"]; + $routingKey = $this->getRoutingKey($record); + + if ($this->exchange instanceof AMQPExchange) { + $this->exchange->publish( + $data, + $routingKey, + 0, + array( + 'delivery_mode' => 2, + 'content_type' => 'application/json', + ) + ); + } else { + $this->exchange->basic_publish( + $this->createAmqpMessage($data), + $this->exchangeName, + $routingKey + ); + } + } + + /** + * {@inheritDoc} + */ + public function handleBatch(array $records) + { + if ($this->exchange instanceof AMQPExchange) { + parent::handleBatch($records); + + return; + } + + foreach ($records as $record) { + if (!$this->isHandling($record)) { + continue; + } + + $record = $this->processRecord($record); + $data = $this->getFormatter()->format($record); + + $this->exchange->batch_basic_publish( + $this->createAmqpMessage($data), + $this->exchangeName, + $this->getRoutingKey($record) + ); + } + + $this->exchange->publish_batch(); + } + + /** + * Gets the routing key for the AMQP exchange + * + * @param array $record + * @return string + */ + protected function getRoutingKey(array $record) + { + $routingKey = sprintf( + '%s.%s', + // TODO 2.0 remove substr call + substr($record['level_name'], 0, 4), + $record['channel'] + ); + + return strtolower($routingKey); + } + + /** + * @param string $data + * @return AMQPMessage + */ + private function createAmqpMessage($data) + { + return new AMQPMessage( + (string) $data, + array( + 'delivery_mode' => 2, + 'content_type' => 'application/json', + ) + ); + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php new file mode 100644 index 0000000..b3a21bd --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php @@ -0,0 +1,230 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; + +/** + * Handler sending logs to browser's javascript console with no browser extension required + * + * @author Olivier Poitrey + */ +class BrowserConsoleHandler extends AbstractProcessingHandler +{ + protected static $initialized = false; + protected static $records = array(); + + /** + * {@inheritDoc} + * + * Formatted output may contain some formatting markers to be transferred to `console.log` using the %c format. + * + * Example of formatted string: + * + * You can do [[blue text]]{color: blue} or [[green background]]{background-color: green; color: white} + */ + protected function getDefaultFormatter() + { + return new LineFormatter('[[%channel%]]{macro: autolabel} [[%level_name%]]{font-weight: bold} %message%'); + } + + /** + * {@inheritDoc} + */ + protected function write(array $record) + { + // Accumulate records + self::$records[] = $record; + + // Register shutdown handler if not already done + if (!self::$initialized) { + self::$initialized = true; + $this->registerShutdownFunction(); + } + } + + /** + * Convert records to javascript console commands and send it to the browser. + * This method is automatically called on PHP shutdown if output is HTML or Javascript. + */ + public static function send() + { + $format = self::getResponseFormat(); + if ($format === 'unknown') { + return; + } + + if (count(self::$records)) { + if ($format === 'html') { + self::writeOutput(''); + } elseif ($format === 'js') { + self::writeOutput(self::generateScript()); + } + self::reset(); + } + } + + /** + * Forget all logged records + */ + public static function reset() + { + self::$records = array(); + } + + /** + * Wrapper for register_shutdown_function to allow overriding + */ + protected function registerShutdownFunction() + { + if (PHP_SAPI !== 'cli') { + register_shutdown_function(array('Monolog\Handler\BrowserConsoleHandler', 'send')); + } + } + + /** + * Wrapper for echo to allow overriding + * + * @param string $str + */ + protected static function writeOutput($str) + { + echo $str; + } + + /** + * Checks the format of the response + * + * If Content-Type is set to application/javascript or text/javascript -> js + * If Content-Type is set to text/html, or is unset -> html + * If Content-Type is anything else -> unknown + * + * @return string One of 'js', 'html' or 'unknown' + */ + protected static function getResponseFormat() + { + // Check content type + foreach (headers_list() as $header) { + if (stripos($header, 'content-type:') === 0) { + // This handler only works with HTML and javascript outputs + // text/javascript is obsolete in favour of application/javascript, but still used + if (stripos($header, 'application/javascript') !== false || stripos($header, 'text/javascript') !== false) { + return 'js'; + } + if (stripos($header, 'text/html') === false) { + return 'unknown'; + } + break; + } + } + + return 'html'; + } + + private static function generateScript() + { + $script = array(); + foreach (self::$records as $record) { + $context = self::dump('Context', $record['context']); + $extra = self::dump('Extra', $record['extra']); + + if (empty($context) && empty($extra)) { + $script[] = self::call_array('log', self::handleStyles($record['formatted'])); + } else { + $script = array_merge($script, + array(self::call_array('groupCollapsed', self::handleStyles($record['formatted']))), + $context, + $extra, + array(self::call('groupEnd')) + ); + } + } + + return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);"; + } + + private static function handleStyles($formatted) + { + $args = array(self::quote('font-weight: normal')); + $format = '%c' . $formatted; + preg_match_all('/\[\[(.*?)\]\]\{([^}]*)\}/s', $format, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + + foreach (array_reverse($matches) as $match) { + $args[] = self::quote(self::handleCustomStyles($match[2][0], $match[1][0])); + $args[] = '"font-weight: normal"'; + + $pos = $match[0][1]; + $format = substr($format, 0, $pos) . '%c' . $match[1][0] . '%c' . substr($format, $pos + strlen($match[0][0])); + } + + array_unshift($args, self::quote($format)); + + return $args; + } + + private static function handleCustomStyles($style, $string) + { + static $colors = array('blue', 'green', 'red', 'magenta', 'orange', 'black', 'grey'); + static $labels = array(); + + return preg_replace_callback('/macro\s*:(.*?)(?:;|$)/', function ($m) use ($string, &$colors, &$labels) { + if (trim($m[1]) === 'autolabel') { + // Format the string as a label with consistent auto assigned background color + if (!isset($labels[$string])) { + $labels[$string] = $colors[count($labels) % count($colors)]; + } + $color = $labels[$string]; + + return "background-color: $color; color: white; border-radius: 3px; padding: 0 2px 0 2px"; + } + + return $m[1]; + }, $style); + } + + private static function dump($title, array $dict) + { + $script = array(); + $dict = array_filter($dict); + if (empty($dict)) { + return $script; + } + $script[] = self::call('log', self::quote('%c%s'), self::quote('font-weight: bold'), self::quote($title)); + foreach ($dict as $key => $value) { + $value = json_encode($value); + if (empty($value)) { + $value = self::quote(''); + } + $script[] = self::call('log', self::quote('%s: %o'), self::quote($key), $value); + } + + return $script; + } + + private static function quote($arg) + { + return '"' . addcslashes($arg, "\"\n\\") . '"'; + } + + private static function call() + { + $args = func_get_args(); + $method = array_shift($args); + + return self::call_array($method, $args); + } + + private static function call_array($method, array $args) + { + return 'c.' . $method . '(' . implode(', ', $args) . ');'; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php new file mode 100644 index 0000000..72f8953 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php @@ -0,0 +1,117 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Buffers all records until closing the handler and then pass them as batch. + * + * This is useful for a MailHandler to send only one mail per request instead of + * sending one per log message. + * + * @author Christophe Coevoet + */ +class BufferHandler extends AbstractHandler +{ + protected $handler; + protected $bufferSize = 0; + protected $bufferLimit; + protected $flushOnOverflow; + protected $buffer = array(); + protected $initialized = false; + + /** + * @param HandlerInterface $handler Handler. + * @param int $bufferLimit How many entries should be buffered at most, beyond that the oldest items are removed from the buffer. + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + * @param Boolean $flushOnOverflow If true, the buffer is flushed when the max size has been reached, by default oldest entries are discarded + */ + public function __construct(HandlerInterface $handler, $bufferLimit = 0, $level = Logger::DEBUG, $bubble = true, $flushOnOverflow = false) + { + parent::__construct($level, $bubble); + $this->handler = $handler; + $this->bufferLimit = (int) $bufferLimit; + $this->flushOnOverflow = $flushOnOverflow; + } + + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + if ($record['level'] < $this->level) { + return false; + } + + if (!$this->initialized) { + // __destructor() doesn't get called on Fatal errors + register_shutdown_function(array($this, 'close')); + $this->initialized = true; + } + + if ($this->bufferLimit > 0 && $this->bufferSize === $this->bufferLimit) { + if ($this->flushOnOverflow) { + $this->flush(); + } else { + array_shift($this->buffer); + $this->bufferSize--; + } + } + + if ($this->processors) { + foreach ($this->processors as $processor) { + $record = call_user_func($processor, $record); + } + } + + $this->buffer[] = $record; + $this->bufferSize++; + + return false === $this->bubble; + } + + public function flush() + { + if ($this->bufferSize === 0) { + return; + } + + $this->handler->handleBatch($this->buffer); + $this->clear(); + } + + public function __destruct() + { + // suppress the parent behavior since we already have register_shutdown_function() + // to call close(), and the reference contained there will prevent this from being + // GC'd until the end of the request + } + + /** + * {@inheritdoc} + */ + public function close() + { + $this->flush(); + } + + /** + * Clears the buffer without flushing any messages down to the wrapped handler. + */ + public function clear() + { + $this->bufferSize = 0; + $this->buffer = array(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php new file mode 100644 index 0000000..785cb0c --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php @@ -0,0 +1,211 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\ChromePHPFormatter; +use Monolog\Logger; + +/** + * Handler sending logs to the ChromePHP extension (http://www.chromephp.com/) + * + * This also works out of the box with Firefox 43+ + * + * @author Christophe Coevoet + */ +class ChromePHPHandler extends AbstractProcessingHandler +{ + /** + * Version of the extension + */ + const VERSION = '4.0'; + + /** + * Header name + */ + const HEADER_NAME = 'X-ChromeLogger-Data'; + + /** + * Regular expression to detect supported browsers (matches any Chrome, or Firefox 43+) + */ + const USER_AGENT_REGEX = '{\b(?:Chrome/\d+(?:\.\d+)*|HeadlessChrome|Firefox/(?:4[3-9]|[5-9]\d|\d{3,})(?:\.\d)*)\b}'; + + protected static $initialized = false; + + /** + * Tracks whether we sent too much data + * + * Chrome limits the headers to 256KB, so when we sent 240KB we stop sending + * + * @var Boolean + */ + protected static $overflowed = false; + + protected static $json = array( + 'version' => self::VERSION, + 'columns' => array('label', 'log', 'backtrace', 'type'), + 'rows' => array(), + ); + + protected static $sendHeaders = true; + + /** + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($level = Logger::DEBUG, $bubble = true) + { + parent::__construct($level, $bubble); + if (!function_exists('json_encode')) { + throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s ChromePHPHandler'); + } + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + $messages = array(); + + foreach ($records as $record) { + if ($record['level'] < $this->level) { + continue; + } + $messages[] = $this->processRecord($record); + } + + if (!empty($messages)) { + $messages = $this->getFormatter()->formatBatch($messages); + self::$json['rows'] = array_merge(self::$json['rows'], $messages); + $this->send(); + } + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new ChromePHPFormatter(); + } + + /** + * Creates & sends header for a record + * + * @see sendHeader() + * @see send() + * @param array $record + */ + protected function write(array $record) + { + self::$json['rows'][] = $record['formatted']; + + $this->send(); + } + + /** + * Sends the log header + * + * @see sendHeader() + */ + protected function send() + { + if (self::$overflowed || !self::$sendHeaders) { + return; + } + + if (!self::$initialized) { + self::$initialized = true; + + self::$sendHeaders = $this->headersAccepted(); + if (!self::$sendHeaders) { + return; + } + + self::$json['request_uri'] = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; + } + + $json = @json_encode(self::$json); + $data = base64_encode(utf8_encode($json)); + if (strlen($data) > 240 * 1024) { + self::$overflowed = true; + + $record = array( + 'message' => 'Incomplete logs, chrome header size limit reached', + 'context' => array(), + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'monolog', + 'datetime' => new \DateTime(), + 'extra' => array(), + ); + self::$json['rows'][count(self::$json['rows']) - 1] = $this->getFormatter()->format($record); + $json = @json_encode(self::$json); + $data = base64_encode(utf8_encode($json)); + } + + if (trim($data) !== '') { + $this->sendHeader(self::HEADER_NAME, $data); + } + } + + /** + * Send header string to the client + * + * @param string $header + * @param string $content + */ + protected function sendHeader($header, $content) + { + if (!headers_sent() && self::$sendHeaders) { + header(sprintf('%s: %s', $header, $content)); + } + } + + /** + * Verifies if the headers are accepted by the current user agent + * + * @return Boolean + */ + protected function headersAccepted() + { + if (empty($_SERVER['HTTP_USER_AGENT'])) { + return false; + } + + return preg_match(self::USER_AGENT_REGEX, $_SERVER['HTTP_USER_AGENT']); + } + + /** + * BC getter for the sendHeaders property that has been made static + */ + public function __get($property) + { + if ('sendHeaders' !== $property) { + throw new \InvalidArgumentException('Undefined property '.$property); + } + + return static::$sendHeaders; + } + + /** + * BC setter for the sendHeaders property that has been made static + */ + public function __set($property, $value) + { + if ('sendHeaders' !== $property) { + throw new \InvalidArgumentException('Undefined property '.$property); + } + + static::$sendHeaders = $value; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php new file mode 100644 index 0000000..cc98697 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\JsonFormatter; +use Monolog\Logger; + +/** + * CouchDB handler + * + * @author Markus Bachmann + */ +class CouchDBHandler extends AbstractProcessingHandler +{ + private $options; + + public function __construct(array $options = array(), $level = Logger::DEBUG, $bubble = true) + { + $this->options = array_merge(array( + 'host' => 'localhost', + 'port' => 5984, + 'dbname' => 'logger', + 'username' => null, + 'password' => null, + ), $options); + + parent::__construct($level, $bubble); + } + + /** + * {@inheritDoc} + */ + protected function write(array $record) + { + $basicAuth = null; + if ($this->options['username']) { + $basicAuth = sprintf('%s:%s@', $this->options['username'], $this->options['password']); + } + + $url = 'http://'.$basicAuth.$this->options['host'].':'.$this->options['port'].'/'.$this->options['dbname']; + $context = stream_context_create(array( + 'http' => array( + 'method' => 'POST', + 'content' => $record['formatted'], + 'ignore_errors' => true, + 'max_redirects' => 0, + 'header' => 'Content-type: application/json', + ), + )); + + if (false === @file_get_contents($url, null, $context)) { + throw new \RuntimeException(sprintf('Could not connect to %s', $url)); + } + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php new file mode 100644 index 0000000..96b3ca0 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php @@ -0,0 +1,151 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Logs to Cube. + * + * @link http://square.github.com/cube/ + * @author Wan Chen + */ +class CubeHandler extends AbstractProcessingHandler +{ + private $udpConnection; + private $httpConnection; + private $scheme; + private $host; + private $port; + private $acceptedSchemes = array('http', 'udp'); + + /** + * Create a Cube handler + * + * @throws \UnexpectedValueException when given url is not a valid url. + * A valid url must consist of three parts : protocol://host:port + * Only valid protocols used by Cube are http and udp + */ + public function __construct($url, $level = Logger::DEBUG, $bubble = true) + { + $urlInfo = parse_url($url); + + if (!isset($urlInfo['scheme'], $urlInfo['host'], $urlInfo['port'])) { + throw new \UnexpectedValueException('URL "'.$url.'" is not valid'); + } + + if (!in_array($urlInfo['scheme'], $this->acceptedSchemes)) { + throw new \UnexpectedValueException( + 'Invalid protocol (' . $urlInfo['scheme'] . ').' + . ' Valid options are ' . implode(', ', $this->acceptedSchemes)); + } + + $this->scheme = $urlInfo['scheme']; + $this->host = $urlInfo['host']; + $this->port = $urlInfo['port']; + + parent::__construct($level, $bubble); + } + + /** + * Establish a connection to an UDP socket + * + * @throws \LogicException when unable to connect to the socket + * @throws MissingExtensionException when there is no socket extension + */ + protected function connectUdp() + { + if (!extension_loaded('sockets')) { + throw new MissingExtensionException('The sockets extension is required to use udp URLs with the CubeHandler'); + } + + $this->udpConnection = socket_create(AF_INET, SOCK_DGRAM, 0); + if (!$this->udpConnection) { + throw new \LogicException('Unable to create a socket'); + } + + if (!socket_connect($this->udpConnection, $this->host, $this->port)) { + throw new \LogicException('Unable to connect to the socket at ' . $this->host . ':' . $this->port); + } + } + + /** + * Establish a connection to a http server + * @throws \LogicException when no curl extension + */ + protected function connectHttp() + { + if (!extension_loaded('curl')) { + throw new \LogicException('The curl extension is needed to use http URLs with the CubeHandler'); + } + + $this->httpConnection = curl_init('http://'.$this->host.':'.$this->port.'/1.0/event/put'); + + if (!$this->httpConnection) { + throw new \LogicException('Unable to connect to ' . $this->host . ':' . $this->port); + } + + curl_setopt($this->httpConnection, CURLOPT_CUSTOMREQUEST, "POST"); + curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true); + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + $date = $record['datetime']; + + $data = array('time' => $date->format('Y-m-d\TH:i:s.uO')); + unset($record['datetime']); + + if (isset($record['context']['type'])) { + $data['type'] = $record['context']['type']; + unset($record['context']['type']); + } else { + $data['type'] = $record['channel']; + } + + $data['data'] = $record['context']; + $data['data']['level'] = $record['level']; + + if ($this->scheme === 'http') { + $this->writeHttp(json_encode($data)); + } else { + $this->writeUdp(json_encode($data)); + } + } + + private function writeUdp($data) + { + if (!$this->udpConnection) { + $this->connectUdp(); + } + + socket_send($this->udpConnection, $data, strlen($data), 0); + } + + private function writeHttp($data) + { + if (!$this->httpConnection) { + $this->connectHttp(); + } + + curl_setopt($this->httpConnection, CURLOPT_POSTFIELDS, '['.$data.']'); + curl_setopt($this->httpConnection, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json', + 'Content-Length: ' . strlen('['.$data.']'), + )); + + Curl\Util::execute($this->httpConnection, 5, false); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php b/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php new file mode 100644 index 0000000..48d30b3 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\Curl; + +class Util +{ + private static $retriableErrorCodes = array( + CURLE_COULDNT_RESOLVE_HOST, + CURLE_COULDNT_CONNECT, + CURLE_HTTP_NOT_FOUND, + CURLE_READ_ERROR, + CURLE_OPERATION_TIMEOUTED, + CURLE_HTTP_POST_ERROR, + CURLE_SSL_CONNECT_ERROR, + ); + + /** + * Executes a CURL request with optional retries and exception on failure + * + * @param resource $ch curl handler + * @throws \RuntimeException + */ + public static function execute($ch, $retries = 5, $closeAfterDone = true) + { + while ($retries--) { + if (curl_exec($ch) === false) { + $curlErrno = curl_errno($ch); + + if (false === in_array($curlErrno, self::$retriableErrorCodes, true) || !$retries) { + $curlError = curl_error($ch); + + if ($closeAfterDone) { + curl_close($ch); + } + + throw new \RuntimeException(sprintf('Curl error (code %s): %s', $curlErrno, $curlError)); + } + + continue; + } + + if ($closeAfterDone) { + curl_close($ch); + } + break; + } + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php new file mode 100644 index 0000000..7778c22 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php @@ -0,0 +1,169 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Simple handler wrapper that deduplicates log records across multiple requests + * + * It also includes the BufferHandler functionality and will buffer + * all messages until the end of the request or flush() is called. + * + * This works by storing all log records' messages above $deduplicationLevel + * to the file specified by $deduplicationStore. When further logs come in at the end of the + * request (or when flush() is called), all those above $deduplicationLevel are checked + * against the existing stored logs. If they match and the timestamps in the stored log is + * not older than $time seconds, the new log record is discarded. If no log record is new, the + * whole data set is discarded. + * + * This is mainly useful in combination with Mail handlers or things like Slack or HipChat handlers + * that send messages to people, to avoid spamming with the same message over and over in case of + * a major component failure like a database server being down which makes all requests fail in the + * same way. + * + * @author Jordi Boggiano + */ +class DeduplicationHandler extends BufferHandler +{ + /** + * @var string + */ + protected $deduplicationStore; + + /** + * @var int + */ + protected $deduplicationLevel; + + /** + * @var int + */ + protected $time; + + /** + * @var bool + */ + private $gc = false; + + /** + * @param HandlerInterface $handler Handler. + * @param string $deduplicationStore The file/path where the deduplication log should be kept + * @param int $deduplicationLevel The minimum logging level for log records to be looked at for deduplication purposes + * @param int $time The period (in seconds) during which duplicate entries should be suppressed after a given log is sent through + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct(HandlerInterface $handler, $deduplicationStore = null, $deduplicationLevel = Logger::ERROR, $time = 60, $bubble = true) + { + parent::__construct($handler, 0, Logger::DEBUG, $bubble, false); + + $this->deduplicationStore = $deduplicationStore === null ? sys_get_temp_dir() . '/monolog-dedup-' . substr(md5(__FILE__), 0, 20) .'.log' : $deduplicationStore; + $this->deduplicationLevel = Logger::toMonologLevel($deduplicationLevel); + $this->time = $time; + } + + public function flush() + { + if ($this->bufferSize === 0) { + return; + } + + $passthru = null; + + foreach ($this->buffer as $record) { + if ($record['level'] >= $this->deduplicationLevel) { + + $passthru = $passthru || !$this->isDuplicate($record); + if ($passthru) { + $this->appendRecord($record); + } + } + } + + // default of null is valid as well as if no record matches duplicationLevel we just pass through + if ($passthru === true || $passthru === null) { + $this->handler->handleBatch($this->buffer); + } + + $this->clear(); + + if ($this->gc) { + $this->collectLogs(); + } + } + + private function isDuplicate(array $record) + { + if (!file_exists($this->deduplicationStore)) { + return false; + } + + $store = file($this->deduplicationStore, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if (!is_array($store)) { + return false; + } + + $yesterday = time() - 86400; + $timestampValidity = $record['datetime']->getTimestamp() - $this->time; + $expectedMessage = preg_replace('{[\r\n].*}', '', $record['message']); + + for ($i = count($store) - 1; $i >= 0; $i--) { + list($timestamp, $level, $message) = explode(':', $store[$i], 3); + + if ($level === $record['level_name'] && $message === $expectedMessage && $timestamp > $timestampValidity) { + return true; + } + + if ($timestamp < $yesterday) { + $this->gc = true; + } + } + + return false; + } + + private function collectLogs() + { + if (!file_exists($this->deduplicationStore)) { + return false; + } + + $handle = fopen($this->deduplicationStore, 'rw+'); + flock($handle, LOCK_EX); + $validLogs = array(); + + $timestampValidity = time() - $this->time; + + while (!feof($handle)) { + $log = fgets($handle); + if (substr($log, 0, 10) >= $timestampValidity) { + $validLogs[] = $log; + } + } + + ftruncate($handle, 0); + rewind($handle); + foreach ($validLogs as $log) { + fwrite($handle, $log); + } + + flock($handle, LOCK_UN); + fclose($handle); + + $this->gc = false; + } + + private function appendRecord(array $record) + { + file_put_contents($this->deduplicationStore, $record['datetime']->getTimestamp() . ':' . $record['level_name'] . ':' . preg_replace('{[\r\n].*}', '', $record['message']) . "\n", FILE_APPEND); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php new file mode 100644 index 0000000..b91ffec --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\NormalizerFormatter; +use Doctrine\CouchDB\CouchDBClient; + +/** + * CouchDB handler for Doctrine CouchDB ODM + * + * @author Markus Bachmann + */ +class DoctrineCouchDBHandler extends AbstractProcessingHandler +{ + private $client; + + public function __construct(CouchDBClient $client, $level = Logger::DEBUG, $bubble = true) + { + $this->client = $client; + parent::__construct($level, $bubble); + } + + /** + * {@inheritDoc} + */ + protected function write(array $record) + { + $this->client->postDocument($record['formatted']); + } + + protected function getDefaultFormatter() + { + return new NormalizerFormatter; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php new file mode 100644 index 0000000..237b71f --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php @@ -0,0 +1,107 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Aws\Sdk; +use Aws\DynamoDb\DynamoDbClient; +use Aws\DynamoDb\Marshaler; +use Monolog\Formatter\ScalarFormatter; +use Monolog\Logger; + +/** + * Amazon DynamoDB handler (http://aws.amazon.com/dynamodb/) + * + * @link https://github.com/aws/aws-sdk-php/ + * @author Andrew Lawson + */ +class DynamoDbHandler extends AbstractProcessingHandler +{ + const DATE_FORMAT = 'Y-m-d\TH:i:s.uO'; + + /** + * @var DynamoDbClient + */ + protected $client; + + /** + * @var string + */ + protected $table; + + /** + * @var int + */ + protected $version; + + /** + * @var Marshaler + */ + protected $marshaler; + + /** + * @param DynamoDbClient $client + * @param string $table + * @param int $level + * @param bool $bubble + */ + public function __construct(DynamoDbClient $client, $table, $level = Logger::DEBUG, $bubble = true) + { + if (defined('Aws\Sdk::VERSION') && version_compare(Sdk::VERSION, '3.0', '>=')) { + $this->version = 3; + $this->marshaler = new Marshaler; + } else { + $this->version = 2; + } + + $this->client = $client; + $this->table = $table; + + parent::__construct($level, $bubble); + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + $filtered = $this->filterEmptyFields($record['formatted']); + if ($this->version === 3) { + $formatted = $this->marshaler->marshalItem($filtered); + } else { + $formatted = $this->client->formatAttributes($filtered); + } + + $this->client->putItem(array( + 'TableName' => $this->table, + 'Item' => $formatted, + )); + } + + /** + * @param array $record + * @return array + */ + protected function filterEmptyFields(array $record) + { + return array_filter($record, function ($value) { + return !empty($value) || false === $value || 0 === $value; + }); + } + + /** + * {@inheritdoc} + */ + protected function getDefaultFormatter() + { + return new ScalarFormatter(self::DATE_FORMAT); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php new file mode 100644 index 0000000..8196740 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php @@ -0,0 +1,128 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\ElasticaFormatter; +use Monolog\Logger; +use Elastica\Client; +use Elastica\Exception\ExceptionInterface; + +/** + * Elastic Search handler + * + * Usage example: + * + * $client = new \Elastica\Client(); + * $options = array( + * 'index' => 'elastic_index_name', + * 'type' => 'elastic_doc_type', + * ); + * $handler = new ElasticSearchHandler($client, $options); + * $log = new Logger('application'); + * $log->pushHandler($handler); + * + * @author Jelle Vink + */ +class ElasticSearchHandler extends AbstractProcessingHandler +{ + /** + * @var Client + */ + protected $client; + + /** + * @var array Handler config options + */ + protected $options = array(); + + /** + * @param Client $client Elastica Client object + * @param array $options Handler configuration + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct(Client $client, array $options = array(), $level = Logger::DEBUG, $bubble = true) + { + parent::__construct($level, $bubble); + $this->client = $client; + $this->options = array_merge( + array( + 'index' => 'monolog', // Elastic index name + 'type' => 'record', // Elastic document type + 'ignore_error' => false, // Suppress Elastica exceptions + ), + $options + ); + } + + /** + * {@inheritDoc} + */ + protected function write(array $record) + { + $this->bulkSend(array($record['formatted'])); + } + + /** + * {@inheritdoc} + */ + public function setFormatter(FormatterInterface $formatter) + { + if ($formatter instanceof ElasticaFormatter) { + return parent::setFormatter($formatter); + } + throw new \InvalidArgumentException('ElasticSearchHandler is only compatible with ElasticaFormatter'); + } + + /** + * Getter options + * @return array + */ + public function getOptions() + { + return $this->options; + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new ElasticaFormatter($this->options['index'], $this->options['type']); + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + $documents = $this->getFormatter()->formatBatch($records); + $this->bulkSend($documents); + } + + /** + * Use Elasticsearch bulk API to send list of documents + * @param array $documents + * @throws \RuntimeException + */ + protected function bulkSend(array $documents) + { + try { + $this->client->addDocuments($documents); + } catch (ExceptionInterface $e) { + if (!$this->options['ignore_error']) { + throw new \RuntimeException("Error sending messages to Elasticsearch", 0, $e); + } + } + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php new file mode 100644 index 0000000..1447a58 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\Logger; + +/** + * Stores to PHP error_log() handler. + * + * @author Elan Ruusamäe + */ +class ErrorLogHandler extends AbstractProcessingHandler +{ + const OPERATING_SYSTEM = 0; + const SAPI = 4; + + protected $messageType; + protected $expandNewlines; + + /** + * @param int $messageType Says where the error should go. + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + * @param Boolean $expandNewlines If set to true, newlines in the message will be expanded to be take multiple log entries + */ + public function __construct($messageType = self::OPERATING_SYSTEM, $level = Logger::DEBUG, $bubble = true, $expandNewlines = false) + { + parent::__construct($level, $bubble); + + if (false === in_array($messageType, self::getAvailableTypes())) { + $message = sprintf('The given message type "%s" is not supported', print_r($messageType, true)); + throw new \InvalidArgumentException($message); + } + + $this->messageType = $messageType; + $this->expandNewlines = $expandNewlines; + } + + /** + * @return array With all available types + */ + public static function getAvailableTypes() + { + return array( + self::OPERATING_SYSTEM, + self::SAPI, + ); + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new LineFormatter('[%datetime%] %channel%.%level_name%: %message% %context% %extra%'); + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + if ($this->expandNewlines) { + $lines = preg_split('{[\r\n]+}', (string) $record['formatted']); + foreach ($lines as $line) { + error_log($line, $this->messageType); + } + } else { + error_log((string) $record['formatted'], $this->messageType); + } + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php new file mode 100644 index 0000000..2a0f7fd --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php @@ -0,0 +1,140 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Simple handler wrapper that filters records based on a list of levels + * + * It can be configured with an exact list of levels to allow, or a min/max level. + * + * @author Hennadiy Verkh + * @author Jordi Boggiano + */ +class FilterHandler extends AbstractHandler +{ + /** + * Handler or factory callable($record, $this) + * + * @var callable|\Monolog\Handler\HandlerInterface + */ + protected $handler; + + /** + * Minimum level for logs that are passed to handler + * + * @var int[] + */ + protected $acceptedLevels; + + /** + * Whether the messages that are handled can bubble up the stack or not + * + * @var Boolean + */ + protected $bubble; + + /** + * @param callable|HandlerInterface $handler Handler or factory callable($record, $this). + * @param int|array $minLevelOrList A list of levels to accept or a minimum level if maxLevel is provided + * @param int $maxLevel Maximum level to accept, only used if $minLevelOrList is not an array + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($handler, $minLevelOrList = Logger::DEBUG, $maxLevel = Logger::EMERGENCY, $bubble = true) + { + $this->handler = $handler; + $this->bubble = $bubble; + $this->setAcceptedLevels($minLevelOrList, $maxLevel); + + if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) { + throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object"); + } + } + + /** + * @return array + */ + public function getAcceptedLevels() + { + return array_flip($this->acceptedLevels); + } + + /** + * @param int|string|array $minLevelOrList A list of levels to accept or a minimum level or level name if maxLevel is provided + * @param int|string $maxLevel Maximum level or level name to accept, only used if $minLevelOrList is not an array + */ + public function setAcceptedLevels($minLevelOrList = Logger::DEBUG, $maxLevel = Logger::EMERGENCY) + { + if (is_array($minLevelOrList)) { + $acceptedLevels = array_map('Monolog\Logger::toMonologLevel', $minLevelOrList); + } else { + $minLevelOrList = Logger::toMonologLevel($minLevelOrList); + $maxLevel = Logger::toMonologLevel($maxLevel); + $acceptedLevels = array_values(array_filter(Logger::getLevels(), function ($level) use ($minLevelOrList, $maxLevel) { + return $level >= $minLevelOrList && $level <= $maxLevel; + })); + } + $this->acceptedLevels = array_flip($acceptedLevels); + } + + /** + * {@inheritdoc} + */ + public function isHandling(array $record) + { + return isset($this->acceptedLevels[$record['level']]); + } + + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + if (!$this->isHandling($record)) { + return false; + } + + // The same logic as in FingersCrossedHandler + if (!$this->handler instanceof HandlerInterface) { + $this->handler = call_user_func($this->handler, $record, $this); + if (!$this->handler instanceof HandlerInterface) { + throw new \RuntimeException("The factory callable should return a HandlerInterface"); + } + } + + if ($this->processors) { + foreach ($this->processors as $processor) { + $record = call_user_func($processor, $record); + } + } + + $this->handler->handle($record); + + return false === $this->bubble; + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + $filtered = array(); + foreach ($records as $record) { + if ($this->isHandling($record)) { + $filtered[] = $record; + } + } + + $this->handler->handleBatch($filtered); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php new file mode 100644 index 0000000..c3e42ef --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\FingersCrossed; + +/** + * Interface for activation strategies for the FingersCrossedHandler. + * + * @author Johannes M. Schmitt + */ +interface ActivationStrategyInterface +{ + /** + * Returns whether the given record activates the handler. + * + * @param array $record + * @return Boolean + */ + public function isHandlerActivated(array $record); +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php new file mode 100644 index 0000000..2a2a64d --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\FingersCrossed; + +use Monolog\Logger; + +/** + * Channel and Error level based monolog activation strategy. Allows to trigger activation + * based on level per channel. e.g. trigger activation on level 'ERROR' by default, except + * for records of the 'sql' channel; those should trigger activation on level 'WARN'. + * + * Example: + * + * + * $activationStrategy = new ChannelLevelActivationStrategy( + * Logger::CRITICAL, + * array( + * 'request' => Logger::ALERT, + * 'sensitive' => Logger::ERROR, + * ) + * ); + * $handler = new FingersCrossedHandler(new StreamHandler('php://stderr'), $activationStrategy); + * + * + * @author Mike Meessen + */ +class ChannelLevelActivationStrategy implements ActivationStrategyInterface +{ + private $defaultActionLevel; + private $channelToActionLevel; + + /** + * @param int $defaultActionLevel The default action level to be used if the record's category doesn't match any + * @param array $channelToActionLevel An array that maps channel names to action levels. + */ + public function __construct($defaultActionLevel, $channelToActionLevel = array()) + { + $this->defaultActionLevel = Logger::toMonologLevel($defaultActionLevel); + $this->channelToActionLevel = array_map('Monolog\Logger::toMonologLevel', $channelToActionLevel); + } + + public function isHandlerActivated(array $record) + { + if (isset($this->channelToActionLevel[$record['channel']])) { + return $record['level'] >= $this->channelToActionLevel[$record['channel']]; + } + + return $record['level'] >= $this->defaultActionLevel; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php new file mode 100644 index 0000000..6e63085 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\FingersCrossed; + +use Monolog\Logger; + +/** + * Error level based activation strategy. + * + * @author Johannes M. Schmitt + */ +class ErrorLevelActivationStrategy implements ActivationStrategyInterface +{ + private $actionLevel; + + public function __construct($actionLevel) + { + $this->actionLevel = Logger::toMonologLevel($actionLevel); + } + + public function isHandlerActivated(array $record) + { + return $record['level'] >= $this->actionLevel; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php new file mode 100644 index 0000000..d1dcaac --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php @@ -0,0 +1,163 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; +use Monolog\Handler\FingersCrossed\ActivationStrategyInterface; +use Monolog\Logger; + +/** + * Buffers all records until a certain level is reached + * + * The advantage of this approach is that you don't get any clutter in your log files. + * Only requests which actually trigger an error (or whatever your actionLevel is) will be + * in the logs, but they will contain all records, not only those above the level threshold. + * + * You can find the various activation strategies in the + * Monolog\Handler\FingersCrossed\ namespace. + * + * @author Jordi Boggiano + */ +class FingersCrossedHandler extends AbstractHandler +{ + protected $handler; + protected $activationStrategy; + protected $buffering = true; + protected $bufferSize; + protected $buffer = array(); + protected $stopBuffering; + protected $passthruLevel; + + /** + * @param callable|HandlerInterface $handler Handler or factory callable($record, $fingersCrossedHandler). + * @param int|ActivationStrategyInterface $activationStrategy Strategy which determines when this handler takes action + * @param int $bufferSize How many entries should be buffered at most, beyond that the oldest items are removed from the buffer. + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + * @param Boolean $stopBuffering Whether the handler should stop buffering after being triggered (default true) + * @param int $passthruLevel Minimum level to always flush to handler on close, even if strategy not triggered + */ + public function __construct($handler, $activationStrategy = null, $bufferSize = 0, $bubble = true, $stopBuffering = true, $passthruLevel = null) + { + if (null === $activationStrategy) { + $activationStrategy = new ErrorLevelActivationStrategy(Logger::WARNING); + } + + // convert simple int activationStrategy to an object + if (!$activationStrategy instanceof ActivationStrategyInterface) { + $activationStrategy = new ErrorLevelActivationStrategy($activationStrategy); + } + + $this->handler = $handler; + $this->activationStrategy = $activationStrategy; + $this->bufferSize = $bufferSize; + $this->bubble = $bubble; + $this->stopBuffering = $stopBuffering; + + if ($passthruLevel !== null) { + $this->passthruLevel = Logger::toMonologLevel($passthruLevel); + } + + if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) { + throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object"); + } + } + + /** + * {@inheritdoc} + */ + public function isHandling(array $record) + { + return true; + } + + /** + * Manually activate this logger regardless of the activation strategy + */ + public function activate() + { + if ($this->stopBuffering) { + $this->buffering = false; + } + if (!$this->handler instanceof HandlerInterface) { + $record = end($this->buffer) ?: null; + + $this->handler = call_user_func($this->handler, $record, $this); + if (!$this->handler instanceof HandlerInterface) { + throw new \RuntimeException("The factory callable should return a HandlerInterface"); + } + } + $this->handler->handleBatch($this->buffer); + $this->buffer = array(); + } + + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + if ($this->processors) { + foreach ($this->processors as $processor) { + $record = call_user_func($processor, $record); + } + } + + if ($this->buffering) { + $this->buffer[] = $record; + if ($this->bufferSize > 0 && count($this->buffer) > $this->bufferSize) { + array_shift($this->buffer); + } + if ($this->activationStrategy->isHandlerActivated($record)) { + $this->activate(); + } + } else { + $this->handler->handle($record); + } + + return false === $this->bubble; + } + + /** + * {@inheritdoc} + */ + public function close() + { + if (null !== $this->passthruLevel) { + $level = $this->passthruLevel; + $this->buffer = array_filter($this->buffer, function ($record) use ($level) { + return $record['level'] >= $level; + }); + if (count($this->buffer) > 0) { + $this->handler->handleBatch($this->buffer); + $this->buffer = array(); + } + } + } + + /** + * Resets the state of the handler. Stops forwarding records to the wrapped handler. + */ + public function reset() + { + $this->buffering = true; + } + + /** + * Clears the buffer without flushing any messages down to the wrapped handler. + * + * It also resets the handler to its initial buffering state. + */ + public function clear() + { + $this->buffer = array(); + $this->reset(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php new file mode 100644 index 0000000..fee4795 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php @@ -0,0 +1,195 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\WildfireFormatter; + +/** + * Simple FirePHP Handler (http://www.firephp.org/), which uses the Wildfire protocol. + * + * @author Eric Clemmons (@ericclemmons) + */ +class FirePHPHandler extends AbstractProcessingHandler +{ + /** + * WildFire JSON header message format + */ + const PROTOCOL_URI = 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2'; + + /** + * FirePHP structure for parsing messages & their presentation + */ + const STRUCTURE_URI = 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'; + + /** + * Must reference a "known" plugin, otherwise headers won't display in FirePHP + */ + const PLUGIN_URI = 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3'; + + /** + * Header prefix for Wildfire to recognize & parse headers + */ + const HEADER_PREFIX = 'X-Wf'; + + /** + * Whether or not Wildfire vendor-specific headers have been generated & sent yet + */ + protected static $initialized = false; + + /** + * Shared static message index between potentially multiple handlers + * @var int + */ + protected static $messageIndex = 1; + + protected static $sendHeaders = true; + + /** + * Base header creation function used by init headers & record headers + * + * @param array $meta Wildfire Plugin, Protocol & Structure Indexes + * @param string $message Log message + * @return array Complete header string ready for the client as key and message as value + */ + protected function createHeader(array $meta, $message) + { + $header = sprintf('%s-%s', self::HEADER_PREFIX, join('-', $meta)); + + return array($header => $message); + } + + /** + * Creates message header from record + * + * @see createHeader() + * @param array $record + * @return string + */ + protected function createRecordHeader(array $record) + { + // Wildfire is extensible to support multiple protocols & plugins in a single request, + // but we're not taking advantage of that (yet), so we're using "1" for simplicity's sake. + return $this->createHeader( + array(1, 1, 1, self::$messageIndex++), + $record['formatted'] + ); + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new WildfireFormatter(); + } + + /** + * Wildfire initialization headers to enable message parsing + * + * @see createHeader() + * @see sendHeader() + * @return array + */ + protected function getInitHeaders() + { + // Initial payload consists of required headers for Wildfire + return array_merge( + $this->createHeader(array('Protocol', 1), self::PROTOCOL_URI), + $this->createHeader(array(1, 'Structure', 1), self::STRUCTURE_URI), + $this->createHeader(array(1, 'Plugin', 1), self::PLUGIN_URI) + ); + } + + /** + * Send header string to the client + * + * @param string $header + * @param string $content + */ + protected function sendHeader($header, $content) + { + if (!headers_sent() && self::$sendHeaders) { + header(sprintf('%s: %s', $header, $content)); + } + } + + /** + * Creates & sends header for a record, ensuring init headers have been sent prior + * + * @see sendHeader() + * @see sendInitHeaders() + * @param array $record + */ + protected function write(array $record) + { + if (!self::$sendHeaders) { + return; + } + + // WildFire-specific headers must be sent prior to any messages + if (!self::$initialized) { + self::$initialized = true; + + self::$sendHeaders = $this->headersAccepted(); + if (!self::$sendHeaders) { + return; + } + + foreach ($this->getInitHeaders() as $header => $content) { + $this->sendHeader($header, $content); + } + } + + $header = $this->createRecordHeader($record); + if (trim(current($header)) !== '') { + $this->sendHeader(key($header), current($header)); + } + } + + /** + * Verifies if the headers are accepted by the current user agent + * + * @return Boolean + */ + protected function headersAccepted() + { + if (!empty($_SERVER['HTTP_USER_AGENT']) && preg_match('{\bFirePHP/\d+\.\d+\b}', $_SERVER['HTTP_USER_AGENT'])) { + return true; + } + + return isset($_SERVER['HTTP_X_FIREPHP_VERSION']); + } + + /** + * BC getter for the sendHeaders property that has been made static + */ + public function __get($property) + { + if ('sendHeaders' !== $property) { + throw new \InvalidArgumentException('Undefined property '.$property); + } + + return static::$sendHeaders; + } + + /** + * BC setter for the sendHeaders property that has been made static + */ + public function __set($property, $value) + { + if ('sendHeaders' !== $property) { + throw new \InvalidArgumentException('Undefined property '.$property); + } + + static::$sendHeaders = $value; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php new file mode 100644 index 0000000..c43c013 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php @@ -0,0 +1,126 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\Logger; + +/** + * Sends logs to Fleep.io using Webhook integrations + * + * You'll need a Fleep.io account to use this handler. + * + * @see https://fleep.io/integrations/webhooks/ Fleep Webhooks Documentation + * @author Ando Roots + */ +class FleepHookHandler extends SocketHandler +{ + const FLEEP_HOST = 'fleep.io'; + + const FLEEP_HOOK_URI = '/hook/'; + + /** + * @var string Webhook token (specifies the conversation where logs are sent) + */ + protected $token; + + /** + * Construct a new Fleep.io Handler. + * + * For instructions on how to create a new web hook in your conversations + * see https://fleep.io/integrations/webhooks/ + * + * @param string $token Webhook token + * @param bool|int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * @throws MissingExtensionException + */ + public function __construct($token, $level = Logger::DEBUG, $bubble = true) + { + if (!extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FleepHookHandler'); + } + + $this->token = $token; + + $connectionString = 'ssl://' . self::FLEEP_HOST . ':443'; + parent::__construct($connectionString, $level, $bubble); + } + + /** + * Returns the default formatter to use with this handler + * + * Overloaded to remove empty context and extra arrays from the end of the log message. + * + * @return LineFormatter + */ + protected function getDefaultFormatter() + { + return new LineFormatter(null, null, true, true); + } + + /** + * Handles a log record + * + * @param array $record + */ + public function write(array $record) + { + parent::write($record); + $this->closeSocket(); + } + + /** + * {@inheritdoc} + * + * @param array $record + * @return string + */ + protected function generateDataStream($record) + { + $content = $this->buildContent($record); + + return $this->buildHeader($content) . $content; + } + + /** + * Builds the header of the API Call + * + * @param string $content + * @return string + */ + private function buildHeader($content) + { + $header = "POST " . self::FLEEP_HOOK_URI . $this->token . " HTTP/1.1\r\n"; + $header .= "Host: " . self::FLEEP_HOST . "\r\n"; + $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $header .= "Content-Length: " . strlen($content) . "\r\n"; + $header .= "\r\n"; + + return $header; + } + + /** + * Builds the body of API call + * + * @param array $record + * @return string + */ + private function buildContent($record) + { + $dataArray = array( + 'message' => $record['formatted'], + ); + + return http_build_query($dataArray); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php new file mode 100644 index 0000000..dd9a361 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php @@ -0,0 +1,127 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\FlowdockFormatter; +use Monolog\Formatter\FormatterInterface; + +/** + * Sends notifications through the Flowdock push API + * + * This must be configured with a FlowdockFormatter instance via setFormatter() + * + * Notes: + * API token - Flowdock API token + * + * @author Dominik Liebler + * @see https://www.flowdock.com/api/push + */ +class FlowdockHandler extends SocketHandler +{ + /** + * @var string + */ + protected $apiToken; + + /** + * @param string $apiToken + * @param bool|int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * + * @throws MissingExtensionException if OpenSSL is missing + */ + public function __construct($apiToken, $level = Logger::DEBUG, $bubble = true) + { + if (!extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler'); + } + + parent::__construct('ssl://api.flowdock.com:443', $level, $bubble); + $this->apiToken = $apiToken; + } + + /** + * {@inheritdoc} + */ + public function setFormatter(FormatterInterface $formatter) + { + if (!$formatter instanceof FlowdockFormatter) { + throw new \InvalidArgumentException('The FlowdockHandler requires an instance of Monolog\Formatter\FlowdockFormatter to function correctly'); + } + + return parent::setFormatter($formatter); + } + + /** + * Gets the default formatter. + * + * @return FormatterInterface + */ + protected function getDefaultFormatter() + { + throw new \InvalidArgumentException('The FlowdockHandler must be configured (via setFormatter) with an instance of Monolog\Formatter\FlowdockFormatter to function correctly'); + } + + /** + * {@inheritdoc} + * + * @param array $record + */ + protected function write(array $record) + { + parent::write($record); + + $this->closeSocket(); + } + + /** + * {@inheritdoc} + * + * @param array $record + * @return string + */ + protected function generateDataStream($record) + { + $content = $this->buildContent($record); + + return $this->buildHeader($content) . $content; + } + + /** + * Builds the body of API call + * + * @param array $record + * @return string + */ + private function buildContent($record) + { + return json_encode($record['formatted']['flowdock']); + } + + /** + * Builds the header of the API Call + * + * @param string $content + * @return string + */ + private function buildHeader($content) + { + $header = "POST /v1/messages/team_inbox/" . $this->apiToken . " HTTP/1.1\r\n"; + $header .= "Host: api.flowdock.com\r\n"; + $header .= "Content-Type: application/json\r\n"; + $header .= "Content-Length: " . strlen($content) . "\r\n"; + $header .= "\r\n"; + + return $header; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php new file mode 100644 index 0000000..d3847d8 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Gelf\IMessagePublisher; +use Gelf\PublisherInterface; +use Gelf\Publisher; +use InvalidArgumentException; +use Monolog\Logger; +use Monolog\Formatter\GelfMessageFormatter; + +/** + * Handler to send messages to a Graylog2 (http://www.graylog2.org) server + * + * @author Matt Lehner + * @author Benjamin Zikarsky + */ +class GelfHandler extends AbstractProcessingHandler +{ + /** + * @var Publisher the publisher object that sends the message to the server + */ + protected $publisher; + + /** + * @param PublisherInterface|IMessagePublisher|Publisher $publisher a publisher object + * @param int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($publisher, $level = Logger::DEBUG, $bubble = true) + { + parent::__construct($level, $bubble); + + if (!$publisher instanceof Publisher && !$publisher instanceof IMessagePublisher && !$publisher instanceof PublisherInterface) { + throw new InvalidArgumentException('Invalid publisher, expected a Gelf\Publisher, Gelf\IMessagePublisher or Gelf\PublisherInterface instance'); + } + + $this->publisher = $publisher; + } + + /** + * {@inheritdoc} + */ + public function close() + { + $this->publisher = null; + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + $this->publisher->publish($record['formatted']); + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new GelfMessageFormatter(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php new file mode 100644 index 0000000..663f5a9 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php @@ -0,0 +1,104 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; + +/** + * Forwards records to multiple handlers + * + * @author Lenar Lõhmus + */ +class GroupHandler extends AbstractHandler +{ + protected $handlers; + + /** + * @param array $handlers Array of Handlers. + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct(array $handlers, $bubble = true) + { + foreach ($handlers as $handler) { + if (!$handler instanceof HandlerInterface) { + throw new \InvalidArgumentException('The first argument of the GroupHandler must be an array of HandlerInterface instances.'); + } + } + + $this->handlers = $handlers; + $this->bubble = $bubble; + } + + /** + * {@inheritdoc} + */ + public function isHandling(array $record) + { + foreach ($this->handlers as $handler) { + if ($handler->isHandling($record)) { + return true; + } + } + + return false; + } + + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + if ($this->processors) { + foreach ($this->processors as $processor) { + $record = call_user_func($processor, $record); + } + } + + foreach ($this->handlers as $handler) { + $handler->handle($record); + } + + return false === $this->bubble; + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + if ($this->processors) { + $processed = array(); + foreach ($records as $record) { + foreach ($this->processors as $processor) { + $processed[] = call_user_func($processor, $record); + } + } + $records = $processed; + } + + foreach ($this->handlers as $handler) { + $handler->handleBatch($records); + } + } + + /** + * {@inheritdoc} + */ + public function setFormatter(FormatterInterface $formatter) + { + foreach ($this->handlers as $handler) { + $handler->setFormatter($formatter); + } + + return $this; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php b/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php new file mode 100644 index 0000000..d920c4b --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php @@ -0,0 +1,90 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; + +/** + * Interface that all Monolog Handlers must implement + * + * @author Jordi Boggiano + */ +interface HandlerInterface +{ + /** + * Checks whether the given record will be handled by this handler. + * + * This is mostly done for performance reasons, to avoid calling processors for nothing. + * + * Handlers should still check the record levels within handle(), returning false in isHandling() + * is no guarantee that handle() will not be called, and isHandling() might not be called + * for a given record. + * + * @param array $record Partial log record containing only a level key + * + * @return Boolean + */ + public function isHandling(array $record); + + /** + * Handles a record. + * + * All records may be passed to this method, and the handler should discard + * those that it does not want to handle. + * + * The return value of this function controls the bubbling process of the handler stack. + * Unless the bubbling is interrupted (by returning true), the Logger class will keep on + * calling further handlers in the stack with a given log record. + * + * @param array $record The record to handle + * @return Boolean true means that this handler handled the record, and that bubbling is not permitted. + * false means the record was either not processed or that this handler allows bubbling. + */ + public function handle(array $record); + + /** + * Handles a set of records at once. + * + * @param array $records The records to handle (an array of record arrays) + */ + public function handleBatch(array $records); + + /** + * Adds a processor in the stack. + * + * @param callable $callback + * @return self + */ + public function pushProcessor($callback); + + /** + * Removes the processor on top of the stack and returns it. + * + * @return callable + */ + public function popProcessor(); + + /** + * Sets the formatter. + * + * @param FormatterInterface $formatter + * @return self + */ + public function setFormatter(FormatterInterface $formatter); + + /** + * Gets the formatter. + * + * @return FormatterInterface + */ + public function getFormatter(); +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php b/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php new file mode 100644 index 0000000..e540d80 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php @@ -0,0 +1,108 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; + +/** + * This simple wrapper class can be used to extend handlers functionality. + * + * Example: A custom filtering that can be applied to any handler. + * + * Inherit from this class and override handle() like this: + * + * public function handle(array $record) + * { + * if ($record meets certain conditions) { + * return false; + * } + * return $this->handler->handle($record); + * } + * + * @author Alexey Karapetov + */ +class HandlerWrapper implements HandlerInterface +{ + /** + * @var HandlerInterface + */ + protected $handler; + + /** + * HandlerWrapper constructor. + * @param HandlerInterface $handler + */ + public function __construct(HandlerInterface $handler) + { + $this->handler = $handler; + } + + /** + * {@inheritdoc} + */ + public function isHandling(array $record) + { + return $this->handler->isHandling($record); + } + + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + return $this->handler->handle($record); + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + return $this->handler->handleBatch($records); + } + + /** + * {@inheritdoc} + */ + public function pushProcessor($callback) + { + $this->handler->pushProcessor($callback); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function popProcessor() + { + return $this->handler->popProcessor(); + } + + /** + * {@inheritdoc} + */ + public function setFormatter(FormatterInterface $formatter) + { + $this->handler->setFormatter($formatter); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getFormatter() + { + return $this->handler->getFormatter(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php new file mode 100644 index 0000000..73049f3 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php @@ -0,0 +1,350 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Sends notifications through the hipchat api to a hipchat room + * + * Notes: + * API token - HipChat API token + * Room - HipChat Room Id or name, where messages are sent + * Name - Name used to send the message (from) + * notify - Should the message trigger a notification in the clients + * version - The API version to use (HipChatHandler::API_V1 | HipChatHandler::API_V2) + * + * @author Rafael Dohms + * @see https://www.hipchat.com/docs/api + */ +class HipChatHandler extends SocketHandler +{ + /** + * Use API version 1 + */ + const API_V1 = 'v1'; + + /** + * Use API version v2 + */ + const API_V2 = 'v2'; + + /** + * The maximum allowed length for the name used in the "from" field. + */ + const MAXIMUM_NAME_LENGTH = 15; + + /** + * The maximum allowed length for the message. + */ + const MAXIMUM_MESSAGE_LENGTH = 9500; + + /** + * @var string + */ + private $token; + + /** + * @var string + */ + private $room; + + /** + * @var string + */ + private $name; + + /** + * @var bool + */ + private $notify; + + /** + * @var string + */ + private $format; + + /** + * @var string + */ + private $host; + + /** + * @var string + */ + private $version; + + /** + * @param string $token HipChat API Token + * @param string $room The room that should be alerted of the message (Id or Name) + * @param string $name Name used in the "from" field. + * @param bool $notify Trigger a notification in clients or not + * @param int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * @param bool $useSSL Whether to connect via SSL. + * @param string $format The format of the messages (default to text, can be set to html if you have html in the messages) + * @param string $host The HipChat server hostname. + * @param string $version The HipChat API version (default HipChatHandler::API_V1) + */ + public function __construct($token, $room, $name = 'Monolog', $notify = false, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $format = 'text', $host = 'api.hipchat.com', $version = self::API_V1) + { + if ($version == self::API_V1 && !$this->validateStringLength($name, static::MAXIMUM_NAME_LENGTH)) { + throw new \InvalidArgumentException('The supplied name is too long. HipChat\'s v1 API supports names up to 15 UTF-8 characters.'); + } + + $connectionString = $useSSL ? 'ssl://'.$host.':443' : $host.':80'; + parent::__construct($connectionString, $level, $bubble); + + $this->token = $token; + $this->name = $name; + $this->notify = $notify; + $this->room = $room; + $this->format = $format; + $this->host = $host; + $this->version = $version; + } + + /** + * {@inheritdoc} + * + * @param array $record + * @return string + */ + protected function generateDataStream($record) + { + $content = $this->buildContent($record); + + return $this->buildHeader($content) . $content; + } + + /** + * Builds the body of API call + * + * @param array $record + * @return string + */ + private function buildContent($record) + { + $dataArray = array( + 'notify' => $this->version == self::API_V1 ? + ($this->notify ? 1 : 0) : + ($this->notify ? 'true' : 'false'), + 'message' => $record['formatted'], + 'message_format' => $this->format, + 'color' => $this->getAlertColor($record['level']), + ); + + if (!$this->validateStringLength($dataArray['message'], static::MAXIMUM_MESSAGE_LENGTH)) { + if (function_exists('mb_substr')) { + $dataArray['message'] = mb_substr($dataArray['message'], 0, static::MAXIMUM_MESSAGE_LENGTH).' [truncated]'; + } else { + $dataArray['message'] = substr($dataArray['message'], 0, static::MAXIMUM_MESSAGE_LENGTH).' [truncated]'; + } + } + + // if we are using the legacy API then we need to send some additional information + if ($this->version == self::API_V1) { + $dataArray['room_id'] = $this->room; + } + + // append the sender name if it is set + // always append it if we use the v1 api (it is required in v1) + if ($this->version == self::API_V1 || $this->name !== null) { + $dataArray['from'] = (string) $this->name; + } + + return http_build_query($dataArray); + } + + /** + * Builds the header of the API Call + * + * @param string $content + * @return string + */ + private function buildHeader($content) + { + if ($this->version == self::API_V1) { + $header = "POST /v1/rooms/message?format=json&auth_token={$this->token} HTTP/1.1\r\n"; + } else { + // needed for rooms with special (spaces, etc) characters in the name + $room = rawurlencode($this->room); + $header = "POST /v2/room/{$room}/notification?auth_token={$this->token} HTTP/1.1\r\n"; + } + + $header .= "Host: {$this->host}\r\n"; + $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $header .= "Content-Length: " . strlen($content) . "\r\n"; + $header .= "\r\n"; + + return $header; + } + + /** + * Assigns a color to each level of log records. + * + * @param int $level + * @return string + */ + protected function getAlertColor($level) + { + switch (true) { + case $level >= Logger::ERROR: + return 'red'; + case $level >= Logger::WARNING: + return 'yellow'; + case $level >= Logger::INFO: + return 'green'; + case $level == Logger::DEBUG: + return 'gray'; + default: + return 'yellow'; + } + } + + /** + * {@inheritdoc} + * + * @param array $record + */ + protected function write(array $record) + { + parent::write($record); + $this->closeSocket(); + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + if (count($records) == 0) { + return true; + } + + $batchRecords = $this->combineRecords($records); + + $handled = false; + foreach ($batchRecords as $batchRecord) { + if ($this->isHandling($batchRecord)) { + $this->write($batchRecord); + $handled = true; + } + } + + if (!$handled) { + return false; + } + + return false === $this->bubble; + } + + /** + * Combines multiple records into one. Error level of the combined record + * will be the highest level from the given records. Datetime will be taken + * from the first record. + * + * @param $records + * @return array + */ + private function combineRecords($records) + { + $batchRecord = null; + $batchRecords = array(); + $messages = array(); + $formattedMessages = array(); + $level = 0; + $levelName = null; + $datetime = null; + + foreach ($records as $record) { + $record = $this->processRecord($record); + + if ($record['level'] > $level) { + $level = $record['level']; + $levelName = $record['level_name']; + } + + if (null === $datetime) { + $datetime = $record['datetime']; + } + + $messages[] = $record['message']; + $messageStr = implode(PHP_EOL, $messages); + $formattedMessages[] = $this->getFormatter()->format($record); + $formattedMessageStr = implode('', $formattedMessages); + + $batchRecord = array( + 'message' => $messageStr, + 'formatted' => $formattedMessageStr, + 'context' => array(), + 'extra' => array(), + ); + + if (!$this->validateStringLength($batchRecord['formatted'], static::MAXIMUM_MESSAGE_LENGTH)) { + // Pop the last message and implode the remaining messages + $lastMessage = array_pop($messages); + $lastFormattedMessage = array_pop($formattedMessages); + $batchRecord['message'] = implode(PHP_EOL, $messages); + $batchRecord['formatted'] = implode('', $formattedMessages); + + $batchRecords[] = $batchRecord; + $messages = array($lastMessage); + $formattedMessages = array($lastFormattedMessage); + + $batchRecord = null; + } + } + + if (null !== $batchRecord) { + $batchRecords[] = $batchRecord; + } + + // Set the max level and datetime for all records + foreach ($batchRecords as &$batchRecord) { + $batchRecord = array_merge( + $batchRecord, + array( + 'level' => $level, + 'level_name' => $levelName, + 'datetime' => $datetime, + ) + ); + } + + return $batchRecords; + } + + /** + * Validates the length of a string. + * + * If the `mb_strlen()` function is available, it will use that, as HipChat + * allows UTF-8 characters. Otherwise, it will fall back to `strlen()`. + * + * Note that this might cause false failures in the specific case of using + * a valid name with less than 16 characters, but 16 or more bytes, on a + * system where `mb_strlen()` is unavailable. + * + * @param string $str + * @param int $length + * + * @return bool + */ + private function validateStringLength($str, $length) + { + if (function_exists('mb_strlen')) { + return (mb_strlen($str) <= $length); + } + + return (strlen($str) <= $length); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php new file mode 100644 index 0000000..d60a3c8 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * IFTTTHandler uses cURL to trigger IFTTT Maker actions + * + * Register a secret key and trigger/event name at https://ifttt.com/maker + * + * value1 will be the channel from monolog's Logger constructor, + * value2 will be the level name (ERROR, WARNING, ..) + * value3 will be the log record's message + * + * @author Nehal Patel + */ +class IFTTTHandler extends AbstractProcessingHandler +{ + private $eventName; + private $secretKey; + + /** + * @param string $eventName The name of the IFTTT Maker event that should be triggered + * @param string $secretKey A valid IFTTT secret key + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($eventName, $secretKey, $level = Logger::ERROR, $bubble = true) + { + $this->eventName = $eventName; + $this->secretKey = $secretKey; + + parent::__construct($level, $bubble); + } + + /** + * {@inheritdoc} + */ + public function write(array $record) + { + $postData = array( + "value1" => $record["channel"], + "value2" => $record["level_name"], + "value3" => $record["message"], + ); + $postString = json_encode($postData); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, "https://maker.ifttt.com/trigger/" . $this->eventName . "/with/key/" . $this->secretKey); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $postString); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + "Content-Type: application/json", + )); + + Curl\Util::execute($ch); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php new file mode 100644 index 0000000..494c605 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php @@ -0,0 +1,55 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * @author Robert Kaufmann III + */ +class LogEntriesHandler extends SocketHandler +{ + /** + * @var string + */ + protected $logToken; + + /** + * @param string $token Log token supplied by LogEntries + * @param bool $useSSL Whether or not SSL encryption should be used. + * @param int $level The minimum logging level to trigger this handler + * @param bool $bubble Whether or not messages that are handled should bubble up the stack. + * + * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing + */ + public function __construct($token, $useSSL = true, $level = Logger::DEBUG, $bubble = true) + { + if ($useSSL && !extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for LogEntriesHandler'); + } + + $endpoint = $useSSL ? 'ssl://data.logentries.com:443' : 'data.logentries.com:80'; + parent::__construct($endpoint, $level, $bubble); + $this->logToken = $token; + } + + /** + * {@inheritdoc} + * + * @param array $record + * @return string + */ + protected function generateDataStream($record) + { + return $this->logToken . ' ' . $record['formatted']; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php new file mode 100644 index 0000000..bcd62e1 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php @@ -0,0 +1,102 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\LogglyFormatter; + +/** + * Sends errors to Loggly. + * + * @author Przemek Sobstel + * @author Adam Pancutt + * @author Gregory Barchard + */ +class LogglyHandler extends AbstractProcessingHandler +{ + const HOST = 'logs-01.loggly.com'; + const ENDPOINT_SINGLE = 'inputs'; + const ENDPOINT_BATCH = 'bulk'; + + protected $token; + + protected $tag = array(); + + public function __construct($token, $level = Logger::DEBUG, $bubble = true) + { + if (!extension_loaded('curl')) { + throw new \LogicException('The curl extension is needed to use the LogglyHandler'); + } + + $this->token = $token; + + parent::__construct($level, $bubble); + } + + public function setTag($tag) + { + $tag = !empty($tag) ? $tag : array(); + $this->tag = is_array($tag) ? $tag : array($tag); + } + + public function addTag($tag) + { + if (!empty($tag)) { + $tag = is_array($tag) ? $tag : array($tag); + $this->tag = array_unique(array_merge($this->tag, $tag)); + } + } + + protected function write(array $record) + { + $this->send($record["formatted"], self::ENDPOINT_SINGLE); + } + + public function handleBatch(array $records) + { + $level = $this->level; + + $records = array_filter($records, function ($record) use ($level) { + return ($record['level'] >= $level); + }); + + if ($records) { + $this->send($this->getFormatter()->formatBatch($records), self::ENDPOINT_BATCH); + } + } + + protected function send($data, $endpoint) + { + $url = sprintf("https://%s/%s/%s/", self::HOST, $endpoint, $this->token); + + $headers = array('Content-Type: application/json'); + + if (!empty($this->tag)) { + $headers[] = 'X-LOGGLY-TAG: '.implode(',', $this->tag); + } + + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + Curl\Util::execute($ch); + } + + protected function getDefaultFormatter() + { + return new LogglyFormatter(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php new file mode 100644 index 0000000..9e23283 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +/** + * Base class for all mail handlers + * + * @author Gyula Sallai + */ +abstract class MailHandler extends AbstractProcessingHandler +{ + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + $messages = array(); + + foreach ($records as $record) { + if ($record['level'] < $this->level) { + continue; + } + $messages[] = $this->processRecord($record); + } + + if (!empty($messages)) { + $this->send((string) $this->getFormatter()->formatBatch($messages), $messages); + } + } + + /** + * Send a mail with the given content + * + * @param string $content formatted email body to be sent + * @param array $records the array of log records that formed this content + */ + abstract protected function send($content, array $records); + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + $this->send((string) $record['formatted'], array($record)); + } + + protected function getHighestRecord(array $records) + { + $highestRecord = null; + foreach ($records as $record) { + if ($highestRecord === null || $highestRecord['level'] < $record['level']) { + $highestRecord = $record; + } + } + + return $highestRecord; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php new file mode 100644 index 0000000..ab95924 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * MandrillHandler uses cURL to send the emails to the Mandrill API + * + * @author Adam Nicholson + */ +class MandrillHandler extends MailHandler +{ + protected $message; + protected $apiKey; + + /** + * @param string $apiKey A valid Mandrill API key + * @param callable|\Swift_Message $message An example message for real messages, only the body will be replaced + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($apiKey, $message, $level = Logger::ERROR, $bubble = true) + { + parent::__construct($level, $bubble); + + if (!$message instanceof \Swift_Message && is_callable($message)) { + $message = call_user_func($message); + } + if (!$message instanceof \Swift_Message) { + throw new \InvalidArgumentException('You must provide either a Swift_Message instance or a callable returning it'); + } + $this->message = $message; + $this->apiKey = $apiKey; + } + + /** + * {@inheritdoc} + */ + protected function send($content, array $records) + { + $message = clone $this->message; + $message->setBody($content); + $message->setDate(time()); + + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json'); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array( + 'key' => $this->apiKey, + 'raw_message' => (string) $message, + 'async' => false, + ))); + + Curl\Util::execute($ch); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php b/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php new file mode 100644 index 0000000..4724a7e --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +/** + * Exception can be thrown if an extension for an handler is missing + * + * @author Christian Bergau + */ +class MissingExtensionException extends \Exception +{ +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php new file mode 100644 index 0000000..56fe755 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\NormalizerFormatter; + +/** + * Logs to a MongoDB database. + * + * usage example: + * + * $log = new Logger('application'); + * $mongodb = new MongoDBHandler(new \Mongo("mongodb://localhost:27017"), "logs", "prod"); + * $log->pushHandler($mongodb); + * + * @author Thomas Tourlourat + */ +class MongoDBHandler extends AbstractProcessingHandler +{ + protected $mongoCollection; + + public function __construct($mongo, $database, $collection, $level = Logger::DEBUG, $bubble = true) + { + if (!($mongo instanceof \MongoClient || $mongo instanceof \Mongo || $mongo instanceof \MongoDB\Client)) { + throw new \InvalidArgumentException('MongoClient, Mongo or MongoDB\Client instance required'); + } + + $this->mongoCollection = $mongo->selectCollection($database, $collection); + + parent::__construct($level, $bubble); + } + + protected function write(array $record) + { + if ($this->mongoCollection instanceof \MongoDB\Collection) { + $this->mongoCollection->insertOne($record["formatted"]); + } else { + $this->mongoCollection->save($record["formatted"]); + } + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new NormalizerFormatter(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php new file mode 100644 index 0000000..d7807fd --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php @@ -0,0 +1,185 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\LineFormatter; + +/** + * NativeMailerHandler uses the mail() function to send the emails + * + * @author Christophe Coevoet + * @author Mark Garrett + */ +class NativeMailerHandler extends MailHandler +{ + /** + * The email addresses to which the message will be sent + * @var array + */ + protected $to; + + /** + * The subject of the email + * @var string + */ + protected $subject; + + /** + * Optional headers for the message + * @var array + */ + protected $headers = array(); + + /** + * Optional parameters for the message + * @var array + */ + protected $parameters = array(); + + /** + * The wordwrap length for the message + * @var int + */ + protected $maxColumnWidth; + + /** + * The Content-type for the message + * @var string + */ + protected $contentType = 'text/plain'; + + /** + * The encoding for the message + * @var string + */ + protected $encoding = 'utf-8'; + + /** + * @param string|array $to The receiver of the mail + * @param string $subject The subject of the mail + * @param string $from The sender of the mail + * @param int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * @param int $maxColumnWidth The maximum column width that the message lines will have + */ + public function __construct($to, $subject, $from, $level = Logger::ERROR, $bubble = true, $maxColumnWidth = 70) + { + parent::__construct($level, $bubble); + $this->to = is_array($to) ? $to : array($to); + $this->subject = $subject; + $this->addHeader(sprintf('From: %s', $from)); + $this->maxColumnWidth = $maxColumnWidth; + } + + /** + * Add headers to the message + * + * @param string|array $headers Custom added headers + * @return self + */ + public function addHeader($headers) + { + foreach ((array) $headers as $header) { + if (strpos($header, "\n") !== false || strpos($header, "\r") !== false) { + throw new \InvalidArgumentException('Headers can not contain newline characters for security reasons'); + } + $this->headers[] = $header; + } + + return $this; + } + + /** + * Add parameters to the message + * + * @param string|array $parameters Custom added parameters + * @return self + */ + public function addParameter($parameters) + { + $this->parameters = array_merge($this->parameters, (array) $parameters); + + return $this; + } + + /** + * {@inheritdoc} + */ + protected function send($content, array $records) + { + $content = wordwrap($content, $this->maxColumnWidth); + $headers = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n"); + $headers .= 'Content-type: ' . $this->getContentType() . '; charset=' . $this->getEncoding() . "\r\n"; + if ($this->getContentType() == 'text/html' && false === strpos($headers, 'MIME-Version:')) { + $headers .= 'MIME-Version: 1.0' . "\r\n"; + } + + $subject = $this->subject; + if ($records) { + $subjectFormatter = new LineFormatter($this->subject); + $subject = $subjectFormatter->format($this->getHighestRecord($records)); + } + + $parameters = implode(' ', $this->parameters); + foreach ($this->to as $to) { + mail($to, $subject, $content, $headers, $parameters); + } + } + + /** + * @return string $contentType + */ + public function getContentType() + { + return $this->contentType; + } + + /** + * @return string $encoding + */ + public function getEncoding() + { + return $this->encoding; + } + + /** + * @param string $contentType The content type of the email - Defaults to text/plain. Use text/html for HTML + * messages. + * @return self + */ + public function setContentType($contentType) + { + if (strpos($contentType, "\n") !== false || strpos($contentType, "\r") !== false) { + throw new \InvalidArgumentException('The content type can not contain newline characters to prevent email header injection'); + } + + $this->contentType = $contentType; + + return $this; + } + + /** + * @param string $encoding + * @return self + */ + public function setEncoding($encoding) + { + if (strpos($encoding, "\n") !== false || strpos($encoding, "\r") !== false) { + throw new \InvalidArgumentException('The encoding can not contain newline characters to prevent email header injection'); + } + + $this->encoding = $encoding; + + return $this; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php new file mode 100644 index 0000000..6718e9e --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php @@ -0,0 +1,202 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\NormalizerFormatter; + +/** + * Class to record a log on a NewRelic application. + * Enabling New Relic High Security mode may prevent capture of useful information. + * + * @see https://docs.newrelic.com/docs/agents/php-agent + * @see https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security + */ +class NewRelicHandler extends AbstractProcessingHandler +{ + /** + * Name of the New Relic application that will receive logs from this handler. + * + * @var string + */ + protected $appName; + + /** + * Name of the current transaction + * + * @var string + */ + protected $transactionName; + + /** + * Some context and extra data is passed into the handler as arrays of values. Do we send them as is + * (useful if we are using the API), or explode them for display on the NewRelic RPM website? + * + * @var bool + */ + protected $explodeArrays; + + /** + * {@inheritDoc} + * + * @param string $appName + * @param bool $explodeArrays + * @param string $transactionName + */ + public function __construct( + $level = Logger::ERROR, + $bubble = true, + $appName = null, + $explodeArrays = false, + $transactionName = null + ) { + parent::__construct($level, $bubble); + + $this->appName = $appName; + $this->explodeArrays = $explodeArrays; + $this->transactionName = $transactionName; + } + + /** + * {@inheritDoc} + */ + protected function write(array $record) + { + if (!$this->isNewRelicEnabled()) { + throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler'); + } + + if ($appName = $this->getAppName($record['context'])) { + $this->setNewRelicAppName($appName); + } + + if ($transactionName = $this->getTransactionName($record['context'])) { + $this->setNewRelicTransactionName($transactionName); + unset($record['formatted']['context']['transaction_name']); + } + + if (isset($record['context']['exception']) && $record['context']['exception'] instanceof \Exception) { + newrelic_notice_error($record['message'], $record['context']['exception']); + unset($record['formatted']['context']['exception']); + } else { + newrelic_notice_error($record['message']); + } + + if (isset($record['formatted']['context']) && is_array($record['formatted']['context'])) { + foreach ($record['formatted']['context'] as $key => $parameter) { + if (is_array($parameter) && $this->explodeArrays) { + foreach ($parameter as $paramKey => $paramValue) { + $this->setNewRelicParameter('context_' . $key . '_' . $paramKey, $paramValue); + } + } else { + $this->setNewRelicParameter('context_' . $key, $parameter); + } + } + } + + if (isset($record['formatted']['extra']) && is_array($record['formatted']['extra'])) { + foreach ($record['formatted']['extra'] as $key => $parameter) { + if (is_array($parameter) && $this->explodeArrays) { + foreach ($parameter as $paramKey => $paramValue) { + $this->setNewRelicParameter('extra_' . $key . '_' . $paramKey, $paramValue); + } + } else { + $this->setNewRelicParameter('extra_' . $key, $parameter); + } + } + } + } + + /** + * Checks whether the NewRelic extension is enabled in the system. + * + * @return bool + */ + protected function isNewRelicEnabled() + { + return extension_loaded('newrelic'); + } + + /** + * Returns the appname where this log should be sent. Each log can override the default appname, set in this + * handler's constructor, by providing the appname in it's context. + * + * @param array $context + * @return null|string + */ + protected function getAppName(array $context) + { + if (isset($context['appname'])) { + return $context['appname']; + } + + return $this->appName; + } + + /** + * Returns the name of the current transaction. Each log can override the default transaction name, set in this + * handler's constructor, by providing the transaction_name in it's context + * + * @param array $context + * + * @return null|string + */ + protected function getTransactionName(array $context) + { + if (isset($context['transaction_name'])) { + return $context['transaction_name']; + } + + return $this->transactionName; + } + + /** + * Sets the NewRelic application that should receive this log. + * + * @param string $appName + */ + protected function setNewRelicAppName($appName) + { + newrelic_set_appname($appName); + } + + /** + * Overwrites the name of the current transaction + * + * @param string $transactionName + */ + protected function setNewRelicTransactionName($transactionName) + { + newrelic_name_transaction($transactionName); + } + + /** + * @param string $key + * @param mixed $value + */ + protected function setNewRelicParameter($key, $value) + { + if (null === $value || is_scalar($value)) { + newrelic_add_custom_parameter($key, $value); + } else { + newrelic_add_custom_parameter($key, @json_encode($value)); + } + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new NormalizerFormatter(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php new file mode 100644 index 0000000..4b84588 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Blackhole + * + * Any record it can handle will be thrown away. This can be used + * to put on top of an existing stack to override it temporarily. + * + * @author Jordi Boggiano + */ +class NullHandler extends AbstractHandler +{ + /** + * @param int $level The minimum logging level at which this handler will be triggered + */ + public function __construct($level = Logger::DEBUG) + { + parent::__construct($level, false); + } + + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + if ($record['level'] < $this->level) { + return false; + } + + return true; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php new file mode 100644 index 0000000..1f2076a --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php @@ -0,0 +1,242 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Exception; +use Monolog\Formatter\LineFormatter; +use Monolog\Logger; +use PhpConsole\Connector; +use PhpConsole\Handler; +use PhpConsole\Helper; + +/** + * Monolog handler for Google Chrome extension "PHP Console" + * + * Display PHP error/debug log messages in Google Chrome console and notification popups, executes PHP code remotely + * + * Usage: + * 1. Install Google Chrome extension https://chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef + * 2. See overview https://github.com/barbushin/php-console#overview + * 3. Install PHP Console library https://github.com/barbushin/php-console#installation + * 4. Example (result will looks like http://i.hizliresim.com/vg3Pz4.png) + * + * $logger = new \Monolog\Logger('all', array(new \Monolog\Handler\PHPConsoleHandler())); + * \Monolog\ErrorHandler::register($logger); + * echo $undefinedVar; + * $logger->addDebug('SELECT * FROM users', array('db', 'time' => 0.012)); + * PC::debug($_SERVER); // PHP Console debugger for any type of vars + * + * @author Sergey Barbushin https://www.linkedin.com/in/barbushin + */ +class PHPConsoleHandler extends AbstractProcessingHandler +{ + private $options = array( + 'enabled' => true, // bool Is PHP Console server enabled + 'classesPartialsTraceIgnore' => array('Monolog\\'), // array Hide calls of classes started with... + 'debugTagsKeysInContext' => array(0, 'tag'), // bool Is PHP Console server enabled + 'useOwnErrorsHandler' => false, // bool Enable errors handling + 'useOwnExceptionsHandler' => false, // bool Enable exceptions handling + 'sourcesBasePath' => null, // string Base path of all project sources to strip in errors source paths + 'registerHelper' => true, // bool Register PhpConsole\Helper that allows short debug calls like PC::debug($var, 'ta.g.s') + 'serverEncoding' => null, // string|null Server internal encoding + 'headersLimit' => null, // int|null Set headers size limit for your web-server + 'password' => null, // string|null Protect PHP Console connection by password + 'enableSslOnlyMode' => false, // bool Force connection by SSL for clients with PHP Console installed + 'ipMasks' => array(), // array Set IP masks of clients that will be allowed to connect to PHP Console: array('192.168.*.*', '127.0.0.1') + 'enableEvalListener' => false, // bool Enable eval request to be handled by eval dispatcher(if enabled, 'password' option is also required) + 'dumperDetectCallbacks' => false, // bool Convert callback items in dumper vars to (callback SomeClass::someMethod) strings + 'dumperLevelLimit' => 5, // int Maximum dumped vars array or object nested dump level + 'dumperItemsCountLimit' => 100, // int Maximum dumped var same level array items or object properties number + 'dumperItemSizeLimit' => 5000, // int Maximum length of any string or dumped array item + 'dumperDumpSizeLimit' => 500000, // int Maximum approximate size of dumped vars result formatted in JSON + 'detectDumpTraceAndSource' => false, // bool Autodetect and append trace data to debug + 'dataStorage' => null, // PhpConsole\Storage|null Fixes problem with custom $_SESSION handler(see http://goo.gl/Ne8juJ) + ); + + /** @var Connector */ + private $connector; + + /** + * @param array $options See \Monolog\Handler\PHPConsoleHandler::$options for more details + * @param Connector|null $connector Instance of \PhpConsole\Connector class (optional) + * @param int $level + * @param bool $bubble + * @throws Exception + */ + public function __construct(array $options = array(), Connector $connector = null, $level = Logger::DEBUG, $bubble = true) + { + if (!class_exists('PhpConsole\Connector')) { + throw new Exception('PHP Console library not found. See https://github.com/barbushin/php-console#installation'); + } + parent::__construct($level, $bubble); + $this->options = $this->initOptions($options); + $this->connector = $this->initConnector($connector); + } + + private function initOptions(array $options) + { + $wrongOptions = array_diff(array_keys($options), array_keys($this->options)); + if ($wrongOptions) { + throw new Exception('Unknown options: ' . implode(', ', $wrongOptions)); + } + + return array_replace($this->options, $options); + } + + private function initConnector(Connector $connector = null) + { + if (!$connector) { + if ($this->options['dataStorage']) { + Connector::setPostponeStorage($this->options['dataStorage']); + } + $connector = Connector::getInstance(); + } + + if ($this->options['registerHelper'] && !Helper::isRegistered()) { + Helper::register(); + } + + if ($this->options['enabled'] && $connector->isActiveClient()) { + if ($this->options['useOwnErrorsHandler'] || $this->options['useOwnExceptionsHandler']) { + $handler = Handler::getInstance(); + $handler->setHandleErrors($this->options['useOwnErrorsHandler']); + $handler->setHandleExceptions($this->options['useOwnExceptionsHandler']); + $handler->start(); + } + if ($this->options['sourcesBasePath']) { + $connector->setSourcesBasePath($this->options['sourcesBasePath']); + } + if ($this->options['serverEncoding']) { + $connector->setServerEncoding($this->options['serverEncoding']); + } + if ($this->options['password']) { + $connector->setPassword($this->options['password']); + } + if ($this->options['enableSslOnlyMode']) { + $connector->enableSslOnlyMode(); + } + if ($this->options['ipMasks']) { + $connector->setAllowedIpMasks($this->options['ipMasks']); + } + if ($this->options['headersLimit']) { + $connector->setHeadersLimit($this->options['headersLimit']); + } + if ($this->options['detectDumpTraceAndSource']) { + $connector->getDebugDispatcher()->detectTraceAndSource = true; + } + $dumper = $connector->getDumper(); + $dumper->levelLimit = $this->options['dumperLevelLimit']; + $dumper->itemsCountLimit = $this->options['dumperItemsCountLimit']; + $dumper->itemSizeLimit = $this->options['dumperItemSizeLimit']; + $dumper->dumpSizeLimit = $this->options['dumperDumpSizeLimit']; + $dumper->detectCallbacks = $this->options['dumperDetectCallbacks']; + if ($this->options['enableEvalListener']) { + $connector->startEvalRequestsListener(); + } + } + + return $connector; + } + + public function getConnector() + { + return $this->connector; + } + + public function getOptions() + { + return $this->options; + } + + public function handle(array $record) + { + if ($this->options['enabled'] && $this->connector->isActiveClient()) { + return parent::handle($record); + } + + return !$this->bubble; + } + + /** + * Writes the record down to the log of the implementing handler + * + * @param array $record + * @return void + */ + protected function write(array $record) + { + if ($record['level'] < Logger::NOTICE) { + $this->handleDebugRecord($record); + } elseif (isset($record['context']['exception']) && $record['context']['exception'] instanceof Exception) { + $this->handleExceptionRecord($record); + } else { + $this->handleErrorRecord($record); + } + } + + private function handleDebugRecord(array $record) + { + $tags = $this->getRecordTags($record); + $message = $record['message']; + if ($record['context']) { + $message .= ' ' . json_encode($this->connector->getDumper()->dump(array_filter($record['context']))); + } + $this->connector->getDebugDispatcher()->dispatchDebug($message, $tags, $this->options['classesPartialsTraceIgnore']); + } + + private function handleExceptionRecord(array $record) + { + $this->connector->getErrorsDispatcher()->dispatchException($record['context']['exception']); + } + + private function handleErrorRecord(array $record) + { + $context = $record['context']; + + $this->connector->getErrorsDispatcher()->dispatchError( + isset($context['code']) ? $context['code'] : null, + isset($context['message']) ? $context['message'] : $record['message'], + isset($context['file']) ? $context['file'] : null, + isset($context['line']) ? $context['line'] : null, + $this->options['classesPartialsTraceIgnore'] + ); + } + + private function getRecordTags(array &$record) + { + $tags = null; + if (!empty($record['context'])) { + $context = & $record['context']; + foreach ($this->options['debugTagsKeysInContext'] as $key) { + if (!empty($context[$key])) { + $tags = $context[$key]; + if ($key === 0) { + array_shift($context); + } else { + unset($context[$key]); + } + break; + } + } + } + + return $tags ?: strtolower($record['level_name']); + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new LineFormatter('%message%'); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php new file mode 100644 index 0000000..1ae8584 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Psr\Log\LoggerInterface; + +/** + * Proxies log messages to an existing PSR-3 compliant logger. + * + * @author Michael Moussa + */ +class PsrHandler extends AbstractHandler +{ + /** + * PSR-3 compliant logger + * + * @var LoggerInterface + */ + protected $logger; + + /** + * @param LoggerInterface $logger The underlying PSR-3 compliant logger to which messages will be proxied + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct(LoggerInterface $logger, $level = Logger::DEBUG, $bubble = true) + { + parent::__construct($level, $bubble); + + $this->logger = $logger; + } + + /** + * {@inheritDoc} + */ + public function handle(array $record) + { + if (!$this->isHandling($record)) { + return false; + } + + $this->logger->log(strtolower($record['level_name']), $record['message'], $record['context']); + + return false === $this->bubble; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php new file mode 100644 index 0000000..bba7200 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php @@ -0,0 +1,185 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Sends notifications through the pushover api to mobile phones + * + * @author Sebastian Göttschkes + * @see https://www.pushover.net/api + */ +class PushoverHandler extends SocketHandler +{ + private $token; + private $users; + private $title; + private $user; + private $retry; + private $expire; + + private $highPriorityLevel; + private $emergencyLevel; + private $useFormattedMessage = false; + + /** + * All parameters that can be sent to Pushover + * @see https://pushover.net/api + * @var array + */ + private $parameterNames = array( + 'token' => true, + 'user' => true, + 'message' => true, + 'device' => true, + 'title' => true, + 'url' => true, + 'url_title' => true, + 'priority' => true, + 'timestamp' => true, + 'sound' => true, + 'retry' => true, + 'expire' => true, + 'callback' => true, + ); + + /** + * Sounds the api supports by default + * @see https://pushover.net/api#sounds + * @var array + */ + private $sounds = array( + 'pushover', 'bike', 'bugle', 'cashregister', 'classical', 'cosmic', 'falling', 'gamelan', 'incoming', + 'intermission', 'magic', 'mechanical', 'pianobar', 'siren', 'spacealarm', 'tugboat', 'alien', 'climb', + 'persistent', 'echo', 'updown', 'none', + ); + + /** + * @param string $token Pushover api token + * @param string|array $users Pushover user id or array of ids the message will be sent to + * @param string $title Title sent to the Pushover API + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + * @param Boolean $useSSL Whether to connect via SSL. Required when pushing messages to users that are not + * the pushover.net app owner. OpenSSL is required for this option. + * @param int $highPriorityLevel The minimum logging level at which this handler will start + * sending "high priority" requests to the Pushover API + * @param int $emergencyLevel The minimum logging level at which this handler will start + * sending "emergency" requests to the Pushover API + * @param int $retry The retry parameter specifies how often (in seconds) the Pushover servers will send the same notification to the user. + * @param int $expire The expire parameter specifies how many seconds your notification will continue to be retried for (every retry seconds). + */ + public function __construct($token, $users, $title = null, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $highPriorityLevel = Logger::CRITICAL, $emergencyLevel = Logger::EMERGENCY, $retry = 30, $expire = 25200) + { + $connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80'; + parent::__construct($connectionString, $level, $bubble); + + $this->token = $token; + $this->users = (array) $users; + $this->title = $title ?: gethostname(); + $this->highPriorityLevel = Logger::toMonologLevel($highPriorityLevel); + $this->emergencyLevel = Logger::toMonologLevel($emergencyLevel); + $this->retry = $retry; + $this->expire = $expire; + } + + protected function generateDataStream($record) + { + $content = $this->buildContent($record); + + return $this->buildHeader($content) . $content; + } + + private function buildContent($record) + { + // Pushover has a limit of 512 characters on title and message combined. + $maxMessageLength = 512 - strlen($this->title); + + $message = ($this->useFormattedMessage) ? $record['formatted'] : $record['message']; + $message = substr($message, 0, $maxMessageLength); + + $timestamp = $record['datetime']->getTimestamp(); + + $dataArray = array( + 'token' => $this->token, + 'user' => $this->user, + 'message' => $message, + 'title' => $this->title, + 'timestamp' => $timestamp, + ); + + if (isset($record['level']) && $record['level'] >= $this->emergencyLevel) { + $dataArray['priority'] = 2; + $dataArray['retry'] = $this->retry; + $dataArray['expire'] = $this->expire; + } elseif (isset($record['level']) && $record['level'] >= $this->highPriorityLevel) { + $dataArray['priority'] = 1; + } + + // First determine the available parameters + $context = array_intersect_key($record['context'], $this->parameterNames); + $extra = array_intersect_key($record['extra'], $this->parameterNames); + + // Least important info should be merged with subsequent info + $dataArray = array_merge($extra, $context, $dataArray); + + // Only pass sounds that are supported by the API + if (isset($dataArray['sound']) && !in_array($dataArray['sound'], $this->sounds)) { + unset($dataArray['sound']); + } + + return http_build_query($dataArray); + } + + private function buildHeader($content) + { + $header = "POST /1/messages.json HTTP/1.1\r\n"; + $header .= "Host: api.pushover.net\r\n"; + $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $header .= "Content-Length: " . strlen($content) . "\r\n"; + $header .= "\r\n"; + + return $header; + } + + protected function write(array $record) + { + foreach ($this->users as $user) { + $this->user = $user; + + parent::write($record); + $this->closeSocket(); + } + + $this->user = null; + } + + public function setHighPriorityLevel($value) + { + $this->highPriorityLevel = $value; + } + + public function setEmergencyLevel($value) + { + $this->emergencyLevel = $value; + } + + /** + * Use the formatted message? + * @param bool $value + */ + public function useFormattedMessage($value) + { + $this->useFormattedMessage = (boolean) $value; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php new file mode 100644 index 0000000..53a8b39 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php @@ -0,0 +1,232 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\Logger; +use Raven_Client; + +/** + * Handler to send messages to a Sentry (https://github.com/getsentry/sentry) server + * using raven-php (https://github.com/getsentry/raven-php) + * + * @author Marc Abramowitz + */ +class RavenHandler extends AbstractProcessingHandler +{ + /** + * Translates Monolog log levels to Raven log levels. + */ + private $logLevels = array( + Logger::DEBUG => Raven_Client::DEBUG, + Logger::INFO => Raven_Client::INFO, + Logger::NOTICE => Raven_Client::INFO, + Logger::WARNING => Raven_Client::WARNING, + Logger::ERROR => Raven_Client::ERROR, + Logger::CRITICAL => Raven_Client::FATAL, + Logger::ALERT => Raven_Client::FATAL, + Logger::EMERGENCY => Raven_Client::FATAL, + ); + + /** + * @var string should represent the current version of the calling + * software. Can be any string (git commit, version number) + */ + private $release; + + /** + * @var Raven_Client the client object that sends the message to the server + */ + protected $ravenClient; + + /** + * @var LineFormatter The formatter to use for the logs generated via handleBatch() + */ + protected $batchFormatter; + + /** + * @param Raven_Client $ravenClient + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct(Raven_Client $ravenClient, $level = Logger::DEBUG, $bubble = true) + { + parent::__construct($level, $bubble); + + $this->ravenClient = $ravenClient; + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + $level = $this->level; + + // filter records based on their level + $records = array_filter($records, function ($record) use ($level) { + return $record['level'] >= $level; + }); + + if (!$records) { + return; + } + + // the record with the highest severity is the "main" one + $record = array_reduce($records, function ($highest, $record) { + if ($record['level'] > $highest['level']) { + return $record; + } + + return $highest; + }); + + // the other ones are added as a context item + $logs = array(); + foreach ($records as $r) { + $logs[] = $this->processRecord($r); + } + + if ($logs) { + $record['context']['logs'] = (string) $this->getBatchFormatter()->formatBatch($logs); + } + + $this->handle($record); + } + + /** + * Sets the formatter for the logs generated by handleBatch(). + * + * @param FormatterInterface $formatter + */ + public function setBatchFormatter(FormatterInterface $formatter) + { + $this->batchFormatter = $formatter; + } + + /** + * Gets the formatter for the logs generated by handleBatch(). + * + * @return FormatterInterface + */ + public function getBatchFormatter() + { + if (!$this->batchFormatter) { + $this->batchFormatter = $this->getDefaultBatchFormatter(); + } + + return $this->batchFormatter; + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + $previousUserContext = false; + $options = array(); + $options['level'] = $this->logLevels[$record['level']]; + $options['tags'] = array(); + if (!empty($record['extra']['tags'])) { + $options['tags'] = array_merge($options['tags'], $record['extra']['tags']); + unset($record['extra']['tags']); + } + if (!empty($record['context']['tags'])) { + $options['tags'] = array_merge($options['tags'], $record['context']['tags']); + unset($record['context']['tags']); + } + if (!empty($record['context']['fingerprint'])) { + $options['fingerprint'] = $record['context']['fingerprint']; + unset($record['context']['fingerprint']); + } + if (!empty($record['context']['logger'])) { + $options['logger'] = $record['context']['logger']; + unset($record['context']['logger']); + } else { + $options['logger'] = $record['channel']; + } + foreach ($this->getExtraParameters() as $key) { + foreach (array('extra', 'context') as $source) { + if (!empty($record[$source][$key])) { + $options[$key] = $record[$source][$key]; + unset($record[$source][$key]); + } + } + } + if (!empty($record['context'])) { + $options['extra']['context'] = $record['context']; + if (!empty($record['context']['user'])) { + $previousUserContext = $this->ravenClient->context->user; + $this->ravenClient->user_context($record['context']['user']); + unset($options['extra']['context']['user']); + } + } + if (!empty($record['extra'])) { + $options['extra']['extra'] = $record['extra']; + } + + if (!empty($this->release) && !isset($options['release'])) { + $options['release'] = $this->release; + } + + if (isset($record['context']['exception']) && ($record['context']['exception'] instanceof \Exception || (PHP_VERSION_ID >= 70000 && $record['context']['exception'] instanceof \Throwable))) { + $options['extra']['message'] = $record['formatted']; + $this->ravenClient->captureException($record['context']['exception'], $options); + } else { + $this->ravenClient->captureMessage($record['formatted'], array(), $options); + } + + if ($previousUserContext !== false) { + $this->ravenClient->user_context($previousUserContext); + } + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new LineFormatter('[%channel%] %message%'); + } + + /** + * Gets the default formatter for the logs generated by handleBatch(). + * + * @return FormatterInterface + */ + protected function getDefaultBatchFormatter() + { + return new LineFormatter(); + } + + /** + * Gets extra parameters supported by Raven that can be found in "extra" and "context" + * + * @return array + */ + protected function getExtraParameters() + { + return array('checksum', 'release', 'event_id'); + } + + /** + * @param string $value + * @return self + */ + public function setRelease($value) + { + $this->release = $value; + + return $this; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php new file mode 100644 index 0000000..590f996 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php @@ -0,0 +1,97 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\Logger; + +/** + * Logs to a Redis key using rpush + * + * usage example: + * + * $log = new Logger('application'); + * $redis = new RedisHandler(new Predis\Client("tcp://localhost:6379"), "logs", "prod"); + * $log->pushHandler($redis); + * + * @author Thomas Tourlourat + */ +class RedisHandler extends AbstractProcessingHandler +{ + private $redisClient; + private $redisKey; + protected $capSize; + + /** + * @param \Predis\Client|\Redis $redis The redis instance + * @param string $key The key name to push records to + * @param int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * @param int $capSize Number of entries to limit list size to + */ + public function __construct($redis, $key, $level = Logger::DEBUG, $bubble = true, $capSize = false) + { + if (!(($redis instanceof \Predis\Client) || ($redis instanceof \Redis))) { + throw new \InvalidArgumentException('Predis\Client or Redis instance required'); + } + + $this->redisClient = $redis; + $this->redisKey = $key; + $this->capSize = $capSize; + + parent::__construct($level, $bubble); + } + + /** + * {@inheritDoc} + */ + protected function write(array $record) + { + if ($this->capSize) { + $this->writeCapped($record); + } else { + $this->redisClient->rpush($this->redisKey, $record["formatted"]); + } + } + + /** + * Write and cap the collection + * Writes the record to the redis list and caps its + * + * @param array $record associative record array + * @return void + */ + protected function writeCapped(array $record) + { + if ($this->redisClient instanceof \Redis) { + $this->redisClient->multi() + ->rpush($this->redisKey, $record["formatted"]) + ->ltrim($this->redisKey, -$this->capSize, -1) + ->exec(); + } else { + $redisKey = $this->redisKey; + $capSize = $this->capSize; + $this->redisClient->transaction(function ($tx) use ($record, $redisKey, $capSize) { + $tx->rpush($redisKey, $record["formatted"]); + $tx->ltrim($redisKey, -$capSize, -1); + }); + } + } + + /** + * {@inheritDoc} + */ + protected function getDefaultFormatter() + { + return new LineFormatter(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php new file mode 100644 index 0000000..6c8a3e3 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php @@ -0,0 +1,132 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use RollbarNotifier; +use Exception; +use Monolog\Logger; + +/** + * Sends errors to Rollbar + * + * If the context data contains a `payload` key, that is used as an array + * of payload options to RollbarNotifier's report_message/report_exception methods. + * + * Rollbar's context info will contain the context + extra keys from the log record + * merged, and then on top of that a few keys: + * + * - level (rollbar level name) + * - monolog_level (monolog level name, raw level, as rollbar only has 5 but monolog 8) + * - channel + * - datetime (unix timestamp) + * + * @author Paul Statezny + */ +class RollbarHandler extends AbstractProcessingHandler +{ + /** + * Rollbar notifier + * + * @var RollbarNotifier + */ + protected $rollbarNotifier; + + protected $levelMap = array( + Logger::DEBUG => 'debug', + Logger::INFO => 'info', + Logger::NOTICE => 'info', + Logger::WARNING => 'warning', + Logger::ERROR => 'error', + Logger::CRITICAL => 'critical', + Logger::ALERT => 'critical', + Logger::EMERGENCY => 'critical', + ); + + /** + * Records whether any log records have been added since the last flush of the rollbar notifier + * + * @var bool + */ + private $hasRecords = false; + + protected $initialized = false; + + /** + * @param RollbarNotifier $rollbarNotifier RollbarNotifier object constructed with valid token + * @param int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct(RollbarNotifier $rollbarNotifier, $level = Logger::ERROR, $bubble = true) + { + $this->rollbarNotifier = $rollbarNotifier; + + parent::__construct($level, $bubble); + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + if (!$this->initialized) { + // __destructor() doesn't get called on Fatal errors + register_shutdown_function(array($this, 'close')); + $this->initialized = true; + } + + $context = $record['context']; + $payload = array(); + if (isset($context['payload'])) { + $payload = $context['payload']; + unset($context['payload']); + } + $context = array_merge($context, $record['extra'], array( + 'level' => $this->levelMap[$record['level']], + 'monolog_level' => $record['level_name'], + 'channel' => $record['channel'], + 'datetime' => $record['datetime']->format('U'), + )); + + if (isset($context['exception']) && $context['exception'] instanceof Exception) { + $payload['level'] = $context['level']; + $exception = $context['exception']; + unset($context['exception']); + + $this->rollbarNotifier->report_exception($exception, $context, $payload); + } else { + $this->rollbarNotifier->report_message( + $record['message'], + $context['level'], + $context, + $payload + ); + } + + $this->hasRecords = true; + } + + public function flush() + { + if ($this->hasRecords) { + $this->rollbarNotifier->flush(); + $this->hasRecords = false; + } + } + + /** + * {@inheritdoc} + */ + public function close() + { + $this->flush(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php new file mode 100644 index 0000000..3b60b3d --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php @@ -0,0 +1,178 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Stores logs to files that are rotated every day and a limited number of files are kept. + * + * This rotation is only intended to be used as a workaround. Using logrotate to + * handle the rotation is strongly encouraged when you can use it. + * + * @author Christophe Coevoet + * @author Jordi Boggiano + */ +class RotatingFileHandler extends StreamHandler +{ + const FILE_PER_DAY = 'Y-m-d'; + const FILE_PER_MONTH = 'Y-m'; + const FILE_PER_YEAR = 'Y'; + + protected $filename; + protected $maxFiles; + protected $mustRotate; + protected $nextRotation; + protected $filenameFormat; + protected $dateFormat; + + /** + * @param string $filename + * @param int $maxFiles The maximal amount of files to keep (0 means unlimited) + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) + * @param Boolean $useLocking Try to lock log file before doing any writes + */ + public function __construct($filename, $maxFiles = 0, $level = Logger::DEBUG, $bubble = true, $filePermission = null, $useLocking = false) + { + $this->filename = $filename; + $this->maxFiles = (int) $maxFiles; + $this->nextRotation = new \DateTime('tomorrow'); + $this->filenameFormat = '{filename}-{date}'; + $this->dateFormat = 'Y-m-d'; + + parent::__construct($this->getTimedFilename(), $level, $bubble, $filePermission, $useLocking); + } + + /** + * {@inheritdoc} + */ + public function close() + { + parent::close(); + + if (true === $this->mustRotate) { + $this->rotate(); + } + } + + public function setFilenameFormat($filenameFormat, $dateFormat) + { + if (!preg_match('{^Y(([/_.-]?m)([/_.-]?d)?)?$}', $dateFormat)) { + trigger_error( + 'Invalid date format - format must be one of '. + 'RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), RotatingFileHandler::FILE_PER_MONTH ("Y-m") '. + 'or RotatingFileHandler::FILE_PER_YEAR ("Y"), or you can set one of the '. + 'date formats using slashes, underscores and/or dots instead of dashes.', + E_USER_DEPRECATED + ); + } + if (substr_count($filenameFormat, '{date}') === 0) { + trigger_error( + 'Invalid filename format - format should contain at least `{date}`, because otherwise rotating is impossible.', + E_USER_DEPRECATED + ); + } + $this->filenameFormat = $filenameFormat; + $this->dateFormat = $dateFormat; + $this->url = $this->getTimedFilename(); + $this->close(); + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + // on the first record written, if the log is new, we should rotate (once per day) + if (null === $this->mustRotate) { + $this->mustRotate = !file_exists($this->url); + } + + if ($this->nextRotation < $record['datetime']) { + $this->mustRotate = true; + $this->close(); + } + + parent::write($record); + } + + /** + * Rotates the files. + */ + protected function rotate() + { + // update filename + $this->url = $this->getTimedFilename(); + $this->nextRotation = new \DateTime('tomorrow'); + + // skip GC of old logs if files are unlimited + if (0 === $this->maxFiles) { + return; + } + + $logFiles = glob($this->getGlobPattern()); + if ($this->maxFiles >= count($logFiles)) { + // no files to remove + return; + } + + // Sorting the files by name to remove the older ones + usort($logFiles, function ($a, $b) { + return strcmp($b, $a); + }); + + foreach (array_slice($logFiles, $this->maxFiles) as $file) { + if (is_writable($file)) { + // suppress errors here as unlink() might fail if two processes + // are cleaning up/rotating at the same time + set_error_handler(function ($errno, $errstr, $errfile, $errline) {}); + unlink($file); + restore_error_handler(); + } + } + + $this->mustRotate = false; + } + + protected function getTimedFilename() + { + $fileInfo = pathinfo($this->filename); + $timedFilename = str_replace( + array('{filename}', '{date}'), + array($fileInfo['filename'], date($this->dateFormat)), + $fileInfo['dirname'] . '/' . $this->filenameFormat + ); + + if (!empty($fileInfo['extension'])) { + $timedFilename .= '.'.$fileInfo['extension']; + } + + return $timedFilename; + } + + protected function getGlobPattern() + { + $fileInfo = pathinfo($this->filename); + $glob = str_replace( + array('{filename}', '{date}'), + array($fileInfo['filename'], '*'), + $fileInfo['dirname'] . '/' . $this->filenameFormat + ); + if (!empty($fileInfo['extension'])) { + $glob .= '.'.$fileInfo['extension']; + } + + return $glob; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php new file mode 100644 index 0000000..9509ae3 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +/** + * Sampling handler + * + * A sampled event stream can be useful for logging high frequency events in + * a production environment where you only need an idea of what is happening + * and are not concerned with capturing every occurrence. Since the decision to + * handle or not handle a particular event is determined randomly, the + * resulting sampled log is not guaranteed to contain 1/N of the events that + * occurred in the application, but based on the Law of large numbers, it will + * tend to be close to this ratio with a large number of attempts. + * + * @author Bryan Davis + * @author Kunal Mehta + */ +class SamplingHandler extends AbstractHandler +{ + /** + * @var callable|HandlerInterface $handler + */ + protected $handler; + + /** + * @var int $factor + */ + protected $factor; + + /** + * @param callable|HandlerInterface $handler Handler or factory callable($record, $fingersCrossedHandler). + * @param int $factor Sample factor + */ + public function __construct($handler, $factor) + { + parent::__construct(); + $this->handler = $handler; + $this->factor = $factor; + + if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) { + throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object"); + } + } + + public function isHandling(array $record) + { + return $this->handler->isHandling($record); + } + + public function handle(array $record) + { + if ($this->isHandling($record) && mt_rand(1, $this->factor) === 1) { + // The same logic as in FingersCrossedHandler + if (!$this->handler instanceof HandlerInterface) { + $this->handler = call_user_func($this->handler, $record, $this); + if (!$this->handler instanceof HandlerInterface) { + throw new \RuntimeException("The factory callable should return a HandlerInterface"); + } + } + + if ($this->processors) { + foreach ($this->processors as $processor) { + $record = call_user_func($processor, $record); + } + } + + $this->handler->handle($record); + } + + return false === $this->bubble; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php b/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php new file mode 100644 index 0000000..38bc838 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php @@ -0,0 +1,294 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\Slack; + +use Monolog\Logger; +use Monolog\Formatter\NormalizerFormatter; +use Monolog\Formatter\FormatterInterface; + +/** + * Slack record utility helping to log to Slack webhooks or API. + * + * @author Greg Kedzierski + * @author Haralan Dobrev + * @see https://api.slack.com/incoming-webhooks + * @see https://api.slack.com/docs/message-attachments + */ +class SlackRecord +{ + const COLOR_DANGER = 'danger'; + + const COLOR_WARNING = 'warning'; + + const COLOR_GOOD = 'good'; + + const COLOR_DEFAULT = '#e3e4e6'; + + /** + * Slack channel (encoded ID or name) + * @var string|null + */ + private $channel; + + /** + * Name of a bot + * @var string|null + */ + private $username; + + /** + * User icon e.g. 'ghost', 'http://example.com/user.png' + * @var string + */ + private $userIcon; + + /** + * Whether the message should be added to Slack as attachment (plain text otherwise) + * @var bool + */ + private $useAttachment; + + /** + * Whether the the context/extra messages added to Slack as attachments are in a short style + * @var bool + */ + private $useShortAttachment; + + /** + * Whether the attachment should include context and extra data + * @var bool + */ + private $includeContextAndExtra; + + /** + * Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] + * @var array + */ + private $excludeFields; + + /** + * @var FormatterInterface + */ + private $formatter; + + /** + * @var NormalizerFormatter + */ + private $normalizerFormatter; + + public function __construct($channel = null, $username = null, $useAttachment = true, $userIcon = null, $useShortAttachment = false, $includeContextAndExtra = false, array $excludeFields = array(), FormatterInterface $formatter = null) + { + $this->channel = $channel; + $this->username = $username; + $this->userIcon = trim($userIcon, ':'); + $this->useAttachment = $useAttachment; + $this->useShortAttachment = $useShortAttachment; + $this->includeContextAndExtra = $includeContextAndExtra; + $this->excludeFields = $excludeFields; + $this->formatter = $formatter; + + if ($this->includeContextAndExtra) { + $this->normalizerFormatter = new NormalizerFormatter(); + } + } + + public function getSlackData(array $record) + { + $dataArray = array(); + $record = $this->excludeFields($record); + + if ($this->username) { + $dataArray['username'] = $this->username; + } + + if ($this->channel) { + $dataArray['channel'] = $this->channel; + } + + if ($this->formatter && !$this->useAttachment) { + $message = $this->formatter->format($record); + } else { + $message = $record['message']; + } + + if ($this->useAttachment) { + $attachment = array( + 'fallback' => $message, + 'text' => $message, + 'color' => $this->getAttachmentColor($record['level']), + 'fields' => array(), + 'mrkdwn_in' => array('fields'), + 'ts' => $record['datetime']->getTimestamp() + ); + + if ($this->useShortAttachment) { + $attachment['title'] = $record['level_name']; + } else { + $attachment['title'] = 'Message'; + $attachment['fields'][] = $this->generateAttachmentField('Level', $record['level_name']); + } + + + if ($this->includeContextAndExtra) { + foreach (array('extra', 'context') as $key) { + if (empty($record[$key])) { + continue; + } + + if ($this->useShortAttachment) { + $attachment['fields'][] = $this->generateAttachmentField( + ucfirst($key), + $record[$key] + ); + } else { + // Add all extra fields as individual fields in attachment + $attachment['fields'] = array_merge( + $attachment['fields'], + $this->generateAttachmentFields($record[$key]) + ); + } + } + } + + $dataArray['attachments'] = array($attachment); + } else { + $dataArray['text'] = $message; + } + + if ($this->userIcon) { + if (filter_var($this->userIcon, FILTER_VALIDATE_URL)) { + $dataArray['icon_url'] = $this->userIcon; + } else { + $dataArray['icon_emoji'] = ":{$this->userIcon}:"; + } + } + + return $dataArray; + } + + /** + * Returned a Slack message attachment color associated with + * provided level. + * + * @param int $level + * @return string + */ + public function getAttachmentColor($level) + { + switch (true) { + case $level >= Logger::ERROR: + return self::COLOR_DANGER; + case $level >= Logger::WARNING: + return self::COLOR_WARNING; + case $level >= Logger::INFO: + return self::COLOR_GOOD; + default: + return self::COLOR_DEFAULT; + } + } + + /** + * Stringifies an array of key/value pairs to be used in attachment fields + * + * @param array $fields + * + * @return string + */ + public function stringify($fields) + { + $normalized = $this->normalizerFormatter->format($fields); + $prettyPrintFlag = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 128; + + $hasSecondDimension = count(array_filter($normalized, 'is_array')); + $hasNonNumericKeys = !count(array_filter(array_keys($normalized), 'is_numeric')); + + return $hasSecondDimension || $hasNonNumericKeys + ? json_encode($normalized, $prettyPrintFlag) + : json_encode($normalized); + } + + /** + * Sets the formatter + * + * @param FormatterInterface $formatter + */ + public function setFormatter(FormatterInterface $formatter) + { + $this->formatter = $formatter; + } + + /** + * Generates attachment field + * + * @param string $title + * @param string|array $value\ + * + * @return array + */ + private function generateAttachmentField($title, $value) + { + $value = is_array($value) + ? sprintf('```%s```', $this->stringify($value)) + : $value; + + return array( + 'title' => $title, + 'value' => $value, + 'short' => false + ); + } + + /** + * Generates a collection of attachment fields from array + * + * @param array $data + * + * @return array + */ + private function generateAttachmentFields(array $data) + { + $fields = array(); + foreach ($data as $key => $value) { + $fields[] = $this->generateAttachmentField($key, $value); + } + + return $fields; + } + + /** + * Get a copy of record with fields excluded according to $this->excludeFields + * + * @param array $record + * + * @return array + */ + private function excludeFields(array $record) + { + foreach ($this->excludeFields as $field) { + $keys = explode('.', $field); + $node = &$record; + $lastKey = end($keys); + foreach ($keys as $key) { + if (!isset($node[$key])) { + break; + } + if ($lastKey === $key) { + unset($node[$key]); + break; + } + $node = &$node[$key]; + } + } + + return $record; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php new file mode 100644 index 0000000..3ac4d83 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php @@ -0,0 +1,215 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Logger; +use Monolog\Handler\Slack\SlackRecord; + +/** + * Sends notifications through Slack API + * + * @author Greg Kedzierski + * @see https://api.slack.com/ + */ +class SlackHandler extends SocketHandler +{ + /** + * Slack API token + * @var string + */ + private $token; + + /** + * Instance of the SlackRecord util class preparing data for Slack API. + * @var SlackRecord + */ + private $slackRecord; + + /** + * @param string $token Slack API token + * @param string $channel Slack channel (encoded ID or name) + * @param string|null $username Name of a bot + * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise) + * @param string|null $iconEmoji The emoji name to use (or null) + * @param int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * @param bool $useShortAttachment Whether the the context/extra messages added to Slack as attachments are in a short style + * @param bool $includeContextAndExtra Whether the attachment should include context and extra data + * @param array $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] + * @throws MissingExtensionException If no OpenSSL PHP extension configured + */ + public function __construct($token, $channel, $username = null, $useAttachment = true, $iconEmoji = null, $level = Logger::CRITICAL, $bubble = true, $useShortAttachment = false, $includeContextAndExtra = false, array $excludeFields = array()) + { + if (!extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP extension is required to use the SlackHandler'); + } + + parent::__construct('ssl://slack.com:443', $level, $bubble); + + $this->slackRecord = new SlackRecord( + $channel, + $username, + $useAttachment, + $iconEmoji, + $useShortAttachment, + $includeContextAndExtra, + $excludeFields, + $this->formatter + ); + + $this->token = $token; + } + + public function getSlackRecord() + { + return $this->slackRecord; + } + + /** + * {@inheritdoc} + * + * @param array $record + * @return string + */ + protected function generateDataStream($record) + { + $content = $this->buildContent($record); + + return $this->buildHeader($content) . $content; + } + + /** + * Builds the body of API call + * + * @param array $record + * @return string + */ + private function buildContent($record) + { + $dataArray = $this->prepareContentData($record); + + return http_build_query($dataArray); + } + + /** + * Prepares content data + * + * @param array $record + * @return array + */ + protected function prepareContentData($record) + { + $dataArray = $this->slackRecord->getSlackData($record); + $dataArray['token'] = $this->token; + + if (!empty($dataArray['attachments'])) { + $dataArray['attachments'] = json_encode($dataArray['attachments']); + } + + return $dataArray; + } + + /** + * Builds the header of the API Call + * + * @param string $content + * @return string + */ + private function buildHeader($content) + { + $header = "POST /api/chat.postMessage HTTP/1.1\r\n"; + $header .= "Host: slack.com\r\n"; + $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $header .= "Content-Length: " . strlen($content) . "\r\n"; + $header .= "\r\n"; + + return $header; + } + + /** + * {@inheritdoc} + * + * @param array $record + */ + protected function write(array $record) + { + parent::write($record); + $this->finalizeWrite(); + } + + /** + * Finalizes the request by reading some bytes and then closing the socket + * + * If we do not read some but close the socket too early, slack sometimes + * drops the request entirely. + */ + protected function finalizeWrite() + { + $res = $this->getResource(); + if (is_resource($res)) { + @fread($res, 2048); + } + $this->closeSocket(); + } + + /** + * Returned a Slack message attachment color associated with + * provided level. + * + * @param int $level + * @return string + * @deprecated Use underlying SlackRecord instead + */ + protected function getAttachmentColor($level) + { + trigger_error( + 'SlackHandler::getAttachmentColor() is deprecated. Use underlying SlackRecord instead.', + E_USER_DEPRECATED + ); + + return $this->slackRecord->getAttachmentColor($level); + } + + /** + * Stringifies an array of key/value pairs to be used in attachment fields + * + * @param array $fields + * @return string + * @deprecated Use underlying SlackRecord instead + */ + protected function stringify($fields) + { + trigger_error( + 'SlackHandler::stringify() is deprecated. Use underlying SlackRecord instead.', + E_USER_DEPRECATED + ); + + return $this->slackRecord->stringify($fields); + } + + public function setFormatter(FormatterInterface $formatter) + { + parent::setFormatter($formatter); + $this->slackRecord->setFormatter($formatter); + + return $this; + } + + public function getFormatter() + { + $formatter = parent::getFormatter(); + $this->slackRecord->setFormatter($formatter); + + return $formatter; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php new file mode 100644 index 0000000..9a1bbb4 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php @@ -0,0 +1,115 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Logger; +use Monolog\Handler\Slack\SlackRecord; + +/** + * Sends notifications through Slack Webhooks + * + * @author Haralan Dobrev + * @see https://api.slack.com/incoming-webhooks + */ +class SlackWebhookHandler extends AbstractProcessingHandler +{ + /** + * Slack Webhook token + * @var string + */ + private $webhookUrl; + + /** + * Instance of the SlackRecord util class preparing data for Slack API. + * @var SlackRecord + */ + private $slackRecord; + + /** + * @param string $webhookUrl Slack Webhook URL + * @param string|null $channel Slack channel (encoded ID or name) + * @param string|null $username Name of a bot + * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise) + * @param string|null $iconEmoji The emoji name to use (or null) + * @param bool $useShortAttachment Whether the the context/extra messages added to Slack as attachments are in a short style + * @param bool $includeContextAndExtra Whether the attachment should include context and extra data + * @param int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * @param array $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] + */ + public function __construct($webhookUrl, $channel = null, $username = null, $useAttachment = true, $iconEmoji = null, $useShortAttachment = false, $includeContextAndExtra = false, $level = Logger::CRITICAL, $bubble = true, array $excludeFields = array()) + { + parent::__construct($level, $bubble); + + $this->webhookUrl = $webhookUrl; + + $this->slackRecord = new SlackRecord( + $channel, + $username, + $useAttachment, + $iconEmoji, + $useShortAttachment, + $includeContextAndExtra, + $excludeFields, + $this->formatter + ); + } + + public function getSlackRecord() + { + return $this->slackRecord; + } + + /** + * {@inheritdoc} + * + * @param array $record + */ + protected function write(array $record) + { + $postData = $this->slackRecord->getSlackData($record); + $postString = json_encode($postData); + + $ch = curl_init(); + $options = array( + CURLOPT_URL => $this->webhookUrl, + CURLOPT_POST => true, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HTTPHEADER => array('Content-type: application/json'), + CURLOPT_POSTFIELDS => $postString + ); + if (defined('CURLOPT_SAFE_UPLOAD')) { + $options[CURLOPT_SAFE_UPLOAD] = true; + } + + curl_setopt_array($ch, $options); + + Curl\Util::execute($ch); + } + + public function setFormatter(FormatterInterface $formatter) + { + parent::setFormatter($formatter); + $this->slackRecord->setFormatter($formatter); + + return $this; + } + + public function getFormatter() + { + $formatter = parent::getFormatter(); + $this->slackRecord->setFormatter($formatter); + + return $formatter; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php new file mode 100644 index 0000000..baead52 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php @@ -0,0 +1,80 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Sends notifications through Slack's Slackbot + * + * @author Haralan Dobrev + * @see https://slack.com/apps/A0F81R8ET-slackbot + */ +class SlackbotHandler extends AbstractProcessingHandler +{ + /** + * The slug of the Slack team + * @var string + */ + private $slackTeam; + + /** + * Slackbot token + * @var string + */ + private $token; + + /** + * Slack channel name + * @var string + */ + private $channel; + + /** + * @param string $slackTeam Slack team slug + * @param string $token Slackbot token + * @param string $channel Slack channel (encoded ID or name) + * @param int $level The minimum logging level at which this handler will be triggered + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($slackTeam, $token, $channel, $level = Logger::CRITICAL, $bubble = true) + { + parent::__construct($level, $bubble); + + $this->slackTeam = $slackTeam; + $this->token = $token; + $this->channel = $channel; + } + + /** + * {@inheritdoc} + * + * @param array $record + */ + protected function write(array $record) + { + $slackbotUrl = sprintf( + 'https://%s.slack.com/services/hooks/slackbot?token=%s&channel=%s', + $this->slackTeam, + $this->token, + $this->channel + ); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $slackbotUrl); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $record['message']); + + Curl\Util::execute($ch); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php new file mode 100644 index 0000000..7a61bf4 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php @@ -0,0 +1,346 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Stores to any socket - uses fsockopen() or pfsockopen(). + * + * @author Pablo de Leon Belloc + * @see http://php.net/manual/en/function.fsockopen.php + */ +class SocketHandler extends AbstractProcessingHandler +{ + private $connectionString; + private $connectionTimeout; + private $resource; + private $timeout = 0; + private $writingTimeout = 10; + private $lastSentBytes = null; + private $persistent = false; + private $errno; + private $errstr; + private $lastWritingAt; + + /** + * @param string $connectionString Socket connection string + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct($connectionString, $level = Logger::DEBUG, $bubble = true) + { + parent::__construct($level, $bubble); + $this->connectionString = $connectionString; + $this->connectionTimeout = (float) ini_get('default_socket_timeout'); + } + + /** + * Connect (if necessary) and write to the socket + * + * @param array $record + * + * @throws \UnexpectedValueException + * @throws \RuntimeException + */ + protected function write(array $record) + { + $this->connectIfNotConnected(); + $data = $this->generateDataStream($record); + $this->writeToSocket($data); + } + + /** + * We will not close a PersistentSocket instance so it can be reused in other requests. + */ + public function close() + { + if (!$this->isPersistent()) { + $this->closeSocket(); + } + } + + /** + * Close socket, if open + */ + public function closeSocket() + { + if (is_resource($this->resource)) { + fclose($this->resource); + $this->resource = null; + } + } + + /** + * Set socket connection to nbe persistent. It only has effect before the connection is initiated. + * + * @param bool $persistent + */ + public function setPersistent($persistent) + { + $this->persistent = (boolean) $persistent; + } + + /** + * Set connection timeout. Only has effect before we connect. + * + * @param float $seconds + * + * @see http://php.net/manual/en/function.fsockopen.php + */ + public function setConnectionTimeout($seconds) + { + $this->validateTimeout($seconds); + $this->connectionTimeout = (float) $seconds; + } + + /** + * Set write timeout. Only has effect before we connect. + * + * @param float $seconds + * + * @see http://php.net/manual/en/function.stream-set-timeout.php + */ + public function setTimeout($seconds) + { + $this->validateTimeout($seconds); + $this->timeout = (float) $seconds; + } + + /** + * Set writing timeout. Only has effect during connection in the writing cycle. + * + * @param float $seconds 0 for no timeout + */ + public function setWritingTimeout($seconds) + { + $this->validateTimeout($seconds); + $this->writingTimeout = (float) $seconds; + } + + /** + * Get current connection string + * + * @return string + */ + public function getConnectionString() + { + return $this->connectionString; + } + + /** + * Get persistent setting + * + * @return bool + */ + public function isPersistent() + { + return $this->persistent; + } + + /** + * Get current connection timeout setting + * + * @return float + */ + public function getConnectionTimeout() + { + return $this->connectionTimeout; + } + + /** + * Get current in-transfer timeout + * + * @return float + */ + public function getTimeout() + { + return $this->timeout; + } + + /** + * Get current local writing timeout + * + * @return float + */ + public function getWritingTimeout() + { + return $this->writingTimeout; + } + + /** + * Check to see if the socket is currently available. + * + * UDP might appear to be connected but might fail when writing. See http://php.net/fsockopen for details. + * + * @return bool + */ + public function isConnected() + { + return is_resource($this->resource) + && !feof($this->resource); // on TCP - other party can close connection. + } + + /** + * Wrapper to allow mocking + */ + protected function pfsockopen() + { + return @pfsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout); + } + + /** + * Wrapper to allow mocking + */ + protected function fsockopen() + { + return @fsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout); + } + + /** + * Wrapper to allow mocking + * + * @see http://php.net/manual/en/function.stream-set-timeout.php + */ + protected function streamSetTimeout() + { + $seconds = floor($this->timeout); + $microseconds = round(($this->timeout - $seconds) * 1e6); + + return stream_set_timeout($this->resource, $seconds, $microseconds); + } + + /** + * Wrapper to allow mocking + */ + protected function fwrite($data) + { + return @fwrite($this->resource, $data); + } + + /** + * Wrapper to allow mocking + */ + protected function streamGetMetadata() + { + return stream_get_meta_data($this->resource); + } + + private function validateTimeout($value) + { + $ok = filter_var($value, FILTER_VALIDATE_FLOAT); + if ($ok === false || $value < 0) { + throw new \InvalidArgumentException("Timeout must be 0 or a positive float (got $value)"); + } + } + + private function connectIfNotConnected() + { + if ($this->isConnected()) { + return; + } + $this->connect(); + } + + protected function generateDataStream($record) + { + return (string) $record['formatted']; + } + + /** + * @return resource|null + */ + protected function getResource() + { + return $this->resource; + } + + private function connect() + { + $this->createSocketResource(); + $this->setSocketTimeout(); + } + + private function createSocketResource() + { + if ($this->isPersistent()) { + $resource = $this->pfsockopen(); + } else { + $resource = $this->fsockopen(); + } + if (!$resource) { + throw new \UnexpectedValueException("Failed connecting to $this->connectionString ($this->errno: $this->errstr)"); + } + $this->resource = $resource; + } + + private function setSocketTimeout() + { + if (!$this->streamSetTimeout()) { + throw new \UnexpectedValueException("Failed setting timeout with stream_set_timeout()"); + } + } + + private function writeToSocket($data) + { + $length = strlen($data); + $sent = 0; + $this->lastSentBytes = $sent; + while ($this->isConnected() && $sent < $length) { + if (0 == $sent) { + $chunk = $this->fwrite($data); + } else { + $chunk = $this->fwrite(substr($data, $sent)); + } + if ($chunk === false) { + throw new \RuntimeException("Could not write to socket"); + } + $sent += $chunk; + $socketInfo = $this->streamGetMetadata(); + if ($socketInfo['timed_out']) { + throw new \RuntimeException("Write timed-out"); + } + + if ($this->writingIsTimedOut($sent)) { + throw new \RuntimeException("Write timed-out, no data sent for `{$this->writingTimeout}` seconds, probably we got disconnected (sent $sent of $length)"); + } + } + if (!$this->isConnected() && $sent < $length) { + throw new \RuntimeException("End-of-file reached, probably we got disconnected (sent $sent of $length)"); + } + } + + private function writingIsTimedOut($sent) + { + $writingTimeout = (int) floor($this->writingTimeout); + if (0 === $writingTimeout) { + return false; + } + + if ($sent !== $this->lastSentBytes) { + $this->lastWritingAt = time(); + $this->lastSentBytes = $sent; + + return false; + } else { + usleep(100); + } + + if ((time() - $this->lastWritingAt) >= $writingTimeout) { + $this->closeSocket(); + + return true; + } + + return false; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php new file mode 100644 index 0000000..09a1573 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php @@ -0,0 +1,176 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Stores to any stream resource + * + * Can be used to store into php://stderr, remote and local files, etc. + * + * @author Jordi Boggiano + */ +class StreamHandler extends AbstractProcessingHandler +{ + protected $stream; + protected $url; + private $errorMessage; + protected $filePermission; + protected $useLocking; + private $dirCreated; + + /** + * @param resource|string $stream + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) + * @param Boolean $useLocking Try to lock log file before doing any writes + * + * @throws \Exception If a missing directory is not buildable + * @throws \InvalidArgumentException If stream is not a resource or string + */ + public function __construct($stream, $level = Logger::DEBUG, $bubble = true, $filePermission = null, $useLocking = false) + { + parent::__construct($level, $bubble); + if (is_resource($stream)) { + $this->stream = $stream; + } elseif (is_string($stream)) { + $this->url = $stream; + } else { + throw new \InvalidArgumentException('A stream must either be a resource or a string.'); + } + + $this->filePermission = $filePermission; + $this->useLocking = $useLocking; + } + + /** + * {@inheritdoc} + */ + public function close() + { + if ($this->url && is_resource($this->stream)) { + fclose($this->stream); + } + $this->stream = null; + } + + /** + * Return the currently active stream if it is open + * + * @return resource|null + */ + public function getStream() + { + return $this->stream; + } + + /** + * Return the stream URL if it was configured with a URL and not an active resource + * + * @return string|null + */ + public function getUrl() + { + return $this->url; + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + if (!is_resource($this->stream)) { + if (null === $this->url || '' === $this->url) { + throw new \LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().'); + } + $this->createDir(); + $this->errorMessage = null; + set_error_handler(array($this, 'customErrorHandler')); + $this->stream = fopen($this->url, 'a'); + if ($this->filePermission !== null) { + @chmod($this->url, $this->filePermission); + } + restore_error_handler(); + if (!is_resource($this->stream)) { + $this->stream = null; + throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened: '.$this->errorMessage, $this->url)); + } + } + + if ($this->useLocking) { + // ignoring errors here, there's not much we can do about them + flock($this->stream, LOCK_EX); + } + + $this->streamWrite($this->stream, $record); + + if ($this->useLocking) { + flock($this->stream, LOCK_UN); + } + } + + /** + * Write to stream + * @param resource $stream + * @param array $record + */ + protected function streamWrite($stream, array $record) + { + fwrite($stream, (string) $record['formatted']); + } + + private function customErrorHandler($code, $msg) + { + $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg); + } + + /** + * @param string $stream + * + * @return null|string + */ + private function getDirFromStream($stream) + { + $pos = strpos($stream, '://'); + if ($pos === false) { + return dirname($stream); + } + + if ('file://' === substr($stream, 0, 7)) { + return dirname(substr($stream, 7)); + } + + return; + } + + private function createDir() + { + // Do not try to create dir if it has already been tried. + if ($this->dirCreated) { + return; + } + + $dir = $this->getDirFromStream($this->url); + if (null !== $dir && !is_dir($dir)) { + $this->errorMessage = null; + set_error_handler(array($this, 'customErrorHandler')); + $status = mkdir($dir, 0777, true); + restore_error_handler(); + if (false === $status) { + throw new \UnexpectedValueException(sprintf('There is no existing directory at "%s" and its not buildable: '.$this->errorMessage, $dir)); + } + } + $this->dirCreated = true; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php new file mode 100644 index 0000000..72f44a5 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php @@ -0,0 +1,99 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Formatter\LineFormatter; +use Swift; + +/** + * SwiftMailerHandler uses Swift_Mailer to send the emails + * + * @author Gyula Sallai + */ +class SwiftMailerHandler extends MailHandler +{ + protected $mailer; + private $messageTemplate; + + /** + * @param \Swift_Mailer $mailer The mailer to use + * @param callable|\Swift_Message $message An example message for real messages, only the body will be replaced + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct(\Swift_Mailer $mailer, $message, $level = Logger::ERROR, $bubble = true) + { + parent::__construct($level, $bubble); + + $this->mailer = $mailer; + $this->messageTemplate = $message; + } + + /** + * {@inheritdoc} + */ + protected function send($content, array $records) + { + $this->mailer->send($this->buildMessage($content, $records)); + } + + /** + * Creates instance of Swift_Message to be sent + * + * @param string $content formatted email body to be sent + * @param array $records Log records that formed the content + * @return \Swift_Message + */ + protected function buildMessage($content, array $records) + { + $message = null; + if ($this->messageTemplate instanceof \Swift_Message) { + $message = clone $this->messageTemplate; + $message->generateId(); + } elseif (is_callable($this->messageTemplate)) { + $message = call_user_func($this->messageTemplate, $content, $records); + } + + if (!$message instanceof \Swift_Message) { + throw new \InvalidArgumentException('Could not resolve message as instance of Swift_Message or a callable returning it'); + } + + if ($records) { + $subjectFormatter = new LineFormatter($message->getSubject()); + $message->setSubject($subjectFormatter->format($this->getHighestRecord($records))); + } + + $message->setBody($content); + if (version_compare(Swift::VERSION, '6.0.0', '>=')) { + $message->setDate(new \DateTimeImmutable()); + } else { + $message->setDate(time()); + } + + return $message; + } + + /** + * BC getter, to be removed in 2.0 + */ + public function __get($name) + { + if ($name === 'message') { + trigger_error('SwiftMailerHandler->message is deprecated, use ->buildMessage() instead to retrieve the message', E_USER_DEPRECATED); + + return $this->buildMessage(null, array()); + } + + throw new \InvalidArgumentException('Invalid property '.$name); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php new file mode 100644 index 0000000..376bc3b --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Logs to syslog service. + * + * usage example: + * + * $log = new Logger('application'); + * $syslog = new SyslogHandler('myfacility', 'local6'); + * $formatter = new LineFormatter("%channel%.%level_name%: %message% %extra%"); + * $syslog->setFormatter($formatter); + * $log->pushHandler($syslog); + * + * @author Sven Paulus + */ +class SyslogHandler extends AbstractSyslogHandler +{ + protected $ident; + protected $logopts; + + /** + * @param string $ident + * @param mixed $facility + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + * @param int $logopts Option flags for the openlog() call, defaults to LOG_PID + */ + public function __construct($ident, $facility = LOG_USER, $level = Logger::DEBUG, $bubble = true, $logopts = LOG_PID) + { + parent::__construct($facility, $level, $bubble); + + $this->ident = $ident; + $this->logopts = $logopts; + } + + /** + * {@inheritdoc} + */ + public function close() + { + closelog(); + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + if (!openlog($this->ident, $this->logopts, $this->facility)) { + throw new \LogicException('Can\'t open syslog for ident "'.$this->ident.'" and facility "'.$this->facility.'"'); + } + syslog($this->logLevels[$record['level']], (string) $record['formatted']); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php b/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php new file mode 100644 index 0000000..3bff085 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\SyslogUdp; + +class UdpSocket +{ + const DATAGRAM_MAX_LENGTH = 65023; + + protected $ip; + protected $port; + protected $socket; + + public function __construct($ip, $port = 514) + { + $this->ip = $ip; + $this->port = $port; + $this->socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + } + + public function write($line, $header = "") + { + $this->send($this->assembleMessage($line, $header)); + } + + public function close() + { + if (is_resource($this->socket)) { + socket_close($this->socket); + $this->socket = null; + } + } + + protected function send($chunk) + { + if (!is_resource($this->socket)) { + throw new \LogicException('The UdpSocket to '.$this->ip.':'.$this->port.' has been closed and can not be written to anymore'); + } + socket_sendto($this->socket, $chunk, strlen($chunk), $flags = 0, $this->ip, $this->port); + } + + protected function assembleMessage($line, $header) + { + $chunkSize = self::DATAGRAM_MAX_LENGTH - strlen($header); + + return $header . substr($line, 0, $chunkSize); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php new file mode 100644 index 0000000..4718711 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php @@ -0,0 +1,103 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Handler\SyslogUdp\UdpSocket; + +/** + * A Handler for logging to a remote syslogd server. + * + * @author Jesper Skovgaard Nielsen + */ +class SyslogUdpHandler extends AbstractSyslogHandler +{ + protected $socket; + protected $ident; + + /** + * @param string $host + * @param int $port + * @param mixed $facility + * @param int $level The minimum logging level at which this handler will be triggered + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + * @param string $ident Program name or tag for each log message. + */ + public function __construct($host, $port = 514, $facility = LOG_USER, $level = Logger::DEBUG, $bubble = true, $ident = 'php') + { + parent::__construct($facility, $level, $bubble); + + $this->ident = $ident; + + $this->socket = new UdpSocket($host, $port ?: 514); + } + + protected function write(array $record) + { + $lines = $this->splitMessageIntoLines($record['formatted']); + + $header = $this->makeCommonSyslogHeader($this->logLevels[$record['level']]); + + foreach ($lines as $line) { + $this->socket->write($line, $header); + } + } + + public function close() + { + $this->socket->close(); + } + + private function splitMessageIntoLines($message) + { + if (is_array($message)) { + $message = implode("\n", $message); + } + + return preg_split('/$\R?^/m', $message, -1, PREG_SPLIT_NO_EMPTY); + } + + /** + * Make common syslog header (see rfc5424) + */ + protected function makeCommonSyslogHeader($severity) + { + $priority = $severity + $this->facility; + + if (!$pid = getmypid()) { + $pid = '-'; + } + + if (!$hostname = gethostname()) { + $hostname = '-'; + } + + return "<$priority>1 " . + $this->getDateTime() . " " . + $hostname . " " . + $this->ident . " " . + $pid . " - - "; + } + + protected function getDateTime() + { + return date(\DateTime::RFC3339); + } + + /** + * Inject your own socket, mainly used for testing + */ + public function setSocket($socket) + { + $this->socket = $socket; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php new file mode 100644 index 0000000..e39cfc6 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php @@ -0,0 +1,154 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +/** + * Used for testing purposes. + * + * It records all records and gives you access to them for verification. + * + * @author Jordi Boggiano + * + * @method bool hasEmergency($record) + * @method bool hasAlert($record) + * @method bool hasCritical($record) + * @method bool hasError($record) + * @method bool hasWarning($record) + * @method bool hasNotice($record) + * @method bool hasInfo($record) + * @method bool hasDebug($record) + * + * @method bool hasEmergencyRecords() + * @method bool hasAlertRecords() + * @method bool hasCriticalRecords() + * @method bool hasErrorRecords() + * @method bool hasWarningRecords() + * @method bool hasNoticeRecords() + * @method bool hasInfoRecords() + * @method bool hasDebugRecords() + * + * @method bool hasEmergencyThatContains($message) + * @method bool hasAlertThatContains($message) + * @method bool hasCriticalThatContains($message) + * @method bool hasErrorThatContains($message) + * @method bool hasWarningThatContains($message) + * @method bool hasNoticeThatContains($message) + * @method bool hasInfoThatContains($message) + * @method bool hasDebugThatContains($message) + * + * @method bool hasEmergencyThatMatches($message) + * @method bool hasAlertThatMatches($message) + * @method bool hasCriticalThatMatches($message) + * @method bool hasErrorThatMatches($message) + * @method bool hasWarningThatMatches($message) + * @method bool hasNoticeThatMatches($message) + * @method bool hasInfoThatMatches($message) + * @method bool hasDebugThatMatches($message) + * + * @method bool hasEmergencyThatPasses($message) + * @method bool hasAlertThatPasses($message) + * @method bool hasCriticalThatPasses($message) + * @method bool hasErrorThatPasses($message) + * @method bool hasWarningThatPasses($message) + * @method bool hasNoticeThatPasses($message) + * @method bool hasInfoThatPasses($message) + * @method bool hasDebugThatPasses($message) + */ +class TestHandler extends AbstractProcessingHandler +{ + protected $records = array(); + protected $recordsByLevel = array(); + + public function getRecords() + { + return $this->records; + } + + public function clear() + { + $this->records = array(); + $this->recordsByLevel = array(); + } + + public function hasRecords($level) + { + return isset($this->recordsByLevel[$level]); + } + + public function hasRecord($record, $level) + { + if (is_array($record)) { + $record = $record['message']; + } + + return $this->hasRecordThatPasses(function ($rec) use ($record) { + return $rec['message'] === $record; + }, $level); + } + + public function hasRecordThatContains($message, $level) + { + return $this->hasRecordThatPasses(function ($rec) use ($message) { + return strpos($rec['message'], $message) !== false; + }, $level); + } + + public function hasRecordThatMatches($regex, $level) + { + return $this->hasRecordThatPasses(function ($rec) use ($regex) { + return preg_match($regex, $rec['message']) > 0; + }, $level); + } + + public function hasRecordThatPasses($predicate, $level) + { + if (!is_callable($predicate)) { + throw new \InvalidArgumentException("Expected a callable for hasRecordThatSucceeds"); + } + + if (!isset($this->recordsByLevel[$level])) { + return false; + } + + foreach ($this->recordsByLevel[$level] as $i => $rec) { + if (call_user_func($predicate, $rec, $i)) { + return true; + } + } + + return false; + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + $this->recordsByLevel[$record['level']][] = $record; + $this->records[] = $record; + } + + public function __call($method, $args) + { + if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { + $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3]; + $level = constant('Monolog\Logger::' . strtoupper($matches[2])); + if (method_exists($this, $genericMethod)) { + $args[] = $level; + + return call_user_func_array(array($this, $genericMethod), $args); + } + } + + throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()'); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php new file mode 100644 index 0000000..2732ba3 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +/** + * Forwards records to multiple handlers suppressing failures of each handler + * and continuing through to give every handler a chance to succeed. + * + * @author Craig D'Amelio + */ +class WhatFailureGroupHandler extends GroupHandler +{ + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + if ($this->processors) { + foreach ($this->processors as $processor) { + $record = call_user_func($processor, $record); + } + } + + foreach ($this->handlers as $handler) { + try { + $handler->handle($record); + } catch (\Exception $e) { + // What failure? + } catch (\Throwable $e) { + // What failure? + } + } + + return false === $this->bubble; + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + foreach ($this->handlers as $handler) { + try { + $handler->handleBatch($records); + } catch (\Exception $e) { + // What failure? + } catch (\Throwable $e) { + // What failure? + } + } + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php new file mode 100644 index 0000000..f22cf21 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php @@ -0,0 +1,95 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\NormalizerFormatter; +use Monolog\Logger; + +/** + * Handler sending logs to Zend Monitor + * + * @author Christian Bergau + */ +class ZendMonitorHandler extends AbstractProcessingHandler +{ + /** + * Monolog level / ZendMonitor Custom Event priority map + * + * @var array + */ + protected $levelMap = array( + Logger::DEBUG => 1, + Logger::INFO => 2, + Logger::NOTICE => 3, + Logger::WARNING => 4, + Logger::ERROR => 5, + Logger::CRITICAL => 6, + Logger::ALERT => 7, + Logger::EMERGENCY => 0, + ); + + /** + * Construct + * + * @param int $level + * @param bool $bubble + * @throws MissingExtensionException + */ + public function __construct($level = Logger::DEBUG, $bubble = true) + { + if (!function_exists('zend_monitor_custom_event')) { + throw new MissingExtensionException('You must have Zend Server installed in order to use this handler'); + } + parent::__construct($level, $bubble); + } + + /** + * {@inheritdoc} + */ + protected function write(array $record) + { + $this->writeZendMonitorCustomEvent( + $this->levelMap[$record['level']], + $record['message'], + $record['formatted'] + ); + } + + /** + * Write a record to Zend Monitor + * + * @param int $level + * @param string $message + * @param array $formatted + */ + protected function writeZendMonitorCustomEvent($level, $message, $formatted) + { + zend_monitor_custom_event($level, $message, $formatted); + } + + /** + * {@inheritdoc} + */ + public function getDefaultFormatter() + { + return new NormalizerFormatter(); + } + + /** + * Get the level map + * + * @return array + */ + public function getLevelMap() + { + return $this->levelMap; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Logger.php b/vendor/monolog/monolog/src/Monolog/Logger.php new file mode 100644 index 0000000..49d00af --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Logger.php @@ -0,0 +1,700 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use Monolog\Handler\HandlerInterface; +use Monolog\Handler\StreamHandler; +use Psr\Log\LoggerInterface; +use Psr\Log\InvalidArgumentException; + +/** + * Monolog log channel + * + * It contains a stack of Handlers and a stack of Processors, + * and uses them to store records that are added to it. + * + * @author Jordi Boggiano + */ +class Logger implements LoggerInterface +{ + /** + * Detailed debug information + */ + const DEBUG = 100; + + /** + * Interesting events + * + * Examples: User logs in, SQL logs. + */ + const INFO = 200; + + /** + * Uncommon events + */ + const NOTICE = 250; + + /** + * Exceptional occurrences that are not errors + * + * Examples: Use of deprecated APIs, poor use of an API, + * undesirable things that are not necessarily wrong. + */ + const WARNING = 300; + + /** + * Runtime errors + */ + const ERROR = 400; + + /** + * Critical conditions + * + * Example: Application component unavailable, unexpected exception. + */ + const CRITICAL = 500; + + /** + * Action must be taken immediately + * + * Example: Entire website down, database unavailable, etc. + * This should trigger the SMS alerts and wake you up. + */ + const ALERT = 550; + + /** + * Urgent alert. + */ + const EMERGENCY = 600; + + /** + * Monolog API version + * + * This is only bumped when API breaks are done and should + * follow the major version of the library + * + * @var int + */ + const API = 1; + + /** + * Logging levels from syslog protocol defined in RFC 5424 + * + * @var array $levels Logging levels + */ + protected static $levels = array( + self::DEBUG => 'DEBUG', + self::INFO => 'INFO', + self::NOTICE => 'NOTICE', + self::WARNING => 'WARNING', + self::ERROR => 'ERROR', + self::CRITICAL => 'CRITICAL', + self::ALERT => 'ALERT', + self::EMERGENCY => 'EMERGENCY', + ); + + /** + * @var \DateTimeZone + */ + protected static $timezone; + + /** + * @var string + */ + protected $name; + + /** + * The handler stack + * + * @var HandlerInterface[] + */ + protected $handlers; + + /** + * Processors that will process all log records + * + * To process records of a single handler instead, add the processor on that specific handler + * + * @var callable[] + */ + protected $processors; + + /** + * @var bool + */ + protected $microsecondTimestamps = true; + + /** + * @param string $name The logging channel + * @param HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc. + * @param callable[] $processors Optional array of processors + */ + public function __construct($name, array $handlers = array(), array $processors = array()) + { + $this->name = $name; + $this->handlers = $handlers; + $this->processors = $processors; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * Return a new cloned instance with the name changed + * + * @return static + */ + public function withName($name) + { + $new = clone $this; + $new->name = $name; + + return $new; + } + + /** + * Pushes a handler on to the stack. + * + * @param HandlerInterface $handler + * @return $this + */ + public function pushHandler(HandlerInterface $handler) + { + array_unshift($this->handlers, $handler); + + return $this; + } + + /** + * Pops a handler from the stack + * + * @return HandlerInterface + */ + public function popHandler() + { + if (!$this->handlers) { + throw new \LogicException('You tried to pop from an empty handler stack.'); + } + + return array_shift($this->handlers); + } + + /** + * Set handlers, replacing all existing ones. + * + * If a map is passed, keys will be ignored. + * + * @param HandlerInterface[] $handlers + * @return $this + */ + public function setHandlers(array $handlers) + { + $this->handlers = array(); + foreach (array_reverse($handlers) as $handler) { + $this->pushHandler($handler); + } + + return $this; + } + + /** + * @return HandlerInterface[] + */ + public function getHandlers() + { + return $this->handlers; + } + + /** + * Adds a processor on to the stack. + * + * @param callable $callback + * @return $this + */ + public function pushProcessor($callback) + { + if (!is_callable($callback)) { + throw new \InvalidArgumentException('Processors must be valid callables (callback or object with an __invoke method), '.var_export($callback, true).' given'); + } + array_unshift($this->processors, $callback); + + return $this; + } + + /** + * Removes the processor on top of the stack and returns it. + * + * @return callable + */ + public function popProcessor() + { + if (!$this->processors) { + throw new \LogicException('You tried to pop from an empty processor stack.'); + } + + return array_shift($this->processors); + } + + /** + * @return callable[] + */ + public function getProcessors() + { + return $this->processors; + } + + /** + * Control the use of microsecond resolution timestamps in the 'datetime' + * member of new records. + * + * Generating microsecond resolution timestamps by calling + * microtime(true), formatting the result via sprintf() and then parsing + * the resulting string via \DateTime::createFromFormat() can incur + * a measurable runtime overhead vs simple usage of DateTime to capture + * a second resolution timestamp in systems which generate a large number + * of log events. + * + * @param bool $micro True to use microtime() to create timestamps + */ + public function useMicrosecondTimestamps($micro) + { + $this->microsecondTimestamps = (bool) $micro; + } + + /** + * Adds a log record. + * + * @param int $level The logging level + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function addRecord($level, $message, array $context = array()) + { + if (!$this->handlers) { + $this->pushHandler(new StreamHandler('php://stderr', static::DEBUG)); + } + + $levelName = static::getLevelName($level); + + // check if any handler will handle this message so we can return early and save cycles + $handlerKey = null; + reset($this->handlers); + while ($handler = current($this->handlers)) { + if ($handler->isHandling(array('level' => $level))) { + $handlerKey = key($this->handlers); + break; + } + + next($this->handlers); + } + + if (null === $handlerKey) { + return false; + } + + if (!static::$timezone) { + static::$timezone = new \DateTimeZone(date_default_timezone_get() ?: 'UTC'); + } + + // php7.1+ always has microseconds enabled, so we do not need this hack + if ($this->microsecondTimestamps && PHP_VERSION_ID < 70100) { + $ts = \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), static::$timezone); + } else { + $ts = new \DateTime(null, static::$timezone); + } + $ts->setTimezone(static::$timezone); + + $record = array( + 'message' => (string) $message, + 'context' => $context, + 'level' => $level, + 'level_name' => $levelName, + 'channel' => $this->name, + 'datetime' => $ts, + 'extra' => array(), + ); + + foreach ($this->processors as $processor) { + $record = call_user_func($processor, $record); + } + + while ($handler = current($this->handlers)) { + if (true === $handler->handle($record)) { + break; + } + + next($this->handlers); + } + + return true; + } + + /** + * Adds a log record at the DEBUG level. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function addDebug($message, array $context = array()) + { + return $this->addRecord(static::DEBUG, $message, $context); + } + + /** + * Adds a log record at the INFO level. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function addInfo($message, array $context = array()) + { + return $this->addRecord(static::INFO, $message, $context); + } + + /** + * Adds a log record at the NOTICE level. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function addNotice($message, array $context = array()) + { + return $this->addRecord(static::NOTICE, $message, $context); + } + + /** + * Adds a log record at the WARNING level. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function addWarning($message, array $context = array()) + { + return $this->addRecord(static::WARNING, $message, $context); + } + + /** + * Adds a log record at the ERROR level. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function addError($message, array $context = array()) + { + return $this->addRecord(static::ERROR, $message, $context); + } + + /** + * Adds a log record at the CRITICAL level. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function addCritical($message, array $context = array()) + { + return $this->addRecord(static::CRITICAL, $message, $context); + } + + /** + * Adds a log record at the ALERT level. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function addAlert($message, array $context = array()) + { + return $this->addRecord(static::ALERT, $message, $context); + } + + /** + * Adds a log record at the EMERGENCY level. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function addEmergency($message, array $context = array()) + { + return $this->addRecord(static::EMERGENCY, $message, $context); + } + + /** + * Gets all supported logging levels. + * + * @return array Assoc array with human-readable level names => level codes. + */ + public static function getLevels() + { + return array_flip(static::$levels); + } + + /** + * Gets the name of the logging level. + * + * @param int $level + * @return string + */ + public static function getLevelName($level) + { + if (!isset(static::$levels[$level])) { + throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', array_keys(static::$levels))); + } + + return static::$levels[$level]; + } + + /** + * Converts PSR-3 levels to Monolog ones if necessary + * + * @param string|int Level number (monolog) or name (PSR-3) + * @return int + */ + public static function toMonologLevel($level) + { + if (is_string($level) && defined(__CLASS__.'::'.strtoupper($level))) { + return constant(__CLASS__.'::'.strtoupper($level)); + } + + return $level; + } + + /** + * Checks whether the Logger has a handler that listens on the given level + * + * @param int $level + * @return Boolean + */ + public function isHandling($level) + { + $record = array( + 'level' => $level, + ); + + foreach ($this->handlers as $handler) { + if ($handler->isHandling($record)) { + return true; + } + } + + return false; + } + + /** + * Adds a log record at an arbitrary level. + * + * This method allows for compatibility with common interfaces. + * + * @param mixed $level The log level + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function log($level, $message, array $context = array()) + { + $level = static::toMonologLevel($level); + + return $this->addRecord($level, $message, $context); + } + + /** + * Adds a log record at the DEBUG level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function debug($message, array $context = array()) + { + return $this->addRecord(static::DEBUG, $message, $context); + } + + /** + * Adds a log record at the INFO level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function info($message, array $context = array()) + { + return $this->addRecord(static::INFO, $message, $context); + } + + /** + * Adds a log record at the NOTICE level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function notice($message, array $context = array()) + { + return $this->addRecord(static::NOTICE, $message, $context); + } + + /** + * Adds a log record at the WARNING level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function warn($message, array $context = array()) + { + return $this->addRecord(static::WARNING, $message, $context); + } + + /** + * Adds a log record at the WARNING level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function warning($message, array $context = array()) + { + return $this->addRecord(static::WARNING, $message, $context); + } + + /** + * Adds a log record at the ERROR level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function err($message, array $context = array()) + { + return $this->addRecord(static::ERROR, $message, $context); + } + + /** + * Adds a log record at the ERROR level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function error($message, array $context = array()) + { + return $this->addRecord(static::ERROR, $message, $context); + } + + /** + * Adds a log record at the CRITICAL level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function crit($message, array $context = array()) + { + return $this->addRecord(static::CRITICAL, $message, $context); + } + + /** + * Adds a log record at the CRITICAL level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function critical($message, array $context = array()) + { + return $this->addRecord(static::CRITICAL, $message, $context); + } + + /** + * Adds a log record at the ALERT level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function alert($message, array $context = array()) + { + return $this->addRecord(static::ALERT, $message, $context); + } + + /** + * Adds a log record at the EMERGENCY level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function emerg($message, array $context = array()) + { + return $this->addRecord(static::EMERGENCY, $message, $context); + } + + /** + * Adds a log record at the EMERGENCY level. + * + * This method allows for compatibility with common interfaces. + * + * @param string $message The log message + * @param array $context The log context + * @return Boolean Whether the record has been processed + */ + public function emergency($message, array $context = array()) + { + return $this->addRecord(static::EMERGENCY, $message, $context); + } + + /** + * Set the timezone to be used for the timestamp of log records. + * + * This is stored globally for all Logger instances + * + * @param \DateTimeZone $tz Timezone object + */ + public static function setTimezone(\DateTimeZone $tz) + { + self::$timezone = $tz; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php new file mode 100644 index 0000000..1899400 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php @@ -0,0 +1,64 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\Logger; + +/** + * Injects Git branch and Git commit SHA in all records + * + * @author Nick Otter + * @author Jordi Boggiano + */ +class GitProcessor +{ + private $level; + private static $cache; + + public function __construct($level = Logger::DEBUG) + { + $this->level = Logger::toMonologLevel($level); + } + + /** + * @param array $record + * @return array + */ + public function __invoke(array $record) + { + // return if the level is not high enough + if ($record['level'] < $this->level) { + return $record; + } + + $record['extra']['git'] = self::getGitInfo(); + + return $record; + } + + private static function getGitInfo() + { + if (self::$cache) { + return self::$cache; + } + + $branches = `git branch -v --no-abbrev`; + if (preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) { + return self::$cache = array( + 'branch' => $matches[1], + 'commit' => $matches[2], + ); + } + + return self::$cache = array(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php new file mode 100644 index 0000000..2c07cae --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php @@ -0,0 +1,112 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\Logger; + +/** + * Injects line/file:class/function where the log message came from + * + * Warning: This only works if the handler processes the logs directly. + * If you put the processor on a handler that is behind a FingersCrossedHandler + * for example, the processor will only be called once the trigger level is reached, + * and all the log records will have the same file/line/.. data from the call that + * triggered the FingersCrossedHandler. + * + * @author Jordi Boggiano + */ +class IntrospectionProcessor +{ + private $level; + + private $skipClassesPartials; + + private $skipStackFramesCount; + + private $skipFunctions = array( + 'call_user_func', + 'call_user_func_array', + ); + + public function __construct($level = Logger::DEBUG, array $skipClassesPartials = array(), $skipStackFramesCount = 0) + { + $this->level = Logger::toMonologLevel($level); + $this->skipClassesPartials = array_merge(array('Monolog\\'), $skipClassesPartials); + $this->skipStackFramesCount = $skipStackFramesCount; + } + + /** + * @param array $record + * @return array + */ + public function __invoke(array $record) + { + // return if the level is not high enough + if ($record['level'] < $this->level) { + return $record; + } + + /* + * http://php.net/manual/en/function.debug-backtrace.php + * As of 5.3.6, DEBUG_BACKTRACE_IGNORE_ARGS option was added. + * Any version less than 5.3.6 must use the DEBUG_BACKTRACE_IGNORE_ARGS constant value '2'. + */ + $trace = debug_backtrace((PHP_VERSION_ID < 50306) ? 2 : DEBUG_BACKTRACE_IGNORE_ARGS); + + // skip first since it's always the current method + array_shift($trace); + // the call_user_func call is also skipped + array_shift($trace); + + $i = 0; + + while ($this->isTraceClassOrSkippedFunction($trace, $i)) { + if (isset($trace[$i]['class'])) { + foreach ($this->skipClassesPartials as $part) { + if (strpos($trace[$i]['class'], $part) !== false) { + $i++; + continue 2; + } + } + } elseif (in_array($trace[$i]['function'], $this->skipFunctions)) { + $i++; + continue; + } + + break; + } + + $i += $this->skipStackFramesCount; + + // we should have the call source now + $record['extra'] = array_merge( + $record['extra'], + array( + 'file' => isset($trace[$i - 1]['file']) ? $trace[$i - 1]['file'] : null, + 'line' => isset($trace[$i - 1]['line']) ? $trace[$i - 1]['line'] : null, + 'class' => isset($trace[$i]['class']) ? $trace[$i]['class'] : null, + 'function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : null, + ) + ); + + return $record; + } + + private function isTraceClassOrSkippedFunction(array $trace, $index) + { + if (!isset($trace[$index])) { + return false; + } + + return isset($trace[$index]['class']) || in_array($trace[$index]['function'], $this->skipFunctions); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php new file mode 100644 index 0000000..0543e92 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +/** + * Injects memory_get_peak_usage in all records + * + * @see Monolog\Processor\MemoryProcessor::__construct() for options + * @author Rob Jensen + */ +class MemoryPeakUsageProcessor extends MemoryProcessor +{ + /** + * @param array $record + * @return array + */ + public function __invoke(array $record) + { + $bytes = memory_get_peak_usage($this->realUsage); + $formatted = $this->formatBytes($bytes); + + $record['extra']['memory_peak_usage'] = $formatted; + + return $record; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php new file mode 100644 index 0000000..85f9dc5 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +/** + * Some methods that are common for all memory processors + * + * @author Rob Jensen + */ +abstract class MemoryProcessor +{ + /** + * @var bool If true, get the real size of memory allocated from system. Else, only the memory used by emalloc() is reported. + */ + protected $realUsage; + + /** + * @var bool If true, then format memory size to human readable string (MB, KB, B depending on size) + */ + protected $useFormatting; + + /** + * @param bool $realUsage Set this to true to get the real size of memory allocated from system. + * @param bool $useFormatting If true, then format memory size to human readable string (MB, KB, B depending on size) + */ + public function __construct($realUsage = true, $useFormatting = true) + { + $this->realUsage = (boolean) $realUsage; + $this->useFormatting = (boolean) $useFormatting; + } + + /** + * Formats bytes into a human readable string if $this->useFormatting is true, otherwise return $bytes as is + * + * @param int $bytes + * @return string|int Formatted string if $this->useFormatting is true, otherwise return $bytes as is + */ + protected function formatBytes($bytes) + { + $bytes = (int) $bytes; + + if (!$this->useFormatting) { + return $bytes; + } + + if ($bytes > 1024 * 1024) { + return round($bytes / 1024 / 1024, 2).' MB'; + } elseif ($bytes > 1024) { + return round($bytes / 1024, 2).' KB'; + } + + return $bytes . ' B'; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php new file mode 100644 index 0000000..2783d65 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +/** + * Injects memory_get_usage in all records + * + * @see Monolog\Processor\MemoryProcessor::__construct() for options + * @author Rob Jensen + */ +class MemoryUsageProcessor extends MemoryProcessor +{ + /** + * @param array $record + * @return array + */ + public function __invoke(array $record) + { + $bytes = memory_get_usage($this->realUsage); + $formatted = $this->formatBytes($bytes); + + $record['extra']['memory_usage'] = $formatted; + + return $record; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php new file mode 100644 index 0000000..7c07a7e --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\Logger; + +/** + * Injects Hg branch and Hg revision number in all records + * + * @author Jonathan A. Schweder + */ +class MercurialProcessor +{ + private $level; + private static $cache; + + public function __construct($level = Logger::DEBUG) + { + $this->level = Logger::toMonologLevel($level); + } + + /** + * @param array $record + * @return array + */ + public function __invoke(array $record) + { + // return if the level is not high enough + if ($record['level'] < $this->level) { + return $record; + } + + $record['extra']['hg'] = self::getMercurialInfo(); + + return $record; + } + + private static function getMercurialInfo() + { + if (self::$cache) { + return self::$cache; + } + + $result = explode(' ', trim(`hg id -nb`)); + if (count($result) >= 3) { + return self::$cache = array( + 'branch' => $result[1], + 'revision' => $result[2], + ); + } + + return self::$cache = array(); + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php new file mode 100644 index 0000000..9d3f559 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +/** + * Adds value of getmypid into records + * + * @author Andreas Hörnicke + */ +class ProcessIdProcessor +{ + /** + * @param array $record + * @return array + */ + public function __invoke(array $record) + { + $record['extra']['process_id'] = getmypid(); + + return $record; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php new file mode 100644 index 0000000..c2686ce --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +/** + * Processes a record's message according to PSR-3 rules + * + * It replaces {foo} with the value from $context['foo'] + * + * @author Jordi Boggiano + */ +class PsrLogMessageProcessor +{ + /** + * @param array $record + * @return array + */ + public function __invoke(array $record) + { + if (false === strpos($record['message'], '{')) { + return $record; + } + + $replacements = array(); + foreach ($record['context'] as $key => $val) { + if (is_null($val) || is_scalar($val) || (is_object($val) && method_exists($val, "__toString"))) { + $replacements['{'.$key.'}'] = $val; + } elseif (is_object($val)) { + $replacements['{'.$key.'}'] = '[object '.get_class($val).']'; + } else { + $replacements['{'.$key.'}'] = '['.gettype($val).']'; + } + } + + $record['message'] = strtr($record['message'], $replacements); + + return $record; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php new file mode 100644 index 0000000..7e2df2a --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +/** + * Adds a tags array into record + * + * @author Martijn Riemers + */ +class TagProcessor +{ + private $tags; + + public function __construct(array $tags = array()) + { + $this->setTags($tags); + } + + public function addTags(array $tags = array()) + { + $this->tags = array_merge($this->tags, $tags); + } + + public function setTags(array $tags = array()) + { + $this->tags = $tags; + } + + public function __invoke(array $record) + { + $record['extra']['tags'] = $this->tags; + + return $record; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php new file mode 100644 index 0000000..812707c --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +/** + * Adds a unique identifier into records + * + * @author Simon Mönch + */ +class UidProcessor +{ + private $uid; + + public function __construct($length = 7) + { + if (!is_int($length) || $length > 32 || $length < 1) { + throw new \InvalidArgumentException('The uid length must be an integer between 1 and 32'); + } + + $this->uid = substr(hash('md5', uniqid('', true)), 0, $length); + } + + public function __invoke(array $record) + { + $record['extra']['uid'] = $this->uid; + + return $record; + } + + /** + * @return string + */ + public function getUid() + { + return $this->uid; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php new file mode 100644 index 0000000..ea1d897 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php @@ -0,0 +1,113 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +/** + * Injects url/method and remote IP of the current web request in all records + * + * @author Jordi Boggiano + */ +class WebProcessor +{ + /** + * @var array|\ArrayAccess + */ + protected $serverData; + + /** + * Default fields + * + * Array is structured as [key in record.extra => key in $serverData] + * + * @var array + */ + protected $extraFields = array( + 'url' => 'REQUEST_URI', + 'ip' => 'REMOTE_ADDR', + 'http_method' => 'REQUEST_METHOD', + 'server' => 'SERVER_NAME', + 'referrer' => 'HTTP_REFERER', + ); + + /** + * @param array|\ArrayAccess $serverData Array or object w/ ArrayAccess that provides access to the $_SERVER data + * @param array|null $extraFields Field names and the related key inside $serverData to be added. If not provided it defaults to: url, ip, http_method, server, referrer + */ + public function __construct($serverData = null, array $extraFields = null) + { + if (null === $serverData) { + $this->serverData = &$_SERVER; + } elseif (is_array($serverData) || $serverData instanceof \ArrayAccess) { + $this->serverData = $serverData; + } else { + throw new \UnexpectedValueException('$serverData must be an array or object implementing ArrayAccess.'); + } + + if (null !== $extraFields) { + if (isset($extraFields[0])) { + foreach (array_keys($this->extraFields) as $fieldName) { + if (!in_array($fieldName, $extraFields)) { + unset($this->extraFields[$fieldName]); + } + } + } else { + $this->extraFields = $extraFields; + } + } + } + + /** + * @param array $record + * @return array + */ + public function __invoke(array $record) + { + // skip processing if for some reason request data + // is not present (CLI or wonky SAPIs) + if (!isset($this->serverData['REQUEST_URI'])) { + return $record; + } + + $record['extra'] = $this->appendExtraFields($record['extra']); + + return $record; + } + + /** + * @param string $extraName + * @param string $serverName + * @return $this + */ + public function addExtraField($extraName, $serverName) + { + $this->extraFields[$extraName] = $serverName; + + return $this; + } + + /** + * @param array $extra + * @return array + */ + private function appendExtraFields(array $extra) + { + foreach ($this->extraFields as $extraName => $serverName) { + $extra[$extraName] = isset($this->serverData[$serverName]) ? $this->serverData[$serverName] : null; + } + + if (isset($this->serverData['UNIQUE_ID'])) { + $extra['unique_id'] = $this->serverData['UNIQUE_ID']; + } + + return $extra; + } +} diff --git a/vendor/monolog/monolog/src/Monolog/Registry.php b/vendor/monolog/monolog/src/Monolog/Registry.php new file mode 100644 index 0000000..159b751 --- /dev/null +++ b/vendor/monolog/monolog/src/Monolog/Registry.php @@ -0,0 +1,134 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use InvalidArgumentException; + +/** + * Monolog log registry + * + * Allows to get `Logger` instances in the global scope + * via static method calls on this class. + * + * + * $application = new Monolog\Logger('application'); + * $api = new Monolog\Logger('api'); + * + * Monolog\Registry::addLogger($application); + * Monolog\Registry::addLogger($api); + * + * function testLogger() + * { + * Monolog\Registry::api()->addError('Sent to $api Logger instance'); + * Monolog\Registry::application()->addError('Sent to $application Logger instance'); + * } + * + * + * @author Tomas Tatarko + */ +class Registry +{ + /** + * List of all loggers in the registry (by named indexes) + * + * @var Logger[] + */ + private static $loggers = array(); + + /** + * Adds new logging channel to the registry + * + * @param Logger $logger Instance of the logging channel + * @param string|null $name Name of the logging channel ($logger->getName() by default) + * @param bool $overwrite Overwrite instance in the registry if the given name already exists? + * @throws \InvalidArgumentException If $overwrite set to false and named Logger instance already exists + */ + public static function addLogger(Logger $logger, $name = null, $overwrite = false) + { + $name = $name ?: $logger->getName(); + + if (isset(self::$loggers[$name]) && !$overwrite) { + throw new InvalidArgumentException('Logger with the given name already exists'); + } + + self::$loggers[$name] = $logger; + } + + /** + * Checks if such logging channel exists by name or instance + * + * @param string|Logger $logger Name or logger instance + */ + public static function hasLogger($logger) + { + if ($logger instanceof Logger) { + $index = array_search($logger, self::$loggers, true); + + return false !== $index; + } else { + return isset(self::$loggers[$logger]); + } + } + + /** + * Removes instance from registry by name or instance + * + * @param string|Logger $logger Name or logger instance + */ + public static function removeLogger($logger) + { + if ($logger instanceof Logger) { + if (false !== ($idx = array_search($logger, self::$loggers, true))) { + unset(self::$loggers[$idx]); + } + } else { + unset(self::$loggers[$logger]); + } + } + + /** + * Clears the registry + */ + public static function clear() + { + self::$loggers = array(); + } + + /** + * Gets Logger instance from the registry + * + * @param string $name Name of the requested Logger instance + * @throws \InvalidArgumentException If named Logger instance is not in the registry + * @return Logger Requested instance of Logger + */ + public static function getInstance($name) + { + if (!isset(self::$loggers[$name])) { + throw new InvalidArgumentException(sprintf('Requested "%s" logger instance is not in the registry', $name)); + } + + return self::$loggers[$name]; + } + + /** + * Gets Logger instance from the registry via static method call + * + * @param string $name Name of the requested Logger instance + * @param array $arguments Arguments passed to static method call + * @throws \InvalidArgumentException If named Logger instance is not in the registry + * @return Logger Requested instance of Logger + */ + public static function __callStatic($name, $arguments) + { + return self::getInstance($name); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/ErrorHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/ErrorHandlerTest.php new file mode 100644 index 0000000..a9a3f30 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/ErrorHandlerTest.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use Monolog\Handler\TestHandler; + +class ErrorHandlerTest extends \PHPUnit_Framework_TestCase +{ + public function testHandleError() + { + $logger = new Logger('test', array($handler = new TestHandler)); + $errHandler = new ErrorHandler($logger); + + $errHandler->registerErrorHandler(array(E_USER_NOTICE => Logger::EMERGENCY), false); + trigger_error('Foo', E_USER_ERROR); + $this->assertCount(1, $handler->getRecords()); + $this->assertTrue($handler->hasErrorRecords()); + trigger_error('Foo', E_USER_NOTICE); + $this->assertCount(2, $handler->getRecords()); + $this->assertTrue($handler->hasEmergencyRecords()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/ChromePHPFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/ChromePHPFormatterTest.php new file mode 100644 index 0000000..71c4204 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/ChromePHPFormatterTest.php @@ -0,0 +1,158 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; + +class ChromePHPFormatterTest extends \PHPUnit_Framework_TestCase +{ + /** + * @covers Monolog\Formatter\ChromePHPFormatter::format + */ + public function testDefaultFormat() + { + $formatter = new ChromePHPFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('ip' => '127.0.0.1'), + 'message' => 'log', + ); + + $message = $formatter->format($record); + + $this->assertEquals( + array( + 'meh', + array( + 'message' => 'log', + 'context' => array('from' => 'logger'), + 'extra' => array('ip' => '127.0.0.1'), + ), + 'unknown', + 'error', + ), + $message + ); + } + + /** + * @covers Monolog\Formatter\ChromePHPFormatter::format + */ + public function testFormatWithFileAndLine() + { + $formatter = new ChromePHPFormatter(); + $record = array( + 'level' => Logger::CRITICAL, + 'level_name' => 'CRITICAL', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('ip' => '127.0.0.1', 'file' => 'test', 'line' => 14), + 'message' => 'log', + ); + + $message = $formatter->format($record); + + $this->assertEquals( + array( + 'meh', + array( + 'message' => 'log', + 'context' => array('from' => 'logger'), + 'extra' => array('ip' => '127.0.0.1'), + ), + 'test : 14', + 'error', + ), + $message + ); + } + + /** + * @covers Monolog\Formatter\ChromePHPFormatter::format + */ + public function testFormatWithoutContext() + { + $formatter = new ChromePHPFormatter(); + $record = array( + 'level' => Logger::DEBUG, + 'level_name' => 'DEBUG', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + $message = $formatter->format($record); + + $this->assertEquals( + array( + 'meh', + 'log', + 'unknown', + 'log', + ), + $message + ); + } + + /** + * @covers Monolog\Formatter\ChromePHPFormatter::formatBatch + */ + public function testBatchFormatThrowException() + { + $formatter = new ChromePHPFormatter(); + $records = array( + array( + 'level' => Logger::INFO, + 'level_name' => 'INFO', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ), + array( + 'level' => Logger::WARNING, + 'level_name' => 'WARNING', + 'channel' => 'foo', + 'context' => array(), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log2', + ), + ); + + $this->assertEquals( + array( + array( + 'meh', + 'log', + 'unknown', + 'info', + ), + array( + 'foo', + 'log2', + 'unknown', + 'warn', + ), + ), + $formatter->formatBatch($records) + ); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/ElasticaFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/ElasticaFormatterTest.php new file mode 100644 index 0000000..90cc48d --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/ElasticaFormatterTest.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; + +class ElasticaFormatterTest extends \PHPUnit_Framework_TestCase +{ + public function setUp() + { + if (!class_exists("Elastica\Document")) { + $this->markTestSkipped("ruflin/elastica not installed"); + } + } + + /** + * @covers Monolog\Formatter\ElasticaFormatter::__construct + * @covers Monolog\Formatter\ElasticaFormatter::format + * @covers Monolog\Formatter\ElasticaFormatter::getDocument + */ + public function testFormat() + { + // test log message + $msg = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('foo' => 7, 'bar', 'class' => new \stdClass), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + // expected values + $expected = $msg; + $expected['datetime'] = '1970-01-01T00:00:00.000000+00:00'; + $expected['context'] = array( + 'class' => '[object] (stdClass: {})', + 'foo' => 7, + 0 => 'bar', + ); + + // format log message + $formatter = new ElasticaFormatter('my_index', 'doc_type'); + $doc = $formatter->format($msg); + $this->assertInstanceOf('Elastica\Document', $doc); + + // Document parameters + $params = $doc->getParams(); + $this->assertEquals('my_index', $params['_index']); + $this->assertEquals('doc_type', $params['_type']); + + // Document data values + $data = $doc->getData(); + foreach (array_keys($expected) as $key) { + $this->assertEquals($expected[$key], $data[$key]); + } + } + + /** + * @covers Monolog\Formatter\ElasticaFormatter::getIndex + * @covers Monolog\Formatter\ElasticaFormatter::getType + */ + public function testGetters() + { + $formatter = new ElasticaFormatter('my_index', 'doc_type'); + $this->assertEquals('my_index', $formatter->getIndex()); + $this->assertEquals('doc_type', $formatter->getType()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/FlowdockFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/FlowdockFormatterTest.php new file mode 100644 index 0000000..1b2fd97 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/FlowdockFormatterTest.php @@ -0,0 +1,55 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; +use Monolog\TestCase; + +class FlowdockFormatterTest extends TestCase +{ + /** + * @covers Monolog\Formatter\FlowdockFormatter::format + */ + public function testFormat() + { + $formatter = new FlowdockFormatter('test_source', 'source@test.com'); + $record = $this->getRecord(); + + $expected = array( + 'source' => 'test_source', + 'from_address' => 'source@test.com', + 'subject' => 'in test_source: WARNING - test', + 'content' => 'test', + 'tags' => array('#logs', '#warning', '#test'), + 'project' => 'test_source', + ); + $formatted = $formatter->format($record); + + $this->assertEquals($expected, $formatted['flowdock']); + } + + /** + * @ covers Monolog\Formatter\FlowdockFormatter::formatBatch + */ + public function testFormatBatch() + { + $formatter = new FlowdockFormatter('test_source', 'source@test.com'); + $records = array( + $this->getRecord(Logger::WARNING), + $this->getRecord(Logger::DEBUG), + ); + $formatted = $formatter->formatBatch($records); + + $this->assertArrayHasKey('flowdock', $formatted[0]); + $this->assertArrayHasKey('flowdock', $formatted[1]); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/FluentdFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/FluentdFormatterTest.php new file mode 100644 index 0000000..622b2ba --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/FluentdFormatterTest.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; +use Monolog\TestCase; + +class FluentdFormatterTest extends TestCase +{ + /** + * @covers Monolog\Formatter\FluentdFormatter::__construct + * @covers Monolog\Formatter\FluentdFormatter::isUsingLevelsInTag + */ + public function testConstruct() + { + $formatter = new FluentdFormatter(); + $this->assertEquals(false, $formatter->isUsingLevelsInTag()); + $formatter = new FluentdFormatter(false); + $this->assertEquals(false, $formatter->isUsingLevelsInTag()); + $formatter = new FluentdFormatter(true); + $this->assertEquals(true, $formatter->isUsingLevelsInTag()); + } + + /** + * @covers Monolog\Formatter\FluentdFormatter::format + */ + public function testFormat() + { + $record = $this->getRecord(Logger::WARNING); + $record['datetime'] = new \DateTime("@0"); + + $formatter = new FluentdFormatter(); + $this->assertEquals( + '["test",0,{"message":"test","extra":[],"level":300,"level_name":"WARNING"}]', + $formatter->format($record) + ); + } + + /** + * @covers Monolog\Formatter\FluentdFormatter::format + */ + public function testFormatWithTag() + { + $record = $this->getRecord(Logger::ERROR); + $record['datetime'] = new \DateTime("@0"); + + $formatter = new FluentdFormatter(true); + $this->assertEquals( + '["test.error",0,{"message":"test","extra":[]}]', + $formatter->format($record) + ); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/GelfMessageFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/GelfMessageFormatterTest.php new file mode 100644 index 0000000..4a24761 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/GelfMessageFormatterTest.php @@ -0,0 +1,258 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; + +class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase +{ + public function setUp() + { + if (!class_exists('\Gelf\Message')) { + $this->markTestSkipped("graylog2/gelf-php or mlehner/gelf-php is not installed"); + } + } + + /** + * @covers Monolog\Formatter\GelfMessageFormatter::format + */ + public function testDefaultFormatter() + { + $formatter = new GelfMessageFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + $message = $formatter->format($record); + + $this->assertInstanceOf('Gelf\Message', $message); + $this->assertEquals(0, $message->getTimestamp()); + $this->assertEquals('log', $message->getShortMessage()); + $this->assertEquals('meh', $message->getFacility()); + $this->assertEquals(null, $message->getLine()); + $this->assertEquals(null, $message->getFile()); + $this->assertEquals($this->isLegacy() ? 3 : 'error', $message->getLevel()); + $this->assertNotEmpty($message->getHost()); + + $formatter = new GelfMessageFormatter('mysystem'); + + $message = $formatter->format($record); + + $this->assertInstanceOf('Gelf\Message', $message); + $this->assertEquals('mysystem', $message->getHost()); + } + + /** + * @covers Monolog\Formatter\GelfMessageFormatter::format + */ + public function testFormatWithFileAndLine() + { + $formatter = new GelfMessageFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('file' => 'test', 'line' => 14), + 'message' => 'log', + ); + + $message = $formatter->format($record); + + $this->assertInstanceOf('Gelf\Message', $message); + $this->assertEquals('test', $message->getFile()); + $this->assertEquals(14, $message->getLine()); + } + + /** + * @covers Monolog\Formatter\GelfMessageFormatter::format + * @expectedException InvalidArgumentException + */ + public function testFormatInvalidFails() + { + $formatter = new GelfMessageFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + ); + + $formatter->format($record); + } + + /** + * @covers Monolog\Formatter\GelfMessageFormatter::format + */ + public function testFormatWithContext() + { + $formatter = new GelfMessageFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => 'pair'), + 'message' => 'log', + ); + + $message = $formatter->format($record); + + $this->assertInstanceOf('Gelf\Message', $message); + + $message_array = $message->toArray(); + + $this->assertArrayHasKey('_ctxt_from', $message_array); + $this->assertEquals('logger', $message_array['_ctxt_from']); + + // Test with extraPrefix + $formatter = new GelfMessageFormatter(null, null, 'CTX'); + $message = $formatter->format($record); + + $this->assertInstanceOf('Gelf\Message', $message); + + $message_array = $message->toArray(); + + $this->assertArrayHasKey('_CTXfrom', $message_array); + $this->assertEquals('logger', $message_array['_CTXfrom']); + } + + /** + * @covers Monolog\Formatter\GelfMessageFormatter::format + */ + public function testFormatWithContextContainingException() + { + $formatter = new GelfMessageFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger', 'exception' => array( + 'class' => '\Exception', + 'file' => '/some/file/in/dir.php:56', + 'trace' => array('/some/file/1.php:23', '/some/file/2.php:3'), + )), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + $message = $formatter->format($record); + + $this->assertInstanceOf('Gelf\Message', $message); + + $this->assertEquals("/some/file/in/dir.php", $message->getFile()); + $this->assertEquals("56", $message->getLine()); + } + + /** + * @covers Monolog\Formatter\GelfMessageFormatter::format + */ + public function testFormatWithExtra() + { + $formatter = new GelfMessageFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => 'pair'), + 'message' => 'log', + ); + + $message = $formatter->format($record); + + $this->assertInstanceOf('Gelf\Message', $message); + + $message_array = $message->toArray(); + + $this->assertArrayHasKey('_key', $message_array); + $this->assertEquals('pair', $message_array['_key']); + + // Test with extraPrefix + $formatter = new GelfMessageFormatter(null, 'EXT'); + $message = $formatter->format($record); + + $this->assertInstanceOf('Gelf\Message', $message); + + $message_array = $message->toArray(); + + $this->assertArrayHasKey('_EXTkey', $message_array); + $this->assertEquals('pair', $message_array['_EXTkey']); + } + + public function testFormatWithLargeData() + { + $formatter = new GelfMessageFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('exception' => str_repeat(' ', 32767)), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => str_repeat(' ', 32767)), + 'message' => 'log' + ); + $message = $formatter->format($record); + $messageArray = $message->toArray(); + + // 200 for padding + metadata + $length = 200; + + foreach ($messageArray as $key => $value) { + if (!in_array($key, array('level', 'timestamp'))) { + $length += strlen($value); + } + } + + $this->assertLessThanOrEqual(65792, $length, 'The message length is no longer than the maximum allowed length'); + } + + public function testFormatWithUnlimitedLength() + { + $formatter = new GelfMessageFormatter('LONG_SYSTEM_NAME', null, 'ctxt_', PHP_INT_MAX); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('exception' => str_repeat(' ', 32767 * 2)), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => str_repeat(' ', 32767 * 2)), + 'message' => 'log' + ); + $message = $formatter->format($record); + $messageArray = $message->toArray(); + + // 200 for padding + metadata + $length = 200; + + foreach ($messageArray as $key => $value) { + if (!in_array($key, array('level', 'timestamp'))) { + $length += strlen($value); + } + } + + $this->assertGreaterThanOrEqual(131289, $length, 'The message should not be truncated'); + } + + private function isLegacy() + { + return interface_exists('\Gelf\IMessagePublisher'); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/JsonFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/JsonFormatterTest.php new file mode 100644 index 0000000..c9445f3 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/JsonFormatterTest.php @@ -0,0 +1,183 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; +use Monolog\TestCase; + +class JsonFormatterTest extends TestCase +{ + /** + * @covers Monolog\Formatter\JsonFormatter::__construct + * @covers Monolog\Formatter\JsonFormatter::getBatchMode + * @covers Monolog\Formatter\JsonFormatter::isAppendingNewlines + */ + public function testConstruct() + { + $formatter = new JsonFormatter(); + $this->assertEquals(JsonFormatter::BATCH_MODE_JSON, $formatter->getBatchMode()); + $this->assertEquals(true, $formatter->isAppendingNewlines()); + $formatter = new JsonFormatter(JsonFormatter::BATCH_MODE_NEWLINES, false); + $this->assertEquals(JsonFormatter::BATCH_MODE_NEWLINES, $formatter->getBatchMode()); + $this->assertEquals(false, $formatter->isAppendingNewlines()); + } + + /** + * @covers Monolog\Formatter\JsonFormatter::format + */ + public function testFormat() + { + $formatter = new JsonFormatter(); + $record = $this->getRecord(); + $this->assertEquals(json_encode($record)."\n", $formatter->format($record)); + + $formatter = new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false); + $record = $this->getRecord(); + $this->assertEquals(json_encode($record), $formatter->format($record)); + } + + /** + * @covers Monolog\Formatter\JsonFormatter::formatBatch + * @covers Monolog\Formatter\JsonFormatter::formatBatchJson + */ + public function testFormatBatch() + { + $formatter = new JsonFormatter(); + $records = array( + $this->getRecord(Logger::WARNING), + $this->getRecord(Logger::DEBUG), + ); + $this->assertEquals(json_encode($records), $formatter->formatBatch($records)); + } + + /** + * @covers Monolog\Formatter\JsonFormatter::formatBatch + * @covers Monolog\Formatter\JsonFormatter::formatBatchNewlines + */ + public function testFormatBatchNewlines() + { + $formatter = new JsonFormatter(JsonFormatter::BATCH_MODE_NEWLINES); + $records = $expected = array( + $this->getRecord(Logger::WARNING), + $this->getRecord(Logger::DEBUG), + ); + array_walk($expected, function (&$value, $key) { + $value = json_encode($value); + }); + $this->assertEquals(implode("\n", $expected), $formatter->formatBatch($records)); + } + + public function testDefFormatWithException() + { + $formatter = new JsonFormatter(); + $exception = new \RuntimeException('Foo'); + $formattedException = $this->formatException($exception); + + $message = $this->formatRecordWithExceptionInContext($formatter, $exception); + + $this->assertContextContainsFormattedException($formattedException, $message); + } + + public function testDefFormatWithPreviousException() + { + $formatter = new JsonFormatter(); + $exception = new \RuntimeException('Foo', 0, new \LogicException('Wut?')); + $formattedPrevException = $this->formatException($exception->getPrevious()); + $formattedException = $this->formatException($exception, $formattedPrevException); + + $message = $this->formatRecordWithExceptionInContext($formatter, $exception); + + $this->assertContextContainsFormattedException($formattedException, $message); + } + + public function testDefFormatWithThrowable() + { + if (!class_exists('Error') || !is_subclass_of('Error', 'Throwable')) { + $this->markTestSkipped('Requires PHP >=7'); + } + + $formatter = new JsonFormatter(); + $throwable = new \Error('Foo'); + $formattedThrowable = $this->formatException($throwable); + + $message = $this->formatRecordWithExceptionInContext($formatter, $throwable); + + $this->assertContextContainsFormattedException($formattedThrowable, $message); + } + + /** + * @param string $expected + * @param string $actual + * + * @internal param string $exception + */ + private function assertContextContainsFormattedException($expected, $actual) + { + $this->assertEquals( + '{"level_name":"CRITICAL","channel":"core","context":{"exception":'.$expected.'},"datetime":null,"extra":[],"message":"foobar"}'."\n", + $actual + ); + } + + /** + * @param JsonFormatter $formatter + * @param \Exception|\Throwable $exception + * + * @return string + */ + private function formatRecordWithExceptionInContext(JsonFormatter $formatter, $exception) + { + $message = $formatter->format(array( + 'level_name' => 'CRITICAL', + 'channel' => 'core', + 'context' => array('exception' => $exception), + 'datetime' => null, + 'extra' => array(), + 'message' => 'foobar', + )); + return $message; + } + + /** + * @param \Exception|\Throwable $exception + * + * @return string + */ + private function formatExceptionFilePathWithLine($exception) + { + $options = 0; + if (version_compare(PHP_VERSION, '5.4.0', '>=')) { + $options = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE; + } + $path = substr(json_encode($exception->getFile(), $options), 1, -1); + return $path . ':' . $exception->getLine(); + } + + /** + * @param \Exception|\Throwable $exception + * + * @param null|string $previous + * + * @return string + */ + private function formatException($exception, $previous = null) + { + $formattedException = + '{"class":"' . get_class($exception) . + '","message":"' . $exception->getMessage() . + '","code":' . $exception->getCode() . + ',"file":"' . $this->formatExceptionFilePathWithLine($exception) . + ($previous ? '","previous":' . $previous : '"') . + '}'; + return $formattedException; + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php new file mode 100644 index 0000000..310d93c --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/LineFormatterTest.php @@ -0,0 +1,222 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * @covers Monolog\Formatter\LineFormatter + */ +class LineFormatterTest extends \PHPUnit_Framework_TestCase +{ + public function testDefFormatWithString() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $message = $formatter->format(array( + 'level_name' => 'WARNING', + 'channel' => 'log', + 'context' => array(), + 'message' => 'foo', + 'datetime' => new \DateTime, + 'extra' => array(), + )); + $this->assertEquals('['.date('Y-m-d').'] log.WARNING: foo [] []'."\n", $message); + } + + public function testDefFormatWithArrayContext() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $message = $formatter->format(array( + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'message' => 'foo', + 'datetime' => new \DateTime, + 'extra' => array(), + 'context' => array( + 'foo' => 'bar', + 'baz' => 'qux', + 'bool' => false, + 'null' => null, + ), + )); + $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: foo {"foo":"bar","baz":"qux","bool":false,"null":null} []'."\n", $message); + } + + public function testDefFormatExtras() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $message = $formatter->format(array( + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime, + 'extra' => array('ip' => '127.0.0.1'), + 'message' => 'log', + )); + $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: log [] {"ip":"127.0.0.1"}'."\n", $message); + } + + public function testFormatExtras() + { + $formatter = new LineFormatter("[%datetime%] %channel%.%level_name%: %message% %context% %extra.file% %extra%\n", 'Y-m-d'); + $message = $formatter->format(array( + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime, + 'extra' => array('ip' => '127.0.0.1', 'file' => 'test'), + 'message' => 'log', + )); + $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: log [] test {"ip":"127.0.0.1"}'."\n", $message); + } + + public function testContextAndExtraOptionallyNotShownIfEmpty() + { + $formatter = new LineFormatter(null, 'Y-m-d', false, true); + $message = $formatter->format(array( + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime, + 'extra' => array(), + 'message' => 'log', + )); + $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: log '."\n", $message); + } + + public function testContextAndExtraReplacement() + { + $formatter = new LineFormatter('%context.foo% => %extra.foo%'); + $message = $formatter->format(array( + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('foo' => 'bar'), + 'datetime' => new \DateTime, + 'extra' => array('foo' => 'xbar'), + 'message' => 'log', + )); + $this->assertEquals('bar => xbar', $message); + } + + public function testDefFormatWithObject() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $message = $formatter->format(array( + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime, + 'extra' => array('foo' => new TestFoo, 'bar' => new TestBar, 'baz' => array(), 'res' => fopen('php://memory', 'rb')), + 'message' => 'foobar', + )); + + $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: foobar [] {"foo":"[object] (Monolog\\\\Formatter\\\\TestFoo: {\\"foo\\":\\"foo\\"})","bar":"[object] (Monolog\\\\Formatter\\\\TestBar: bar)","baz":[],"res":"[resource] (stream)"}'."\n", $message); + } + + public function testDefFormatWithException() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $message = $formatter->format(array( + 'level_name' => 'CRITICAL', + 'channel' => 'core', + 'context' => array('exception' => new \RuntimeException('Foo')), + 'datetime' => new \DateTime, + 'extra' => array(), + 'message' => 'foobar', + )); + + $path = str_replace('\\/', '/', json_encode(__FILE__)); + + $this->assertEquals('['.date('Y-m-d').'] core.CRITICAL: foobar {"exception":"[object] (RuntimeException(code: 0): Foo at '.substr($path, 1, -1).':'.(__LINE__ - 8).')"} []'."\n", $message); + } + + public function testDefFormatWithPreviousException() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $previous = new \LogicException('Wut?'); + $message = $formatter->format(array( + 'level_name' => 'CRITICAL', + 'channel' => 'core', + 'context' => array('exception' => new \RuntimeException('Foo', 0, $previous)), + 'datetime' => new \DateTime, + 'extra' => array(), + 'message' => 'foobar', + )); + + $path = str_replace('\\/', '/', json_encode(__FILE__)); + + $this->assertEquals('['.date('Y-m-d').'] core.CRITICAL: foobar {"exception":"[object] (RuntimeException(code: 0): Foo at '.substr($path, 1, -1).':'.(__LINE__ - 8).', LogicException(code: 0): Wut? at '.substr($path, 1, -1).':'.(__LINE__ - 12).')"} []'."\n", $message); + } + + public function testBatchFormat() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $message = $formatter->formatBatch(array( + array( + 'level_name' => 'CRITICAL', + 'channel' => 'test', + 'message' => 'bar', + 'context' => array(), + 'datetime' => new \DateTime, + 'extra' => array(), + ), + array( + 'level_name' => 'WARNING', + 'channel' => 'log', + 'message' => 'foo', + 'context' => array(), + 'datetime' => new \DateTime, + 'extra' => array(), + ), + )); + $this->assertEquals('['.date('Y-m-d').'] test.CRITICAL: bar [] []'."\n".'['.date('Y-m-d').'] log.WARNING: foo [] []'."\n", $message); + } + + public function testFormatShouldStripInlineLineBreaks() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $message = $formatter->format( + array( + 'message' => "foo\nbar", + 'context' => array(), + 'extra' => array(), + ) + ); + + $this->assertRegExp('/foo bar/', $message); + } + + public function testFormatShouldNotStripInlineLineBreaksWhenFlagIsSet() + { + $formatter = new LineFormatter(null, 'Y-m-d', true); + $message = $formatter->format( + array( + 'message' => "foo\nbar", + 'context' => array(), + 'extra' => array(), + ) + ); + + $this->assertRegExp('/foo\nbar/', $message); + } +} + +class TestFoo +{ + public $foo = 'foo'; +} + +class TestBar +{ + public function __toString() + { + return 'bar'; + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/LogglyFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/LogglyFormatterTest.php new file mode 100644 index 0000000..6d59b3f --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/LogglyFormatterTest.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\TestCase; + +class LogglyFormatterTest extends TestCase +{ + /** + * @covers Monolog\Formatter\LogglyFormatter::__construct + */ + public function testConstruct() + { + $formatter = new LogglyFormatter(); + $this->assertEquals(LogglyFormatter::BATCH_MODE_NEWLINES, $formatter->getBatchMode()); + $formatter = new LogglyFormatter(LogglyFormatter::BATCH_MODE_JSON); + $this->assertEquals(LogglyFormatter::BATCH_MODE_JSON, $formatter->getBatchMode()); + } + + /** + * @covers Monolog\Formatter\LogglyFormatter::format + */ + public function testFormat() + { + $formatter = new LogglyFormatter(); + $record = $this->getRecord(); + $formatted_decoded = json_decode($formatter->format($record), true); + $this->assertArrayHasKey("timestamp", $formatted_decoded); + $this->assertEquals(new \DateTime($formatted_decoded["timestamp"]), $record["datetime"]); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/LogstashFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/LogstashFormatterTest.php new file mode 100644 index 0000000..9f6b1cc --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/LogstashFormatterTest.php @@ -0,0 +1,333 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; + +class LogstashFormatterTest extends \PHPUnit_Framework_TestCase +{ + public function tearDown() + { + \PHPUnit_Framework_Error_Warning::$enabled = true; + + return parent::tearDown(); + } + + /** + * @covers Monolog\Formatter\LogstashFormatter::format + */ + public function testDefaultFormatter() + { + $formatter = new LogstashFormatter('test', 'hostname'); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $this->assertEquals("1970-01-01T00:00:00.000000+00:00", $message['@timestamp']); + $this->assertEquals('log', $message['@message']); + $this->assertEquals('meh', $message['@fields']['channel']); + $this->assertContains('meh', $message['@tags']); + $this->assertEquals(Logger::ERROR, $message['@fields']['level']); + $this->assertEquals('test', $message['@type']); + $this->assertEquals('hostname', $message['@source']); + + $formatter = new LogstashFormatter('mysystem'); + + $message = json_decode($formatter->format($record), true); + + $this->assertEquals('mysystem', $message['@type']); + } + + /** + * @covers Monolog\Formatter\LogstashFormatter::format + */ + public function testFormatWithFileAndLine() + { + $formatter = new LogstashFormatter('test'); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('file' => 'test', 'line' => 14), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $this->assertEquals('test', $message['@fields']['file']); + $this->assertEquals(14, $message['@fields']['line']); + } + + /** + * @covers Monolog\Formatter\LogstashFormatter::format + */ + public function testFormatWithContext() + { + $formatter = new LogstashFormatter('test'); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => 'pair'), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $message_array = $message['@fields']; + + $this->assertArrayHasKey('ctxt_from', $message_array); + $this->assertEquals('logger', $message_array['ctxt_from']); + + // Test with extraPrefix + $formatter = new LogstashFormatter('test', null, null, 'CTX'); + $message = json_decode($formatter->format($record), true); + + $message_array = $message['@fields']; + + $this->assertArrayHasKey('CTXfrom', $message_array); + $this->assertEquals('logger', $message_array['CTXfrom']); + } + + /** + * @covers Monolog\Formatter\LogstashFormatter::format + */ + public function testFormatWithExtra() + { + $formatter = new LogstashFormatter('test'); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => 'pair'), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $message_array = $message['@fields']; + + $this->assertArrayHasKey('key', $message_array); + $this->assertEquals('pair', $message_array['key']); + + // Test with extraPrefix + $formatter = new LogstashFormatter('test', null, 'EXT'); + $message = json_decode($formatter->format($record), true); + + $message_array = $message['@fields']; + + $this->assertArrayHasKey('EXTkey', $message_array); + $this->assertEquals('pair', $message_array['EXTkey']); + } + + public function testFormatWithApplicationName() + { + $formatter = new LogstashFormatter('app', 'test'); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => 'pair'), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $this->assertArrayHasKey('@type', $message); + $this->assertEquals('app', $message['@type']); + } + + /** + * @covers Monolog\Formatter\LogstashFormatter::format + */ + public function testDefaultFormatterV1() + { + $formatter = new LogstashFormatter('test', 'hostname', null, 'ctxt_', LogstashFormatter::V1); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $this->assertEquals("1970-01-01T00:00:00.000000+00:00", $message['@timestamp']); + $this->assertEquals("1", $message['@version']); + $this->assertEquals('log', $message['message']); + $this->assertEquals('meh', $message['channel']); + $this->assertEquals('ERROR', $message['level']); + $this->assertEquals('test', $message['type']); + $this->assertEquals('hostname', $message['host']); + + $formatter = new LogstashFormatter('mysystem', null, null, 'ctxt_', LogstashFormatter::V1); + + $message = json_decode($formatter->format($record), true); + + $this->assertEquals('mysystem', $message['type']); + } + + /** + * @covers Monolog\Formatter\LogstashFormatter::format + */ + public function testFormatWithFileAndLineV1() + { + $formatter = new LogstashFormatter('test', null, null, 'ctxt_', LogstashFormatter::V1); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('file' => 'test', 'line' => 14), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $this->assertEquals('test', $message['file']); + $this->assertEquals(14, $message['line']); + } + + /** + * @covers Monolog\Formatter\LogstashFormatter::format + */ + public function testFormatWithContextV1() + { + $formatter = new LogstashFormatter('test', null, null, 'ctxt_', LogstashFormatter::V1); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => 'pair'), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $this->assertArrayHasKey('ctxt_from', $message); + $this->assertEquals('logger', $message['ctxt_from']); + + // Test with extraPrefix + $formatter = new LogstashFormatter('test', null, null, 'CTX', LogstashFormatter::V1); + $message = json_decode($formatter->format($record), true); + + $this->assertArrayHasKey('CTXfrom', $message); + $this->assertEquals('logger', $message['CTXfrom']); + } + + /** + * @covers Monolog\Formatter\LogstashFormatter::format + */ + public function testFormatWithExtraV1() + { + $formatter = new LogstashFormatter('test', null, null, 'ctxt_', LogstashFormatter::V1); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => 'pair'), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $this->assertArrayHasKey('key', $message); + $this->assertEquals('pair', $message['key']); + + // Test with extraPrefix + $formatter = new LogstashFormatter('test', null, 'EXT', 'ctxt_', LogstashFormatter::V1); + $message = json_decode($formatter->format($record), true); + + $this->assertArrayHasKey('EXTkey', $message); + $this->assertEquals('pair', $message['EXTkey']); + } + + public function testFormatWithApplicationNameV1() + { + $formatter = new LogstashFormatter('app', 'test', null, 'ctxt_', LogstashFormatter::V1); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('key' => 'pair'), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $this->assertArrayHasKey('type', $message); + $this->assertEquals('app', $message['type']); + } + + public function testFormatWithLatin9Data() + { + if (version_compare(PHP_VERSION, '5.5.0', '<')) { + // Ignore the warning that will be emitted by PHP <5.5.0 + \PHPUnit_Framework_Error_Warning::$enabled = false; + } + $formatter = new LogstashFormatter('test', 'hostname'); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => '¯\_(ツ)_/¯', + 'context' => array(), + 'datetime' => new \DateTime("@0"), + 'extra' => array( + 'user_agent' => "\xD6WN; FBCR/OrangeEspa\xF1a; Vers\xE3o/4.0; F\xE4rist", + ), + 'message' => 'log', + ); + + $message = json_decode($formatter->format($record), true); + + $this->assertEquals("1970-01-01T00:00:00.000000+00:00", $message['@timestamp']); + $this->assertEquals('log', $message['@message']); + $this->assertEquals('¯\_(ツ)_/¯', $message['@fields']['channel']); + $this->assertContains('¯\_(ツ)_/¯', $message['@tags']); + $this->assertEquals(Logger::ERROR, $message['@fields']['level']); + $this->assertEquals('test', $message['@type']); + $this->assertEquals('hostname', $message['@source']); + if (version_compare(PHP_VERSION, '5.5.0', '>=')) { + $this->assertEquals('ÖWN; FBCR/OrangeEspaña; Versão/4.0; Färist', $message['@fields']['user_agent']); + } else { + // PHP <5.5 does not return false for an element encoding failure, + // instead it emits a warning (possibly) and nulls the value. + $this->assertEquals(null, $message['@fields']['user_agent']); + } + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/MongoDBFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/MongoDBFormatterTest.php new file mode 100644 index 0000000..52e699e --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/MongoDBFormatterTest.php @@ -0,0 +1,262 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; + +/** + * @author Florian Plattner + */ +class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase +{ + public function setUp() + { + if (!class_exists('MongoDate')) { + $this->markTestSkipped('mongo extension not installed'); + } + } + + public function constructArgumentProvider() + { + return array( + array(1, true, 1, true), + array(0, false, 0, false), + ); + } + + /** + * @param $traceDepth + * @param $traceAsString + * @param $expectedTraceDepth + * @param $expectedTraceAsString + * + * @dataProvider constructArgumentProvider + */ + public function testConstruct($traceDepth, $traceAsString, $expectedTraceDepth, $expectedTraceAsString) + { + $formatter = new MongoDBFormatter($traceDepth, $traceAsString); + + $reflTrace = new \ReflectionProperty($formatter, 'exceptionTraceAsString'); + $reflTrace->setAccessible(true); + $this->assertEquals($expectedTraceAsString, $reflTrace->getValue($formatter)); + + $reflDepth = new\ReflectionProperty($formatter, 'maxNestingLevel'); + $reflDepth->setAccessible(true); + $this->assertEquals($expectedTraceDepth, $reflDepth->getValue($formatter)); + } + + public function testSimpleFormat() + { + $record = array( + 'message' => 'some log message', + 'context' => array(), + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'test', + 'datetime' => new \DateTime('2014-02-01 00:00:00'), + 'extra' => array(), + ); + + $formatter = new MongoDBFormatter(); + $formattedRecord = $formatter->format($record); + + $this->assertCount(7, $formattedRecord); + $this->assertEquals('some log message', $formattedRecord['message']); + $this->assertEquals(array(), $formattedRecord['context']); + $this->assertEquals(Logger::WARNING, $formattedRecord['level']); + $this->assertEquals(Logger::getLevelName(Logger::WARNING), $formattedRecord['level_name']); + $this->assertEquals('test', $formattedRecord['channel']); + $this->assertInstanceOf('\MongoDate', $formattedRecord['datetime']); + $this->assertEquals('0.00000000 1391212800', $formattedRecord['datetime']->__toString()); + $this->assertEquals(array(), $formattedRecord['extra']); + } + + public function testRecursiveFormat() + { + $someObject = new \stdClass(); + $someObject->foo = 'something'; + $someObject->bar = 'stuff'; + + $record = array( + 'message' => 'some log message', + 'context' => array( + 'stuff' => new \DateTime('2014-02-01 02:31:33'), + 'some_object' => $someObject, + 'context_string' => 'some string', + 'context_int' => 123456, + 'except' => new \Exception('exception message', 987), + ), + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'test', + 'datetime' => new \DateTime('2014-02-01 00:00:00'), + 'extra' => array(), + ); + + $formatter = new MongoDBFormatter(); + $formattedRecord = $formatter->format($record); + + $this->assertCount(5, $formattedRecord['context']); + $this->assertInstanceOf('\MongoDate', $formattedRecord['context']['stuff']); + $this->assertEquals('0.00000000 1391221893', $formattedRecord['context']['stuff']->__toString()); + $this->assertEquals( + array( + 'foo' => 'something', + 'bar' => 'stuff', + 'class' => 'stdClass', + ), + $formattedRecord['context']['some_object'] + ); + $this->assertEquals('some string', $formattedRecord['context']['context_string']); + $this->assertEquals(123456, $formattedRecord['context']['context_int']); + + $this->assertCount(5, $formattedRecord['context']['except']); + $this->assertEquals('exception message', $formattedRecord['context']['except']['message']); + $this->assertEquals(987, $formattedRecord['context']['except']['code']); + $this->assertInternalType('string', $formattedRecord['context']['except']['file']); + $this->assertInternalType('integer', $formattedRecord['context']['except']['code']); + $this->assertInternalType('string', $formattedRecord['context']['except']['trace']); + $this->assertEquals('Exception', $formattedRecord['context']['except']['class']); + } + + public function testFormatDepthArray() + { + $record = array( + 'message' => 'some log message', + 'context' => array( + 'nest2' => array( + 'property' => 'anything', + 'nest3' => array( + 'nest4' => 'value', + 'property' => 'nothing', + ), + ), + ), + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'test', + 'datetime' => new \DateTime('2014-02-01 00:00:00'), + 'extra' => array(), + ); + + $formatter = new MongoDBFormatter(2); + $formattedResult = $formatter->format($record); + + $this->assertEquals( + array( + 'nest2' => array( + 'property' => 'anything', + 'nest3' => '[...]', + ), + ), + $formattedResult['context'] + ); + } + + public function testFormatDepthArrayInfiniteNesting() + { + $record = array( + 'message' => 'some log message', + 'context' => array( + 'nest2' => array( + 'property' => 'something', + 'nest3' => array( + 'property' => 'anything', + 'nest4' => array( + 'property' => 'nothing', + ), + ), + ), + ), + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'test', + 'datetime' => new \DateTime('2014-02-01 00:00:00'), + 'extra' => array(), + ); + + $formatter = new MongoDBFormatter(0); + $formattedResult = $formatter->format($record); + + $this->assertEquals( + array( + 'nest2' => array( + 'property' => 'something', + 'nest3' => array( + 'property' => 'anything', + 'nest4' => array( + 'property' => 'nothing', + ), + ), + ), + ), + $formattedResult['context'] + ); + } + + public function testFormatDepthObjects() + { + $someObject = new \stdClass(); + $someObject->property = 'anything'; + $someObject->nest3 = new \stdClass(); + $someObject->nest3->property = 'nothing'; + $someObject->nest3->nest4 = 'invisible'; + + $record = array( + 'message' => 'some log message', + 'context' => array( + 'nest2' => $someObject, + ), + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'test', + 'datetime' => new \DateTime('2014-02-01 00:00:00'), + 'extra' => array(), + ); + + $formatter = new MongoDBFormatter(2, true); + $formattedResult = $formatter->format($record); + + $this->assertEquals( + array( + 'nest2' => array( + 'property' => 'anything', + 'nest3' => '[...]', + 'class' => 'stdClass', + ), + ), + $formattedResult['context'] + ); + } + + public function testFormatDepthException() + { + $record = array( + 'message' => 'some log message', + 'context' => array( + 'nest2' => new \Exception('exception message', 987), + ), + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'test', + 'datetime' => new \DateTime('2014-02-01 00:00:00'), + 'extra' => array(), + ); + + $formatter = new MongoDBFormatter(2, false); + $formattedRecord = $formatter->format($record); + + $this->assertEquals('exception message', $formattedRecord['context']['nest2']['message']); + $this->assertEquals(987, $formattedRecord['context']['nest2']['code']); + $this->assertEquals('[...]', $formattedRecord['context']['nest2']['trace']); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php new file mode 100644 index 0000000..57bcdf9 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/NormalizerFormatterTest.php @@ -0,0 +1,423 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +/** + * @covers Monolog\Formatter\NormalizerFormatter + */ +class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase +{ + public function tearDown() + { + \PHPUnit_Framework_Error_Warning::$enabled = true; + + return parent::tearDown(); + } + + public function testFormat() + { + $formatter = new NormalizerFormatter('Y-m-d'); + $formatted = $formatter->format(array( + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'message' => 'foo', + 'datetime' => new \DateTime, + 'extra' => array('foo' => new TestFooNorm, 'bar' => new TestBarNorm, 'baz' => array(), 'res' => fopen('php://memory', 'rb')), + 'context' => array( + 'foo' => 'bar', + 'baz' => 'qux', + 'inf' => INF, + '-inf' => -INF, + 'nan' => acos(4), + ), + )); + + $this->assertEquals(array( + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'message' => 'foo', + 'datetime' => date('Y-m-d'), + 'extra' => array( + 'foo' => '[object] (Monolog\\Formatter\\TestFooNorm: {"foo":"foo"})', + 'bar' => '[object] (Monolog\\Formatter\\TestBarNorm: bar)', + 'baz' => array(), + 'res' => '[resource] (stream)', + ), + 'context' => array( + 'foo' => 'bar', + 'baz' => 'qux', + 'inf' => 'INF', + '-inf' => '-INF', + 'nan' => 'NaN', + ), + ), $formatted); + } + + public function testFormatExceptions() + { + $formatter = new NormalizerFormatter('Y-m-d'); + $e = new \LogicException('bar'); + $e2 = new \RuntimeException('foo', 0, $e); + $formatted = $formatter->format(array( + 'exception' => $e2, + )); + + $this->assertGreaterThan(5, count($formatted['exception']['trace'])); + $this->assertTrue(isset($formatted['exception']['previous'])); + unset($formatted['exception']['trace'], $formatted['exception']['previous']); + + $this->assertEquals(array( + 'exception' => array( + 'class' => get_class($e2), + 'message' => $e2->getMessage(), + 'code' => $e2->getCode(), + 'file' => $e2->getFile().':'.$e2->getLine(), + ), + ), $formatted); + } + + public function testFormatSoapFaultException() + { + if (!class_exists('SoapFault')) { + $this->markTestSkipped('Requires the soap extension'); + } + + $formatter = new NormalizerFormatter('Y-m-d'); + $e = new \SoapFault('foo', 'bar', 'hello', 'world'); + $formatted = $formatter->format(array( + 'exception' => $e, + )); + + unset($formatted['exception']['trace']); + + $this->assertEquals(array( + 'exception' => array( + 'class' => 'SoapFault', + 'message' => 'bar', + 'code' => 0, + 'file' => $e->getFile().':'.$e->getLine(), + 'faultcode' => 'foo', + 'faultactor' => 'hello', + 'detail' => 'world', + ), + ), $formatted); + } + + public function testFormatToStringExceptionHandle() + { + $formatter = new NormalizerFormatter('Y-m-d'); + $this->setExpectedException('RuntimeException', 'Could not convert to string'); + $formatter->format(array( + 'myObject' => new TestToStringError(), + )); + } + + public function testBatchFormat() + { + $formatter = new NormalizerFormatter('Y-m-d'); + $formatted = $formatter->formatBatch(array( + array( + 'level_name' => 'CRITICAL', + 'channel' => 'test', + 'message' => 'bar', + 'context' => array(), + 'datetime' => new \DateTime, + 'extra' => array(), + ), + array( + 'level_name' => 'WARNING', + 'channel' => 'log', + 'message' => 'foo', + 'context' => array(), + 'datetime' => new \DateTime, + 'extra' => array(), + ), + )); + $this->assertEquals(array( + array( + 'level_name' => 'CRITICAL', + 'channel' => 'test', + 'message' => 'bar', + 'context' => array(), + 'datetime' => date('Y-m-d'), + 'extra' => array(), + ), + array( + 'level_name' => 'WARNING', + 'channel' => 'log', + 'message' => 'foo', + 'context' => array(), + 'datetime' => date('Y-m-d'), + 'extra' => array(), + ), + ), $formatted); + } + + /** + * Test issue #137 + */ + public function testIgnoresRecursiveObjectReferences() + { + // set up the recursion + $foo = new \stdClass(); + $bar = new \stdClass(); + + $foo->bar = $bar; + $bar->foo = $foo; + + // set an error handler to assert that the error is not raised anymore + $that = $this; + set_error_handler(function ($level, $message, $file, $line, $context) use ($that) { + if (error_reporting() & $level) { + restore_error_handler(); + $that->fail("$message should not be raised"); + } + }); + + $formatter = new NormalizerFormatter(); + $reflMethod = new \ReflectionMethod($formatter, 'toJson'); + $reflMethod->setAccessible(true); + $res = $reflMethod->invoke($formatter, array($foo, $bar), true); + + restore_error_handler(); + + $this->assertEquals(@json_encode(array($foo, $bar)), $res); + } + + public function testIgnoresInvalidTypes() + { + // set up the recursion + $resource = fopen(__FILE__, 'r'); + + // set an error handler to assert that the error is not raised anymore + $that = $this; + set_error_handler(function ($level, $message, $file, $line, $context) use ($that) { + if (error_reporting() & $level) { + restore_error_handler(); + $that->fail("$message should not be raised"); + } + }); + + $formatter = new NormalizerFormatter(); + $reflMethod = new \ReflectionMethod($formatter, 'toJson'); + $reflMethod->setAccessible(true); + $res = $reflMethod->invoke($formatter, array($resource), true); + + restore_error_handler(); + + $this->assertEquals(@json_encode(array($resource)), $res); + } + + public function testNormalizeHandleLargeArrays() + { + $formatter = new NormalizerFormatter(); + $largeArray = range(1, 2000); + + $res = $formatter->format(array( + 'level_name' => 'CRITICAL', + 'channel' => 'test', + 'message' => 'bar', + 'context' => array($largeArray), + 'datetime' => new \DateTime, + 'extra' => array(), + )); + + $this->assertCount(1000, $res['context'][0]); + $this->assertEquals('Over 1000 items (2000 total), aborting normalization', $res['context'][0]['...']); + } + + /** + * @expectedException RuntimeException + */ + public function testThrowsOnInvalidEncoding() + { + if (version_compare(PHP_VERSION, '5.5.0', '<')) { + // Ignore the warning that will be emitted by PHP <5.5.0 + \PHPUnit_Framework_Error_Warning::$enabled = false; + } + $formatter = new NormalizerFormatter(); + $reflMethod = new \ReflectionMethod($formatter, 'toJson'); + $reflMethod->setAccessible(true); + + // send an invalid unicode sequence as a object that can't be cleaned + $record = new \stdClass; + $record->message = "\xB1\x31"; + $res = $reflMethod->invoke($formatter, $record); + if (PHP_VERSION_ID < 50500 && $res === '{"message":null}') { + throw new \RuntimeException('PHP 5.3/5.4 throw a warning and null the value instead of returning false entirely'); + } + } + + public function testConvertsInvalidEncodingAsLatin9() + { + if (version_compare(PHP_VERSION, '5.5.0', '<')) { + // Ignore the warning that will be emitted by PHP <5.5.0 + \PHPUnit_Framework_Error_Warning::$enabled = false; + } + $formatter = new NormalizerFormatter(); + $reflMethod = new \ReflectionMethod($formatter, 'toJson'); + $reflMethod->setAccessible(true); + + $res = $reflMethod->invoke($formatter, array('message' => "\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE")); + + if (version_compare(PHP_VERSION, '5.5.0', '>=')) { + $this->assertSame('{"message":"€ŠšŽžŒœŸ"}', $res); + } else { + // PHP <5.5 does not return false for an element encoding failure, + // instead it emits a warning (possibly) and nulls the value. + $this->assertSame('{"message":null}', $res); + } + } + + /** + * @param mixed $in Input + * @param mixed $expect Expected output + * @covers Monolog\Formatter\NormalizerFormatter::detectAndCleanUtf8 + * @dataProvider providesDetectAndCleanUtf8 + */ + public function testDetectAndCleanUtf8($in, $expect) + { + $formatter = new NormalizerFormatter(); + $formatter->detectAndCleanUtf8($in); + $this->assertSame($expect, $in); + } + + public function providesDetectAndCleanUtf8() + { + $obj = new \stdClass; + + return array( + 'null' => array(null, null), + 'int' => array(123, 123), + 'float' => array(123.45, 123.45), + 'bool false' => array(false, false), + 'bool true' => array(true, true), + 'ascii string' => array('abcdef', 'abcdef'), + 'latin9 string' => array("\xB1\x31\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE\xFF", '±1€ŠšŽžŒœŸÿ'), + 'unicode string' => array('¤¦¨´¸¼½¾€ŠšŽžŒœŸ', '¤¦¨´¸¼½¾€ŠšŽžŒœŸ'), + 'empty array' => array(array(), array()), + 'array' => array(array('abcdef'), array('abcdef')), + 'object' => array($obj, $obj), + ); + } + + /** + * @param int $code + * @param string $msg + * @dataProvider providesHandleJsonErrorFailure + */ + public function testHandleJsonErrorFailure($code, $msg) + { + $formatter = new NormalizerFormatter(); + $reflMethod = new \ReflectionMethod($formatter, 'handleJsonError'); + $reflMethod->setAccessible(true); + + $this->setExpectedException('RuntimeException', $msg); + $reflMethod->invoke($formatter, $code, 'faked'); + } + + public function providesHandleJsonErrorFailure() + { + return array( + 'depth' => array(JSON_ERROR_DEPTH, 'Maximum stack depth exceeded'), + 'state' => array(JSON_ERROR_STATE_MISMATCH, 'Underflow or the modes mismatch'), + 'ctrl' => array(JSON_ERROR_CTRL_CHAR, 'Unexpected control character found'), + 'default' => array(-1, 'Unknown error'), + ); + } + + public function testExceptionTraceWithArgs() + { + if (defined('HHVM_VERSION')) { + $this->markTestSkipped('Not supported in HHVM since it detects errors differently'); + } + + // This happens i.e. in React promises or Guzzle streams where stream wrappers are registered + // and no file or line are included in the trace because it's treated as internal function + set_error_handler(function ($errno, $errstr, $errfile, $errline) { + throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); + }); + + try { + // This will contain $resource and $wrappedResource as arguments in the trace item + $resource = fopen('php://memory', 'rw+'); + fwrite($resource, 'test_resource'); + $wrappedResource = new TestFooNorm; + $wrappedResource->foo = $resource; + // Just do something stupid with a resource/wrapped resource as argument + array_keys($wrappedResource); + } catch (\Exception $e) { + restore_error_handler(); + } + + $formatter = new NormalizerFormatter(); + $record = array('context' => array('exception' => $e)); + $result = $formatter->format($record); + + $this->assertRegExp( + '%"resource":"\[resource\] \(stream\)"%', + $result['context']['exception']['trace'][0] + ); + + if (version_compare(PHP_VERSION, '5.5.0', '>=')) { + $pattern = '%"wrappedResource":"\[object\] \(Monolog\\\\\\\\Formatter\\\\\\\\TestFooNorm: \)"%'; + } else { + $pattern = '%\\\\"foo\\\\":null%'; + } + + // Tests that the wrapped resource is ignored while encoding, only works for PHP <= 5.4 + $this->assertRegExp( + $pattern, + $result['context']['exception']['trace'][0] + ); + } +} + +class TestFooNorm +{ + public $foo = 'foo'; +} + +class TestBarNorm +{ + public function __toString() + { + return 'bar'; + } +} + +class TestStreamFoo +{ + public $foo; + public $resource; + + public function __construct($resource) + { + $this->resource = $resource; + $this->foo = 'BAR'; + } + + public function __toString() + { + fseek($this->resource, 0); + + return $this->foo . ' - ' . (string) stream_get_contents($this->resource); + } +} + +class TestToStringError +{ + public function __toString() + { + throw new \RuntimeException('Could not convert to string'); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/ScalarFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/ScalarFormatterTest.php new file mode 100644 index 0000000..b1c8fd4 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/ScalarFormatterTest.php @@ -0,0 +1,110 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +class ScalarFormatterTest extends \PHPUnit_Framework_TestCase +{ + private $formatter; + + public function setUp() + { + $this->formatter = new ScalarFormatter(); + } + + public function buildTrace(\Exception $e) + { + $data = array(); + $trace = $e->getTrace(); + foreach ($trace as $frame) { + if (isset($frame['file'])) { + $data[] = $frame['file'].':'.$frame['line']; + } else { + $data[] = json_encode($frame); + } + } + + return $data; + } + + public function encodeJson($data) + { + if (version_compare(PHP_VERSION, '5.4.0', '>=')) { + return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + } + + return json_encode($data); + } + + public function testFormat() + { + $exception = new \Exception('foo'); + $formatted = $this->formatter->format(array( + 'foo' => 'string', + 'bar' => 1, + 'baz' => false, + 'bam' => array(1, 2, 3), + 'bat' => array('foo' => 'bar'), + 'bap' => \DateTime::createFromFormat(\DateTime::ISO8601, '1970-01-01T00:00:00+0000'), + 'ban' => $exception, + )); + + $this->assertSame(array( + 'foo' => 'string', + 'bar' => 1, + 'baz' => false, + 'bam' => $this->encodeJson(array(1, 2, 3)), + 'bat' => $this->encodeJson(array('foo' => 'bar')), + 'bap' => '1970-01-01 00:00:00', + 'ban' => $this->encodeJson(array( + 'class' => get_class($exception), + 'message' => $exception->getMessage(), + 'code' => $exception->getCode(), + 'file' => $exception->getFile() . ':' . $exception->getLine(), + 'trace' => $this->buildTrace($exception), + )), + ), $formatted); + } + + public function testFormatWithErrorContext() + { + $context = array('file' => 'foo', 'line' => 1); + $formatted = $this->formatter->format(array( + 'context' => $context, + )); + + $this->assertSame(array( + 'context' => $this->encodeJson($context), + ), $formatted); + } + + public function testFormatWithExceptionContext() + { + $exception = new \Exception('foo'); + $formatted = $this->formatter->format(array( + 'context' => array( + 'exception' => $exception, + ), + )); + + $this->assertSame(array( + 'context' => $this->encodeJson(array( + 'exception' => array( + 'class' => get_class($exception), + 'message' => $exception->getMessage(), + 'code' => $exception->getCode(), + 'file' => $exception->getFile() . ':' . $exception->getLine(), + 'trace' => $this->buildTrace($exception), + ), + )), + ), $formatted); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Formatter/WildfireFormatterTest.php b/vendor/monolog/monolog/tests/Monolog/Formatter/WildfireFormatterTest.php new file mode 100644 index 0000000..52f15a3 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Formatter/WildfireFormatterTest.php @@ -0,0 +1,142 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Logger; + +class WildfireFormatterTest extends \PHPUnit_Framework_TestCase +{ + /** + * @covers Monolog\Formatter\WildfireFormatter::format + */ + public function testDefaultFormat() + { + $wildfire = new WildfireFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('ip' => '127.0.0.1'), + 'message' => 'log', + ); + + $message = $wildfire->format($record); + + $this->assertEquals( + '125|[{"Type":"ERROR","File":"","Line":"","Label":"meh"},' + .'{"message":"log","context":{"from":"logger"},"extra":{"ip":"127.0.0.1"}}]|', + $message + ); + } + + /** + * @covers Monolog\Formatter\WildfireFormatter::format + */ + public function testFormatWithFileAndLine() + { + $wildfire = new WildfireFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('from' => 'logger'), + 'datetime' => new \DateTime("@0"), + 'extra' => array('ip' => '127.0.0.1', 'file' => 'test', 'line' => 14), + 'message' => 'log', + ); + + $message = $wildfire->format($record); + + $this->assertEquals( + '129|[{"Type":"ERROR","File":"test","Line":14,"Label":"meh"},' + .'{"message":"log","context":{"from":"logger"},"extra":{"ip":"127.0.0.1"}}]|', + $message + ); + } + + /** + * @covers Monolog\Formatter\WildfireFormatter::format + */ + public function testFormatWithoutContext() + { + $wildfire = new WildfireFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + $message = $wildfire->format($record); + + $this->assertEquals( + '58|[{"Type":"ERROR","File":"","Line":"","Label":"meh"},"log"]|', + $message + ); + } + + /** + * @covers Monolog\Formatter\WildfireFormatter::formatBatch + * @expectedException BadMethodCallException + */ + public function testBatchFormatThrowException() + { + $wildfire = new WildfireFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array(), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + $wildfire->formatBatch(array($record)); + } + + /** + * @covers Monolog\Formatter\WildfireFormatter::format + */ + public function testTableFormat() + { + $wildfire = new WildfireFormatter(); + $record = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'table-channel', + 'context' => array( + WildfireFormatter::TABLE => array( + array('col1', 'col2', 'col3'), + array('val1', 'val2', 'val3'), + array('foo1', 'foo2', 'foo3'), + array('bar1', 'bar2', 'bar3'), + ), + ), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'table-message', + ); + + $message = $wildfire->format($record); + + $this->assertEquals( + '171|[{"Type":"TABLE","File":"","Line":"","Label":"table-channel: table-message"},[["col1","col2","col3"],["val1","val2","val3"],["foo1","foo2","foo3"],["bar1","bar2","bar3"]]]|', + $message + ); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/AbstractHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/AbstractHandlerTest.php new file mode 100644 index 0000000..568eb9d --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/AbstractHandlerTest.php @@ -0,0 +1,115 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Formatter\LineFormatter; +use Monolog\Processor\WebProcessor; + +class AbstractHandlerTest extends TestCase +{ + /** + * @covers Monolog\Handler\AbstractHandler::__construct + * @covers Monolog\Handler\AbstractHandler::getLevel + * @covers Monolog\Handler\AbstractHandler::setLevel + * @covers Monolog\Handler\AbstractHandler::getBubble + * @covers Monolog\Handler\AbstractHandler::setBubble + * @covers Monolog\Handler\AbstractHandler::getFormatter + * @covers Monolog\Handler\AbstractHandler::setFormatter + */ + public function testConstructAndGetSet() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler', array(Logger::WARNING, false)); + $this->assertEquals(Logger::WARNING, $handler->getLevel()); + $this->assertEquals(false, $handler->getBubble()); + + $handler->setLevel(Logger::ERROR); + $handler->setBubble(true); + $handler->setFormatter($formatter = new LineFormatter); + $this->assertEquals(Logger::ERROR, $handler->getLevel()); + $this->assertEquals(true, $handler->getBubble()); + $this->assertSame($formatter, $handler->getFormatter()); + } + + /** + * @covers Monolog\Handler\AbstractHandler::handleBatch + */ + public function testHandleBatch() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler'); + $handler->expects($this->exactly(2)) + ->method('handle'); + $handler->handleBatch(array($this->getRecord(), $this->getRecord())); + } + + /** + * @covers Monolog\Handler\AbstractHandler::isHandling + */ + public function testIsHandling() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler', array(Logger::WARNING, false)); + $this->assertTrue($handler->isHandling($this->getRecord())); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::DEBUG))); + } + + /** + * @covers Monolog\Handler\AbstractHandler::__construct + */ + public function testHandlesPsrStyleLevels() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler', array('warning', false)); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::DEBUG))); + $handler->setLevel('debug'); + $this->assertTrue($handler->isHandling($this->getRecord(Logger::DEBUG))); + } + + /** + * @covers Monolog\Handler\AbstractHandler::getFormatter + * @covers Monolog\Handler\AbstractHandler::getDefaultFormatter + */ + public function testGetFormatterInitializesDefault() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler'); + $this->assertInstanceOf('Monolog\Formatter\LineFormatter', $handler->getFormatter()); + } + + /** + * @covers Monolog\Handler\AbstractHandler::pushProcessor + * @covers Monolog\Handler\AbstractHandler::popProcessor + * @expectedException LogicException + */ + public function testPushPopProcessor() + { + $logger = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler'); + $processor1 = new WebProcessor; + $processor2 = new WebProcessor; + + $logger->pushProcessor($processor1); + $logger->pushProcessor($processor2); + + $this->assertEquals($processor2, $logger->popProcessor()); + $this->assertEquals($processor1, $logger->popProcessor()); + $logger->popProcessor(); + } + + /** + * @covers Monolog\Handler\AbstractHandler::pushProcessor + * @expectedException InvalidArgumentException + */ + public function testPushProcessorWithNonCallable() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler'); + + $handler->pushProcessor(new \stdClass()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/AbstractProcessingHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/AbstractProcessingHandlerTest.php new file mode 100644 index 0000000..24d4f63 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/AbstractProcessingHandlerTest.php @@ -0,0 +1,80 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Processor\WebProcessor; + +class AbstractProcessingHandlerTest extends TestCase +{ + /** + * @covers Monolog\Handler\AbstractProcessingHandler::handle + */ + public function testHandleLowerLevelMessage() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', array(Logger::WARNING, true)); + $this->assertFalse($handler->handle($this->getRecord(Logger::DEBUG))); + } + + /** + * @covers Monolog\Handler\AbstractProcessingHandler::handle + */ + public function testHandleBubbling() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', array(Logger::DEBUG, true)); + $this->assertFalse($handler->handle($this->getRecord())); + } + + /** + * @covers Monolog\Handler\AbstractProcessingHandler::handle + */ + public function testHandleNotBubbling() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', array(Logger::DEBUG, false)); + $this->assertTrue($handler->handle($this->getRecord())); + } + + /** + * @covers Monolog\Handler\AbstractProcessingHandler::handle + */ + public function testHandleIsFalseWhenNotHandled() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', array(Logger::WARNING, false)); + $this->assertTrue($handler->handle($this->getRecord())); + $this->assertFalse($handler->handle($this->getRecord(Logger::DEBUG))); + } + + /** + * @covers Monolog\Handler\AbstractProcessingHandler::processRecord + */ + public function testProcessRecord() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler'); + $handler->pushProcessor(new WebProcessor(array( + 'REQUEST_URI' => '', + 'REQUEST_METHOD' => '', + 'REMOTE_ADDR' => '', + 'SERVER_NAME' => '', + 'UNIQUE_ID' => '', + ))); + $handledRecord = null; + $handler->expects($this->once()) + ->method('write') + ->will($this->returnCallback(function ($record) use (&$handledRecord) { + $handledRecord = $record; + })) + ; + $handler->handle($this->getRecord()); + $this->assertEquals(6, count($handledRecord['extra'])); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/AmqpHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/AmqpHandlerTest.php new file mode 100644 index 0000000..8e0e723 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/AmqpHandlerTest.php @@ -0,0 +1,136 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use PhpAmqpLib\Message\AMQPMessage; +use PhpAmqpLib\Connection\AMQPConnection; + +/** + * @covers Monolog\Handler\RotatingFileHandler + */ +class AmqpHandlerTest extends TestCase +{ + public function testHandleAmqpExt() + { + if (!class_exists('AMQPConnection') || !class_exists('AMQPExchange')) { + $this->markTestSkipped("amqp-php not installed"); + } + + if (!class_exists('AMQPChannel')) { + $this->markTestSkipped("Please update AMQP to version >= 1.0"); + } + + $messages = array(); + + $exchange = $this->getMock('AMQPExchange', array('publish', 'setName'), array(), '', false); + $exchange->expects($this->once()) + ->method('setName') + ->with('log') + ; + $exchange->expects($this->any()) + ->method('publish') + ->will($this->returnCallback(function ($message, $routing_key, $flags = 0, $attributes = array()) use (&$messages) { + $messages[] = array($message, $routing_key, $flags, $attributes); + })) + ; + + $handler = new AmqpHandler($exchange, 'log'); + + $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + + $expected = array( + array( + 'message' => 'test', + 'context' => array( + 'data' => array(), + 'foo' => 34, + ), + 'level' => 300, + 'level_name' => 'WARNING', + 'channel' => 'test', + 'extra' => array(), + ), + 'warn.test', + 0, + array( + 'delivery_mode' => 2, + 'content_type' => 'application/json', + ), + ); + + $handler->handle($record); + + $this->assertCount(1, $messages); + $messages[0][0] = json_decode($messages[0][0], true); + unset($messages[0][0]['datetime']); + $this->assertEquals($expected, $messages[0]); + } + + public function testHandlePhpAmqpLib() + { + if (!class_exists('PhpAmqpLib\Connection\AMQPConnection')) { + $this->markTestSkipped("php-amqplib not installed"); + } + + $messages = array(); + + $exchange = $this->getMock('PhpAmqpLib\Channel\AMQPChannel', array('basic_publish', '__destruct'), array(), '', false); + + $exchange->expects($this->any()) + ->method('basic_publish') + ->will($this->returnCallback(function (AMQPMessage $msg, $exchange = "", $routing_key = "", $mandatory = false, $immediate = false, $ticket = null) use (&$messages) { + $messages[] = array($msg, $exchange, $routing_key, $mandatory, $immediate, $ticket); + })) + ; + + $handler = new AmqpHandler($exchange, 'log'); + + $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + + $expected = array( + array( + 'message' => 'test', + 'context' => array( + 'data' => array(), + 'foo' => 34, + ), + 'level' => 300, + 'level_name' => 'WARNING', + 'channel' => 'test', + 'extra' => array(), + ), + 'log', + 'warn.test', + false, + false, + null, + array( + 'delivery_mode' => 2, + 'content_type' => 'application/json', + ), + ); + + $handler->handle($record); + + $this->assertCount(1, $messages); + + /* @var $msg AMQPMessage */ + $msg = $messages[0][0]; + $messages[0][0] = json_decode($msg->body, true); + $messages[0][] = $msg->get_properties(); + unset($messages[0][0]['datetime']); + + $this->assertEquals($expected, $messages[0]); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/BrowserConsoleHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/BrowserConsoleHandlerTest.php new file mode 100644 index 0000000..ffb1d74 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/BrowserConsoleHandlerTest.php @@ -0,0 +1,130 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @covers Monolog\Handler\BrowserConsoleHandlerTest + */ +class BrowserConsoleHandlerTest extends TestCase +{ + protected function setUp() + { + BrowserConsoleHandler::reset(); + } + + protected function generateScript() + { + $reflMethod = new \ReflectionMethod('Monolog\Handler\BrowserConsoleHandler', 'generateScript'); + $reflMethod->setAccessible(true); + + return $reflMethod->invoke(null); + } + + public function testStyling() + { + $handler = new BrowserConsoleHandler(); + $handler->setFormatter($this->getIdentityFormatter()); + + $handler->handle($this->getRecord(Logger::DEBUG, 'foo[[bar]]{color: red}')); + + $expected = <<assertEquals($expected, $this->generateScript()); + } + + public function testEscaping() + { + $handler = new BrowserConsoleHandler(); + $handler->setFormatter($this->getIdentityFormatter()); + + $handler->handle($this->getRecord(Logger::DEBUG, "[foo] [[\"bar\n[baz]\"]]{color: red}")); + + $expected = <<assertEquals($expected, $this->generateScript()); + } + + public function testAutolabel() + { + $handler = new BrowserConsoleHandler(); + $handler->setFormatter($this->getIdentityFormatter()); + + $handler->handle($this->getRecord(Logger::DEBUG, '[[foo]]{macro: autolabel}')); + $handler->handle($this->getRecord(Logger::DEBUG, '[[bar]]{macro: autolabel}')); + $handler->handle($this->getRecord(Logger::DEBUG, '[[foo]]{macro: autolabel}')); + + $expected = <<assertEquals($expected, $this->generateScript()); + } + + public function testContext() + { + $handler = new BrowserConsoleHandler(); + $handler->setFormatter($this->getIdentityFormatter()); + + $handler->handle($this->getRecord(Logger::DEBUG, 'test', array('foo' => 'bar'))); + + $expected = <<assertEquals($expected, $this->generateScript()); + } + + public function testConcurrentHandlers() + { + $handler1 = new BrowserConsoleHandler(); + $handler1->setFormatter($this->getIdentityFormatter()); + + $handler2 = new BrowserConsoleHandler(); + $handler2->setFormatter($this->getIdentityFormatter()); + + $handler1->handle($this->getRecord(Logger::DEBUG, 'test1')); + $handler2->handle($this->getRecord(Logger::DEBUG, 'test2')); + $handler1->handle($this->getRecord(Logger::DEBUG, 'test3')); + $handler2->handle($this->getRecord(Logger::DEBUG, 'test4')); + + $expected = <<assertEquals($expected, $this->generateScript()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/BufferHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/BufferHandlerTest.php new file mode 100644 index 0000000..da8b3c3 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/BufferHandlerTest.php @@ -0,0 +1,158 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +class BufferHandlerTest extends TestCase +{ + private $shutdownCheckHandler; + + /** + * @covers Monolog\Handler\BufferHandler::__construct + * @covers Monolog\Handler\BufferHandler::handle + * @covers Monolog\Handler\BufferHandler::close + */ + public function testHandleBuffers() + { + $test = new TestHandler(); + $handler = new BufferHandler($test); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $this->assertFalse($test->hasDebugRecords()); + $this->assertFalse($test->hasInfoRecords()); + $handler->close(); + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue(count($test->getRecords()) === 2); + } + + /** + * @covers Monolog\Handler\BufferHandler::close + * @covers Monolog\Handler\BufferHandler::flush + */ + public function testPropagatesRecordsAtEndOfRequest() + { + $test = new TestHandler(); + $handler = new BufferHandler($test); + $handler->handle($this->getRecord(Logger::WARNING)); + $handler->handle($this->getRecord(Logger::DEBUG)); + $this->shutdownCheckHandler = $test; + register_shutdown_function(array($this, 'checkPropagation')); + } + + public function checkPropagation() + { + if (!$this->shutdownCheckHandler->hasWarningRecords() || !$this->shutdownCheckHandler->hasDebugRecords()) { + echo '!!! BufferHandlerTest::testPropagatesRecordsAtEndOfRequest failed to verify that the messages have been propagated' . PHP_EOL; + exit(1); + } + } + + /** + * @covers Monolog\Handler\BufferHandler::handle + */ + public function testHandleBufferLimit() + { + $test = new TestHandler(); + $handler = new BufferHandler($test, 2); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $handler->handle($this->getRecord(Logger::WARNING)); + $handler->close(); + $this->assertTrue($test->hasWarningRecords()); + $this->assertTrue($test->hasInfoRecords()); + $this->assertFalse($test->hasDebugRecords()); + } + + /** + * @covers Monolog\Handler\BufferHandler::handle + */ + public function testHandleBufferLimitWithFlushOnOverflow() + { + $test = new TestHandler(); + $handler = new BufferHandler($test, 3, Logger::DEBUG, true, true); + + // send two records + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::DEBUG)); + $this->assertFalse($test->hasDebugRecords()); + $this->assertCount(0, $test->getRecords()); + + // overflow + $handler->handle($this->getRecord(Logger::INFO)); + $this->assertTrue($test->hasDebugRecords()); + $this->assertCount(3, $test->getRecords()); + + // should buffer again + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertCount(3, $test->getRecords()); + + $handler->close(); + $this->assertCount(5, $test->getRecords()); + $this->assertTrue($test->hasWarningRecords()); + $this->assertTrue($test->hasInfoRecords()); + } + + /** + * @covers Monolog\Handler\BufferHandler::handle + */ + public function testHandleLevel() + { + $test = new TestHandler(); + $handler = new BufferHandler($test, 0, Logger::INFO); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $handler->handle($this->getRecord(Logger::WARNING)); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->close(); + $this->assertTrue($test->hasWarningRecords()); + $this->assertTrue($test->hasInfoRecords()); + $this->assertFalse($test->hasDebugRecords()); + } + + /** + * @covers Monolog\Handler\BufferHandler::flush + */ + public function testFlush() + { + $test = new TestHandler(); + $handler = new BufferHandler($test, 0); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $handler->flush(); + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue($test->hasDebugRecords()); + $this->assertFalse($test->hasWarningRecords()); + } + + /** + * @covers Monolog\Handler\BufferHandler::handle + */ + public function testHandleUsesProcessors() + { + $test = new TestHandler(); + $handler = new BufferHandler($test); + $handler->pushProcessor(function ($record) { + $record['extra']['foo'] = true; + + return $record; + }); + $handler->handle($this->getRecord(Logger::WARNING)); + $handler->flush(); + $this->assertTrue($test->hasWarningRecords()); + $records = $test->getRecords(); + $this->assertTrue($records[0]['extra']['foo']); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/ChromePHPHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/ChromePHPHandlerTest.php new file mode 100644 index 0000000..0449f8b --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/ChromePHPHandlerTest.php @@ -0,0 +1,156 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @covers Monolog\Handler\ChromePHPHandler + */ +class ChromePHPHandlerTest extends TestCase +{ + protected function setUp() + { + TestChromePHPHandler::reset(); + $_SERVER['HTTP_USER_AGENT'] = 'Monolog Test; Chrome/1.0'; + } + + /** + * @dataProvider agentsProvider + */ + public function testHeaders($agent) + { + $_SERVER['HTTP_USER_AGENT'] = $agent; + + $handler = new TestChromePHPHandler(); + $handler->setFormatter($this->getIdentityFormatter()); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::WARNING)); + + $expected = array( + 'X-ChromeLogger-Data' => base64_encode(utf8_encode(json_encode(array( + 'version' => ChromePHPHandler::VERSION, + 'columns' => array('label', 'log', 'backtrace', 'type'), + 'rows' => array( + 'test', + 'test', + ), + 'request_uri' => '', + )))), + ); + + $this->assertEquals($expected, $handler->getHeaders()); + } + + public static function agentsProvider() + { + return array( + array('Monolog Test; Chrome/1.0'), + array('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'), + array('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/56.0.2924.76 Chrome/56.0.2924.76 Safari/537.36'), + array('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome Safari/537.36'), + ); + } + + public function testHeadersOverflow() + { + $handler = new TestChromePHPHandler(); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::WARNING, str_repeat('a', 150 * 1024))); + + // overflow chrome headers limit + $handler->handle($this->getRecord(Logger::WARNING, str_repeat('a', 100 * 1024))); + + $expected = array( + 'X-ChromeLogger-Data' => base64_encode(utf8_encode(json_encode(array( + 'version' => ChromePHPHandler::VERSION, + 'columns' => array('label', 'log', 'backtrace', 'type'), + 'rows' => array( + array( + 'test', + 'test', + 'unknown', + 'log', + ), + array( + 'test', + str_repeat('a', 150 * 1024), + 'unknown', + 'warn', + ), + array( + 'monolog', + 'Incomplete logs, chrome header size limit reached', + 'unknown', + 'warn', + ), + ), + 'request_uri' => '', + )))), + ); + + $this->assertEquals($expected, $handler->getHeaders()); + } + + public function testConcurrentHandlers() + { + $handler = new TestChromePHPHandler(); + $handler->setFormatter($this->getIdentityFormatter()); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::WARNING)); + + $handler2 = new TestChromePHPHandler(); + $handler2->setFormatter($this->getIdentityFormatter()); + $handler2->handle($this->getRecord(Logger::DEBUG)); + $handler2->handle($this->getRecord(Logger::WARNING)); + + $expected = array( + 'X-ChromeLogger-Data' => base64_encode(utf8_encode(json_encode(array( + 'version' => ChromePHPHandler::VERSION, + 'columns' => array('label', 'log', 'backtrace', 'type'), + 'rows' => array( + 'test', + 'test', + 'test', + 'test', + ), + 'request_uri' => '', + )))), + ); + + $this->assertEquals($expected, $handler2->getHeaders()); + } +} + +class TestChromePHPHandler extends ChromePHPHandler +{ + protected $headers = array(); + + public static function reset() + { + self::$initialized = false; + self::$overflowed = false; + self::$sendHeaders = true; + self::$json['rows'] = array(); + } + + protected function sendHeader($header, $content) + { + $this->headers[$header] = $content; + } + + public function getHeaders() + { + return $this->headers; + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/CouchDBHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/CouchDBHandlerTest.php new file mode 100644 index 0000000..9fc4b38 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/CouchDBHandlerTest.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +class CouchDBHandlerTest extends TestCase +{ + public function testHandle() + { + $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + + $handler = new CouchDBHandler(); + + try { + $handler->handle($record); + } catch (\RuntimeException $e) { + $this->markTestSkipped('Could not connect to couchdb server on http://localhost:5984'); + } + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/DeduplicationHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/DeduplicationHandlerTest.php new file mode 100644 index 0000000..e2aff86 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/DeduplicationHandlerTest.php @@ -0,0 +1,165 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +class DeduplicationHandlerTest extends TestCase +{ + /** + * @covers Monolog\Handler\DeduplicationHandler::flush + */ + public function testFlushPassthruIfAllRecordsUnderTrigger() + { + $test = new TestHandler(); + @unlink(sys_get_temp_dir().'/monolog_dedup.log'); + $handler = new DeduplicationHandler($test, sys_get_temp_dir().'/monolog_dedup.log', 0); + + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + + $handler->flush(); + + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue($test->hasDebugRecords()); + $this->assertFalse($test->hasWarningRecords()); + } + + /** + * @covers Monolog\Handler\DeduplicationHandler::flush + * @covers Monolog\Handler\DeduplicationHandler::appendRecord + */ + public function testFlushPassthruIfEmptyLog() + { + $test = new TestHandler(); + @unlink(sys_get_temp_dir().'/monolog_dedup.log'); + $handler = new DeduplicationHandler($test, sys_get_temp_dir().'/monolog_dedup.log', 0); + + $handler->handle($this->getRecord(Logger::ERROR, 'Foo:bar')); + $handler->handle($this->getRecord(Logger::CRITICAL, "Foo\nbar")); + + $handler->flush(); + + $this->assertTrue($test->hasErrorRecords()); + $this->assertTrue($test->hasCriticalRecords()); + $this->assertFalse($test->hasWarningRecords()); + } + + /** + * @covers Monolog\Handler\DeduplicationHandler::flush + * @covers Monolog\Handler\DeduplicationHandler::appendRecord + * @covers Monolog\Handler\DeduplicationHandler::isDuplicate + * @depends testFlushPassthruIfEmptyLog + */ + public function testFlushSkipsIfLogExists() + { + $test = new TestHandler(); + $handler = new DeduplicationHandler($test, sys_get_temp_dir().'/monolog_dedup.log', 0); + + $handler->handle($this->getRecord(Logger::ERROR, 'Foo:bar')); + $handler->handle($this->getRecord(Logger::CRITICAL, "Foo\nbar")); + + $handler->flush(); + + $this->assertFalse($test->hasErrorRecords()); + $this->assertFalse($test->hasCriticalRecords()); + $this->assertFalse($test->hasWarningRecords()); + } + + /** + * @covers Monolog\Handler\DeduplicationHandler::flush + * @covers Monolog\Handler\DeduplicationHandler::appendRecord + * @covers Monolog\Handler\DeduplicationHandler::isDuplicate + * @depends testFlushPassthruIfEmptyLog + */ + public function testFlushPassthruIfLogTooOld() + { + $test = new TestHandler(); + $handler = new DeduplicationHandler($test, sys_get_temp_dir().'/monolog_dedup.log', 0); + + $record = $this->getRecord(Logger::ERROR); + $record['datetime']->modify('+62seconds'); + $handler->handle($record); + $record = $this->getRecord(Logger::CRITICAL); + $record['datetime']->modify('+62seconds'); + $handler->handle($record); + + $handler->flush(); + + $this->assertTrue($test->hasErrorRecords()); + $this->assertTrue($test->hasCriticalRecords()); + $this->assertFalse($test->hasWarningRecords()); + } + + /** + * @covers Monolog\Handler\DeduplicationHandler::flush + * @covers Monolog\Handler\DeduplicationHandler::appendRecord + * @covers Monolog\Handler\DeduplicationHandler::isDuplicate + * @covers Monolog\Handler\DeduplicationHandler::collectLogs + */ + public function testGcOldLogs() + { + $test = new TestHandler(); + @unlink(sys_get_temp_dir().'/monolog_dedup.log'); + $handler = new DeduplicationHandler($test, sys_get_temp_dir().'/monolog_dedup.log', 0); + + // handle two records from yesterday, and one recent + $record = $this->getRecord(Logger::ERROR); + $record['datetime']->modify('-1day -10seconds'); + $handler->handle($record); + $record2 = $this->getRecord(Logger::CRITICAL); + $record2['datetime']->modify('-1day -10seconds'); + $handler->handle($record2); + $record3 = $this->getRecord(Logger::CRITICAL); + $record3['datetime']->modify('-30seconds'); + $handler->handle($record3); + + // log is written as none of them are duplicate + $handler->flush(); + $this->assertSame( + $record['datetime']->getTimestamp() . ":ERROR:test\n" . + $record2['datetime']->getTimestamp() . ":CRITICAL:test\n" . + $record3['datetime']->getTimestamp() . ":CRITICAL:test\n", + file_get_contents(sys_get_temp_dir() . '/monolog_dedup.log') + ); + $this->assertTrue($test->hasErrorRecords()); + $this->assertTrue($test->hasCriticalRecords()); + $this->assertFalse($test->hasWarningRecords()); + + // clear test handler + $test->clear(); + $this->assertFalse($test->hasErrorRecords()); + $this->assertFalse($test->hasCriticalRecords()); + + // log new records, duplicate log gets GC'd at the end of this flush call + $handler->handle($record = $this->getRecord(Logger::ERROR)); + $handler->handle($record2 = $this->getRecord(Logger::CRITICAL)); + $handler->flush(); + + // log should now contain the new errors and the previous one that was recent enough + $this->assertSame( + $record3['datetime']->getTimestamp() . ":CRITICAL:test\n" . + $record['datetime']->getTimestamp() . ":ERROR:test\n" . + $record2['datetime']->getTimestamp() . ":CRITICAL:test\n", + file_get_contents(sys_get_temp_dir() . '/monolog_dedup.log') + ); + $this->assertTrue($test->hasErrorRecords()); + $this->assertTrue($test->hasCriticalRecords()); + $this->assertFalse($test->hasWarningRecords()); + } + + public static function tearDownAfterClass() + { + @unlink(sys_get_temp_dir().'/monolog_dedup.log'); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php new file mode 100644 index 0000000..d67da90 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php @@ -0,0 +1,52 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +class DoctrineCouchDBHandlerTest extends TestCase +{ + protected function setup() + { + if (!class_exists('Doctrine\CouchDB\CouchDBClient')) { + $this->markTestSkipped('The "doctrine/couchdb" package is not installed'); + } + } + + public function testHandle() + { + $client = $this->getMockBuilder('Doctrine\\CouchDB\\CouchDBClient') + ->setMethods(array('postDocument')) + ->disableOriginalConstructor() + ->getMock(); + + $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + + $expected = array( + 'message' => 'test', + 'context' => array('data' => '[object] (stdClass: {})', 'foo' => 34), + 'level' => Logger::WARNING, + 'level_name' => 'WARNING', + 'channel' => 'test', + 'datetime' => $record['datetime']->format('Y-m-d H:i:s'), + 'extra' => array(), + ); + + $client->expects($this->once()) + ->method('postDocument') + ->with($expected); + + $handler = new DoctrineCouchDBHandler($client); + $handler->handle($record); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/DynamoDbHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/DynamoDbHandlerTest.php new file mode 100644 index 0000000..2e6c348 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/DynamoDbHandlerTest.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; + +class DynamoDbHandlerTest extends TestCase +{ + private $client; + + public function setUp() + { + if (!class_exists('Aws\DynamoDb\DynamoDbClient')) { + $this->markTestSkipped('aws/aws-sdk-php not installed'); + } + + $this->client = $this->getMockBuilder('Aws\DynamoDb\DynamoDbClient') + ->setMethods(array('formatAttributes', '__call')) + ->disableOriginalConstructor()->getMock(); + } + + public function testConstruct() + { + $this->assertInstanceOf('Monolog\Handler\DynamoDbHandler', new DynamoDbHandler($this->client, 'foo')); + } + + public function testInterface() + { + $this->assertInstanceOf('Monolog\Handler\HandlerInterface', new DynamoDbHandler($this->client, 'foo')); + } + + public function testGetFormatter() + { + $handler = new DynamoDbHandler($this->client, 'foo'); + $this->assertInstanceOf('Monolog\Formatter\ScalarFormatter', $handler->getFormatter()); + } + + public function testHandle() + { + $record = $this->getRecord(); + $formatter = $this->getMock('Monolog\Formatter\FormatterInterface'); + $formatted = array('foo' => 1, 'bar' => 2); + $handler = new DynamoDbHandler($this->client, 'foo'); + $handler->setFormatter($formatter); + + $isV3 = defined('Aws\Sdk::VERSION') && version_compare(\Aws\Sdk::VERSION, '3.0', '>='); + if ($isV3) { + $expFormatted = array('foo' => array('N' => 1), 'bar' => array('N' => 2)); + } else { + $expFormatted = $formatted; + } + + $formatter + ->expects($this->once()) + ->method('format') + ->with($record) + ->will($this->returnValue($formatted)); + $this->client + ->expects($isV3 ? $this->never() : $this->once()) + ->method('formatAttributes') + ->with($this->isType('array')) + ->will($this->returnValue($formatted)); + $this->client + ->expects($this->once()) + ->method('__call') + ->with('putItem', array(array( + 'TableName' => 'foo', + 'Item' => $expFormatted, + ))); + + $handler->handle($record); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/ElasticSearchHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/ElasticSearchHandlerTest.php new file mode 100644 index 0000000..1687074 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/ElasticSearchHandlerTest.php @@ -0,0 +1,239 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\ElasticaFormatter; +use Monolog\Formatter\NormalizerFormatter; +use Monolog\TestCase; +use Monolog\Logger; +use Elastica\Client; +use Elastica\Request; +use Elastica\Response; + +class ElasticSearchHandlerTest extends TestCase +{ + /** + * @var Client mock + */ + protected $client; + + /** + * @var array Default handler options + */ + protected $options = array( + 'index' => 'my_index', + 'type' => 'doc_type', + ); + + public function setUp() + { + // Elastica lib required + if (!class_exists("Elastica\Client")) { + $this->markTestSkipped("ruflin/elastica not installed"); + } + + // base mock Elastica Client object + $this->client = $this->getMockBuilder('Elastica\Client') + ->setMethods(array('addDocuments')) + ->disableOriginalConstructor() + ->getMock(); + } + + /** + * @covers Monolog\Handler\ElasticSearchHandler::write + * @covers Monolog\Handler\ElasticSearchHandler::handleBatch + * @covers Monolog\Handler\ElasticSearchHandler::bulkSend + * @covers Monolog\Handler\ElasticSearchHandler::getDefaultFormatter + */ + public function testHandle() + { + // log message + $msg = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('foo' => 7, 'bar', 'class' => new \stdClass), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + // format expected result + $formatter = new ElasticaFormatter($this->options['index'], $this->options['type']); + $expected = array($formatter->format($msg)); + + // setup ES client mock + $this->client->expects($this->any()) + ->method('addDocuments') + ->with($expected); + + // perform tests + $handler = new ElasticSearchHandler($this->client, $this->options); + $handler->handle($msg); + $handler->handleBatch(array($msg)); + } + + /** + * @covers Monolog\Handler\ElasticSearchHandler::setFormatter + */ + public function testSetFormatter() + { + $handler = new ElasticSearchHandler($this->client); + $formatter = new ElasticaFormatter('index_new', 'type_new'); + $handler->setFormatter($formatter); + $this->assertInstanceOf('Monolog\Formatter\ElasticaFormatter', $handler->getFormatter()); + $this->assertEquals('index_new', $handler->getFormatter()->getIndex()); + $this->assertEquals('type_new', $handler->getFormatter()->getType()); + } + + /** + * @covers Monolog\Handler\ElasticSearchHandler::setFormatter + * @expectedException InvalidArgumentException + * @expectedExceptionMessage ElasticSearchHandler is only compatible with ElasticaFormatter + */ + public function testSetFormatterInvalid() + { + $handler = new ElasticSearchHandler($this->client); + $formatter = new NormalizerFormatter(); + $handler->setFormatter($formatter); + } + + /** + * @covers Monolog\Handler\ElasticSearchHandler::__construct + * @covers Monolog\Handler\ElasticSearchHandler::getOptions + */ + public function testOptions() + { + $expected = array( + 'index' => $this->options['index'], + 'type' => $this->options['type'], + 'ignore_error' => false, + ); + $handler = new ElasticSearchHandler($this->client, $this->options); + $this->assertEquals($expected, $handler->getOptions()); + } + + /** + * @covers Monolog\Handler\ElasticSearchHandler::bulkSend + * @dataProvider providerTestConnectionErrors + */ + public function testConnectionErrors($ignore, $expectedError) + { + $clientOpts = array('host' => '127.0.0.1', 'port' => 1); + $client = new Client($clientOpts); + $handlerOpts = array('ignore_error' => $ignore); + $handler = new ElasticSearchHandler($client, $handlerOpts); + + if ($expectedError) { + $this->setExpectedException($expectedError[0], $expectedError[1]); + $handler->handle($this->getRecord()); + } else { + $this->assertFalse($handler->handle($this->getRecord())); + } + } + + /** + * @return array + */ + public function providerTestConnectionErrors() + { + return array( + array(false, array('RuntimeException', 'Error sending messages to Elasticsearch')), + array(true, false), + ); + } + + /** + * Integration test using localhost Elastic Search server + * + * @covers Monolog\Handler\ElasticSearchHandler::__construct + * @covers Monolog\Handler\ElasticSearchHandler::handleBatch + * @covers Monolog\Handler\ElasticSearchHandler::bulkSend + * @covers Monolog\Handler\ElasticSearchHandler::getDefaultFormatter + */ + public function testHandleIntegration() + { + $msg = array( + 'level' => Logger::ERROR, + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'context' => array('foo' => 7, 'bar', 'class' => new \stdClass), + 'datetime' => new \DateTime("@0"), + 'extra' => array(), + 'message' => 'log', + ); + + $expected = $msg; + $expected['datetime'] = $msg['datetime']->format(\DateTime::ISO8601); + $expected['context'] = array( + 'class' => '[object] (stdClass: {})', + 'foo' => 7, + 0 => 'bar', + ); + + $client = new Client(); + $handler = new ElasticSearchHandler($client, $this->options); + try { + $handler->handleBatch(array($msg)); + } catch (\RuntimeException $e) { + $this->markTestSkipped("Cannot connect to Elastic Search server on localhost"); + } + + // check document id from ES server response + $documentId = $this->getCreatedDocId($client->getLastResponse()); + $this->assertNotEmpty($documentId, 'No elastic document id received'); + + // retrieve document source from ES and validate + $document = $this->getDocSourceFromElastic( + $client, + $this->options['index'], + $this->options['type'], + $documentId + ); + $this->assertEquals($expected, $document); + + // remove test index from ES + $client->request("/{$this->options['index']}", Request::DELETE); + } + + /** + * Return last created document id from ES response + * @param Response $response Elastica Response object + * @return string|null + */ + protected function getCreatedDocId(Response $response) + { + $data = $response->getData(); + if (!empty($data['items'][0]['create']['_id'])) { + return $data['items'][0]['create']['_id']; + } + } + + /** + * Retrieve document by id from Elasticsearch + * @param Client $client Elastica client + * @param string $index + * @param string $type + * @param string $documentId + * @return array + */ + protected function getDocSourceFromElastic(Client $client, $index, $type, $documentId) + { + $resp = $client->request("/{$index}/{$type}/{$documentId}", Request::GET); + $data = $resp->getData(); + if (!empty($data['_source'])) { + return $data['_source']; + } + + return array(); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/ErrorLogHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/ErrorLogHandlerTest.php new file mode 100644 index 0000000..99785cb --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/ErrorLogHandlerTest.php @@ -0,0 +1,66 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Formatter\LineFormatter; + +function error_log() +{ + $GLOBALS['error_log'][] = func_get_args(); +} + +class ErrorLogHandlerTest extends TestCase +{ + protected function setUp() + { + $GLOBALS['error_log'] = array(); + } + + /** + * @covers Monolog\Handler\ErrorLogHandler::__construct + * @expectedException InvalidArgumentException + * @expectedExceptionMessage The given message type "42" is not supported + */ + public function testShouldNotAcceptAnInvalidTypeOnContructor() + { + new ErrorLogHandler(42); + } + + /** + * @covers Monolog\Handler\ErrorLogHandler::write + */ + public function testShouldLogMessagesUsingErrorLogFuncion() + { + $type = ErrorLogHandler::OPERATING_SYSTEM; + $handler = new ErrorLogHandler($type); + $handler->setFormatter(new LineFormatter('%channel%.%level_name%: %message% %context% %extra%', null, true)); + $handler->handle($this->getRecord(Logger::ERROR, "Foo\nBar\r\n\r\nBaz")); + + $this->assertSame("test.ERROR: Foo\nBar\r\n\r\nBaz [] []", $GLOBALS['error_log'][0][0]); + $this->assertSame($GLOBALS['error_log'][0][1], $type); + + $handler = new ErrorLogHandler($type, Logger::DEBUG, true, true); + $handler->setFormatter(new LineFormatter(null, null, true)); + $handler->handle($this->getRecord(Logger::ERROR, "Foo\nBar\r\n\r\nBaz")); + + $this->assertStringMatchesFormat('[%s] test.ERROR: Foo', $GLOBALS['error_log'][1][0]); + $this->assertSame($GLOBALS['error_log'][1][1], $type); + + $this->assertStringMatchesFormat('Bar', $GLOBALS['error_log'][2][0]); + $this->assertSame($GLOBALS['error_log'][2][1], $type); + + $this->assertStringMatchesFormat('Baz [] []', $GLOBALS['error_log'][3][0]); + $this->assertSame($GLOBALS['error_log'][3][1], $type); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/FilterHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/FilterHandlerTest.php new file mode 100644 index 0000000..31b7686 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/FilterHandlerTest.php @@ -0,0 +1,170 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\TestCase; + +class FilterHandlerTest extends TestCase +{ + /** + * @covers Monolog\Handler\FilterHandler::isHandling + */ + public function testIsHandling() + { + $test = new TestHandler(); + $handler = new FilterHandler($test, Logger::INFO, Logger::NOTICE); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::DEBUG))); + $this->assertTrue($handler->isHandling($this->getRecord(Logger::INFO))); + $this->assertTrue($handler->isHandling($this->getRecord(Logger::NOTICE))); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::WARNING))); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::ERROR))); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::CRITICAL))); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::ALERT))); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::EMERGENCY))); + } + + /** + * @covers Monolog\Handler\FilterHandler::handle + * @covers Monolog\Handler\FilterHandler::setAcceptedLevels + * @covers Monolog\Handler\FilterHandler::isHandling + */ + public function testHandleProcessOnlyNeededLevels() + { + $test = new TestHandler(); + $handler = new FilterHandler($test, Logger::INFO, Logger::NOTICE); + + $handler->handle($this->getRecord(Logger::DEBUG)); + $this->assertFalse($test->hasDebugRecords()); + + $handler->handle($this->getRecord(Logger::INFO)); + $this->assertTrue($test->hasInfoRecords()); + $handler->handle($this->getRecord(Logger::NOTICE)); + $this->assertTrue($test->hasNoticeRecords()); + + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertFalse($test->hasWarningRecords()); + $handler->handle($this->getRecord(Logger::ERROR)); + $this->assertFalse($test->hasErrorRecords()); + $handler->handle($this->getRecord(Logger::CRITICAL)); + $this->assertFalse($test->hasCriticalRecords()); + $handler->handle($this->getRecord(Logger::ALERT)); + $this->assertFalse($test->hasAlertRecords()); + $handler->handle($this->getRecord(Logger::EMERGENCY)); + $this->assertFalse($test->hasEmergencyRecords()); + + $test = new TestHandler(); + $handler = new FilterHandler($test, array(Logger::INFO, Logger::ERROR)); + + $handler->handle($this->getRecord(Logger::DEBUG)); + $this->assertFalse($test->hasDebugRecords()); + $handler->handle($this->getRecord(Logger::INFO)); + $this->assertTrue($test->hasInfoRecords()); + $handler->handle($this->getRecord(Logger::NOTICE)); + $this->assertFalse($test->hasNoticeRecords()); + $handler->handle($this->getRecord(Logger::ERROR)); + $this->assertTrue($test->hasErrorRecords()); + $handler->handle($this->getRecord(Logger::CRITICAL)); + $this->assertFalse($test->hasCriticalRecords()); + } + + /** + * @covers Monolog\Handler\FilterHandler::setAcceptedLevels + * @covers Monolog\Handler\FilterHandler::getAcceptedLevels + */ + public function testAcceptedLevelApi() + { + $test = new TestHandler(); + $handler = new FilterHandler($test); + + $levels = array(Logger::INFO, Logger::ERROR); + $handler->setAcceptedLevels($levels); + $this->assertSame($levels, $handler->getAcceptedLevels()); + + $handler->setAcceptedLevels(array('info', 'error')); + $this->assertSame($levels, $handler->getAcceptedLevels()); + + $levels = array(Logger::CRITICAL, Logger::ALERT, Logger::EMERGENCY); + $handler->setAcceptedLevels(Logger::CRITICAL, Logger::EMERGENCY); + $this->assertSame($levels, $handler->getAcceptedLevels()); + + $handler->setAcceptedLevels('critical', 'emergency'); + $this->assertSame($levels, $handler->getAcceptedLevels()); + } + + /** + * @covers Monolog\Handler\FilterHandler::handle + */ + public function testHandleUsesProcessors() + { + $test = new TestHandler(); + $handler = new FilterHandler($test, Logger::DEBUG, Logger::EMERGENCY); + $handler->pushProcessor( + function ($record) { + $record['extra']['foo'] = true; + + return $record; + } + ); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertTrue($test->hasWarningRecords()); + $records = $test->getRecords(); + $this->assertTrue($records[0]['extra']['foo']); + } + + /** + * @covers Monolog\Handler\FilterHandler::handle + */ + public function testHandleRespectsBubble() + { + $test = new TestHandler(); + + $handler = new FilterHandler($test, Logger::INFO, Logger::NOTICE, false); + $this->assertTrue($handler->handle($this->getRecord(Logger::INFO))); + $this->assertFalse($handler->handle($this->getRecord(Logger::WARNING))); + + $handler = new FilterHandler($test, Logger::INFO, Logger::NOTICE, true); + $this->assertFalse($handler->handle($this->getRecord(Logger::INFO))); + $this->assertFalse($handler->handle($this->getRecord(Logger::WARNING))); + } + + /** + * @covers Monolog\Handler\FilterHandler::handle + */ + public function testHandleWithCallback() + { + $test = new TestHandler(); + $handler = new FilterHandler( + function ($record, $handler) use ($test) { + return $test; + }, Logger::INFO, Logger::NOTICE, false + ); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $this->assertFalse($test->hasDebugRecords()); + $this->assertTrue($test->hasInfoRecords()); + } + + /** + * @covers Monolog\Handler\FilterHandler::handle + * @expectedException \RuntimeException + */ + public function testHandleWithBadCallbackThrowsException() + { + $handler = new FilterHandler( + function ($record, $handler) { + return 'foo'; + } + ); + $handler->handle($this->getRecord(Logger::WARNING)); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/FingersCrossedHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/FingersCrossedHandlerTest.php new file mode 100644 index 0000000..b92bf43 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/FingersCrossedHandlerTest.php @@ -0,0 +1,279 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; +use Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy; +use Psr\Log\LogLevel; + +class FingersCrossedHandlerTest extends TestCase +{ + /** + * @covers Monolog\Handler\FingersCrossedHandler::__construct + * @covers Monolog\Handler\FingersCrossedHandler::handle + * @covers Monolog\Handler\FingersCrossedHandler::activate + */ + public function testHandleBuffers() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $this->assertFalse($test->hasDebugRecords()); + $this->assertFalse($test->hasInfoRecords()); + $handler->handle($this->getRecord(Logger::WARNING)); + $handler->close(); + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue(count($test->getRecords()) === 3); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::handle + * @covers Monolog\Handler\FingersCrossedHandler::activate + */ + public function testHandleStopsBufferingAfterTrigger() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test); + $handler->handle($this->getRecord(Logger::WARNING)); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->close(); + $this->assertTrue($test->hasWarningRecords()); + $this->assertTrue($test->hasDebugRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::handle + * @covers Monolog\Handler\FingersCrossedHandler::activate + * @covers Monolog\Handler\FingersCrossedHandler::reset + */ + public function testHandleRestartBufferingAfterReset() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test); + $handler->handle($this->getRecord(Logger::WARNING)); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->reset(); + $handler->handle($this->getRecord(Logger::INFO)); + $handler->close(); + $this->assertTrue($test->hasWarningRecords()); + $this->assertTrue($test->hasDebugRecords()); + $this->assertFalse($test->hasInfoRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::handle + * @covers Monolog\Handler\FingersCrossedHandler::activate + */ + public function testHandleRestartBufferingAfterBeingTriggeredWhenStopBufferingIsDisabled() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, Logger::WARNING, 0, false, false); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::WARNING)); + $handler->handle($this->getRecord(Logger::INFO)); + $handler->close(); + $this->assertTrue($test->hasWarningRecords()); + $this->assertTrue($test->hasDebugRecords()); + $this->assertFalse($test->hasInfoRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::handle + * @covers Monolog\Handler\FingersCrossedHandler::activate + */ + public function testHandleBufferLimit() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, Logger::WARNING, 2); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertTrue($test->hasWarningRecords()); + $this->assertTrue($test->hasInfoRecords()); + $this->assertFalse($test->hasDebugRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::handle + * @covers Monolog\Handler\FingersCrossedHandler::activate + */ + public function testHandleWithCallback() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler(function ($record, $handler) use ($test) { + return $test; + }); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $this->assertFalse($test->hasDebugRecords()); + $this->assertFalse($test->hasInfoRecords()); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue(count($test->getRecords()) === 3); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::handle + * @covers Monolog\Handler\FingersCrossedHandler::activate + * @expectedException RuntimeException + */ + public function testHandleWithBadCallbackThrowsException() + { + $handler = new FingersCrossedHandler(function ($record, $handler) { + return 'foo'; + }); + $handler->handle($this->getRecord(Logger::WARNING)); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::isHandling + */ + public function testIsHandlingAlways() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, Logger::ERROR); + $this->assertTrue($handler->isHandling($this->getRecord(Logger::DEBUG))); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::__construct + * @covers Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy::__construct + * @covers Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy::isHandlerActivated + */ + public function testErrorLevelActivationStrategy() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy(Logger::WARNING)); + $handler->handle($this->getRecord(Logger::DEBUG)); + $this->assertFalse($test->hasDebugRecords()); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertTrue($test->hasDebugRecords()); + $this->assertTrue($test->hasWarningRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::__construct + * @covers Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy::__construct + * @covers Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy::isHandlerActivated + */ + public function testErrorLevelActivationStrategyWithPsrLevel() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy('warning')); + $handler->handle($this->getRecord(Logger::DEBUG)); + $this->assertFalse($test->hasDebugRecords()); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertTrue($test->hasDebugRecords()); + $this->assertTrue($test->hasWarningRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::__construct + * @covers Monolog\Handler\FingersCrossedHandler::activate + */ + public function testOverrideActivationStrategy() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy('warning')); + $handler->handle($this->getRecord(Logger::DEBUG)); + $this->assertFalse($test->hasDebugRecords()); + $handler->activate(); + $this->assertTrue($test->hasDebugRecords()); + $handler->handle($this->getRecord(Logger::INFO)); + $this->assertTrue($test->hasInfoRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy::__construct + * @covers Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy::isHandlerActivated + */ + public function testChannelLevelActivationStrategy() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, new ChannelLevelActivationStrategy(Logger::ERROR, array('othertest' => Logger::DEBUG))); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertFalse($test->hasWarningRecords()); + $record = $this->getRecord(Logger::DEBUG); + $record['channel'] = 'othertest'; + $handler->handle($record); + $this->assertTrue($test->hasDebugRecords()); + $this->assertTrue($test->hasWarningRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy::__construct + * @covers Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy::isHandlerActivated + */ + public function testChannelLevelActivationStrategyWithPsrLevels() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, new ChannelLevelActivationStrategy('error', array('othertest' => 'debug'))); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertFalse($test->hasWarningRecords()); + $record = $this->getRecord(Logger::DEBUG); + $record['channel'] = 'othertest'; + $handler->handle($record); + $this->assertTrue($test->hasDebugRecords()); + $this->assertTrue($test->hasWarningRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::handle + * @covers Monolog\Handler\FingersCrossedHandler::activate + */ + public function testHandleUsesProcessors() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, Logger::INFO); + $handler->pushProcessor(function ($record) { + $record['extra']['foo'] = true; + + return $record; + }); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertTrue($test->hasWarningRecords()); + $records = $test->getRecords(); + $this->assertTrue($records[0]['extra']['foo']); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::close + */ + public function testPassthruOnClose() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy(Logger::WARNING), 0, true, true, Logger::INFO); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $handler->close(); + $this->assertFalse($test->hasDebugRecords()); + $this->assertTrue($test->hasInfoRecords()); + } + + /** + * @covers Monolog\Handler\FingersCrossedHandler::close + */ + public function testPsrLevelPassthruOnClose() + { + $test = new TestHandler(); + $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy(Logger::WARNING), 0, true, true, LogLevel::INFO); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + $handler->close(); + $this->assertFalse($test->hasDebugRecords()); + $this->assertTrue($test->hasInfoRecords()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/FirePHPHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/FirePHPHandlerTest.php new file mode 100644 index 0000000..0eb10a6 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/FirePHPHandlerTest.php @@ -0,0 +1,96 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @covers Monolog\Handler\FirePHPHandler + */ +class FirePHPHandlerTest extends TestCase +{ + public function setUp() + { + TestFirePHPHandler::reset(); + $_SERVER['HTTP_USER_AGENT'] = 'Monolog Test; FirePHP/1.0'; + } + + public function testHeaders() + { + $handler = new TestFirePHPHandler; + $handler->setFormatter($this->getIdentityFormatter()); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::WARNING)); + + $expected = array( + 'X-Wf-Protocol-1' => 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2', + 'X-Wf-1-Structure-1' => 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1', + 'X-Wf-1-Plugin-1' => 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3', + 'X-Wf-1-1-1-1' => 'test', + 'X-Wf-1-1-1-2' => 'test', + ); + + $this->assertEquals($expected, $handler->getHeaders()); + } + + public function testConcurrentHandlers() + { + $handler = new TestFirePHPHandler; + $handler->setFormatter($this->getIdentityFormatter()); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::WARNING)); + + $handler2 = new TestFirePHPHandler; + $handler2->setFormatter($this->getIdentityFormatter()); + $handler2->handle($this->getRecord(Logger::DEBUG)); + $handler2->handle($this->getRecord(Logger::WARNING)); + + $expected = array( + 'X-Wf-Protocol-1' => 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2', + 'X-Wf-1-Structure-1' => 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1', + 'X-Wf-1-Plugin-1' => 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3', + 'X-Wf-1-1-1-1' => 'test', + 'X-Wf-1-1-1-2' => 'test', + ); + + $expected2 = array( + 'X-Wf-1-1-1-3' => 'test', + 'X-Wf-1-1-1-4' => 'test', + ); + + $this->assertEquals($expected, $handler->getHeaders()); + $this->assertEquals($expected2, $handler2->getHeaders()); + } +} + +class TestFirePHPHandler extends FirePHPHandler +{ + protected $headers = array(); + + public static function reset() + { + self::$initialized = false; + self::$sendHeaders = true; + self::$messageIndex = 1; + } + + protected function sendHeader($header, $content) + { + $this->headers[$header] = $content; + } + + public function getHeaders() + { + return $this->headers; + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/Fixtures/.gitkeep b/vendor/monolog/monolog/tests/Monolog/Handler/Fixtures/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/FleepHookHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/FleepHookHandlerTest.php new file mode 100644 index 0000000..91cdd31 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/FleepHookHandlerTest.php @@ -0,0 +1,85 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\Logger; +use Monolog\TestCase; + +/** + * @coversDefaultClass \Monolog\Handler\FleepHookHandler + */ +class FleepHookHandlerTest extends TestCase +{ + /** + * Default token to use in tests + */ + const TOKEN = '123abc'; + + /** + * @var FleepHookHandler + */ + private $handler; + + public function setUp() + { + parent::setUp(); + + if (!extension_loaded('openssl')) { + $this->markTestSkipped('This test requires openssl extension to run'); + } + + // Create instances of the handler and logger for convenience + $this->handler = new FleepHookHandler(self::TOKEN); + } + + /** + * @covers ::__construct + */ + public function testConstructorSetsExpectedDefaults() + { + $this->assertEquals(Logger::DEBUG, $this->handler->getLevel()); + $this->assertEquals(true, $this->handler->getBubble()); + } + + /** + * @covers ::getDefaultFormatter + */ + public function testHandlerUsesLineFormatterWhichIgnoresEmptyArrays() + { + $record = array( + 'message' => 'msg', + 'context' => array(), + 'level' => Logger::DEBUG, + 'level_name' => Logger::getLevelName(Logger::DEBUG), + 'channel' => 'channel', + 'datetime' => new \DateTime(), + 'extra' => array(), + ); + + $expectedFormatter = new LineFormatter(null, null, true, true); + $expected = $expectedFormatter->format($record); + + $handlerFormatter = $this->handler->getFormatter(); + $actual = $handlerFormatter->format($record); + + $this->assertEquals($expected, $actual, 'Empty context and extra arrays should not be rendered'); + } + + /** + * @covers ::__construct + */ + public function testConnectionStringisConstructedCorrectly() + { + $this->assertEquals('ssl://' . FleepHookHandler::FLEEP_HOST . ':443', $this->handler->getConnectionString()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php new file mode 100644 index 0000000..4b120d5 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php @@ -0,0 +1,88 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FlowdockFormatter; +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @author Dominik Liebler + * @see https://www.hipchat.com/docs/api + */ +class FlowdockHandlerTest extends TestCase +{ + /** + * @var resource + */ + private $res; + + /** + * @var FlowdockHandler + */ + private $handler; + + public function setUp() + { + if (!extension_loaded('openssl')) { + $this->markTestSkipped('This test requires openssl to run'); + } + } + + public function testWriteHeader() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/POST \/v1\/messages\/team_inbox\/.* HTTP\/1.1\\r\\nHost: api.flowdock.com\\r\\nContent-Type: application\/json\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + + return $content; + } + + /** + * @depends testWriteHeader + */ + public function testWriteContent($content) + { + $this->assertRegexp('/"source":"test_source"/', $content); + $this->assertRegexp('/"from_address":"source@test\.com"/', $content); + } + + private function createHandler($token = 'myToken') + { + $constructorArgs = array($token, Logger::DEBUG); + $this->res = fopen('php://memory', 'a'); + $this->handler = $this->getMock( + '\Monolog\Handler\FlowdockHandler', + array('fsockopen', 'streamSetTimeout', 'closeSocket'), + $constructorArgs + ); + + $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($this->handler, 'localhost:1234'); + + $this->handler->expects($this->any()) + ->method('fsockopen') + ->will($this->returnValue($this->res)); + $this->handler->expects($this->any()) + ->method('streamSetTimeout') + ->will($this->returnValue(true)); + $this->handler->expects($this->any()) + ->method('closeSocket') + ->will($this->returnValue(true)); + + $this->handler->setFormatter(new FlowdockFormatter('test_source', 'source@test.com')); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/GelfHandlerLegacyTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/GelfHandlerLegacyTest.php new file mode 100644 index 0000000..9d007b1 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/GelfHandlerLegacyTest.php @@ -0,0 +1,95 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Gelf\Message; +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Formatter\GelfMessageFormatter; + +class GelfHandlerLegacyTest extends TestCase +{ + public function setUp() + { + if (!class_exists('Gelf\MessagePublisher') || !class_exists('Gelf\Message')) { + $this->markTestSkipped("mlehner/gelf-php not installed"); + } + + require_once __DIR__ . '/GelfMockMessagePublisher.php'; + } + + /** + * @covers Monolog\Handler\GelfHandler::__construct + */ + public function testConstruct() + { + $handler = new GelfHandler($this->getMessagePublisher()); + $this->assertInstanceOf('Monolog\Handler\GelfHandler', $handler); + } + + protected function getHandler($messagePublisher) + { + $handler = new GelfHandler($messagePublisher); + + return $handler; + } + + protected function getMessagePublisher() + { + return new GelfMockMessagePublisher('localhost'); + } + + public function testDebug() + { + $messagePublisher = $this->getMessagePublisher(); + $handler = $this->getHandler($messagePublisher); + + $record = $this->getRecord(Logger::DEBUG, "A test debug message"); + $handler->handle($record); + + $this->assertEquals(7, $messagePublisher->lastMessage->getLevel()); + $this->assertEquals('test', $messagePublisher->lastMessage->getFacility()); + $this->assertEquals($record['message'], $messagePublisher->lastMessage->getShortMessage()); + $this->assertEquals(null, $messagePublisher->lastMessage->getFullMessage()); + } + + public function testWarning() + { + $messagePublisher = $this->getMessagePublisher(); + $handler = $this->getHandler($messagePublisher); + + $record = $this->getRecord(Logger::WARNING, "A test warning message"); + $handler->handle($record); + + $this->assertEquals(4, $messagePublisher->lastMessage->getLevel()); + $this->assertEquals('test', $messagePublisher->lastMessage->getFacility()); + $this->assertEquals($record['message'], $messagePublisher->lastMessage->getShortMessage()); + $this->assertEquals(null, $messagePublisher->lastMessage->getFullMessage()); + } + + public function testInjectedGelfMessageFormatter() + { + $messagePublisher = $this->getMessagePublisher(); + $handler = $this->getHandler($messagePublisher); + + $handler->setFormatter(new GelfMessageFormatter('mysystem', 'EXT', 'CTX')); + + $record = $this->getRecord(Logger::WARNING, "A test warning message"); + $record['extra']['blarg'] = 'yep'; + $record['context']['from'] = 'logger'; + $handler->handle($record); + + $this->assertEquals('mysystem', $messagePublisher->lastMessage->getHost()); + $this->assertArrayHasKey('_EXTblarg', $messagePublisher->lastMessage->toArray()); + $this->assertArrayHasKey('_CTXfrom', $messagePublisher->lastMessage->toArray()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/GelfHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/GelfHandlerTest.php new file mode 100644 index 0000000..8cdd64f --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/GelfHandlerTest.php @@ -0,0 +1,117 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Gelf\Message; +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Formatter\GelfMessageFormatter; + +class GelfHandlerTest extends TestCase +{ + public function setUp() + { + if (!class_exists('Gelf\Publisher') || !class_exists('Gelf\Message')) { + $this->markTestSkipped("graylog2/gelf-php not installed"); + } + } + + /** + * @covers Monolog\Handler\GelfHandler::__construct + */ + public function testConstruct() + { + $handler = new GelfHandler($this->getMessagePublisher()); + $this->assertInstanceOf('Monolog\Handler\GelfHandler', $handler); + } + + protected function getHandler($messagePublisher) + { + $handler = new GelfHandler($messagePublisher); + + return $handler; + } + + protected function getMessagePublisher() + { + return $this->getMock('Gelf\Publisher', array('publish'), array(), '', false); + } + + public function testDebug() + { + $record = $this->getRecord(Logger::DEBUG, "A test debug message"); + $expectedMessage = new Message(); + $expectedMessage + ->setLevel(7) + ->setFacility("test") + ->setShortMessage($record['message']) + ->setTimestamp($record['datetime']) + ; + + $messagePublisher = $this->getMessagePublisher(); + $messagePublisher->expects($this->once()) + ->method('publish') + ->with($expectedMessage); + + $handler = $this->getHandler($messagePublisher); + + $handler->handle($record); + } + + public function testWarning() + { + $record = $this->getRecord(Logger::WARNING, "A test warning message"); + $expectedMessage = new Message(); + $expectedMessage + ->setLevel(4) + ->setFacility("test") + ->setShortMessage($record['message']) + ->setTimestamp($record['datetime']) + ; + + $messagePublisher = $this->getMessagePublisher(); + $messagePublisher->expects($this->once()) + ->method('publish') + ->with($expectedMessage); + + $handler = $this->getHandler($messagePublisher); + + $handler->handle($record); + } + + public function testInjectedGelfMessageFormatter() + { + $record = $this->getRecord(Logger::WARNING, "A test warning message"); + $record['extra']['blarg'] = 'yep'; + $record['context']['from'] = 'logger'; + + $expectedMessage = new Message(); + $expectedMessage + ->setLevel(4) + ->setFacility("test") + ->setHost("mysystem") + ->setShortMessage($record['message']) + ->setTimestamp($record['datetime']) + ->setAdditional("EXTblarg", 'yep') + ->setAdditional("CTXfrom", 'logger') + ; + + $messagePublisher = $this->getMessagePublisher(); + $messagePublisher->expects($this->once()) + ->method('publish') + ->with($expectedMessage); + + $handler = $this->getHandler($messagePublisher); + $handler->setFormatter(new GelfMessageFormatter('mysystem', 'EXT', 'CTX')); + $handler->handle($record); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/GelfMockMessagePublisher.php b/vendor/monolog/monolog/tests/Monolog/Handler/GelfMockMessagePublisher.php new file mode 100644 index 0000000..873d92f --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/GelfMockMessagePublisher.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Gelf\MessagePublisher; +use Gelf\Message; + +class GelfMockMessagePublisher extends MessagePublisher +{ + public function publish(Message $message) + { + $this->lastMessage = $message; + } + + public $lastMessage = null; +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/GroupHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/GroupHandlerTest.php new file mode 100644 index 0000000..a1b8617 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/GroupHandlerTest.php @@ -0,0 +1,112 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +class GroupHandlerTest extends TestCase +{ + /** + * @covers Monolog\Handler\GroupHandler::__construct + * @expectedException InvalidArgumentException + */ + public function testConstructorOnlyTakesHandler() + { + new GroupHandler(array(new TestHandler(), "foo")); + } + + /** + * @covers Monolog\Handler\GroupHandler::__construct + * @covers Monolog\Handler\GroupHandler::handle + */ + public function testHandle() + { + $testHandlers = array(new TestHandler(), new TestHandler()); + $handler = new GroupHandler($testHandlers); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + foreach ($testHandlers as $test) { + $this->assertTrue($test->hasDebugRecords()); + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue(count($test->getRecords()) === 2); + } + } + + /** + * @covers Monolog\Handler\GroupHandler::handleBatch + */ + public function testHandleBatch() + { + $testHandlers = array(new TestHandler(), new TestHandler()); + $handler = new GroupHandler($testHandlers); + $handler->handleBatch(array($this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO))); + foreach ($testHandlers as $test) { + $this->assertTrue($test->hasDebugRecords()); + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue(count($test->getRecords()) === 2); + } + } + + /** + * @covers Monolog\Handler\GroupHandler::isHandling + */ + public function testIsHandling() + { + $testHandlers = array(new TestHandler(Logger::ERROR), new TestHandler(Logger::WARNING)); + $handler = new GroupHandler($testHandlers); + $this->assertTrue($handler->isHandling($this->getRecord(Logger::ERROR))); + $this->assertTrue($handler->isHandling($this->getRecord(Logger::WARNING))); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::DEBUG))); + } + + /** + * @covers Monolog\Handler\GroupHandler::handle + */ + public function testHandleUsesProcessors() + { + $test = new TestHandler(); + $handler = new GroupHandler(array($test)); + $handler->pushProcessor(function ($record) { + $record['extra']['foo'] = true; + + return $record; + }); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertTrue($test->hasWarningRecords()); + $records = $test->getRecords(); + $this->assertTrue($records[0]['extra']['foo']); + } + + /** + * @covers Monolog\Handler\GroupHandler::handle + */ + public function testHandleBatchUsesProcessors() + { + $testHandlers = array(new TestHandler(), new TestHandler()); + $handler = new GroupHandler($testHandlers); + $handler->pushProcessor(function ($record) { + $record['extra']['foo'] = true; + + return $record; + }); + $handler->handleBatch(array($this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO))); + foreach ($testHandlers as $test) { + $this->assertTrue($test->hasDebugRecords()); + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue(count($test->getRecords()) === 2); + $records = $test->getRecords(); + $this->assertTrue($records[0]['extra']['foo']); + $this->assertTrue($records[1]['extra']['foo']); + } + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/HandlerWrapperTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/HandlerWrapperTest.php new file mode 100644 index 0000000..d8d0452 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/HandlerWrapperTest.php @@ -0,0 +1,130 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; + +/** + * @author Alexey Karapetov + */ +class HandlerWrapperTest extends TestCase +{ + /** + * @var HandlerWrapper + */ + private $wrapper; + + private $handler; + + public function setUp() + { + parent::setUp(); + $this->handler = $this->getMock('Monolog\\Handler\\HandlerInterface'); + $this->wrapper = new HandlerWrapper($this->handler); + } + + /** + * @return array + */ + public function trueFalseDataProvider() + { + return array( + array(true), + array(false), + ); + } + + /** + * @param $result + * @dataProvider trueFalseDataProvider + */ + public function testIsHandling($result) + { + $record = $this->getRecord(); + $this->handler->expects($this->once()) + ->method('isHandling') + ->with($record) + ->willReturn($result); + + $this->assertEquals($result, $this->wrapper->isHandling($record)); + } + + /** + * @param $result + * @dataProvider trueFalseDataProvider + */ + public function testHandle($result) + { + $record = $this->getRecord(); + $this->handler->expects($this->once()) + ->method('handle') + ->with($record) + ->willReturn($result); + + $this->assertEquals($result, $this->wrapper->handle($record)); + } + + /** + * @param $result + * @dataProvider trueFalseDataProvider + */ + public function testHandleBatch($result) + { + $records = $this->getMultipleRecords(); + $this->handler->expects($this->once()) + ->method('handleBatch') + ->with($records) + ->willReturn($result); + + $this->assertEquals($result, $this->wrapper->handleBatch($records)); + } + + public function testPushProcessor() + { + $processor = function () {}; + $this->handler->expects($this->once()) + ->method('pushProcessor') + ->with($processor); + + $this->assertEquals($this->wrapper, $this->wrapper->pushProcessor($processor)); + } + + public function testPopProcessor() + { + $processor = function () {}; + $this->handler->expects($this->once()) + ->method('popProcessor') + ->willReturn($processor); + + $this->assertEquals($processor, $this->wrapper->popProcessor()); + } + + public function testSetFormatter() + { + $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $this->handler->expects($this->once()) + ->method('setFormatter') + ->with($formatter); + + $this->assertEquals($this->wrapper, $this->wrapper->setFormatter($formatter)); + } + + public function testGetFormatter() + { + $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $this->handler->expects($this->once()) + ->method('getFormatter') + ->willReturn($formatter); + + $this->assertEquals($formatter, $this->wrapper->getFormatter()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php new file mode 100644 index 0000000..52dc9da --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php @@ -0,0 +1,279 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @author Rafael Dohms + * @see https://www.hipchat.com/docs/api + */ +class HipChatHandlerTest extends TestCase +{ + private $res; + /** @var HipChatHandler */ + private $handler; + + public function testWriteHeader() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/POST \/v1\/rooms\/message\?format=json&auth_token=.* HTTP\/1.1\\r\\nHost: api.hipchat.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + + return $content; + } + + public function testWriteCustomHostHeader() + { + $this->createHandler('myToken', 'room1', 'Monolog', true, 'hipchat.foo.bar'); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/POST \/v1\/rooms\/message\?format=json&auth_token=.* HTTP\/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + + return $content; + } + + public function testWriteV2() + { + $this->createHandler('myToken', 'room1', 'Monolog', false, 'hipchat.foo.bar', 'v2'); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/POST \/v2\/room\/room1\/notification\?auth_token=.* HTTP\/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + + return $content; + } + + public function testWriteV2Notify() + { + $this->createHandler('myToken', 'room1', 'Monolog', true, 'hipchat.foo.bar', 'v2'); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/POST \/v2\/room\/room1\/notification\?auth_token=.* HTTP\/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + + return $content; + } + + public function testRoomSpaces() + { + $this->createHandler('myToken', 'room name', 'Monolog', false, 'hipchat.foo.bar', 'v2'); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/POST \/v2\/room\/room%20name\/notification\?auth_token=.* HTTP\/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + + return $content; + } + + /** + * @depends testWriteHeader + */ + public function testWriteContent($content) + { + $this->assertRegexp('/notify=0&message=test1&message_format=text&color=red&room_id=room1&from=Monolog$/', $content); + } + + public function testWriteContentV1WithoutName() + { + $this->createHandler('myToken', 'room1', null, false, 'hipchat.foo.bar', 'v1'); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/notify=0&message=test1&message_format=text&color=red&room_id=room1&from=$/', $content); + + return $content; + } + + /** + * @depends testWriteCustomHostHeader + */ + public function testWriteContentNotify($content) + { + $this->assertRegexp('/notify=1&message=test1&message_format=text&color=red&room_id=room1&from=Monolog$/', $content); + } + + /** + * @depends testWriteV2 + */ + public function testWriteContentV2($content) + { + $this->assertRegexp('/notify=false&message=test1&message_format=text&color=red&from=Monolog$/', $content); + } + + /** + * @depends testWriteV2Notify + */ + public function testWriteContentV2Notify($content) + { + $this->assertRegexp('/notify=true&message=test1&message_format=text&color=red&from=Monolog$/', $content); + } + + public function testWriteContentV2WithoutName() + { + $this->createHandler('myToken', 'room1', null, false, 'hipchat.foo.bar', 'v2'); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/notify=false&message=test1&message_format=text&color=red$/', $content); + + return $content; + } + + public function testWriteWithComplexMessage() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'Backup of database "example" finished in 16 minutes.')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/message=Backup\+of\+database\+%22example%22\+finished\+in\+16\+minutes\./', $content); + } + + public function testWriteTruncatesLongMessage() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::CRITICAL, str_repeat('abcde', 2000))); + fseek($this->res, 0); + $content = fread($this->res, 12000); + + $this->assertRegexp('/message='.str_repeat('abcde', 1900).'\+%5Btruncated%5D/', $content); + } + + /** + * @dataProvider provideLevelColors + */ + public function testWriteWithErrorLevelsAndColors($level, $expectedColor) + { + $this->createHandler(); + $this->handler->handle($this->getRecord($level, 'Backup of database "example" finished in 16 minutes.')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/color='.$expectedColor.'/', $content); + } + + public function provideLevelColors() + { + return array( + array(Logger::DEBUG, 'gray'), + array(Logger::INFO, 'green'), + array(Logger::WARNING, 'yellow'), + array(Logger::ERROR, 'red'), + array(Logger::CRITICAL, 'red'), + array(Logger::ALERT, 'red'), + array(Logger::EMERGENCY,'red'), + array(Logger::NOTICE, 'green'), + ); + } + + /** + * @dataProvider provideBatchRecords + */ + public function testHandleBatch($records, $expectedColor) + { + $this->createHandler(); + + $this->handler->handleBatch($records); + + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/color='.$expectedColor.'/', $content); + } + + public function provideBatchRecords() + { + return array( + array( + array( + array('level' => Logger::WARNING, 'message' => 'Oh bugger!', 'level_name' => 'warning', 'datetime' => new \DateTime()), + array('level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTime()), + array('level' => Logger::CRITICAL, 'message' => 'Everything is broken!', 'level_name' => 'critical', 'datetime' => new \DateTime()), + ), + 'red', + ), + array( + array( + array('level' => Logger::WARNING, 'message' => 'Oh bugger!', 'level_name' => 'warning', 'datetime' => new \DateTime()), + array('level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTime()), + ), + 'yellow', + ), + array( + array( + array('level' => Logger::DEBUG, 'message' => 'Just debugging.', 'level_name' => 'debug', 'datetime' => new \DateTime()), + array('level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTime()), + ), + 'green', + ), + array( + array( + array('level' => Logger::DEBUG, 'message' => 'Just debugging.', 'level_name' => 'debug', 'datetime' => new \DateTime()), + ), + 'gray', + ), + ); + } + + private function createHandler($token = 'myToken', $room = 'room1', $name = 'Monolog', $notify = false, $host = 'api.hipchat.com', $version = 'v1') + { + $constructorArgs = array($token, $room, $name, $notify, Logger::DEBUG, true, true, 'text', $host, $version); + $this->res = fopen('php://memory', 'a'); + $this->handler = $this->getMock( + '\Monolog\Handler\HipChatHandler', + array('fsockopen', 'streamSetTimeout', 'closeSocket'), + $constructorArgs + ); + + $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($this->handler, 'localhost:1234'); + + $this->handler->expects($this->any()) + ->method('fsockopen') + ->will($this->returnValue($this->res)); + $this->handler->expects($this->any()) + ->method('streamSetTimeout') + ->will($this->returnValue(true)); + $this->handler->expects($this->any()) + ->method('closeSocket') + ->will($this->returnValue(true)); + + $this->handler->setFormatter($this->getIdentityFormatter()); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testCreateWithTooLongName() + { + $hipChatHandler = new HipChatHandler('token', 'room', 'SixteenCharsHere'); + } + + public function testCreateWithTooLongNameV2() + { + // creating a handler with too long of a name but using the v2 api doesn't matter. + $hipChatHandler = new HipChatHandler('token', 'room', 'SixteenCharsHere', false, Logger::CRITICAL, true, true, 'test', 'api.hipchat.com', 'v2'); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/LogEntriesHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/LogEntriesHandlerTest.php new file mode 100644 index 0000000..b2deb40 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/LogEntriesHandlerTest.php @@ -0,0 +1,84 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @author Robert Kaufmann III + */ +class LogEntriesHandlerTest extends TestCase +{ + /** + * @var resource + */ + private $res; + + /** + * @var LogEntriesHandler + */ + private $handler; + + public function testWriteContent() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'Critical write test')); + + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/testToken \[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] test.CRITICAL: Critical write test/', $content); + } + + public function testWriteBatchContent() + { + $records = array( + $this->getRecord(), + $this->getRecord(), + $this->getRecord(), + ); + $this->createHandler(); + $this->handler->handleBatch($records); + + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/(testToken \[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] .* \[\] \[\]\n){3}/', $content); + } + + private function createHandler() + { + $useSSL = extension_loaded('openssl'); + $args = array('testToken', $useSSL, Logger::DEBUG, true); + $this->res = fopen('php://memory', 'a'); + $this->handler = $this->getMock( + '\Monolog\Handler\LogEntriesHandler', + array('fsockopen', 'streamSetTimeout', 'closeSocket'), + $args + ); + + $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($this->handler, 'localhost:1234'); + + $this->handler->expects($this->any()) + ->method('fsockopen') + ->will($this->returnValue($this->res)); + $this->handler->expects($this->any()) + ->method('streamSetTimeout') + ->will($this->returnValue(true)); + $this->handler->expects($this->any()) + ->method('closeSocket') + ->will($this->returnValue(true)); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/MailHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/MailHandlerTest.php new file mode 100644 index 0000000..6754f3d --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/MailHandlerTest.php @@ -0,0 +1,75 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\TestCase; + +class MailHandlerTest extends TestCase +{ + /** + * @covers Monolog\Handler\MailHandler::handleBatch + */ + public function testHandleBatch() + { + $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter->expects($this->once()) + ->method('formatBatch'); // Each record is formatted + + $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler'); + $handler->expects($this->once()) + ->method('send'); + $handler->expects($this->never()) + ->method('write'); // write is for individual records + + $handler->setFormatter($formatter); + + $handler->handleBatch($this->getMultipleRecords()); + } + + /** + * @covers Monolog\Handler\MailHandler::handleBatch + */ + public function testHandleBatchNotSendsMailIfMessagesAreBelowLevel() + { + $records = array( + $this->getRecord(Logger::DEBUG, 'debug message 1'), + $this->getRecord(Logger::DEBUG, 'debug message 2'), + $this->getRecord(Logger::INFO, 'information'), + ); + + $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler'); + $handler->expects($this->never()) + ->method('send'); + $handler->setLevel(Logger::ERROR); + + $handler->handleBatch($records); + } + + /** + * @covers Monolog\Handler\MailHandler::write + */ + public function testHandle() + { + $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler'); + + $record = $this->getRecord(); + $records = array($record); + $records[0]['formatted'] = '['.$record['datetime']->format('Y-m-d H:i:s').'] test.WARNING: test [] []'."\n"; + + $handler->expects($this->once()) + ->method('send') + ->with($records[0]['formatted'], $records); + + $handler->handle($record); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/MockRavenClient.php b/vendor/monolog/monolog/tests/Monolog/Handler/MockRavenClient.php new file mode 100644 index 0000000..a083322 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/MockRavenClient.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Raven_Client; + +class MockRavenClient extends Raven_Client +{ + public function capture($data, $stack, $vars = null) + { + $data = array_merge($this->get_user_data(), $data); + $this->lastData = $data; + $this->lastStack = $stack; + } + + public $lastData; + public $lastStack; +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/MongoDBHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/MongoDBHandlerTest.php new file mode 100644 index 0000000..0fdef63 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/MongoDBHandlerTest.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +class MongoDBHandlerTest extends TestCase +{ + /** + * @expectedException InvalidArgumentException + */ + public function testConstructorShouldThrowExceptionForInvalidMongo() + { + new MongoDBHandler(new \stdClass(), 'DB', 'Collection'); + } + + public function testHandle() + { + $mongo = $this->getMock('Mongo', array('selectCollection'), array(), '', false); + $collection = $this->getMock('stdClass', array('save')); + + $mongo->expects($this->once()) + ->method('selectCollection') + ->with('DB', 'Collection') + ->will($this->returnValue($collection)); + + $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + + $expected = array( + 'message' => 'test', + 'context' => array('data' => '[object] (stdClass: {})', 'foo' => 34), + 'level' => Logger::WARNING, + 'level_name' => 'WARNING', + 'channel' => 'test', + 'datetime' => $record['datetime']->format('Y-m-d H:i:s'), + 'extra' => array(), + ); + + $collection->expects($this->once()) + ->method('save') + ->with($expected); + + $handler = new MongoDBHandler($mongo, 'DB', 'Collection'); + $handler->handle($record); + } +} + +if (!class_exists('Mongo')) { + class Mongo + { + public function selectCollection() + { + } + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/NativeMailerHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/NativeMailerHandlerTest.php new file mode 100644 index 0000000..ddf545d --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/NativeMailerHandlerTest.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use InvalidArgumentException; + +function mail($to, $subject, $message, $additional_headers = null, $additional_parameters = null) +{ + $GLOBALS['mail'][] = func_get_args(); +} + +class NativeMailerHandlerTest extends TestCase +{ + protected function setUp() + { + $GLOBALS['mail'] = array(); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testConstructorHeaderInjection() + { + $mailer = new NativeMailerHandler('spammer@example.org', 'dear victim', "receiver@example.org\r\nFrom: faked@attacker.org"); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testSetterHeaderInjection() + { + $mailer = new NativeMailerHandler('spammer@example.org', 'dear victim', 'receiver@example.org'); + $mailer->addHeader("Content-Type: text/html\r\nFrom: faked@attacker.org"); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testSetterArrayHeaderInjection() + { + $mailer = new NativeMailerHandler('spammer@example.org', 'dear victim', 'receiver@example.org'); + $mailer->addHeader(array("Content-Type: text/html\r\nFrom: faked@attacker.org")); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testSetterContentTypeInjection() + { + $mailer = new NativeMailerHandler('spammer@example.org', 'dear victim', 'receiver@example.org'); + $mailer->setContentType("text/html\r\nFrom: faked@attacker.org"); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testSetterEncodingInjection() + { + $mailer = new NativeMailerHandler('spammer@example.org', 'dear victim', 'receiver@example.org'); + $mailer->setEncoding("utf-8\r\nFrom: faked@attacker.org"); + } + + public function testSend() + { + $to = 'spammer@example.org'; + $subject = 'dear victim'; + $from = 'receiver@example.org'; + + $mailer = new NativeMailerHandler($to, $subject, $from); + $mailer->handleBatch(array()); + + // batch is empty, nothing sent + $this->assertEmpty($GLOBALS['mail']); + + // non-empty batch + $mailer->handle($this->getRecord(Logger::ERROR, "Foo\nBar\r\n\r\nBaz")); + $this->assertNotEmpty($GLOBALS['mail']); + $this->assertInternalType('array', $GLOBALS['mail']); + $this->assertArrayHasKey('0', $GLOBALS['mail']); + $params = $GLOBALS['mail'][0]; + $this->assertCount(5, $params); + $this->assertSame($to, $params[0]); + $this->assertSame($subject, $params[1]); + $this->assertStringEndsWith(" test.ERROR: Foo Bar Baz [] []\n", $params[2]); + $this->assertSame("From: $from\r\nContent-type: text/plain; charset=utf-8\r\n", $params[3]); + $this->assertSame('', $params[4]); + } + + public function testMessageSubjectFormatting() + { + $mailer = new NativeMailerHandler('to@example.org', 'Alert: %level_name% %message%', 'from@example.org'); + $mailer->handle($this->getRecord(Logger::ERROR, "Foo\nBar\r\n\r\nBaz")); + $this->assertNotEmpty($GLOBALS['mail']); + $this->assertInternalType('array', $GLOBALS['mail']); + $this->assertArrayHasKey('0', $GLOBALS['mail']); + $params = $GLOBALS['mail'][0]; + $this->assertCount(5, $params); + $this->assertSame('Alert: ERROR Foo Bar Baz', $params[1]); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php new file mode 100644 index 0000000..4d3a615 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/NewRelicHandlerTest.php @@ -0,0 +1,200 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\TestCase; +use Monolog\Logger; + +class NewRelicHandlerTest extends TestCase +{ + public static $appname; + public static $customParameters; + public static $transactionName; + + public function setUp() + { + self::$appname = null; + self::$customParameters = array(); + self::$transactionName = null; + } + + /** + * @expectedException Monolog\Handler\MissingExtensionException + */ + public function testThehandlerThrowsAnExceptionIfTheNRExtensionIsNotLoaded() + { + $handler = new StubNewRelicHandlerWithoutExtension(); + $handler->handle($this->getRecord(Logger::ERROR)); + } + + public function testThehandlerCanHandleTheRecord() + { + $handler = new StubNewRelicHandler(); + $handler->handle($this->getRecord(Logger::ERROR)); + } + + public function testThehandlerCanAddContextParamsToTheNewRelicTrace() + { + $handler = new StubNewRelicHandler(); + $handler->handle($this->getRecord(Logger::ERROR, 'log message', array('a' => 'b'))); + $this->assertEquals(array('context_a' => 'b'), self::$customParameters); + } + + public function testThehandlerCanAddExplodedContextParamsToTheNewRelicTrace() + { + $handler = new StubNewRelicHandler(Logger::ERROR, true, self::$appname, true); + $handler->handle($this->getRecord( + Logger::ERROR, + 'log message', + array('a' => array('key1' => 'value1', 'key2' => 'value2')) + )); + $this->assertEquals( + array('context_a_key1' => 'value1', 'context_a_key2' => 'value2'), + self::$customParameters + ); + } + + public function testThehandlerCanAddExtraParamsToTheNewRelicTrace() + { + $record = $this->getRecord(Logger::ERROR, 'log message'); + $record['extra'] = array('c' => 'd'); + + $handler = new StubNewRelicHandler(); + $handler->handle($record); + + $this->assertEquals(array('extra_c' => 'd'), self::$customParameters); + } + + public function testThehandlerCanAddExplodedExtraParamsToTheNewRelicTrace() + { + $record = $this->getRecord(Logger::ERROR, 'log message'); + $record['extra'] = array('c' => array('key1' => 'value1', 'key2' => 'value2')); + + $handler = new StubNewRelicHandler(Logger::ERROR, true, self::$appname, true); + $handler->handle($record); + + $this->assertEquals( + array('extra_c_key1' => 'value1', 'extra_c_key2' => 'value2'), + self::$customParameters + ); + } + + public function testThehandlerCanAddExtraContextAndParamsToTheNewRelicTrace() + { + $record = $this->getRecord(Logger::ERROR, 'log message', array('a' => 'b')); + $record['extra'] = array('c' => 'd'); + + $handler = new StubNewRelicHandler(); + $handler->handle($record); + + $expected = array( + 'context_a' => 'b', + 'extra_c' => 'd', + ); + + $this->assertEquals($expected, self::$customParameters); + } + + public function testThehandlerCanHandleTheRecordsFormattedUsingTheLineFormatter() + { + $handler = new StubNewRelicHandler(); + $handler->setFormatter(new LineFormatter()); + $handler->handle($this->getRecord(Logger::ERROR)); + } + + public function testTheAppNameIsNullByDefault() + { + $handler = new StubNewRelicHandler(); + $handler->handle($this->getRecord(Logger::ERROR, 'log message')); + + $this->assertEquals(null, self::$appname); + } + + public function testTheAppNameCanBeInjectedFromtheConstructor() + { + $handler = new StubNewRelicHandler(Logger::DEBUG, false, 'myAppName'); + $handler->handle($this->getRecord(Logger::ERROR, 'log message')); + + $this->assertEquals('myAppName', self::$appname); + } + + public function testTheAppNameCanBeOverriddenFromEachLog() + { + $handler = new StubNewRelicHandler(Logger::DEBUG, false, 'myAppName'); + $handler->handle($this->getRecord(Logger::ERROR, 'log message', array('appname' => 'logAppName'))); + + $this->assertEquals('logAppName', self::$appname); + } + + public function testTheTransactionNameIsNullByDefault() + { + $handler = new StubNewRelicHandler(); + $handler->handle($this->getRecord(Logger::ERROR, 'log message')); + + $this->assertEquals(null, self::$transactionName); + } + + public function testTheTransactionNameCanBeInjectedFromTheConstructor() + { + $handler = new StubNewRelicHandler(Logger::DEBUG, false, null, false, 'myTransaction'); + $handler->handle($this->getRecord(Logger::ERROR, 'log message')); + + $this->assertEquals('myTransaction', self::$transactionName); + } + + public function testTheTransactionNameCanBeOverriddenFromEachLog() + { + $handler = new StubNewRelicHandler(Logger::DEBUG, false, null, false, 'myTransaction'); + $handler->handle($this->getRecord(Logger::ERROR, 'log message', array('transaction_name' => 'logTransactName'))); + + $this->assertEquals('logTransactName', self::$transactionName); + } +} + +class StubNewRelicHandlerWithoutExtension extends NewRelicHandler +{ + protected function isNewRelicEnabled() + { + return false; + } +} + +class StubNewRelicHandler extends NewRelicHandler +{ + protected function isNewRelicEnabled() + { + return true; + } +} + +function newrelic_notice_error() +{ + return true; +} + +function newrelic_set_appname($appname) +{ + return NewRelicHandlerTest::$appname = $appname; +} + +function newrelic_name_transaction($transactionName) +{ + return NewRelicHandlerTest::$transactionName = $transactionName; +} + +function newrelic_add_custom_parameter($key, $value) +{ + NewRelicHandlerTest::$customParameters[$key] = $value; + + return true; +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/NullHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/NullHandlerTest.php new file mode 100644 index 0000000..292df78 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/NullHandlerTest.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @covers Monolog\Handler\NullHandler::handle + */ +class NullHandlerTest extends TestCase +{ + public function testHandle() + { + $handler = new NullHandler(); + $this->assertTrue($handler->handle($this->getRecord())); + } + + public function testHandleLowerLevelRecord() + { + $handler = new NullHandler(Logger::WARNING); + $this->assertFalse($handler->handle($this->getRecord(Logger::DEBUG))); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/PHPConsoleHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/PHPConsoleHandlerTest.php new file mode 100644 index 0000000..152573e --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/PHPConsoleHandlerTest.php @@ -0,0 +1,273 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Exception; +use Monolog\ErrorHandler; +use Monolog\Logger; +use Monolog\TestCase; +use PhpConsole\Connector; +use PhpConsole\Dispatcher\Debug as DebugDispatcher; +use PhpConsole\Dispatcher\Errors as ErrorDispatcher; +use PhpConsole\Handler; +use PHPUnit_Framework_MockObject_MockObject; + +/** + * @covers Monolog\Handler\PHPConsoleHandler + * @author Sergey Barbushin https://www.linkedin.com/in/barbushin + */ +class PHPConsoleHandlerTest extends TestCase +{ + /** @var Connector|PHPUnit_Framework_MockObject_MockObject */ + protected $connector; + /** @var DebugDispatcher|PHPUnit_Framework_MockObject_MockObject */ + protected $debugDispatcher; + /** @var ErrorDispatcher|PHPUnit_Framework_MockObject_MockObject */ + protected $errorDispatcher; + + protected function setUp() + { + if (!class_exists('PhpConsole\Connector')) { + $this->markTestSkipped('PHP Console library not found. See https://github.com/barbushin/php-console#installation'); + } + $this->connector = $this->initConnectorMock(); + + $this->debugDispatcher = $this->initDebugDispatcherMock($this->connector); + $this->connector->setDebugDispatcher($this->debugDispatcher); + + $this->errorDispatcher = $this->initErrorDispatcherMock($this->connector); + $this->connector->setErrorsDispatcher($this->errorDispatcher); + } + + protected function initDebugDispatcherMock(Connector $connector) + { + return $this->getMockBuilder('PhpConsole\Dispatcher\Debug') + ->disableOriginalConstructor() + ->setMethods(array('dispatchDebug')) + ->setConstructorArgs(array($connector, $connector->getDumper())) + ->getMock(); + } + + protected function initErrorDispatcherMock(Connector $connector) + { + return $this->getMockBuilder('PhpConsole\Dispatcher\Errors') + ->disableOriginalConstructor() + ->setMethods(array('dispatchError', 'dispatchException')) + ->setConstructorArgs(array($connector, $connector->getDumper())) + ->getMock(); + } + + protected function initConnectorMock() + { + $connector = $this->getMockBuilder('PhpConsole\Connector') + ->disableOriginalConstructor() + ->setMethods(array( + 'sendMessage', + 'onShutDown', + 'isActiveClient', + 'setSourcesBasePath', + 'setServerEncoding', + 'setPassword', + 'enableSslOnlyMode', + 'setAllowedIpMasks', + 'setHeadersLimit', + 'startEvalRequestsListener', + )) + ->getMock(); + + $connector->expects($this->any()) + ->method('isActiveClient') + ->will($this->returnValue(true)); + + return $connector; + } + + protected function getHandlerDefaultOption($name) + { + $handler = new PHPConsoleHandler(array(), $this->connector); + $options = $handler->getOptions(); + + return $options[$name]; + } + + protected function initLogger($handlerOptions = array(), $level = Logger::DEBUG) + { + return new Logger('test', array( + new PHPConsoleHandler($handlerOptions, $this->connector, $level), + )); + } + + public function testInitWithDefaultConnector() + { + $handler = new PHPConsoleHandler(); + $this->assertEquals(spl_object_hash(Connector::getInstance()), spl_object_hash($handler->getConnector())); + } + + public function testInitWithCustomConnector() + { + $handler = new PHPConsoleHandler(array(), $this->connector); + $this->assertEquals(spl_object_hash($this->connector), spl_object_hash($handler->getConnector())); + } + + public function testDebug() + { + $this->debugDispatcher->expects($this->once())->method('dispatchDebug')->with($this->equalTo('test')); + $this->initLogger()->addDebug('test'); + } + + public function testDebugContextInMessage() + { + $message = 'test'; + $tag = 'tag'; + $context = array($tag, 'custom' => mt_rand()); + $expectedMessage = $message . ' ' . json_encode(array_slice($context, 1)); + $this->debugDispatcher->expects($this->once())->method('dispatchDebug')->with( + $this->equalTo($expectedMessage), + $this->equalTo($tag) + ); + $this->initLogger()->addDebug($message, $context); + } + + public function testDebugTags($tagsContextKeys = null) + { + $expectedTags = mt_rand(); + $logger = $this->initLogger($tagsContextKeys ? array('debugTagsKeysInContext' => $tagsContextKeys) : array()); + if (!$tagsContextKeys) { + $tagsContextKeys = $this->getHandlerDefaultOption('debugTagsKeysInContext'); + } + foreach ($tagsContextKeys as $key) { + $debugDispatcher = $this->initDebugDispatcherMock($this->connector); + $debugDispatcher->expects($this->once())->method('dispatchDebug')->with( + $this->anything(), + $this->equalTo($expectedTags) + ); + $this->connector->setDebugDispatcher($debugDispatcher); + $logger->addDebug('test', array($key => $expectedTags)); + } + } + + public function testError($classesPartialsTraceIgnore = null) + { + $code = E_USER_NOTICE; + $message = 'message'; + $file = __FILE__; + $line = __LINE__; + $this->errorDispatcher->expects($this->once())->method('dispatchError')->with( + $this->equalTo($code), + $this->equalTo($message), + $this->equalTo($file), + $this->equalTo($line), + $classesPartialsTraceIgnore ?: $this->equalTo($this->getHandlerDefaultOption('classesPartialsTraceIgnore')) + ); + $errorHandler = ErrorHandler::register($this->initLogger($classesPartialsTraceIgnore ? array('classesPartialsTraceIgnore' => $classesPartialsTraceIgnore) : array()), false); + $errorHandler->registerErrorHandler(array(), false, E_USER_WARNING); + $errorHandler->handleError($code, $message, $file, $line); + } + + public function testException() + { + $e = new Exception(); + $this->errorDispatcher->expects($this->once())->method('dispatchException')->with( + $this->equalTo($e) + ); + $handler = $this->initLogger(); + $handler->log( + \Psr\Log\LogLevel::ERROR, + sprintf('Uncaught Exception %s: "%s" at %s line %s', get_class($e), $e->getMessage(), $e->getFile(), $e->getLine()), + array('exception' => $e) + ); + } + + /** + * @expectedException Exception + */ + public function testWrongOptionsThrowsException() + { + new PHPConsoleHandler(array('xxx' => 1)); + } + + public function testOptionEnabled() + { + $this->debugDispatcher->expects($this->never())->method('dispatchDebug'); + $this->initLogger(array('enabled' => false))->addDebug('test'); + } + + public function testOptionClassesPartialsTraceIgnore() + { + $this->testError(array('Class', 'Namespace\\')); + } + + public function testOptionDebugTagsKeysInContext() + { + $this->testDebugTags(array('key1', 'key2')); + } + + public function testOptionUseOwnErrorsAndExceptionsHandler() + { + $this->initLogger(array('useOwnErrorsHandler' => true, 'useOwnExceptionsHandler' => true)); + $this->assertEquals(array(Handler::getInstance(), 'handleError'), set_error_handler(function () { + })); + $this->assertEquals(array(Handler::getInstance(), 'handleException'), set_exception_handler(function () { + })); + } + + public static function provideConnectorMethodsOptionsSets() + { + return array( + array('sourcesBasePath', 'setSourcesBasePath', __DIR__), + array('serverEncoding', 'setServerEncoding', 'cp1251'), + array('password', 'setPassword', '******'), + array('enableSslOnlyMode', 'enableSslOnlyMode', true, false), + array('ipMasks', 'setAllowedIpMasks', array('127.0.0.*')), + array('headersLimit', 'setHeadersLimit', 2500), + array('enableEvalListener', 'startEvalRequestsListener', true, false), + ); + } + + /** + * @dataProvider provideConnectorMethodsOptionsSets + */ + public function testOptionCallsConnectorMethod($option, $method, $value, $isArgument = true) + { + $expectCall = $this->connector->expects($this->once())->method($method); + if ($isArgument) { + $expectCall->with($value); + } + new PHPConsoleHandler(array($option => $value), $this->connector); + } + + public function testOptionDetectDumpTraceAndSource() + { + new PHPConsoleHandler(array('detectDumpTraceAndSource' => true), $this->connector); + $this->assertTrue($this->connector->getDebugDispatcher()->detectTraceAndSource); + } + + public static function provideDumperOptionsValues() + { + return array( + array('dumperLevelLimit', 'levelLimit', 1001), + array('dumperItemsCountLimit', 'itemsCountLimit', 1002), + array('dumperItemSizeLimit', 'itemSizeLimit', 1003), + array('dumperDumpSizeLimit', 'dumpSizeLimit', 1004), + array('dumperDetectCallbacks', 'detectCallbacks', true), + ); + } + + /** + * @dataProvider provideDumperOptionsValues + */ + public function testDumperOptions($option, $dumperProperty, $value) + { + new PHPConsoleHandler(array($option => $value), $this->connector); + $this->assertEquals($value, $this->connector->getDumper()->$dumperProperty); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/PsrHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/PsrHandlerTest.php new file mode 100644 index 0000000..64eaab1 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/PsrHandlerTest.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @covers Monolog\Handler\PsrHandler::handle + */ +class PsrHandlerTest extends TestCase +{ + public function logLevelProvider() + { + $levels = array(); + $monologLogger = new Logger(''); + + foreach ($monologLogger->getLevels() as $levelName => $level) { + $levels[] = array($levelName, $level); + } + + return $levels; + } + + /** + * @dataProvider logLevelProvider + */ + public function testHandlesAllLevels($levelName, $level) + { + $message = 'Hello, world! ' . $level; + $context = array('foo' => 'bar', 'level' => $level); + + $psrLogger = $this->getMock('Psr\Log\NullLogger'); + $psrLogger->expects($this->once()) + ->method('log') + ->with(strtolower($levelName), $message, $context); + + $handler = new PsrHandler($psrLogger); + $handler->handle(array('level' => $level, 'level_name' => $levelName, 'message' => $message, 'context' => $context)); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php new file mode 100644 index 0000000..56df474 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php @@ -0,0 +1,141 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * Almost all examples (expected header, titles, messages) taken from + * https://www.pushover.net/api + * @author Sebastian Göttschkes + * @see https://www.pushover.net/api + */ +class PushoverHandlerTest extends TestCase +{ + private $res; + private $handler; + + public function testWriteHeader() + { + $this->createHandler(); + $this->handler->setHighPriorityLevel(Logger::EMERGENCY); // skip priority notifications + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/POST \/1\/messages.json HTTP\/1.1\\r\\nHost: api.pushover.net\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + + return $content; + } + + /** + * @depends testWriteHeader + */ + public function testWriteContent($content) + { + $this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog×tamp=\d{10}$/', $content); + } + + public function testWriteWithComplexTitle() + { + $this->createHandler('myToken', 'myUser', 'Backup finished - SQL1'); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/title=Backup\+finished\+-\+SQL1/', $content); + } + + public function testWriteWithComplexMessage() + { + $this->createHandler(); + $this->handler->setHighPriorityLevel(Logger::EMERGENCY); // skip priority notifications + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'Backup of database "example" finished in 16 minutes.')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/message=Backup\+of\+database\+%22example%22\+finished\+in\+16\+minutes\./', $content); + } + + public function testWriteWithTooLongMessage() + { + $message = str_pad('test', 520, 'a'); + $this->createHandler(); + $this->handler->setHighPriorityLevel(Logger::EMERGENCY); // skip priority notifications + $this->handler->handle($this->getRecord(Logger::CRITICAL, $message)); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $expectedMessage = substr($message, 0, 505); + + $this->assertRegexp('/message=' . $expectedMessage . '&title/', $content); + } + + public function testWriteWithHighPriority() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog×tamp=\d{10}&priority=1$/', $content); + } + + public function testWriteWithEmergencyPriority() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::EMERGENCY, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog×tamp=\d{10}&priority=2&retry=30&expire=25200$/', $content); + } + + public function testWriteToMultipleUsers() + { + $this->createHandler('myToken', array('userA', 'userB')); + $this->handler->handle($this->getRecord(Logger::EMERGENCY, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/token=myToken&user=userA&message=test1&title=Monolog×tamp=\d{10}&priority=2&retry=30&expire=25200POST/', $content); + $this->assertRegexp('/token=myToken&user=userB&message=test1&title=Monolog×tamp=\d{10}&priority=2&retry=30&expire=25200$/', $content); + } + + private function createHandler($token = 'myToken', $user = 'myUser', $title = 'Monolog') + { + $constructorArgs = array($token, $user, $title); + $this->res = fopen('php://memory', 'a'); + $this->handler = $this->getMock( + '\Monolog\Handler\PushoverHandler', + array('fsockopen', 'streamSetTimeout', 'closeSocket'), + $constructorArgs + ); + + $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($this->handler, 'localhost:1234'); + + $this->handler->expects($this->any()) + ->method('fsockopen') + ->will($this->returnValue($this->res)); + $this->handler->expects($this->any()) + ->method('streamSetTimeout') + ->will($this->returnValue(true)); + $this->handler->expects($this->any()) + ->method('closeSocket') + ->will($this->returnValue(true)); + + $this->handler->setFormatter($this->getIdentityFormatter()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/RavenHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/RavenHandlerTest.php new file mode 100644 index 0000000..26d212b --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/RavenHandlerTest.php @@ -0,0 +1,255 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Formatter\LineFormatter; + +class RavenHandlerTest extends TestCase +{ + public function setUp() + { + if (!class_exists('Raven_Client')) { + $this->markTestSkipped('raven/raven not installed'); + } + + require_once __DIR__ . '/MockRavenClient.php'; + } + + /** + * @covers Monolog\Handler\RavenHandler::__construct + */ + public function testConstruct() + { + $handler = new RavenHandler($this->getRavenClient()); + $this->assertInstanceOf('Monolog\Handler\RavenHandler', $handler); + } + + protected function getHandler($ravenClient) + { + $handler = new RavenHandler($ravenClient); + + return $handler; + } + + protected function getRavenClient() + { + $dsn = 'http://43f6017361224d098402974103bfc53d:a6a0538fc2934ba2bed32e08741b2cd3@marca.python.live.cheggnet.com:9000/1'; + + return new MockRavenClient($dsn); + } + + public function testDebug() + { + $ravenClient = $this->getRavenClient(); + $handler = $this->getHandler($ravenClient); + + $record = $this->getRecord(Logger::DEBUG, 'A test debug message'); + $handler->handle($record); + + $this->assertEquals($ravenClient::DEBUG, $ravenClient->lastData['level']); + $this->assertContains($record['message'], $ravenClient->lastData['message']); + } + + public function testWarning() + { + $ravenClient = $this->getRavenClient(); + $handler = $this->getHandler($ravenClient); + + $record = $this->getRecord(Logger::WARNING, 'A test warning message'); + $handler->handle($record); + + $this->assertEquals($ravenClient::WARNING, $ravenClient->lastData['level']); + $this->assertContains($record['message'], $ravenClient->lastData['message']); + } + + public function testTag() + { + $ravenClient = $this->getRavenClient(); + $handler = $this->getHandler($ravenClient); + + $tags = array(1, 2, 'foo'); + $record = $this->getRecord(Logger::INFO, 'test', array('tags' => $tags)); + $handler->handle($record); + + $this->assertEquals($tags, $ravenClient->lastData['tags']); + } + + public function testExtraParameters() + { + $ravenClient = $this->getRavenClient(); + $handler = $this->getHandler($ravenClient); + + $checksum = '098f6bcd4621d373cade4e832627b4f6'; + $release = '05a671c66aefea124cc08b76ea6d30bb'; + $eventId = '31423'; + $record = $this->getRecord(Logger::INFO, 'test', array('checksum' => $checksum, 'release' => $release, 'event_id' => $eventId)); + $handler->handle($record); + + $this->assertEquals($checksum, $ravenClient->lastData['checksum']); + $this->assertEquals($release, $ravenClient->lastData['release']); + $this->assertEquals($eventId, $ravenClient->lastData['event_id']); + } + + public function testFingerprint() + { + $ravenClient = $this->getRavenClient(); + $handler = $this->getHandler($ravenClient); + + $fingerprint = array('{{ default }}', 'other value'); + $record = $this->getRecord(Logger::INFO, 'test', array('fingerprint' => $fingerprint)); + $handler->handle($record); + + $this->assertEquals($fingerprint, $ravenClient->lastData['fingerprint']); + } + + public function testUserContext() + { + $ravenClient = $this->getRavenClient(); + $handler = $this->getHandler($ravenClient); + + $recordWithNoContext = $this->getRecord(Logger::INFO, 'test with default user context'); + // set user context 'externally' + + $user = array( + 'id' => '123', + 'email' => 'test@test.com', + ); + + $recordWithContext = $this->getRecord(Logger::INFO, 'test', array('user' => $user)); + + $ravenClient->user_context(array('id' => 'test_user_id')); + // handle context + $handler->handle($recordWithContext); + $this->assertEquals($user, $ravenClient->lastData['user']); + + // check to see if its reset + $handler->handle($recordWithNoContext); + $this->assertInternalType('array', $ravenClient->context->user); + $this->assertSame('test_user_id', $ravenClient->context->user['id']); + + // handle with null context + $ravenClient->user_context(null); + $handler->handle($recordWithContext); + $this->assertEquals($user, $ravenClient->lastData['user']); + + // check to see if its reset + $handler->handle($recordWithNoContext); + $this->assertNull($ravenClient->context->user); + } + + public function testException() + { + $ravenClient = $this->getRavenClient(); + $handler = $this->getHandler($ravenClient); + + try { + $this->methodThatThrowsAnException(); + } catch (\Exception $e) { + $record = $this->getRecord(Logger::ERROR, $e->getMessage(), array('exception' => $e)); + $handler->handle($record); + } + + $this->assertEquals($record['message'], $ravenClient->lastData['message']); + } + + public function testHandleBatch() + { + $records = $this->getMultipleRecords(); + $records[] = $this->getRecord(Logger::WARNING, 'warning'); + $records[] = $this->getRecord(Logger::WARNING, 'warning'); + + $logFormatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $logFormatter->expects($this->once())->method('formatBatch'); + + $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter->expects($this->once())->method('format')->with($this->callback(function ($record) { + return $record['level'] == 400; + })); + + $handler = $this->getHandler($this->getRavenClient()); + $handler->setBatchFormatter($logFormatter); + $handler->setFormatter($formatter); + $handler->handleBatch($records); + } + + public function testHandleBatchDoNothingIfRecordsAreBelowLevel() + { + $records = array( + $this->getRecord(Logger::DEBUG, 'debug message 1'), + $this->getRecord(Logger::DEBUG, 'debug message 2'), + $this->getRecord(Logger::INFO, 'information'), + ); + + $handler = $this->getMock('Monolog\Handler\RavenHandler', null, array($this->getRavenClient())); + $handler->expects($this->never())->method('handle'); + $handler->setLevel(Logger::ERROR); + $handler->handleBatch($records); + } + + public function testHandleBatchPicksProperMessage() + { + $records = array( + $this->getRecord(Logger::DEBUG, 'debug message 1'), + $this->getRecord(Logger::DEBUG, 'debug message 2'), + $this->getRecord(Logger::INFO, 'information 1'), + $this->getRecord(Logger::ERROR, 'error 1'), + $this->getRecord(Logger::WARNING, 'warning'), + $this->getRecord(Logger::ERROR, 'error 2'), + $this->getRecord(Logger::INFO, 'information 2'), + ); + + $logFormatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $logFormatter->expects($this->once())->method('formatBatch'); + + $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter->expects($this->once())->method('format')->with($this->callback(function ($record) use ($records) { + return $record['message'] == 'error 1'; + })); + + $handler = $this->getHandler($this->getRavenClient()); + $handler->setBatchFormatter($logFormatter); + $handler->setFormatter($formatter); + $handler->handleBatch($records); + } + + public function testGetSetBatchFormatter() + { + $ravenClient = $this->getRavenClient(); + $handler = $this->getHandler($ravenClient); + + $handler->setBatchFormatter($formatter = new LineFormatter()); + $this->assertSame($formatter, $handler->getBatchFormatter()); + } + + public function testRelease() + { + $ravenClient = $this->getRavenClient(); + $handler = $this->getHandler($ravenClient); + $release = 'v42.42.42'; + $handler->setRelease($release); + $record = $this->getRecord(Logger::INFO, 'test'); + $handler->handle($record); + $this->assertEquals($release, $ravenClient->lastData['release']); + + $localRelease = 'v41.41.41'; + $record = $this->getRecord(Logger::INFO, 'test', array('release' => $localRelease)); + $handler->handle($record); + $this->assertEquals($localRelease, $ravenClient->lastData['release']); + } + + private function methodThatThrowsAnException() + { + throw new \Exception('This is an exception'); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/RedisHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/RedisHandlerTest.php new file mode 100644 index 0000000..689d527 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/RedisHandlerTest.php @@ -0,0 +1,127 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Formatter\LineFormatter; + +class RedisHandlerTest extends TestCase +{ + /** + * @expectedException InvalidArgumentException + */ + public function testConstructorShouldThrowExceptionForInvalidRedis() + { + new RedisHandler(new \stdClass(), 'key'); + } + + public function testConstructorShouldWorkWithPredis() + { + $redis = $this->getMock('Predis\Client'); + $this->assertInstanceof('Monolog\Handler\RedisHandler', new RedisHandler($redis, 'key')); + } + + public function testConstructorShouldWorkWithRedis() + { + $redis = $this->getMock('Redis'); + $this->assertInstanceof('Monolog\Handler\RedisHandler', new RedisHandler($redis, 'key')); + } + + public function testPredisHandle() + { + $redis = $this->getMock('Predis\Client', array('rpush')); + + // Predis\Client uses rpush + $redis->expects($this->once()) + ->method('rpush') + ->with('key', 'test'); + + $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + + $handler = new RedisHandler($redis, 'key'); + $handler->setFormatter(new LineFormatter("%message%")); + $handler->handle($record); + } + + public function testRedisHandle() + { + $redis = $this->getMock('Redis', array('rpush')); + + // Redis uses rPush + $redis->expects($this->once()) + ->method('rPush') + ->with('key', 'test'); + + $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + + $handler = new RedisHandler($redis, 'key'); + $handler->setFormatter(new LineFormatter("%message%")); + $handler->handle($record); + } + + public function testRedisHandleCapped() + { + $redis = $this->getMock('Redis', array('multi', 'rpush', 'ltrim', 'exec')); + + // Redis uses multi + $redis->expects($this->once()) + ->method('multi') + ->will($this->returnSelf()); + + $redis->expects($this->once()) + ->method('rpush') + ->will($this->returnSelf()); + + $redis->expects($this->once()) + ->method('ltrim') + ->will($this->returnSelf()); + + $redis->expects($this->once()) + ->method('exec') + ->will($this->returnSelf()); + + $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + + $handler = new RedisHandler($redis, 'key', Logger::DEBUG, true, 10); + $handler->setFormatter(new LineFormatter("%message%")); + $handler->handle($record); + } + + public function testPredisHandleCapped() + { + $redis = $this->getMock('Predis\Client', array('transaction')); + + $redisTransaction = $this->getMock('Predis\Client', array('rpush', 'ltrim')); + + $redisTransaction->expects($this->once()) + ->method('rpush') + ->will($this->returnSelf()); + + $redisTransaction->expects($this->once()) + ->method('ltrim') + ->will($this->returnSelf()); + + // Redis uses multi + $redis->expects($this->once()) + ->method('transaction') + ->will($this->returnCallback(function ($cb) use ($redisTransaction) { + $cb($redisTransaction); + })); + + $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + + $handler = new RedisHandler($redis, 'key', Logger::DEBUG, true, 10); + $handler->setFormatter(new LineFormatter("%message%")); + $handler->handle($record); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/RollbarHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/RollbarHandlerTest.php new file mode 100644 index 0000000..f302e91 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/RollbarHandlerTest.php @@ -0,0 +1,84 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Exception; +use Monolog\TestCase; +use Monolog\Logger; +use PHPUnit_Framework_MockObject_MockObject as MockObject; + +/** + * @author Erik Johansson + * @see https://rollbar.com/docs/notifier/rollbar-php/ + * + * @coversDefaultClass Monolog\Handler\RollbarHandler + */ +class RollbarHandlerTest extends TestCase +{ + /** + * @var MockObject + */ + private $rollbarNotifier; + + /** + * @var array + */ + public $reportedExceptionArguments = null; + + protected function setUp() + { + parent::setUp(); + + $this->setupRollbarNotifierMock(); + } + + /** + * When reporting exceptions to Rollbar the + * level has to be set in the payload data + */ + public function testExceptionLogLevel() + { + $handler = $this->createHandler(); + + $handler->handle($this->createExceptionRecord(Logger::DEBUG)); + + $this->assertEquals('debug', $this->reportedExceptionArguments['payload']['level']); + } + + private function setupRollbarNotifierMock() + { + $this->rollbarNotifier = $this->getMockBuilder('RollbarNotifier') + ->setMethods(array('report_message', 'report_exception', 'flush')) + ->getMock(); + + $that = $this; + + $this->rollbarNotifier + ->expects($this->any()) + ->method('report_exception') + ->willReturnCallback(function ($exception, $context, $payload) use ($that) { + $that->reportedExceptionArguments = compact('exception', 'context', 'payload'); + }); + } + + private function createHandler() + { + return new RollbarHandler($this->rollbarNotifier, Logger::DEBUG); + } + + private function createExceptionRecord($level = Logger::DEBUG, $message = 'test', $exception = null) + { + return $this->getRecord($level, $message, array( + 'exception' => $exception ?: new Exception() + )); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/RotatingFileHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/RotatingFileHandlerTest.php new file mode 100644 index 0000000..f1feb22 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/RotatingFileHandlerTest.php @@ -0,0 +1,211 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use PHPUnit_Framework_Error_Deprecated; + +/** + * @covers Monolog\Handler\RotatingFileHandler + */ +class RotatingFileHandlerTest extends TestCase +{ + /** + * This var should be private but then the anonymous function + * in the `setUp` method won't be able to set it. `$this` cant't + * be used in the anonymous function in `setUp` because PHP 5.3 + * does not support it. + */ + public $lastError; + + public function setUp() + { + $dir = __DIR__.'/Fixtures'; + chmod($dir, 0777); + if (!is_writable($dir)) { + $this->markTestSkipped($dir.' must be writable to test the RotatingFileHandler.'); + } + $this->lastError = null; + $self = $this; + // workaround with &$self used for PHP 5.3 + set_error_handler(function($code, $message) use (&$self) { + $self->lastError = array( + 'code' => $code, + 'message' => $message, + ); + }); + } + + private function assertErrorWasTriggered($code, $message) + { + if (empty($this->lastError)) { + $this->fail( + sprintf( + 'Failed asserting that error with code `%d` and message `%s` was triggered', + $code, + $message + ) + ); + } + $this->assertEquals($code, $this->lastError['code'], sprintf('Expected an error with code %d to be triggered, got `%s` instead', $code, $this->lastError['code'])); + $this->assertEquals($message, $this->lastError['message'], sprintf('Expected an error with message `%d` to be triggered, got `%s` instead', $message, $this->lastError['message'])); + } + + public function testRotationCreatesNewFile() + { + touch(__DIR__.'/Fixtures/foo-'.date('Y-m-d', time() - 86400).'.rot'); + + $handler = new RotatingFileHandler(__DIR__.'/Fixtures/foo.rot'); + $handler->setFormatter($this->getIdentityFormatter()); + $handler->handle($this->getRecord()); + + $log = __DIR__.'/Fixtures/foo-'.date('Y-m-d').'.rot'; + $this->assertTrue(file_exists($log)); + $this->assertEquals('test', file_get_contents($log)); + } + + /** + * @dataProvider rotationTests + */ + public function testRotation($createFile, $dateFormat, $timeCallback) + { + touch($old1 = __DIR__.'/Fixtures/foo-'.date($dateFormat, $timeCallback(-1)).'.rot'); + touch($old2 = __DIR__.'/Fixtures/foo-'.date($dateFormat, $timeCallback(-2)).'.rot'); + touch($old3 = __DIR__.'/Fixtures/foo-'.date($dateFormat, $timeCallback(-3)).'.rot'); + touch($old4 = __DIR__.'/Fixtures/foo-'.date($dateFormat, $timeCallback(-4)).'.rot'); + + $log = __DIR__.'/Fixtures/foo-'.date($dateFormat).'.rot'; + + if ($createFile) { + touch($log); + } + + $handler = new RotatingFileHandler(__DIR__.'/Fixtures/foo.rot', 2); + $handler->setFormatter($this->getIdentityFormatter()); + $handler->setFilenameFormat('{filename}-{date}', $dateFormat); + $handler->handle($this->getRecord()); + + $handler->close(); + + $this->assertTrue(file_exists($log)); + $this->assertTrue(file_exists($old1)); + $this->assertEquals($createFile, file_exists($old2)); + $this->assertEquals($createFile, file_exists($old3)); + $this->assertEquals($createFile, file_exists($old4)); + $this->assertEquals('test', file_get_contents($log)); + } + + public function rotationTests() + { + $now = time(); + $dayCallback = function($ago) use ($now) { + return $now + 86400 * $ago; + }; + $monthCallback = function($ago) { + return gmmktime(0, 0, 0, date('n') + $ago, 1, date('Y')); + }; + $yearCallback = function($ago) { + return gmmktime(0, 0, 0, 1, 1, date('Y') + $ago); + }; + + return array( + 'Rotation is triggered when the file of the current day is not present' + => array(true, RotatingFileHandler::FILE_PER_DAY, $dayCallback), + 'Rotation is not triggered when the file of the current day is already present' + => array(false, RotatingFileHandler::FILE_PER_DAY, $dayCallback), + + 'Rotation is triggered when the file of the current month is not present' + => array(true, RotatingFileHandler::FILE_PER_MONTH, $monthCallback), + 'Rotation is not triggered when the file of the current month is already present' + => array(false, RotatingFileHandler::FILE_PER_MONTH, $monthCallback), + + 'Rotation is triggered when the file of the current year is not present' + => array(true, RotatingFileHandler::FILE_PER_YEAR, $yearCallback), + 'Rotation is not triggered when the file of the current year is already present' + => array(false, RotatingFileHandler::FILE_PER_YEAR, $yearCallback), + ); + } + + /** + * @dataProvider dateFormatProvider + */ + public function testAllowOnlyFixedDefinedDateFormats($dateFormat, $valid) + { + $handler = new RotatingFileHandler(__DIR__.'/Fixtures/foo.rot', 2); + $handler->setFilenameFormat('{filename}-{date}', $dateFormat); + if (!$valid) { + $this->assertErrorWasTriggered( + E_USER_DEPRECATED, + 'Invalid date format - format must be one of RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), '. + 'RotatingFileHandler::FILE_PER_MONTH ("Y-m") or RotatingFileHandler::FILE_PER_YEAR ("Y"), '. + 'or you can set one of the date formats using slashes, underscores and/or dots instead of dashes.' + ); + } + } + + public function dateFormatProvider() + { + return array( + array(RotatingFileHandler::FILE_PER_DAY, true), + array(RotatingFileHandler::FILE_PER_MONTH, true), + array(RotatingFileHandler::FILE_PER_YEAR, true), + array('m-d-Y', false), + array('Y-m-d-h-i', false) + ); + } + + /** + * @dataProvider filenameFormatProvider + */ + public function testDisallowFilenameFormatsWithoutDate($filenameFormat, $valid) + { + $handler = new RotatingFileHandler(__DIR__.'/Fixtures/foo.rot', 2); + $handler->setFilenameFormat($filenameFormat, RotatingFileHandler::FILE_PER_DAY); + if (!$valid) { + $this->assertErrorWasTriggered( + E_USER_DEPRECATED, + 'Invalid filename format - format should contain at least `{date}`, because otherwise rotating is impossible.' + ); + } + } + + public function filenameFormatProvider() + { + return array( + array('{filename}', false), + array('{filename}-{date}', true), + array('{date}', true), + array('foobar-{date}', true), + array('foo-{date}-bar', true), + array('{date}-foobar', true), + array('foobar', false), + ); + } + + public function testReuseCurrentFile() + { + $log = __DIR__.'/Fixtures/foo-'.date('Y-m-d').'.rot'; + file_put_contents($log, "foo"); + $handler = new RotatingFileHandler(__DIR__.'/Fixtures/foo.rot'); + $handler->setFormatter($this->getIdentityFormatter()); + $handler->handle($this->getRecord()); + $this->assertEquals('footest', file_get_contents($log)); + } + + public function tearDown() + { + foreach (glob(__DIR__.'/Fixtures/*.rot') as $file) { + unlink($file); + } + restore_error_handler(); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/SamplingHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/SamplingHandlerTest.php new file mode 100644 index 0000000..b354cee --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/SamplingHandlerTest.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; + +/** + * @covers Monolog\Handler\SamplingHandler::handle + */ +class SamplingHandlerTest extends TestCase +{ + public function testHandle() + { + $testHandler = new TestHandler(); + $handler = new SamplingHandler($testHandler, 2); + for ($i = 0; $i < 10000; $i++) { + $handler->handle($this->getRecord()); + } + $count = count($testHandler->getRecords()); + // $count should be half of 10k, so between 4k and 6k + $this->assertLessThan(6000, $count); + $this->assertGreaterThan(4000, $count); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/Slack/SlackRecordTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/Slack/SlackRecordTest.php new file mode 100644 index 0000000..e1aa96d --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/Slack/SlackRecordTest.php @@ -0,0 +1,387 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\Slack; + +use Monolog\Logger; +use Monolog\TestCase; + +/** + * @coversDefaultClass Monolog\Handler\Slack\SlackRecord + */ +class SlackRecordTest extends TestCase +{ + private $jsonPrettyPrintFlag; + + protected function setUp() + { + $this->jsonPrettyPrintFlag = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 128; + } + + public function dataGetAttachmentColor() + { + return array( + array(Logger::DEBUG, SlackRecord::COLOR_DEFAULT), + array(Logger::INFO, SlackRecord::COLOR_GOOD), + array(Logger::NOTICE, SlackRecord::COLOR_GOOD), + array(Logger::WARNING, SlackRecord::COLOR_WARNING), + array(Logger::ERROR, SlackRecord::COLOR_DANGER), + array(Logger::CRITICAL, SlackRecord::COLOR_DANGER), + array(Logger::ALERT, SlackRecord::COLOR_DANGER), + array(Logger::EMERGENCY, SlackRecord::COLOR_DANGER), + ); + } + + /** + * @dataProvider dataGetAttachmentColor + * @param int $logLevel + * @param string $expectedColour RGB hex color or name of Slack color + * @covers ::getAttachmentColor + */ + public function testGetAttachmentColor($logLevel, $expectedColour) + { + $slackRecord = new SlackRecord(); + $this->assertSame( + $expectedColour, + $slackRecord->getAttachmentColor($logLevel) + ); + } + + public function testAddsChannel() + { + $channel = '#test'; + $record = new SlackRecord($channel); + $data = $record->getSlackData($this->getRecord()); + + $this->assertArrayHasKey('channel', $data); + $this->assertSame($channel, $data['channel']); + } + + public function testNoUsernameByDefault() + { + $record = new SlackRecord(); + $data = $record->getSlackData($this->getRecord()); + + $this->assertArrayNotHasKey('username', $data); + } + + /** + * @return array + */ + public function dataStringify() + { + $jsonPrettyPrintFlag = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 128; + + $multipleDimensions = array(array(1, 2)); + $numericKeys = array('library' => 'monolog'); + $singleDimension = array(1, 'Hello', 'Jordi'); + + return array( + array(array(), '[]'), + array($multipleDimensions, json_encode($multipleDimensions, $jsonPrettyPrintFlag)), + array($numericKeys, json_encode($numericKeys, $jsonPrettyPrintFlag)), + array($singleDimension, json_encode($singleDimension)) + ); + } + + /** + * @dataProvider dataStringify + */ + public function testStringify($fields, $expectedResult) + { + $slackRecord = new SlackRecord( + '#test', + 'test', + true, + null, + true, + true + ); + + $this->assertSame($expectedResult, $slackRecord->stringify($fields)); + } + + public function testAddsCustomUsername() + { + $username = 'Monolog bot'; + $record = new SlackRecord(null, $username); + $data = $record->getSlackData($this->getRecord()); + + $this->assertArrayHasKey('username', $data); + $this->assertSame($username, $data['username']); + } + + public function testNoIcon() + { + $record = new SlackRecord(); + $data = $record->getSlackData($this->getRecord()); + + $this->assertArrayNotHasKey('icon_emoji', $data); + } + + public function testAddsIcon() + { + $record = $this->getRecord(); + $slackRecord = new SlackRecord(null, null, false, 'ghost'); + $data = $slackRecord->getSlackData($record); + + $slackRecord2 = new SlackRecord(null, null, false, 'http://github.com/Seldaek/monolog'); + $data2 = $slackRecord2->getSlackData($record); + + $this->assertArrayHasKey('icon_emoji', $data); + $this->assertSame(':ghost:', $data['icon_emoji']); + $this->assertArrayHasKey('icon_url', $data2); + $this->assertSame('http://github.com/Seldaek/monolog', $data2['icon_url']); + } + + public function testAttachmentsNotPresentIfNoAttachment() + { + $record = new SlackRecord(null, null, false); + $data = $record->getSlackData($this->getRecord()); + + $this->assertArrayNotHasKey('attachments', $data); + } + + public function testAddsOneAttachment() + { + $record = new SlackRecord(); + $data = $record->getSlackData($this->getRecord()); + + $this->assertArrayHasKey('attachments', $data); + $this->assertArrayHasKey(0, $data['attachments']); + $this->assertInternalType('array', $data['attachments'][0]); + } + + public function testTextEqualsMessageIfNoAttachment() + { + $message = 'Test message'; + $record = new SlackRecord(null, null, false); + $data = $record->getSlackData($this->getRecord(Logger::WARNING, $message)); + + $this->assertArrayHasKey('text', $data); + $this->assertSame($message, $data['text']); + } + + public function testTextEqualsFormatterOutput() + { + $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter + ->expects($this->any()) + ->method('format') + ->will($this->returnCallback(function ($record) { return $record['message'] . 'test'; })); + + $formatter2 = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter2 + ->expects($this->any()) + ->method('format') + ->will($this->returnCallback(function ($record) { return $record['message'] . 'test1'; })); + + $message = 'Test message'; + $record = new SlackRecord(null, null, false, null, false, false, array(), $formatter); + $data = $record->getSlackData($this->getRecord(Logger::WARNING, $message)); + + $this->assertArrayHasKey('text', $data); + $this->assertSame($message . 'test', $data['text']); + + $record->setFormatter($formatter2); + $data = $record->getSlackData($this->getRecord(Logger::WARNING, $message)); + + $this->assertArrayHasKey('text', $data); + $this->assertSame($message . 'test1', $data['text']); + } + + public function testAddsFallbackAndTextToAttachment() + { + $message = 'Test message'; + $record = new SlackRecord(null); + $data = $record->getSlackData($this->getRecord(Logger::WARNING, $message)); + + $this->assertSame($message, $data['attachments'][0]['text']); + $this->assertSame($message, $data['attachments'][0]['fallback']); + } + + public function testMapsLevelToColorAttachmentColor() + { + $record = new SlackRecord(null); + $errorLoggerRecord = $this->getRecord(Logger::ERROR); + $emergencyLoggerRecord = $this->getRecord(Logger::EMERGENCY); + $warningLoggerRecord = $this->getRecord(Logger::WARNING); + $infoLoggerRecord = $this->getRecord(Logger::INFO); + $debugLoggerRecord = $this->getRecord(Logger::DEBUG); + + $data = $record->getSlackData($errorLoggerRecord); + $this->assertSame(SlackRecord::COLOR_DANGER, $data['attachments'][0]['color']); + + $data = $record->getSlackData($emergencyLoggerRecord); + $this->assertSame(SlackRecord::COLOR_DANGER, $data['attachments'][0]['color']); + + $data = $record->getSlackData($warningLoggerRecord); + $this->assertSame(SlackRecord::COLOR_WARNING, $data['attachments'][0]['color']); + + $data = $record->getSlackData($infoLoggerRecord); + $this->assertSame(SlackRecord::COLOR_GOOD, $data['attachments'][0]['color']); + + $data = $record->getSlackData($debugLoggerRecord); + $this->assertSame(SlackRecord::COLOR_DEFAULT, $data['attachments'][0]['color']); + } + + public function testAddsShortAttachmentWithoutContextAndExtra() + { + $level = Logger::ERROR; + $levelName = Logger::getLevelName($level); + $record = new SlackRecord(null, null, true, null, true); + $data = $record->getSlackData($this->getRecord($level, 'test', array('test' => 1))); + + $attachment = $data['attachments'][0]; + $this->assertArrayHasKey('title', $attachment); + $this->assertArrayHasKey('fields', $attachment); + $this->assertSame($levelName, $attachment['title']); + $this->assertSame(array(), $attachment['fields']); + } + + public function testAddsShortAttachmentWithContextAndExtra() + { + $level = Logger::ERROR; + $levelName = Logger::getLevelName($level); + $context = array('test' => 1); + $extra = array('tags' => array('web')); + $record = new SlackRecord(null, null, true, null, true, true); + $loggerRecord = $this->getRecord($level, 'test', $context); + $loggerRecord['extra'] = $extra; + $data = $record->getSlackData($loggerRecord); + + $attachment = $data['attachments'][0]; + $this->assertArrayHasKey('title', $attachment); + $this->assertArrayHasKey('fields', $attachment); + $this->assertCount(2, $attachment['fields']); + $this->assertSame($levelName, $attachment['title']); + $this->assertSame( + array( + array( + 'title' => 'Extra', + 'value' => sprintf('```%s```', json_encode($extra, $this->jsonPrettyPrintFlag)), + 'short' => false + ), + array( + 'title' => 'Context', + 'value' => sprintf('```%s```', json_encode($context, $this->jsonPrettyPrintFlag)), + 'short' => false + ) + ), + $attachment['fields'] + ); + } + + public function testAddsLongAttachmentWithoutContextAndExtra() + { + $level = Logger::ERROR; + $levelName = Logger::getLevelName($level); + $record = new SlackRecord(null, null, true, null); + $data = $record->getSlackData($this->getRecord($level, 'test', array('test' => 1))); + + $attachment = $data['attachments'][0]; + $this->assertArrayHasKey('title', $attachment); + $this->assertArrayHasKey('fields', $attachment); + $this->assertCount(1, $attachment['fields']); + $this->assertSame('Message', $attachment['title']); + $this->assertSame( + array(array( + 'title' => 'Level', + 'value' => $levelName, + 'short' => false + )), + $attachment['fields'] + ); + } + + public function testAddsLongAttachmentWithContextAndExtra() + { + $level = Logger::ERROR; + $levelName = Logger::getLevelName($level); + $context = array('test' => 1); + $extra = array('tags' => array('web')); + $record = new SlackRecord(null, null, true, null, false, true); + $loggerRecord = $this->getRecord($level, 'test', $context); + $loggerRecord['extra'] = $extra; + $data = $record->getSlackData($loggerRecord); + + $expectedFields = array( + array( + 'title' => 'Level', + 'value' => $levelName, + 'short' => false, + ), + array( + 'title' => 'tags', + 'value' => sprintf('```%s```', json_encode($extra['tags'])), + 'short' => false + ), + array( + 'title' => 'test', + 'value' => $context['test'], + 'short' => false + ) + ); + + $attachment = $data['attachments'][0]; + $this->assertArrayHasKey('title', $attachment); + $this->assertArrayHasKey('fields', $attachment); + $this->assertCount(3, $attachment['fields']); + $this->assertSame('Message', $attachment['title']); + $this->assertSame( + $expectedFields, + $attachment['fields'] + ); + } + + public function testAddsTimestampToAttachment() + { + $record = $this->getRecord(); + $slackRecord = new SlackRecord(); + $data = $slackRecord->getSlackData($this->getRecord()); + + $attachment = $data['attachments'][0]; + $this->assertArrayHasKey('ts', $attachment); + $this->assertSame($record['datetime']->getTimestamp(), $attachment['ts']); + } + + public function testExcludeExtraAndContextFields() + { + $record = $this->getRecord( + Logger::WARNING, + 'test', + array('info' => array('library' => 'monolog', 'author' => 'Jordi')) + ); + $record['extra'] = array('tags' => array('web', 'cli')); + + $slackRecord = new SlackRecord(null, null, true, null, false, true, array('context.info.library', 'extra.tags.1')); + $data = $slackRecord->getSlackData($record); + $attachment = $data['attachments'][0]; + + $expected = array( + array( + 'title' => 'info', + 'value' => sprintf('```%s```', json_encode(array('author' => 'Jordi'), $this->jsonPrettyPrintFlag)), + 'short' => false + ), + array( + 'title' => 'tags', + 'value' => sprintf('```%s```', json_encode(array('web'))), + 'short' => false + ), + ); + + foreach ($expected as $field) { + $this->assertNotFalse(array_search($field, $attachment['fields'])); + break; + } + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php new file mode 100644 index 0000000..b12b01f --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php @@ -0,0 +1,155 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Formatter\LineFormatter; +use Monolog\Handler\Slack\SlackRecord; + +/** + * @author Greg Kedzierski + * @see https://api.slack.com/ + */ +class SlackHandlerTest extends TestCase +{ + /** + * @var resource + */ + private $res; + + /** + * @var SlackHandler + */ + private $handler; + + public function setUp() + { + if (!extension_loaded('openssl')) { + $this->markTestSkipped('This test requires openssl to run'); + } + } + + public function testWriteHeader() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/POST \/api\/chat.postMessage HTTP\/1.1\\r\\nHost: slack.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + } + + public function testWriteContent() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegExp('/username=Monolog/', $content); + $this->assertRegExp('/channel=channel1/', $content); + $this->assertRegExp('/token=myToken/', $content); + $this->assertRegExp('/attachments/', $content); + } + + public function testWriteContentUsesFormatterIfProvided() + { + $this->createHandler('myToken', 'channel1', 'Monolog', false); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->createHandler('myToken', 'channel1', 'Monolog', false); + $this->handler->setFormatter(new LineFormatter('foo--%message%')); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test2')); + fseek($this->res, 0); + $content2 = fread($this->res, 1024); + + $this->assertRegexp('/text=test1/', $content); + $this->assertRegexp('/text=foo--test2/', $content2); + } + + public function testWriteContentWithEmoji() + { + $this->createHandler('myToken', 'channel1', 'Monolog', true, 'alien'); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/icon_emoji=%3Aalien%3A/', $content); + } + + /** + * @dataProvider provideLevelColors + */ + public function testWriteContentWithColors($level, $expectedColor) + { + $this->createHandler(); + $this->handler->handle($this->getRecord($level, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/%22color%22%3A%22'.$expectedColor.'/', $content); + } + + public function testWriteContentWithPlainTextMessage() + { + $this->createHandler('myToken', 'channel1', 'Monolog', false); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/text=test1/', $content); + } + + public function provideLevelColors() + { + return array( + array(Logger::DEBUG, urlencode(SlackRecord::COLOR_DEFAULT)), + array(Logger::INFO, SlackRecord::COLOR_GOOD), + array(Logger::NOTICE, SlackRecord::COLOR_GOOD), + array(Logger::WARNING, SlackRecord::COLOR_WARNING), + array(Logger::ERROR, SlackRecord::COLOR_DANGER), + array(Logger::CRITICAL, SlackRecord::COLOR_DANGER), + array(Logger::ALERT, SlackRecord::COLOR_DANGER), + array(Logger::EMERGENCY,SlackRecord::COLOR_DANGER), + ); + } + + private function createHandler($token = 'myToken', $channel = 'channel1', $username = 'Monolog', $useAttachment = true, $iconEmoji = null, $useShortAttachment = false, $includeExtra = false) + { + $constructorArgs = array($token, $channel, $username, $useAttachment, $iconEmoji, Logger::DEBUG, true, $useShortAttachment, $includeExtra); + $this->res = fopen('php://memory', 'a'); + $this->handler = $this->getMock( + '\Monolog\Handler\SlackHandler', + array('fsockopen', 'streamSetTimeout', 'closeSocket'), + $constructorArgs + ); + + $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($this->handler, 'localhost:1234'); + + $this->handler->expects($this->any()) + ->method('fsockopen') + ->will($this->returnValue($this->res)); + $this->handler->expects($this->any()) + ->method('streamSetTimeout') + ->will($this->returnValue(true)); + $this->handler->expects($this->any()) + ->method('closeSocket') + ->will($this->returnValue(true)); + + $this->handler->setFormatter($this->getIdentityFormatter()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/SlackWebhookHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/SlackWebhookHandlerTest.php new file mode 100644 index 0000000..c9229e2 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/SlackWebhookHandlerTest.php @@ -0,0 +1,107 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; +use Monolog\Formatter\LineFormatter; +use Monolog\Handler\Slack\SlackRecord; + +/** + * @author Haralan Dobrev + * @see https://api.slack.com/incoming-webhooks + * @coversDefaultClass Monolog\Handler\SlackWebhookHandler + */ +class SlackWebhookHandlerTest extends TestCase +{ + const WEBHOOK_URL = 'https://hooks.slack.com/services/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E'; + + /** + * @covers ::__construct + * @covers ::getSlackRecord + */ + public function testConstructorMinimal() + { + $handler = new SlackWebhookHandler(self::WEBHOOK_URL); + $record = $this->getRecord(); + $slackRecord = $handler->getSlackRecord(); + $this->assertInstanceOf('Monolog\Handler\Slack\SlackRecord', $slackRecord); + $this->assertEquals(array( + 'attachments' => array( + array( + 'fallback' => 'test', + 'text' => 'test', + 'color' => SlackRecord::COLOR_WARNING, + 'fields' => array( + array( + 'title' => 'Level', + 'value' => 'WARNING', + 'short' => false, + ), + ), + 'title' => 'Message', + 'mrkdwn_in' => array('fields'), + 'ts' => $record['datetime']->getTimestamp(), + ), + ), + ), $slackRecord->getSlackData($record)); + } + + /** + * @covers ::__construct + * @covers ::getSlackRecord + */ + public function testConstructorFull() + { + $handler = new SlackWebhookHandler( + self::WEBHOOK_URL, + 'test-channel', + 'test-username', + false, + ':ghost:', + false, + false, + Logger::DEBUG, + false + ); + + $slackRecord = $handler->getSlackRecord(); + $this->assertInstanceOf('Monolog\Handler\Slack\SlackRecord', $slackRecord); + $this->assertEquals(array( + 'username' => 'test-username', + 'text' => 'test', + 'channel' => 'test-channel', + 'icon_emoji' => ':ghost:', + ), $slackRecord->getSlackData($this->getRecord())); + } + + /** + * @covers ::getFormatter + */ + public function testGetFormatter() + { + $handler = new SlackWebhookHandler(self::WEBHOOK_URL); + $formatter = $handler->getFormatter(); + $this->assertInstanceOf('Monolog\Formatter\FormatterInterface', $formatter); + } + + /** + * @covers ::setFormatter + */ + public function testSetFormatter() + { + $handler = new SlackWebhookHandler(self::WEBHOOK_URL); + $formatter = new LineFormatter(); + $handler->setFormatter($formatter); + $this->assertSame($formatter, $handler->getFormatter()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/SlackbotHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/SlackbotHandlerTest.php new file mode 100644 index 0000000..b1b02bd --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/SlackbotHandlerTest.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @author Haralan Dobrev + * @see https://slack.com/apps/A0F81R8ET-slackbot + * @coversDefaultClass Monolog\Handler\SlackbotHandler + */ +class SlackbotHandlerTest extends TestCase +{ + /** + * @covers ::__construct + */ + public function testConstructorMinimal() + { + $handler = new SlackbotHandler('test-team', 'test-token', 'test-channel'); + $this->assertInstanceOf('Monolog\Handler\AbstractProcessingHandler', $handler); + } + + /** + * @covers ::__construct + */ + public function testConstructorFull() + { + $handler = new SlackbotHandler( + 'test-team', + 'test-token', + 'test-channel', + Logger::DEBUG, + false + ); + $this->assertInstanceOf('Monolog\Handler\AbstractProcessingHandler', $handler); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/SocketHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/SocketHandlerTest.php new file mode 100644 index 0000000..1f9c1f2 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/SocketHandlerTest.php @@ -0,0 +1,309 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @author Pablo de Leon Belloc + */ +class SocketHandlerTest extends TestCase +{ + /** + * @var Monolog\Handler\SocketHandler + */ + private $handler; + + /** + * @var resource + */ + private $res; + + /** + * @expectedException UnexpectedValueException + */ + public function testInvalidHostname() + { + $this->createHandler('garbage://here'); + $this->writeRecord('data'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testBadConnectionTimeout() + { + $this->createHandler('localhost:1234'); + $this->handler->setConnectionTimeout(-1); + } + + public function testSetConnectionTimeout() + { + $this->createHandler('localhost:1234'); + $this->handler->setConnectionTimeout(10.1); + $this->assertEquals(10.1, $this->handler->getConnectionTimeout()); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testBadTimeout() + { + $this->createHandler('localhost:1234'); + $this->handler->setTimeout(-1); + } + + public function testSetTimeout() + { + $this->createHandler('localhost:1234'); + $this->handler->setTimeout(10.25); + $this->assertEquals(10.25, $this->handler->getTimeout()); + } + + public function testSetWritingTimeout() + { + $this->createHandler('localhost:1234'); + $this->handler->setWritingTimeout(10.25); + $this->assertEquals(10.25, $this->handler->getWritingTimeout()); + } + + public function testSetConnectionString() + { + $this->createHandler('tcp://localhost:9090'); + $this->assertEquals('tcp://localhost:9090', $this->handler->getConnectionString()); + } + + /** + * @expectedException UnexpectedValueException + */ + public function testExceptionIsThrownOnFsockopenError() + { + $this->setMockHandler(array('fsockopen')); + $this->handler->expects($this->once()) + ->method('fsockopen') + ->will($this->returnValue(false)); + $this->writeRecord('Hello world'); + } + + /** + * @expectedException UnexpectedValueException + */ + public function testExceptionIsThrownOnPfsockopenError() + { + $this->setMockHandler(array('pfsockopen')); + $this->handler->expects($this->once()) + ->method('pfsockopen') + ->will($this->returnValue(false)); + $this->handler->setPersistent(true); + $this->writeRecord('Hello world'); + } + + /** + * @expectedException UnexpectedValueException + */ + public function testExceptionIsThrownIfCannotSetTimeout() + { + $this->setMockHandler(array('streamSetTimeout')); + $this->handler->expects($this->once()) + ->method('streamSetTimeout') + ->will($this->returnValue(false)); + $this->writeRecord('Hello world'); + } + + /** + * @expectedException RuntimeException + */ + public function testWriteFailsOnIfFwriteReturnsFalse() + { + $this->setMockHandler(array('fwrite')); + + $callback = function ($arg) { + $map = array( + 'Hello world' => 6, + 'world' => false, + ); + + return $map[$arg]; + }; + + $this->handler->expects($this->exactly(2)) + ->method('fwrite') + ->will($this->returnCallback($callback)); + + $this->writeRecord('Hello world'); + } + + /** + * @expectedException RuntimeException + */ + public function testWriteFailsIfStreamTimesOut() + { + $this->setMockHandler(array('fwrite', 'streamGetMetadata')); + + $callback = function ($arg) { + $map = array( + 'Hello world' => 6, + 'world' => 5, + ); + + return $map[$arg]; + }; + + $this->handler->expects($this->exactly(1)) + ->method('fwrite') + ->will($this->returnCallback($callback)); + $this->handler->expects($this->exactly(1)) + ->method('streamGetMetadata') + ->will($this->returnValue(array('timed_out' => true))); + + $this->writeRecord('Hello world'); + } + + /** + * @expectedException RuntimeException + */ + public function testWriteFailsOnIncompleteWrite() + { + $this->setMockHandler(array('fwrite', 'streamGetMetadata')); + + $res = $this->res; + $callback = function ($string) use ($res) { + fclose($res); + + return strlen('Hello'); + }; + + $this->handler->expects($this->exactly(1)) + ->method('fwrite') + ->will($this->returnCallback($callback)); + $this->handler->expects($this->exactly(1)) + ->method('streamGetMetadata') + ->will($this->returnValue(array('timed_out' => false))); + + $this->writeRecord('Hello world'); + } + + public function testWriteWithMemoryFile() + { + $this->setMockHandler(); + $this->writeRecord('test1'); + $this->writeRecord('test2'); + $this->writeRecord('test3'); + fseek($this->res, 0); + $this->assertEquals('test1test2test3', fread($this->res, 1024)); + } + + public function testWriteWithMock() + { + $this->setMockHandler(array('fwrite')); + + $callback = function ($arg) { + $map = array( + 'Hello world' => 6, + 'world' => 5, + ); + + return $map[$arg]; + }; + + $this->handler->expects($this->exactly(2)) + ->method('fwrite') + ->will($this->returnCallback($callback)); + + $this->writeRecord('Hello world'); + } + + public function testClose() + { + $this->setMockHandler(); + $this->writeRecord('Hello world'); + $this->assertInternalType('resource', $this->res); + $this->handler->close(); + $this->assertFalse(is_resource($this->res), "Expected resource to be closed after closing handler"); + } + + public function testCloseDoesNotClosePersistentSocket() + { + $this->setMockHandler(); + $this->handler->setPersistent(true); + $this->writeRecord('Hello world'); + $this->assertTrue(is_resource($this->res)); + $this->handler->close(); + $this->assertTrue(is_resource($this->res)); + } + + /** + * @expectedException \RuntimeException + */ + public function testAvoidInfiniteLoopWhenNoDataIsWrittenForAWritingTimeoutSeconds() + { + $this->setMockHandler(array('fwrite', 'streamGetMetadata')); + + $this->handler->expects($this->any()) + ->method('fwrite') + ->will($this->returnValue(0)); + + $this->handler->expects($this->any()) + ->method('streamGetMetadata') + ->will($this->returnValue(array('timed_out' => false))); + + $this->handler->setWritingTimeout(1); + + $this->writeRecord('Hello world'); + } + + private function createHandler($connectionString) + { + $this->handler = new SocketHandler($connectionString); + $this->handler->setFormatter($this->getIdentityFormatter()); + } + + private function writeRecord($string) + { + $this->handler->handle($this->getRecord(Logger::WARNING, $string)); + } + + private function setMockHandler(array $methods = array()) + { + $this->res = fopen('php://memory', 'a'); + + $defaultMethods = array('fsockopen', 'pfsockopen', 'streamSetTimeout'); + $newMethods = array_diff($methods, $defaultMethods); + + $finalMethods = array_merge($defaultMethods, $newMethods); + + $this->handler = $this->getMock( + '\Monolog\Handler\SocketHandler', $finalMethods, array('localhost:1234') + ); + + if (!in_array('fsockopen', $methods)) { + $this->handler->expects($this->any()) + ->method('fsockopen') + ->will($this->returnValue($this->res)); + } + + if (!in_array('pfsockopen', $methods)) { + $this->handler->expects($this->any()) + ->method('pfsockopen') + ->will($this->returnValue($this->res)); + } + + if (!in_array('streamSetTimeout', $methods)) { + $this->handler->expects($this->any()) + ->method('streamSetTimeout') + ->will($this->returnValue(true)); + } + + $this->handler->setFormatter($this->getIdentityFormatter()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/StreamHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/StreamHandlerTest.php new file mode 100644 index 0000000..487030f --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/StreamHandlerTest.php @@ -0,0 +1,184 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +class StreamHandlerTest extends TestCase +{ + /** + * @covers Monolog\Handler\StreamHandler::__construct + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWrite() + { + $handle = fopen('php://memory', 'a+'); + $handler = new StreamHandler($handle); + $handler->setFormatter($this->getIdentityFormatter()); + $handler->handle($this->getRecord(Logger::WARNING, 'test')); + $handler->handle($this->getRecord(Logger::WARNING, 'test2')); + $handler->handle($this->getRecord(Logger::WARNING, 'test3')); + fseek($handle, 0); + $this->assertEquals('testtest2test3', fread($handle, 100)); + } + + /** + * @covers Monolog\Handler\StreamHandler::close + */ + public function testCloseKeepsExternalHandlersOpen() + { + $handle = fopen('php://memory', 'a+'); + $handler = new StreamHandler($handle); + $this->assertTrue(is_resource($handle)); + $handler->close(); + $this->assertTrue(is_resource($handle)); + } + + /** + * @covers Monolog\Handler\StreamHandler::close + */ + public function testClose() + { + $handler = new StreamHandler('php://memory'); + $handler->handle($this->getRecord(Logger::WARNING, 'test')); + $streamProp = new \ReflectionProperty('Monolog\Handler\StreamHandler', 'stream'); + $streamProp->setAccessible(true); + $handle = $streamProp->getValue($handler); + + $this->assertTrue(is_resource($handle)); + $handler->close(); + $this->assertFalse(is_resource($handle)); + } + + /** + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWriteCreatesTheStreamResource() + { + $handler = new StreamHandler('php://memory'); + $handler->handle($this->getRecord()); + } + + /** + * @covers Monolog\Handler\StreamHandler::__construct + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWriteLocking() + { + $temp = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'monolog_locked_log'; + $handler = new StreamHandler($temp, Logger::DEBUG, true, null, true); + $handler->handle($this->getRecord()); + } + + /** + * @expectedException LogicException + * @covers Monolog\Handler\StreamHandler::__construct + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWriteMissingResource() + { + $handler = new StreamHandler(null); + $handler->handle($this->getRecord()); + } + + public function invalidArgumentProvider() + { + return array( + array(1), + array(array()), + array(array('bogus://url')), + ); + } + + /** + * @dataProvider invalidArgumentProvider + * @expectedException InvalidArgumentException + * @covers Monolog\Handler\StreamHandler::__construct + */ + public function testWriteInvalidArgument($invalidArgument) + { + $handler = new StreamHandler($invalidArgument); + } + + /** + * @expectedException UnexpectedValueException + * @covers Monolog\Handler\StreamHandler::__construct + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWriteInvalidResource() + { + $handler = new StreamHandler('bogus://url'); + $handler->handle($this->getRecord()); + } + + /** + * @expectedException UnexpectedValueException + * @covers Monolog\Handler\StreamHandler::__construct + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWriteNonExistingResource() + { + $handler = new StreamHandler('ftp://foo/bar/baz/'.rand(0, 10000)); + $handler->handle($this->getRecord()); + } + + /** + * @covers Monolog\Handler\StreamHandler::__construct + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWriteNonExistingPath() + { + $handler = new StreamHandler(sys_get_temp_dir().'/bar/'.rand(0, 10000).DIRECTORY_SEPARATOR.rand(0, 10000)); + $handler->handle($this->getRecord()); + } + + /** + * @covers Monolog\Handler\StreamHandler::__construct + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWriteNonExistingFileResource() + { + $handler = new StreamHandler('file://'.sys_get_temp_dir().'/bar/'.rand(0, 10000).DIRECTORY_SEPARATOR.rand(0, 10000)); + $handler->handle($this->getRecord()); + } + + /** + * @expectedException Exception + * @expectedExceptionMessageRegExp /There is no existing directory at/ + * @covers Monolog\Handler\StreamHandler::__construct + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWriteNonExistingAndNotCreatablePath() + { + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $this->markTestSkipped('Permissions checks can not run on windows'); + } + $handler = new StreamHandler('/foo/bar/'.rand(0, 10000).DIRECTORY_SEPARATOR.rand(0, 10000)); + $handler->handle($this->getRecord()); + } + + /** + * @expectedException Exception + * @expectedExceptionMessageRegExp /There is no existing directory at/ + * @covers Monolog\Handler\StreamHandler::__construct + * @covers Monolog\Handler\StreamHandler::write + */ + public function testWriteNonExistingAndNotCreatableFileResource() + { + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $this->markTestSkipped('Permissions checks can not run on windows'); + } + $handler = new StreamHandler('file:///foo/bar/'.rand(0, 10000).DIRECTORY_SEPARATOR.rand(0, 10000)); + $handler->handle($this->getRecord()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/SwiftMailerHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/SwiftMailerHandlerTest.php new file mode 100644 index 0000000..1d62940 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/SwiftMailerHandlerTest.php @@ -0,0 +1,113 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\TestCase; + +class SwiftMailerHandlerTest extends TestCase +{ + /** @var \Swift_Mailer|\PHPUnit_Framework_MockObject_MockObject */ + private $mailer; + + public function setUp() + { + $this->mailer = $this + ->getMockBuilder('Swift_Mailer') + ->disableOriginalConstructor() + ->getMock(); + } + + public function testMessageCreationIsLazyWhenUsingCallback() + { + $this->mailer->expects($this->never()) + ->method('send'); + + $callback = function () { + throw new \RuntimeException('Swift_Message creation callback should not have been called in this test'); + }; + $handler = new SwiftMailerHandler($this->mailer, $callback); + + $records = array( + $this->getRecord(Logger::DEBUG), + $this->getRecord(Logger::INFO), + ); + $handler->handleBatch($records); + } + + public function testMessageCanBeCustomizedGivenLoggedData() + { + // Wire Mailer to expect a specific Swift_Message with a customized Subject + $expectedMessage = new \Swift_Message(); + $this->mailer->expects($this->once()) + ->method('send') + ->with($this->callback(function ($value) use ($expectedMessage) { + return $value instanceof \Swift_Message + && $value->getSubject() === 'Emergency' + && $value === $expectedMessage; + })); + + // Callback dynamically changes subject based on number of logged records + $callback = function ($content, array $records) use ($expectedMessage) { + $subject = count($records) > 0 ? 'Emergency' : 'Normal'; + $expectedMessage->setSubject($subject); + + return $expectedMessage; + }; + $handler = new SwiftMailerHandler($this->mailer, $callback); + + // Logging 1 record makes this an Emergency + $records = array( + $this->getRecord(Logger::EMERGENCY), + ); + $handler->handleBatch($records); + } + + public function testMessageSubjectFormatting() + { + // Wire Mailer to expect a specific Swift_Message with a customized Subject + $messageTemplate = new \Swift_Message(); + $messageTemplate->setSubject('Alert: %level_name% %message%'); + $receivedMessage = null; + + $this->mailer->expects($this->once()) + ->method('send') + ->with($this->callback(function ($value) use (&$receivedMessage) { + $receivedMessage = $value; + return true; + })); + + $handler = new SwiftMailerHandler($this->mailer, $messageTemplate); + + $records = array( + $this->getRecord(Logger::EMERGENCY), + ); + $handler->handleBatch($records); + + $this->assertEquals('Alert: EMERGENCY test', $receivedMessage->getSubject()); + } + + public function testMessageHaveUniqueId() + { + $messageTemplate = new \Swift_Message(); + $handler = new SwiftMailerHandler($this->mailer, $messageTemplate); + + $method = new \ReflectionMethod('Monolog\Handler\SwiftMailerHandler', 'buildMessage'); + $method->setAccessible(true); + $method->invokeArgs($handler, array($messageTemplate, array())); + + $builtMessage1 = $method->invoke($handler, $messageTemplate, array()); + $builtMessage2 = $method->invoke($handler, $messageTemplate, array()); + + $this->assertFalse($builtMessage1->getId() === $builtMessage2->getId(), 'Two different messages have the same id'); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/SyslogHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/SyslogHandlerTest.php new file mode 100644 index 0000000..8f9e46b --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/SyslogHandlerTest.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +class SyslogHandlerTest extends \PHPUnit_Framework_TestCase +{ + /** + * @covers Monolog\Handler\SyslogHandler::__construct + */ + public function testConstruct() + { + $handler = new SyslogHandler('test'); + $this->assertInstanceOf('Monolog\Handler\SyslogHandler', $handler); + + $handler = new SyslogHandler('test', LOG_USER); + $this->assertInstanceOf('Monolog\Handler\SyslogHandler', $handler); + + $handler = new SyslogHandler('test', 'user'); + $this->assertInstanceOf('Monolog\Handler\SyslogHandler', $handler); + + $handler = new SyslogHandler('test', LOG_USER, Logger::DEBUG, true, LOG_PERROR); + $this->assertInstanceOf('Monolog\Handler\SyslogHandler', $handler); + } + + /** + * @covers Monolog\Handler\SyslogHandler::__construct + */ + public function testConstructInvalidFacility() + { + $this->setExpectedException('UnexpectedValueException'); + $handler = new SyslogHandler('test', 'unknown'); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/SyslogUdpHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/SyslogUdpHandlerTest.php new file mode 100644 index 0000000..7ee8a98 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/SyslogUdpHandlerTest.php @@ -0,0 +1,76 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; + +/** + * @requires extension sockets + */ +class SyslogUdpHandlerTest extends TestCase +{ + /** + * @expectedException UnexpectedValueException + */ + public function testWeValidateFacilities() + { + $handler = new SyslogUdpHandler("ip", null, "invalidFacility"); + } + + public function testWeSplitIntoLines() + { + $time = '2014-01-07T12:34'; + $pid = getmypid(); + $host = gethostname(); + + $handler = $this->getMockBuilder('\Monolog\Handler\SyslogUdpHandler') + ->setConstructorArgs(array("127.0.0.1", 514, "authpriv")) + ->setMethods(array('getDateTime')) + ->getMock(); + + $handler->method('getDateTime') + ->willReturn($time); + + $handler->setFormatter(new \Monolog\Formatter\ChromePHPFormatter()); + + $socket = $this->getMock('\Monolog\Handler\SyslogUdp\UdpSocket', array('write'), array('lol', 'lol')); + $socket->expects($this->at(0)) + ->method('write') + ->with("lol", "<".(LOG_AUTHPRIV + LOG_WARNING).">1 $time $host php $pid - - "); + $socket->expects($this->at(1)) + ->method('write') + ->with("hej", "<".(LOG_AUTHPRIV + LOG_WARNING).">1 $time $host php $pid - - "); + + $handler->setSocket($socket); + + $handler->handle($this->getRecordWithMessage("hej\nlol")); + } + + public function testSplitWorksOnEmptyMsg() + { + $handler = new SyslogUdpHandler("127.0.0.1", 514, "authpriv"); + $handler->setFormatter($this->getIdentityFormatter()); + + $socket = $this->getMock('\Monolog\Handler\SyslogUdp\UdpSocket', array('write'), array('lol', 'lol')); + $socket->expects($this->never()) + ->method('write'); + + $handler->setSocket($socket); + + $handler->handle($this->getRecordWithMessage(null)); + } + + protected function getRecordWithMessage($msg) + { + return array('message' => $msg, 'level' => \Monolog\Logger::WARNING, 'context' => null, 'extra' => array(), 'channel' => 'lol'); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/TestHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/TestHandlerTest.php new file mode 100644 index 0000000..bfb8d3d --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/TestHandlerTest.php @@ -0,0 +1,70 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +/** + * @covers Monolog\Handler\TestHandler + */ +class TestHandlerTest extends TestCase +{ + /** + * @dataProvider methodProvider + */ + public function testHandler($method, $level) + { + $handler = new TestHandler; + $record = $this->getRecord($level, 'test'.$method); + $this->assertFalse($handler->hasRecords($level)); + $this->assertFalse($handler->hasRecord($record, $level)); + $this->assertFalse($handler->{'has'.$method}($record), 'has'.$method); + $this->assertFalse($handler->{'has'.$method.'ThatContains'}('test'), 'has'.$method.'ThatContains'); + $this->assertFalse($handler->{'has'.$method.'ThatPasses'}(function ($rec) { + return true; + }), 'has'.$method.'ThatPasses'); + $this->assertFalse($handler->{'has'.$method.'ThatMatches'}('/test\w+/')); + $this->assertFalse($handler->{'has'.$method.'Records'}(), 'has'.$method.'Records'); + $handler->handle($record); + + $this->assertFalse($handler->{'has'.$method}('bar'), 'has'.$method); + $this->assertTrue($handler->hasRecords($level)); + $this->assertTrue($handler->hasRecord($record, $level)); + $this->assertTrue($handler->{'has'.$method}($record), 'has'.$method); + $this->assertTrue($handler->{'has'.$method}('test'.$method), 'has'.$method); + $this->assertTrue($handler->{'has'.$method.'ThatContains'}('test'), 'has'.$method.'ThatContains'); + $this->assertTrue($handler->{'has'.$method.'ThatPasses'}(function ($rec) { + return true; + }), 'has'.$method.'ThatPasses'); + $this->assertTrue($handler->{'has'.$method.'ThatMatches'}('/test\w+/')); + $this->assertTrue($handler->{'has'.$method.'Records'}(), 'has'.$method.'Records'); + + $records = $handler->getRecords(); + unset($records[0]['formatted']); + $this->assertEquals(array($record), $records); + } + + public function methodProvider() + { + return array( + array('Emergency', Logger::EMERGENCY), + array('Alert' , Logger::ALERT), + array('Critical' , Logger::CRITICAL), + array('Error' , Logger::ERROR), + array('Warning' , Logger::WARNING), + array('Info' , Logger::INFO), + array('Notice' , Logger::NOTICE), + array('Debug' , Logger::DEBUG), + ); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/UdpSocketTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/UdpSocketTest.php new file mode 100644 index 0000000..fa524d0 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/UdpSocketTest.php @@ -0,0 +1,64 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Handler\SyslogUdp\UdpSocket; + +/** + * @requires extension sockets + */ +class UdpSocketTest extends TestCase +{ + public function testWeDoNotTruncateShortMessages() + { + $socket = $this->getMock('\Monolog\Handler\SyslogUdp\UdpSocket', array('send'), array('lol', 'lol')); + + $socket->expects($this->at(0)) + ->method('send') + ->with("HEADER: The quick brown fox jumps over the lazy dog"); + + $socket->write("The quick brown fox jumps over the lazy dog", "HEADER: "); + } + + public function testLongMessagesAreTruncated() + { + $socket = $this->getMock('\Monolog\Handler\SyslogUdp\UdpSocket', array('send'), array('lol', 'lol')); + + $truncatedString = str_repeat("derp", 16254).'d'; + + $socket->expects($this->exactly(1)) + ->method('send') + ->with("HEADER" . $truncatedString); + + $longString = str_repeat("derp", 20000); + + $socket->write($longString, "HEADER"); + } + + public function testDoubleCloseDoesNotError() + { + $socket = new UdpSocket('127.0.0.1', 514); + $socket->close(); + $socket->close(); + } + + /** + * @expectedException LogicException + */ + public function testWriteAfterCloseErrors() + { + $socket = new UdpSocket('127.0.0.1', 514); + $socket->close(); + $socket->write('foo', "HEADER"); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php new file mode 100644 index 0000000..8d37a1f --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php @@ -0,0 +1,121 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; +use Monolog\Logger; + +class WhatFailureGroupHandlerTest extends TestCase +{ + /** + * @covers Monolog\Handler\WhatFailureGroupHandler::__construct + * @expectedException InvalidArgumentException + */ + public function testConstructorOnlyTakesHandler() + { + new WhatFailureGroupHandler(array(new TestHandler(), "foo")); + } + + /** + * @covers Monolog\Handler\WhatFailureGroupHandler::__construct + * @covers Monolog\Handler\WhatFailureGroupHandler::handle + */ + public function testHandle() + { + $testHandlers = array(new TestHandler(), new TestHandler()); + $handler = new WhatFailureGroupHandler($testHandlers); + $handler->handle($this->getRecord(Logger::DEBUG)); + $handler->handle($this->getRecord(Logger::INFO)); + foreach ($testHandlers as $test) { + $this->assertTrue($test->hasDebugRecords()); + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue(count($test->getRecords()) === 2); + } + } + + /** + * @covers Monolog\Handler\WhatFailureGroupHandler::handleBatch + */ + public function testHandleBatch() + { + $testHandlers = array(new TestHandler(), new TestHandler()); + $handler = new WhatFailureGroupHandler($testHandlers); + $handler->handleBatch(array($this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO))); + foreach ($testHandlers as $test) { + $this->assertTrue($test->hasDebugRecords()); + $this->assertTrue($test->hasInfoRecords()); + $this->assertTrue(count($test->getRecords()) === 2); + } + } + + /** + * @covers Monolog\Handler\WhatFailureGroupHandler::isHandling + */ + public function testIsHandling() + { + $testHandlers = array(new TestHandler(Logger::ERROR), new TestHandler(Logger::WARNING)); + $handler = new WhatFailureGroupHandler($testHandlers); + $this->assertTrue($handler->isHandling($this->getRecord(Logger::ERROR))); + $this->assertTrue($handler->isHandling($this->getRecord(Logger::WARNING))); + $this->assertFalse($handler->isHandling($this->getRecord(Logger::DEBUG))); + } + + /** + * @covers Monolog\Handler\WhatFailureGroupHandler::handle + */ + public function testHandleUsesProcessors() + { + $test = new TestHandler(); + $handler = new WhatFailureGroupHandler(array($test)); + $handler->pushProcessor(function ($record) { + $record['extra']['foo'] = true; + + return $record; + }); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertTrue($test->hasWarningRecords()); + $records = $test->getRecords(); + $this->assertTrue($records[0]['extra']['foo']); + } + + /** + * @covers Monolog\Handler\WhatFailureGroupHandler::handle + */ + public function testHandleException() + { + $test = new TestHandler(); + $exception = new ExceptionTestHandler(); + $handler = new WhatFailureGroupHandler(array($exception, $test, $exception)); + $handler->pushProcessor(function ($record) { + $record['extra']['foo'] = true; + + return $record; + }); + $handler->handle($this->getRecord(Logger::WARNING)); + $this->assertTrue($test->hasWarningRecords()); + $records = $test->getRecords(); + $this->assertTrue($records[0]['extra']['foo']); + } +} + +class ExceptionTestHandler extends TestHandler +{ + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + parent::handle($record); + + throw new \Exception("ExceptionTestHandler::handle"); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/ZendMonitorHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/ZendMonitorHandlerTest.php new file mode 100644 index 0000000..69b001e --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Handler/ZendMonitorHandlerTest.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\TestCase; + +class ZendMonitorHandlerTest extends TestCase +{ + protected $zendMonitorHandler; + + public function setUp() + { + if (!function_exists('zend_monitor_custom_event')) { + $this->markTestSkipped('ZendServer is not installed'); + } + } + + /** + * @covers Monolog\Handler\ZendMonitorHandler::write + */ + public function testWrite() + { + $record = $this->getRecord(); + $formatterResult = array( + 'message' => $record['message'], + ); + + $zendMonitor = $this->getMockBuilder('Monolog\Handler\ZendMonitorHandler') + ->setMethods(array('writeZendMonitorCustomEvent', 'getDefaultFormatter')) + ->getMock(); + + $formatterMock = $this->getMockBuilder('Monolog\Formatter\NormalizerFormatter') + ->disableOriginalConstructor() + ->getMock(); + + $formatterMock->expects($this->once()) + ->method('format') + ->will($this->returnValue($formatterResult)); + + $zendMonitor->expects($this->once()) + ->method('getDefaultFormatter') + ->will($this->returnValue($formatterMock)); + + $levelMap = $zendMonitor->getLevelMap(); + + $zendMonitor->expects($this->once()) + ->method('writeZendMonitorCustomEvent') + ->with($levelMap[$record['level']], $record['message'], $formatterResult); + + $zendMonitor->handle($record); + } + + /** + * @covers Monolog\Handler\ZendMonitorHandler::getDefaultFormatter + */ + public function testGetDefaultFormatterReturnsNormalizerFormatter() + { + $zendMonitor = new ZendMonitorHandler(); + $this->assertInstanceOf('Monolog\Formatter\NormalizerFormatter', $zendMonitor->getDefaultFormatter()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/LoggerTest.php b/vendor/monolog/monolog/tests/Monolog/LoggerTest.php new file mode 100644 index 0000000..1ecc34a --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/LoggerTest.php @@ -0,0 +1,548 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use Monolog\Processor\WebProcessor; +use Monolog\Handler\TestHandler; + +class LoggerTest extends \PHPUnit_Framework_TestCase +{ + /** + * @covers Monolog\Logger::getName + */ + public function testGetName() + { + $logger = new Logger('foo'); + $this->assertEquals('foo', $logger->getName()); + } + + /** + * @covers Monolog\Logger::getLevelName + */ + public function testGetLevelName() + { + $this->assertEquals('ERROR', Logger::getLevelName(Logger::ERROR)); + } + + /** + * @covers Monolog\Logger::withName + */ + public function testWithName() + { + $first = new Logger('first', array($handler = new TestHandler())); + $second = $first->withName('second'); + + $this->assertSame('first', $first->getName()); + $this->assertSame('second', $second->getName()); + $this->assertSame($handler, $second->popHandler()); + } + + /** + * @covers Monolog\Logger::toMonologLevel + */ + public function testConvertPSR3ToMonologLevel() + { + $this->assertEquals(Logger::toMonologLevel('debug'), 100); + $this->assertEquals(Logger::toMonologLevel('info'), 200); + $this->assertEquals(Logger::toMonologLevel('notice'), 250); + $this->assertEquals(Logger::toMonologLevel('warning'), 300); + $this->assertEquals(Logger::toMonologLevel('error'), 400); + $this->assertEquals(Logger::toMonologLevel('critical'), 500); + $this->assertEquals(Logger::toMonologLevel('alert'), 550); + $this->assertEquals(Logger::toMonologLevel('emergency'), 600); + } + + /** + * @covers Monolog\Logger::getLevelName + * @expectedException InvalidArgumentException + */ + public function testGetLevelNameThrows() + { + Logger::getLevelName(5); + } + + /** + * @covers Monolog\Logger::__construct + */ + public function testChannel() + { + $logger = new Logger('foo'); + $handler = new TestHandler; + $logger->pushHandler($handler); + $logger->addWarning('test'); + list($record) = $handler->getRecords(); + $this->assertEquals('foo', $record['channel']); + } + + /** + * @covers Monolog\Logger::addRecord + */ + public function testLog() + { + $logger = new Logger(__METHOD__); + + $handler = $this->getMock('Monolog\Handler\NullHandler', array('handle')); + $handler->expects($this->once()) + ->method('handle'); + $logger->pushHandler($handler); + + $this->assertTrue($logger->addWarning('test')); + } + + /** + * @covers Monolog\Logger::addRecord + */ + public function testLogNotHandled() + { + $logger = new Logger(__METHOD__); + + $handler = $this->getMock('Monolog\Handler\NullHandler', array('handle'), array(Logger::ERROR)); + $handler->expects($this->never()) + ->method('handle'); + $logger->pushHandler($handler); + + $this->assertFalse($logger->addWarning('test')); + } + + public function testHandlersInCtor() + { + $handler1 = new TestHandler; + $handler2 = new TestHandler; + $logger = new Logger(__METHOD__, array($handler1, $handler2)); + + $this->assertEquals($handler1, $logger->popHandler()); + $this->assertEquals($handler2, $logger->popHandler()); + } + + public function testProcessorsInCtor() + { + $processor1 = new WebProcessor; + $processor2 = new WebProcessor; + $logger = new Logger(__METHOD__, array(), array($processor1, $processor2)); + + $this->assertEquals($processor1, $logger->popProcessor()); + $this->assertEquals($processor2, $logger->popProcessor()); + } + + /** + * @covers Monolog\Logger::pushHandler + * @covers Monolog\Logger::popHandler + * @expectedException LogicException + */ + public function testPushPopHandler() + { + $logger = new Logger(__METHOD__); + $handler1 = new TestHandler; + $handler2 = new TestHandler; + + $logger->pushHandler($handler1); + $logger->pushHandler($handler2); + + $this->assertEquals($handler2, $logger->popHandler()); + $this->assertEquals($handler1, $logger->popHandler()); + $logger->popHandler(); + } + + /** + * @covers Monolog\Logger::setHandlers + */ + public function testSetHandlers() + { + $logger = new Logger(__METHOD__); + $handler1 = new TestHandler; + $handler2 = new TestHandler; + + $logger->pushHandler($handler1); + $logger->setHandlers(array($handler2)); + + // handler1 has been removed + $this->assertEquals(array($handler2), $logger->getHandlers()); + + $logger->setHandlers(array( + "AMapKey" => $handler1, + "Woop" => $handler2, + )); + + // Keys have been scrubbed + $this->assertEquals(array($handler1, $handler2), $logger->getHandlers()); + } + + /** + * @covers Monolog\Logger::pushProcessor + * @covers Monolog\Logger::popProcessor + * @expectedException LogicException + */ + public function testPushPopProcessor() + { + $logger = new Logger(__METHOD__); + $processor1 = new WebProcessor; + $processor2 = new WebProcessor; + + $logger->pushProcessor($processor1); + $logger->pushProcessor($processor2); + + $this->assertEquals($processor2, $logger->popProcessor()); + $this->assertEquals($processor1, $logger->popProcessor()); + $logger->popProcessor(); + } + + /** + * @covers Monolog\Logger::pushProcessor + * @expectedException InvalidArgumentException + */ + public function testPushProcessorWithNonCallable() + { + $logger = new Logger(__METHOD__); + + $logger->pushProcessor(new \stdClass()); + } + + /** + * @covers Monolog\Logger::addRecord + */ + public function testProcessorsAreExecuted() + { + $logger = new Logger(__METHOD__); + $handler = new TestHandler; + $logger->pushHandler($handler); + $logger->pushProcessor(function ($record) { + $record['extra']['win'] = true; + + return $record; + }); + $logger->addError('test'); + list($record) = $handler->getRecords(); + $this->assertTrue($record['extra']['win']); + } + + /** + * @covers Monolog\Logger::addRecord + */ + public function testProcessorsAreCalledOnlyOnce() + { + $logger = new Logger(__METHOD__); + $handler = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler->expects($this->any()) + ->method('isHandling') + ->will($this->returnValue(true)) + ; + $handler->expects($this->any()) + ->method('handle') + ->will($this->returnValue(true)) + ; + $logger->pushHandler($handler); + + $processor = $this->getMockBuilder('Monolog\Processor\WebProcessor') + ->disableOriginalConstructor() + ->setMethods(array('__invoke')) + ->getMock() + ; + $processor->expects($this->once()) + ->method('__invoke') + ->will($this->returnArgument(0)) + ; + $logger->pushProcessor($processor); + + $logger->addError('test'); + } + + /** + * @covers Monolog\Logger::addRecord + */ + public function testProcessorsNotCalledWhenNotHandled() + { + $logger = new Logger(__METHOD__); + $handler = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler->expects($this->once()) + ->method('isHandling') + ->will($this->returnValue(false)) + ; + $logger->pushHandler($handler); + $that = $this; + $logger->pushProcessor(function ($record) use ($that) { + $that->fail('The processor should not be called'); + }); + $logger->addAlert('test'); + } + + /** + * @covers Monolog\Logger::addRecord + */ + public function testHandlersNotCalledBeforeFirstHandling() + { + $logger = new Logger(__METHOD__); + + $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1->expects($this->never()) + ->method('isHandling') + ->will($this->returnValue(false)) + ; + $handler1->expects($this->once()) + ->method('handle') + ->will($this->returnValue(false)) + ; + $logger->pushHandler($handler1); + + $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2->expects($this->once()) + ->method('isHandling') + ->will($this->returnValue(true)) + ; + $handler2->expects($this->once()) + ->method('handle') + ->will($this->returnValue(false)) + ; + $logger->pushHandler($handler2); + + $handler3 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler3->expects($this->once()) + ->method('isHandling') + ->will($this->returnValue(false)) + ; + $handler3->expects($this->never()) + ->method('handle') + ; + $logger->pushHandler($handler3); + + $logger->debug('test'); + } + + /** + * @covers Monolog\Logger::addRecord + */ + public function testHandlersNotCalledBeforeFirstHandlingWithAssocArray() + { + $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1->expects($this->never()) + ->method('isHandling') + ->will($this->returnValue(false)) + ; + $handler1->expects($this->once()) + ->method('handle') + ->will($this->returnValue(false)) + ; + + $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2->expects($this->once()) + ->method('isHandling') + ->will($this->returnValue(true)) + ; + $handler2->expects($this->once()) + ->method('handle') + ->will($this->returnValue(false)) + ; + + $handler3 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler3->expects($this->once()) + ->method('isHandling') + ->will($this->returnValue(false)) + ; + $handler3->expects($this->never()) + ->method('handle') + ; + + $logger = new Logger(__METHOD__, array('last' => $handler3, 'second' => $handler2, 'first' => $handler1)); + + $logger->debug('test'); + } + + /** + * @covers Monolog\Logger::addRecord + */ + public function testBubblingWhenTheHandlerReturnsFalse() + { + $logger = new Logger(__METHOD__); + + $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1->expects($this->any()) + ->method('isHandling') + ->will($this->returnValue(true)) + ; + $handler1->expects($this->once()) + ->method('handle') + ->will($this->returnValue(false)) + ; + $logger->pushHandler($handler1); + + $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2->expects($this->any()) + ->method('isHandling') + ->will($this->returnValue(true)) + ; + $handler2->expects($this->once()) + ->method('handle') + ->will($this->returnValue(false)) + ; + $logger->pushHandler($handler2); + + $logger->debug('test'); + } + + /** + * @covers Monolog\Logger::addRecord + */ + public function testNotBubblingWhenTheHandlerReturnsTrue() + { + $logger = new Logger(__METHOD__); + + $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1->expects($this->any()) + ->method('isHandling') + ->will($this->returnValue(true)) + ; + $handler1->expects($this->never()) + ->method('handle') + ; + $logger->pushHandler($handler1); + + $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2->expects($this->any()) + ->method('isHandling') + ->will($this->returnValue(true)) + ; + $handler2->expects($this->once()) + ->method('handle') + ->will($this->returnValue(true)) + ; + $logger->pushHandler($handler2); + + $logger->debug('test'); + } + + /** + * @covers Monolog\Logger::isHandling + */ + public function testIsHandling() + { + $logger = new Logger(__METHOD__); + + $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1->expects($this->any()) + ->method('isHandling') + ->will($this->returnValue(false)) + ; + + $logger->pushHandler($handler1); + $this->assertFalse($logger->isHandling(Logger::DEBUG)); + + $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2->expects($this->any()) + ->method('isHandling') + ->will($this->returnValue(true)) + ; + + $logger->pushHandler($handler2); + $this->assertTrue($logger->isHandling(Logger::DEBUG)); + } + + /** + * @dataProvider logMethodProvider + * @covers Monolog\Logger::addDebug + * @covers Monolog\Logger::addInfo + * @covers Monolog\Logger::addNotice + * @covers Monolog\Logger::addWarning + * @covers Monolog\Logger::addError + * @covers Monolog\Logger::addCritical + * @covers Monolog\Logger::addAlert + * @covers Monolog\Logger::addEmergency + * @covers Monolog\Logger::debug + * @covers Monolog\Logger::info + * @covers Monolog\Logger::notice + * @covers Monolog\Logger::warn + * @covers Monolog\Logger::err + * @covers Monolog\Logger::crit + * @covers Monolog\Logger::alert + * @covers Monolog\Logger::emerg + */ + public function testLogMethods($method, $expectedLevel) + { + $logger = new Logger('foo'); + $handler = new TestHandler; + $logger->pushHandler($handler); + $logger->{$method}('test'); + list($record) = $handler->getRecords(); + $this->assertEquals($expectedLevel, $record['level']); + } + + public function logMethodProvider() + { + return array( + // monolog methods + array('addDebug', Logger::DEBUG), + array('addInfo', Logger::INFO), + array('addNotice', Logger::NOTICE), + array('addWarning', Logger::WARNING), + array('addError', Logger::ERROR), + array('addCritical', Logger::CRITICAL), + array('addAlert', Logger::ALERT), + array('addEmergency', Logger::EMERGENCY), + + // ZF/Sf2 compat methods + array('debug', Logger::DEBUG), + array('info', Logger::INFO), + array('notice', Logger::NOTICE), + array('warn', Logger::WARNING), + array('err', Logger::ERROR), + array('crit', Logger::CRITICAL), + array('alert', Logger::ALERT), + array('emerg', Logger::EMERGENCY), + ); + } + + /** + * @dataProvider setTimezoneProvider + * @covers Monolog\Logger::setTimezone + */ + public function testSetTimezone($tz) + { + Logger::setTimezone($tz); + $logger = new Logger('foo'); + $handler = new TestHandler; + $logger->pushHandler($handler); + $logger->info('test'); + list($record) = $handler->getRecords(); + $this->assertEquals($tz, $record['datetime']->getTimezone()); + } + + public function setTimezoneProvider() + { + return array_map( + function ($tz) { return array(new \DateTimeZone($tz)); }, + \DateTimeZone::listIdentifiers() + ); + } + + /** + * @dataProvider useMicrosecondTimestampsProvider + * @covers Monolog\Logger::useMicrosecondTimestamps + * @covers Monolog\Logger::addRecord + */ + public function testUseMicrosecondTimestamps($micro, $assert) + { + $logger = new Logger('foo'); + $logger->useMicrosecondTimestamps($micro); + $handler = new TestHandler; + $logger->pushHandler($handler); + $logger->info('test'); + list($record) = $handler->getRecords(); + $this->{$assert}('000000', $record['datetime']->format('u')); + } + + public function useMicrosecondTimestampsProvider() + { + return array( + // this has a very small chance of a false negative (1/10^6) + 'with microseconds' => array(true, 'assertNotSame'), + 'without microseconds' => array(false, PHP_VERSION_ID >= 70100 ? 'assertNotSame' : 'assertSame'), + ); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/GitProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/GitProcessorTest.php new file mode 100644 index 0000000..5adb505 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/GitProcessorTest.php @@ -0,0 +1,29 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\TestCase; + +class GitProcessorTest extends TestCase +{ + /** + * @covers Monolog\Processor\GitProcessor::__invoke + */ + public function testProcessor() + { + $processor = new GitProcessor(); + $record = $processor($this->getRecord()); + + $this->assertArrayHasKey('git', $record['extra']); + $this->assertTrue(!is_array($record['extra']['git']['branch'])); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/IntrospectionProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/IntrospectionProcessorTest.php new file mode 100644 index 0000000..0dd411d --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/IntrospectionProcessorTest.php @@ -0,0 +1,123 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Acme; + +class Tester +{ + public function test($handler, $record) + { + $handler->handle($record); + } +} + +function tester($handler, $record) +{ + $handler->handle($record); +} + +namespace Monolog\Processor; + +use Monolog\Logger; +use Monolog\TestCase; +use Monolog\Handler\TestHandler; + +class IntrospectionProcessorTest extends TestCase +{ + public function getHandler() + { + $processor = new IntrospectionProcessor(); + $handler = new TestHandler(); + $handler->pushProcessor($processor); + + return $handler; + } + + public function testProcessorFromClass() + { + $handler = $this->getHandler(); + $tester = new \Acme\Tester; + $tester->test($handler, $this->getRecord()); + list($record) = $handler->getRecords(); + $this->assertEquals(__FILE__, $record['extra']['file']); + $this->assertEquals(18, $record['extra']['line']); + $this->assertEquals('Acme\Tester', $record['extra']['class']); + $this->assertEquals('test', $record['extra']['function']); + } + + public function testProcessorFromFunc() + { + $handler = $this->getHandler(); + \Acme\tester($handler, $this->getRecord()); + list($record) = $handler->getRecords(); + $this->assertEquals(__FILE__, $record['extra']['file']); + $this->assertEquals(24, $record['extra']['line']); + $this->assertEquals(null, $record['extra']['class']); + $this->assertEquals('Acme\tester', $record['extra']['function']); + } + + public function testLevelTooLow() + { + $input = array( + 'level' => Logger::DEBUG, + 'extra' => array(), + ); + + $expected = $input; + + $processor = new IntrospectionProcessor(Logger::CRITICAL); + $actual = $processor($input); + + $this->assertEquals($expected, $actual); + } + + public function testLevelEqual() + { + $input = array( + 'level' => Logger::CRITICAL, + 'extra' => array(), + ); + + $expected = $input; + $expected['extra'] = array( + 'file' => null, + 'line' => null, + 'class' => 'ReflectionMethod', + 'function' => 'invokeArgs', + ); + + $processor = new IntrospectionProcessor(Logger::CRITICAL); + $actual = $processor($input); + + $this->assertEquals($expected, $actual); + } + + public function testLevelHigher() + { + $input = array( + 'level' => Logger::EMERGENCY, + 'extra' => array(), + ); + + $expected = $input; + $expected['extra'] = array( + 'file' => null, + 'line' => null, + 'class' => 'ReflectionMethod', + 'function' => 'invokeArgs', + ); + + $processor = new IntrospectionProcessor(Logger::CRITICAL); + $actual = $processor($input); + + $this->assertEquals($expected, $actual); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php new file mode 100644 index 0000000..eb66614 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\TestCase; + +class MemoryPeakUsageProcessorTest extends TestCase +{ + /** + * @covers Monolog\Processor\MemoryPeakUsageProcessor::__invoke + * @covers Monolog\Processor\MemoryProcessor::formatBytes + */ + public function testProcessor() + { + $processor = new MemoryPeakUsageProcessor(); + $record = $processor($this->getRecord()); + $this->assertArrayHasKey('memory_peak_usage', $record['extra']); + $this->assertRegExp('#[0-9.]+ (M|K)?B$#', $record['extra']['memory_peak_usage']); + } + + /** + * @covers Monolog\Processor\MemoryPeakUsageProcessor::__invoke + * @covers Monolog\Processor\MemoryProcessor::formatBytes + */ + public function testProcessorWithoutFormatting() + { + $processor = new MemoryPeakUsageProcessor(true, false); + $record = $processor($this->getRecord()); + $this->assertArrayHasKey('memory_peak_usage', $record['extra']); + $this->assertInternalType('int', $record['extra']['memory_peak_usage']); + $this->assertGreaterThan(0, $record['extra']['memory_peak_usage']); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/MemoryUsageProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/MemoryUsageProcessorTest.php new file mode 100644 index 0000000..4692dbf --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/MemoryUsageProcessorTest.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\TestCase; + +class MemoryUsageProcessorTest extends TestCase +{ + /** + * @covers Monolog\Processor\MemoryUsageProcessor::__invoke + * @covers Monolog\Processor\MemoryProcessor::formatBytes + */ + public function testProcessor() + { + $processor = new MemoryUsageProcessor(); + $record = $processor($this->getRecord()); + $this->assertArrayHasKey('memory_usage', $record['extra']); + $this->assertRegExp('#[0-9.]+ (M|K)?B$#', $record['extra']['memory_usage']); + } + + /** + * @covers Monolog\Processor\MemoryUsageProcessor::__invoke + * @covers Monolog\Processor\MemoryProcessor::formatBytes + */ + public function testProcessorWithoutFormatting() + { + $processor = new MemoryUsageProcessor(true, false); + $record = $processor($this->getRecord()); + $this->assertArrayHasKey('memory_usage', $record['extra']); + $this->assertInternalType('int', $record['extra']['memory_usage']); + $this->assertGreaterThan(0, $record['extra']['memory_usage']); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/MercurialProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/MercurialProcessorTest.php new file mode 100644 index 0000000..11f2b35 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/MercurialProcessorTest.php @@ -0,0 +1,41 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\TestCase; + +class MercurialProcessorTest extends TestCase +{ + /** + * @covers Monolog\Processor\MercurialProcessor::__invoke + */ + public function testProcessor() + { + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + exec("where hg 2>NUL", $output, $result); + } else { + exec("which hg 2>/dev/null >/dev/null", $output, $result); + } + if ($result != 0) { + $this->markTestSkipped('hg is missing'); + return; + } + + `hg init`; + $processor = new MercurialProcessor(); + $record = $processor($this->getRecord()); + + $this->assertArrayHasKey('hg', $record['extra']); + $this->assertTrue(!is_array($record['extra']['hg']['branch'])); + $this->assertTrue(!is_array($record['extra']['hg']['revision'])); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/ProcessIdProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/ProcessIdProcessorTest.php new file mode 100644 index 0000000..458d2a3 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/ProcessIdProcessorTest.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\TestCase; + +class ProcessIdProcessorTest extends TestCase +{ + /** + * @covers Monolog\Processor\ProcessIdProcessor::__invoke + */ + public function testProcessor() + { + $processor = new ProcessIdProcessor(); + $record = $processor($this->getRecord()); + $this->assertArrayHasKey('process_id', $record['extra']); + $this->assertInternalType('int', $record['extra']['process_id']); + $this->assertGreaterThan(0, $record['extra']['process_id']); + $this->assertEquals(getmypid(), $record['extra']['process_id']); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/PsrLogMessageProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/PsrLogMessageProcessorTest.php new file mode 100644 index 0000000..029a0c0 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/PsrLogMessageProcessorTest.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +class PsrLogMessageProcessorTest extends \PHPUnit_Framework_TestCase +{ + /** + * @dataProvider getPairs + */ + public function testReplacement($val, $expected) + { + $proc = new PsrLogMessageProcessor; + + $message = $proc(array( + 'message' => '{foo}', + 'context' => array('foo' => $val), + )); + $this->assertEquals($expected, $message['message']); + } + + public function getPairs() + { + return array( + array('foo', 'foo'), + array('3', '3'), + array(3, '3'), + array(null, ''), + array(true, '1'), + array(false, ''), + array(new \stdClass, '[object stdClass]'), + array(array(), '[array]'), + ); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/TagProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/TagProcessorTest.php new file mode 100644 index 0000000..0d860c6 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/TagProcessorTest.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\TestCase; + +class TagProcessorTest extends TestCase +{ + /** + * @covers Monolog\Processor\TagProcessor::__invoke + */ + public function testProcessor() + { + $tags = array(1, 2, 3); + $processor = new TagProcessor($tags); + $record = $processor($this->getRecord()); + + $this->assertEquals($tags, $record['extra']['tags']); + } + + /** + * @covers Monolog\Processor\TagProcessor::__invoke + */ + public function testProcessorTagModification() + { + $tags = array(1, 2, 3); + $processor = new TagProcessor($tags); + + $record = $processor($this->getRecord()); + $this->assertEquals($tags, $record['extra']['tags']); + + $processor->setTags(array('a', 'b')); + $record = $processor($this->getRecord()); + $this->assertEquals(array('a', 'b'), $record['extra']['tags']); + + $processor->addTags(array('a', 'c', 'foo' => 'bar')); + $record = $processor($this->getRecord()); + $this->assertEquals(array('a', 'b', 'a', 'c', 'foo' => 'bar'), $record['extra']['tags']); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/UidProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/UidProcessorTest.php new file mode 100644 index 0000000..5d13058 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/UidProcessorTest.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\TestCase; + +class UidProcessorTest extends TestCase +{ + /** + * @covers Monolog\Processor\UidProcessor::__invoke + */ + public function testProcessor() + { + $processor = new UidProcessor(); + $record = $processor($this->getRecord()); + $this->assertArrayHasKey('uid', $record['extra']); + } + + public function testGetUid() + { + $processor = new UidProcessor(10); + $this->assertEquals(10, strlen($processor->getUid())); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/Processor/WebProcessorTest.php b/vendor/monolog/monolog/tests/Monolog/Processor/WebProcessorTest.php new file mode 100644 index 0000000..4105baf --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/Processor/WebProcessorTest.php @@ -0,0 +1,113 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\TestCase; + +class WebProcessorTest extends TestCase +{ + public function testProcessor() + { + $server = array( + 'REQUEST_URI' => 'A', + 'REMOTE_ADDR' => 'B', + 'REQUEST_METHOD' => 'C', + 'HTTP_REFERER' => 'D', + 'SERVER_NAME' => 'F', + 'UNIQUE_ID' => 'G', + ); + + $processor = new WebProcessor($server); + $record = $processor($this->getRecord()); + $this->assertEquals($server['REQUEST_URI'], $record['extra']['url']); + $this->assertEquals($server['REMOTE_ADDR'], $record['extra']['ip']); + $this->assertEquals($server['REQUEST_METHOD'], $record['extra']['http_method']); + $this->assertEquals($server['HTTP_REFERER'], $record['extra']['referrer']); + $this->assertEquals($server['SERVER_NAME'], $record['extra']['server']); + $this->assertEquals($server['UNIQUE_ID'], $record['extra']['unique_id']); + } + + public function testProcessorDoNothingIfNoRequestUri() + { + $server = array( + 'REMOTE_ADDR' => 'B', + 'REQUEST_METHOD' => 'C', + ); + $processor = new WebProcessor($server); + $record = $processor($this->getRecord()); + $this->assertEmpty($record['extra']); + } + + public function testProcessorReturnNullIfNoHttpReferer() + { + $server = array( + 'REQUEST_URI' => 'A', + 'REMOTE_ADDR' => 'B', + 'REQUEST_METHOD' => 'C', + 'SERVER_NAME' => 'F', + ); + $processor = new WebProcessor($server); + $record = $processor($this->getRecord()); + $this->assertNull($record['extra']['referrer']); + } + + public function testProcessorDoesNotAddUniqueIdIfNotPresent() + { + $server = array( + 'REQUEST_URI' => 'A', + 'REMOTE_ADDR' => 'B', + 'REQUEST_METHOD' => 'C', + 'SERVER_NAME' => 'F', + ); + $processor = new WebProcessor($server); + $record = $processor($this->getRecord()); + $this->assertFalse(isset($record['extra']['unique_id'])); + } + + public function testProcessorAddsOnlyRequestedExtraFields() + { + $server = array( + 'REQUEST_URI' => 'A', + 'REMOTE_ADDR' => 'B', + 'REQUEST_METHOD' => 'C', + 'SERVER_NAME' => 'F', + ); + + $processor = new WebProcessor($server, array('url', 'http_method')); + $record = $processor($this->getRecord()); + + $this->assertSame(array('url' => 'A', 'http_method' => 'C'), $record['extra']); + } + + public function testProcessorConfiguringOfExtraFields() + { + $server = array( + 'REQUEST_URI' => 'A', + 'REMOTE_ADDR' => 'B', + 'REQUEST_METHOD' => 'C', + 'SERVER_NAME' => 'F', + ); + + $processor = new WebProcessor($server, array('url' => 'REMOTE_ADDR')); + $record = $processor($this->getRecord()); + + $this->assertSame(array('url' => 'B'), $record['extra']); + } + + /** + * @expectedException UnexpectedValueException + */ + public function testInvalidData() + { + new WebProcessor(new \stdClass); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/PsrLogCompatTest.php b/vendor/monolog/monolog/tests/Monolog/PsrLogCompatTest.php new file mode 100644 index 0000000..ab89944 --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/PsrLogCompatTest.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use Monolog\Handler\TestHandler; +use Monolog\Formatter\LineFormatter; +use Monolog\Processor\PsrLogMessageProcessor; +use Psr\Log\Test\LoggerInterfaceTest; + +class PsrLogCompatTest extends LoggerInterfaceTest +{ + private $handler; + + public function getLogger() + { + $logger = new Logger('foo'); + $logger->pushHandler($handler = new TestHandler); + $logger->pushProcessor(new PsrLogMessageProcessor); + $handler->setFormatter(new LineFormatter('%level_name% %message%')); + + $this->handler = $handler; + + return $logger; + } + + public function getLogs() + { + $convert = function ($record) { + $lower = function ($match) { + return strtolower($match[0]); + }; + + return preg_replace_callback('{^[A-Z]+}', $lower, $record['formatted']); + }; + + return array_map($convert, $this->handler->getRecords()); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/RegistryTest.php b/vendor/monolog/monolog/tests/Monolog/RegistryTest.php new file mode 100644 index 0000000..15fdfbd --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/RegistryTest.php @@ -0,0 +1,153 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +class RegistryTest extends \PHPUnit_Framework_TestCase +{ + protected function setUp() + { + Registry::clear(); + } + + /** + * @dataProvider hasLoggerProvider + * @covers Monolog\Registry::hasLogger + */ + public function testHasLogger(array $loggersToAdd, array $loggersToCheck, array $expectedResult) + { + foreach ($loggersToAdd as $loggerToAdd) { + Registry::addLogger($loggerToAdd); + } + foreach ($loggersToCheck as $index => $loggerToCheck) { + $this->assertSame($expectedResult[$index], Registry::hasLogger($loggerToCheck)); + } + } + + public function hasLoggerProvider() + { + $logger1 = new Logger('test1'); + $logger2 = new Logger('test2'); + $logger3 = new Logger('test3'); + + return array( + // only instances + array( + array($logger1), + array($logger1, $logger2), + array(true, false), + ), + // only names + array( + array($logger1), + array('test1', 'test2'), + array(true, false), + ), + // mixed case + array( + array($logger1, $logger2), + array('test1', $logger2, 'test3', $logger3), + array(true, true, false, false), + ), + ); + } + + /** + * @covers Monolog\Registry::clear + */ + public function testClearClears() + { + Registry::addLogger(new Logger('test1'), 'log'); + Registry::clear(); + + $this->setExpectedException('\InvalidArgumentException'); + Registry::getInstance('log'); + } + + /** + * @dataProvider removedLoggerProvider + * @covers Monolog\Registry::addLogger + * @covers Monolog\Registry::removeLogger + */ + public function testRemovesLogger($loggerToAdd, $remove) + { + Registry::addLogger($loggerToAdd); + Registry::removeLogger($remove); + + $this->setExpectedException('\InvalidArgumentException'); + Registry::getInstance($loggerToAdd->getName()); + } + + public function removedLoggerProvider() + { + $logger1 = new Logger('test1'); + + return array( + array($logger1, $logger1), + array($logger1, 'test1'), + ); + } + + /** + * @covers Monolog\Registry::addLogger + * @covers Monolog\Registry::getInstance + * @covers Monolog\Registry::__callStatic + */ + public function testGetsSameLogger() + { + $logger1 = new Logger('test1'); + $logger2 = new Logger('test2'); + + Registry::addLogger($logger1, 'test1'); + Registry::addLogger($logger2); + + $this->assertSame($logger1, Registry::getInstance('test1')); + $this->assertSame($logger2, Registry::test2()); + } + + /** + * @expectedException \InvalidArgumentException + * @covers Monolog\Registry::getInstance + */ + public function testFailsOnNonExistantLogger() + { + Registry::getInstance('test1'); + } + + /** + * @covers Monolog\Registry::addLogger + */ + public function testReplacesLogger() + { + $log1 = new Logger('test1'); + $log2 = new Logger('test2'); + + Registry::addLogger($log1, 'log'); + + Registry::addLogger($log2, 'log', true); + + $this->assertSame($log2, Registry::getInstance('log')); + } + + /** + * @expectedException \InvalidArgumentException + * @covers Monolog\Registry::addLogger + */ + public function testFailsOnUnspecifiedReplacement() + { + $log1 = new Logger('test1'); + $log2 = new Logger('test2'); + + Registry::addLogger($log1, 'log'); + + Registry::addLogger($log2, 'log'); + } +} diff --git a/vendor/monolog/monolog/tests/Monolog/TestCase.php b/vendor/monolog/monolog/tests/Monolog/TestCase.php new file mode 100644 index 0000000..4eb7b4c --- /dev/null +++ b/vendor/monolog/monolog/tests/Monolog/TestCase.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +class TestCase extends \PHPUnit_Framework_TestCase +{ + /** + * @return array Record + */ + protected function getRecord($level = Logger::WARNING, $message = 'test', $context = array()) + { + return array( + 'message' => $message, + 'context' => $context, + 'level' => $level, + 'level_name' => Logger::getLevelName($level), + 'channel' => 'test', + 'datetime' => \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true))), + 'extra' => array(), + ); + } + + /** + * @return array + */ + protected function getMultipleRecords() + { + return array( + $this->getRecord(Logger::DEBUG, 'debug message 1'), + $this->getRecord(Logger::DEBUG, 'debug message 2'), + $this->getRecord(Logger::INFO, 'information'), + $this->getRecord(Logger::WARNING, 'warning'), + $this->getRecord(Logger::ERROR, 'error'), + ); + } + + /** + * @return Monolog\Formatter\FormatterInterface + */ + protected function getIdentityFormatter() + { + $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter->expects($this->any()) + ->method('format') + ->will($this->returnCallback(function ($record) { return $record['message']; })); + + return $formatter; + } +} diff --git a/vendor/myclabs/deep-copy/.gitattributes b/vendor/myclabs/deep-copy/.gitattributes new file mode 100755 index 0000000..8018068 --- /dev/null +++ b/vendor/myclabs/deep-copy/.gitattributes @@ -0,0 +1,7 @@ +# Auto detect text files and perform LF normalization +* text=auto + +*.png binary + +tests/ export-ignore +phpunit.xml.dist export-ignore diff --git a/vendor/myclabs/deep-copy/.gitignore b/vendor/myclabs/deep-copy/.gitignore new file mode 100755 index 0000000..eef72f7 --- /dev/null +++ b/vendor/myclabs/deep-copy/.gitignore @@ -0,0 +1,3 @@ +/composer.phar +/composer.lock +/vendor/* diff --git a/vendor/myclabs/deep-copy/.travis.yml b/vendor/myclabs/deep-copy/.travis.yml new file mode 100755 index 0000000..89dc02a --- /dev/null +++ b/vendor/myclabs/deep-copy/.travis.yml @@ -0,0 +1,40 @@ +language: php + +sudo: false + +php: + - '5.6' + - '7.0' + - '7.1' + - nightly + +matrix: + fast_finish: true + include: + - php: '5.6' + env: COMPOSER_FLAGS="--prefer-lowest" + allow_failures: + - php: nightly + +cache: + directories: + - $HOME/.composer/cache/files + +before_install: + - | + if [ "$TRAVIS_PHP_VERSION" = "nightly" ]; then + COMPOSER_FLAGS="$COMPOSER_FLAGS --ignore-platform-reqs" + fi; + +install: + - composer update --no-interaction --no-progress --no-suggest --prefer-dist $COMPOSER_FLAGS + - wget https://github.com/satooshi/php-coveralls/releases/download/v1.0.0/coveralls.phar + +before_script: + - mkdir -p build/logs + +script: + - vendor/bin/phpunit --coverage-clover build/logs/clover.xml + +after_script: + - php coveralls.phar -v diff --git a/vendor/myclabs/deep-copy/LICENSE b/vendor/myclabs/deep-copy/LICENSE new file mode 100644 index 0000000..c3e8350 --- /dev/null +++ b/vendor/myclabs/deep-copy/LICENSE @@ -0,0 +1,20 @@ +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. diff --git a/vendor/myclabs/deep-copy/README.md b/vendor/myclabs/deep-copy/README.md new file mode 100644 index 0000000..7f010df --- /dev/null +++ b/vendor/myclabs/deep-copy/README.md @@ -0,0 +1,372 @@ +# DeepCopy + +DeepCopy helps you create deep copies (clones) of your objects. It is designed to handle cycles in the association graph. + +[![Build Status](https://travis-ci.org/myclabs/DeepCopy.png?branch=master)](https://travis-ci.org/myclabs/DeepCopy) +[![Coverage Status](https://coveralls.io/repos/myclabs/DeepCopy/badge.png?branch=master)](https://coveralls.io/r/myclabs/DeepCopy?branch=master) +[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/myclabs/DeepCopy/badges/quality-score.png?s=2747100c19b275f93a777e3297c6c12d1b68b934)](https://scrutinizer-ci.com/g/myclabs/DeepCopy/) +[![Total Downloads](https://poser.pugx.org/myclabs/deep-copy/downloads.svg)](https://packagist.org/packages/myclabs/deep-copy) + + +## Table of Contents + +1. [How](#how) +1. [Why](#why) + 1. [Using simply `clone`](#using-simply-clone) + 1. [Overridding `__clone()`](#overridding-__clone) + 1. [With `DeepCopy`](#with-deepcopy) +1. [How it works](#how-it-works) +1. [Going further](#going-further) + 1. [Matchers](#matchers) + 1. [Property name](#property-name) + 1. [Specific property](#specific-property) + 1. [Type](#type) + 1. [Filters](#filters) + 1. [`SetNullFilter`](#setnullfilter-filter) + 1. [`KeepFilter`](#keepfilter-filter) + 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter-filter) + 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter-filter) + 1. [`DoctrineProxyFilter`](#doctrineproxyfilter-filter) + 1. [`ReplaceFilter`](#replacefilter-type-filter) + 1. [`ShallowCopyFilter`](#doctrinecollectionfilter-type-filter) +1. [Edge cases](#edge-cases) +1. [Contributing](#contributing) + 1. [Tests](#tests) + + +## How? + +Install with Composer: + +```json +composer require myclabs/deep-copy +``` + +Use simply: + +```php +use DeepCopy\DeepCopy; + +$copier = new DeepCopy(); +$myCopy = $copier->copy($myObject); +``` + + +## Why? + +- How do you create copies of your objects? + +```php +$myCopy = clone $myObject; +``` + +- How do you create **deep** copies of your objects (i.e. copying also all the objects referenced in the properties)? + +You use [`__clone()`](http://www.php.net/manual/en/language.oop5.cloning.php#object.clone) and implement the behavior +yourself. + +- But how do you handle **cycles** in the association graph? + +Now you're in for a big mess :( + +![association graph](doc/graph.png) + + +### Using simply `clone` + +![Using clone](doc/clone.png) + + +### Overridding `__clone()` + +![Overridding __clone](doc/deep-clone.png) + + +### With `DeepCopy` + +![With DeepCopy](doc/deep-copy.png) + + +## How it works + +DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it +keeps a hash map of all instances and thus preserves the object graph. + +To use it: + +```php +use function DeepCopy\deep_copy; + +$copy = deep_copy($var); +``` + +Alternatively, you can create your own `DeepCopy` instance to configure it differently for example: + +```php +use DeepCopy\DeepCopy; + +$copier = new DeepCopy(true); + +$copy = $copier->copy($var); +``` + +You may want to roll your own deep copy function: + +```php +namespace Acme; + +use DeepCopy\DeepCopy; + +function deep_copy($var) +{ + static $copier = null; + + if (null === $copier) { + $copier = new DeepCopy(true); + } + + return $copier->copy($var); +} +``` + + +## Going further + +You can add filters to customize the copy process. + +The method to add a filter is `DeepCopy\DeepCopy::addFilter($filter, $matcher)`, +with `$filter` implementing `DeepCopy\Filter\Filter` +and `$matcher` implementing `DeepCopy\Matcher\Matcher`. + +We provide some generic filters and matchers. + + +### Matchers + + - `DeepCopy\Matcher` applies on a object attribute. + - `DeepCopy\TypeMatcher` applies on any element found in graph, including array elements. + + +#### Property name + +The `PropertyNameMatcher` will match a property by its name: + +```php +use DeepCopy\Matcher\PropertyNameMatcher; + +// Will apply a filter to any property of any objects named "id" +$matcher = new PropertyNameMatcher('id'); +``` + + +#### Specific property + +The `PropertyMatcher` will match a specific property of a specific class: + +```php +use DeepCopy\Matcher\PropertyMatcher; + +// Will apply a filter to the property "id" of any objects of the class "MyClass" +$matcher = new PropertyMatcher('MyClass', 'id'); +``` + + +#### Type + +The `TypeMatcher` will match any element by its type (instance of a class or any value that could be parameter of +[gettype()](http://php.net/manual/en/function.gettype.php) function): + +```php +use DeepCopy\TypeMatcher\TypeMatcher; + +// Will apply a filter to any object that is an instance of Doctrine\Common\Collections\Collection +$matcher = new TypeMatcher('Doctrine\Common\Collections\Collection'); +``` + + +### Filters + +- `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher` +- `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher` + + +#### `SetNullFilter` (filter) + +Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have +any ID: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\SetNullFilter; +use DeepCopy\Matcher\PropertyNameMatcher; + +$object = MyClass::load(123); +echo $object->id; // 123 + +$copier = new DeepCopy(); +$copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); + +$copy = $copier->copy($object); + +echo $copy->id; // null +``` + + +#### `KeepFilter` (filter) + +If you want a property to remain untouched (for example, an association to an object): + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\KeepFilter; +use DeepCopy\Matcher\PropertyMatcher; + +$copier = new DeepCopy(); +$copier->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category')); + +$copy = $copier->copy($object); +// $copy->category has not been touched +``` + + +#### `DoctrineCollectionFilter` (filter) + +If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\Doctrine\DoctrineCollectionFilter; +use DeepCopy\Matcher\PropertyTypeMatcher; + +$copier = new DeepCopy(); +$copier->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collections\Collection')); + +$copy = $copier->copy($object); +``` + + +#### `DoctrineEmptyCollectionFilter` (filter) + +If you use Doctrine and want to copy an entity who contains a `Collection` that you want to be reset, you can use the +`DoctrineEmptyCollectionFilter` + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\Doctrine\DoctrineEmptyCollectionFilter; +use DeepCopy\Matcher\PropertyMatcher; + +$copier = new DeepCopy(); +$copier->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty')); + +$copy = $copier->copy($object); + +// $copy->myProperty will return an empty collection +``` + + +#### `DoctrineProxyFilter` (filter) + +If you use Doctrine and use cloning on lazy loaded entities, you might encounter errors mentioning missing fields on a +Doctrine proxy class (...\\\_\_CG\_\_\Proxy). +You can use the `DoctrineProxyFilter` to load the actual entity behind the Doctrine proxy class. +**Make sure, though, to put this as one of your very first filters in the filter chain so that the entity is loaded +before other filters are applied!** + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; +use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; + +$copier = new DeepCopy(); +$copier->addFilter(new DoctrineProxyFilter(), new DoctrineProxyMatcher()); + +$copy = $copier->copy($object); + +// $copy should now contain a clone of all entities, including those that were not yet fully loaded. +``` + + +#### `ReplaceFilter` (type filter) + +1. If you want to replace the value of a property: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\ReplaceFilter; +use DeepCopy\Matcher\PropertyMatcher; + +$copier = new DeepCopy(); +$callback = function ($currentValue) { + return $currentValue . ' (copy)' +}; +$copier->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title')); + +$copy = $copier->copy($object); + +// $copy->title will contain the data returned by the callback, e.g. 'The title (copy)' +``` + +2. If you want to replace whole element: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\TypeFilter\ReplaceFilter; +use DeepCopy\TypeMatcher\TypeMatcher; + +$copier = new DeepCopy(); +$callback = function (MyClass $myClass) { + return get_class($myClass); +}; +$copier->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass')); + +$copy = $copier->copy([new MyClass, 'some string', new MyClass]); + +// $copy will contain ['MyClass', 'some string', 'MyClass'] +``` + + +The `$callback` parameter of the `ReplaceFilter` constructor accepts any PHP callable. + + +#### `ShallowCopyFilter` (type filter) + +Stop *DeepCopy* from recursively copying element, using standard `clone` instead: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\TypeFilter\ShallowCopyFilter; +use DeepCopy\TypeMatcher\TypeMatcher; +use Mockery as m; + +$this->deepCopy = new DeepCopy(); +$this->deepCopy->addTypeFilter( + new ShallowCopyFilter, + new TypeMatcher(m\MockInterface::class) +); + +$myServiceWithMocks = new MyService(m::mock(MyDependency1::class), m::mock(MyDependency2::class)); +// All mocks will be just cloned, not deep copied +``` + + +## Edge cases + +The following structures cannot be deep-copied with PHP Reflection. As a result they are shallow cloned and filters are +not applied. There is two ways for you to handle them: + +- Implement your own `__clone()` method +- Use a filter with a type matcher + + +## Contributing + +DeepCopy is distributed under the MIT license. + + +### Tests + +Running the tests is simple: + +```php +vendor/bin/phpunit +``` diff --git a/vendor/myclabs/deep-copy/composer.json b/vendor/myclabs/deep-copy/composer.json new file mode 100644 index 0000000..d5d3a77 --- /dev/null +++ b/vendor/myclabs/deep-copy/composer.json @@ -0,0 +1,35 @@ +{ + "name": "myclabs/deep-copy", + "type": "library", + "description": "Create deep copies (clones) of your objects", + "keywords": ["clone", "copy", "duplicate", "object", "object graph"], + "license": "MIT", + + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "autoload-dev": { + "psr-4": { + "DeepCopy\\": "fixtures/", + "DeepCopyTest\\": "tests/DeepCopyTest/" + } + }, + + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + + "config": { + "sort-packages": true + } +} diff --git a/vendor/myclabs/deep-copy/doc/clone.png b/vendor/myclabs/deep-copy/doc/clone.png new file mode 100644 index 0000000..376afd4 Binary files /dev/null and b/vendor/myclabs/deep-copy/doc/clone.png differ diff --git a/vendor/myclabs/deep-copy/doc/deep-clone.png b/vendor/myclabs/deep-copy/doc/deep-clone.png new file mode 100644 index 0000000..2b37a6d Binary files /dev/null and b/vendor/myclabs/deep-copy/doc/deep-clone.png differ diff --git a/vendor/myclabs/deep-copy/doc/deep-copy.png b/vendor/myclabs/deep-copy/doc/deep-copy.png new file mode 100644 index 0000000..68c508a Binary files /dev/null and b/vendor/myclabs/deep-copy/doc/deep-copy.png differ diff --git a/vendor/myclabs/deep-copy/doc/graph.png b/vendor/myclabs/deep-copy/doc/graph.png new file mode 100644 index 0000000..4d5c942 Binary files /dev/null and b/vendor/myclabs/deep-copy/doc/graph.png differ diff --git a/vendor/myclabs/deep-copy/fixtures/f001/A.php b/vendor/myclabs/deep-copy/fixtures/f001/A.php new file mode 100644 index 0000000..648d5df --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f001/A.php @@ -0,0 +1,20 @@ +aProp; + } + + public function setAProp($prop) + { + $this->aProp = $prop; + + return $this; + } +} diff --git a/vendor/myclabs/deep-copy/fixtures/f001/B.php b/vendor/myclabs/deep-copy/fixtures/f001/B.php new file mode 100644 index 0000000..462bb44 --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f001/B.php @@ -0,0 +1,20 @@ +bProp; + } + + public function setBProp($prop) + { + $this->bProp = $prop; + + return $this; + } +} diff --git a/vendor/myclabs/deep-copy/fixtures/f002/A.php b/vendor/myclabs/deep-copy/fixtures/f002/A.php new file mode 100644 index 0000000..d9aa5c3 --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f002/A.php @@ -0,0 +1,33 @@ +prop1; + } + + public function setProp1($prop) + { + $this->prop1 = $prop; + + return $this; + } + + public function getProp2() + { + return $this->prop2; + } + + public function setProp2($prop) + { + $this->prop2 = $prop; + + return $this; + } +} diff --git a/vendor/myclabs/deep-copy/fixtures/f003/Foo.php b/vendor/myclabs/deep-copy/fixtures/f003/Foo.php new file mode 100644 index 0000000..9cd7622 --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f003/Foo.php @@ -0,0 +1,26 @@ +name = $name; + } + + public function getProp() + { + return $this->prop; + } + + public function setProp($prop) + { + $this->prop = $prop; + + return $this; + } +} \ No newline at end of file diff --git a/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php b/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php new file mode 100644 index 0000000..82c6c67 --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php @@ -0,0 +1,13 @@ +cloned = true; + } +} diff --git a/vendor/myclabs/deep-copy/fixtures/f006/A.php b/vendor/myclabs/deep-copy/fixtures/f006/A.php new file mode 100644 index 0000000..d9efb11 --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f006/A.php @@ -0,0 +1,26 @@ +aProp; + } + + public function setAProp($prop) + { + $this->aProp = $prop; + + return $this; + } + + public function __clone() + { + $this->cloned = true; + } +} diff --git a/vendor/myclabs/deep-copy/fixtures/f006/B.php b/vendor/myclabs/deep-copy/fixtures/f006/B.php new file mode 100644 index 0000000..1f80b3d --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f006/B.php @@ -0,0 +1,26 @@ +bProp; + } + + public function setBProp($prop) + { + $this->bProp = $prop; + + return $this; + } + + public function __clone() + { + $this->cloned = true; + } +} diff --git a/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php b/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php new file mode 100644 index 0000000..e16bc6a --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php @@ -0,0 +1,15 @@ +cloned = true; + } +} diff --git a/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php b/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php new file mode 100644 index 0000000..6f4e61f --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php @@ -0,0 +1,15 @@ +cloned = true; + } +} diff --git a/vendor/myclabs/deep-copy/fixtures/f008/A.php b/vendor/myclabs/deep-copy/fixtures/f008/A.php new file mode 100644 index 0000000..88471d0 --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f008/A.php @@ -0,0 +1,18 @@ +foo = $foo; + } + + public function getFoo() + { + return $this->foo; + } +} diff --git a/vendor/myclabs/deep-copy/fixtures/f008/B.php b/vendor/myclabs/deep-copy/fixtures/f008/B.php new file mode 100644 index 0000000..6053092 --- /dev/null +++ b/vendor/myclabs/deep-copy/fixtures/f008/B.php @@ -0,0 +1,7 @@ + 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 DateIntervalFilter(), new TypeMatcher(DateInterval::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 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; + } + + // 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; + } + + // 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 a filter matches, we stop processing this property + return; + } + } + + $property->setAccessible(true); + $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; + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php b/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php new file mode 100644 index 0000000..c046706 --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php @@ -0,0 +1,9 @@ +setAccessible(true); + $oldCollection = $reflectionProperty->getValue($object); + + $newCollection = $oldCollection->map( + function ($item) use ($objectCopier) { + return $objectCopier($item); + } + ); + + $reflectionProperty->setValue($object, $newCollection); + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php new file mode 100644 index 0000000..7b33fd5 --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php @@ -0,0 +1,28 @@ +setAccessible(true); + + $reflectionProperty->setValue($object, new ArrayCollection()); + } +} \ No newline at end of file diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php new file mode 100644 index 0000000..8bee8f7 --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php @@ -0,0 +1,22 @@ +__load(); + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php new file mode 100644 index 0000000..85ba18c --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php @@ -0,0 +1,18 @@ +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); + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php new file mode 100644 index 0000000..bea86b8 --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php @@ -0,0 +1,24 @@ +setAccessible(true); + $reflectionProperty->setValue($object, null); + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php new file mode 100644 index 0000000..ec8856f --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php @@ -0,0 +1,22 @@ +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; + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php new file mode 100644 index 0000000..c8ec0d2 --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php @@ -0,0 +1,32 @@ +property = $property; + } + + /** + * Matches a property by its name. + * + * {@inheritdoc} + */ + public function matches($object, $property) + { + return $property == $this->property; + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php new file mode 100644 index 0000000..a6b0c0b --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php @@ -0,0 +1,46 @@ +propertyType = $propertyType; + } + + /** + * {@inheritdoc} + */ + public function matches($object, $property) + { + try { + $reflectionProperty = ReflectionHelper::getProperty($object, $property); + } catch (ReflectionException $exception) { + return false; + } + + $reflectionProperty->setAccessible(true); + + return $reflectionProperty->getValue($object) instanceof $this->propertyType; + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php b/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php new file mode 100644 index 0000000..742410c --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php @@ -0,0 +1,78 @@ +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 + ) + ); + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php new file mode 100644 index 0000000..becd1cf --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php @@ -0,0 +1,33 @@ + $propertyValue) { + $copy->{$propertyName} = $propertyValue; + } + + return $copy; + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php new file mode 100644 index 0000000..164f8b8 --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php @@ -0,0 +1,30 @@ +callback = $callable; + } + + /** + * {@inheritdoc} + */ + public function apply($element) + { + return call_user_func($this->callback, $element); + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php new file mode 100644 index 0000000..a5fbd7a --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php @@ -0,0 +1,17 @@ +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); + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php new file mode 100644 index 0000000..5785a7d --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php @@ -0,0 +1,13 @@ +type = $type; + } + + /** + * @param mixed $element + * + * @return boolean + */ + public function matches($element) + { + return is_object($element) ? is_a($element, $this->type) : gettype($element) === $this->type; + } +} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php b/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php new file mode 100644 index 0000000..272652c --- /dev/null +++ b/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php @@ -0,0 +1,16 @@ +copy($value); +} diff --git a/vendor/nikic/php-parser/.travis.yml b/vendor/nikic/php-parser/.travis.yml new file mode 100644 index 0000000..445913f --- /dev/null +++ b/vendor/nikic/php-parser/.travis.yml @@ -0,0 +1,14 @@ +language: php + +php: + - 5.3 + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - hhvm + +matrix: + allow_failures: + - php: 7.0 + fast_finish: true diff --git a/vendor/nikic/php-parser/CHANGELOG.md b/vendor/nikic/php-parser/CHANGELOG.md new file mode 100644 index 0000000..75605cc --- /dev/null +++ b/vendor/nikic/php-parser/CHANGELOG.md @@ -0,0 +1,253 @@ +Version 1.4.2-dev +----------------- + +Nothing yet. + +Version 1.4.1 (2015-09-19) +-------------------------- + +### Fixed + +* Fixed issue with too many newlines being stripped at the end of heredoc/nowdoc strings in some + cases. (#227) + +Version 1.4.0 (2015-07-14) +-------------------------- + +### Added + +* Added interface `PhpParser\Node\FunctionLike`, which is implemented by `Stmt\ClassMethod`, + `Stmt\Function_` and `Expr\Closure` nodes. This interface provides getters for their common + subnodes. +* Added `Node\Stmt\ClassLike::getMethod()` to look up a specific method on a class/interface/trait. + +### Fixed + +* Fixed `isPublic()` return value for implicitly public properties and methods that define and + additional modifier like `static` or `abstract`. +* Properties are now accepted by the trait builder. +* Fixed `__HALT_COMPILER_OFFSET__` support on HHVM. + +Version 1.3.0 (2015-05-02) +-------------------------- + +### Added + +* Errors can now store the attributes of the node/token where the error occurred. Previously only the start line was + stored. +* If file positions are enabled in the lexer, errors can now provide column information if it is available. See + [documentation](https://github.com/nikic/PHP-Parser/blob/master/doc/component/Error.markdown#column-information). +* The parser now provides an experimental error recovery mode, which can be enabled by disabling the `throwOnError` + parser option. In this mode the parser will try to construct a partial AST even if the code is not valid PHP. See + [documentation](https://github.com/nikic/PHP-Parser/blob/master/doc/component/Error.markdown#error-recovery). +* Added support for PHP 7 `yield from` expression. It is represented by `Expr\YieldFrom`. +* Added support for PHP 7 anonymous classes. These are represented by ordinary `Stmt\Class_` nodes with the name set to + `null`. Furthermore this implies that `Expr\New_` can now contain a `Stmt\Class_` in its `class` subnode. + +### Fixed + +* Fixed registration of PHP 7 aliases, for the case where the old name was used before the new name. +* Fixed handling of precedence when pretty-printing `print` expressions. +* Floating point numbers are now pretty-printed with a higher precision. +* Checks for special class names like `self` are now case-insensitive. + +Version 1.2.2 (2015-04-03) +-------------------------- + +* The `NameResolver` now resolves parameter type hints when entering the function/method/closure node. As such other + visitors running after it will be able to make use of the resolved names at that point already. +* The autoloader no longer sets the `unserialize_callback_func` ini option on registration - this is not necessary and + may cause issues when running PhpUnit tests with process isolation. + +Version 1.2.1 (2015-03-24) +-------------------------- + +* Fixed registration of the aliases introduced in 1.2.0. Previously the old class names could not be used in + `instanceof` checks under some circumstances. + +Version 1.2.0 (2015-03-22) +-------------------------- + +### Changed + +* To ensure compatibility with PHP 7, the following node classes have been renamed: + + OLD => NEW + PhpParser\Node\Expr\Cast\Bool => PhpParser\Node\Expr\Cast\Bool_ + PhpParser\Node\Expr\Cast\Int => PhpParser\Node\Expr\Cast\Int_ + PhpParser\Node\Expr\Cast\Object => PhpParser\Node\Expr\Cast\Object_ + PhpParser\Node\Expr\Cast\String => PhpParser\Node\Expr\Cast\String_ + PhpParser\Node\Scalar\String => PhpParser\Node\Scalar\String_ + + **The previous class names are still supported as aliases.** However it is strongly encouraged to use the new names + in order to make your code compatible with PHP 7. + +* Subnodes are now stored using real properties instead of an array. This improves performance and memory usage of the + initial parse and subsequent node tree operations. The `NodeAbstract` class still supports the old way of specifying + subnodes, however this is *deprecated*. In any case properties that are assigned to a node after creation will no + longer be considered as subnodes. + +* Methods and property declarations will no longer set the `Stmt\Class_::MODIFIER_PUBLIC` flag if no visibility is + explicitly given. However the `isPublic()` method will continue to return true. This allows you to distinguish whether + a method/property is explicitly or implicitly public and control the pretty printer output more precisely. + +* The `Stmt\Class_`, `Stmt\Interface_` and `Stmt\Trait_` nodes now inherit from `Stmt\ClassLike`, which provides a + `getMethods()` method. Previously this method was only available on `Stmt\Class_`. + +* Support including the `bootstrap.php` file multiple times. + +* Make documentation and tests part of the release tarball again. + +* Improve support for HHVM and PHP 7. + +### Added + +* Added support for PHP 7 return type declarations. This adds an additional `returnType` subnode to `Stmt\Function_`, + `Stmt\ClassMethod` and `Expr\Closure`. + +* Added support for the PHP 7 null coalesce operator `??`. The operator is represented by `Expr\BinaryOp\Coalesce`. + +* Added support for the PHP 7 spaceship operator `<=>`. The operator is represented by `Expr\BinaryOp\Spaceship`. + +* Added use builder. + +* Added global namespace support to the namespace builder. + +* Added a constructor flag to `NodeTraverser`, which disables cloning of nodes. + +Version 1.1.0 (2015-01-18) +-------------------------- + +* Methods that do not specify an explicit visibility (e.g. `function method()`) will now have the `MODIFIER_PUBLIC` + flag set. This also means that their `isPublic()` method will return true. + +* Declaring a property as abstract or final is now an error. + +* The `Lexer` and `Lexer\Emulative` classes now accept an `$options` array in their constructors. Currently only the + `usedAttributes` option is supported, which determines which attributes will be added to AST nodes. In particular + it is now possible to add information on the token and file positions corresponding to a node. For more details see + the [Lexer component](https://github.com/nikic/PHP-Parser/blob/master/doc/component/Lexer.markdown) documentation. + +* Node visitors can now return `NodeTraverser::DONT_TRAVERSE_CHILDREN` from `enterNode()` in order to skip all children + of the current node, for all visitors. + +* Added builders for traits and namespaces. + +* The class, interface, trait, function, method and property builders now support adding doc comments using the + `setDocComment()` method. + +* Added support for fully-qualified and namespace-relative names in builders. No longer allow use of name component + arrays. + +* Do not add documentation and tests to distribution archive files. + +Version 1.0.2 (2014-11-04) +-------------------------- + +* The `NameResolver` visitor now also resolves names in trait adaptations (aliases and precedence declarations). + +* Remove stray whitespace when pretty-printing trait adaptations that only change visibility. + +Version 1.0.1 (2014-10-14) +-------------------------- + +* Disallow `new` expressions without a class name. Previously `new;` was accidentally considered to be valid code. + +* Support T_ONUMBER token used by HHVM. + +* Add ability to directly pass code to the `php-parse.php` script. + +* Prevent truncation of `var_dump()` output in the `php-parse.php` script if XDebug is used. + +Version 1.0.0 (2014-09-12) +-------------------------- + +* [BC] Removed deprecated `Template` and `TemplateLoader` classes. + +* Fixed XML unserializer to properly work with new namespaced node names. + +Version 1.0.0-beta2 (2014-08-31) +-------------------------------- + +* [PHP 5.6] Updated support for constant scalar expressions to comply with latest changes. This means that arrays + and array dimension fetches are now supported as well. + +* [PHP 5.6] Direct array dereferencing of constants is supported now, i.e. both `FOO[0]` and `Foo::BAR[0]` are valid + now. + +* Fixed handling of special class names (`self`, `parent` and `static`) in the name resolver to be case insensitive. + Additionally the name resolver now enforces that special class names are only used as unqualified names, e.g. `\self` + is considered invalid. + +* The case of references to the `static` class name is now preserved. Previously `static` was always lowercased, + regardless of the case used in the source code. + +* The autoloader now only requires a file if it exists. This allows usages like + `class_exists('PhpParser\NotExistingClass')`. + +* Added experimental `bin/php-parse.php` script, which is intended to help exploring and debugging the node tree. + +* Separated the parser implemention (in `lib/PhpParser/ParserAbstract.php`) and the generated data (in + `lib/PhpParser/Parser.php`). Furthermore the parser now uses meaningful variable names and contains comments + explaining their usage. + +Version 1.0.0-beta1 (2014-03-27) +-------------------------------- + +* [BC] PHP-Parser now requires PHP 5.3 or newer to run. It is however still possible to *parse* PHP 5.2 source code, + while running on a newer version. + +* [BC] The library has been moved to use namespaces with the `PhpParser` vendor prefix. However, the old names using + underscores are still available as aliases, as such most code should continue running on the new version without + further changes. + + However, code performing dispatch operations on `Node::getType()` may be affected by some of the name changes. For + example a `+` node will now return type `Expr_BinaryOp_Plus` instead of `Expr_Plus`. In particular this may affect + custom pretty printers. + + Due to conflicts with reserved keywords, some class names now end with an underscore, e.g. `PHPParser_Node_Stmt_Class` + is now `PhpParser\Node\Stmt\Class_`. (But as usual, the old name is still available) + +* [PHP 5.6] Added support for the power operator `**` (node `Expr\BinaryOp\Pow`) and the compound power assignment + operator `**=` (node `Expr\AssignOp\Pow`). + +* [PHP 5.6] Added support for variadic functions: `Param` nodes now have `variadic` as a boolean subnode. + +* [PHP 5.6] Added support for argument unpacking: `Arg` nodes now have `unpack` as a boolean subnode. + +* [PHP 5.6] Added support for aliasing of functions and constants. `Stmt\Use_` nodes now have an integral `type` + subnode, which is one of `Stmt\Use_::TYPE_NORMAL` (`use`), `Stmt\Use_::TYPE_FUNCTION` (`use function`) or + `Stmt\Use_::TYPE_CONSTANT` (`use const`). + + The `NameResolver` now also supports resolution of such aliases. + +* [PHP 5.6] Added support for constant scalar expressions. This means that certain expressions are now allowed as the + initializer for constants, properties, parameters, static variables, etc. + +* [BC] Improved pretty printing of empty statements lists, which are now printed as `{\n}` instead of `{\n \n}`. + This changes the behavior of the protected `PrettyPrinterAbstract::pStmts()` method, so custom pretty printing code + making use it of may need to be adjusted. + +* Changed the order of some subnodes to be consistent with their order in the sour code. For example `Stmt\If->cond` + will now appear before `Stmt\If->stmts` etc. + +* Added `Scalar\MagicConstant->getName()`, which returns the name of the magic constant (e.g. `__CLASS__`). + +**The following changes are also included in 0.9.5**: + +* [BC] Deprecated `PHPParser_Template` and `PHPParser_TemplateLoader`. This functionality does not belong in the main project + and - as far as I know - nobody is using it. + +* Add `NodeTraverser::removeVisitor()` method, which removes a visitor from the node traverser. This also modifies the + corresponding `NodeTraverserInterface`. + +* Fix alias resolution in `NameResolver`: Class names are now correctly handled as case-insensitive. + +* The undefined variable error, which is used to the lexer to reset the error state, will no longer interfere with + custom error handlers. + +--- + +**This changelog only includes changes from the 1.0 series. For older changes see the [0.9 series changelog][1].** + + [1]: https://github.com/nikic/PHP-Parser/blob/0.9/CHANGELOG.md diff --git a/vendor/nikic/php-parser/LICENSE b/vendor/nikic/php-parser/LICENSE new file mode 100644 index 0000000..443210b --- /dev/null +++ b/vendor/nikic/php-parser/LICENSE @@ -0,0 +1,31 @@ +Copyright (c) 2011 by Nikita Popov. + +Some 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. + + * The names of the contributors may not 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 +OWNER 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. \ No newline at end of file diff --git a/vendor/nikic/php-parser/README.md b/vendor/nikic/php-parser/README.md new file mode 100644 index 0000000..729e19b --- /dev/null +++ b/vendor/nikic/php-parser/README.md @@ -0,0 +1,87 @@ +PHP Parser +========== + +This is a PHP 5.2 to PHP 5.6 parser written in PHP. Its purpose is to simplify static code analysis and +manipulation. + +[**Documentation for version 1.x**][doc_1_x] (stable; for running on PHP >= 5.3). + +[Documentation for version 0.9.x][doc_0_9] (unsupported; for running on PHP 5.2). + +In a Nutshell +------------- + +The parser turns PHP source code into an abstract syntax tree. For example, if you pass the following code into the +parser: + +```php + Expr_AssignOp_BitwiseAnd +Expr_AssignBitwiseOr => Expr_AssignOp_BitwiseOr +Expr_AssignBitwiseXor => Expr_AssignOp_BitwiseXor +Expr_AssignConcat => Expr_AssignOp_Concat +Expr_AssignDiv => Expr_AssignOp_Div +Expr_AssignMinus => Expr_AssignOp_Minus +Expr_AssignMod => Expr_AssignOp_Mod +Expr_AssignMul => Expr_AssignOp_Mul +Expr_AssignPlus => Expr_AssignOp_Plus +Expr_AssignShiftLeft => Expr_AssignOp_ShiftLeft +Expr_AssignShiftRight => Expr_AssignOp_ShiftRight + +Expr_BitwiseAnd => Expr_BinaryOp_BitwiseAnd +Expr_BitwiseOr => Expr_BinaryOp_BitwiseOr +Expr_BitwiseXor => Expr_BinaryOp_BitwiseXor +Expr_BooleanAnd => Expr_BinaryOp_BooleanAnd +Expr_BooleanOr => Expr_BinaryOp_BooleanOr +Expr_Concat => Expr_BinaryOp_Concat +Expr_Div => Expr_BinaryOp_Div +Expr_Equal => Expr_BinaryOp_Equal +Expr_Greater => Expr_BinaryOp_Greater +Expr_GreaterOrEqual => Expr_BinaryOp_GreaterOrEqual +Expr_Identical => Expr_BinaryOp_Identical +Expr_LogicalAnd => Expr_BinaryOp_LogicalAnd +Expr_LogicalOr => Expr_BinaryOp_LogicalOr +Expr_LogicalXor => Expr_BinaryOp_LogicalXor +Expr_Minus => Expr_BinaryOp_Minus +Expr_Mod => Expr_BinaryOp_Mod +Expr_Mul => Expr_BinaryOp_Mul +Expr_NotEqual => Expr_BinaryOp_NotEqual +Expr_NotIdentical => Expr_BinaryOp_NotIdentical +Expr_Plus => Expr_BinaryOp_Plus +Expr_ShiftLeft => Expr_BinaryOp_ShiftLeft +Expr_ShiftRight => Expr_BinaryOp_ShiftRight +Expr_Smaller => Expr_BinaryOp_Smaller +Expr_SmallerOrEqual => Expr_BinaryOp_SmallerOrEqual + +Scalar_ClassConst => Scalar_MagicConst_Class +Scalar_DirConst => Scalar_MagicConst_Dir +Scalar_FileConst => Scalar_MagicConst_File +Scalar_FuncConst => Scalar_MagicConst_Function +Scalar_LineConst => Scalar_MagicConst_Line +Scalar_MethodConst => Scalar_MagicConst_Method +Scalar_NSConst => Scalar_MagicConst_Namespace +Scalar_TraitConst => Scalar_MagicConst_Trait +``` + +These changes may affect custom pretty printers and code comparing the return value of `Node::getType()` to specific +strings. + +### Miscellaneous + + * The classes `Template` and `TemplateLoader` have been removed. You should use some other [code generation][code_gen] + project built on top of PHP-Parser instead. + + * The `PrettyPrinterAbstract::pStmts()` method now emits a leading newline if the statement list is not empty. + Custom pretty printers should remove the explicit newline before `pStmts()` calls. + + Old: + + ```php + public function pStmt_Trait(PHPParser_Node_Stmt_Trait $node) { + return 'trait ' . $node->name + . "\n" . '{' . "\n" . $this->pStmts($node->stmts) . "\n" . '}'; + } + ``` + + New: + + ```php + public function pStmt_Trait(Stmt\Trait_ $node) { + return 'trait ' . $node->name + . "\n" . '{' . $this->pStmts($node->stmts) . "\n" . '}'; + } + ``` + + [code_gen]: https://github.com/nikic/PHP-Parser/wiki/Projects-using-the-PHP-Parser#code-generation \ No newline at end of file diff --git a/vendor/nikic/php-parser/bin/php-parse.php b/vendor/nikic/php-parser/bin/php-parse.php new file mode 100755 index 0000000..c04ff08 --- /dev/null +++ b/vendor/nikic/php-parser/bin/php-parse.php @@ -0,0 +1,161 @@ +#!/usr/bin/env php + array( + 'startLine', 'endLine', 'startFilePos', 'endFilePos' +))); +$parser = new PhpParser\Parser($lexer); +$dumper = new PhpParser\NodeDumper; +$prettyPrinter = new PhpParser\PrettyPrinter\Standard; +$serializer = new PhpParser\Serializer\XML; + +$traverser = new PhpParser\NodeTraverser(); +$traverser->addVisitor(new PhpParser\NodeVisitor\NameResolver); + +foreach ($files as $file) { + if (strpos($file, ' Code $code\n"; + } else { + if (!file_exists($file)) { + die("File $file does not exist.\n"); + } + + $code = file_get_contents($file); + echo "====> File $file:\n"; + } + + try { + $stmts = $parser->parse($code); + } catch (PhpParser\Error $e) { + if ($attributes['with-column-info'] && $e->hasColumnInfo()) { + $startLine = $e->getStartLine(); + $endLine = $e->getEndLine(); + $startColumn = $e->getStartColumn($code); + $endColumn = $e->getEndColumn($code); + $message .= $e->getRawMessage() . " from $startLine:$startColumn to $endLine:$endColumn"; + } else { + $message = $e->getMessage(); + } + + die($message . "\n"); + } + + foreach ($operations as $operation) { + if ('dump' === $operation) { + echo "==> Node dump:\n"; + echo $dumper->dump($stmts), "\n"; + } elseif ('pretty-print' === $operation) { + echo "==> Pretty print:\n"; + echo $prettyPrinter->prettyPrintFile($stmts), "\n"; + } elseif ('serialize-xml' === $operation) { + echo "==> Serialized XML:\n"; + echo $serializer->serialize($stmts), "\n"; + } elseif ('var-dump' === $operation) { + echo "==> var_dump():\n"; + var_dump($stmts); + } elseif ('resolve-names' === $operation) { + echo "==> Resolved names.\n"; + $stmts = $traverser->traverse($stmts); + } + } +} + +function showHelp($error) { + die($error . "\n\n" . + << false, + ); + + array_shift($args); + $parseOptions = true; + foreach ($args as $arg) { + if (!$parseOptions) { + $files[] = $arg; + continue; + } + + switch ($arg) { + case '--dump': + case '-d': + $operations[] = 'dump'; + break; + case '--pretty-print': + case '-p': + $operations[] = 'pretty-print'; + break; + case '--serialize-xml': + $operations[] = 'serialize-xml'; + break; + case '--var-dump': + $operations[] = 'var-dump'; + break; + case '--resolve-names': + case '-N'; + $operations[] = 'resolve-names'; + break; + case '--with-column-info': + case '-c'; + $attributes['with-column-info'] = true; + break; + case '--': + $parseOptions = false; + break; + default: + if ($arg[0] === '-') { + showHelp("Invalid operation $arg."); + } else { + $files[] = $arg; + } + } + } + + return array($operations, $files, $attributes); +} diff --git a/vendor/nikic/php-parser/composer.json b/vendor/nikic/php-parser/composer.json new file mode 100644 index 0000000..1fd98a1 --- /dev/null +++ b/vendor/nikic/php-parser/composer.json @@ -0,0 +1,24 @@ +{ + "name": "nikic/php-parser", + "description": "A PHP parser written in PHP", + "keywords": ["php", "parser"], + "type": "library", + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Nikita Popov" + } + ], + "require": { + "php": ">=5.3", + "ext-tokenizer": "*" + }, + "autoload": { + "files": ["lib/bootstrap.php"] + }, + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + } +} diff --git a/vendor/nikic/php-parser/doc/0_Introduction.markdown b/vendor/nikic/php-parser/doc/0_Introduction.markdown new file mode 100644 index 0000000..1ffadef --- /dev/null +++ b/vendor/nikic/php-parser/doc/0_Introduction.markdown @@ -0,0 +1,81 @@ +Introduction +============ + +This project is a PHP 5.2 to PHP 5.6 parser **written in PHP itself**. + +What is this for? +----------------- + +A parser is useful for [static analysis][0], manipulation of code and basically any other +application dealing with code programmatically. A parser constructs an [Abstract Syntax Tree][1] +(AST) of the code and thus allows dealing with it in an abstract and robust way. + +There are other ways of processing source code. One that PHP supports natively is using the +token stream generated by [`token_get_all`][2]. The token stream is much more low level than +the AST and thus has different applications: It allows to also analyze the exact formatting of +a file. On the other hand the token stream is much harder to deal with for more complex analysis. +For example an AST abstracts away the fact that in PHP variables can be written as `$foo`, but also +as `$$bar`, `${'foobar'}` or even `${!${''}=barfoo()}`. You don't have to worry about recognizing +all the different syntaxes from a stream of tokens. + +Another questions is: Why would I want to have a PHP parser *written in PHP*? Well, PHP might not be +a language especially suited for fast parsing, but processing the AST is much easier in PHP than it +would be in other, faster languages like C. Furthermore the people most probably wanting to do +programmatic PHP code analysis are incidentally PHP developers, not C developers. + +What can it parse? +------------------ + +The parser uses a PHP 5.6 compliant grammar, which is backwards compatible with all PHP version from PHP 5.2 +upwards (and maybe older). + +As the parser is based on the tokens returned by `token_get_all` (which is only able to lex the PHP +version it runs on), additionally a wrapper for emulating new tokens from 5.3, 5.4, 5.5 and 5.6 is provided. +This allows to parse PHP 5.6 source code running on PHP 5.3, for example. This emulation is very hacky and not +perfect, but it should work well on any sane code. + +What output does it produce? +---------------------------- + +The parser produces an [Abstract Syntax Tree][1] (AST) also known as a node tree. How this looks like +can best be seen in an example. The program `parse($code); + // $stmts is an array of statement nodes +} catch (PhpParser\Error $e) { + echo 'Parse Error: ', $e->getMessage(); +} +``` + +A parser instance can be reused to parse multiple files. + +Node tree +--------- + +If you use the above code with `$code = "subNodeName`. The `Stmt\Echo_` node has only one subnode `exprs`. So in order to access it +in the above example you would write `$stmts[0]->exprs`. If you wanted to access the name of the function +call, you would write `$stmts[0]->exprs[1]->name`. + +All nodes also define a `getType()` method that returns the node type. The type is the class name +without the `PhpParser\Node\` prefix and `\` replaced with `_`. It also does not contain a trailing +`_` for reserved-keyword class names. + +It is possible to associate custom metadata with a node using the `setAttribute()` method. This data +can then be retrieved using `hasAttribute()`, `getAttribute()` and `getAttributes()`. + +By default the lexer adds the `startLine`, `endLine` and `comments` attributes. `comments` is an array +of `PhpParser\Comment[\Doc]` instances. + +The start line can also be accessed using `getLine()`/`setLine()` (instead of `getAttribute('startLine')`). +The last doc comment from the `comments` attribute can be obtained using `getDocComment()`. + +Pretty printer +-------------- + +The pretty printer component compiles the AST back to PHP code. As the parser does not retain formatting +information the formatting is done using a specified scheme. Currently there is only one scheme available, +namely `PhpParser\PrettyPrinter\Standard`. + +```php +parse($code); + + // change + $stmts[0] // the echo statement + ->exprs // sub expressions + [0] // the first of them (the string node) + ->value // it's value, i.e. 'Hi ' + = 'Hello '; // change to 'Hello ' + + // pretty print + $code = $prettyPrinter->prettyPrint($stmts); + + echo $code; +} catch (PhpParser\Error $e) { + echo 'Parse Error: ', $e->getMessage(); +} +``` + +The above code will output: + + parse()`, then changed and then +again converted to code using `PhpParser\PrettyPrinter\Standard->prettyPrint()`. + +The `prettyPrint()` method pretty prints a statements array. It is also possible to pretty print only a +single expression using `prettyPrintExpr()`. + +The `prettyPrintFile()` method can be used to print an entire file. This will include the opening `addVisitor(new MyNodeVisitor); + +try { + $code = file_get_contents($fileName); + + // parse + $stmts = $parser->parse($code); + + // traverse + $stmts = $traverser->traverse($stmts); + + // pretty print + $code = $prettyPrinter->prettyPrintFile($stmts); + + echo $code; +} catch (PhpParser\Error $e) { + echo 'Parse Error: ', $e->getMessage(); +} +``` + +The corresponding node visitor might look like this: + +```php +value = 'foo'; + } + } +} +``` + +The above node visitor would change all string literals in the program to `'foo'`. + +All visitors must implement the `PhpParser\NodeVisitor` interface, which defines the following four +methods: + + public function beforeTraverse(array $nodes); + public function enterNode(PhpParser\Node $node); + public function leaveNode(PhpParser\Node $node); + public function afterTraverse(array $nodes); + +The `beforeTraverse()` method is called once before the traversal begins and is passed the nodes the +traverser was called with. This method can be used for resetting values before traversation or +preparing the tree for traversal. + +The `afterTraverse()` method is similar to the `beforeTraverse()` method, with the only difference that +it is called once after the traversal. + +The `enterNode()` and `leaveNode()` methods are called on every node, the former when it is entered, +i.e. before its subnodes are traversed, the latter when it is left. + +All four methods can either return the changed node or not return at all (i.e. `null`) in which +case the current node is not changed. + +The `enterNode()` method can additionally return the value `NodeTraverser::DONT_TRAVERSE_CHILDREN`, +which instructs the traverser to skip all children of the current node. + +The `leaveNode()` method can additionally return the value `NodeTraverser::REMOVE_NODE`, in which +case the current node will be removed from the parent array. Furthermove it is possible to return +an array of nodes, which will be merged into the parent array at the offset of the current node. +I.e. if in `array(A, B, C)` the node `B` should be replaced with `array(X, Y, Z)` the result will +be `array(A, X, Y, Z, C)`. + +Instead of manually implementing the `NodeVisitor` interface you can also extend the `NodeVisitorAbstract` +class, which will define empty default implementations for all the above methods. + +The NameResolver node visitor +----------------------------- + +One visitor is already bundled with the package: `PhpParser\NodeVisitor\NameResolver`. This visitor +helps you work with namespaced code by trying to resolve most names to fully qualified ones. + +For example, consider the following code: + + use A as B; + new B\C(); + +In order to know that `B\C` really is `A\C` you would need to track aliases and namespaces yourself. +The `NameResolver` takes care of that and resolves names as far as possible. + +After running it most names will be fully qualified. The only names that will stay unqualified are +unqualified function and constant names. These are resolved at runtime and thus the visitor can't +know which function they are referring to. In most cases this is a non-issue as the global functions +are meant. + +Also the `NameResolver` adds a `namespacedName` subnode to class, function and constant declarations +that contains the namespaced name instead of only the shortname that is available via `name`. + +Example: Converting namespaced code to pseudo namespaces +-------------------------------------------------------- + +A small example to understand the concept: We want to convert namespaced code to pseudo namespaces +so it works on 5.2, i.e. names like `A\\B` should be converted to `A_B`. Note that such conversions +are fairly complicated if you take PHP's dynamic features into account, so our conversion will +assume that no dynamic features are used. + +We start off with the following base code: + +```php +addVisitor(new PhpParser\NodeVisitor\NameResolver); // we will need resolved names +$traverser->addVisitor(new NodeVisitor\NamespaceConverter); // our own node visitor + +// iterate over all .php files in the directory +$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($inDir)); +$files = new RegexIterator($files, '/\.php$/'); + +foreach ($files as $file) { + try { + // read the file that should be converted + $code = file_get_contents($file); + + // parse + $stmts = $parser->parse($code); + + // traverse + $stmts = $traverser->traverse($stmts); + + // pretty print + $code = $prettyPrinter->prettyPrintFile($stmts); + + // write the converted file to the target directory + file_put_contents( + substr_replace($file->getPathname(), $outDir, 0, strlen($inDir)), + $code + ); + } catch (PhpParser\Error $e) { + echo 'Parse Error: ', $e->getMessage(); + } +} +``` + +Now lets start with the main code, the `NodeVisitor\NamespaceConverter`. One thing it needs to do +is convert `A\\B` style names to `A_B` style ones. + +```php +toString('_')); + } + } +} +``` + +The above code profits from the fact that the `NameResolver` already resolved all names as far as +possible, so we don't need to do that. We only need to create a string with the name parts separated +by underscores instead of backslashes. This is what `$node->toString('_')` does. (If you want to +create a name with backslashes either write `$node->toString()` or `(string) $node`.) Then we create +a new name from the string and return it. Returning a new node replaces the old node. + +Another thing we need to do is change the class/function/const declarations. Currently they contain +only the shortname (i.e. the last part of the name), but they need to contain the complete name inclduing +the namespace prefix: + +```php +toString('_')); + } elseif ($node instanceof Stmt\Class_ + || $node instanceof Stmt\Interface_ + || $node instanceof Stmt\Function_) { + $node->name = $node->namespacedName->toString('_'); + } elseif ($node instanceof Stmt\Const_) { + foreach ($node->consts as $const) { + $const->name = $const->namespacedName->toString('_'); + } + } + } +} +``` + +There is not much more to it than converting the namespaced name to string with `_` as separator. + +The last thing we need to do is remove the `namespace` and `use` statements: + +```php +toString('_')); + } elseif ($node instanceof Stmt\Class_ + || $node instanceof Stmt\Interface_ + || $node instanceof Stmt\Function_) { + $node->name = $node->namespacedName->toString('_'); + } elseif ($node instanceof Stmt\Const_) { + foreach ($node->consts as $const) { + $const->name = $const->namespacedName->toString('_'); + } + } elseif ($node instanceof Stmt\Namespace_) { + // returning an array merges is into the parent array + return $node->stmts; + } elseif ($node instanceof Stmt\Use_) { + // returning false removed the node altogether + return false; + } + } +} +``` + +That's all. diff --git a/vendor/nikic/php-parser/doc/3_Other_node_tree_representations.markdown b/vendor/nikic/php-parser/doc/3_Other_node_tree_representations.markdown new file mode 100644 index 0000000..069ba90 --- /dev/null +++ b/vendor/nikic/php-parser/doc/3_Other_node_tree_representations.markdown @@ -0,0 +1,203 @@ +Other node tree representations +=============================== + +It is possible to convert the AST into several textual representations, which serve different uses. + +Simple serialization +-------------------- + +It is possible to serialize the node tree using `serialize()` and also unserialize it using +`unserialize()`. The output is not human readable and not easily processable from anything +but PHP, but it is compact and generates fast. The main application thus is in caching. + +Human readable dumping +---------------------- + +Furthermore it is possible to dump nodes into a human readable format using the `dump` method of +`PhpParser\NodeDumper`. This can be used for debugging. + +```php +parse($code); + + echo $nodeDumper->dump($stmts), "\n"; +} catch (PhpParser\Error $e) { + echo 'Parse Error: ', $e->getMessage(); +} +``` + +The above script will have an output looking roughly like this: + +``` +array( + 0: Stmt_Function( + byRef: false + params: array( + 0: Param( + name: msg + default: null + type: null + byRef: false + ) + ) + stmts: array( + 0: Stmt_Echo( + exprs: array( + 0: Expr_Variable( + name: msg + ) + 1: Scalar_String( + value: + + ) + ) + ) + ) + name: printLine + ) + 1: Expr_FuncCall( + name: Name( + parts: array( + 0: printLine + ) + ) + args: array( + 0: Arg( + value: Scalar_String( + value: Hello World!!! + ) + byRef: false + ) + ) + ) +) +``` + +Serialization to XML +-------------------- + +It is also possible to serialize the node tree to XML using `PhpParser\Serializer\XML->serialize()` +and to unserialize it using `PhpParser\Unserializer\XML->unserialize()`. This is useful for +interfacing with other languages and applications or for doing transformation using XSLT. + +```php +parse($code); + + echo $serializer->serialize($stmts); +} catch (PhpParser\Error $e) { + echo 'Parse Error: ', $e->getMessage(); +} +``` + +Produces: + +```xml + + + + + + + + + + + + msg + + + + + + + + + + + + + + + + + + + + + msg + + + + + + + + + + + + + + + printLine + + + + + + + + printLine + + + + + + + + + + + Hello World!!! + + + + + + + + + + + + +``` \ No newline at end of file diff --git a/vendor/nikic/php-parser/doc/4_Code_generation.markdown b/vendor/nikic/php-parser/doc/4_Code_generation.markdown new file mode 100644 index 0000000..d8f1825 --- /dev/null +++ b/vendor/nikic/php-parser/doc/4_Code_generation.markdown @@ -0,0 +1,80 @@ +Code generation +=============== + +It is also possible to generate code using the parser, by first creating an Abstract Syntax Tree and then using the +pretty printer to convert it to PHP code. To simplify code generation, the project comes with builders which allow +creating node trees using a fluid interface, instead of instantiating all nodes manually. Builders are available for +the following syntactic elements: + + * namespaces and use statements + * classes, interfaces and traits + * methods, functions and parameters + * properties + +Here is an example: + +```php +namespace('Name\Space') + ->addStmt($factory->use('Some\Other\Thingy')->as('SomeOtherClass')) + ->addStmt($factory->class('SomeClass') + ->extend('SomeOtherClass') + ->implement('A\Few', '\Interfaces') + ->makeAbstract() // ->makeFinal() + + ->addStmt($factory->method('someMethod') + ->makePublic() + ->makeAbstract() // ->makeFinal() + ->addParam($factory->param('someParam')->setTypeHint('SomeClass')) + ->setDocComment('/** + * This method does something. + * + * @param SomeClass And takes a parameter + */') + ) + + ->addStmt($factory->method('anotherMethod') + ->makeProtected() // ->makePublic() [default], ->makePrivate() + ->addParam($factory->param('someParam')->setDefault('test')) + // it is possible to add manually created nodes + ->addStmt(new PhpParser\Node\Expr\Print_(new PhpParser\Node\Expr\Variable('someParam'))) + ) + + // properties will be correctly reordered above the methods + ->addStmt($factory->property('someProperty')->makeProtected()) + ->addStmt($factory->property('anotherProperty')->makePrivate()->setDefault(array(1, 2, 3))) + ) + + ->getNode() +; + +$stmts = array($node); +$prettyPrinter = new PhpParser\PrettyPrinter\Standard(); +echo $prettyPrinter->prettyPrintFile($stmts); +``` + +This will produce the following output with the standard pretty printer: + +```php + array('comments', 'startLine', 'endLine', 'startFilePos', 'endFilePos'), +)); +$parser = new PhpParser\Parser($lexer); + +try { + $stmts = $parser->parse($code); + // ... +} catch (PhpParser\Error $e) { + // ... +} +``` + +Before using column information its availability needs to be checked with `$e->hasColumnInfo()`, as the precise +location of an error cannot always be determined. The methods for retrieving column information also have to be passed +the source code of the parsed file. An example for printing an error: + +```php +if ($e->hasColumnInfo()) { + echo $e->getRawMessage() . ' from ' . $e->getStartLine() . ':' . $e->getStartColumn($code) + . ' to ' . $e->getEndLine() . ':' . $e->getEndColumn($code); +} else { + echo $e->getMessage(); +} +``` + +Both line numbers and column numbers are 1-based. EOF errors will be located at the position one past the end of the +file. + +Error recovery +-------------- + +> **EXPERIMENTAL** + +By default the parser will throw an exception upon encountering the first error during parsing. An alternative mode is +also supported, in which the parser will remember the error, but try to continue parsing the rest of the source code. + +To enable this mode the `throwOnError` parser option needs to be disabled. Any errors that occurred during parsing can +then be retrieved using `$parser->getErrors()`. The `$parser->parse()` method will either return a partial syntax tree +or `null` if recovery fails. + +A usage example: + +```php +$parser = new PhpParser\Parser(new PhpParser\Lexer, array( + 'throwOnError' => false, +)); + +$stmts = $parser->parse($code); +$errors = $parser->getErrors(); + +foreach ($errors as $error) { + // $error is an ordinary PhpParser\Error +} + +if (null !== $stmts) { + // $stmts is a best-effort partial AST +} +``` + +The error recovery implementation is experimental -- it currently won't be able to recover from many types of errors. diff --git a/vendor/nikic/php-parser/doc/component/Lexer.markdown b/vendor/nikic/php-parser/doc/component/Lexer.markdown new file mode 100644 index 0000000..0bf06b6 --- /dev/null +++ b/vendor/nikic/php-parser/doc/component/Lexer.markdown @@ -0,0 +1,146 @@ +Lexer component documentation +============================= + +The lexer is responsible for providing tokens to the parser. The project comes with two lexers: `PhpParser\Lexer` and +`PhpParser\Lexer\Emulative`. The latter is an extension of the former, which adds the ability to emulate tokens of +newer PHP versions and thus allows parsing of new code on older versions. + +This documentation discusses options available for the default lexers and explains how lexers can be extended. + +Lexer options +------------- + +The two default lexers accept an `$options` array in the constructor. Currently only the `'usedAttributes'` option is +supported, which allows you to specify which attributes will be added to the AST nodes. The attributes can then be +accessed using `$node->getAttribute()`, `$node->setAttribute()`, `$node->hasAttribute()` and `$node->getAttributes()` +methods. A sample options array: + +```php +$lexer = new PhpParser\Lexer(array( + 'usedAttributes' => array( + 'comments', 'startLine', 'endLine' + ) +)); +``` + +The attributes used in this example match the default behavior of the lexer. The following attributes are supported: + + * `comments`: Array of `PhpParser\Comment` or `PhpParser\Comment\Doc` instances, representing all comments that occurred + between the previous non-discarded token and the current one. Use of this attribute is required for the + `$node->getDocComment()` method to work. The attribute is also needed if you wish the pretty printer to retain + comments present in the original code. + * `startLine`: Line in which the node starts. This attribute is required for the `$node->getLine()` to work. It is also + required if syntax errors should contain line number information. + * `endLine`: Line in which the node ends. + * `startTokenPos`: Offset into the token array of the first token in the node. + * `endTokenPos`: Offset into the token array of the last token in the node. + * `startFilePos`: Offset into the code string of the first character that is part of the node. + * `endFilePos`: Offset into the code string of the last character that is part of the node. + +### Using token positions + +The token offset information is useful if you wish to examine the exact formatting used for a node. For example the AST +does not distinguish whether a property was declared using `public` or using `var`, but you can retrieve this +information based on the token position: + +```php +function isDeclaredUsingVar(array $tokens, PhpParser\Node\Stmt\Property $prop) { + $i = $prop->getAttribute('startTokenPos'); + return $tokens[$i][0] === T_VAR; +} +``` + +In order to make use of this function, you will have to provide the tokens from the lexer to your node visitor using +code similar to the following: + +```php +class MyNodeVisitor extends PhpParser\NodeVisitorAbstract { + private $tokens; + public function setTokens(array $tokens) { + $this->tokens = $tokens; + } + + public function leaveNode(PhpParser\Node $node) { + if ($node instanceof PhpParser\Node\Stmt\Property) { + var_dump(isDeclaredUsingVar($this->tokens, $node)); + } + } +} + +$lexer = new PhpParser\Lexer(array( + 'usedAttributes' => array( + 'comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos' + ) +)); +$parser = new PhpParser\Parser($lexer); + +$visitor = new MyNodeVisitor(); +$traverser = new PhpParser\NodeTraverser(); +$traverser->addVisitor($visitor); + +try { + $stmts = $parser->parse($code); + $visitor->setTokens($lexer->getTokens()); + $stmts = $traverser->traverse($stmts); +} catch (PhpParser\Error $e) { + echo 'Parse Error: ', $e->getMessage(); +} +``` + +The same approach can also be used to perform specific modifications in the code, without changing the formatting in +other places (which is the case when using the pretty printer). + +Lexer extension +--------------- + +A lexer has to define the following public interface: + + void startLexing(string $code); + array getTokens(); + string handleHaltCompiler(); + int getNextToken(string &$value = null, array &$startAttributes = null, array &$endAttributes = null); + +The `startLexing()` method is invoked with the source code that is to be lexed (including the opening tag) whenever the +`parse()` method of the parser is called. It can be used to reset state or preprocess the source code or tokens. + +The `getTokens()` method returns the current token array, in the usual `token_get_all()` format. This method is not +used by the parser (which uses `getNextToken()`), but is useful in combination with the token position attributes. + +The `handleHaltCompiler()` method is called whenever a `T_HALT_COMPILER` token is encountered. It has to return the +remaining string after the construct (not including `();`). + +The `getNextToken()` method returns the ID of the next token (as defined by the `Parser::T_*` constants). If no more +tokens are available it must return `0`, which is the ID of the `EOF` token. Furthermore the string content of the +token should be written into the by-reference `$value` parameter (which will then be available as `$n` in the parser). + +### Attribute handling + +The other two by-ref variables `$startAttributes` and `$endAttributes` define which attributes will eventually be +assigned to the generated nodes: The parser will take the `$startAttributes` from the first token which is part of the +node and the `$endAttributes` from the last token that is part of the node. + +E.g. if the tokens `T_FUNCTION T_STRING ... '{' ... '}'` constitute a node, then the `$startAttributes` from the +`T_FUNCTION` token will be taken and the `$endAttributes` from the `'}'` token. + +An application of custom attributes is storing the original formatting of literals: The parser does not retain +information about the formatting of integers (like decimal vs. hexadecimal) or strings (like used quote type or used +escape sequences). This can be remedied by storing the original value in an attribute: + +```php +class KeepOriginalValueLexer extends PHPParser\Lexer // or PHPParser\Lexer\Emulative +{ + public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) { + $tokenId = parent::getNextToken($value, $startAttributes, $endAttributes); + + if ($tokenId == PHPParser\Parser::T_CONSTANT_ENCAPSED_STRING // non-interpolated string + || $tokenId == PHPParser\Parser::T_LNUMBER // integer + || $tokenId == PHPParser\Parser::T_DNUMBER // floating point number + ) { + // could also use $startAttributes, doesn't really matter here + $endAttributes['originalValue'] = $value; + } + + return $tokenId; + } +} +``` diff --git a/vendor/nikic/php-parser/grammar/README.md b/vendor/nikic/php-parser/grammar/README.md new file mode 100644 index 0000000..909f7c1 --- /dev/null +++ b/vendor/nikic/php-parser/grammar/README.md @@ -0,0 +1,28 @@ +What do all those files mean? +============================= + + * `zend_language_parser.phpy`: PHP grammer written in a pseudo language + * `analyze.php`: Analyzes the `.phpy`-grammer and outputs some info about it + * `rebuildParser.php`: Preprocesses the `.phpy`-grammar and builds the parser using `kmyacc` + * `kmyacc.php.parser`: A `kmyacc` parser prototype file for PHP + +.phpy pseudo language +===================== + +The `.phpy` file is a normal grammer in `kmyacc` (`yacc`) style, with some transformations +applied to it: + + * Nodes are created using the syntax `Name[..., ...]`. This is transformed into + `new Name(..., ..., attributes())` + * Some function-like constructs are resolved (see `rebuildParser.php` for a list) + * Associative arrays are written as `[key: value, ...]`, which is transformed to + `array('key' => value, ...)` + +Building the parser +=================== + +In order to rebuild the parser, you need [moriyoshi's fork of kmyacc](https://github.com/moriyoshi/kmyacc-forked). +After you compiled/installed it, run the `rebuildParser.php` script. + +By default only the `Parser.php` is built. If you want to additionally emit debug symbols and create `y.output`, run the +script with `--debug`. If you want to retain the preprocessed grammar pass `--keep-tmp-grammar`. diff --git a/vendor/nikic/php-parser/grammar/analyze.php b/vendor/nikic/php-parser/grammar/analyze.php new file mode 100644 index 0000000..50101df --- /dev/null +++ b/vendor/nikic/php-parser/grammar/analyze.php @@ -0,0 +1,96 @@ +\'[^\\\\\']*+(?:\\\\.[^\\\\\']*+)*+\') + (?"[^\\\\"]*+(?:\\\\.[^\\\\"]*+)*+") + (?(?&singleQuotedString)|(?&doubleQuotedString)) + (?/\*[^*]*+(?:\*(?!/)[^*]*+)*+\*/) + (?\{[^\'"/{}]*+(?:(?:(?&string)|(?&comment)|(?&code)|/)[^\'"/{}]*+)*+}) +)'; + +const RULE_BLOCK = '(?[a-z_]++):(?[^\'"/{};]*+(?:(?:(?&string)|(?&comment)|(?&code)|/|})[^\'"/{};]*+)*+);'; + +$usedTerminals = array_flip(array( + 'T_VARIABLE', 'T_STRING', 'T_INLINE_HTML', 'T_ENCAPSED_AND_WHITESPACE', + 'T_LNUMBER', 'T_DNUMBER', 'T_CONSTANT_ENCAPSED_STRING', 'T_STRING_VARNAME', 'T_NUM_STRING' +)); +$unusedNonterminals = array_flip(array( + 'case_separator', 'optional_comma' +)); + +function regex($regex) { + return '~' . LIB . '(?:' . str_replace('~', '\~', $regex) . ')~'; +} + +function magicSplit($regex, $string) { + $pieces = preg_split(regex('(?:(?&string)|(?&comment)|(?&code))(*SKIP)(*FAIL)|' . $regex), $string); + + foreach ($pieces as &$piece) { + $piece = trim($piece); + } + + return array_filter($pieces); +} + +echo '
';
+
+////////////////////
+////////////////////
+////////////////////
+
+list($defs, $ruleBlocks) = magicSplit('%%', file_get_contents(GRAMMAR_FILE));
+
+if ('' !== trim(preg_replace(regex(RULE_BLOCK), '', $ruleBlocks))) {
+    die('Not all rule blocks were properly recognized!');
+}
+
+preg_match_all(regex(RULE_BLOCK), $ruleBlocks, $ruleBlocksMatches, PREG_SET_ORDER);
+foreach ($ruleBlocksMatches as $match) {
+    $ruleBlockName = $match['name'];
+    $rules = magicSplit('\|', $match['rules']);
+
+    foreach ($rules as &$rule) {
+        $parts = magicSplit('\s+', $rule);
+        $usedParts = array();
+
+        foreach ($parts as $part) {
+            if ('{' === $part[0]) {
+                preg_match_all('~\$([0-9]+)~', $part, $backReferencesMatches, PREG_SET_ORDER);
+                foreach ($backReferencesMatches as $match) {
+                    $usedParts[$match[1]] = true;
+                }
+            }
+        }
+
+        $i = 1;
+        foreach ($parts as &$part) {
+            if ('/' === $part[0]) {
+                continue;
+            }
+
+            if (isset($usedParts[$i])) {
+                if ('\'' === $part[0] || '{' === $part[0]
+                    || (ctype_upper($part[0]) && !isset($usedTerminals[$part]))
+                    || (ctype_lower($part[0]) && isset($unusedNonterminals[$part]))
+                ) {
+                    $part = '' . $part . '';
+                } else {
+                    $part = '' . $part . '';
+                }
+            } elseif ((ctype_upper($part[0]) && isset($usedTerminals[$part]))
+                      || (ctype_lower($part[0]) && !isset($unusedNonterminals[$part]))
+
+            ) {
+                $part = '' . $part . '';
+            }
+
+            ++$i;
+        }
+
+        $rule = implode(' ', $parts);
+    }
+
+    echo $ruleBlockName, ':', "\n", '      ', implode("\n" . '    | ', $rules), "\n", ';', "\n\n";
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/grammar/kmyacc.php.parser b/vendor/nikic/php-parser/grammar/kmyacc.php.parser
new file mode 100644
index 0000000..e8f4d5a
--- /dev/null
+++ b/vendor/nikic/php-parser/grammar/kmyacc.php.parser
@@ -0,0 +1,100 @@
+semValue
+#semval($,%t) $this->semValue
+#semval(%n) $this->stackPos-(%l-%n)
+#semval(%n,%t) $this->stackPos-(%l-%n)
+
+namespace PhpParser;
+#include;
+
+/* This is an automatically GENERATED file, which should not be manually edited.
+ * Instead edit one of the following:
+ *  * the grammar file grammar/zend_language_parser.phpy
+ *  * the skeleton file grammar/kymacc.php.parser
+ *  * the preprocessing script grammar/rebuildParser.php
+ */
+class Parser extends ParserAbstract
+{
+    protected $tokenToSymbolMapSize = #(YYMAXLEX);
+    protected $actionTableSize = #(YYLAST);
+    protected $gotoTableSize = #(YYGLAST);
+
+    protected $invalidSymbol = #(YYBADCH);
+    protected $errorSymbol = #(YYINTERRTOK);
+    protected $defaultAction = #(YYDEFAULT);
+    protected $unexpectedTokenRule = #(YYUNEXPECTED);
+
+    protected $YY2TBLSTATE  = #(YY2TBLSTATE);
+    protected $YYNLSTATES   = #(YYNLSTATES);
+
+#tokenval
+    const %s = %n;
+#endtokenval
+
+    protected $symbolToName = array(
+        #listvar terminals
+    );
+
+    protected $tokenToSymbol = array(
+        #listvar yytranslate
+    );
+
+    protected $action = array(
+        #listvar yyaction
+    );
+
+    protected $actionCheck = array(
+        #listvar yycheck
+    );
+
+    protected $actionBase = array(
+        #listvar yybase
+    );
+
+    protected $actionDefault = array(
+        #listvar yydefault
+    );
+
+    protected $goto = array(
+        #listvar yygoto
+    );
+
+    protected $gotoCheck = array(
+        #listvar yygcheck
+    );
+
+    protected $gotoBase = array(
+        #listvar yygbase
+    );
+
+    protected $gotoDefault = array(
+        #listvar yygdefault
+    );
+
+    protected $ruleToNonTerminal = array(
+        #listvar yylhs
+    );
+
+    protected $ruleToLength = array(
+        #listvar yylen
+    );
+#if -t
+
+    protected $productions = array(
+        #production-strings;
+    );
+#endif
+#reduce
+
+    protected function reduceRule%n() {
+        %b
+    }
+#noact
+
+    protected function reduceRule%n() {
+        $this->semValue = $this->semStack[$this->stackPos];
+    }
+#endreduce
+}
+#tailcode;
diff --git a/vendor/nikic/php-parser/grammar/rebuildParser.php b/vendor/nikic/php-parser/grammar/rebuildParser.php
new file mode 100644
index 0000000..5d21a1e
--- /dev/null
+++ b/vendor/nikic/php-parser/grammar/rebuildParser.php
@@ -0,0 +1,228 @@
+\'[^\\\\\']*+(?:\\\\.[^\\\\\']*+)*+\')
+    (?"[^\\\\"]*+(?:\\\\.[^\\\\"]*+)*+")
+    (?(?&singleQuotedString)|(?&doubleQuotedString))
+    (?/\*[^*]*+(?:\*(?!/)[^*]*+)*+\*/)
+    (?\{[^\'"/{}]*+(?:(?:(?&string)|(?&comment)|(?&code)|/)[^\'"/{}]*+)*+})
+)';
+
+const PARAMS = '\[(?[^[\]]*+(?:\[(?¶ms)\][^[\]]*+)*+)\]';
+const ARGS   = '\((?[^()]*+(?:\((?&args)\)[^()]*+)*+)\)';
+
+///////////////////
+/// Main script ///
+///////////////////
+
+echo 'Building temporary preproprocessed grammar file.', "\n";
+
+$grammarCode = file_get_contents($grammarFile);
+
+$grammarCode = resolveNodes($grammarCode);
+$grammarCode = resolveMacros($grammarCode);
+$grammarCode = resolveArrays($grammarCode);
+$grammarCode = resolveStackAccess($grammarCode);
+
+file_put_contents($tmpGrammarFile, $grammarCode);
+
+$additionalArgs = $optionDebug ? '-t -v' : '';
+
+echo "Building parser.\n";
+$output = trim(shell_exec("$kmyacc $additionalArgs -l -m $skeletonFile $tmpGrammarFile 2>&1"));
+echo "Output: \"$output\"\n";
+
+$resultCode = file_get_contents($tmpResultFile);
+$resultCode = removeTrailingWhitespace($resultCode);
+
+ensureDirExists(dirname($parserResultFile));
+file_put_contents($parserResultFile, $resultCode);
+unlink($tmpResultFile);
+
+if (!$optionKeepTmpGrammar) {
+    unlink($tmpGrammarFile);
+}
+
+///////////////////////////////
+/// Preprocessing functions ///
+///////////////////////////////
+
+function resolveNodes($code) {
+    return preg_replace_callback(
+        '~(?[A-Z][a-zA-Z_\\\\]++)\s*' . PARAMS . '~',
+        function($matches) {
+            // recurse
+            $matches['params'] = resolveNodes($matches['params']);
+
+            $params = magicSplit(
+                '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,',
+                $matches['params']
+            );
+
+            $paramCode = '';
+            foreach ($params as $param) {
+                $paramCode .= $param . ', ';
+            }
+
+            return 'new ' . $matches['name'] . '(' . $paramCode . 'attributes())';
+        },
+        $code
+    );
+}
+
+function resolveMacros($code) {
+    return preg_replace_callback(
+        '~\b(?)(?!array\()(?[a-z][A-Za-z]++)' . ARGS . '~',
+        function($matches) {
+            // recurse
+            $matches['args'] = resolveMacros($matches['args']);
+
+            $name = $matches['name'];
+            $args = magicSplit(
+                '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,',
+                $matches['args']
+            );
+
+            if ('attributes' == $name) {
+                assertArgs(0, $args, $name);
+                return '$this->startAttributeStack[#1] + $this->endAttributes';
+            }
+
+            if ('init' == $name) {
+                return '$$ = array(' . implode(', ', $args) . ')';
+            }
+
+            if ('push' == $name) {
+                assertArgs(2, $args, $name);
+
+                return $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0];
+            }
+
+            if ('pushNormalizing' == $name) {
+                assertArgs(2, $args, $name);
+
+                return 'if (is_array(' . $args[1] . ')) { $$ = array_merge(' . $args[0] . ', ' . $args[1] . '); } else { ' . $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0] . '; }';
+            }
+
+            if ('toArray' == $name) {
+                assertArgs(1, $args, $name);
+
+                return 'is_array(' . $args[0] . ') ? ' . $args[0] . ' : array(' . $args[0] . ')';
+            }
+
+            if ('parseVar' == $name) {
+                assertArgs(1, $args, $name);
+
+                return 'substr(' . $args[0] . ', 1)';
+            }
+
+            if ('parseEncapsed' == $name) {
+                assertArgs(2, $args, $name);
+
+                return 'foreach (' . $args[0] . ' as &$s) { if (is_string($s)) { $s = Node\Scalar\String_::parseEscapeSequences($s, ' . $args[1] . '); } }';
+            }
+
+            if ('parseEncapsedDoc' == $name) {
+                assertArgs(1, $args, $name);
+
+                return 'foreach (' . $args[0] . ' as &$s) { if (is_string($s)) { $s = Node\Scalar\String_::parseEscapeSequences($s, null); } } $s = preg_replace(\'~(\r\n|\n|\r)\z~\', \'\', $s); if (\'\' === $s) array_pop(' . $args[0] . ');';
+            }
+
+            return $matches[0];
+        },
+        $code
+    );
+}
+
+function assertArgs($num, $args, $name) {
+    if ($num != count($args)) {
+        die('Wrong argument count for ' . $name . '().');
+    }
+}
+
+function resolveArrays($code) {
+    return preg_replace_callback(
+        '~' . PARAMS . '~',
+        function ($matches) {
+            $elements = magicSplit(
+                '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,',
+                $matches['params']
+            );
+
+            // don't convert [] to array, it might have different meaning
+            if (empty($elements)) {
+                return $matches[0];
+            }
+
+            $elementCodes = array();
+            foreach ($elements as $element) {
+                // convert only arrays where all elements have keys
+                if (false === strpos($element, ':')) {
+                    return $matches[0];
+                }
+
+                list($key, $value) = explode(':', $element, 2);
+                $elementCodes[] = "'" . $key . "' =>" . $value;
+            }
+
+            return 'array(' . implode(', ', $elementCodes) . ')';
+        },
+        $code
+    );
+}
+
+function resolveStackAccess($code) {
+    $code = preg_replace('/\$\d+/', '$this->semStack[$0]', $code);
+    $code = preg_replace('/#(\d+)/', '$$1', $code);
+    return $code;
+}
+
+function removeTrailingWhitespace($code) {
+    $lines = explode("\n", $code);
+    $lines = array_map('rtrim', $lines);
+    return implode("\n", $lines);
+}
+
+function ensureDirExists($dir) {
+    if (!is_dir($dir)) {
+        mkdir($dir, 0777, true);
+    }
+}
+
+//////////////////////////////
+/// Regex helper functions ///
+//////////////////////////////
+
+function regex($regex) {
+    return '~' . LIB . '(?:' . str_replace('~', '\~', $regex) . ')~';
+}
+
+function magicSplit($regex, $string) {
+    $pieces = preg_split(regex('(?:(?&string)|(?&comment)|(?&code))(*SKIP)(*FAIL)|' . $regex), $string);
+
+    foreach ($pieces as &$piece) {
+        $piece = trim($piece);
+    }
+
+    return array_filter($pieces);
+}
diff --git a/vendor/nikic/php-parser/grammar/zend_language_parser.phpy b/vendor/nikic/php-parser/grammar/zend_language_parser.phpy
new file mode 100644
index 0000000..9a8cd5c
--- /dev/null
+++ b/vendor/nikic/php-parser/grammar/zend_language_parser.phpy
@@ -0,0 +1,994 @@
+%pure_parser
+%expect 2
+
+%left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
+%left ','
+%left T_LOGICAL_OR
+%left T_LOGICAL_XOR
+%left T_LOGICAL_AND
+%right T_PRINT
+%right T_YIELD
+%right T_YIELD_FROM
+%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL T_POW_EQUAL
+%left '?' ':'
+%right T_COALESCE
+%left T_BOOLEAN_OR
+%left T_BOOLEAN_AND
+%left '|'
+%left '^'
+%left '&'
+%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP
+%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
+%left T_SL T_SR
+%left '+' '-' '.'
+%left '*' '/' '%'
+%right '!'
+%nonassoc T_INSTANCEOF
+%right '~' 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 '@'
+%right T_POW
+%right '['
+%nonassoc T_NEW T_CLONE
+%token T_EXIT
+%token T_IF
+%left T_ELSEIF
+%left T_ELSE
+%left T_ENDIF
+%token T_LNUMBER
+%token T_DNUMBER
+%token T_STRING
+%token T_STRING_VARNAME
+%token T_VARIABLE
+%token T_NUM_STRING
+%token T_INLINE_HTML
+%token T_CHARACTER
+%token T_BAD_CHARACTER
+%token T_ENCAPSED_AND_WHITESPACE
+%token T_CONSTANT_ENCAPSED_STRING
+%token T_ECHO
+%token T_DO
+%token T_WHILE
+%token T_ENDWHILE
+%token T_FOR
+%token T_ENDFOR
+%token T_FOREACH
+%token T_ENDFOREACH
+%token T_DECLARE
+%token T_ENDDECLARE
+%token T_AS
+%token T_SWITCH
+%token T_ENDSWITCH
+%token T_CASE
+%token T_DEFAULT
+%token T_BREAK
+%token T_CONTINUE
+%token T_GOTO
+%token T_FUNCTION
+%token T_CONST
+%token T_RETURN
+%token T_TRY
+%token T_CATCH
+%token T_FINALLY
+%token T_THROW
+%token T_USE
+%token T_INSTEADOF
+%token T_GLOBAL
+%right T_STATIC T_ABSTRACT T_FINAL T_PRIVATE T_PROTECTED T_PUBLIC
+%token T_VAR
+%token T_UNSET
+%token T_ISSET
+%token T_EMPTY
+%token T_HALT_COMPILER
+%token T_CLASS
+%token T_TRAIT
+%token T_INTERFACE
+%token T_EXTENDS
+%token T_IMPLEMENTS
+%token T_OBJECT_OPERATOR
+%token T_DOUBLE_ARROW
+%token T_LIST
+%token T_ARRAY
+%token T_CALLABLE
+%token T_CLASS_C
+%token T_TRAIT_C
+%token T_METHOD_C
+%token T_FUNC_C
+%token T_LINE
+%token T_FILE
+%token T_COMMENT
+%token T_DOC_COMMENT
+%token T_OPEN_TAG
+%token T_OPEN_TAG_WITH_ECHO
+%token T_CLOSE_TAG
+%token T_WHITESPACE
+%token T_START_HEREDOC
+%token T_END_HEREDOC
+%token T_DOLLAR_OPEN_CURLY_BRACES
+%token T_CURLY_OPEN
+%token T_PAAMAYIM_NEKUDOTAYIM
+%token T_NAMESPACE
+%token T_NS_C
+%token T_DIR
+%token T_NS_SEPARATOR
+%token T_ELLIPSIS
+
+%{
+use PhpParser\Node\Expr;
+use PhpParser\Node\Name;
+use PhpParser\Node\Scalar;
+use PhpParser\Node\Stmt;
+%}
+
+%%
+
+start:
+    top_statement_list                                      { $$ = $this->handleNamespaces($1); }
+;
+
+top_statement_list:
+      top_statement_list top_statement                      { pushNormalizing($1, $2); }
+    | /* empty */                                           { init(); }
+;
+
+namespace_name_parts:
+      T_STRING                                              { init($1); }
+    | namespace_name_parts T_NS_SEPARATOR T_STRING          { push($1, $3); }
+;
+
+namespace_name:
+      namespace_name_parts                                  { $$ = Name[$1]; }
+;
+
+top_statement:
+      statement                                             { $$ = $1; }
+    | function_declaration_statement                        { $$ = $1; }
+    | class_declaration_statement                           { $$ = $1; }
+    | T_HALT_COMPILER
+          { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; }
+    | T_NAMESPACE namespace_name ';'                        { $$ = Stmt\Namespace_[$2, null]; }
+    | T_NAMESPACE namespace_name '{' top_statement_list '}' { $$ = Stmt\Namespace_[$2, $4]; }
+    | T_NAMESPACE '{' top_statement_list '}'                { $$ = Stmt\Namespace_[null,     $3]; }
+    | T_USE use_declarations ';'                            { $$ = Stmt\Use_[$2, Stmt\Use_::TYPE_NORMAL]; }
+    | T_USE T_FUNCTION use_declarations ';'                 { $$ = Stmt\Use_[$3, Stmt\Use_::TYPE_FUNCTION]; }
+    | T_USE T_CONST use_declarations ';'                    { $$ = Stmt\Use_[$3, Stmt\Use_::TYPE_CONSTANT]; }
+    | T_CONST constant_declaration_list ';'                 { $$ = Stmt\Const_[$2]; }
+;
+
+use_declarations:
+      use_declarations ',' use_declaration                  { push($1, $3); }
+    | use_declaration                                       { init($1); }
+;
+
+use_declaration:
+      namespace_name                                        { $$ = Stmt\UseUse[$1, null]; }
+    | namespace_name T_AS T_STRING                          { $$ = Stmt\UseUse[$1, $3]; }
+    | T_NS_SEPARATOR namespace_name                         { $$ = Stmt\UseUse[$2, null]; }
+    | T_NS_SEPARATOR namespace_name T_AS T_STRING           { $$ = Stmt\UseUse[$2, $4]; }
+;
+
+constant_declaration_list:
+      constant_declaration_list ',' constant_declaration    { push($1, $3); }
+    | constant_declaration                                  { init($1); }
+;
+
+constant_declaration:
+    T_STRING '=' static_scalar                              { $$ = Node\Const_[$1, $3]; }
+;
+
+inner_statement_list:
+      inner_statement_list inner_statement                  { pushNormalizing($1, $2); }
+    | /* empty */                                           { init(); }
+;
+
+inner_statement:
+      statement                                             { $$ = $1; }
+    | function_declaration_statement                        { $$ = $1; }
+    | class_declaration_statement                           { $$ = $1; }
+    | T_HALT_COMPILER
+          { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', attributes()); }
+;
+
+statement:
+      '{' inner_statement_list '}'                          { $$ = $2; }
+    | T_IF parentheses_expr statement elseif_list else_single
+          { $$ = Stmt\If_[$2, [stmts: toArray($3), elseifs: $4, else: $5]]; }
+    | T_IF parentheses_expr ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';'
+          { $$ = Stmt\If_[$2, [stmts: $4, elseifs: $5, else: $6]]; }
+    | T_WHILE parentheses_expr while_statement              { $$ = Stmt\While_[$2, $3]; }
+    | T_DO statement T_WHILE parentheses_expr ';'           { $$ = Stmt\Do_   [$4, toArray($2)]; }
+    | T_FOR '(' for_expr ';'  for_expr ';' for_expr ')' for_statement
+          { $$ = Stmt\For_[[init: $3, cond: $5, loop: $7, stmts: $9]]; }
+    | T_SWITCH parentheses_expr switch_case_list            { $$ = Stmt\Switch_[$2, $3]; }
+    | T_BREAK ';'                                           { $$ = Stmt\Break_[null]; }
+    | T_BREAK expr ';'                                      { $$ = Stmt\Break_[$2]; }
+    | T_CONTINUE ';'                                        { $$ = Stmt\Continue_[null]; }
+    | T_CONTINUE expr ';'                                   { $$ = Stmt\Continue_[$2]; }
+    | T_RETURN ';'                                          { $$ = Stmt\Return_[null]; }
+    | T_RETURN expr ';'                                     { $$ = Stmt\Return_[$2]; }
+    | yield_expr ';'                                        { $$ = $1; }
+    | T_GLOBAL global_var_list ';'                          { $$ = Stmt\Global_[$2]; }
+    | T_STATIC static_var_list ';'                          { $$ = Stmt\Static_[$2]; }
+    | T_ECHO expr_list ';'                                  { $$ = Stmt\Echo_[$2]; }
+    | T_INLINE_HTML                                         { $$ = Stmt\InlineHTML[$1]; }
+    | expr ';'                                              { $$ = $1; }
+    | T_UNSET '(' variables_list ')' ';'                    { $$ = Stmt\Unset_[$3]; }
+    | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
+          { $$ = Stmt\Foreach_[$3, $5[0], [keyVar: null, byRef: $5[1], stmts: $7]]; }
+    | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement
+          { $$ = Stmt\Foreach_[$3, $7[0], [keyVar: $5, byRef: $7[1], stmts: $9]]; }
+    | T_DECLARE '(' declare_list ')' declare_statement      { $$ = Stmt\Declare_[$3, $5]; }
+    | ';'                                                   { $$ = array(); /* means: no statement */ }
+    | T_TRY '{' inner_statement_list '}' catches optional_finally
+          { $$ = Stmt\TryCatch[$3, $5, $6]; }
+    | T_THROW expr ';'                                      { $$ = Stmt\Throw_[$2]; }
+    | T_GOTO T_STRING ';'                                   { $$ = Stmt\Goto_[$2]; }
+    | T_STRING ':'                                          { $$ = Stmt\Label[$1]; }
+    | error                                                 { $$ = array(); /* means: no statement */ }
+;
+
+catches:
+      /* empty */                                           { init(); }
+    | catches catch                                         { push($1, $2); }
+;
+
+catch:
+    T_CATCH '(' name T_VARIABLE ')' '{' inner_statement_list '}'
+        { $$ = Stmt\Catch_[$3, parseVar($4), $7]; }
+;
+
+optional_finally:
+      /* empty */                                           { $$ = null; }
+    | T_FINALLY '{' inner_statement_list '}'                { $$ = $3; }
+;
+
+variables_list:
+      variable                                              { init($1); }
+    | variables_list ',' variable                           { push($1, $3); }
+;
+
+optional_ref:
+      /* empty */                                           { $$ = false; }
+    | '&'                                                   { $$ = true; }
+;
+
+optional_ellipsis:
+      /* empty */                                           { $$ = false; }
+    | T_ELLIPSIS                                            { $$ = true; }
+;
+
+function_declaration_statement:
+    T_FUNCTION optional_ref T_STRING '(' parameter_list ')' optional_return_type '{' inner_statement_list '}'
+        { $$ = Stmt\Function_[$3, [byRef: $2, params: $5, returnType: $7, stmts: $9]]; }
+;
+
+class_declaration_statement:
+      class_entry_type T_STRING extends_from implements_list '{' class_statement_list '}'
+          { $$ = Stmt\Class_[$2, [type: $1, extends: $3, implements: $4, stmts: $6]]; }
+    | T_INTERFACE T_STRING interface_extends_list '{' class_statement_list '}'
+          { $$ = Stmt\Interface_[$2, [extends: $3, stmts: $5]]; }
+    | T_TRAIT T_STRING '{' class_statement_list '}'
+          { $$ = Stmt\Trait_[$2, $4]; }
+;
+
+class_entry_type:
+      T_CLASS                                               { $$ = 0; }
+    | T_ABSTRACT T_CLASS                                    { $$ = Stmt\Class_::MODIFIER_ABSTRACT; }
+    | T_FINAL T_CLASS                                       { $$ = Stmt\Class_::MODIFIER_FINAL; }
+;
+
+extends_from:
+      /* empty */                                           { $$ = null; }
+    | T_EXTENDS name                                        { $$ = $2; }
+;
+
+interface_extends_list:
+      /* empty */                                           { $$ = array(); }
+    | T_EXTENDS name_list                                   { $$ = $2; }
+;
+
+implements_list:
+      /* empty */                                           { $$ = array(); }
+    | T_IMPLEMENTS name_list                                { $$ = $2; }
+;
+
+name_list:
+      name                                                  { init($1); }
+    | name_list ',' name                                    { push($1, $3); }
+;
+
+for_statement:
+      statement                                             { $$ = toArray($1); }
+    | ':' inner_statement_list T_ENDFOR ';'                 { $$ = $2; }
+;
+
+foreach_statement:
+      statement                                             { $$ = toArray($1); }
+    | ':' inner_statement_list T_ENDFOREACH ';'             { $$ = $2; }
+;
+
+declare_statement:
+      statement                                             { $$ = toArray($1); }
+    | ':' inner_statement_list T_ENDDECLARE ';'             { $$ = $2; }
+;
+
+declare_list:
+      declare_list_element                                  { init($1); }
+    | declare_list ',' declare_list_element                 { push($1, $3); }
+;
+
+declare_list_element:
+      T_STRING '=' static_scalar                            { $$ = Stmt\DeclareDeclare[$1, $3]; }
+;
+
+switch_case_list:
+      '{' case_list '}'                                     { $$ = $2; }
+    | '{' ';' case_list '}'                                 { $$ = $3; }
+    | ':' case_list T_ENDSWITCH ';'                         { $$ = $2; }
+    | ':' ';' case_list T_ENDSWITCH ';'                     { $$ = $3; }
+;
+
+case_list:
+      /* empty */                                           { init(); }
+    | case_list case                                        { push($1, $2); }
+;
+
+case:
+      T_CASE expr case_separator inner_statement_list       { $$ = Stmt\Case_[$2, $4]; }
+    | T_DEFAULT case_separator inner_statement_list         { $$ = Stmt\Case_[null, $3]; }
+;
+
+case_separator:
+      ':'
+    | ';'
+;
+
+while_statement:
+      statement                                             { $$ = toArray($1); }
+    | ':' inner_statement_list T_ENDWHILE ';'               { $$ = $2; }
+;
+
+elseif_list:
+      /* empty */                                           { init(); }
+    | elseif_list elseif                                    { push($1, $2); }
+;
+
+elseif:
+      T_ELSEIF parentheses_expr statement                   { $$ = Stmt\ElseIf_[$2, toArray($3)]; }
+;
+
+new_elseif_list:
+      /* empty */                                           { init(); }
+    | new_elseif_list new_elseif                            { push($1, $2); }
+;
+
+new_elseif:
+     T_ELSEIF parentheses_expr ':' inner_statement_list     { $$ = Stmt\ElseIf_[$2, $4]; }
+;
+
+else_single:
+      /* empty */                                           { $$ = null; }
+    | T_ELSE statement                                      { $$ = Stmt\Else_[toArray($2)]; }
+;
+
+new_else_single:
+      /* empty */                                           { $$ = null; }
+    | T_ELSE ':' inner_statement_list                       { $$ = Stmt\Else_[$3]; }
+;
+
+foreach_variable:
+      variable                                              { $$ = array($1, false); }
+    | '&' variable                                          { $$ = array($2, true); }
+    | list_expr                                             { $$ = array($1, false); }
+;
+
+parameter_list:
+      non_empty_parameter_list                              { $$ = $1; }
+    | /* empty */                                           { $$ = array(); }
+;
+
+non_empty_parameter_list:
+      parameter                                             { init($1); }
+    | non_empty_parameter_list ',' parameter                { push($1, $3); }
+;
+
+parameter:
+      optional_param_type optional_ref optional_ellipsis T_VARIABLE
+          { $$ = Node\Param[parseVar($4), null, $1, $2, $3]; }
+    | optional_param_type optional_ref optional_ellipsis T_VARIABLE '=' static_scalar
+          { $$ = Node\Param[parseVar($4), $6, $1, $2, $3]; }
+;
+
+type:
+      name                                                  { $$ = $1; }
+    | T_ARRAY                                               { $$ = 'array'; }
+    | T_CALLABLE                                            { $$ = 'callable'; }
+;
+
+optional_param_type:
+      /* empty */                                           { $$ = null; }
+    | type                                                  { $$ = $1; }
+;
+
+optional_return_type:
+      /* empty */                                           { $$ = null; }
+    | ':' type                                              { $$ = $2; }
+;
+
+argument_list:
+      '(' ')'                                               { $$ = array(); }
+    | '(' non_empty_argument_list ')'                       { $$ = $2; }
+    | '(' yield_expr ')'                                    { $$ = array(Node\Arg[$2, false, false]); }
+;
+
+non_empty_argument_list:
+      argument                                              { init($1); }
+    | non_empty_argument_list ',' argument                  { push($1, $3); }
+;
+
+argument:
+      expr                                                  { $$ = Node\Arg[$1, false, false]; }
+    | '&' variable                                          { $$ = Node\Arg[$2, true, false]; }
+    | T_ELLIPSIS expr                                       { $$ = Node\Arg[$2, false, true]; }
+;
+
+global_var_list:
+      global_var_list ',' global_var                        { push($1, $3); }
+    | global_var                                            { init($1); }
+;
+
+global_var:
+      T_VARIABLE                                            { $$ = Expr\Variable[parseVar($1)]; }
+    | '$' variable                                          { $$ = Expr\Variable[$2]; }
+    | '$' '{' expr '}'                                      { $$ = Expr\Variable[$3]; }
+;
+
+static_var_list:
+      static_var_list ',' static_var                        { push($1, $3); }
+    | static_var                                            { init($1); }
+;
+
+static_var:
+      T_VARIABLE                                            { $$ = Stmt\StaticVar[parseVar($1), null]; }
+    | T_VARIABLE '=' static_scalar                          { $$ = Stmt\StaticVar[parseVar($1), $3]; }
+;
+
+class_statement_list:
+      class_statement_list class_statement                  { push($1, $2); }
+    | /* empty */                                           { init(); }
+;
+
+class_statement:
+      variable_modifiers property_declaration_list ';'      { $$ = Stmt\Property[$1, $2]; }
+    | T_CONST constant_declaration_list ';'                 { $$ = Stmt\ClassConst[$2]; }
+    | method_modifiers T_FUNCTION optional_ref T_STRING '(' parameter_list ')' optional_return_type method_body
+          { $$ = Stmt\ClassMethod[$4, [type: $1, byRef: $3, params: $6, returnType: $8, stmts: $9]]; }
+    | T_USE name_list trait_adaptations                     { $$ = Stmt\TraitUse[$2, $3]; }
+;
+
+trait_adaptations:
+      ';'                                                   { $$ = array(); }
+    | '{' trait_adaptation_list '}'                         { $$ = $2; }
+;
+
+trait_adaptation_list:
+      /* empty */                                           { init(); }
+    | trait_adaptation_list trait_adaptation                { push($1, $2); }
+;
+
+trait_adaptation:
+      trait_method_reference_fully_qualified T_INSTEADOF name_list ';'
+          { $$ = Stmt\TraitUseAdaptation\Precedence[$1[0], $1[1], $3]; }
+    | trait_method_reference T_AS member_modifier T_STRING ';'
+          { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, $4]; }
+    | trait_method_reference T_AS member_modifier ';'
+          { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, null]; }
+    | trait_method_reference T_AS T_STRING ';'
+          { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; }
+;
+
+trait_method_reference_fully_qualified:
+      name T_PAAMAYIM_NEKUDOTAYIM T_STRING                  { $$ = array($1, $3); }
+;
+trait_method_reference:
+      trait_method_reference_fully_qualified                { $$ = $1; }
+    | T_STRING                                              { $$ = array(null, $1); }
+;
+
+method_body:
+      ';' /* abstract method */                             { $$ = null; }
+    | '{' inner_statement_list '}'                          { $$ = $2; }
+;
+
+variable_modifiers:
+      non_empty_member_modifiers                            { $$ = $1; }
+    | T_VAR                                                 { $$ = 0; }
+;
+
+method_modifiers:
+      /* empty */                                           { $$ = 0; }
+    | non_empty_member_modifiers                            { $$ = $1; }
+;
+
+non_empty_member_modifiers:
+      member_modifier                                       { $$ = $1; }
+    | non_empty_member_modifiers member_modifier            { Stmt\Class_::verifyModifier($1, $2); $$ = $1 | $2; }
+;
+
+member_modifier:
+      T_PUBLIC                                              { $$ = Stmt\Class_::MODIFIER_PUBLIC; }
+    | T_PROTECTED                                           { $$ = Stmt\Class_::MODIFIER_PROTECTED; }
+    | T_PRIVATE                                             { $$ = Stmt\Class_::MODIFIER_PRIVATE; }
+    | T_STATIC                                              { $$ = Stmt\Class_::MODIFIER_STATIC; }
+    | T_ABSTRACT                                            { $$ = Stmt\Class_::MODIFIER_ABSTRACT; }
+    | T_FINAL                                               { $$ = Stmt\Class_::MODIFIER_FINAL; }
+;
+
+property_declaration_list:
+      property_declaration                                  { init($1); }
+    | property_declaration_list ',' property_declaration    { push($1, $3); }
+;
+
+property_declaration:
+      T_VARIABLE                                            { $$ = Stmt\PropertyProperty[parseVar($1), null]; }
+    | T_VARIABLE '=' static_scalar                          { $$ = Stmt\PropertyProperty[parseVar($1), $3]; }
+;
+
+expr_list:
+      expr_list ',' expr                                    { push($1, $3); }
+    | expr                                                  { init($1); }
+;
+
+for_expr:
+      /* empty */                                           { $$ = array(); }
+    | expr_list                                             { $$ = $1; }
+;
+
+expr:
+      variable                                              { $$ = $1; }
+    | list_expr '=' expr                                    { $$ = Expr\Assign[$1, $3]; }
+    | variable '=' expr                                     { $$ = Expr\Assign[$1, $3]; }
+    | variable '=' '&' variable                             { $$ = Expr\AssignRef[$1, $4]; }
+    | variable '=' '&' new_expr                             { $$ = Expr\AssignRef[$1, $4]; }
+    | new_expr                                              { $$ = $1; }
+    | T_CLONE expr                                          { $$ = Expr\Clone_[$2]; }
+    | variable T_PLUS_EQUAL expr                            { $$ = Expr\AssignOp\Plus      [$1, $3]; }
+    | variable T_MINUS_EQUAL expr                           { $$ = Expr\AssignOp\Minus     [$1, $3]; }
+    | variable T_MUL_EQUAL expr                             { $$ = Expr\AssignOp\Mul       [$1, $3]; }
+    | variable T_DIV_EQUAL expr                             { $$ = Expr\AssignOp\Div       [$1, $3]; }
+    | variable T_CONCAT_EQUAL expr                          { $$ = Expr\AssignOp\Concat    [$1, $3]; }
+    | variable T_MOD_EQUAL expr                             { $$ = Expr\AssignOp\Mod       [$1, $3]; }
+    | variable T_AND_EQUAL expr                             { $$ = Expr\AssignOp\BitwiseAnd[$1, $3]; }
+    | variable T_OR_EQUAL expr                              { $$ = Expr\AssignOp\BitwiseOr [$1, $3]; }
+    | variable T_XOR_EQUAL expr                             { $$ = Expr\AssignOp\BitwiseXor[$1, $3]; }
+    | variable T_SL_EQUAL expr                              { $$ = Expr\AssignOp\ShiftLeft [$1, $3]; }
+    | variable T_SR_EQUAL expr                              { $$ = Expr\AssignOp\ShiftRight[$1, $3]; }
+    | variable T_POW_EQUAL expr                             { $$ = Expr\AssignOp\Pow       [$1, $3]; }
+    | variable T_INC                                        { $$ = Expr\PostInc[$1]; }
+    | T_INC variable                                        { $$ = Expr\PreInc [$2]; }
+    | variable T_DEC                                        { $$ = Expr\PostDec[$1]; }
+    | T_DEC variable                                        { $$ = Expr\PreDec [$2]; }
+    | expr T_BOOLEAN_OR expr                                { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; }
+    | expr T_BOOLEAN_AND expr                               { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; }
+    | expr T_LOGICAL_OR expr                                { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; }
+    | expr T_LOGICAL_AND expr                               { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; }
+    | expr T_LOGICAL_XOR expr                               { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; }
+    | expr '|' expr                                         { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; }
+    | expr '&' expr                                         { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
+    | expr '^' expr                                         { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; }
+    | expr '.' expr                                         { $$ = Expr\BinaryOp\Concat    [$1, $3]; }
+    | expr '+' expr                                         { $$ = Expr\BinaryOp\Plus      [$1, $3]; }
+    | expr '-' expr                                         { $$ = Expr\BinaryOp\Minus     [$1, $3]; }
+    | expr '*' expr                                         { $$ = Expr\BinaryOp\Mul       [$1, $3]; }
+    | expr '/' expr                                         { $$ = Expr\BinaryOp\Div       [$1, $3]; }
+    | expr '%' expr                                         { $$ = Expr\BinaryOp\Mod       [$1, $3]; }
+    | expr T_SL expr                                        { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; }
+    | expr T_SR expr                                        { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; }
+    | expr T_POW expr                                       { $$ = Expr\BinaryOp\Pow       [$1, $3]; }
+    | '+' expr %prec T_INC                                  { $$ = Expr\UnaryPlus [$2]; }
+    | '-' expr %prec T_INC                                  { $$ = Expr\UnaryMinus[$2]; }
+    | '!' expr                                              { $$ = Expr\BooleanNot[$2]; }
+    | '~' expr                                              { $$ = Expr\BitwiseNot[$2]; }
+    | expr T_IS_IDENTICAL expr                              { $$ = Expr\BinaryOp\Identical     [$1, $3]; }
+    | expr T_IS_NOT_IDENTICAL expr                          { $$ = Expr\BinaryOp\NotIdentical  [$1, $3]; }
+    | expr T_IS_EQUAL expr                                  { $$ = Expr\BinaryOp\Equal         [$1, $3]; }
+    | expr T_IS_NOT_EQUAL expr                              { $$ = Expr\BinaryOp\NotEqual      [$1, $3]; }
+    | expr T_SPACESHIP expr                                 { $$ = Expr\BinaryOp\Spaceship     [$1, $3]; }
+    | expr '<' expr                                         { $$ = Expr\BinaryOp\Smaller       [$1, $3]; }
+    | expr T_IS_SMALLER_OR_EQUAL expr                       { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; }
+    | expr '>' expr                                         { $$ = Expr\BinaryOp\Greater       [$1, $3]; }
+    | expr T_IS_GREATER_OR_EQUAL expr                       { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; }
+    | expr T_INSTANCEOF class_name_reference                { $$ = Expr\Instanceof_[$1, $3]; }
+    | parentheses_expr                                      { $$ = $1; }
+    /* we need a separate '(' new_expr ')' rule to avoid problems caused by a s/r conflict */
+    | '(' new_expr ')'                                      { $$ = $2; }
+    | expr '?' expr ':' expr                                { $$ = Expr\Ternary[$1, $3,   $5]; }
+    | expr '?' ':' expr                                     { $$ = Expr\Ternary[$1, null, $4]; }
+    | expr T_COALESCE expr                                  { $$ = Expr\BinaryOp\Coalesce[$1, $3]; }
+    | T_ISSET '(' variables_list ')'                        { $$ = Expr\Isset_[$3]; }
+    | T_EMPTY '(' expr ')'                                  { $$ = Expr\Empty_[$3]; }
+    | T_INCLUDE expr                                        { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; }
+    | T_INCLUDE_ONCE expr                                   { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; }
+    | T_EVAL parentheses_expr                               { $$ = Expr\Eval_[$2]; }
+    | T_REQUIRE expr                                        { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE]; }
+    | T_REQUIRE_ONCE expr                                   { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE_ONCE]; }
+    | T_INT_CAST expr                                       { $$ = Expr\Cast\Int_    [$2]; }
+    | T_DOUBLE_CAST expr                                    { $$ = Expr\Cast\Double  [$2]; }
+    | T_STRING_CAST expr                                    { $$ = Expr\Cast\String_ [$2]; }
+    | T_ARRAY_CAST expr                                     { $$ = Expr\Cast\Array_  [$2]; }
+    | T_OBJECT_CAST expr                                    { $$ = Expr\Cast\Object_ [$2]; }
+    | T_BOOL_CAST expr                                      { $$ = Expr\Cast\Bool_   [$2]; }
+    | T_UNSET_CAST expr                                     { $$ = Expr\Cast\Unset_  [$2]; }
+    | T_EXIT exit_expr                                      { $$ = Expr\Exit_        [$2]; }
+    | '@' expr                                              { $$ = Expr\ErrorSuppress[$2]; }
+    | scalar                                                { $$ = $1; }
+    | array_expr                                            { $$ = $1; }
+    | scalar_dereference                                    { $$ = $1; }
+    | '`' backticks_expr '`'                                { $$ = Expr\ShellExec[$2]; }
+    | T_PRINT expr                                          { $$ = Expr\Print_[$2]; }
+    | T_YIELD                                               { $$ = Expr\Yield_[null, null]; }
+    | T_YIELD_FROM expr                                     { $$ = Expr\YieldFrom[$2]; }
+    | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
+      '{' inner_statement_list '}'
+          { $$ = Expr\Closure[[static: false, byRef: $2, params: $4, uses: $6, returnType: $7, stmts: $9]]; }
+    | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
+      '{' inner_statement_list '}'
+          { $$ = Expr\Closure[[static: true, byRef: $3, params: $5, uses: $7, returnType: $8, stmts: $10]]; }
+;
+
+parentheses_expr:
+      '(' expr ')'                                          { $$ = $2; }
+    | '(' yield_expr ')'                                    { $$ = $2; }
+;
+
+yield_expr:
+      T_YIELD expr                                          { $$ = Expr\Yield_[$2, null]; }
+    | T_YIELD expr T_DOUBLE_ARROW expr                      { $$ = Expr\Yield_[$4, $2]; }
+;
+
+array_expr:
+      T_ARRAY '(' array_pair_list ')'                       { $$ = Expr\Array_[$3]; }
+    | '[' array_pair_list ']'                               { $$ = Expr\Array_[$2]; }
+;
+
+scalar_dereference:
+      array_expr '[' dim_offset ']'                         { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']'
+          { $$ = Expr\ArrayDimFetch[Scalar\String_[Scalar\String_::parse($1)], $3]; }
+    | constant '[' dim_offset ']'                           { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | scalar_dereference '[' dim_offset ']'                 { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    /* alternative array syntax missing intentionally */
+;
+
+anonymous_class:
+      T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}'
+          { $$ = array(Stmt\Class_[null, [type: 0, extends: $3, implements: $4, stmts: $6]], $2); }
+
+new_expr:
+      T_NEW class_name_reference ctor_arguments             { $$ = Expr\New_[$2, $3]; }
+    | T_NEW anonymous_class
+          { list($class, $ctorArgs) = $2; $$ = Expr\New_[$class, $ctorArgs]; }
+;
+
+lexical_vars:
+      /* empty */                                           { $$ = array(); }
+    | T_USE '(' lexical_var_list ')'                        { $$ = $3; }
+;
+
+lexical_var_list:
+      lexical_var                                           { init($1); }
+    | lexical_var_list ',' lexical_var                      { push($1, $3); }
+;
+
+lexical_var:
+      optional_ref T_VARIABLE                               { $$ = Expr\ClosureUse[parseVar($2), $1]; }
+;
+
+function_call:
+      name argument_list                                    { $$ = Expr\FuncCall[$1, $2]; }
+    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM T_STRING argument_list
+          { $$ = Expr\StaticCall[$1, $3, $4]; }
+    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '{' expr '}' argument_list
+          { $$ = Expr\StaticCall[$1, $4, $6]; }
+    | static_property argument_list {
+            if ($1 instanceof Node\Expr\StaticPropertyFetch) {
+                $$ = Expr\StaticCall[$1->class, Expr\Variable[$1->name], $2];
+            } elseif ($1 instanceof Node\Expr\ArrayDimFetch) {
+                $tmp = $1;
+                while ($tmp->var instanceof Node\Expr\ArrayDimFetch) {
+                    $tmp = $tmp->var;
+                }
+
+                $$ = Expr\StaticCall[$tmp->var->class, $1, $2];
+                $tmp->var = Expr\Variable[$tmp->var->name];
+            } else {
+                throw new \Exception;
+            }
+          }
+    | variable_without_objects argument_list
+          { $$ = Expr\FuncCall[$1, $2]; }
+    | function_call '[' dim_offset ']'                      { $$ = Expr\ArrayDimFetch[$1, $3]; }
+      /* alternative array syntax missing intentionally */
+;
+
+class_name:
+      T_STATIC                                              { $$ = Name[$1]; }
+    | name                                                  { $$ = $1; }
+;
+
+name:
+      namespace_name_parts                                  { $$ = Name[$1]; }
+    | T_NS_SEPARATOR namespace_name_parts                   { $$ = Name\FullyQualified[$2]; }
+    | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts       { $$ = Name\Relative[$3]; }
+;
+
+class_name_reference:
+      class_name                                            { $$ = $1; }
+    | dynamic_class_name_reference                          { $$ = $1; }
+;
+
+dynamic_class_name_reference:
+      object_access_for_dcnr                                { $$ = $1; }
+    | base_variable                                         { $$ = $1; }
+;
+
+class_name_or_var:
+      class_name                                            { $$ = $1; }
+    | reference_variable                                    { $$ = $1; }
+;
+
+object_access_for_dcnr:
+      base_variable T_OBJECT_OPERATOR object_property
+          { $$ = Expr\PropertyFetch[$1, $3]; }
+    | object_access_for_dcnr T_OBJECT_OPERATOR object_property
+          { $$ = Expr\PropertyFetch[$1, $3]; }
+    | object_access_for_dcnr '[' dim_offset ']'             { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | object_access_for_dcnr '{' expr '}'                   { $$ = Expr\ArrayDimFetch[$1, $3]; }
+;
+
+exit_expr:
+      /* empty */                                           { $$ = null; }
+    | '(' ')'                                               { $$ = null; }
+    | parentheses_expr                                      { $$ = $1; }
+;
+
+backticks_expr:
+      /* empty */                                           { $$ = array(); }
+    | T_ENCAPSED_AND_WHITESPACE                             { $$ = array(Scalar\String_::parseEscapeSequences($1, '`')); }
+    | encaps_list                                           { parseEncapsed($1, '`'); $$ = $1; }
+;
+
+ctor_arguments:
+      /* empty */                                           { $$ = array(); }
+    | argument_list                                         { $$ = $1; }
+;
+
+common_scalar:
+      T_LNUMBER                                             { $$ = Scalar\LNumber[Scalar\LNumber::parse($1)]; }
+    | T_DNUMBER                                             { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; }
+    | T_CONSTANT_ENCAPSED_STRING                            { $$ = Scalar\String_[Scalar\String_::parse($1)]; }
+    | T_LINE                                                { $$ = Scalar\MagicConst\Line[]; }
+    | T_FILE                                                { $$ = Scalar\MagicConst\File[]; }
+    | T_DIR                                                 { $$ = Scalar\MagicConst\Dir[]; }
+    | T_CLASS_C                                             { $$ = Scalar\MagicConst\Class_[]; }
+    | T_TRAIT_C                                             { $$ = Scalar\MagicConst\Trait_[]; }
+    | T_METHOD_C                                            { $$ = Scalar\MagicConst\Method[]; }
+    | T_FUNC_C                                              { $$ = Scalar\MagicConst\Function_[]; }
+    | T_NS_C                                                { $$ = Scalar\MagicConst\Namespace_[]; }
+    | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
+          { $$ = Scalar\String_[Scalar\String_::parseDocString($1, $2)]; }
+    | T_START_HEREDOC T_END_HEREDOC
+          { $$ = Scalar\String_['']; }
+;
+
+static_scalar:
+      common_scalar                                         { $$ = $1; }
+    | class_name T_PAAMAYIM_NEKUDOTAYIM class_const_name    { $$ = Expr\ClassConstFetch[$1, $3]; }
+    | name                                                  { $$ = Expr\ConstFetch[$1]; }
+    | T_ARRAY '(' static_array_pair_list ')'                { $$ = Expr\Array_[$3]; }
+    | '[' static_array_pair_list ']'                        { $$ = Expr\Array_[$2]; }
+    | static_operation                                      { $$ = $1; }
+;
+
+static_operation:
+      static_scalar T_BOOLEAN_OR static_scalar              { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; }
+    | static_scalar T_BOOLEAN_AND static_scalar             { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; }
+    | static_scalar T_LOGICAL_OR static_scalar              { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; }
+    | static_scalar T_LOGICAL_AND static_scalar             { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; }
+    | static_scalar T_LOGICAL_XOR static_scalar             { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; }
+    | static_scalar '|' static_scalar                       { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; }
+    | static_scalar '&' static_scalar                       { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
+    | static_scalar '^' static_scalar                       { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; }
+    | static_scalar '.' static_scalar                       { $$ = Expr\BinaryOp\Concat    [$1, $3]; }
+    | static_scalar '+' static_scalar                       { $$ = Expr\BinaryOp\Plus      [$1, $3]; }
+    | static_scalar '-' static_scalar                       { $$ = Expr\BinaryOp\Minus     [$1, $3]; }
+    | static_scalar '*' static_scalar                       { $$ = Expr\BinaryOp\Mul       [$1, $3]; }
+    | static_scalar '/' static_scalar                       { $$ = Expr\BinaryOp\Div       [$1, $3]; }
+    | static_scalar '%' static_scalar                       { $$ = Expr\BinaryOp\Mod       [$1, $3]; }
+    | static_scalar T_SL static_scalar                      { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; }
+    | static_scalar T_SR static_scalar                      { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; }
+    | static_scalar T_POW static_scalar                     { $$ = Expr\BinaryOp\Pow       [$1, $3]; }
+    | '+' static_scalar %prec T_INC                         { $$ = Expr\UnaryPlus [$2]; }
+    | '-' static_scalar %prec T_INC                         { $$ = Expr\UnaryMinus[$2]; }
+    | '!' static_scalar                                     { $$ = Expr\BooleanNot[$2]; }
+    | '~' static_scalar                                     { $$ = Expr\BitwiseNot[$2]; }
+    | static_scalar T_IS_IDENTICAL static_scalar            { $$ = Expr\BinaryOp\Identical     [$1, $3]; }
+    | static_scalar T_IS_NOT_IDENTICAL static_scalar        { $$ = Expr\BinaryOp\NotIdentical  [$1, $3]; }
+    | static_scalar T_IS_EQUAL static_scalar                { $$ = Expr\BinaryOp\Equal         [$1, $3]; }
+    | static_scalar T_IS_NOT_EQUAL static_scalar            { $$ = Expr\BinaryOp\NotEqual      [$1, $3]; }
+    | static_scalar '<' static_scalar                       { $$ = Expr\BinaryOp\Smaller       [$1, $3]; }
+    | static_scalar T_IS_SMALLER_OR_EQUAL static_scalar     { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; }
+    | static_scalar '>' static_scalar                       { $$ = Expr\BinaryOp\Greater       [$1, $3]; }
+    | static_scalar T_IS_GREATER_OR_EQUAL static_scalar     { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; }
+    | static_scalar '?' static_scalar ':' static_scalar     { $$ = Expr\Ternary[$1, $3,   $5]; }
+    | static_scalar '?' ':' static_scalar                   { $$ = Expr\Ternary[$1, null, $4]; }
+    | static_scalar '[' static_scalar ']'                   { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | '(' static_scalar ')'                                 { $$ = $2; }
+;
+
+constant:
+      name                                                  { $$ = Expr\ConstFetch[$1]; }
+    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM class_const_name
+          { $$ = Expr\ClassConstFetch[$1, $3]; }
+;
+
+scalar:
+      common_scalar                                         { $$ = $1; }
+    | constant                                              { $$ = $1; }
+    | '"' encaps_list '"'
+          { parseEncapsed($2, '"'); $$ = Scalar\Encapsed[$2]; }
+    | T_START_HEREDOC encaps_list T_END_HEREDOC
+          { parseEncapsedDoc($2); $$ = Scalar\Encapsed[$2]; }
+;
+
+class_const_name:
+      T_STRING                                              { $$ = $1; }
+    | T_CLASS                                               { $$ = 'class'; }
+;
+
+static_array_pair_list:
+      /* empty */                                           { $$ = array(); }
+    | non_empty_static_array_pair_list optional_comma       { $$ = $1; }
+;
+
+optional_comma:
+      /* empty */
+    | ','
+;
+
+non_empty_static_array_pair_list:
+      non_empty_static_array_pair_list ',' static_array_pair { push($1, $3); }
+    | static_array_pair                                      { init($1); }
+;
+
+static_array_pair:
+      static_scalar T_DOUBLE_ARROW static_scalar            { $$ = Expr\ArrayItem[$3, $1,   false]; }
+    | static_scalar                                         { $$ = Expr\ArrayItem[$1, null, false]; }
+;
+
+variable:
+      object_access                                         { $$ = $1; }
+    | base_variable                                         { $$ = $1; }
+    | function_call                                         { $$ = $1; }
+    | new_expr_array_deref                                  { $$ = $1; }
+;
+
+new_expr_array_deref:
+      '(' new_expr ')' '[' dim_offset ']'                   { $$ = Expr\ArrayDimFetch[$2, $5]; }
+    | new_expr_array_deref '[' dim_offset ']'               { $$ = Expr\ArrayDimFetch[$1, $3]; }
+      /* alternative array syntax missing intentionally */
+;
+
+object_access:
+      variable_or_new_expr T_OBJECT_OPERATOR object_property
+          { $$ = Expr\PropertyFetch[$1, $3]; }
+    | variable_or_new_expr T_OBJECT_OPERATOR object_property argument_list
+          { $$ = Expr\MethodCall[$1, $3, $4]; }
+    | object_access argument_list                           { $$ = Expr\FuncCall[$1, $2]; }
+    | object_access '[' dim_offset ']'                      { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | object_access '{' expr '}'                            { $$ = Expr\ArrayDimFetch[$1, $3]; }
+;
+
+variable_or_new_expr:
+      variable                                              { $$ = $1; }
+    | '(' new_expr ')'                                      { $$ = $2; }
+;
+
+variable_without_objects:
+      reference_variable                                    { $$ = $1; }
+    | '$' variable_without_objects                          { $$ = Expr\Variable[$2]; }
+;
+
+base_variable:
+      variable_without_objects                              { $$ = $1; }
+    | static_property                                       { $$ = $1; }
+;
+
+static_property:
+      class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' reference_variable
+          { $$ = Expr\StaticPropertyFetch[$1, $4]; }
+    | static_property_with_arrays                           { $$ = $1; }
+;
+
+static_property_with_arrays:
+      class_name_or_var T_PAAMAYIM_NEKUDOTAYIM T_VARIABLE
+          { $$ = Expr\StaticPropertyFetch[$1, parseVar($3)]; }
+    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' '{' expr '}'
+          { $$ = Expr\StaticPropertyFetch[$1, $5]; }
+    | static_property_with_arrays '[' dim_offset ']'        { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | static_property_with_arrays '{' expr '}'              { $$ = Expr\ArrayDimFetch[$1, $3]; }
+;
+
+reference_variable:
+      reference_variable '[' dim_offset ']'                 { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | reference_variable '{' expr '}'                       { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | T_VARIABLE                                            { $$ = Expr\Variable[parseVar($1)]; }
+    | '$' '{' expr '}'                                      { $$ = Expr\Variable[$3]; }
+;
+
+dim_offset:
+      /* empty */                                           { $$ = null; }
+    | expr                                                  { $$ = $1; }
+;
+
+object_property:
+      T_STRING                                              { $$ = $1; }
+    | '{' expr '}'                                          { $$ = $2; }
+    | variable_without_objects                              { $$ = $1; }
+;
+
+list_expr:
+      T_LIST '(' list_expr_elements ')'                     { $$ = Expr\List_[$3]; }
+;
+
+list_expr_elements:
+      list_expr_elements ',' list_expr_element              { push($1, $3); }
+    | list_expr_element                                     { init($1); }
+;
+
+list_expr_element:
+      variable                                              { $$ = $1; }
+    | list_expr                                             { $$ = $1; }
+    | /* empty */                                           { $$ = null; }
+;
+
+array_pair_list:
+      /* empty */                                           { $$ = array(); }
+    | non_empty_array_pair_list optional_comma              { $$ = $1; }
+;
+
+non_empty_array_pair_list:
+      non_empty_array_pair_list ',' array_pair              { push($1, $3); }
+    | array_pair                                            { init($1); }
+;
+
+array_pair:
+      expr T_DOUBLE_ARROW expr                              { $$ = Expr\ArrayItem[$3, $1,   false]; }
+    | expr                                                  { $$ = Expr\ArrayItem[$1, null, false]; }
+    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr\ArrayItem[$4, $1,   true]; }
+    | '&' variable                                          { $$ = Expr\ArrayItem[$2, null, true]; }
+;
+
+encaps_list:
+      encaps_list encaps_var                                { push($1, $2); }
+    | encaps_list T_ENCAPSED_AND_WHITESPACE                 { push($1, $2); }
+    | encaps_var                                            { init($1); }
+    | T_ENCAPSED_AND_WHITESPACE encaps_var                  { init($1, $2); }
+;
+
+encaps_var:
+      T_VARIABLE                                            { $$ = Expr\Variable[parseVar($1)]; }
+    | T_VARIABLE '[' encaps_var_offset ']'                  { $$ = Expr\ArrayDimFetch[Expr\Variable[parseVar($1)], $3]; }
+    | T_VARIABLE T_OBJECT_OPERATOR T_STRING                 { $$ = Expr\PropertyFetch[Expr\Variable[parseVar($1)], $3]; }
+    | T_DOLLAR_OPEN_CURLY_BRACES expr '}'                   { $$ = Expr\Variable[$2]; }
+    | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}'       { $$ = Expr\Variable[$2]; }
+    | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}'
+          { $$ = Expr\ArrayDimFetch[Expr\Variable[$2], $4]; }
+    | T_CURLY_OPEN variable '}'                             { $$ = $2; }
+;
+
+encaps_var_offset:
+      T_STRING                                              { $$ = Scalar\String_[$1]; }
+    | T_NUM_STRING                                          { $$ = Scalar\String_[$1]; }
+    | T_VARIABLE                                            { $$ = Expr\Variable[parseVar($1)]; }
+;
+
+%%
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Autoloader.php b/vendor/nikic/php-parser/lib/PhpParser/Autoloader.php
new file mode 100644
index 0000000..7cf6417
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Autoloader.php
@@ -0,0 +1,275 @@
+=');
+    }
+
+    /**
+     * Handles autoloading of classes.
+     *
+     * @param string $class A class name.
+     */
+    static public function autoload($class) {
+        if (0 === strpos($class, 'PhpParser\\')) {
+            if (isset(self::$php7AliasesOldToNew[$class])) {
+                if (self::$runningOnPhp7) {
+                    return;
+                }
+
+                // Load the new class, alias will be registered afterwards
+                $class = self::$php7AliasesOldToNew[$class];
+            }
+
+            $fileName = dirname(__DIR__) . '/' . strtr($class, '\\', '/') . '.php';
+            if (file_exists($fileName)) {
+                require $fileName;
+            }
+
+            if (isset(self::$php7AliasesNewToOld[$class])) {
+                // New class name was used, register alias for old one, otherwise
+                // it won't be usable in "instanceof" and other non-autoloading places.
+                if (!self::$runningOnPhp7) {
+                    class_alias($class, self::$php7AliasesNewToOld[$class]);
+                }
+            }
+        } else if (0 === strpos($class, 'PHPParser_')) {
+            if (isset(self::$nonNamespacedAliases[$class])) {
+                // Register all aliases at once to avoid dependency issues
+                self::registerNonNamespacedAliases();
+            }
+        }
+    }
+
+    private static function registerNonNamespacedAliases() {
+        foreach (self::$nonNamespacedAliases as $old => $new) {
+            class_alias($new, $old);
+        }
+    }
+
+    private static $php7AliasesOldToNew = array(
+        'PhpParser\Node\Expr\Cast\Bool' => 'PhpParser\Node\Expr\Cast\Bool_',
+        'PhpParser\Node\Expr\Cast\Int' => 'PhpParser\Node\Expr\Cast\Int_',
+        'PhpParser\Node\Expr\Cast\Object' => 'PhpParser\Node\Expr\Cast\Object_',
+        'PhpParser\Node\Expr\Cast\String' => 'PhpParser\Node\Expr\Cast\String_',
+        'PhpParser\Node\Scalar\String' => 'PhpParser\Node\Scalar\String_',
+    );
+
+    private static $php7AliasesNewToOld = array(
+        'PhpParser\Node\Expr\Cast\Bool_' => 'PhpParser\Node\Expr\Cast\Bool',
+        'PhpParser\Node\Expr\Cast\Int_' => 'PhpParser\Node\Expr\Cast\Int',
+        'PhpParser\Node\Expr\Cast\Object_' => 'PhpParser\Node\Expr\Cast\Object',
+        'PhpParser\Node\Expr\Cast\String_' => 'PhpParser\Node\Expr\Cast\String',
+        'PhpParser\Node\Scalar\String_' => 'PhpParser\Node\Scalar\String',
+    );
+
+    private static $nonNamespacedAliases = array(
+        'PHPParser_Builder' => 'PhpParser\Builder',
+        'PHPParser_BuilderAbstract' => 'PhpParser\BuilderAbstract',
+        'PHPParser_BuilderFactory' => 'PhpParser\BuilderFactory',
+        'PHPParser_Comment' => 'PhpParser\Comment',
+        'PHPParser_Comment_Doc' => 'PhpParser\Comment\Doc',
+        'PHPParser_Error' => 'PhpParser\Error',
+        'PHPParser_Lexer' => 'PhpParser\Lexer',
+        'PHPParser_Lexer_Emulative' => 'PhpParser\Lexer\Emulative',
+        'PHPParser_Node' => 'PhpParser\Node',
+        'PHPParser_NodeAbstract' => 'PhpParser\NodeAbstract',
+        'PHPParser_NodeDumper' => 'PhpParser\NodeDumper',
+        'PHPParser_NodeTraverser' => 'PhpParser\NodeTraverser',
+        'PHPParser_NodeTraverserInterface' => 'PhpParser\NodeTraverserInterface',
+        'PHPParser_NodeVisitor' => 'PhpParser\NodeVisitor',
+        'PHPParser_NodeVisitor_NameResolver' => 'PhpParser\NodeVisitor\NameResolver',
+        'PHPParser_NodeVisitorAbstract' => 'PhpParser\NodeVisitorAbstract',
+        'PHPParser_Parser' => 'PhpParser\Parser',
+        'PHPParser_PrettyPrinterAbstract' => 'PhpParser\PrettyPrinterAbstract',
+        'PHPParser_PrettyPrinter_Default' => 'PhpParser\PrettyPrinter\Standard',
+        'PHPParser_PrettyPrinter_Zend' => 'PhpParser\PrettyPrinter\Standard',
+        'PHPParser_Serializer' => 'PhpParser\Serializer',
+        'PHPParser_Serializer_XML' => 'PhpParser\Serializer\XML',
+        'PHPParser_Unserializer' => 'PhpParser\Unserializer',
+        'PHPParser_Unserializer_XML' => 'PhpParser\Unserializer\XML',
+
+        'PHPParser_Builder_Class' => 'PhpParser\Builder\Class_',
+        'PHPParser_Builder_Function' => 'PhpParser\Builder\Function_',
+        'PHPParser_Builder_Interface' => 'PhpParser\Builder\Interface_',
+        'PHPParser_Builder_Method' => 'PhpParser\Builder\Method',
+        'PHPParser_Builder_Param' => 'PhpParser\Builder\Param',
+        'PHPParser_Builder_Property' => 'PhpParser\Builder\Property',
+
+        'PHPParser_Node_Arg' => 'PhpParser\Node\Arg',
+        'PHPParser_Node_Const' => 'PhpParser\Node\Const_',
+        'PHPParser_Node_Expr' => 'PhpParser\Node\Expr',
+        'PHPParser_Node_Name' => 'PhpParser\Node\Name',
+        'PHPParser_Node_Name_FullyQualified' => 'PhpParser\Node\Name\FullyQualified',
+        'PHPParser_Node_Name_Relative' => 'PhpParser\Node\Name\Relative',
+        'PHPParser_Node_Param' => 'PhpParser\Node\Param',
+        'PHPParser_Node_Scalar' => 'PhpParser\Node\Scalar',
+        'PHPParser_Node_Stmt' => 'PhpParser\Node\Stmt',
+
+        'PHPParser_Node_Stmt_Break' => 'PhpParser\Node\Stmt\Break_',
+        'PHPParser_Node_Stmt_Case' => 'PhpParser\Node\Stmt\Case_',
+        'PHPParser_Node_Stmt_Catch' => 'PhpParser\Node\Stmt\Catch_',
+        'PHPParser_Node_Stmt_Class' => 'PhpParser\Node\Stmt\Class_',
+        'PHPParser_Node_Stmt_ClassConst' => 'PhpParser\Node\Stmt\ClassConst',
+        'PHPParser_Node_Stmt_ClassMethod' => 'PhpParser\Node\Stmt\ClassMethod',
+        'PHPParser_Node_Stmt_Const' => 'PhpParser\Node\Stmt\Const_',
+        'PHPParser_Node_Stmt_Continue' => 'PhpParser\Node\Stmt\Continue_',
+        'PHPParser_Node_Stmt_Declare' => 'PhpParser\Node\Stmt\Declare_',
+        'PHPParser_Node_Stmt_DeclareDeclare' => 'PhpParser\Node\Stmt\DeclareDeclare',
+        'PHPParser_Node_Stmt_Do' => 'PhpParser\Node\Stmt\Do_',
+        'PHPParser_Node_Stmt_Echo' => 'PhpParser\Node\Stmt\Echo_',
+        'PHPParser_Node_Stmt_Else' => 'PhpParser\Node\Stmt\Else_',
+        'PHPParser_Node_Stmt_ElseIf' => 'PhpParser\Node\Stmt\ElseIf_',
+        'PHPParser_Node_Stmt_For' => 'PhpParser\Node\Stmt\For_',
+        'PHPParser_Node_Stmt_Foreach' => 'PhpParser\Node\Stmt\Foreach_',
+        'PHPParser_Node_Stmt_Function' => 'PhpParser\Node\Stmt\Function_',
+        'PHPParser_Node_Stmt_Global' => 'PhpParser\Node\Stmt\Global_',
+        'PHPParser_Node_Stmt_Goto' => 'PhpParser\Node\Stmt\Goto_',
+        'PHPParser_Node_Stmt_HaltCompiler' => 'PhpParser\Node\Stmt\HaltCompiler',
+        'PHPParser_Node_Stmt_If' => 'PhpParser\Node\Stmt\If_',
+        'PHPParser_Node_Stmt_InlineHTML' => 'PhpParser\Node\Stmt\InlineHTML',
+        'PHPParser_Node_Stmt_Interface' => 'PhpParser\Node\Stmt\Interface_',
+        'PHPParser_Node_Stmt_Label' => 'PhpParser\Node\Stmt\Label',
+        'PHPParser_Node_Stmt_Namespace' => 'PhpParser\Node\Stmt\Namespace_',
+        'PHPParser_Node_Stmt_Property' => 'PhpParser\Node\Stmt\Property',
+        'PHPParser_Node_Stmt_PropertyProperty' => 'PhpParser\Node\Stmt\PropertyProperty',
+        'PHPParser_Node_Stmt_Return' => 'PhpParser\Node\Stmt\Return_',
+        'PHPParser_Node_Stmt_Static' => 'PhpParser\Node\Stmt\Static_',
+        'PHPParser_Node_Stmt_StaticVar' => 'PhpParser\Node\Stmt\StaticVar',
+        'PHPParser_Node_Stmt_Switch' => 'PhpParser\Node\Stmt\Switch_',
+        'PHPParser_Node_Stmt_Throw' => 'PhpParser\Node\Stmt\Throw_',
+        'PHPParser_Node_Stmt_Trait' => 'PhpParser\Node\Stmt\Trait_',
+        'PHPParser_Node_Stmt_TraitUse' => 'PhpParser\Node\Stmt\TraitUse',
+        'PHPParser_Node_Stmt_TraitUseAdaptation' => 'PhpParser\Node\Stmt\TraitUseAdaptation',
+        'PHPParser_Node_Stmt_TraitUseAdaptation_Alias' => 'PhpParser\Node\Stmt\TraitUseAdaptation\Alias',
+        'PHPParser_Node_Stmt_TraitUseAdaptation_Precedence' => 'PhpParser\Node\Stmt\TraitUseAdaptation\Precedence',
+        'PHPParser_Node_Stmt_TryCatch' => 'PhpParser\Node\Stmt\TryCatch',
+        'PHPParser_Node_Stmt_Unset' => 'PhpParser\Node\Stmt\Unset_',
+        'PHPParser_Node_Stmt_UseUse' => 'PhpParser\Node\Stmt\UseUse',
+        'PHPParser_Node_Stmt_Use' => 'PhpParser\Node\Stmt\Use_',
+        'PHPParser_Node_Stmt_While' => 'PhpParser\Node\Stmt\While_',
+
+        'PHPParser_Node_Expr_AssignBitwiseAnd' => 'PhpParser\Node\Expr\AssignOp\BitwiseAnd',
+        'PHPParser_Node_Expr_AssignBitwiseOr' => 'PhpParser\Node\Expr\AssignOp\BitwiseOr',
+        'PHPParser_Node_Expr_AssignBitwiseXor' => 'PhpParser\Node\Expr\AssignOp\BitwiseXor',
+        'PHPParser_Node_Expr_AssignConcat' => 'PhpParser\Node\Expr\AssignOp\Concat',
+        'PHPParser_Node_Expr_AssignDiv' => 'PhpParser\Node\Expr\AssignOp\Div',
+        'PHPParser_Node_Expr_AssignMinus' => 'PhpParser\Node\Expr\AssignOp\Minus',
+        'PHPParser_Node_Expr_AssignMod' => 'PhpParser\Node\Expr\AssignOp\Mod',
+        'PHPParser_Node_Expr_AssignMul' => 'PhpParser\Node\Expr\AssignOp\Mul',
+        'PHPParser_Node_Expr_AssignPlus' => 'PhpParser\Node\Expr\AssignOp\Plus',
+        'PHPParser_Node_Expr_AssignShiftLeft' => 'PhpParser\Node\Expr\AssignOp\ShiftLeft',
+        'PHPParser_Node_Expr_AssignShiftRight' => 'PhpParser\Node\Expr\AssignOp\ShiftRight',
+
+        'PHPParser_Node_Expr_Cast' => 'PhpParser\Node\Expr\Cast',
+        'PHPParser_Node_Expr_Cast_Array' => 'PhpParser\Node\Expr\Cast\Array_',
+        'PHPParser_Node_Expr_Cast_Bool' => 'PhpParser\Node\Expr\Cast\Bool_',
+        'PHPParser_Node_Expr_Cast_Double' => 'PhpParser\Node\Expr\Cast\Double',
+        'PHPParser_Node_Expr_Cast_Int' => 'PhpParser\Node\Expr\Cast\Int_',
+        'PHPParser_Node_Expr_Cast_Object' => 'PhpParser\Node\Expr\Cast\Object_',
+        'PHPParser_Node_Expr_Cast_String' => 'PhpParser\Node\Expr\Cast\String_',
+        'PHPParser_Node_Expr_Cast_Unset' => 'PhpParser\Node\Expr\Cast\Unset_',
+
+        'PHPParser_Node_Expr_BitwiseAnd' => 'PhpParser\Node\Expr\BinaryOp\BitwiseAnd',
+        'PHPParser_Node_Expr_BitwiseOr' => 'PhpParser\Node\Expr\BinaryOp\BitwiseOr',
+        'PHPParser_Node_Expr_BitwiseXor' => 'PhpParser\Node\Expr\BinaryOp\BitwiseXor',
+        'PHPParser_Node_Expr_BooleanAnd' => 'PhpParser\Node\Expr\BinaryOp\BooleanAnd',
+        'PHPParser_Node_Expr_BooleanOr' => 'PhpParser\Node\Expr\BinaryOp\BooleanOr',
+        'PHPParser_Node_Expr_Concat' => 'PhpParser\Node\Expr\BinaryOp\Concat',
+        'PHPParser_Node_Expr_Div' => 'PhpParser\Node\Expr\BinaryOp\Div',
+        'PHPParser_Node_Expr_Equal' => 'PhpParser\Node\Expr\BinaryOp\Equal',
+        'PHPParser_Node_Expr_Greater' => 'PhpParser\Node\Expr\BinaryOp\Greater',
+        'PHPParser_Node_Expr_GreaterOrEqual' => 'PhpParser\Node\Expr\BinaryOp\GreaterOrEqual',
+        'PHPParser_Node_Expr_Identical' => 'PhpParser\Node\Expr\BinaryOp\Identical',
+        'PHPParser_Node_Expr_LogicalAnd' => 'PhpParser\Node\Expr\BinaryOp\LogicalAnd',
+        'PHPParser_Node_Expr_LogicalOr' => 'PhpParser\Node\Expr\BinaryOp\LogicalOr',
+        'PHPParser_Node_Expr_LogicalXor' => 'PhpParser\Node\Expr\BinaryOp\LogicalXor',
+        'PHPParser_Node_Expr_Minus' => 'PhpParser\Node\Expr\BinaryOp\Minus',
+        'PHPParser_Node_Expr_Mod' => 'PhpParser\Node\Expr\BinaryOp\Mod',
+        'PHPParser_Node_Expr_Mul' => 'PhpParser\Node\Expr\BinaryOp\Mul',
+        'PHPParser_Node_Expr_NotEqual' => 'PhpParser\Node\Expr\BinaryOp\NotEqual',
+        'PHPParser_Node_Expr_NotIdentical' => 'PhpParser\Node\Expr\BinaryOp\NotIdentical',
+        'PHPParser_Node_Expr_Plus' => 'PhpParser\Node\Expr\BinaryOp\Plus',
+        'PHPParser_Node_Expr_ShiftLeft' => 'PhpParser\Node\Expr\BinaryOp\ShiftLeft',
+        'PHPParser_Node_Expr_ShiftRight' => 'PhpParser\Node\Expr\BinaryOp\ShiftRight',
+        'PHPParser_Node_Expr_Smaller' => 'PhpParser\Node\Expr\BinaryOp\Smaller',
+        'PHPParser_Node_Expr_SmallerOrEqual' => 'PhpParser\Node\Expr\BinaryOp\SmallerOrEqual',
+
+        'PHPParser_Node_Expr_Array' => 'PhpParser\Node\Expr\Array_',
+        'PHPParser_Node_Expr_ArrayDimFetch' => 'PhpParser\Node\Expr\ArrayDimFetch',
+        'PHPParser_Node_Expr_ArrayItem' => 'PhpParser\Node\Expr\ArrayItem',
+        'PHPParser_Node_Expr_Assign' => 'PhpParser\Node\Expr\Assign',
+        'PHPParser_Node_Expr_AssignRef' => 'PhpParser\Node\Expr\AssignRef',
+        'PHPParser_Node_Expr_BitwiseNot' => 'PhpParser\Node\Expr\BitwiseNot',
+        'PHPParser_Node_Expr_BooleanNot' => 'PhpParser\Node\Expr\BooleanNot',
+        'PHPParser_Node_Expr_ClassConstFetch' => 'PhpParser\Node\Expr\ClassConstFetch',
+        'PHPParser_Node_Expr_Clone' => 'PhpParser\Node\Expr\Clone_',
+        'PHPParser_Node_Expr_Closure' => 'PhpParser\Node\Expr\Closure',
+        'PHPParser_Node_Expr_ClosureUse' => 'PhpParser\Node\Expr\ClosureUse',
+        'PHPParser_Node_Expr_ConstFetch' => 'PhpParser\Node\Expr\ConstFetch',
+        'PHPParser_Node_Expr_Empty' => 'PhpParser\Node\Expr\Empty_',
+        'PHPParser_Node_Expr_ErrorSuppress' => 'PhpParser\Node\Expr\ErrorSuppress',
+        'PHPParser_Node_Expr_Eval' => 'PhpParser\Node\Expr\Eval_',
+        'PHPParser_Node_Expr_Exit' => 'PhpParser\Node\Expr\Exit_',
+        'PHPParser_Node_Expr_FuncCall' => 'PhpParser\Node\Expr\FuncCall',
+        'PHPParser_Node_Expr_Include' => 'PhpParser\Node\Expr\Include_',
+        'PHPParser_Node_Expr_Instanceof' => 'PhpParser\Node\Expr\Instanceof_',
+        'PHPParser_Node_Expr_Isset' => 'PhpParser\Node\Expr\Isset_',
+        'PHPParser_Node_Expr_List' => 'PhpParser\Node\Expr\List_',
+        'PHPParser_Node_Expr_MethodCall' => 'PhpParser\Node\Expr\MethodCall',
+        'PHPParser_Node_Expr_New' => 'PhpParser\Node\Expr\New_',
+        'PHPParser_Node_Expr_PostDec' => 'PhpParser\Node\Expr\PostDec',
+        'PHPParser_Node_Expr_PostInc' => 'PhpParser\Node\Expr\PostInc',
+        'PHPParser_Node_Expr_PreDec' => 'PhpParser\Node\Expr\PreDec',
+        'PHPParser_Node_Expr_PreInc' => 'PhpParser\Node\Expr\PreInc',
+        'PHPParser_Node_Expr_Print' => 'PhpParser\Node\Expr\Print_',
+        'PHPParser_Node_Expr_PropertyFetch' => 'PhpParser\Node\Expr\PropertyFetch',
+        'PHPParser_Node_Expr_ShellExec' => 'PhpParser\Node\Expr\ShellExec',
+        'PHPParser_Node_Expr_StaticCall' => 'PhpParser\Node\Expr\StaticCall',
+        'PHPParser_Node_Expr_StaticPropertyFetch' => 'PhpParser\Node\Expr\StaticPropertyFetch',
+        'PHPParser_Node_Expr_Ternary' => 'PhpParser\Node\Expr\Ternary',
+        'PHPParser_Node_Expr_UnaryMinus' => 'PhpParser\Node\Expr\UnaryMinus',
+        'PHPParser_Node_Expr_UnaryPlus' => 'PhpParser\Node\Expr\UnaryPlus',
+        'PHPParser_Node_Expr_Variable' => 'PhpParser\Node\Expr\Variable',
+        'PHPParser_Node_Expr_Yield' => 'PhpParser\Node\Expr\Yield_',
+
+        'PHPParser_Node_Scalar_ClassConst' => 'PhpParser\Node\Scalar\MagicConst\Class_',
+        'PHPParser_Node_Scalar_DirConst' => 'PhpParser\Node\Scalar\MagicConst\Dir',
+        'PHPParser_Node_Scalar_FileConst' => 'PhpParser\Node\Scalar\MagicConst\File',
+        'PHPParser_Node_Scalar_FuncConst' => 'PhpParser\Node\Scalar\MagicConst\Function_',
+        'PHPParser_Node_Scalar_LineConst' => 'PhpParser\Node\Scalar\MagicConst\Line',
+        'PHPParser_Node_Scalar_MethodConst' => 'PhpParser\Node\Scalar\MagicConst\Method',
+        'PHPParser_Node_Scalar_NSConst' => 'PhpParser\Node\Scalar\MagicConst\Namespace_',
+        'PHPParser_Node_Scalar_TraitConst' => 'PhpParser\Node\Scalar\MagicConst\Trait_',
+
+        'PHPParser_Node_Scalar_DNumber' => 'PhpParser\Node\Scalar\DNumber',
+        'PHPParser_Node_Scalar_Encapsed' => 'PhpParser\Node\Scalar\Encapsed',
+        'PHPParser_Node_Scalar_LNumber' => 'PhpParser\Node\Scalar\LNumber',
+        'PHPParser_Node_Scalar_String' => 'PhpParser\Node\Scalar\String_',
+    );
+}
+
+class_alias('PhpParser\Autoloader', 'PHPParser_Autoloader');
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder.php b/vendor/nikic/php-parser/lib/PhpParser/Builder.php
new file mode 100644
index 0000000..95655e8
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder.php
@@ -0,0 +1,13 @@
+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 = $this->normalizeName($class);
+
+        return $this;
+    }
+
+    /**
+     * Implements one or more interfaces.
+     *
+     * @param Name|string $interface Name of interface to implement
+     * @param Name|string $...       More interfaces to implement
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function implement() {
+        foreach (func_get_args() as $interface) {
+            $this->implements[] = $this->normalizeName($interface);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Makes the class abstract.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makeAbstract() {
+        $this->setModifier(Stmt\Class_::MODIFIER_ABSTRACT);
+
+        return $this;
+    }
+
+    /**
+     * Makes the class final.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makeFinal() {
+        $this->setModifier(Stmt\Class_::MODIFIER_FINAL);
+
+        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 = $this->normalizeNode($stmt);
+
+        $targets = array(
+            'Stmt_TraitUse'    => &$this->uses,
+            'Stmt_ClassConst'  => &$this->constants,
+            'Stmt_Property'    => &$this->properties,
+            'Stmt_ClassMethod' => &$this->methods,
+        );
+
+        $type = $stmt->getType();
+        if (!isset($targets[$type])) {
+            throw new \LogicException(sprintf('Unexpected node of type "%s"', $type));
+        }
+
+        $targets[$type][] = $stmt;
+
+        return $this;
+    }
+
+    /**
+     * Returns the built class node.
+     *
+     * @return Stmt\Class_ The built class node
+     */
+    public function getNode() {
+        return new Stmt\Class_($this->name, array(
+            'type' => $this->type,
+            'extends' => $this->extends,
+            'implements' => $this->implements,
+            'stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods),
+        ), $this->attributes);
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php
new file mode 100644
index 0000000..f6a322c
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php
@@ -0,0 +1,44 @@
+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'] = array(
+            $this->normalizeDocComment($docComment)
+        );
+
+        return $this;
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php
new file mode 100644
index 0000000..35646a3
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php
@@ -0,0 +1,58 @@
+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 = $this->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 array $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;
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php
new file mode 100644
index 0000000..374f315
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php
@@ -0,0 +1,48 @@
+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[] = $this->normalizeNode($stmt);
+
+        return $this;
+    }
+
+    /**
+     * Returns the built function node.
+     *
+     * @return Stmt\Function_ The built function node
+     */
+    public function getNode() {
+        return new Stmt\Function_($this->name, array(
+            'byRef'  => $this->returnByRef,
+            'params' => $this->params,
+            'stmts'  => $this->stmts,
+        ), $this->attributes);
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php
new file mode 100644
index 0000000..18afaaa
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php
@@ -0,0 +1,81 @@
+name = $name;
+    }
+
+    /**
+     * Extends one or more interfaces.
+     *
+     * @param Name|string $interface Name of interface to extend
+     * @param Name|string $...       More interfaces to extend
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function extend() {
+        foreach (func_get_args() as $interface) {
+            $this->extends[] = $this->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 = $this->normalizeNode($stmt);
+
+        $type = $stmt->getType();
+        switch ($type) {
+            case 'Stmt_ClassConst':
+                $this->constants[] = $stmt;
+                break;
+
+            case 'Stmt_ClassMethod':
+                // we erase all statements in the body of an interface method
+                $stmt->stmts = null;
+                $this->methods[] = $stmt;
+                break;
+
+            default:
+                throw new \LogicException(sprintf('Unexpected node of type "%s"', $type));
+        }
+
+        return $this;
+    }
+
+    /**
+     * Returns the built interface node.
+     *
+     * @return Stmt\Interface_ The built interface node
+     */
+    public function getNode() {
+        return new Stmt\Interface_($this->name, array(
+            'extends' => $this->extends,
+            'stmts' => array_merge($this->constants, $this->methods),
+        ), $this->attributes);
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php
new file mode 100644
index 0000000..60dd4b9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php
@@ -0,0 +1,125 @@
+name = $name;
+    }
+
+    /**
+     * Makes the method public.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makePublic() {
+        $this->setModifier(Stmt\Class_::MODIFIER_PUBLIC);
+
+        return $this;
+    }
+
+    /**
+     * Makes the method protected.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makeProtected() {
+        $this->setModifier(Stmt\Class_::MODIFIER_PROTECTED);
+
+        return $this;
+    }
+
+    /**
+     * Makes the method private.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makePrivate() {
+        $this->setModifier(Stmt\Class_::MODIFIER_PRIVATE);
+
+        return $this;
+    }
+
+    /**
+     * Makes the method static.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makeStatic() {
+        $this->setModifier(Stmt\Class_::MODIFIER_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->setModifier(Stmt\Class_::MODIFIER_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->setModifier(Stmt\Class_::MODIFIER_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[] = $this->normalizeNode($stmt);
+
+        return $this;
+    }
+
+    /**
+     * Returns the built method node.
+     *
+     * @return Stmt\ClassMethod The built method node
+     */
+    public function getNode() {
+        return new Stmt\ClassMethod($this->name, array(
+            'type'   => $this->type,
+            'byRef'  => $this->returnByRef,
+            'params' => $this->params,
+            'stmts'  => $this->stmts,
+        ), $this->attributes);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php
new file mode 100644
index 0000000..432fcc7
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php
@@ -0,0 +1,59 @@
+name = null !== $name ? $this->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[] = $this->normalizeNode($stmt);
+
+        return $this;
+    }
+
+    /**
+     * Adds multiple statements.
+     *
+     * @param array $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;
+    }
+
+    /**
+     * Returns the built node.
+     *
+     * @return Node The built node
+     */
+    public function getNode() {
+        return new Stmt\Namespace_($this->name, $this->stmts);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
new file mode 100644
index 0000000..af910c2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
@@ -0,0 +1,76 @@
+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 = $this->normalizeValue($value);
+
+        return $this;
+    }
+
+    /**
+     * Sets type hint for the parameter.
+     *
+     * @param string|Node\Name $type Type hint to use
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function setTypeHint($type) {
+        if ($type === 'array' || $type === 'callable') {
+            $this->type = $type;
+        } else {
+            $this->type = $this->normalizeName($type);
+        }
+
+        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;
+    }
+
+    /**
+     * Returns the built parameter node.
+     *
+     * @return Node\Param The built parameter node
+     */
+    public function getNode() {
+        return new Node\Param(
+            $this->name, $this->default, $this->type, $this->byRef
+        );
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php
new file mode 100644
index 0000000..2d59d4c
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php
@@ -0,0 +1,111 @@
+name = $name;
+    }
+
+    /**
+     * Makes the property public.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makePublic() {
+        $this->setModifier(Stmt\Class_::MODIFIER_PUBLIC);
+
+        return $this;
+    }
+
+    /**
+     * Makes the property protected.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makeProtected() {
+        $this->setModifier(Stmt\Class_::MODIFIER_PROTECTED);
+
+        return $this;
+    }
+
+    /**
+     * Makes the property private.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makePrivate() {
+        $this->setModifier(Stmt\Class_::MODIFIER_PRIVATE);
+
+        return $this;
+    }
+
+    /**
+     * Makes the property static.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makeStatic() {
+        $this->setModifier(Stmt\Class_::MODIFIER_STATIC);
+
+        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 = $this->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 = array(
+            'comments' => array($this->normalizeDocComment($docComment))
+        );
+
+        return $this;
+    }
+
+    /**
+     * Returns the built class node.
+     *
+     * @return Stmt\Property The built property node
+     */
+    public function getNode() {
+        return new Stmt\Property(
+            $this->type !== 0 ? $this->type : Stmt\Class_::MODIFIER_PUBLIC,
+            array(
+                new Stmt\PropertyProperty($this->name, $this->default)
+            ),
+            $this->attributes
+        );
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php
new file mode 100644
index 0000000..9722e35
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php
@@ -0,0 +1,55 @@
+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 = $this->normalizeNode($stmt);
+
+        if ($stmt instanceof Stmt\Property) {
+            $this->properties[] = $stmt;
+        } else if ($stmt instanceof Stmt\ClassMethod) {
+            $this->methods[] = $stmt;
+        } else {
+            throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType()));
+        }
+
+        return $this;
+    }
+
+    /**
+     * Returns the built trait node.
+     *
+     * @return Stmt\Trait_ The built interface node
+     */
+    public function getNode() {
+        return new Stmt\Trait_(
+            $this->name, array_merge($this->properties, $this->methods), $this->attributes
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php
new file mode 100644
index 0000000..f6d3a85
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php
@@ -0,0 +1,58 @@
+name = $this->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)
+     */
+    protected function as_($alias) {
+        $this->alias = $alias;
+        return $this;
+    }
+    public function __call($name, $args) {
+        if (method_exists($this, $name . '_')) {
+            return call_user_func_array(array($this, $name . '_'), $args);
+        }
+
+        throw new \LogicException(sprintf('Method "%s" does not exist', $name));
+    }
+
+    /**
+     * Returns the built node.
+     *
+     * @return Node The built node
+     */
+    public function getNode() {
+        $alias = null !== $this->alias ? $this->alias : $this->name->getLast();
+        return new Stmt\Use_(array(
+            new Stmt\UseUse($this->name, $alias)
+        ), $this->type);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/BuilderAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/BuilderAbstract.php
new file mode 100644
index 0000000..626bedd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/BuilderAbstract.php
@@ -0,0 +1,131 @@
+getNode();
+        } elseif ($node instanceof Node) {
+            return $node;
+        }
+
+        throw new \LogicException('Expected node or builder object');
+    }
+
+    /**
+     * Normalizes a name: Converts plain string names to PhpParser\Node\Name.
+     *
+     * @param Name|string $name The name to normalize
+     *
+     * @return Name The normalized name
+     */
+    protected function normalizeName($name) {
+        if ($name instanceof Name) {
+            return $name;
+        } elseif (is_string($name)) {
+            if (!$name) {
+                throw new \LogicException('Name cannot be empty');
+            }
+
+            if ($name[0] == '\\') {
+                return new Name\FullyQualified(substr($name, 1));
+            } elseif (0 === strpos($name, 'namespace\\')) {
+                return new Name\Relative(substr($name, strlen('namespace\\')));
+            } else {
+                return new Name($name);
+            }
+        }
+
+        throw new \LogicException('Name must be a string or an instance of PhpParser\Node\Name');
+    }
+
+    /**
+     * Normalizes a value: Converts nulls, booleans, integers,
+     * floats, strings and arrays into their respective nodes
+     *
+     * @param mixed $value The value to normalize
+     *
+     * @return Expr The normalized value
+     */
+    protected function normalizeValue($value) {
+        if ($value instanceof Node) {
+            return $value;
+        } elseif (is_null($value)) {
+            return new Expr\ConstFetch(
+                new Name('null')
+            );
+        } elseif (is_bool($value)) {
+            return new Expr\ConstFetch(
+                new Name($value ? 'true' : 'false')
+            );
+        } elseif (is_int($value)) {
+            return new Scalar\LNumber($value);
+        } elseif (is_float($value)) {
+            return new Scalar\DNumber($value);
+        } elseif (is_string($value)) {
+            return new Scalar\String_($value);
+        } elseif (is_array($value)) {
+            $items = array();
+            $lastKey = -1;
+            foreach ($value as $itemKey => $itemValue) {
+                // for consecutive, numeric keys don't generate keys
+                if (null !== $lastKey && ++$lastKey === $itemKey) {
+                    $items[] = new Expr\ArrayItem(
+                        $this->normalizeValue($itemValue)
+                    );
+                } else {
+                    $lastKey = null;
+                    $items[] = new Expr\ArrayItem(
+                        $this->normalizeValue($itemValue),
+                        $this->normalizeValue($itemKey)
+                    );
+                }
+            }
+
+            return new Expr\Array_($items);
+        } else {
+            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
+     */
+    protected function normalizeDocComment($docComment) {
+        if ($docComment instanceof Comment\Doc) {
+            return $docComment;
+        } else if (is_string($docComment)) {
+            return new Comment\Doc($docComment);
+        } else {
+            throw new \LogicException('Doc comment must be a string or an instance of PhpParser\Comment\Doc');
+        }
+    }
+
+    /**
+     * Sets a modifier in the $this->type property.
+     *
+     * @param int $modifier Modifier to set
+     */
+    protected function setModifier($modifier) {
+        Stmt\Class_::verifyModifier($this->type, $modifier);
+        $this->type |= $modifier;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php b/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php
new file mode 100644
index 0000000..99c4baf
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php
@@ -0,0 +1,127 @@
+text = $text;
+        $this->line = $line;
+    }
+
+    /**
+     * Gets the comment text.
+     *
+     * @return string The comment text (including comment delimiters like /*)
+     */
+    public function getText() {
+        return $this->text;
+    }
+
+    /**
+     * Sets the comment text.
+     *
+     * @param string $text The comment text (including comment delimiters like /*)
+     */
+    public function setText($text) {
+        $this->text = $text;
+    }
+
+    /**
+     * Gets the line number the comment started on.
+     *
+     * @return int Line number
+     */
+    public function getLine() {
+        return $this->line;
+    }
+
+    /**
+     * Sets the line number the comment started on.
+     *
+     * @param int $line Line number
+     */
+    public function setLine($line) {
+        $this->line = $line;
+    }
+
+    /**
+     * Gets the comment text.
+     *
+     * @return string The comment text (including comment delimiters like /*)
+     */
+    public function __toString() {
+        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 trailing whitespace on the first line, but with trailing whitespace
+     * on all subsequent lines.
+     *
+     * @return mixed|string
+     */
+    public function getReformattedText() {
+        $text = trim($this->text);
+        if (false === strpos($text, "\n")) {
+            // Single line comments don't need further processing
+            return $text;
+        } elseif (preg_match('((*BSR_ANYCRLF)(*ANYCRLF)^.*(?:\R\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', ' *', $this->text);
+        } elseif (preg_match('(^/\*\*?\s*[\r\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);
+        } elseif (preg_match('(^/\*\*?\s*(?!\s))', $text, $matches)) {
+            // Multi line comment of the type
+            //
+            //     /* Some text.
+            //        Some more text.
+            //        Even more text. */
+            //
+            // is handled by taking the length of the "/* " segment and leaving only that
+            // many space characters before the lines. Thus in the above example only three
+            // space characters are left at the start of every line.
+            return preg_replace('(^\s*(?= {' . strlen($matches[0]) . '}(?!\s)))m', '', $text);
+        }
+
+        // No idea how to format this comment, so simply return as is
+        return $text;
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php b/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php
new file mode 100644
index 0000000..24fc6c9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php
@@ -0,0 +1,7 @@
+rawMessage = (string) $message;
+        if (is_array($attributes)) {
+            $this->attributes = $attributes;
+        } else {
+            $this->attributes = array('startLine' => $attributes);
+        }
+        $this->updateMessage();
+    }
+
+    /**
+     * Gets the error message
+     *
+     * @return string Error message
+     */
+    public function getRawMessage() {
+        return $this->rawMessage;
+    }
+
+    /**
+     * Gets the line the error starts in.
+     *
+     * @return int Error start line
+     */
+    public function getStartLine() {
+        return isset($this->attributes['startLine']) ? $this->attributes['startLine'] : -1;
+    }
+
+    /**
+     * Gets the line the error ends in.
+     *
+     * @return int Error end line
+     */
+    public function getEndLine() {
+        return isset($this->attributes['endLine']) ? $this->attributes['endLine'] : -1;
+    }
+
+
+    /**
+     * Gets the attributes of the node/token the error occurred at.
+     *
+     * @return array
+     */
+    public function getAttributes() {
+        return $this->attributes;
+    }
+
+    /**
+     * Sets the line of the PHP file the error occurred in.
+     *
+     * @param string $message Error message
+     */
+    public function setRawMessage($message) {
+        $this->rawMessage = (string) $message;
+        $this->updateMessage();
+    }
+
+    /**
+     * Sets the line the error starts in.
+     *
+     * @param int $line Error start line
+     */
+    public function setStartLine($line) {
+        $this->attributes['startLine'] = (int) $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.
+     *
+     * @return bool
+     */
+    public function hasColumnInfo() {
+        return isset($this->attributes['startFilePos']) && isset($this->attributes['endFilePos']);
+    }
+
+    /**
+     * Gets the start column (1-based) into the line where the error started.
+     *
+     * @param string $code Source code of the file
+     * @return int
+     */
+    public function getStartColumn($code) {
+        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
+     * @return int
+     */
+    public function getEndColumn($code) {
+        if (!$this->hasColumnInfo()) {
+            throw new \RuntimeException('Error does not have column information');
+        }
+
+        return $this->toColumn($code, $this->attributes['endFilePos']);
+    }
+
+    private function toColumn($code, $pos) {
+        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() {
+        $this->message = $this->rawMessage;
+
+        if (-1 === $this->getStartLine()) {
+            $this->message .= ' on unknown line';
+        } else {
+            $this->message .= ' on line ' . $this->getStartLine();
+        }
+    }
+
+    /** @deprecated Use getStartLine() instead */
+    public function getRawLine() {
+        return $this->getStartLine();
+    }
+
+    /** @deprecated Use setStartLine() instead */
+    public function setRawLine($line) {
+        $this->setStartLine($line);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
new file mode 100644
index 0000000..f3af54d
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
@@ -0,0 +1,286 @@
+tokenMap = $this->createTokenMap();
+
+        // map of tokens to drop while lexing (the map is only used for isset lookup,
+        // that's why the value is simply set to 1; the value is never actually used.)
+        $this->dropTokens = array_fill_keys(array(T_WHITESPACE, T_OPEN_TAG), 1);
+
+        // the usedAttributes member is a map of the used attribute names to a dummy
+        // value (here "true")
+        $options += array(
+            'usedAttributes' => array('comments', 'startLine', 'endLine'),
+        );
+        $this->usedAttributes = array_fill_keys($options['usedAttributes'], true);
+    }
+
+    /**
+     * Initializes the lexer for lexing the provided source code.
+     *
+     * @param string $code The source code to lex
+     *
+     * @throws Error on lexing errors (unterminated comment or unexpected character)
+     */
+    public function startLexing($code) {
+        $scream = ini_set('xdebug.scream', '0');
+
+        $this->resetErrors();
+        $this->tokens = @token_get_all($code);
+        $this->handleErrors();
+
+        if (false !== $scream) {
+            ini_set('xdebug.scream', $scream);
+        }
+
+        $this->code = $code; // keep the code around for __halt_compiler() handling
+        $this->pos  = -1;
+        $this->line =  1;
+        $this->filePos = 0;
+    }
+
+    protected function resetErrors() {
+        // set error_get_last() to defined state by forcing an undefined variable error
+        set_error_handler(function() { return false; }, 0);
+        @$undefinedVariable;
+        restore_error_handler();
+    }
+
+    protected function handleErrors() {
+        $error = error_get_last();
+
+        if (preg_match(
+            '~^Unterminated comment starting line ([0-9]+)$~',
+            $error['message'], $matches
+        )) {
+            throw new Error('Unterminated comment', (int) $matches[1]);
+        }
+
+        if (preg_match(
+            '~^Unexpected character in input:  \'(.)\' \(ASCII=([0-9]+)\)~s',
+            $error['message'], $matches
+        )) {
+            throw new Error(sprintf(
+                'Unexpected character "%s" (ASCII %d)',
+                $matches[1], $matches[2]
+            ));
+        }
+
+        // PHP cuts error message after null byte, so need special case
+        if (preg_match('~^Unexpected character in input:  \'$~', $error['message'])) {
+            throw new Error('Unexpected null byte');
+        }
+    }
+
+    /**
+     * Fetches the next token.
+     *
+     * The available attributes are determined by the 'usedAttributes' option, which can
+     * be specified in the constructor. The following attributes are supported:
+     *
+     *  * 'comments'      => Array of PhpParser\Comment or PhpParser\Comment\Doc instances,
+     *                       representing all comments that occurred between the previous
+     *                       non-discarded token and the current one.
+     *  * 'startLine'     => Line in which the node starts.
+     *  * 'endLine'       => Line in which the node ends.
+     *  * 'startTokenPos' => Offset into the token array of the first token in the node.
+     *  * 'endTokenPos'   => Offset into the token array of the last token in the node.
+     *  * 'startFilePos'  => Offset into the code string of the first character that is part of the node.
+     *  * 'endFilePos'    => Offset into the code string of the last character that is part of the node
+     *
+     * @param mixed $value           Variable to store token content in
+     * @param mixed $startAttributes Variable to store start attributes in
+     * @param mixed $endAttributes   Variable to store end attributes in
+     *
+     * @return int Token id
+     */
+    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) {
+        $startAttributes = array();
+        $endAttributes   = array();
+
+        while (1) {
+            if (isset($this->tokens[++$this->pos])) {
+                $token = $this->tokens[$this->pos];
+            } else {
+                // EOF token with ID 0
+                $token = "\0";
+            }
+
+            if (isset($this->usedAttributes['startTokenPos'])) {
+                $startAttributes['startTokenPos'] = $this->pos;
+            }
+            if (isset($this->usedAttributes['startFilePos'])) {
+                $startAttributes['startFilePos'] = $this->filePos;
+            }
+
+            if (is_string($token)) {
+                // bug in token_get_all
+                if ('b"' === $token) {
+                    $value = 'b"';
+                    $this->filePos += 2;
+                    $id = ord('"');
+                } else {
+                    $value = $token;
+                    $this->filePos += 1;
+                    $id = ord($token);
+                }
+
+                if (isset($this->usedAttributes['startLine'])) {
+                    $startAttributes['startLine'] = $this->line;
+                }
+                if (isset($this->usedAttributes['endLine'])) {
+                    $endAttributes['endLine'] = $this->line;
+                }
+                if (isset($this->usedAttributes['endTokenPos'])) {
+                    $endAttributes['endTokenPos'] = $this->pos;
+                }
+                if (isset($this->usedAttributes['endFilePos'])) {
+                    $endAttributes['endFilePos'] = $this->filePos - 1;
+                }
+
+                return $id;
+            } else {
+                $this->line += substr_count($token[1], "\n");
+                $this->filePos += strlen($token[1]);
+
+                if (T_COMMENT === $token[0]) {
+                    if (isset($this->usedAttributes['comments'])) {
+                        $startAttributes['comments'][] = new Comment($token[1], $token[2]);
+                    }
+                } elseif (T_DOC_COMMENT === $token[0]) {
+                    if (isset($this->usedAttributes['comments'])) {
+                        $startAttributes['comments'][] = new Comment\Doc($token[1], $token[2]);
+                    }
+                } elseif (!isset($this->dropTokens[$token[0]])) {
+                    $value = $token[1];
+
+                    if (isset($this->usedAttributes['startLine'])) {
+                        $startAttributes['startLine'] = $token[2];
+                    }
+                    if (isset($this->usedAttributes['endLine'])) {
+                        $endAttributes['endLine'] = $this->line;
+                    }
+                    if (isset($this->usedAttributes['endTokenPos'])) {
+                        $endAttributes['endTokenPos'] = $this->pos;
+                    }
+                    if (isset($this->usedAttributes['endFilePos'])) {
+                        $endAttributes['endFilePos'] = $this->filePos - 1;
+                    }
+
+                    return $this->tokenMap[$token[0]];
+                }
+            }
+        }
+
+        throw new \RuntimeException('Reached end of lexer loop');
+    }
+
+    /**
+     * Returns the token array for current code.
+     *
+     * The token array is in the same format as provided by the
+     * token_get_all() function and does not discard tokens (i.e.
+     * whitespace and comments are included). The token position
+     * attributes are against this token array.
+     *
+     * @return array Array of tokens in token_get_all() format
+     */
+    public function getTokens() {
+        return $this->tokens;
+    }
+
+    /**
+     * Handles __halt_compiler() by returning the text after it.
+     *
+     * @return string Remaining text
+     */
+    public function handleHaltCompiler() {
+        // text after T_HALT_COMPILER, still including ();
+        $textAfter = substr($this->code, $this->filePos);
+
+        // ensure that it is followed by ();
+        // this simplifies the situation, by not allowing any comments
+        // in between of the tokens.
+        if (!preg_match('~^\s*\(\s*\)\s*(?:;|\?>\r?\n?)~', $textAfter, $matches)) {
+            throw new Error('__HALT_COMPILER must be followed by "();"');
+        }
+
+        // prevent the lexer from returning any further tokens
+        $this->pos = count($this->tokens);
+
+        // return with (); removed
+        return (string) substr($textAfter, strlen($matches[0])); // (string) converts false to ''
+    }
+
+    /**
+     * 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() {
+        $tokenMap = array();
+
+        // 256 is the minimum possible token number, as everything below
+        // it is an ASCII value
+        for ($i = 256; $i < 1000; ++$i) {
+            if (T_DOUBLE_COLON === $i) {
+                // T_DOUBLE_COLON is equivalent to T_PAAMAYIM_NEKUDOTAYIM
+                $tokenMap[$i] = Parser::T_PAAMAYIM_NEKUDOTAYIM;
+            } elseif(T_OPEN_TAG_WITH_ECHO === $i) {
+                // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO
+                $tokenMap[$i] = Parser::T_ECHO;
+            } elseif(T_CLOSE_TAG === $i) {
+                // T_CLOSE_TAG is equivalent to ';'
+                $tokenMap[$i] = ord(';');
+            } elseif ('UNKNOWN' !== $name = token_name($i)) {
+                if ('T_HASHBANG' === $name) {
+                    // HHVM uses a special token for #! hashbang lines
+                    $tokenMap[$i] = Parser::T_INLINE_HTML;
+                } else if (defined($name = 'PhpParser\Parser::' . $name)) {
+                    // Other tokens can be mapped directly
+                    $tokenMap[$i] = constant($name);
+                }
+            }
+        }
+
+        // HHVM uses a special token for numbers that overflow to double
+        if (defined('T_ONUMBER')) {
+            $tokenMap[T_ONUMBER] = Parser::T_DNUMBER;
+        }
+        // HHVM also has a separate token for the __COMPILER_HALT_OFFSET__ constant
+        if (defined('T_COMPILER_HALT_OFFSET')) {
+            $tokenMap[T_COMPILER_HALT_OFFSET] = Parser::T_STRING;
+        }
+
+        return $tokenMap;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
new file mode 100644
index 0000000..837def4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
@@ -0,0 +1,231 @@
+ array(
+                'finally'       => Parser::T_FINALLY,
+                'yield'         => Parser::T_YIELD,
+            ),
+            self::PHP_5_4 => array(
+                'callable'      => Parser::T_CALLABLE,
+                'insteadof'     => Parser::T_INSTEADOF,
+                'trait'         => Parser::T_TRAIT,
+                '__trait__'     => Parser::T_TRAIT_C,
+            ),
+        );
+
+        $this->newKeywords = array();
+        foreach ($newKeywordsPerVersion as $version => $newKeywords) {
+            if (version_compare(PHP_VERSION, $version, '>=')) {
+                break;
+            }
+
+            $this->newKeywords += $newKeywords;
+        }
+
+        if (version_compare(PHP_VERSION, self::PHP_7_0, '>=')) {
+            return;
+        }
+        $this->tokenMap[self::T_COALESCE] = Parser::T_COALESCE;
+        $this->tokenMap[self::T_SPACESHIP] = Parser::T_SPACESHIP;
+        $this->tokenMap[self::T_YIELD_FROM] = Parser::T_YIELD_FROM;
+
+        if (version_compare(PHP_VERSION, self::PHP_5_6, '>=')) {
+            return;
+        }
+        $this->tokenMap[self::T_ELLIPSIS]  = Parser::T_ELLIPSIS;
+        $this->tokenMap[self::T_POW]       = Parser::T_POW;
+        $this->tokenMap[self::T_POW_EQUAL] = Parser::T_POW_EQUAL;
+    }
+
+    public function startLexing($code) {
+        $this->inObjectAccess = false;
+
+        $preprocessedCode = $this->preprocessCode($code);
+        parent::startLexing($preprocessedCode);
+        if ($preprocessedCode !== $code) {
+            $this->postprocessTokens();
+        }
+
+        // Set code property back to the original code, so __halt_compiler()
+        // handling and (start|end)FilePos attributes use the correct offsets
+        $this->code = $code;
+    }
+
+    /*
+     * Replaces new features in the code by ~__EMU__{NAME}__{DATA}__~ sequences.
+     * ~LABEL~ is never valid PHP code, that's why we can (to some degree) safely
+     * use it here.
+     * Later when preprocessing the tokens these sequences will either be replaced
+     * by real tokens or replaced with their original content (e.g. if they occurred
+     * inside a string, i.e. a place where they don't have a special meaning).
+     */
+    protected function preprocessCode($code) {
+        if (version_compare(PHP_VERSION, self::PHP_7_0, '>=')) {
+            return $code;
+        }
+
+        $code = str_replace('??', '~__EMU__COALESCE__~', $code);
+        $code = str_replace('<=>', '~__EMU__SPACESHIP__~', $code);
+        $code = preg_replace_callback('(yield[ \n\r\t]+from)', function($matches) {
+            // Encoding $0 in order to preserve exact whitespace
+            return '~__EMU__YIELDFROM__' . bin2hex($matches[0]) . '__~';
+        }, $code);
+
+        if (version_compare(PHP_VERSION, self::PHP_5_6, '>=')) {
+            return $code;
+        }
+
+        $code = str_replace('...', '~__EMU__ELLIPSIS__~', $code);
+        $code = preg_replace('((?=')) {
+            return $code;
+        }
+
+        // binary notation (0b010101101001...)
+        return preg_replace('(\b0b[01]+\b)', '~__EMU__BINARY__$0__~', $code);
+    }
+
+    /*
+     * Replaces the ~__EMU__...~ sequences with real tokens or their original
+     * value.
+     */
+    protected function postprocessTokens() {
+        // we need to manually iterate and manage a count because we'll change
+        // the tokens array on the way
+        for ($i = 0, $c = count($this->tokens); $i < $c; ++$i) {
+            // first check that the following tokens are of form ~LABEL~,
+            // then match the __EMU__... sequence.
+            if ('~' === $this->tokens[$i]
+                && isset($this->tokens[$i + 2])
+                && '~' === $this->tokens[$i + 2]
+                && T_STRING === $this->tokens[$i + 1][0]
+                && preg_match('(^__EMU__([A-Z]++)__(?:([A-Za-z0-9]++)__)?$)', $this->tokens[$i + 1][1], $matches)
+            ) {
+                if ('BINARY' === $matches[1]) {
+                    // the binary number can either be an integer or a double, so return a LNUMBER
+                    // or DNUMBER respectively
+                    $isInt = is_int(bindec($matches[2]));
+                    $replace = array(
+                        array($isInt ? T_LNUMBER : T_DNUMBER, $matches[2], $this->tokens[$i + 1][2])
+                    );
+                } else if ('ELLIPSIS' === $matches[1]) {
+                    $replace = array(
+                        array(self::T_ELLIPSIS, '...', $this->tokens[$i + 1][2])
+                    );
+                } else if ('POW' === $matches[1]) {
+                    $replace = array(
+                        array(self::T_POW, '**', $this->tokens[$i + 1][2])
+                    );
+                } else if ('POWEQUAL' === $matches[1]) {
+                    $replace = array(
+                        array(self::T_POW_EQUAL, '**=', $this->tokens[$i + 1][2])
+                    );
+                } else if ('COALESCE' === $matches[1]) {
+                    $replace = array(
+                        array(self::T_COALESCE, '??', $this->tokens[$i + 1][2])
+                    );
+                } else if ('SPACESHIP' === $matches[1]) {
+                    $replace = array(
+                        array(self::T_SPACESHIP, '<=>', $this->tokens[$i + 1][2]),
+                    );
+                } else if ('YIELDFROM' === $matches[1]) {
+                    $content = $this->hex2bin($matches[2]);
+                    $replace = array(
+                        array(self::T_YIELD_FROM, $content, $this->tokens[$i + 1][2] - substr_count($content, "\n"))
+                    );
+                } else {
+                    throw new \RuntimeException('Invalid __EMU__ sequence');
+                }
+
+                array_splice($this->tokens, $i, 3, $replace);
+                $c -= 3 - count($replace);
+            // for multichar tokens (e.g. strings) replace any ~__EMU__...~ sequences
+            // in their content with the original character sequence
+            } elseif (is_array($this->tokens[$i])
+                      && 0 !== strpos($this->tokens[$i][1], '__EMU__')
+            ) {
+                $this->tokens[$i][1] = preg_replace_callback(
+                    '(~__EMU__([A-Z]++)__(?:([A-Za-z0-9]++)__)?~)',
+                    array($this, 'restoreContentCallback'),
+                    $this->tokens[$i][1]
+                );
+            }
+        }
+    }
+
+    /*
+     * This method is a callback for restoring EMU sequences in
+     * multichar tokens (like strings) to their original value.
+     */
+    public function restoreContentCallback(array $matches) {
+        if ('BINARY' === $matches[1]) {
+            return $matches[2];
+        } else if ('ELLIPSIS' === $matches[1]) {
+            return '...';
+        } else if ('POW' === $matches[1]) {
+            return '**';
+        } else if ('POWEQUAL' === $matches[1]) {
+            return '**=';
+        } else if ('COALESCE' === $matches[1]) {
+            return '??';
+        } else if ('SPACESHIP' === $matches[1]) {
+            return '<=>';
+        } else if ('YIELDFROM' === $matches[1]) {
+            return $this->hex2bin($matches[2]);
+        } else {
+            return $matches[0];
+        }
+    }
+
+    private function hex2bin($str) {
+        // TODO Drop when removing support for PHP 5.3
+        return pack('H*', $str);
+    }
+
+    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) {
+        $token = parent::getNextToken($value, $startAttributes, $endAttributes);
+
+        // replace new keywords by their respective tokens. This is not done
+        // if we currently are in an object access (e.g. in $obj->namespace
+        // "namespace" stays a T_STRING tokens and isn't converted to T_NAMESPACE)
+        if (Parser::T_STRING === $token && !$this->inObjectAccess) {
+            if (isset($this->newKeywords[strtolower($value)])) {
+                return $this->newKeywords[strtolower($value)];
+            }
+        } else {
+            // keep track of whether we currently are in an object access (after ->)
+            $this->inObjectAccess = Parser::T_OBJECT_OPERATOR === $token;
+        }
+
+        return $token;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node.php b/vendor/nikic/php-parser/lib/PhpParser/Node.php
new file mode 100644
index 0000000..a28ccc1
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node.php
@@ -0,0 +1,77 @@
+value = $value;
+        $this->byRef = $byRef;
+        $this->unpack = $unpack;
+    }
+
+    public function getSubNodeNames() {
+        return array('value', 'byRef', 'unpack');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php
new file mode 100644
index 0000000..f6fcf65
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php
@@ -0,0 +1,30 @@
+name = $name;
+        $this->value = $value;
+    }
+
+    public function getSubNodeNames() {
+        return array('name', 'value');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php
new file mode 100644
index 0000000..2dae5bf
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php
@@ -0,0 +1,9 @@
+var = $var;
+        $this->dim = $dim;
+    }
+
+    public function getSubnodeNames() {
+        return array('var', 'dim');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php
new file mode 100644
index 0000000..8999b5f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php
@@ -0,0 +1,34 @@
+key = $key;
+        $this->value = $value;
+        $this->byRef = $byRef;
+    }
+
+    public function getSubNodeNames() {
+        return array('key', 'value', 'byRef');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php
new file mode 100644
index 0000000..0385fe2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php
@@ -0,0 +1,26 @@
+items = $items;
+    }
+
+    public function getSubNodeNames() {
+        return array('items');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php
new file mode 100644
index 0000000..ef16f8e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php
@@ -0,0 +1,30 @@
+var = $var;
+        $this->expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('var', 'expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php
new file mode 100644
index 0000000..54653ff
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php
@@ -0,0 +1,34 @@
+var = $var;
+        $this->expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('var', 'expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php
new file mode 100644
index 0000000..9e3ed82
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php
@@ -0,0 +1,9 @@
+var = $var;
+        $this->expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('var', 'expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php
new file mode 100644
index 0000000..d8a7e25
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php
@@ -0,0 +1,30 @@
+left = $left;
+        $this->right = $right;
+    }
+
+    public function getSubNodeNames() {
+        return array('left', 'right');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php
new file mode 100644
index 0000000..bd6c5c1
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php
@@ -0,0 +1,9 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php
new file mode 100644
index 0000000..2706a50
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php
new file mode 100644
index 0000000..13772e4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php
new file mode 100644
index 0000000..08b3a38
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php
@@ -0,0 +1,9 @@
+class = $class;
+        $this->name = $name;
+    }
+
+    public function getSubNodeNames() {
+        return array('class', 'name');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php
new file mode 100644
index 0000000..1bfab2e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
new file mode 100644
index 0000000..0cdcd41
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
@@ -0,0 +1,65 @@
+ 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
+     * @param array $attributes Additional attributes
+     */
+    public function __construct(array $subNodes = array(), array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->static = isset($subNodes['static']) ? $subNodes['static'] : false;
+        $this->byRef = isset($subNodes['byRef']) ? $subNodes['byRef'] : false;
+        $this->params = isset($subNodes['params']) ? $subNodes['params'] : array();
+        $this->uses = isset($subNodes['uses']) ? $subNodes['uses'] : array();
+        $this->returnType = isset($subNodes['returnType']) ? $subNodes['returnType'] : null;
+        $this->stmts = isset($subNodes['stmts']) ? $subNodes['stmts'] : array();
+    }
+
+    public function getSubNodeNames() {
+        return array('static', 'byRef', 'params', 'uses', 'returnType', 'stmts');
+    }
+
+    public function returnsByRef() {
+        return $this->byRef;
+    }
+
+    public function getParams() {
+        return $this->params;
+    }
+
+    public function getReturnType() {
+        return $this->returnType;
+    }
+
+    public function getStmts() {
+        return $this->stmts;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php
new file mode 100644
index 0000000..6669127
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php
@@ -0,0 +1,30 @@
+var = $var;
+        $this->byRef = $byRef;
+    }
+
+    public function getSubNodeNames() {
+        return array('var', 'byRef');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php
new file mode 100644
index 0000000..4604a32
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php
@@ -0,0 +1,27 @@
+name = $name;
+    }
+
+    public function getSubNodeNames() {
+        return array('name');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php
new file mode 100644
index 0000000..a2503df
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php
new file mode 100644
index 0000000..b55cc50
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php
new file mode 100644
index 0000000..cb977c2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php
new file mode 100644
index 0000000..c8e542b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php
new file mode 100644
index 0000000..dae3aab
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php
@@ -0,0 +1,31 @@
+name = $name;
+        $this->args = $args;
+    }
+
+    public function getSubNodeNames() {
+        return array('name', 'args');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php
new file mode 100644
index 0000000..280ac98
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php
@@ -0,0 +1,35 @@
+expr = $expr;
+        $this->type = $type;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr', 'type');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php
new file mode 100644
index 0000000..0c670b0
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php
@@ -0,0 +1,31 @@
+expr = $expr;
+        $this->class = $class;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr', 'class');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php
new file mode 100644
index 0000000..91e50fd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php
@@ -0,0 +1,26 @@
+vars = $vars;
+    }
+
+    public function getSubNodeNames() {
+        return array('vars');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php
new file mode 100644
index 0000000..962543b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php
@@ -0,0 +1,26 @@
+vars = $vars;
+    }
+
+    public function getSubNodeNames() {
+        return array('vars');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php
new file mode 100644
index 0000000..0a8b6d9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php
@@ -0,0 +1,35 @@
+var = $var;
+        $this->name = $name;
+        $this->args = $args;
+    }
+
+    public function getSubNodeNames() {
+        return array('var', 'name', 'args');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php
new file mode 100644
index 0000000..690efe6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php
@@ -0,0 +1,31 @@
+class = $class;
+        $this->args = $args;
+    }
+
+    public function getSubNodeNames() {
+        return array('class', 'args');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php
new file mode 100644
index 0000000..66ba5dc
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php
@@ -0,0 +1,26 @@
+var = $var;
+    }
+
+    public function getSubNodeNames() {
+        return array('var');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php
new file mode 100644
index 0000000..ad72482
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php
@@ -0,0 +1,26 @@
+var = $var;
+    }
+
+    public function getSubNodeNames() {
+        return array('var');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php
new file mode 100644
index 0000000..c388ab5
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php
@@ -0,0 +1,26 @@
+var = $var;
+    }
+
+    public function getSubNodeNames() {
+        return array('var');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php
new file mode 100644
index 0000000..da8a58a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php
@@ -0,0 +1,26 @@
+var = $var;
+    }
+
+    public function getSubNodeNames() {
+        return array('var');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php
new file mode 100644
index 0000000..af7f02d
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php
new file mode 100644
index 0000000..37dcd7f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php
@@ -0,0 +1,30 @@
+var = $var;
+        $this->name = $name;
+    }
+
+    public function getSubNodeNames() {
+        return array('var', 'name');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php
new file mode 100644
index 0000000..f0adf3e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php
@@ -0,0 +1,26 @@
+parts = $parts;
+    }
+
+    public function getSubNodeNames() {
+        return array('parts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php
new file mode 100644
index 0000000..eb17ab8
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php
@@ -0,0 +1,35 @@
+class = $class;
+        $this->name = $name;
+        $this->args = $args;
+    }
+
+    public function getSubNodeNames() {
+        return array('class', 'name', 'args');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php
new file mode 100644
index 0000000..acc86ec
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php
@@ -0,0 +1,31 @@
+class = $class;
+        $this->name = $name;
+    }
+
+    public function getSubNodeNames() {
+        return array('class', 'name');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php
new file mode 100644
index 0000000..05d2e7a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php
@@ -0,0 +1,34 @@
+cond = $cond;
+        $this->if = $if;
+        $this->else = $else;
+    }
+
+    public function getSubNodeNames() {
+        return array('cond', 'if', 'else');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php
new file mode 100644
index 0000000..27960f8
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php
new file mode 100644
index 0000000..0f545b9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php
new file mode 100644
index 0000000..b5dd78a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php
@@ -0,0 +1,26 @@
+name = $name;
+    }
+
+    public function getSubNodeNames() {
+        return array('name');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php
new file mode 100644
index 0000000..0936f89
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php
new file mode 100644
index 0000000..e7e6f00
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php
@@ -0,0 +1,30 @@
+key = $key;
+        $this->value = $value;
+    }
+
+    public function getSubNodeNames() {
+        return array('key', 'value');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
new file mode 100644
index 0000000..efe4333
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
@@ -0,0 +1,36 @@
+parts = $parts;
+    }
+
+    public function getSubNodeNames() {
+        return array('parts');
+    }
+
+    /**
+     * 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() {
+        return $this->parts[0];
+    }
+
+    /**
+     * 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() {
+        return $this->parts[count($this->parts) - 1];
+    }
+
+    /**
+     * Checks whether the name is unqualified. (E.g. Name)
+     *
+     * @return bool Whether the name is unqualified
+     */
+    public function isUnqualified() {
+        return 1 == count($this->parts);
+    }
+
+    /**
+     * Checks whether the name is qualified. (E.g. Name\Name)
+     *
+     * @return bool Whether the name is qualified
+     */
+    public function isQualified() {
+        return 1 < count($this->parts);
+    }
+
+    /**
+     * Checks whether the name is fully qualified. (E.g. \Name)
+     *
+     * @return bool Whether the name is fully qualified
+     */
+    public function isFullyQualified() {
+        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() {
+        return false;
+    }
+
+    /**
+     * Returns a string representation of the name by imploding the namespace parts with a separator.
+     *
+     * @param string $separator The separator to use (defaults to the namespace separator \)
+     *
+     * @return string String representation
+     */
+    public function toString($separator = '\\') {
+        return implode($separator, $this->parts);
+    }
+
+    /**
+     * Returns a string representation of the name by imploding the namespace parts with the
+     * namespace separator.
+     *
+     * @return string String representation
+     */
+    public function __toString() {
+        return implode('\\', $this->parts);
+    }
+
+    /**
+     * Sets the whole name.
+     *
+     * @param string|array|self $name The name to set the whole name to
+     */
+    public function set($name) {
+        $this->parts = $this->prepareName($name);
+    }
+
+    /**
+     * Prepends a name to this name.
+     *
+     * @param string|array|self $name Name to prepend
+     */
+    public function prepend($name) {
+        $this->parts = array_merge($this->prepareName($name), $this->parts);
+    }
+
+    /**
+     * Appends a name to this name.
+     *
+     * @param string|array|self $name Name to append
+     */
+    public function append($name) {
+        $this->parts = array_merge($this->parts, $this->prepareName($name));
+    }
+
+    /**
+     * Sets the first part of the name.
+     *
+     * @param string|array|self $name The name to set the first part to
+     */
+    public function setFirst($name) {
+        array_splice($this->parts, 0, 1, $this->prepareName($name));
+    }
+
+    /**
+     * Sets the last part of the name.
+     *
+     * @param string|array|self $name The name to set the last part to
+     */
+    public function setLast($name) {
+        array_splice($this->parts, -1, 1, $this->prepareName($name));
+    }
+
+    /**
+     * Prepares a (string, array or Name node) name for use in name changing methods by converting
+     * it to an array.
+     *
+     * @param string|array|self $name Name to prepare
+     *
+     * @return array Prepared name
+     */
+    protected function prepareName($name) {
+        if (is_string($name)) {
+            return explode('\\', $name);
+        } elseif (is_array($name)) {
+            return $name;
+        } elseif ($name instanceof self) {
+            return $name->parts;
+        }
+
+        throw new \InvalidArgumentException(
+            'When changing a name you need to pass either a string, an array or a Name node'
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php
new file mode 100644
index 0000000..97cc111
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php
@@ -0,0 +1,42 @@
+type = $type;
+        $this->byRef = $byRef;
+        $this->variadic = $variadic;
+        $this->name = $name;
+        $this->default = $default;
+
+        if ($variadic && null !== $default) {
+            throw new Error('Variadic parameter cannot have a default value', $default->getAttributes());
+        }
+    }
+
+    public function getSubNodeNames() {
+        return array('type', 'byRef', 'variadic', 'name', 'default');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php
new file mode 100644
index 0000000..0117753
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php
@@ -0,0 +1,7 @@
+value = $value;
+    }
+
+    public function getSubNodeNames() {
+        return array('value');
+    }
+
+    /**
+     * @internal
+     *
+     * Parses a DNUMBER token like PHP would.
+     *
+     * @param string $str A string number
+     *
+     * @return float The parsed number
+     */
+    public static function parse($str) {
+        // if string contains any of .eE just cast it to float
+        if (false !== strpbrk($str, '.eE')) {
+            return (float) $str;
+        }
+
+        // otherwise it's an integer notation that overflowed into a float
+        // if it starts with 0 it's 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
+            // 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;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php
new file mode 100644
index 0000000..c2555bf
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php
@@ -0,0 +1,26 @@
+parts = $parts;
+    }
+
+    public function getSubNodeNames() {
+        return array('parts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
new file mode 100644
index 0000000..4a4e603
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
@@ -0,0 +1,61 @@
+value = $value;
+    }
+
+    public function getSubNodeNames() {
+        return array('value');
+    }
+
+    /**
+     * @internal
+     *
+     * Parses an LNUMBER token (dec, hex, oct and bin notations) like PHP would.
+     *
+     * @param string $str A string number
+     *
+     * @return int The parsed number
+     */
+    public static function parse($str) {
+        // handle plain 0 specially
+        if ('0' === $str) {
+            return 0;
+        }
+
+        // if first char is 0 (and number isn't 0) it's a special syntax
+        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 (intval instead of octdec to get proper cutting behavior with malformed numbers)
+            return intval($str, 8);
+        }
+
+        // dec
+        return (int) $str;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php
new file mode 100644
index 0000000..969a664
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php
@@ -0,0 +1,28 @@
+ '\\',
+        '$'  =>  '$',
+        '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($value = '', array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->value = $value;
+    }
+
+    public function getSubNodeNames() {
+        return array('value');
+    }
+
+    /**
+     * @internal
+     *
+     * Parses a string token.
+     *
+     * @param string $str String token content
+     *
+     * @return string The parsed string
+     */
+    public static function parse($str) {
+        $bLength = 0;
+        if ('b' === $str[0]) {
+            $bLength = 1;
+        }
+
+        if ('\'' === $str[$bLength]) {
+            return str_replace(
+                array('\\\\', '\\\''),
+                array(  '\\',   '\''),
+                substr($str, $bLength + 1, -1)
+            );
+        } else {
+            return self::parseEscapeSequences(substr($str, $bLength + 1, -1), '"');
+        }
+    }
+
+    /**
+     * @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
+     *
+     * @return string String with escape sequences parsed
+     */
+    public static function parseEscapeSequences($str, $quote) {
+        if (null !== $quote) {
+            $str = str_replace('\\' . $quote, $quote, $str);
+        }
+
+        return preg_replace_callback(
+            '~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3})~',
+            array(__CLASS__, 'parseCallback'),
+            $str
+        );
+    }
+
+    private static function parseCallback($matches) {
+        $str = $matches[1];
+
+        if (isset(self::$replacements[$str])) {
+            return self::$replacements[$str];
+        } elseif ('x' === $str[0] || 'X' === $str[0]) {
+            return chr(hexdec($str));
+        } else {
+            return chr(octdec($str));
+        }
+    }
+
+    /**
+     * @internal
+     *
+     * Parses a constant doc string.
+     *
+     * @param string $startToken Doc string start token content (<<num = $num;
+    }
+
+    public function getSubNodeNames() {
+        return array('num');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php
new file mode 100644
index 0000000..50f17a6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php
@@ -0,0 +1,30 @@
+cond = $cond;
+        $this->stmts = $stmts;
+    }
+
+    public function getSubNodeNames() {
+        return array('cond', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
new file mode 100644
index 0000000..7dd3e9b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
@@ -0,0 +1,34 @@
+type = $type;
+        $this->var = $var;
+        $this->stmts = $stmts;
+    }
+
+    public function getSubNodeNames() {
+        return array('type', 'var', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
new file mode 100644
index 0000000..3eb6b0c
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
@@ -0,0 +1,26 @@
+consts = $consts;
+    }
+
+    public function getSubNodeNames() {
+        return array('consts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
new file mode 100644
index 0000000..f6831a6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
@@ -0,0 +1,44 @@
+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($name) {
+        $lowerName = strtolower($name);
+        foreach ($this->stmts as $stmt) {
+            if ($stmt instanceof ClassMethod && $lowerName === strtolower($stmt->name)) {
+                return $stmt;
+            }
+        }
+        return null;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
new file mode 100644
index 0000000..c1bd577
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
@@ -0,0 +1,101 @@
+ MODIFIER_PUBLIC: Type
+     *                                'byRef'      => false          : Whether to return by reference
+     *                                'params'     => array()        : Parameters
+     *                                'returnType' => null           : Return type
+     *                                'stmts'      => array()        : Statements
+     * @param array       $attributes Additional attributes
+     */
+    public function __construct($name, array $subNodes = array(), array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->type = isset($subNodes['type']) ? $subNodes['type'] : 0;
+        $this->byRef = isset($subNodes['byRef'])  ? $subNodes['byRef']  : false;
+        $this->name = $name;
+        $this->params = isset($subNodes['params']) ? $subNodes['params'] : array();
+        $this->returnType = isset($subNodes['returnType']) ? $subNodes['returnType'] : null;
+        $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : array();
+
+        if ($this->type & Class_::MODIFIER_STATIC) {
+            switch (strtolower($this->name)) {
+                case '__construct':
+                    throw new Error(sprintf('Constructor %s() cannot be static', $this->name));
+                case '__destruct':
+                    throw new Error(sprintf('Destructor %s() cannot be static', $this->name));
+                case '__clone':
+                    throw new Error(sprintf('Clone method %s() cannot be static', $this->name));
+            }
+        }
+    }
+
+    public function getSubNodeNames() {
+        return array('type', 'byRef', 'name', 'params', 'returnType', 'stmts');
+    }
+
+    public function returnsByRef() {
+        return $this->byRef;
+    }
+
+    public function getParams() {
+        return $this->params;
+    }
+
+    public function getReturnType() {
+        return $this->returnType;
+    }
+
+    public function getStmts() {
+        return $this->stmts;
+    }
+
+    public function isPublic() {
+        return ($this->type & Class_::MODIFIER_PUBLIC) !== 0
+            || ($this->type & Class_::VISIBILITY_MODIFER_MASK) === 0;
+    }
+
+    public function isProtected() {
+        return (bool) ($this->type & Class_::MODIFIER_PROTECTED);
+    }
+
+    public function isPrivate() {
+        return (bool) ($this->type & Class_::MODIFIER_PRIVATE);
+    }
+
+    public function isAbstract() {
+        return (bool) ($this->type & Class_::MODIFIER_ABSTRACT);
+    }
+
+    public function isFinal() {
+        return (bool) ($this->type & Class_::MODIFIER_FINAL);
+    }
+
+    public function isStatic() {
+        return (bool) ($this->type & Class_::MODIFIER_STATIC);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
new file mode 100644
index 0000000..496ee51
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
@@ -0,0 +1,112 @@
+ true,
+        'parent' => true,
+        'static' => true,
+    );
+
+    /**
+     * Constructs a class node.
+     *
+     * @param string|null $name       Name
+     * @param array       $subNodes   Array of the following optional subnodes:
+     *                                'type'       => 0      : Type
+     *                                'extends'    => null   : Name of extended class
+     *                                'implements' => array(): Names of implemented interfaces
+     *                                'stmts'      => array(): Statements
+     * @param array       $attributes Additional attributes
+     */
+    public function __construct($name, array $subNodes = array(), array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->type = isset($subNodes['type']) ? $subNodes['type'] : 0;
+        $this->name = $name;
+        $this->extends = isset($subNodes['extends']) ? $subNodes['extends'] : null;
+        $this->implements = isset($subNodes['implements']) ? $subNodes['implements'] : array();
+        $this->stmts = isset($subNodes['stmts']) ? $subNodes['stmts'] : array();
+
+        if (null !== $this->name && isset(self::$specialNames[strtolower($this->name)])) {
+            throw new Error(sprintf('Cannot use \'%s\' as class name as it is reserved', $this->name));
+        }
+
+        if (isset(self::$specialNames[strtolower($this->extends)])) {
+            throw new Error(
+                sprintf('Cannot use \'%s\' as class name as it is reserved', $this->extends),
+                $this->extends->getAttributes()
+            );
+        }
+
+        foreach ($this->implements as $interface) {
+            if (isset(self::$specialNames[strtolower($interface)])) {
+                throw new Error(
+                    sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface),
+                    $interface->getAttributes()
+                );
+            }
+        }
+    }
+
+    public function getSubNodeNames() {
+        return array('type', 'name', 'extends', 'implements', 'stmts');
+    }
+
+    public function isAbstract() {
+        return (bool) ($this->type & self::MODIFIER_ABSTRACT);
+    }
+
+    public function isFinal() {
+        return (bool) ($this->type & self::MODIFIER_FINAL);
+    }
+
+    public function isAnonymous() {
+        return null === $this->name;
+    }
+
+    /**
+     * @internal
+     */
+    public static function verifyModifier($a, $b) {
+        if ($a & self::VISIBILITY_MODIFER_MASK && $b & self::VISIBILITY_MODIFER_MASK) {
+            throw new Error('Multiple access type modifiers are not allowed');
+        }
+
+        if ($a & self::MODIFIER_ABSTRACT && $b & self::MODIFIER_ABSTRACT) {
+            throw new Error('Multiple abstract modifiers are not allowed');
+        }
+
+        if ($a & self::MODIFIER_STATIC && $b & self::MODIFIER_STATIC) {
+            throw new Error('Multiple static modifiers are not allowed');
+        }
+
+        if ($a & self::MODIFIER_FINAL && $b & self::MODIFIER_FINAL) {
+            throw new Error('Multiple final modifiers are not allowed');
+        }
+
+        if ($a & 48 && $b & 48) {
+            throw new Error('Cannot use the final modifier on an abstract class member');
+        }
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php
new file mode 100644
index 0000000..b42c8df
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php
@@ -0,0 +1,26 @@
+consts = $consts;
+    }
+
+    public function getSubNodeNames() {
+        return array('consts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php
new file mode 100644
index 0000000..0f4c596
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php
@@ -0,0 +1,26 @@
+num = $num;
+    }
+
+    public function getSubNodeNames() {
+        return array('num');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php
new file mode 100644
index 0000000..e7833f6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php
@@ -0,0 +1,30 @@
+value pair node.
+     *
+     * @param string    $key        Key
+     * @param Node\Expr $value      Value
+     * @param array     $attributes Additional attributes
+     */
+    public function __construct($key, Node\Expr $value, array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->key = $key;
+        $this->value = $value;
+    }
+
+    public function getSubNodeNames() {
+        return array('key', 'value');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php
new file mode 100644
index 0000000..67a753e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php
@@ -0,0 +1,29 @@
+declares = $declares;
+        $this->stmts = $stmts;
+    }
+
+    public function getSubNodeNames() {
+        return array('declares', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php
new file mode 100644
index 0000000..b5f3092
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php
@@ -0,0 +1,30 @@
+cond = $cond;
+        $this->stmts = $stmts;
+    }
+
+    public function getSubNodeNames() {
+        return array('cond', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php
new file mode 100644
index 0000000..9275158
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php
@@ -0,0 +1,26 @@
+exprs = $exprs;
+    }
+
+    public function getSubNodeNames() {
+        return array('exprs');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php
new file mode 100644
index 0000000..1a9773c
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php
@@ -0,0 +1,30 @@
+cond = $cond;
+        $this->stmts = $stmts;
+    }
+
+    public function getSubNodeNames() {
+        return array('cond', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php
new file mode 100644
index 0000000..ecec6e6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php
@@ -0,0 +1,26 @@
+stmts = $stmts;
+    }
+
+    public function getSubNodeNames() {
+        return array('stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php
new file mode 100644
index 0000000..4f7d4e8
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php
@@ -0,0 +1,39 @@
+ 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(), array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->init = isset($subNodes['init']) ? $subNodes['init'] : array();
+        $this->cond = isset($subNodes['cond']) ? $subNodes['cond'] : array();
+        $this->loop = isset($subNodes['loop']) ? $subNodes['loop'] : array();
+        $this->stmts = isset($subNodes['stmts']) ? $subNodes['stmts'] : array();
+    }
+
+    public function getSubNodeNames() {
+        return array('init', 'cond', 'loop', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php
new file mode 100644
index 0000000..bec82e9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php
@@ -0,0 +1,43 @@
+ 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(), array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->expr = $expr;
+        $this->keyVar = isset($subNodes['keyVar']) ? $subNodes['keyVar'] : null;
+        $this->byRef = isset($subNodes['byRef']) ? $subNodes['byRef'] : false;
+        $this->valueVar = $valueVar;
+        $this->stmts = isset($subNodes['stmts']) ? $subNodes['stmts'] : array();
+    }
+
+    public function getSubNodeNames() {
+        return array('expr', 'keyVar', 'byRef', 'valueVar', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
new file mode 100644
index 0000000..10087d5
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
@@ -0,0 +1,60 @@
+ false  : Whether to return by reference
+     *                           'params'     => array(): Parameters
+     *                           'returnType' => null   : Return type
+     *                           'stmts'      => array(): Statements
+     * @param array  $attributes Additional attributes
+     */
+    public function __construct($name, array $subNodes = array(), array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->byRef = isset($subNodes['byRef']) ? $subNodes['byRef'] : false;
+        $this->name = $name;
+        $this->params = isset($subNodes['params']) ? $subNodes['params'] : array();
+        $this->returnType = isset($subNodes['returnType']) ? $subNodes['returnType'] : null;
+        $this->stmts = isset($subNodes['stmts']) ? $subNodes['stmts'] : array();
+    }
+
+    public function getSubNodeNames() {
+        return array('byRef', 'name', 'params', 'returnType', 'stmts');
+    }
+
+    public function returnsByRef() {
+        return $this->byRef;
+    }
+
+    public function getParams() {
+        return $this->params;
+    }
+
+    public function getReturnType() {
+        return $this->returnType;
+    }
+
+    public function getStmts() {
+        return $this->stmts;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php
new file mode 100644
index 0000000..21c040f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php
@@ -0,0 +1,26 @@
+vars = $vars;
+    }
+
+    public function getSubNodeNames() {
+        return array('vars');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php
new file mode 100644
index 0000000..97c46f9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php
@@ -0,0 +1,26 @@
+name = $name;
+    }
+
+    public function getSubNodeNames() {
+        return array('name');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php
new file mode 100644
index 0000000..c6c85cf
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php
@@ -0,0 +1,26 @@
+remaining = $remaining;
+    }
+
+    public function getSubNodeNames() {
+        return array('remaining');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php
new file mode 100644
index 0000000..3e11f24
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php
@@ -0,0 +1,39 @@
+ array(): Statements
+     *                              'elseifs' => array(): Elseif clauses
+     *                              'else'    => null   : Else clause
+     * @param array     $attributes Additional attributes
+     */
+    public function __construct(Node\Expr $cond, array $subNodes = array(), array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->cond = $cond;
+        $this->stmts = isset($subNodes['stmts']) ? $subNodes['stmts'] : array();
+        $this->elseifs = isset($subNodes['elseifs']) ? $subNodes['elseifs'] : array();
+        $this->else = isset($subNodes['else']) ? $subNodes['else'] : null;
+    }
+
+    public function getSubNodeNames() {
+        return array('cond', 'stmts', 'elseifs', 'else');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php
new file mode 100644
index 0000000..2d0ff98
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php
@@ -0,0 +1,26 @@
+value = $value;
+    }
+
+    public function getSubNodeNames() {
+        return array('value');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
new file mode 100644
index 0000000..e57bac3
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
@@ -0,0 +1,51 @@
+ true,
+        'parent' => true,
+        'static' => true,
+    );
+
+    /**
+     * Constructs a class node.
+     *
+     * @param string $name       Name
+     * @param array  $subNodes   Array of the following optional subnodes:
+     *                           'extends' => array(): Name of extended interfaces
+     *                           'stmts'   => array(): Statements
+     * @param array  $attributes Additional attributes
+     */
+    public function __construct($name, array $subNodes = array(), array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->name = $name;
+        $this->extends = isset($subNodes['extends']) ? $subNodes['extends'] : array();
+        $this->stmts = isset($subNodes['stmts']) ? $subNodes['stmts'] : array();
+
+        if (isset(self::$specialNames[strtolower($this->name)])) {
+            throw new Error(sprintf('Cannot use \'%s\' as class name as it is reserved', $this->name));
+        }
+
+        foreach ($this->extends as $interface) {
+            if (isset(self::$specialNames[strtolower($interface)])) {
+                throw new Error(
+                    sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface),
+                    $interface->getAttributes()
+                );
+            }
+        }
+    }
+
+    public function getSubNodeNames() {
+        return array('name', 'extends', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php
new file mode 100644
index 0000000..d30acb9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php
@@ -0,0 +1,26 @@
+name = $name;
+    }
+
+    public function getSubNodeNames() {
+        return array('name');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php
new file mode 100644
index 0000000..f08f4f3
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php
@@ -0,0 +1,52 @@
+ true,
+        'parent' => true,
+        'static' => true,
+    );
+
+    /**
+     * Constructs a namespace node.
+     *
+     * @param null|Node\Name $name       Name
+     * @param null|Node[]    $stmts      Statements
+     * @param array          $attributes Additional attributes
+     */
+    public function __construct(Node\Name $name = null, $stmts = array(), array $attributes = array()) {
+        parent::__construct(null, $attributes);
+        $this->name = $name;
+        $this->stmts = $stmts;
+
+        if (isset(self::$specialNames[strtolower($this->name)])) {
+            throw new Error(
+                sprintf('Cannot use \'%s\' as namespace name', $this->name),
+                $this->name->getAttributes()
+            );
+        }
+
+        if (null !== $this->stmts) {
+            foreach ($this->stmts as $stmt) {
+                if ($stmt instanceof self) {
+                    throw new Error('Namespace declarations cannot be nested', $stmt->getAttributes());
+                }
+            }
+        }
+    }
+
+    public function getSubNodeNames() {
+        return array('name', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php
new file mode 100644
index 0000000..58052f7
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php
@@ -0,0 +1,56 @@
+type = $type;
+        $this->props = $props;
+    }
+
+    public function getSubNodeNames() {
+        return array('type', 'props');
+    }
+
+    public function isPublic() {
+        return ($this->type & Class_::MODIFIER_PUBLIC) !== 0
+            || ($this->type & Class_::VISIBILITY_MODIFER_MASK) === 0;
+    }
+
+    public function isProtected() {
+        return (bool) ($this->type & Class_::MODIFIER_PROTECTED);
+    }
+
+    public function isPrivate() {
+        return (bool) ($this->type & Class_::MODIFIER_PRIVATE);
+    }
+
+    public function isStatic() {
+        return (bool) ($this->type & Class_::MODIFIER_STATIC);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php
new file mode 100644
index 0000000..f9748aa
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php
@@ -0,0 +1,30 @@
+name = $name;
+        $this->default = $default;
+    }
+
+    public function getSubNodeNames() {
+        return array('name', 'default');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php
new file mode 100644
index 0000000..67b139b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php
new file mode 100644
index 0000000..aab5174
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php
@@ -0,0 +1,30 @@
+name = $name;
+        $this->default = $default;
+    }
+
+    public function getSubNodeNames() {
+        return array('name', 'default');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php
new file mode 100644
index 0000000..49a3f70
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php
@@ -0,0 +1,26 @@
+vars = $vars;
+    }
+
+    public function getSubNodeNames() {
+        return array('vars');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php
new file mode 100644
index 0000000..7a7ec92
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php
@@ -0,0 +1,30 @@
+cond = $cond;
+        $this->cases = $cases;
+    }
+
+    public function getSubNodeNames() {
+        return array('cond', 'cases');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php
new file mode 100644
index 0000000..3e21986
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php
@@ -0,0 +1,26 @@
+expr = $expr;
+    }
+
+    public function getSubNodeNames() {
+        return array('expr');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php
new file mode 100644
index 0000000..b38f122
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php
@@ -0,0 +1,31 @@
+traits = $traits;
+        $this->adaptations = $adaptations;
+    }
+
+    public function getSubNodeNames() {
+        return array('traits', 'adaptations');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php
new file mode 100644
index 0000000..c6038c8
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php
@@ -0,0 +1,13 @@
+trait = $trait;
+        $this->method = $method;
+        $this->newModifier = $newModifier;
+        $this->newName = $newName;
+    }
+
+    public function getSubNodeNames() {
+        return array('trait', 'method', 'newModifier', 'newName');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php
new file mode 100644
index 0000000..b30c4f8
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php
@@ -0,0 +1,30 @@
+trait = $trait;
+        $this->method = $method;
+        $this->insteadof = $insteadof;
+    }
+
+    public function getSubNodeNames() {
+        return array('trait', 'method', 'insteadof');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
new file mode 100644
index 0000000..b96395b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
@@ -0,0 +1,25 @@
+name = $name;
+        $this->stmts = $stmts;
+    }
+
+    public function getSubNodeNames() {
+        return array('name', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
new file mode 100644
index 0000000..e3c1782
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
@@ -0,0 +1,39 @@
+stmts = $stmts;
+        $this->catches = $catches;
+        $this->finallyStmts = $finallyStmts;
+    }
+
+    public function getSubNodeNames() {
+        return array('stmts', 'catches', 'finallyStmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php
new file mode 100644
index 0000000..035d0bd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php
@@ -0,0 +1,26 @@
+vars = $vars;
+    }
+
+    public function getSubNodeNames() {
+        return array('vars');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php
new file mode 100644
index 0000000..d163c2f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php
@@ -0,0 +1,42 @@
+getLast();
+        }
+
+        if ('self' == strtolower($alias) || 'parent' == strtolower($alias)) {
+            throw new Error(sprintf(
+                'Cannot use %s as %s because \'%2$s\' is a special class name',
+                $name, $alias
+            ));
+        }
+
+        parent::__construct(null, $attributes);
+        $this->name = $name;
+        $this->alias = $alias;
+    }
+
+    public function getSubNodeNames() {
+        return array('name', 'alias');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php
new file mode 100644
index 0000000..25ef577
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php
@@ -0,0 +1,34 @@
+type = $type;
+        $this->uses = $uses;
+    }
+
+    public function getSubNodeNames() {
+        return array('type', 'uses');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php
new file mode 100644
index 0000000..7ca10e2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php
@@ -0,0 +1,30 @@
+cond = $cond;
+        $this->stmts = $stmts;
+    }
+
+    public function getSubNodeNames() {
+        return array('cond', 'stmts');
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
new file mode 100644
index 0000000..8940e2d
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
@@ -0,0 +1,121 @@
+attributes = $attributes;
+
+        if (null !== $subNodes) {
+            foreach ($subNodes as $name => $value) {
+                $this->$name = $value;
+            }
+            $this->subNodeNames = array_keys($subNodes);
+        }
+    }
+
+    /**
+     * Gets the type of the node.
+     *
+     * @return string Type of the node
+     */
+    public function getType() {
+        return strtr(substr(rtrim(get_class($this), '_'), 15), '\\', '_');
+    }
+
+    /**
+     * Gets the names of the sub nodes.
+     *
+     * @return array Names of sub nodes
+     */
+    public function getSubNodeNames() {
+        return $this->subNodeNames;
+    }
+
+    /**
+     * Gets line the node started in.
+     *
+     * @return int Line
+     */
+    public function getLine() {
+        return $this->getAttribute('startLine', -1);
+    }
+
+    /**
+     * Sets line the node started in.
+     *
+     * @param int $line Line
+     */
+    public function setLine($line) {
+        $this->setAttribute('startLine', (int) $line);
+    }
+
+    /**
+     * Gets the doc comment of the node.
+     *
+     * The doc comment has to be the last comment associated with the node.
+     *
+     * @return null|Comment\Doc Doc comment object or null
+     */
+    public function getDocComment() {
+        $comments = $this->getAttribute('comments');
+        if (!$comments) {
+            return null;
+        }
+
+        $lastComment = $comments[count($comments) - 1];
+        if (!$lastComment instanceof Comment\Doc) {
+            return null;
+        }
+
+        return $lastComment;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function setAttribute($key, $value) {
+        $this->attributes[$key] = $value;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function hasAttribute($key) {
+        return array_key_exists($key, $this->attributes);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function &getAttribute($key, $default = null) {
+        if (!array_key_exists($key, $this->attributes)) {
+            return $default;
+        } else {
+            return $this->attributes[$key];
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getAttributes() {
+        return $this->attributes;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php b/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php
new file mode 100644
index 0000000..57a6fe7
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php
@@ -0,0 +1,58 @@
+getType() . '(';
+
+            foreach ($node->getSubNodeNames() as $key) {
+                $r .= "\n    " . $key . ': ';
+
+                $value = $node->$key;
+                if (null === $value) {
+                    $r .= 'null';
+                } elseif (false === $value) {
+                    $r .= 'false';
+                } elseif (true === $value) {
+                    $r .= 'true';
+                } elseif (is_scalar($value)) {
+                    $r .= $value;
+                } else {
+                    $r .= str_replace("\n", "\n    ", $this->dump($value));
+                }
+            }
+        } elseif (is_array($node)) {
+            $r = 'array(';
+
+            foreach ($node as $key => $value) {
+                $r .= "\n    " . $key . ': ';
+
+                if (null === $value) {
+                    $r .= 'null';
+                } elseif (false === $value) {
+                    $r .= 'false';
+                } elseif (true === $value) {
+                    $r .= 'true';
+                } elseif (is_scalar($value)) {
+                    $r .= $value;
+                } else {
+                    $r .= str_replace("\n", "\n    ", $this->dump($value));
+                }
+            }
+        } else {
+            throw new \InvalidArgumentException('Can only dump nodes and arrays.');
+        }
+
+        return $r . "\n)";
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php
new file mode 100644
index 0000000..ba6857b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php
@@ -0,0 +1,156 @@
+visitors = array();
+        $this->cloneNodes = $cloneNodes;
+    }
+
+    /**
+     * Adds a visitor.
+     *
+     * @param NodeVisitor $visitor Visitor to add
+     */
+    public function addVisitor(NodeVisitor $visitor) {
+        $this->visitors[] = $visitor;
+    }
+
+    /**
+     * Removes an added visitor.
+     *
+     * @param NodeVisitor $visitor
+     */
+    public function removeVisitor(NodeVisitor $visitor) {
+        foreach ($this->visitors as $index => $storedVisitor) {
+            if ($storedVisitor === $visitor) {
+                unset($this->visitors[$index]);
+                break;
+            }
+        }
+    }
+
+    /**
+     * 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) {
+        foreach ($this->visitors as $visitor) {
+            if (null !== $return = $visitor->beforeTraverse($nodes)) {
+                $nodes = $return;
+            }
+        }
+
+        $nodes = $this->traverseArray($nodes);
+
+        foreach ($this->visitors as $visitor) {
+            if (null !== $return = $visitor->afterTraverse($nodes)) {
+                $nodes = $return;
+            }
+        }
+
+        return $nodes;
+    }
+
+    protected function traverseNode(Node $node) {
+        if ($this->cloneNodes) {
+            $node = clone $node;
+        }
+
+        foreach ($node->getSubNodeNames() as $name) {
+            $subNode =& $node->$name;
+
+            if (is_array($subNode)) {
+                $subNode = $this->traverseArray($subNode);
+            } elseif ($subNode instanceof Node) {
+                $traverseChildren = true;
+                foreach ($this->visitors as $visitor) {
+                    $return = $visitor->enterNode($subNode);
+                    if (self::DONT_TRAVERSE_CHILDREN === $return) {
+                        $traverseChildren = false;
+                    } else if (null !== $return) {
+                        $subNode = $return;
+                    }
+                }
+
+                if ($traverseChildren) {
+                    $subNode = $this->traverseNode($subNode);
+                }
+
+                foreach ($this->visitors as $visitor) {
+                    if (null !== $return = $visitor->leaveNode($subNode)) {
+                        $subNode = $return;
+                    }
+                }
+            }
+        }
+
+        return $node;
+    }
+
+    protected function traverseArray(array $nodes) {
+        $doNodes = array();
+
+        foreach ($nodes as $i => &$node) {
+            if (is_array($node)) {
+                $node = $this->traverseArray($node);
+            } elseif ($node instanceof Node) {
+                $traverseChildren = true;
+                foreach ($this->visitors as $visitor) {
+                    $return = $visitor->enterNode($node);
+                    if (self::DONT_TRAVERSE_CHILDREN === $return) {
+                        $traverseChildren = false;
+                    } else if (null !== $return) {
+                        $node = $return;
+                    }
+                }
+
+                if ($traverseChildren) {
+                    $node = $this->traverseNode($node);
+                }
+
+                foreach ($this->visitors as $visitor) {
+                    $return = $visitor->leaveNode($node);
+
+                    if (self::REMOVE_NODE === $return) {
+                        $doNodes[] = array($i, array());
+                        break;
+                    } elseif (is_array($return)) {
+                        $doNodes[] = array($i, $return);
+                        break;
+                    } elseif (null !== $return) {
+                        $node = $return;
+                    }
+                }
+            }
+        }
+
+        if (!empty($doNodes)) {
+            while (list($i, $replace) = array_pop($doNodes)) {
+                array_splice($nodes, $i, 1, $replace);
+            }
+        }
+
+        return $nodes;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php
new file mode 100644
index 0000000..0752de2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php
@@ -0,0 +1,48 @@
+ [aliasName => originalName]] */
+    protected $aliases;
+
+    public function beforeTraverse(array $nodes) {
+        $this->resetState();
+    }
+
+    public function enterNode(Node $node) {
+        if ($node instanceof Stmt\Namespace_) {
+            $this->resetState($node->name);
+        } elseif ($node instanceof Stmt\Use_) {
+            foreach ($node->uses as $use) {
+                $this->addAlias($use, $node->type);
+            }
+        } elseif ($node instanceof Stmt\Class_) {
+            if (null !== $node->extends) {
+                $node->extends = $this->resolveClassName($node->extends);
+            }
+
+            foreach ($node->implements as &$interface) {
+                $interface = $this->resolveClassName($interface);
+            }
+
+            if (null !== $node->name) {
+                $this->addNamespacedName($node);
+            }
+        } elseif ($node instanceof Stmt\Interface_) {
+            foreach ($node->extends as &$interface) {
+                $interface = $this->resolveClassName($interface);
+            }
+
+            $this->addNamespacedName($node);
+        } elseif ($node instanceof Stmt\Trait_) {
+            $this->addNamespacedName($node);
+        } elseif ($node instanceof Stmt\Function_) {
+            $this->addNamespacedName($node);
+            $this->resolveSignature($node);
+        } elseif ($node instanceof Stmt\ClassMethod
+                  || $node instanceof Expr\Closure
+        ) {
+            $this->resolveSignature($node);
+        } elseif ($node instanceof Stmt\Const_) {
+            foreach ($node->consts as $const) {
+                $this->addNamespacedName($const);
+            }
+        } 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_) {
+            $node->type = $this->resolveClassName($node->type);
+        } elseif ($node instanceof Expr\FuncCall) {
+            if ($node->name instanceof Name) {
+                $node->name = $this->resolveOtherName($node->name, Stmt\Use_::TYPE_FUNCTION);
+            }
+        } elseif ($node instanceof Expr\ConstFetch) {
+            $node->name = $this->resolveOtherName($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);
+                    }
+                }
+            }
+
+        }
+    }
+
+    protected function resetState(Name $namespace = null) {
+        $this->namespace = $namespace;
+        $this->aliases   = array(
+            Stmt\Use_::TYPE_NORMAL   => array(),
+            Stmt\Use_::TYPE_FUNCTION => array(),
+            Stmt\Use_::TYPE_CONSTANT => array(),
+        );
+    }
+
+    protected function addAlias(Stmt\UseUse $use, $type) {
+        // Constant names are case sensitive, everything else case insensitive
+        if ($type === Stmt\Use_::TYPE_CONSTANT) {
+            $aliasName = $use->alias;
+        } else {
+            $aliasName = strtolower($use->alias);
+        }
+
+        if (isset($this->aliases[$type][$aliasName])) {
+            $typeStringMap = array(
+                Stmt\Use_::TYPE_NORMAL   => '',
+                Stmt\Use_::TYPE_FUNCTION => 'function ',
+                Stmt\Use_::TYPE_CONSTANT => 'const ',
+            );
+
+            throw new Error(
+                sprintf(
+                    'Cannot use %s%s as %s because the name is already in use',
+                    $typeStringMap[$type], $use->name, $use->alias
+                ),
+                $use->getLine()
+            );
+        }
+
+        $this->aliases[$type][$aliasName] = $use->name;
+    }
+
+    /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure $node */
+    private function resolveSignature($node) {
+        foreach ($node->params as $param) {
+            if ($param->type instanceof Name) {
+                $param->type = $this->resolveClassName($param->type);
+            }
+        }
+        if ($node->returnType instanceof Name) {
+            $node->returnType = $this->resolveClassName($node->returnType);
+        }
+    }
+
+    protected function resolveClassName(Name $name) {
+        // don't resolve special class names
+        if (in_array(strtolower($name->toString()), array('self', 'parent', 'static'))) {
+            if (!$name->isUnqualified()) {
+                throw new Error(
+                    sprintf("'\\%s' is an invalid class name", $name->toString()),
+                    $name->getLine()
+                );
+            }
+
+            return $name;
+        }
+
+        // fully qualified names are already resolved
+        if ($name->isFullyQualified()) {
+            return $name;
+        }
+
+        $aliasName = strtolower($name->getFirst());
+        if (!$name->isRelative() && isset($this->aliases[Stmt\Use_::TYPE_NORMAL][$aliasName])) {
+            // resolve aliases (for non-relative names)
+            $name->setFirst($this->aliases[Stmt\Use_::TYPE_NORMAL][$aliasName]);
+        } elseif (null !== $this->namespace) {
+            // if no alias exists prepend current namespace
+            $name->prepend($this->namespace);
+        }
+
+        return new Name\FullyQualified($name->parts, $name->getAttributes());
+    }
+
+    protected function resolveOtherName(Name $name, $type) {
+        // fully qualified names are already resolved
+        if ($name->isFullyQualified()) {
+            return $name;
+        }
+
+        // resolve aliases for qualified names
+        $aliasName = strtolower($name->getFirst());
+        if ($name->isQualified() && isset($this->aliases[Stmt\Use_::TYPE_NORMAL][$aliasName])) {
+            $name->setFirst($this->aliases[Stmt\Use_::TYPE_NORMAL][$aliasName]);
+        } elseif ($name->isUnqualified()) {
+            if ($type === Stmt\Use_::TYPE_CONSTANT) {
+                // constant aliases are case-sensitive, function aliases case-insensitive
+                $aliasName = $name->getFirst();
+            }
+
+            if (isset($this->aliases[$type][$aliasName])) {
+                // resolve unqualified aliases
+                $name->set($this->aliases[$type][$aliasName]);
+            } else {
+                // unqualified, unaliased names cannot be resolved at compile-time
+                return $name;
+            }
+        } elseif (null !== $this->namespace) {
+            // if no alias exists prepend current namespace
+            $name->prepend($this->namespace);
+        }
+
+        return new Name\FullyQualified($name->parts, $name->getAttributes());
+    }
+
+    protected function addNamespacedName(Node $node) {
+        if (null !== $this->namespace) {
+            $node->namespacedName = clone $this->namespace;
+            $node->namespacedName->append($node->name);
+        } else {
+            $node->namespacedName = new Name($node->name, $node->getAttributes());
+        }
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php
new file mode 100644
index 0000000..3e1743a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php
@@ -0,0 +1,14 @@
+'",
+        "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_ENDSWITCH",
+        "T_CASE",
+        "T_DEFAULT",
+        "T_BREAK",
+        "T_CONTINUE",
+        "T_GOTO",
+        "T_FUNCTION",
+        "T_CONST",
+        "T_RETURN",
+        "T_TRY",
+        "T_CATCH",
+        "T_FINALLY",
+        "T_THROW",
+        "T_USE",
+        "T_INSTEADOF",
+        "T_GLOBAL",
+        "T_STATIC",
+        "T_ABSTRACT",
+        "T_FINAL",
+        "T_PRIVATE",
+        "T_PROTECTED",
+        "T_PUBLIC",
+        "T_VAR",
+        "T_UNSET",
+        "T_ISSET",
+        "T_EMPTY",
+        "T_HALT_COMPILER",
+        "T_CLASS",
+        "T_TRAIT",
+        "T_INTERFACE",
+        "T_EXTENDS",
+        "T_IMPLEMENTS",
+        "T_OBJECT_OPERATOR",
+        "T_DOUBLE_ARROW",
+        "T_LIST",
+        "T_ARRAY",
+        "T_CALLABLE",
+        "T_CLASS_C",
+        "T_TRAIT_C",
+        "T_METHOD_C",
+        "T_FUNC_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",
+        "';'",
+        "'{'",
+        "'}'",
+        "'('",
+        "')'",
+        "'$'",
+        "'`'",
+        "']'",
+        "'\"'"
+    );
+
+    protected $tokenToSymbol = array(
+            0,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,   52,  156,  157,  153,   51,   34,  157,
+          151,  152,   49,   46,    7,   47,   48,   50,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,   28,  148,
+           40,   14,   42,   27,   64,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,   66,  157,  155,   33,  157,  154,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  149,   32,  150,   54,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,    1,    2,    3,    4,
+            5,    6,    8,    9,   10,   11,   12,   13,   15,   16,
+           17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
+           29,   30,   31,   35,   36,   37,   38,   39,   41,   43,
+           44,   45,   53,   55,   56,   57,   58,   59,   60,   61,
+           62,   63,   65,   67,   68,   69,   70,   71,   72,   73,
+           74,   75,   76,   77,   78,   79,   80,  157,  157,   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,  157,  157,  157,  157,
+          157,  157,  138,  139,  140,  141,  142,  143,  144,  145,
+          146,  147
+    );
+
+    protected $action = array(
+          707,   60,   61,  420,   62,   63,-32766,-32766,-32766,-32766,
+           64,   65,   66,  223,  224,  225,  226,  227,  228,  229,
+          230,  231,    0,  232,  233,  234,  235,  236,  237,  238,
+          239,  240,  241,  242,  243,-32766,-32766,-32766,-32766,-32766,
+        -32767,-32767,-32767,-32767,  650,   67,   68,   58,  244,  245,
+          129,   69,  460,   70,  297,  298,   71,   72,   73,   74,
+           75,   76,   77,   78,-32766,   32,  305,   79,  411,  421,
+        -32766,-32766,-32766,  968,  969,  463, -118, 1061,  413,  696,
+          447,  464,   46,   27,  422,  366,  465,  438,  466,-32766,
+          467,-32766,-32766,  423,  220,  221,  222,   36,   37,  468,
+          424,  441,   38,  469,  221,  222,   80,-32766,  329,  359,
+          360,  491,  751,  207,  425,  470,  471,  472,  473,  474,
+          608,-32766,  207,   55,  678,  723,  475,  476,  477,  478,
+          128,  974,  975,  976,  977,  971,  972,  315,   84,   85,
+           86,  419,  491,  978,  973,  425,  440,  702,  618,  635,
+           47,  135,  340,  327,  301,  331,  443,   40,  313,   87,
+           88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
+           98,   99,  100,  101,  102,  103,  104,  105,  106,  107,
+          108,  109,   31,  308,-32766,-32766,-32766,-32766,-32766,  288,
+        -32766,  775,  776,  800,  805,  110,  650,  220,  221,  222,
+        -32766,-32766, 1027,-32766,-32766,-32766,  125,-32766,  439,-32766,
+          569,-32766,  917, -123,-32766,  286,  207,   35,-32766,-32766,
+        -32766,  428,  428,-32766,-32766,   22,  693,-32766,  211,  133,
+        -32766,  490,  752,-32766,  301, 1090,  470,  471,-32766, -119,
+          342, 1018,  694,  378,  917,  678,  723,  475,  476,  616,
+          791,   41,  111,  112,  113,  114,  115,  116,  117,  118,
+          119,  120,  121,  122,-32766,-32766,-32766,  132,-32766,-32766,
+        -32766, 1093,  781, 1095, 1094,-32766,  650,  220,  221,  222,
+        -32766,-32766,   57,-32766,-32766,-32766,  935,-32766,   54,-32766,
+        -32766,-32766,  856,  858,-32766,  358,  207,  248,-32766,-32766,
+        -32766,  428,-32766,-32766,-32766,   39,  300,-32766,  650,  388,
+        -32766,  490,-32766,-32766,  304,-32766,-32766,-32766,-32766,-32766,
+          630,-32766,  617,-32766,  917,  290,-32766,  782,  356,  357,
+        -32766,-32766,-32766,  428, 1068,-32766,-32766,  434,  207,-32766,
+          620, 1019,-32766,  490,  621,-32766,  302,  132,-32766,-32766,
+        -32766,  212,  606,  241,  242,  243,  917,  412,-32766,-32766,
+        -32766,  642, 1055,  326, -401,  126,  623,  470,  471,  244,
+          245,  124,  131,  416,  470,  471,  656,  723,  475,  476,
+        -32766,-32766,-32766,  678,  723,  475,  476,  222,  650,-32766,
+        -32766,-32766,-32766,  428,  810,-32766,-32766,-32766,  339,-32766,
+          303,-32766, -171,-32766,  207,  659,-32766, 1026,-32766,  477,
+        -32766,-32766,-32766,  428,-32766,-32766,-32766,  428,  445,-32766,
+          650,  213,-32766,  490,-32766,-32766,-32766,-32766,-32766,-32766,
+        -32766,-32766,-32766,-32766,  428,-32766,  917,  348,-32766,  428,
+         1083,-32766,-32766,-32766,-32766,  428, 1061,-32766,-32766,-32766,
+        -32766,-32766,-32766, 1027,-32766,  490, 1065,-32766,  289,  332,
+        -32766,-32766,-32766, 1083,  214,-32766,-32766,-32766,  917,-32766,
+        -32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,  249,-32767,
+        -32767,-32767,-32767,  347,-32766,  123,-32766,-32766,-32766,-32766,
+          299,  133,-32766,-32766,-32766,  220,  221,  222, 1025,  250,
+          650,  220,  221,  222,-32766,-32766,-32766,-32766,-32766,-32766,
+        -32766,-32766,  137,-32766,  207,-32766,  566,  980,-32766,  634,
+          207,  340,-32766,-32766,-32766,  428,-32766,-32766,-32766,  134,
+          575,-32766,  650,  314,-32766,  490,-32766,  716, 1024,-32766,
+        -32766,-32766,-32766,-32766,  538,-32766,  706,-32766,  244,  245,
+        -32766,  454,  581,-32766,-32766,-32766,-32766,  428,  639,-32766,
+        -32766,  449,   28,-32766,  917,  136,-32766,  490,  238,  239,
+          240,  110,-32766,-32766,-32766,  104,  105,  106,  308,-32766,
+          138,  367,  588,  589,  593,  650,  804,  638,  980,-32766,
+          615,  305,-32766,-32766,-32766,  346,-32766,   52,-32766,  650,
+        -32766, 1061,   50,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
+          428,   59,-32766,-32766,  470,  471,-32766,  917,  605,-32766,
+          490,  246,-32766,  678,  723,  475,  476,-32766,  650,  107,
+          108,  109,-32766,  308,  945,-32766,-32766,-32766,-32766,-32766,
+           56,-32766,   49,-32766,   51,  110,-32766,  775,  776,  917,
+        -32766,-32766,-32766,  428,   53,-32766,-32766,-32766,-32766,-32766,
+          529,  961,-32766,  490,  657,  625,  491,  815,  645,  425,
+        -32766,  528,  516,  512,  429,-32766,  340,  511,  435,  651,
+          433,  650,  667,  650, 1088,-32766,  669,  812,-32766,-32766,
+        -32766,-32766,-32766,  600,-32766,  938,-32766,  515,  607,-32766,
+          686,-32766,  917,-32766,-32766,-32766,  428,-32766,-32766,-32766,
+          590,  345,-32766,  650, 1083,-32766,  490,-32766,  559,  437,
+        -32766,-32766,-32766,-32766,-32766,  458,-32766,-32766,-32766, -168,
+          584,-32766,  307,  285,  531,-32766,-32766,-32766,  428,  572,
+        -32766,-32766,  336,  432,-32766,  725,  428,-32766,  490,  724,
+           42,  585,  979,  688,-32766,-32766,  338,  127,  330,  718,
+        -32766,   23,  811,  341,  521,    0,  650,  434, -308,    0,
+        -32766,  335,    0,-32766,-32766,-32766, -402,-32766, -401,-32766,
+          328,-32766,  915,  477,-32766,  690,-32766,    0,-32766,-32766,
+        -32766,  428,  318,-32766,-32766,    0,-32766,-32766, -300,  613,
+        -32766,  490,  650, -309,  381,  368,-32766,  334,-32766,-32766,
+        -32766,-32766,  416,-32766, 1056,-32766,  247,-32766,  809,  745,
+        -32766,  735,  746,  698,-32766,-32766,-32766,  428,  801,-32766,
+        -32766,  683,  663,-32766,  215,  216,-32766,  490,-32766,-32766,
+          217,  662,  218,  681,-32766,-32767,-32767,-32767,-32767,  102,
+          103,  104,  105,  106,  209,  754,  661,   -1,  660,  215,
+          216,  705,  968,  969,  692,  217,-32766,  218,  808,  627,
+          970,-32766,-32766,-32766,-32766,-32766,  626,  737,  739,  209,
+        -32766,-32766,-32766,  704,  691,  695,  689,  968,  969,  687,
+        -32766,-32766,-32766,-32766,-32766,  970,  697,   44,   45,-32766,
+          643,-32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,
+        -32767,-32767,  644,  640,  637,  632,  631,  629,  556,  624,
+          974,  975,  976,  977,  971,  972,  394,  619,   83,  130,
+          641,  591,  978,  973, 1066,  793,  959, 1058, 1040,  219,
+         1046,-32766, 1060,  556, 1062,  974,  975,  976,  977,  971,
+          972,  394, 1089,  453,  722,  985,  720,  978,  973,  412,
+          721, 1092,  931, 1087,  219,  326,-32766, 1091,  744,  470,
+          471,  743,  921,  470,  471, -104, -104, -104,  656,  723,
+          475,  476,  678,  723,  475,  476,  470,  471, -103, -103,
+         -103,   43,  470,  471,   34,  678,  723,  475,  476,  415,
+          339,  678,  723,  475,  476,  470,  471,   30,  958,   33,
+        -32766,  719,  412,  410,  678,  723,  475,  476,  326,  343,
+          312,  311,  470,  471,  816,-32766,-32766,-32766,  310,  309,
+         -104,  656,  723,  475,  476, -112, -112, -112,  296, -114,
+         -114, -114,  295, -103,-32766,  287,-32766,-32766,-32766,-32766,
+        -32766,-32766,  417,  339,  210,   82,   81,   48,  337,  896,
+          658,  826,  827,  828,  825,  824,  823,  818,  560,  984,
+          783,  925,  922,  612,  551,  461,  470,  471,  457,  455,
+          470,  471,-32766,-32766,-32766,  678,  723,  475,  476,  678,
+          723,  475,  476,  897,  450,  389,   25,   24, -120,  470,
+          471,-32766, 1057,-32766,-32766,-32766,-32766,-32766,  678,  723,
+          475,  476,  470,  471, -119, 1041,  470,  471, 1045,    0,
+         1059,  678,  723,  475,  476,  678,  723,  475,  476,  944,
+          470,  471,  597,  929,  470,  471,  930,  710,  927,  678,
+          723,  475,  476,  678,  723,  475,  476,  470,  471,  928,
+          628,  926,  470,  471,  679,    0,  678,  723,  475,  476,
+            0,  678,  723,  475,  476,    0,    0,    0,  712,    0,
+            0,    0,  919,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,  920
+    );
+
+    protected $actionCheck = array(
+            1,    2,    3,    4,    5,    6,   30,   31,   32,   33,
+           11,   12,   13,   30,   31,   32,   33,   34,   35,   36,
+           37,   38,    0,   40,   41,   42,   43,   44,   45,   46,
+           47,   48,   49,   50,   51,   30,   31,   32,   33,   34,
+           35,   36,   37,   38,   76,   46,   47,   66,   65,   66,
+            7,   52,    7,   54,   55,   56,   57,   58,   59,   60,
+           61,   62,   63,   64,    8,   66,   67,   68,   69,   70,
+            8,    9,   10,   74,   75,   76,   73,   78,  122,   80,
+            7,   82,   83,   84,   85,    7,   87,   28,   89,   27,
+           91,   29,   30,   94,    8,    9,   10,   98,   99,  100,
+          101,    7,  103,  104,    9,   10,  107,  151,  127,  110,
+          111,  143,   28,   27,  146,  112,  113,  118,  119,  120,
+           76,    1,   27,   66,  121,  122,  123,  124,  129,  130,
+          149,  132,  133,  134,  135,  136,  137,  138,    8,    9,
+           10,    7,  143,  144,  145,  146,    7,  148,  149,   28,
+          151,   66,  153,  154,   34,  156,   76,   27,    7,   29,
+           30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
+           40,   41,   42,   43,   44,   45,   46,   47,   48,   49,
+           50,   51,    7,   53,   30,   31,   32,   33,   34,    7,
+           70,  130,  131,  148,  150,   65,   76,    8,    9,   10,
+           80,    1,  122,   83,   84,   85,  149,   87,  149,   89,
+           86,   91,   12,  152,   94,  128,   27,    7,   98,   99,
+          100,  101,  101,  103,  104,  152,  148,  107,    7,  149,
+          110,  111,  148,    1,   34,  150,  112,  113,  118,  152,
+            7,  155,  148,   78,   12,  121,  122,  123,  124,   76,
+           78,   14,   15,   16,   17,   18,   19,   20,   21,   22,
+           23,   24,   25,   26,    8,    9,   10,  147,  148,  149,
+           70,   76,  152,   78,   79,  102,   76,    8,    9,   10,
+           80,  108,   66,   83,   84,   85,  152,   87,   66,   89,
+          117,   91,   55,   56,   94,    7,   27,   28,   98,   99,
+          100,  101,   70,  103,  104,  140,  141,  107,   76,   77,
+          110,  111,   80,    1,   34,   83,   84,   85,  118,   87,
+           28,   89,   76,   91,   12,  153,   94,  152,  101,  102,
+           98,   99,  100,  101,  152,  103,  104,  146,   27,  107,
+          149,  152,  110,  111,   28,    1,   34,  147,  148,  149,
+          118,   14,   90,   49,   50,   51,   12,  102,   30,   31,
+           32,   28,   78,  108,  127,  149,   28,  112,  113,   65,
+           66,  149,   28,  146,  112,  113,  121,  122,  123,  124,
+          148,  149,   70,  121,  122,  123,  124,   10,   76,    8,
+            9,   10,   80,  101,  148,   83,   84,   85,  143,   87,
+            7,   89,   78,   91,   27,  150,   94,   76,   27,  129,
+           98,   99,  100,  101,   70,  103,  104,  101,   76,  107,
+           76,   14,  110,  111,   80,    1,  102,   83,   84,   85,
+          118,   87,  108,   89,  101,   91,   12,  153,   94,  101,
+           81,  117,   98,   99,  100,  101,   78,  103,  104,    8,
+            9,  107,   30,  122,  110,  111,   76,    1,   34,   81,
+          148,  149,  118,   81,   14,    8,    9,   10,   12,   30,
+           31,   32,   33,   34,   35,   36,   37,   38,   14,   40,
+           41,   42,   43,   66,   27,   14,   29,   30,   31,   32,
+           34,  149,  148,  149,   70,    8,    9,   10,  139,   14,
+           76,    8,    9,   10,   80,   30,   31,   83,   84,   85,
+            1,   87,  149,   89,   27,   91,  153,  139,   94,   28,
+           27,  153,   98,   99,  100,  101,   70,  103,  104,  149,
+           81,  107,   76,   28,  110,  111,   80,   34,  156,   83,
+           84,   85,  118,   87,  127,   89,   28,   91,   65,   66,
+           94,   71,   72,    1,   98,   99,  100,  101,   28,  103,
+          104,   71,   72,  107,   12,   28,  110,  111,   46,   47,
+           48,   65,  148,  149,  118,   46,   47,   48,   53,   70,
+           96,   97,  105,  106,   73,   76,  148,  149,  139,   80,
+           88,   67,   83,   84,   85,   81,   87,   66,   89,   76,
+           91,   78,   66,   94,  148,  149,    1,   98,   99,  100,
+          101,   66,  103,  104,  112,  113,  107,   12,   76,  110,
+          111,  128,   70,  121,  122,  123,  124,  118,   76,   49,
+           50,   51,   80,   53,  111,   83,   84,   85,    1,   87,
+           66,   89,   66,   91,   66,   65,   94,  130,  131,   12,
+           98,   99,  100,  101,   66,  103,  104,  148,  149,  107,
+           76,  152,  110,  111,  148,  149,  143,  148,  149,  146,
+          118,   76,   76,   76,  151,   70,  153,   76,   76,   76,
+           76,   76,   76,   76,   76,   80,   76,   76,   83,   84,
+           85,    1,   87,   78,   89,   78,   91,   78,   78,   94,
+          148,  149,   12,   98,   99,  100,  101,   70,  103,  104,
+           78,   81,  107,   76,   81,  110,  111,   80,   93,   85,
+           83,   84,   85,  118,   87,  101,   89,    1,   91,   93,
+           95,   94,   93,   93,   93,   98,   99,  100,  101,   95,
+          103,  104,  126,  101,  107,  122,  101,  110,  111,  122,
+          128,  108,  139,  148,  149,  118,  109,  128,  127,  147,
+           70,  152,  148,  125,  146,   -1,   76,  146,  142,   -1,
+           80,  125,   -1,   83,   84,   85,  127,   87,  127,   89,
+          127,   91,  154,  129,   94,  148,  149,   -1,   98,   99,
+          100,  101,  142,  103,  104,   -1,   70,  107,  142,  142,
+          110,  111,   76,  142,  142,  142,   80,  142,  118,   83,
+           84,   85,  146,   87,  150,   89,   28,   91,  148,  148,
+           94,  148,  148,  148,   98,   99,  100,  101,  148,  103,
+          104,  148,  148,  107,   46,   47,  110,  111,  148,  149,
+           52,  148,   54,  148,  118,   40,   41,   42,   43,   44,
+           45,   46,   47,   48,   66,  148,  148,    0,  148,   46,
+           47,  148,   74,   75,  148,   52,   78,   54,  148,  148,
+           82,    8,    9,   10,  148,  149,  148,  148,  148,   66,
+            8,    9,   10,  148,  148,  148,  148,   74,   75,  148,
+           27,   78,   29,   30,   31,   82,  148,  148,  148,   27,
+          149,   29,   30,   31,   32,   33,   34,   35,   36,   37,
+           38,   39,  149,  149,  149,  149,  149,  149,  130,  149,
+          132,  133,  134,  135,  136,  137,  138,  149,  149,  149,
+          149,  155,  144,  145,  150,  150,  150,  150,  155,  151,
+          150,  153,  150,  130,  150,  132,  133,  134,  135,  136,
+          137,  138,  150,  150,  150,  155,  150,  144,  145,  102,
+          150,  150,  150,  155,  151,  108,  153,  150,  150,  112,
+          113,  150,  152,  112,  113,   95,   96,   97,  121,  122,
+          123,  124,  121,  122,  123,  124,  112,  113,   95,   96,
+           97,  151,  112,  113,  151,  121,  122,  123,  124,  151,
+          143,  121,  122,  123,  124,  112,  113,  151,  155,  151,
+          151,  150,  102,  151,  121,  122,  123,  124,  108,  151,
+          151,  151,  112,  113,  150,    8,    9,   10,  151,  151,
+          150,  121,  122,  123,  124,   71,   72,   73,  151,   71,
+           72,   73,  151,  150,   27,  151,   29,   30,   31,   32,
+           33,   34,  102,  143,  151,  151,  151,  151,  108,  152,
+          150,  111,  112,  113,  114,  115,  116,  117,  152,  152,
+          152,  152,  152,  152,  152,  152,  112,  113,  152,  152,
+          112,  113,    8,    9,   10,  121,  122,  123,  124,  121,
+          122,  123,  124,  152,  152,  152,  152,  152,  152,  112,
+          113,   27,  155,   29,   30,   31,   32,   33,  121,  122,
+          123,  124,  112,  113,  152,  155,  112,  113,  155,   -1,
+          155,  121,  122,  123,  124,  121,  122,  123,  124,  155,
+          112,  113,   92,  155,  112,  113,  155,  150,  155,  121,
+          122,  123,  124,  121,  122,  123,  124,  112,  113,  155,
+          150,  155,  112,  113,  150,   -1,  121,  122,  123,  124,
+           -1,  121,  122,  123,  124,   -1,   -1,   -1,  150,   -1,
+           -1,   -1,  150,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,  150
+    );
+
+    protected $actionBase = array(
+            0,  880,  893,  964,  857,  255,  910,  968, 1004, 1000,
+          124, 1040,    3,  262, 1018,  861, 1022,  502, 1035,  987,
+          874,  338,  292,  121,  333,  121,  316,  645,  645,  645,
+          120,  200,  456,  456,  509,  456,  552,  605,  637,  232,
+          344,  424,  312,  690,  690,  690,  690,  726,  726,  690,
+          690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+          690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+          690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+          690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+          690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+          690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+          690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+          690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+          690,  690,  690,  690,  690,  690,  690,  690,  690,   84,
+          748,  629,  622,  741,  738,  736,  735,  820,  640,  941,
+          802,  794,  537,  792,  790,  787,  786,  785,  803,  784,
+          776,  664,  130,  130,  130,  130,  130,  130,  130,  130,
+          130,  130,  130,   56,  493,  189,  269,   86,  441,  487,
+          487,  487,  487,  487,  487,  256,  256,  256,  256,  256,
+          256,  256,  256,  256,  256,  256,  256,  256,  256,  256,
+          256,  256,   95,  381,  381,  381,  377,  788,  311,  813,
+          813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+          813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+          813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+          813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+          813,   62,  -17,  -17,  863,  422,  457,  475, 1074,  328,
+         1017,  872,  872,  872,  872,  872,  -24,  154,    5,    5,
+            5,    5,  237,  805,  805,  805,  805,  439,  439,  439,
+          439,  804,  810,  806,  812,  280,  280,  654,  654,  524,
+          780,  529,  529,  522,  522,  523,  523,  523,  523,  523,
+          523,  523,  523,  523,  523,  -44,  324,  173,  859,   61,
+           61,   61,   61,  517,  517,  378,  359,  382,   80,  580,
+          580,  580,  304,  304,  304,   44,  227,  630,  380,  380,
+          380,  514,  613,  633,  342,  -32,  -32,  -32,  -32,  191,
+          779,  -32,  -32,  -32,   57,  165,  165,  195,  363,  644,
+          821,  635,  818,  438,  661,  -19,  666,  666,  666,  172,
+          642,  490,  480,  477,  656,   59,  172,   84,  331,  519,
+          216,  525,  737,  584,  684,  710,   78,   94,  417,  516,
+          222,  284,   73,  708,  693,  916,  907,  182,   85,  649,
+          525,  525,  525,  175,  449,  222,   87,  483,  483,  483,
+          483,  483,  483,  483,  483,  680,   45,  134,  720,  246,
+          503,  843,  597,  856,  856,  595,  607,  597,  632,  503,
+          906,  906,  906,  906,  503,  607,  856,  856,  503,  524,
+          856,  210,  503,  646,  607,  638,  638,  906,  728,  721,
+          597,  619,  616,  856,  856,  856,  616,  595,  503,  906,
+          643,  612,  221,  856,  906,  505,  505,  643,  503,  505,
+          632,  505,   22,  518,  576,  840,  905,  848,  601,  778,
+          627,  623,  891,  887,  904,  596,  604,  894,  858,  618,
+          716,  602,  471,  536,  578,  531,  588,  650,  574,  653,
+          642,  621,  506,  506,  506,  651,  665,  651,  506,  506,
+          506,  506,  506,  506,  506,  506,  996,  662,  626,  631,
+          634,  713,  337,  618,  641,  407,  770,  618,  920,  943,
+          628,  603,  878,  922,  651,  994,  749,   43,  450,  877,
+          625,  606,  651,  870,  651,  768,  651,  919,  608,  811,
+          618,  506,  918,  983,  981,  978,  974,  965,  963,  960,
+          947,  545,  853,  683,  942,  151,  903,  656,  663,  610,
+          675,  233,  808,  651,  651,  767,  779,  651,  766,  707,
+          750,  609,  671,  927,  800,  613,  926,  651,  624,  783,
+          233,  491,  511,  946,  674,  862,  615,  917,  868,  765,
+          464,  817,  530,  695,  945,  944,  962,  730,  764,  781,
+          485,  542,  617,  620,  751,  869,  729,  921,  636,  657,
+          647,  639,  763,  611,  923,  673,  614,  670,    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,   -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,   -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,  130,  130,  130,  130,  130,
+          130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
+          130,  130,  130,  130,  130,  130,  130,  130,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  130,
+          -17,  -17,  -17,  -17,  130,  -17,  -17,  -17,  -17,  -17,
+          -17,  130,  130,  130,  130,  130,  130,  130,  130,  130,
+          130,  130,  130,  130,  130,  130,  130,  130,  -17,  130,
+          130,  130,  -17,  523,  -17,  523,  523,  523,  523,  523,
+          523,  523,  523,  523,  523,  523,  523,  523,  523,  523,
+          523,  523,  523,  523,  523,  523,  523,  523,  523,  523,
+          523,  523,  523,  523,  523,  523,  523,  523,  523,  523,
+          523,  523,  523,  523,  523,  523,  523,  130,    0,    0,
+          130,  -17,  130,  -17,  130,  -17,  130,  130,  130,  130,
+          130,  130,  -17,  -17,  -17,  -17,  -17,  -17,    0,  580,
+          580,  580,  580,  -17,  -17,  -17,  -17,  950,  950,  950,
+          950,  523,  523,  523,  523,  523,  523,  580,  580,  304,
+          304,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,  523,  950,  950,  523,  -32,  -32,  -32,  -32,  -32,
+          -32,  165,  165,  165,  284,    0,    0,    0,    0,    0,
+            0,  -32,  607,  165,  368,  368,  368,  165,  165,  165,
+          284,    0,    0,    0,    0,  607,  368,    0,    0,    0,
+          856,    0,    0,    0,  368,  484,  484,  484,  484,  233,
+          222,    0,  607,  607,  607,    0,  619,    0,    0,    0,
+          856,    0,    0,    0,    0,    0,    0,  506,   43,  878,
+          139,  288,    0,    0,    0,    0,    0,    0,    0,  288,
+          288,  393,  393,    0,    0,  545,  506,  506,  506,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,  139,    0,    0,  233
+    );
+
+    protected $actionDefault = array(
+            3,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,  428,  428,32767,  385,32767,32767,32767,32767,
+        32767,32767,32767,  189,  189,  189,32767,32767,32767,  417,
+          417,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+        32767,32767,32767,32767,32767,  271,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,32767,32767,
+        32767,  277,  433,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,  252,  253,  255,  256,  188,  418,  140,  278,
+          432,  187,  142,  216,  389,32767,32767,32767,  218,   26,
+          151,   96,  388,  186,  127,  270,  272,  217,  193,  198,
+          199,  200,  201,  202,  203,  204,  205,  206,  207,  208,
+          209,  192,  343,  249,  248,  247,  345,32767,  344,  382,
+          382,  385,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,  214,  371,  370,  215,  341,  219,  342,  221,  346,
+          220,  237,  238,  235,  236,  239,  348,  347,  364,  365,
+          362,  363,  191,  240,  241,  242,  243,  366,  367,  368,
+          369,  173,  173,  173,  173,32767,32767,  427,  427,32767,
+        32767,  228,  229,  355,  356,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  174,32767,32767,  131,
+          131,  131,  131,  131,32767,32767,32767,32767,32767,  223,
+          224,  222,  350,  351,  349,32767,32767,  317,32767,32767,
+        32767,32767,32767,  319,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,  390,  318,32767,32767,32767,32767,
+        32767,32767,32767,32767,  403,  306,32767,32767,32767,32767,
+          299,  115,  117,   65,  374,32767,32767,32767,32767,32767,
+          408,  233,32767,32767,32767,32767,32767,32767,  440,32767,
+          403,32767,32767,32767,32767,32767,32767,32767,32767,  246,
+          225,  226,  227,32767,32767,  407,  401,  358,  359,  360,
+          361,  352,  353,  354,  357,32767,32767,32767,32767,32767,
+           69,  314,32767,  320,  320,32767,32767,32767,32767,   69,
+        32767,32767,32767,32767,   69,32767,  406,  405,   69,32767,
+          300,  384,   69,   82,32767,   80,   80,32767,  101,  101,
+        32767,32767,   84,  380,  396,32767,   84,32767,   69,32767,
+          288,   71,  384,32767,32767,  133,  133,  288,   69,  133,
+        32767,  133,32767,    4,  324,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  301,
+        32767,32767,32767,  267,  268,  377,  392,32767,  393,32767,
+          299,32767,  231,  232,  234,  211,32767,  213,  257,  258,
+          259,  260,  261,  262,  263,  265,32767,32767,  304,  307,
+        32767,32767,32767,    6,   20,  150,32767,  302,32767,  196,
+        32767,32767,32767,32767,  435,32767,32767,  190,32767,32767,
+           22,32767,  146,32767,   67,32767,  425,32767,32767,  401,
+          303,  230,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,  402,32767,32767,32767,  122,32767,  337,32767,32767,
+        32767,   83,32767,  194,  141,32767,32767,  434,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,   68,32767,32767,
+           85,32767,32767,  401,32767,32767,32767,32767,32767,32767,
+          185,32767,32767,32767,32767,32767,  401,32767,32767,32767,
+          126,32767,32767,32767,32767,32767,32767,32767,    4,32767,
+          167,32767,32767,32767,32767,32767,32767,32767,   28,   28,
+            3,   28,  109,   28,  153,    3,  101,  101,   62,  153,
+           28,  153,  153,   28,   28,   28,   28,   28,  160,   28,
+           28,   28,   28,   28,   28,   28
+    );
+
+    protected $goto = array(
+          168,  168,  142,  142,  147,  142,  143,  144,  145,  150,
+          152,  188,  170,  166,  166,  166,  166,  147,  147,  167,
+          167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
+          162,  163,  164,  165,  185,  141,  186,  492,  493,  371,
+          494,  498,  499,  500,  501,  502,  503,  504,  505,  843,
+          146,  148,  149,  151,  173,  178,  187,  203,  251,  254,
+          256,  258,  260,  261,  262,  263,  264,  265,  273,  274,
+          275,  276,  291,  292,  319,  320,  321,  390,  391,  392,
+          541,  189,  190,  191,  192,  193,  194,  195,  196,  197,
+          198,  199,  200,  201,  153,  154,  155,  169,  156,  171,
+          157,  204,  172,  158,  159,  160,  205,  161,  139,  557,
+          700,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+          557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+          557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+          557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+          557,  557,  557,  496,  496,  496,  496,  496,  496,  379,
+          653,  653,  653,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  507,  570,  594,  507,  753,  738,  736,
+          734,  736,  622,  510,  762,  757,  785,  430,  430,  430,
+          430,  430,  430,  767,  767, 1072, 1072,  430,  430,  430,
+          430,  430,  430,  430,  430,  430,  430,  946,  519,  350,
+          946,  774,  774,  774,  774,  774,  774,  543,  544,  545,
+          546,  547,  548,  549,  550,  552,  579,  609,  599,  822,
+          409,  604,  282,  369,  283,  284,  530,  732,  732,  732,
+          732,  537,    5,  727,  733,  603,  558,    6,  558,  558,
+          558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
+          558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
+          558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
+          558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
+          981, 1076,  981,  981,  981,  981,  981,  981,  981,  981,
+          981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
+          981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
+          981,  981,  981,  981,  981,  981,  981,  981,  981,  981,
+          981,  981,  981,  981,  654,  654,  654,  655,  655,  655,
+          573,  576,  614,  176,  508,  957,  956,  508,  179,  180,
+          181,  397,  398,  399,  400,  175,  202,  206,  208,  255,
+          257,  259,  266,  267,  268,  269,  270,  271,  277,  278,
+          279,  280,  293,  294,  322,  323,  324,  401,  402,  403,
+          404,  177,  182,  252,  253,  183,  184,    9,  333,    3,
+          372,   10,  317,  580,  353,  408,  351,  352,   11,  587,
+         1044,    1,   12,   13,    2,   14, 1032,    7,   15,   16,
+           17,   18,   19,   20,  396,  596,  536,  536,  563,  532,
+          939,  513,  383,  384,  534,  534,  495,  497,  524,  539,
+          564,  567,  577,  583,  513,  962, 1069,  595,  386, 1051,
+         1082, 1082, 1051,  890,  900,   26,   21,  365,  664,  633,
+          841,  513,  513,  513,  771,  509, 1085, 1082,  509,  780,
+          789,  553, 1067, 1067, 1067,  380,  380,  380,  373, 1085,
+         1085,  542,  522,   29, 1050,  518,  533,  380,  592,  982,
+          405, 1052,  942,  943, 1052,  395,  939,  932,  518,  518,
+          937,  446,  451,  670,  568,  794,  741, 1029,  459,  940,
+         1043,  940,  601,  830,    0,    0,    0,    0,    0,  941,
+            0,  513,    0,    0,    0,    0,    0,    0,    0,    0,
+          517,    0,    0,    0,    0,    0,    0,    0,    0,  540,
+            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,    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,
+          523
+    );
+
+    protected $gotoCheck = array(
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   39,
+           32,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+           39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+           39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+           39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+           39,   39,   39,   95,   95,   95,   95,   95,   95,    5,
+            6,    6,    6,   95,   95,   95,   95,   95,   95,   95,
+           95,   95,   95,   95,   22,   22,   95,    6,    6,    6,
+            6,    6,    6,    6,    6,    6,   63,   39,   39,   39,
+           39,   39,   39,   56,   56,   56,   56,   39,   39,   39,
+           39,   39,   39,   39,   39,   39,   39,   39,   79,   51,
+           39,   39,   39,   39,   39,   39,   39,   88,   88,   88,
+           88,   88,   88,   88,   88,   88,   88,   39,   43,   76,
+           76,   43,   47,   43,   47,   47,    5,   39,   39,   39,
+           39,   87,    2,   39,   39,   39,   98,    2,   98,   98,
+           98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+           98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+           98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+           98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+          105,  119,  105,  105,  105,  105,  105,  105,  105,  105,
+          105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+          105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+          105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+          105,  105,  105,  105,    7,    7,    7,    8,    8,    8,
+           42,   42,   42,   13,   98,  103,  103,   98,   13,   13,
+           13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+           13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+           13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+           13,   13,   13,   13,   13,   13,   13,   14,  104,   14,
+           29,   14,  104,   49,   49,   49,   51,   51,   14,  107,
+           61,   14,   14,   14,   14,   14,  111,   14,   14,   14,
+           14,   14,   14,   14,   33,   33,   33,   33,   33,   33,
+           61,    4,    9,    9,   33,   33,   33,   33,   33,   33,
+           33,   33,   33,   33,    4,   16,  117,   31,   30,   97,
+          120,  120,   97,   80,   16,   16,   16,   16,   11,   53,
+           79,    4,    4,    4,   58,  101,  120,  120,  101,   60,
+           64,   16,   97,   97,   97,  102,  102,  102,   40,  120,
+          120,   26,   40,   16,   97,   26,   40,  102,   16,  106,
+           10,   96,   61,   61,   96,  102,   61,   91,   26,   26,
+           93,   45,   40,   12,   46,   65,   50,  110,   86,   61,
+           61,   61,   40,   78,   -1,   -1,   -1,   -1,   -1,   61,
+           -1,    4,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+            4,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    4,
+           -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,
+           79
+    );
+
+    protected $gotoBase = array(
+            0,    0, -378,    0,   95, -180,  156,  330,  333,   66,
+           63,   90,   53,  136, -232,    0,   24,    0,    0,    0,
+            0,    0,  130,    0,    0,  -30,  441,    0,    0,  344,
+          142,  151,   85,  129,    0,    0,    0,    0,    0,  -98,
+           44,    0,   30, -228,    0,   55,   48, -397,    0,   57,
+           49, -230,    0,   82,    0,    0,  -92,    0,  141,    0,
+          145,   56,    0,  155,   94,   54,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,  -77,    0,   43,  161,
+          135,    0,    0,    0,    0,    0,   41,  208,  167,    0,
+            0,   73,    0,   71,    0, -132,  176,  134,   39,    0,
+            0,  150,  137,   16,   61,   83,  111,  189,    0,    0,
+           45,  195,    0,    0,    0,    0,    0,  148,    0,  256,
+          124,    0
+    );
+
+    protected $gotoDefault = array(
+        -32768,  462,    4,  648,  479,  514,  675,  676,  677,  375,
+          374,  665,  671,  174,    8,  673,  891,  361,  680,  362,
+          582,  682,  526,  684,  685,  140,  480,  376,  377,  527,
+          385,  571,  699,  272,  382,  701,  363,  703,  709,  364,
+          602,  586,  554,  598,  481,  442,  565,  281,  535,  561,
+          740,  349,  748,  636,  756,  759,  482,  555,  770,  448,
+          778,  967,  393,  784,  790,  795,  798,  418,  406,  578,
+          802,  803,  325,  807,  610,  611,  821,  306,  829,  842,
+          414,  910,  912,  483,  484,  520,  456,  506,  525,  485,
+          933,  436,  407,  936,  486,  487,  426,  427,  954,  951,
+          355, 1037,  354,  444,  316, 1022, 1021,  574,  986,  452,
+         1075, 1033,  344,  488,  489,  370,  387, 1070,  431, 1077,
+         1084,  562
+    );
+
+    protected $ruleToNonTerminal = array(
+            0,    1,    2,    2,    4,    4,    5,    3,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    9,    9,
+           11,   11,   11,   11,   10,   10,   12,   14,   14,   15,
+           15,   15,   15,    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,   36,   36,   38,   37,   37,   30,   30,   40,
+           40,   41,   41,    7,    8,    8,    8,   44,   44,   44,
+           45,   45,   48,   48,   46,   46,   49,   49,   23,   23,
+           32,   32,   35,   35,   34,   34,   50,   24,   24,   24,
+           24,   51,   51,   52,   52,   53,   53,   21,   21,   17,
+           17,   54,   19,   19,   55,   18,   18,   20,   20,   31,
+           31,   31,   42,   42,   57,   57,   58,   58,   60,   60,
+           60,   59,   59,   43,   43,   61,   61,   61,   62,   62,
+           63,   63,   63,   27,   27,   64,   64,   64,   28,   28,
+           65,   65,   47,   47,   66,   66,   66,   66,   71,   71,
+           72,   72,   73,   73,   73,   73,   74,   75,   75,   70,
+           70,   67,   67,   69,   69,   77,   77,   76,   76,   76,
+           76,   76,   76,   68,   68,   78,   78,   29,   29,   22,
+           22,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+           25,   25,   25,   25,   25,   16,   16,   26,   26,   83,
+           83,   84,   84,   84,   84,   90,   79,   79,   86,   86,
+           92,   92,   93,   94,   94,   94,   94,   94,   94,   98,
+           98,   39,   39,   39,   80,   80,   99,   99,   95,   95,
+          100,  100,  100,  100,   81,   81,   81,   85,   85,   85,
+           91,   91,  105,  105,  105,  105,  105,  105,  105,  105,
+          105,  105,  105,  105,  105,   13,   13,   13,   13,   13,
+           13,  108,  108,  108,  108,  108,  108,  108,  108,  108,
+          108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
+          108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
+          108,  108,  108,  108,   89,   89,   82,   82,   82,   82,
+          106,  106,  107,  107,  110,  110,  109,  109,  111,  111,
+           33,   33,   33,   33,  113,  113,  112,  112,  112,  112,
+          112,  114,  114,   97,   97,  101,  101,   96,   96,  115,
+          115,  115,  115,  102,  102,  102,  102,   88,   88,  103,
+          103,  103,   56,  116,  116,  117,  117,  117,   87,   87,
+          118,  118,  119,  119,  119,  119,  104,  104,  104,  104,
+          120,  120,  120,  120,  120,  120,  120,  121,  121,  121
+    );
+
+    protected $ruleToLength = array(
+            1,    1,    2,    0,    1,    3,    1,    1,    1,    1,
+            1,    3,    5,    4,    3,    4,    4,    3,    3,    1,
+            1,    3,    2,    4,    3,    1,    3,    2,    0,    1,
+            1,    1,    1,    3,    5,    8,    3,    5,    9,    3,
+            2,    3,    2,    3,    2,    3,    2,    3,    3,    3,
+            1,    2,    5,    7,    9,    5,    1,    6,    3,    3,
+            2,    1,    0,    2,    8,    0,    4,    1,    3,    0,
+            1,    0,    1,   10,    7,    6,    5,    1,    2,    2,
+            0,    2,    0,    2,    0,    2,    1,    3,    1,    4,
+            1,    4,    1,    4,    1,    3,    3,    3,    4,    4,
+            5,    0,    2,    4,    3,    1,    1,    1,    4,    0,
+            2,    3,    0,    2,    4,    0,    2,    0,    3,    1,
+            2,    1,    1,    0,    1,    3,    4,    6,    1,    1,
+            1,    0,    1,    0,    2,    2,    3,    3,    1,    3,
+            1,    2,    2,    3,    1,    1,    2,    4,    3,    1,
+            1,    3,    2,    0,    3,    3,    9,    3,    1,    3,
+            0,    2,    4,    5,    4,    4,    3,    1,    1,    1,
+            3,    1,    1,    0,    1,    1,    2,    1,    1,    1,
+            1,    1,    1,    1,    3,    1,    3,    3,    1,    0,
+            1,    1,    3,    3,    4,    4,    1,    2,    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,    2,    2,    2,    2,    3,    3,    3,    3,    3,
+            3,    3,    3,    3,    3,    1,    3,    5,    4,    3,
+            4,    4,    2,    2,    2,    2,    2,    2,    2,    2,
+            2,    2,    2,    2,    2,    2,    1,    1,    1,    3,
+            2,    1,    2,   10,   11,    3,    3,    2,    4,    4,
+            3,    4,    4,    4,    4,    7,    3,    2,    0,    4,
+            1,    3,    2,    2,    4,    6,    2,    2,    4,    1,
+            1,    1,    2,    3,    1,    1,    1,    1,    1,    1,
+            3,    3,    4,    4,    0,    2,    1,    0,    1,    1,
+            0,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    3,    2,    1,    3,    1,    4,    3,
+            1,    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,
+            5,    4,    4,    3,    1,    3,    1,    1,    3,    3,
+            1,    1,    0,    2,    0,    1,    3,    1,    3,    1,
+            1,    1,    1,    1,    6,    4,    3,    4,    2,    4,
+            4,    1,    3,    1,    2,    1,    1,    4,    1,    3,
+            6,    4,    4,    4,    4,    1,    4,    0,    1,    1,
+            3,    1,    4,    3,    1,    1,    1,    0,    0,    2,
+            3,    1,    3,    1,    4,    2,    2,    2,    1,    2,
+            1,    4,    3,    3,    3,    6,    3,    1,    1,    1
+    );
+
+    protected function reduceRule0() {
+        $this->semValue = $this->semStack[$this->stackPos];
+    }
+
+    protected function reduceRule1() {
+         $this->semValue = $this->handleNamespaces($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule2() {
+         if (is_array($this->semStack[$this->stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$this->stackPos-(2-1)], $this->semStack[$this->stackPos-(2-2)]); } else { $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)]; };
+    }
+
+    protected function reduceRule3() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule4() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule5() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule6() {
+         $this->semValue = new Name($this->semStack[$this->stackPos-(1-1)], $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule7() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule8() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule9() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule10() {
+         $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule11() {
+         $this->semValue = new Stmt\Namespace_($this->semStack[$this->stackPos-(3-2)], null, $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule12() {
+         $this->semValue = new Stmt\Namespace_($this->semStack[$this->stackPos-(5-2)], $this->semStack[$this->stackPos-(5-4)], $this->startAttributeStack[$this->stackPos-(5-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule13() {
+         $this->semValue = new Stmt\Namespace_(null, $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule14() {
+         $this->semValue = new Stmt\Use_($this->semStack[$this->stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule15() {
+         $this->semValue = new Stmt\Use_($this->semStack[$this->stackPos-(4-3)], Stmt\Use_::TYPE_FUNCTION, $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule16() {
+         $this->semValue = new Stmt\Use_($this->semStack[$this->stackPos-(4-3)], Stmt\Use_::TYPE_CONSTANT, $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule17() {
+         $this->semValue = new Stmt\Const_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule18() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule19() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule20() {
+         $this->semValue = new Stmt\UseUse($this->semStack[$this->stackPos-(1-1)], null, $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule21() {
+         $this->semValue = new Stmt\UseUse($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule22() {
+         $this->semValue = new Stmt\UseUse($this->semStack[$this->stackPos-(2-2)], null, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule23() {
+         $this->semValue = new Stmt\UseUse($this->semStack[$this->stackPos-(4-2)], $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule24() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule25() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule26() {
+         $this->semValue = new Node\Const_($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule27() {
+         if (is_array($this->semStack[$this->stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$this->stackPos-(2-1)], $this->semStack[$this->stackPos-(2-2)]); } else { $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)]; };
+    }
+
+    protected function reduceRule28() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule29() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule30() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule31() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule32() {
+         throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule33() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule34() {
+         $this->semValue = new Stmt\If_($this->semStack[$this->stackPos-(5-2)], array('stmts' => is_array($this->semStack[$this->stackPos-(5-3)]) ? $this->semStack[$this->stackPos-(5-3)] : array($this->semStack[$this->stackPos-(5-3)]), 'elseifs' => $this->semStack[$this->stackPos-(5-4)], 'else' => $this->semStack[$this->stackPos-(5-5)]), $this->startAttributeStack[$this->stackPos-(5-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule35() {
+         $this->semValue = new Stmt\If_($this->semStack[$this->stackPos-(8-2)], array('stmts' => $this->semStack[$this->stackPos-(8-4)], 'elseifs' => $this->semStack[$this->stackPos-(8-5)], 'else' => $this->semStack[$this->stackPos-(8-6)]), $this->startAttributeStack[$this->stackPos-(8-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule36() {
+         $this->semValue = new Stmt\While_($this->semStack[$this->stackPos-(3-2)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule37() {
+         $this->semValue = new Stmt\Do_($this->semStack[$this->stackPos-(5-4)], is_array($this->semStack[$this->stackPos-(5-2)]) ? $this->semStack[$this->stackPos-(5-2)] : array($this->semStack[$this->stackPos-(5-2)]), $this->startAttributeStack[$this->stackPos-(5-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule38() {
+         $this->semValue = new Stmt\For_(array('init' => $this->semStack[$this->stackPos-(9-3)], 'cond' => $this->semStack[$this->stackPos-(9-5)], 'loop' => $this->semStack[$this->stackPos-(9-7)], 'stmts' => $this->semStack[$this->stackPos-(9-9)]), $this->startAttributeStack[$this->stackPos-(9-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule39() {
+         $this->semValue = new Stmt\Switch_($this->semStack[$this->stackPos-(3-2)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule40() {
+         $this->semValue = new Stmt\Break_(null, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule41() {
+         $this->semValue = new Stmt\Break_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule42() {
+         $this->semValue = new Stmt\Continue_(null, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule43() {
+         $this->semValue = new Stmt\Continue_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule44() {
+         $this->semValue = new Stmt\Return_(null, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule45() {
+         $this->semValue = new Stmt\Return_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule46() {
+         $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule47() {
+         $this->semValue = new Stmt\Global_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule48() {
+         $this->semValue = new Stmt\Static_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule49() {
+         $this->semValue = new Stmt\Echo_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule50() {
+         $this->semValue = new Stmt\InlineHTML($this->semStack[$this->stackPos-(1-1)], $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule51() {
+         $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule52() {
+         $this->semValue = new Stmt\Unset_($this->semStack[$this->stackPos-(5-3)], $this->startAttributeStack[$this->stackPos-(5-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule53() {
+         $this->semValue = new Stmt\Foreach_($this->semStack[$this->stackPos-(7-3)], $this->semStack[$this->stackPos-(7-5)][0], array('keyVar' => null, 'byRef' => $this->semStack[$this->stackPos-(7-5)][1], 'stmts' => $this->semStack[$this->stackPos-(7-7)]), $this->startAttributeStack[$this->stackPos-(7-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule54() {
+         $this->semValue = new Stmt\Foreach_($this->semStack[$this->stackPos-(9-3)], $this->semStack[$this->stackPos-(9-7)][0], array('keyVar' => $this->semStack[$this->stackPos-(9-5)], 'byRef' => $this->semStack[$this->stackPos-(9-7)][1], 'stmts' => $this->semStack[$this->stackPos-(9-9)]), $this->startAttributeStack[$this->stackPos-(9-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule55() {
+         $this->semValue = new Stmt\Declare_($this->semStack[$this->stackPos-(5-3)], $this->semStack[$this->stackPos-(5-5)], $this->startAttributeStack[$this->stackPos-(5-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule56() {
+         $this->semValue = array(); /* means: no statement */
+    }
+
+    protected function reduceRule57() {
+         $this->semValue = new Stmt\TryCatch($this->semStack[$this->stackPos-(6-3)], $this->semStack[$this->stackPos-(6-5)], $this->semStack[$this->stackPos-(6-6)], $this->startAttributeStack[$this->stackPos-(6-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule58() {
+         $this->semValue = new Stmt\Throw_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule59() {
+         $this->semValue = new Stmt\Goto_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule60() {
+         $this->semValue = new Stmt\Label($this->semStack[$this->stackPos-(2-1)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule61() {
+         $this->semValue = array(); /* means: no statement */
+    }
+
+    protected function reduceRule62() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule63() {
+         $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule64() {
+         $this->semValue = new Stmt\Catch_($this->semStack[$this->stackPos-(8-3)], substr($this->semStack[$this->stackPos-(8-4)], 1), $this->semStack[$this->stackPos-(8-7)], $this->startAttributeStack[$this->stackPos-(8-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule65() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule66() {
+         $this->semValue = $this->semStack[$this->stackPos-(4-3)];
+    }
+
+    protected function reduceRule67() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule68() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule69() {
+         $this->semValue = false;
+    }
+
+    protected function reduceRule70() {
+         $this->semValue = true;
+    }
+
+    protected function reduceRule71() {
+         $this->semValue = false;
+    }
+
+    protected function reduceRule72() {
+         $this->semValue = true;
+    }
+
+    protected function reduceRule73() {
+         $this->semValue = new Stmt\Function_($this->semStack[$this->stackPos-(10-3)], array('byRef' => $this->semStack[$this->stackPos-(10-2)], 'params' => $this->semStack[$this->stackPos-(10-5)], 'returnType' => $this->semStack[$this->stackPos-(10-7)], 'stmts' => $this->semStack[$this->stackPos-(10-9)]), $this->startAttributeStack[$this->stackPos-(10-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule74() {
+         $this->semValue = new Stmt\Class_($this->semStack[$this->stackPos-(7-2)], array('type' => $this->semStack[$this->stackPos-(7-1)], 'extends' => $this->semStack[$this->stackPos-(7-3)], 'implements' => $this->semStack[$this->stackPos-(7-4)], 'stmts' => $this->semStack[$this->stackPos-(7-6)]), $this->startAttributeStack[$this->stackPos-(7-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule75() {
+         $this->semValue = new Stmt\Interface_($this->semStack[$this->stackPos-(6-2)], array('extends' => $this->semStack[$this->stackPos-(6-3)], 'stmts' => $this->semStack[$this->stackPos-(6-5)]), $this->startAttributeStack[$this->stackPos-(6-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule76() {
+         $this->semValue = new Stmt\Trait_($this->semStack[$this->stackPos-(5-2)], $this->semStack[$this->stackPos-(5-4)], $this->startAttributeStack[$this->stackPos-(5-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule77() {
+         $this->semValue = 0;
+    }
+
+    protected function reduceRule78() {
+         $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+    }
+
+    protected function reduceRule79() {
+         $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+    }
+
+    protected function reduceRule80() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule81() {
+         $this->semValue = $this->semStack[$this->stackPos-(2-2)];
+    }
+
+    protected function reduceRule82() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule83() {
+         $this->semValue = $this->semStack[$this->stackPos-(2-2)];
+    }
+
+    protected function reduceRule84() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule85() {
+         $this->semValue = $this->semStack[$this->stackPos-(2-2)];
+    }
+
+    protected function reduceRule86() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule87() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule88() {
+         $this->semValue = is_array($this->semStack[$this->stackPos-(1-1)]) ? $this->semStack[$this->stackPos-(1-1)] : array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule89() {
+         $this->semValue = $this->semStack[$this->stackPos-(4-2)];
+    }
+
+    protected function reduceRule90() {
+         $this->semValue = is_array($this->semStack[$this->stackPos-(1-1)]) ? $this->semStack[$this->stackPos-(1-1)] : array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule91() {
+         $this->semValue = $this->semStack[$this->stackPos-(4-2)];
+    }
+
+    protected function reduceRule92() {
+         $this->semValue = is_array($this->semStack[$this->stackPos-(1-1)]) ? $this->semStack[$this->stackPos-(1-1)] : array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule93() {
+         $this->semValue = $this->semStack[$this->stackPos-(4-2)];
+    }
+
+    protected function reduceRule94() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule95() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule96() {
+         $this->semValue = new Stmt\DeclareDeclare($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule97() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule98() {
+         $this->semValue = $this->semStack[$this->stackPos-(4-3)];
+    }
+
+    protected function reduceRule99() {
+         $this->semValue = $this->semStack[$this->stackPos-(4-2)];
+    }
+
+    protected function reduceRule100() {
+         $this->semValue = $this->semStack[$this->stackPos-(5-3)];
+    }
+
+    protected function reduceRule101() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule102() {
+         $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule103() {
+         $this->semValue = new Stmt\Case_($this->semStack[$this->stackPos-(4-2)], $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule104() {
+         $this->semValue = new Stmt\Case_(null, $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule105() {
+        $this->semValue = $this->semStack[$this->stackPos];
+    }
+
+    protected function reduceRule106() {
+        $this->semValue = $this->semStack[$this->stackPos];
+    }
+
+    protected function reduceRule107() {
+         $this->semValue = is_array($this->semStack[$this->stackPos-(1-1)]) ? $this->semStack[$this->stackPos-(1-1)] : array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule108() {
+         $this->semValue = $this->semStack[$this->stackPos-(4-2)];
+    }
+
+    protected function reduceRule109() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule110() {
+         $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule111() {
+         $this->semValue = new Stmt\ElseIf_($this->semStack[$this->stackPos-(3-2)], is_array($this->semStack[$this->stackPos-(3-3)]) ? $this->semStack[$this->stackPos-(3-3)] : array($this->semStack[$this->stackPos-(3-3)]), $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule112() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule113() {
+         $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule114() {
+         $this->semValue = new Stmt\ElseIf_($this->semStack[$this->stackPos-(4-2)], $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule115() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule116() {
+         $this->semValue = new Stmt\Else_(is_array($this->semStack[$this->stackPos-(2-2)]) ? $this->semStack[$this->stackPos-(2-2)] : array($this->semStack[$this->stackPos-(2-2)]), $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule117() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule118() {
+         $this->semValue = new Stmt\Else_($this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule119() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)], false);
+    }
+
+    protected function reduceRule120() {
+         $this->semValue = array($this->semStack[$this->stackPos-(2-2)], true);
+    }
+
+    protected function reduceRule121() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)], false);
+    }
+
+    protected function reduceRule122() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule123() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule124() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule125() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule126() {
+         $this->semValue = new Node\Param(substr($this->semStack[$this->stackPos-(4-4)], 1), null, $this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-2)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule127() {
+         $this->semValue = new Node\Param(substr($this->semStack[$this->stackPos-(6-4)], 1), $this->semStack[$this->stackPos-(6-6)], $this->semStack[$this->stackPos-(6-1)], $this->semStack[$this->stackPos-(6-2)], $this->semStack[$this->stackPos-(6-3)], $this->startAttributeStack[$this->stackPos-(6-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule128() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule129() {
+         $this->semValue = 'array';
+    }
+
+    protected function reduceRule130() {
+         $this->semValue = 'callable';
+    }
+
+    protected function reduceRule131() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule132() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule133() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule134() {
+         $this->semValue = $this->semStack[$this->stackPos-(2-2)];
+    }
+
+    protected function reduceRule135() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule136() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule137() {
+         $this->semValue = array(new Node\Arg($this->semStack[$this->stackPos-(3-2)], false, false, $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes));
+    }
+
+    protected function reduceRule138() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule139() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule140() {
+         $this->semValue = new Node\Arg($this->semStack[$this->stackPos-(1-1)], false, false, $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule141() {
+         $this->semValue = new Node\Arg($this->semStack[$this->stackPos-(2-2)], true, false, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule142() {
+         $this->semValue = new Node\Arg($this->semStack[$this->stackPos-(2-2)], false, true, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule143() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule144() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule145() {
+         $this->semValue = new Expr\Variable(substr($this->semStack[$this->stackPos-(1-1)], 1), $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule146() {
+         $this->semValue = new Expr\Variable($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule147() {
+         $this->semValue = new Expr\Variable($this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule148() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule149() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule150() {
+         $this->semValue = new Stmt\StaticVar(substr($this->semStack[$this->stackPos-(1-1)], 1), null, $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule151() {
+         $this->semValue = new Stmt\StaticVar(substr($this->semStack[$this->stackPos-(3-1)], 1), $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule152() {
+         $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule153() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule154() {
+         $this->semValue = new Stmt\Property($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule155() {
+         $this->semValue = new Stmt\ClassConst($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule156() {
+         $this->semValue = new Stmt\ClassMethod($this->semStack[$this->stackPos-(9-4)], array('type' => $this->semStack[$this->stackPos-(9-1)], 'byRef' => $this->semStack[$this->stackPos-(9-3)], 'params' => $this->semStack[$this->stackPos-(9-6)], 'returnType' => $this->semStack[$this->stackPos-(9-8)], 'stmts' => $this->semStack[$this->stackPos-(9-9)]), $this->startAttributeStack[$this->stackPos-(9-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule157() {
+         $this->semValue = new Stmt\TraitUse($this->semStack[$this->stackPos-(3-2)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule158() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule159() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule160() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule161() {
+         $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule162() {
+         $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$this->stackPos-(4-1)][0], $this->semStack[$this->stackPos-(4-1)][1], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule163() {
+         $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$this->stackPos-(5-1)][0], $this->semStack[$this->stackPos-(5-1)][1], $this->semStack[$this->stackPos-(5-3)], $this->semStack[$this->stackPos-(5-4)], $this->startAttributeStack[$this->stackPos-(5-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule164() {
+         $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$this->stackPos-(4-1)][0], $this->semStack[$this->stackPos-(4-1)][1], $this->semStack[$this->stackPos-(4-3)], null, $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule165() {
+         $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$this->stackPos-(4-1)][0], $this->semStack[$this->stackPos-(4-1)][1], null, $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule166() {
+         $this->semValue = array($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)]);
+    }
+
+    protected function reduceRule167() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule168() {
+         $this->semValue = array(null, $this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule169() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule170() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule171() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule172() {
+         $this->semValue = 0;
+    }
+
+    protected function reduceRule173() {
+         $this->semValue = 0;
+    }
+
+    protected function reduceRule174() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule175() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule176() {
+         Stmt\Class_::verifyModifier($this->semStack[$this->stackPos-(2-1)], $this->semStack[$this->stackPos-(2-2)]); $this->semValue = $this->semStack[$this->stackPos-(2-1)] | $this->semStack[$this->stackPos-(2-2)];
+    }
+
+    protected function reduceRule177() {
+         $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
+    }
+
+    protected function reduceRule178() {
+         $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
+    }
+
+    protected function reduceRule179() {
+         $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
+    }
+
+    protected function reduceRule180() {
+         $this->semValue = Stmt\Class_::MODIFIER_STATIC;
+    }
+
+    protected function reduceRule181() {
+         $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+    }
+
+    protected function reduceRule182() {
+         $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+    }
+
+    protected function reduceRule183() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule184() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule185() {
+         $this->semValue = new Stmt\PropertyProperty(substr($this->semStack[$this->stackPos-(1-1)], 1), null, $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule186() {
+         $this->semValue = new Stmt\PropertyProperty(substr($this->semStack[$this->stackPos-(3-1)], 1), $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule187() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule188() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule189() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule190() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule191() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule192() {
+         $this->semValue = new Expr\Assign($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule193() {
+         $this->semValue = new Expr\Assign($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule194() {
+         $this->semValue = new Expr\AssignRef($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule195() {
+         $this->semValue = new Expr\AssignRef($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule196() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule197() {
+         $this->semValue = new Expr\Clone_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule198() {
+         $this->semValue = new Expr\AssignOp\Plus($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule199() {
+         $this->semValue = new Expr\AssignOp\Minus($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule200() {
+         $this->semValue = new Expr\AssignOp\Mul($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule201() {
+         $this->semValue = new Expr\AssignOp\Div($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule202() {
+         $this->semValue = new Expr\AssignOp\Concat($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule203() {
+         $this->semValue = new Expr\AssignOp\Mod($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule204() {
+         $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule205() {
+         $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule206() {
+         $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule207() {
+         $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule208() {
+         $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule209() {
+         $this->semValue = new Expr\AssignOp\Pow($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule210() {
+         $this->semValue = new Expr\PostInc($this->semStack[$this->stackPos-(2-1)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule211() {
+         $this->semValue = new Expr\PreInc($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule212() {
+         $this->semValue = new Expr\PostDec($this->semStack[$this->stackPos-(2-1)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule213() {
+         $this->semValue = new Expr\PreDec($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule214() {
+         $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule215() {
+         $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule216() {
+         $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule217() {
+         $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule218() {
+         $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule219() {
+         $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule220() {
+         $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule221() {
+         $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule222() {
+         $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule223() {
+         $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule224() {
+         $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule225() {
+         $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule226() {
+         $this->semValue = new Expr\BinaryOp\Div($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule227() {
+         $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule228() {
+         $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule229() {
+         $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule230() {
+         $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule231() {
+         $this->semValue = new Expr\UnaryPlus($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule232() {
+         $this->semValue = new Expr\UnaryMinus($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule233() {
+         $this->semValue = new Expr\BooleanNot($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule234() {
+         $this->semValue = new Expr\BitwiseNot($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule235() {
+         $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule236() {
+         $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule237() {
+         $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule238() {
+         $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule239() {
+         $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule240() {
+         $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule241() {
+         $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule242() {
+         $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule243() {
+         $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule244() {
+         $this->semValue = new Expr\Instanceof_($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule245() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule246() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule247() {
+         $this->semValue = new Expr\Ternary($this->semStack[$this->stackPos-(5-1)], $this->semStack[$this->stackPos-(5-3)], $this->semStack[$this->stackPos-(5-5)], $this->startAttributeStack[$this->stackPos-(5-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule248() {
+         $this->semValue = new Expr\Ternary($this->semStack[$this->stackPos-(4-1)], null, $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule249() {
+         $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule250() {
+         $this->semValue = new Expr\Isset_($this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule251() {
+         $this->semValue = new Expr\Empty_($this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule252() {
+         $this->semValue = new Expr\Include_($this->semStack[$this->stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule253() {
+         $this->semValue = new Expr\Include_($this->semStack[$this->stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule254() {
+         $this->semValue = new Expr\Eval_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule255() {
+         $this->semValue = new Expr\Include_($this->semStack[$this->stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule256() {
+         $this->semValue = new Expr\Include_($this->semStack[$this->stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule257() {
+         $this->semValue = new Expr\Cast\Int_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule258() {
+         $this->semValue = new Expr\Cast\Double($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule259() {
+         $this->semValue = new Expr\Cast\String_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule260() {
+         $this->semValue = new Expr\Cast\Array_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule261() {
+         $this->semValue = new Expr\Cast\Object_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule262() {
+         $this->semValue = new Expr\Cast\Bool_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule263() {
+         $this->semValue = new Expr\Cast\Unset_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule264() {
+         $this->semValue = new Expr\Exit_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule265() {
+         $this->semValue = new Expr\ErrorSuppress($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule266() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule267() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule268() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule269() {
+         $this->semValue = new Expr\ShellExec($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule270() {
+         $this->semValue = new Expr\Print_($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule271() {
+         $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule272() {
+         $this->semValue = new Expr\YieldFrom($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule273() {
+         $this->semValue = new Expr\Closure(array('static' => false, 'byRef' => $this->semStack[$this->stackPos-(10-2)], 'params' => $this->semStack[$this->stackPos-(10-4)], 'uses' => $this->semStack[$this->stackPos-(10-6)], 'returnType' => $this->semStack[$this->stackPos-(10-7)], 'stmts' => $this->semStack[$this->stackPos-(10-9)]), $this->startAttributeStack[$this->stackPos-(10-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule274() {
+         $this->semValue = new Expr\Closure(array('static' => true, 'byRef' => $this->semStack[$this->stackPos-(11-3)], 'params' => $this->semStack[$this->stackPos-(11-5)], 'uses' => $this->semStack[$this->stackPos-(11-7)], 'returnType' => $this->semStack[$this->stackPos-(11-8)], 'stmts' => $this->semStack[$this->stackPos-(11-10)]), $this->startAttributeStack[$this->stackPos-(11-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule275() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule276() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule277() {
+         $this->semValue = new Expr\Yield_($this->semStack[$this->stackPos-(2-2)], null, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule278() {
+         $this->semValue = new Expr\Yield_($this->semStack[$this->stackPos-(4-4)], $this->semStack[$this->stackPos-(4-2)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule279() {
+         $this->semValue = new Expr\Array_($this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule280() {
+         $this->semValue = new Expr\Array_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule281() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule282() {
+         $this->semValue = new Expr\ArrayDimFetch(new Scalar\String_(Scalar\String_::parse($this->semStack[$this->stackPos-(4-1)]), $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes), $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule283() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule284() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule285() {
+         $this->semValue = array(new Stmt\Class_(null, array('type' => 0, 'extends' => $this->semStack[$this->stackPos-(7-3)], 'implements' => $this->semStack[$this->stackPos-(7-4)], 'stmts' => $this->semStack[$this->stackPos-(7-6)]), $this->startAttributeStack[$this->stackPos-(7-1)] + $this->endAttributes), $this->semStack[$this->stackPos-(7-2)]);
+    }
+
+    protected function reduceRule286() {
+         $this->semValue = new Expr\New_($this->semStack[$this->stackPos-(3-2)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule287() {
+         list($class, $ctorArgs) = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule288() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule289() {
+         $this->semValue = $this->semStack[$this->stackPos-(4-3)];
+    }
+
+    protected function reduceRule290() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule291() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule292() {
+         $this->semValue = new Expr\ClosureUse(substr($this->semStack[$this->stackPos-(2-2)], 1), $this->semStack[$this->stackPos-(2-1)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule293() {
+         $this->semValue = new Expr\FuncCall($this->semStack[$this->stackPos-(2-1)], $this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule294() {
+         $this->semValue = new Expr\StaticCall($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule295() {
+         $this->semValue = new Expr\StaticCall($this->semStack[$this->stackPos-(6-1)], $this->semStack[$this->stackPos-(6-4)], $this->semStack[$this->stackPos-(6-6)], $this->startAttributeStack[$this->stackPos-(6-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule296() {
+
+            if ($this->semStack[$this->stackPos-(2-1)] instanceof Node\Expr\StaticPropertyFetch) {
+                $this->semValue = new Expr\StaticCall($this->semStack[$this->stackPos-(2-1)]->class, new Expr\Variable($this->semStack[$this->stackPos-(2-1)]->name, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes), $this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+            } elseif ($this->semStack[$this->stackPos-(2-1)] instanceof Node\Expr\ArrayDimFetch) {
+                $tmp = $this->semStack[$this->stackPos-(2-1)];
+                while ($tmp->var instanceof Node\Expr\ArrayDimFetch) {
+                    $tmp = $tmp->var;
+                }
+
+                $this->semValue = new Expr\StaticCall($tmp->var->class, $this->semStack[$this->stackPos-(2-1)], $this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+                $tmp->var = new Expr\Variable($tmp->var->name, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+            } else {
+                throw new \Exception;
+            }
+
+    }
+
+    protected function reduceRule297() {
+         $this->semValue = new Expr\FuncCall($this->semStack[$this->stackPos-(2-1)], $this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule298() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule299() {
+         $this->semValue = new Name($this->semStack[$this->stackPos-(1-1)], $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule300() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule301() {
+         $this->semValue = new Name($this->semStack[$this->stackPos-(1-1)], $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule302() {
+         $this->semValue = new Name\FullyQualified($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule303() {
+         $this->semValue = new Name\Relative($this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule304() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule305() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule306() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule307() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule308() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule309() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule310() {
+         $this->semValue = new Expr\PropertyFetch($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule311() {
+         $this->semValue = new Expr\PropertyFetch($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule312() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule313() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule314() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule315() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule316() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule317() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule318() {
+         $this->semValue = array(Scalar\String_::parseEscapeSequences($this->semStack[$this->stackPos-(1-1)], '`'));
+    }
+
+    protected function reduceRule319() {
+         foreach ($this->semStack[$this->stackPos-(1-1)] as &$s) { if (is_string($s)) { $s = Node\Scalar\String_::parseEscapeSequences($s, '`'); } }; $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule320() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule321() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule322() {
+         $this->semValue = new Scalar\LNumber(Scalar\LNumber::parse($this->semStack[$this->stackPos-(1-1)]), $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule323() {
+         $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$this->stackPos-(1-1)]), $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule324() {
+         $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$this->stackPos-(1-1)]), $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule325() {
+         $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule326() {
+         $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule327() {
+         $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule328() {
+         $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule329() {
+         $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule330() {
+         $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule331() {
+         $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule332() {
+         $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule333() {
+         $this->semValue = new Scalar\String_(Scalar\String_::parseDocString($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-2)]), $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule334() {
+         $this->semValue = new Scalar\String_('', $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule335() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule336() {
+         $this->semValue = new Expr\ClassConstFetch($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule337() {
+         $this->semValue = new Expr\ConstFetch($this->semStack[$this->stackPos-(1-1)], $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule338() {
+         $this->semValue = new Expr\Array_($this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule339() {
+         $this->semValue = new Expr\Array_($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule340() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule341() {
+         $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule342() {
+         $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule343() {
+         $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule344() {
+         $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule345() {
+         $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule346() {
+         $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule347() {
+         $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule348() {
+         $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule349() {
+         $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule350() {
+         $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule351() {
+         $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule352() {
+         $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule353() {
+         $this->semValue = new Expr\BinaryOp\Div($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule354() {
+         $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule355() {
+         $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule356() {
+         $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule357() {
+         $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule358() {
+         $this->semValue = new Expr\UnaryPlus($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule359() {
+         $this->semValue = new Expr\UnaryMinus($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule360() {
+         $this->semValue = new Expr\BooleanNot($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule361() {
+         $this->semValue = new Expr\BitwiseNot($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule362() {
+         $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule363() {
+         $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule364() {
+         $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule365() {
+         $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule366() {
+         $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule367() {
+         $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule368() {
+         $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule369() {
+         $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule370() {
+         $this->semValue = new Expr\Ternary($this->semStack[$this->stackPos-(5-1)], $this->semStack[$this->stackPos-(5-3)], $this->semStack[$this->stackPos-(5-5)], $this->startAttributeStack[$this->stackPos-(5-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule371() {
+         $this->semValue = new Expr\Ternary($this->semStack[$this->stackPos-(4-1)], null, $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule372() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule373() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule374() {
+         $this->semValue = new Expr\ConstFetch($this->semStack[$this->stackPos-(1-1)], $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule375() {
+         $this->semValue = new Expr\ClassConstFetch($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule376() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule377() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule378() {
+         foreach ($this->semStack[$this->stackPos-(3-2)] as &$s) { if (is_string($s)) { $s = Node\Scalar\String_::parseEscapeSequences($s, '"'); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule379() {
+         foreach ($this->semStack[$this->stackPos-(3-2)] as &$s) { if (is_string($s)) { $s = Node\Scalar\String_::parseEscapeSequences($s, null); } } $s = preg_replace('~(\r\n|\n|\r)\z~', '', $s); if ('' === $s) array_pop($this->semStack[$this->stackPos-(3-2)]);; $this->semValue = new Scalar\Encapsed($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule380() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule381() {
+         $this->semValue = 'class';
+    }
+
+    protected function reduceRule382() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule383() {
+         $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule384() {
+        $this->semValue = $this->semStack[$this->stackPos];
+    }
+
+    protected function reduceRule385() {
+        $this->semValue = $this->semStack[$this->stackPos];
+    }
+
+    protected function reduceRule386() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule387() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule388() {
+         $this->semValue = new Expr\ArrayItem($this->semStack[$this->stackPos-(3-3)], $this->semStack[$this->stackPos-(3-1)], false, $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule389() {
+         $this->semValue = new Expr\ArrayItem($this->semStack[$this->stackPos-(1-1)], null, false, $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule390() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule391() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule392() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule393() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule394() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(6-2)], $this->semStack[$this->stackPos-(6-5)], $this->startAttributeStack[$this->stackPos-(6-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule395() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule396() {
+         $this->semValue = new Expr\PropertyFetch($this->semStack[$this->stackPos-(3-1)], $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule397() {
+         $this->semValue = new Expr\MethodCall($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule398() {
+         $this->semValue = new Expr\FuncCall($this->semStack[$this->stackPos-(2-1)], $this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule399() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule400() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule401() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule402() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule403() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule404() {
+         $this->semValue = new Expr\Variable($this->semStack[$this->stackPos-(2-2)], $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule405() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule406() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule407() {
+         $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-4)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule408() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule409() {
+         $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$this->stackPos-(3-1)], substr($this->semStack[$this->stackPos-(3-3)], 1), $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule410() {
+         $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$this->stackPos-(6-1)], $this->semStack[$this->stackPos-(6-5)], $this->startAttributeStack[$this->stackPos-(6-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule411() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule412() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule413() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule414() {
+         $this->semValue = new Expr\ArrayDimFetch($this->semStack[$this->stackPos-(4-1)], $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule415() {
+         $this->semValue = new Expr\Variable(substr($this->semStack[$this->stackPos-(1-1)], 1), $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule416() {
+         $this->semValue = new Expr\Variable($this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule417() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule418() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule419() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule420() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule421() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule422() {
+         $this->semValue = new Expr\List_($this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule423() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule424() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule425() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule426() {
+         $this->semValue = $this->semStack[$this->stackPos-(1-1)];
+    }
+
+    protected function reduceRule427() {
+         $this->semValue = null;
+    }
+
+    protected function reduceRule428() {
+         $this->semValue = array();
+    }
+
+    protected function reduceRule429() {
+         $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule430() {
+         $this->semStack[$this->stackPos-(3-1)][] = $this->semStack[$this->stackPos-(3-3)]; $this->semValue = $this->semStack[$this->stackPos-(3-1)];
+    }
+
+    protected function reduceRule431() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule432() {
+         $this->semValue = new Expr\ArrayItem($this->semStack[$this->stackPos-(3-3)], $this->semStack[$this->stackPos-(3-1)], false, $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule433() {
+         $this->semValue = new Expr\ArrayItem($this->semStack[$this->stackPos-(1-1)], null, false, $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule434() {
+         $this->semValue = new Expr\ArrayItem($this->semStack[$this->stackPos-(4-4)], $this->semStack[$this->stackPos-(4-1)], true, $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule435() {
+         $this->semValue = new Expr\ArrayItem($this->semStack[$this->stackPos-(2-2)], null, true, $this->startAttributeStack[$this->stackPos-(2-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule436() {
+         $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule437() {
+         $this->semStack[$this->stackPos-(2-1)][] = $this->semStack[$this->stackPos-(2-2)]; $this->semValue = $this->semStack[$this->stackPos-(2-1)];
+    }
+
+    protected function reduceRule438() {
+         $this->semValue = array($this->semStack[$this->stackPos-(1-1)]);
+    }
+
+    protected function reduceRule439() {
+         $this->semValue = array($this->semStack[$this->stackPos-(2-1)], $this->semStack[$this->stackPos-(2-2)]);
+    }
+
+    protected function reduceRule440() {
+         $this->semValue = new Expr\Variable(substr($this->semStack[$this->stackPos-(1-1)], 1), $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule441() {
+         $this->semValue = new Expr\ArrayDimFetch(new Expr\Variable(substr($this->semStack[$this->stackPos-(4-1)], 1), $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes), $this->semStack[$this->stackPos-(4-3)], $this->startAttributeStack[$this->stackPos-(4-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule442() {
+         $this->semValue = new Expr\PropertyFetch(new Expr\Variable(substr($this->semStack[$this->stackPos-(3-1)], 1), $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes), $this->semStack[$this->stackPos-(3-3)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule443() {
+         $this->semValue = new Expr\Variable($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule444() {
+         $this->semValue = new Expr\Variable($this->semStack[$this->stackPos-(3-2)], $this->startAttributeStack[$this->stackPos-(3-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule445() {
+         $this->semValue = new Expr\ArrayDimFetch(new Expr\Variable($this->semStack[$this->stackPos-(6-2)], $this->startAttributeStack[$this->stackPos-(6-1)] + $this->endAttributes), $this->semStack[$this->stackPos-(6-4)], $this->startAttributeStack[$this->stackPos-(6-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule446() {
+         $this->semValue = $this->semStack[$this->stackPos-(3-2)];
+    }
+
+    protected function reduceRule447() {
+         $this->semValue = new Scalar\String_($this->semStack[$this->stackPos-(1-1)], $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule448() {
+         $this->semValue = new Scalar\String_($this->semStack[$this->stackPos-(1-1)], $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+
+    protected function reduceRule449() {
+         $this->semValue = new Expr\Variable(substr($this->semStack[$this->stackPos-(1-1)], 1), $this->startAttributeStack[$this->stackPos-(1-1)] + $this->endAttributes);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
new file mode 100644
index 0000000..2228aa0
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
@@ -0,0 +1,464 @@
+lexer = $lexer;
+        $this->errors = array();
+        $this->throwOnError = isset($options['throwOnError']) ? $options['throwOnError'] : true;
+    }
+
+    /**
+     * Get array of errors that occurred during the last parse.
+     *
+     * This method may only return multiple errors if the 'throwOnError' option is disabled.
+     *
+     * @return Error[]
+     */
+    public function getErrors() {
+        return $this->errors;
+    }
+
+    /**
+     * Parses PHP code into a node tree.
+     *
+     * @param string $code The source code to parse
+     *
+     * @return Node[]|null Array of statements (or null if the 'throwOnError' option is disabled and the parser was
+     *                     unable to recover from an error).
+     */
+    public function parse($code) {
+        $this->lexer->startLexing($code);
+        $this->errors = array();
+
+        // We start off with no lookahead-token
+        $symbol = self::SYMBOL_NONE;
+
+        // The attributes for a node are taken from the first and last token of the node.
+        // From the first token only the startAttributes are taken and from the last only
+        // the endAttributes. Both are merged using the array union operator (+).
+        $startAttributes = '*POISON';
+        $endAttributes = '*POISON';
+        $this->endAttributes = $endAttributes;
+
+        // In order to figure out the attributes for the starting token, we have to keep
+        // them in a stack
+        $this->startAttributeStack = array();
+
+        // Start off in the initial state and keep a stack of previous states
+        $state = 0;
+        $stateStack = array($state);
+
+        // Semantic value stack (contains values of tokens and semantic action results)
+        $this->semStack = array();
+
+        // Current position in the stack(s)
+        $this->stackPos = 0;
+
+        $errorState = 0;
+
+        for (;;) {
+            //$this->traceNewState($state, $symbol);
+
+            if ($this->actionBase[$state] == 0) {
+                $rule = $this->actionDefault[$state];
+            } else {
+                if ($symbol === self::SYMBOL_NONE) {
+                    // Fetch the next token id from the lexer and fetch additional info by-ref.
+                    // The end attributes are fetched into a temporary variable and only set once the token is really
+                    // shifted (not during read). Otherwise you would sometimes get off-by-one errors, when a rule is
+                    // reduced after a token was read but not yet shifted.
+                    $tokenId = $this->lexer->getNextToken($tokenValue, $startAttributes, $endAttributes);
+
+                    // map the lexer token id to the internally used symbols
+                    $symbol = $tokenId >= 0 && $tokenId < $this->tokenToSymbolMapSize
+                        ? $this->tokenToSymbol[$tokenId]
+                        : $this->invalidSymbol;
+
+                    if ($symbol === $this->invalidSymbol) {
+                        throw new \RangeException(sprintf(
+                            'The lexer returned an invalid token (id=%d, value=%s)',
+                            $tokenId, $tokenValue
+                        ));
+                    }
+
+                    // This is necessary to assign some meaningful attributes to /* empty */ productions. They'll get
+                    // the attributes of the next token, even though they don't contain it themselves.
+                    $this->startAttributeStack[$this->stackPos+1] = $startAttributes;
+
+                    //$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->YYNLSTATES] + $symbol) >= 0
+                         && $idx < $this->actionTableSize && $this->actionCheck[$idx] == $symbol))
+                    && ($action = $this->action[$idx]) != $this->defaultAction) {
+                    /*
+                     * >= YYNLSTATES: shift and reduce
+                     * > 0: shift
+                     * = 0: accept
+                     * < 0: reduce
+                     * = -YYUNEXPECTED: error
+                     */
+                    if ($action > 0) {
+                        /* shift */
+                        //$this->traceShift($symbol);
+
+                        ++$this->stackPos;
+                        $stateStack[$this->stackPos] = $state = $action;
+                        $this->semStack[$this->stackPos] = $tokenValue;
+                        $this->startAttributeStack[$this->stackPos] = $startAttributes;
+                        $this->endAttributes = $endAttributes;
+                        $symbol = self::SYMBOL_NONE;
+
+                        if ($errorState) {
+                            --$errorState;
+                        }
+
+                        if ($action < $this->YYNLSTATES) {
+                            continue;
+                        }
+
+                        /* $yyn >= YYNLSTATES means shift-and-reduce */
+                        $rule = $action - $this->YYNLSTATES;
+                    } else {
+                        $rule = -$action;
+                    }
+                } else {
+                    $rule = $this->actionDefault[$state];
+                }
+            }
+
+            for (;;) {
+                if ($rule === 0) {
+                    /* accept */
+                    //$this->traceAccept();
+                    return $this->semValue;
+                } elseif ($rule !== $this->unexpectedTokenRule) {
+                    /* reduce */
+                    //$this->traceReduce($rule);
+
+                    try {
+                        $this->{'reduceRule' . $rule}();
+                    } catch (Error $e) {
+                        if (-1 === $e->getStartLine() && isset($startAttributes['startLine'])) {
+                            $e->setStartLine($startAttributes['startLine']);
+                        }
+
+                        $this->errors[] = $e;
+                        if ($this->throwOnError) {
+                            throw $e;
+                        } else {
+                            // Currently can't recover from "special" errors
+                            return null;
+                        }
+                    }
+
+                    /* Goto - shift nonterminal */
+                    $this->stackPos -= $this->ruleToLength[$rule];
+                    $nonTerminal = $this->ruleToNonTerminal[$rule];
+                    $idx = $this->gotoBase[$nonTerminal] + $stateStack[$this->stackPos];
+                    if ($idx >= 0 && $idx < $this->gotoTableSize && $this->gotoCheck[$idx] == $nonTerminal) {
+                        $state = $this->goto[$idx];
+                    } else {
+                        $state = $this->gotoDefault[$nonTerminal];
+                    }
+
+                    ++$this->stackPos;
+                    $stateStack[$this->stackPos]     = $state;
+                    $this->semStack[$this->stackPos] = $this->semValue;
+                } else {
+                    /* error */
+                    switch ($errorState) {
+                        case 0:
+                            $msg = $this->getErrorMessage($symbol, $state);
+                            $error = new Error($msg, $startAttributes + $endAttributes);
+                            $this->errors[] = $error;
+                            if ($this->throwOnError) {
+                                throw $error;
+                            }
+                            // Break missing intentionally
+                        case 1:
+                        case 2:
+                            $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->YYNLSTATES] + $this->errorSymbol) >= 0
+                                    && $idx < $this->actionTableSize && $this->actionCheck[$idx] == $this->errorSymbol)
+                            ) || ($action = $this->action[$idx]) == $this->defaultAction) { // Not totally sure about this
+                                if ($this->stackPos <= 0) {
+                                    // Could not recover from error
+                                    return null;
+                                }
+                                $state = $stateStack[--$this->stackPos];
+                                //$this->tracePop($state);
+                            }
+
+                            //$this->traceShift($this->errorSymbol);
+                            $stateStack[++$this->stackPos] = $state = $action;
+                            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->YYNLSTATES) {
+                    break;
+                }
+
+                /* >= YYNLSTATES means shift-and-reduce */
+                $rule = $state - $this->YYNLSTATES;
+            }
+        }
+
+        throw new \RuntimeException('Reached end of parser loop');
+    }
+
+    protected function getErrorMessage($symbol, $state) {
+        $expectedString = '';
+        if ($expected = $this->getExpectedTokens($state)) {
+            $expectedString = ', expecting ' . implode(' or ', $expected);
+        }
+
+        return 'Syntax error, unexpected ' . $this->symbolToName[$symbol] . $expectedString;
+    }
+
+    protected function getExpectedTokens($state) {
+        $expected = array();
+
+        $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->YYNLSTATES] + $symbol) >= 0
+                && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol
+            ) {
+                if ($this->action[$idx] != $this->unexpectedTokenRule) {
+                    if (count($expected) == 4) {
+                        /* Too many expected tokens */
+                        return array();
+                    }
+
+                    $expected[] = $name;
+                }
+            }
+        }
+
+        return $expected;
+    }
+
+    /*
+     * Tracing functions used for debugging the parser.
+     */
+
+    /*
+    protected function traceNewState($state, $symbol) {
+        echo '% State ' . $state
+            . ', Lookahead ' . ($symbol == self::SYMBOL_NONE ? '--none--' : $this->symbolToName[$symbol]) . "\n";
+    }
+
+    protected function traceRead($symbol) {
+        echo '% Reading ' . $this->symbolToName[$symbol] . "\n";
+    }
+
+    protected function traceShift($symbol) {
+        echo '% Shift ' . $this->symbolToName[$symbol] . "\n";
+    }
+
+    protected function traceAccept() {
+        echo "% Accepted.\n";
+    }
+
+    protected function traceReduce($n) {
+        echo '% Reduce by (' . $n . ') ' . $this->productions[$n] . "\n";
+    }
+
+    protected function tracePop($state) {
+        echo '% Recovering, uncovered state ' . $state . "\n";
+    }
+
+    protected function traceDiscard($symbol) {
+        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[] $stmts
+     * @return Node[]
+     */
+    protected function handleNamespaces(array $stmts) {
+        $style = $this->getNamespacingStyle($stmts);
+        if (null === $style) {
+            // not namespaced, nothing to do
+            return $stmts;
+        } elseif ('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 && $afterFirstNamespace) {
+                    throw new Error('No code may exist outside of namespace {}', $stmt->getLine());
+                }
+            }
+            return $stmts;
+        } else {
+            // For semicolon namespaces we have to move the statements after a namespace declaration into ->stmts
+            $resultStmts = array();
+            $targetStmts =& $resultStmts;
+            foreach ($stmts as $stmt) {
+                if ($stmt instanceof Node\Stmt\Namespace_) {
+                    $stmt->stmts = array();
+                    $targetStmts =& $stmt->stmts;
+                    $resultStmts[] = $stmt;
+                } elseif ($stmt instanceof Node\Stmt\HaltCompiler) {
+                    // __halt_compiler() is not moved into the namespace
+                    $resultStmts[] = $stmt;
+                } else {
+                    $targetStmts[] = $stmt;
+                }
+            }
+            return $resultStmts;
+        }
+    }
+
+    private function getNamespacingStyle(array $stmts) {
+        $style = null;
+        $hasNotAllowedStmts = false;
+        foreach ($stmts as $stmt) {
+            if ($stmt instanceof Node\Stmt\Namespace_) {
+                $currentStyle = null === $stmt->stmts ? 'semicolon' : 'brace';
+                if (null === $style) {
+                    $style = $currentStyle;
+                    if ($hasNotAllowedStmts) {
+                        throw new Error('Namespace declaration statement has to be the very first statement in the script', $stmt->getLine());
+                    }
+                } elseif ($style !== $currentStyle) {
+                    throw new Error('Cannot mix bracketed namespace declarations with unbracketed namespace declarations', $stmt->getLine());
+                }
+            } elseif (!$stmt instanceof Node\Stmt\Declare_ && !$stmt instanceof Node\Stmt\HaltCompiler) {
+                $hasNotAllowedStmts = true;
+            }
+        }
+        return $style;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php
new file mode 100644
index 0000000..9d4ea2e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php
@@ -0,0 +1,784 @@
+type ? $this->pType($node->type) . ' ' : '')
+             . ($node->byRef ? '&' : '')
+             . ($node->variadic ? '...' : '')
+             . '$' . $node->name
+             . ($node->default ? ' = ' . $this->p($node->default) : '');
+    }
+
+    public function pArg(Node\Arg $node) {
+        return ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value);
+    }
+
+    public function pConst(Node\Const_ $node) {
+        return $node->name . ' = ' . $this->p($node->value);
+    }
+
+    // Names
+
+    public function pName(Name $node) {
+        return implode('\\', $node->parts);
+    }
+
+    public function pName_FullyQualified(Name\FullyQualified $node) {
+        return '\\' . implode('\\', $node->parts);
+    }
+
+    public function pName_Relative(Name\Relative $node) {
+        return 'namespace\\' . implode('\\', $node->parts);
+    }
+
+    // Magic Constants
+
+    public function pScalar_MagicConst_Class(MagicConst\Class_ $node) {
+        return '__CLASS__';
+    }
+
+    public function pScalar_MagicConst_Dir(MagicConst\Dir $node) {
+        return '__DIR__';
+    }
+
+    public function pScalar_MagicConst_File(MagicConst\File $node) {
+        return '__FILE__';
+    }
+
+    public function pScalar_MagicConst_Function(MagicConst\Function_ $node) {
+        return '__FUNCTION__';
+    }
+
+    public function pScalar_MagicConst_Line(MagicConst\Line $node) {
+        return '__LINE__';
+    }
+
+    public function pScalar_MagicConst_Method(MagicConst\Method $node) {
+        return '__METHOD__';
+    }
+
+    public function pScalar_MagicConst_Namespace(MagicConst\Namespace_ $node) {
+        return '__NAMESPACE__';
+    }
+
+    public function pScalar_MagicConst_Trait(MagicConst\Trait_ $node) {
+        return '__TRAIT__';
+    }
+
+    // Scalars
+
+    public function pScalar_String(Scalar\String_ $node) {
+        return '\'' . $this->pNoIndent(addcslashes($node->value, '\'\\')) . '\'';
+    }
+
+    public function pScalar_Encapsed(Scalar\Encapsed $node) {
+        return '"' . $this->pEncapsList($node->parts, '"') . '"';
+    }
+
+    public function pScalar_LNumber(Scalar\LNumber $node) {
+        return (string) $node->value;
+    }
+
+    public function pScalar_DNumber(Scalar\DNumber $node) {
+        $stringValue = sprintf('%.16G', $node->value);
+        if ($node->value !== (double) $stringValue) {
+            $stringValue = sprintf('%.17G', $node->value);
+        }
+
+        // ensure that number is really printed as float
+        return preg_match('/^-?[0-9]+$/', $stringValue) ? $stringValue . '.0' : $stringValue;
+    }
+
+    // Assignments
+
+    public function pExpr_Assign(Expr\Assign $node) {
+        return $this->pInfixOp('Expr_Assign', $node->var, ' = ', $node->expr);
+    }
+
+    public function pExpr_AssignRef(Expr\AssignRef $node) {
+        return $this->pInfixOp('Expr_AssignRef', $node->var, ' =& ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_Plus(AssignOp\Plus $node) {
+        return $this->pInfixOp('Expr_AssignOp_Plus', $node->var, ' += ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_Minus(AssignOp\Minus $node) {
+        return $this->pInfixOp('Expr_AssignOp_Minus', $node->var, ' -= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_Mul(AssignOp\Mul $node) {
+        return $this->pInfixOp('Expr_AssignOp_Mul', $node->var, ' *= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_Div(AssignOp\Div $node) {
+        return $this->pInfixOp('Expr_AssignOp_Div', $node->var, ' /= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_Concat(AssignOp\Concat $node) {
+        return $this->pInfixOp('Expr_AssignOp_Concat', $node->var, ' .= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_Mod(AssignOp\Mod $node) {
+        return $this->pInfixOp('Expr_AssignOp_Mod', $node->var, ' %= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_BitwiseAnd(AssignOp\BitwiseAnd $node) {
+        return $this->pInfixOp('Expr_AssignOp_BitwiseAnd', $node->var, ' &= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_BitwiseOr(AssignOp\BitwiseOr $node) {
+        return $this->pInfixOp('Expr_AssignOp_BitwiseOr', $node->var, ' |= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_BitwiseXor(AssignOp\BitwiseXor $node) {
+        return $this->pInfixOp('Expr_AssignOp_BitwiseXor', $node->var, ' ^= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_ShiftLeft(AssignOp\ShiftLeft $node) {
+        return $this->pInfixOp('Expr_AssignOp_ShiftLeft', $node->var, ' <<= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_ShiftRight(AssignOp\ShiftRight $node) {
+        return $this->pInfixOp('Expr_AssignOp_ShiftRight', $node->var, ' >>= ', $node->expr);
+    }
+
+    public function pExpr_AssignOp_Pow(AssignOp\Pow $node) {
+        return $this->pInfixOp('Expr_AssignOp_Pow', $node->var, ' **= ', $node->expr);
+    }
+
+    // Binary expressions
+
+    public function pExpr_BinaryOp_Plus(BinaryOp\Plus $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Plus', $node->left, ' + ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Minus(BinaryOp\Minus $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Minus', $node->left, ' - ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Mul(BinaryOp\Mul $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Mul', $node->left, ' * ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Div(BinaryOp\Div $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Div', $node->left, ' / ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Concat(BinaryOp\Concat $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Concat', $node->left, ' . ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Mod(BinaryOp\Mod $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Mod', $node->left, ' % ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_BooleanAnd(BinaryOp\BooleanAnd $node) {
+        return $this->pInfixOp('Expr_BinaryOp_BooleanAnd', $node->left, ' && ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_BooleanOr(BinaryOp\BooleanOr $node) {
+        return $this->pInfixOp('Expr_BinaryOp_BooleanOr', $node->left, ' || ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_BitwiseAnd(BinaryOp\BitwiseAnd $node) {
+        return $this->pInfixOp('Expr_BinaryOp_BitwiseAnd', $node->left, ' & ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_BitwiseOr(BinaryOp\BitwiseOr $node) {
+        return $this->pInfixOp('Expr_BinaryOp_BitwiseOr', $node->left, ' | ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_BitwiseXor(BinaryOp\BitwiseXor $node) {
+        return $this->pInfixOp('Expr_BinaryOp_BitwiseXor', $node->left, ' ^ ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_ShiftLeft(BinaryOp\ShiftLeft $node) {
+        return $this->pInfixOp('Expr_BinaryOp_ShiftLeft', $node->left, ' << ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_ShiftRight(BinaryOp\ShiftRight $node) {
+        return $this->pInfixOp('Expr_BinaryOp_ShiftRight', $node->left, ' >> ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Pow(BinaryOp\Pow $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Pow', $node->left, ' ** ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_LogicalAnd(BinaryOp\LogicalAnd $node) {
+        return $this->pInfixOp('Expr_BinaryOp_LogicalAnd', $node->left, ' and ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_LogicalOr(BinaryOp\LogicalOr $node) {
+        return $this->pInfixOp('Expr_BinaryOp_LogicalOr', $node->left, ' or ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_LogicalXor(BinaryOp\LogicalXor $node) {
+        return $this->pInfixOp('Expr_BinaryOp_LogicalXor', $node->left, ' xor ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Equal(BinaryOp\Equal $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Equal', $node->left, ' == ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_NotEqual(BinaryOp\NotEqual $node) {
+        return $this->pInfixOp('Expr_BinaryOp_NotEqual', $node->left, ' != ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Identical(BinaryOp\Identical $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Identical', $node->left, ' === ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_NotIdentical(BinaryOp\NotIdentical $node) {
+        return $this->pInfixOp('Expr_BinaryOp_NotIdentical', $node->left, ' !== ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Spaceship(BinaryOp\Spaceship $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Spaceship', $node->left, ' <=> ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Greater(BinaryOp\Greater $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Greater', $node->left, ' > ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_GreaterOrEqual(BinaryOp\GreaterOrEqual $node) {
+        return $this->pInfixOp('Expr_BinaryOp_GreaterOrEqual', $node->left, ' >= ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Smaller(BinaryOp\Smaller $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Smaller', $node->left, ' < ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_SmallerOrEqual(BinaryOp\SmallerOrEqual $node) {
+        return $this->pInfixOp('Expr_BinaryOp_SmallerOrEqual', $node->left, ' <= ', $node->right);
+    }
+
+    public function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node) {
+        return $this->pInfixOp('Expr_BinaryOp_Coalesce', $node->left, ' ?? ', $node->right);
+    }
+
+    public function pExpr_Instanceof(Expr\Instanceof_ $node) {
+        return $this->pInfixOp('Expr_Instanceof', $node->expr, ' instanceof ', $node->class);
+    }
+
+    // Unary expressions
+
+    public function pExpr_BooleanNot(Expr\BooleanNot $node) {
+        return $this->pPrefixOp('Expr_BooleanNot', '!', $node->expr);
+    }
+
+    public function pExpr_BitwiseNot(Expr\BitwiseNot $node) {
+        return $this->pPrefixOp('Expr_BitwiseNot', '~', $node->expr);
+    }
+
+    public function pExpr_UnaryMinus(Expr\UnaryMinus $node) {
+        return $this->pPrefixOp('Expr_UnaryMinus', '-', $node->expr);
+    }
+
+    public function pExpr_UnaryPlus(Expr\UnaryPlus $node) {
+        return $this->pPrefixOp('Expr_UnaryPlus', '+', $node->expr);
+    }
+
+    public function pExpr_PreInc(Expr\PreInc $node) {
+        return $this->pPrefixOp('Expr_PreInc', '++', $node->var);
+    }
+
+    public function pExpr_PreDec(Expr\PreDec $node) {
+        return $this->pPrefixOp('Expr_PreDec', '--', $node->var);
+    }
+
+    public function pExpr_PostInc(Expr\PostInc $node) {
+        return $this->pPostfixOp('Expr_PostInc', $node->var, '++');
+    }
+
+    public function pExpr_PostDec(Expr\PostDec $node) {
+        return $this->pPostfixOp('Expr_PostDec', $node->var, '--');
+    }
+
+    public function pExpr_ErrorSuppress(Expr\ErrorSuppress $node) {
+        return $this->pPrefixOp('Expr_ErrorSuppress', '@', $node->expr);
+    }
+
+    public function pExpr_YieldFrom(Expr\YieldFrom $node) {
+        return $this->pPrefixOp('Expr_YieldFrom', 'yield from ', $node->expr);
+    }
+
+    public function pExpr_Print(Expr\Print_ $node) {
+        return $this->pPrefixOp('Expr_Print', 'print ', $node->expr);
+    }
+
+    // Casts
+
+    public function pExpr_Cast_Int(Cast\Int_ $node) {
+        return $this->pPrefixOp('Expr_Cast_Int', '(int) ', $node->expr);
+    }
+
+    public function pExpr_Cast_Double(Cast\Double $node) {
+        return $this->pPrefixOp('Expr_Cast_Double', '(double) ', $node->expr);
+    }
+
+    public function pExpr_Cast_String(Cast\String_ $node) {
+        return $this->pPrefixOp('Expr_Cast_String', '(string) ', $node->expr);
+    }
+
+    public function pExpr_Cast_Array(Cast\Array_ $node) {
+        return $this->pPrefixOp('Expr_Cast_Array', '(array) ', $node->expr);
+    }
+
+    public function pExpr_Cast_Object(Cast\Object_ $node) {
+        return $this->pPrefixOp('Expr_Cast_Object', '(object) ', $node->expr);
+    }
+
+    public function pExpr_Cast_Bool(Cast\Bool_ $node) {
+        return $this->pPrefixOp('Expr_Cast_Bool', '(bool) ', $node->expr);
+    }
+
+    public function pExpr_Cast_Unset(Cast\Unset_ $node) {
+        return $this->pPrefixOp('Expr_Cast_Unset', '(unset) ', $node->expr);
+    }
+
+    // Function calls and similar constructs
+
+    public function pExpr_FuncCall(Expr\FuncCall $node) {
+        return $this->p($node->name) . '(' . $this->pCommaSeparated($node->args) . ')';
+    }
+
+    public function pExpr_MethodCall(Expr\MethodCall $node) {
+        return $this->pVarOrNewExpr($node->var) . '->' . $this->pObjectProperty($node->name)
+             . '(' . $this->pCommaSeparated($node->args) . ')';
+    }
+
+    public function pExpr_StaticCall(Expr\StaticCall $node) {
+        return $this->p($node->class) . '::'
+             . ($node->name instanceof Expr
+                ? ($node->name instanceof Expr\Variable
+                   || $node->name instanceof Expr\ArrayDimFetch
+                   ? $this->p($node->name)
+                   : '{' . $this->p($node->name) . '}')
+                : $node->name)
+             . '(' . $this->pCommaSeparated($node->args) . ')';
+    }
+
+    public function pExpr_Empty(Expr\Empty_ $node) {
+        return 'empty(' . $this->p($node->expr) . ')';
+    }
+
+    public function pExpr_Isset(Expr\Isset_ $node) {
+        return 'isset(' . $this->pCommaSeparated($node->vars) . ')';
+    }
+
+    public function pExpr_Eval(Expr\Eval_ $node) {
+        return 'eval(' . $this->p($node->expr) . ')';
+    }
+
+    public function pExpr_Include(Expr\Include_ $node) {
+        static $map = array(
+            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 $map[$node->type] . ' ' . $this->p($node->expr);
+    }
+
+    public function pExpr_List(Expr\List_ $node) {
+        $pList = array();
+        foreach ($node->vars as $var) {
+            if (null === $var) {
+                $pList[] = '';
+            } else {
+                $pList[] = $this->p($var);
+            }
+        }
+
+        return 'list(' . implode(', ', $pList) . ')';
+    }
+
+    // Other
+
+    public function pExpr_Variable(Expr\Variable $node) {
+        if ($node->name instanceof Expr) {
+            return '${' . $this->p($node->name) . '}';
+        } else {
+            return '$' . $node->name;
+        }
+    }
+
+    public function pExpr_Array(Expr\Array_ $node) {
+        return 'array(' . $this->pCommaSeparated($node->items) . ')';
+    }
+
+    public function pExpr_ArrayItem(Expr\ArrayItem $node) {
+        return (null !== $node->key ? $this->p($node->key) . ' => ' : '')
+             . ($node->byRef ? '&' : '') . $this->p($node->value);
+    }
+
+    public function pExpr_ArrayDimFetch(Expr\ArrayDimFetch $node) {
+        return $this->pVarOrNewExpr($node->var)
+             . '[' . (null !== $node->dim ? $this->p($node->dim) : '') . ']';
+    }
+
+    public function pExpr_ConstFetch(Expr\ConstFetch $node) {
+        return $this->p($node->name);
+    }
+
+    public function pExpr_ClassConstFetch(Expr\ClassConstFetch $node) {
+        return $this->p($node->class) . '::' . $node->name;
+    }
+
+    public function pExpr_PropertyFetch(Expr\PropertyFetch $node) {
+        return $this->pVarOrNewExpr($node->var) . '->' . $this->pObjectProperty($node->name);
+    }
+
+    public function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node) {
+        return $this->p($node->class) . '::$' . $this->pObjectProperty($node->name);
+    }
+
+    public function pExpr_ShellExec(Expr\ShellExec $node) {
+        return '`' . $this->pEncapsList($node->parts, '`') . '`';
+    }
+
+    public function pExpr_Closure(Expr\Closure $node) {
+        return ($node->static ? 'static ' : '')
+             . 'function ' . ($node->byRef ? '&' : '')
+             . '(' . $this->pCommaSeparated($node->params) . ')'
+             . (!empty($node->uses) ? ' use(' . $this->pCommaSeparated($node->uses) . ')': '')
+             . (null !== $node->returnType ? ' : ' . $this->pType($node->returnType) : '')
+             . ' {' . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pExpr_ClosureUse(Expr\ClosureUse $node) {
+        return ($node->byRef ? '&' : '') . '$' . $node->var;
+    }
+
+    public function pExpr_New(Expr\New_ $node) {
+        if ($node->class instanceof Stmt\Class_) {
+            $args = $node->args ? '(' . $this->pCommaSeparated($node->args) . ')' : '';
+            return 'new ' . $this->pClassCommon($node->class, $args);
+        }
+        return 'new ' . $this->p($node->class) . '(' . $this->pCommaSeparated($node->args) . ')';
+    }
+
+    public function pExpr_Clone(Expr\Clone_ $node) {
+        return 'clone ' . $this->p($node->expr);
+    }
+
+    public function pExpr_Ternary(Expr\Ternary $node) {
+        // 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',
+            $node->cond, ' ?' . (null !== $node->if ? ' ' . $this->p($node->if) . ' ' : '') . ': ', $node->else
+        );
+    }
+
+    public function pExpr_Exit(Expr\Exit_ $node) {
+        return 'die' . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : '');
+    }
+
+    public function pExpr_Yield(Expr\Yield_ $node) {
+        if ($node->value === null) {
+            return 'yield';
+        } else {
+            // this is a bit ugly, but currently there is no way to detect whether the parentheses are necessary
+            return '(yield '
+                 . ($node->key !== null ? $this->p($node->key) . ' => ' : '')
+                 . $this->p($node->value)
+                 . ')';
+        }
+    }
+
+    // Declarations
+
+    public function pStmt_Namespace(Stmt\Namespace_ $node) {
+        if ($this->canUseSemicolonNamespaces) {
+            return 'namespace ' . $this->p($node->name) . ';' . "\n" . $this->pStmts($node->stmts, false);
+        } else {
+            return 'namespace' . (null !== $node->name ? ' ' . $this->p($node->name) : '')
+                 . ' {' . $this->pStmts($node->stmts) . "\n" . '}';
+        }
+    }
+
+    public function pStmt_Use(Stmt\Use_ $node) {
+        return 'use '
+             . ($node->type === Stmt\Use_::TYPE_FUNCTION ? 'function ' : '')
+             . ($node->type === Stmt\Use_::TYPE_CONSTANT ? 'const ' : '')
+             . $this->pCommaSeparated($node->uses) . ';';
+    }
+
+    public function pStmt_UseUse(Stmt\UseUse $node) {
+        return $this->p($node->name)
+             . ($node->name->getLast() !== $node->alias ? ' as ' . $node->alias : '');
+    }
+
+    public function pStmt_Interface(Stmt\Interface_ $node) {
+        return 'interface ' . $node->name
+             . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '')
+             . "\n" . '{' . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_Class(Stmt\Class_ $node) {
+        return $this->pClassCommon($node, ' ' . $node->name);
+    }
+
+    public function pStmt_Trait(Stmt\Trait_ $node) {
+        return 'trait ' . $node->name
+             . "\n" . '{' . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_TraitUse(Stmt\TraitUse $node) {
+        return 'use ' . $this->pCommaSeparated($node->traits)
+             . (empty($node->adaptations)
+                ? ';'
+                : ' {' . $this->pStmts($node->adaptations) . "\n" . '}');
+    }
+
+    public function pStmt_TraitUseAdaptation_Precedence(Stmt\TraitUseAdaptation\Precedence $node) {
+        return $this->p($node->trait) . '::' . $node->method
+             . ' insteadof ' . $this->pCommaSeparated($node->insteadof) . ';';
+    }
+
+    public function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias $node) {
+        return (null !== $node->trait ? $this->p($node->trait) . '::' : '')
+             . $node->method . ' as'
+             . (null !== $node->newModifier ? ' ' . rtrim($this->pModifiers($node->newModifier), ' ') : '')
+             . (null !== $node->newName     ? ' ' . $node->newName                        : '')
+             . ';';
+    }
+
+    public function pStmt_Property(Stmt\Property $node) {
+        return (0 === $node->type ? 'var ' : $this->pModifiers($node->type)) . $this->pCommaSeparated($node->props) . ';';
+    }
+
+    public function pStmt_PropertyProperty(Stmt\PropertyProperty $node) {
+        return '$' . $node->name
+             . (null !== $node->default ? ' = ' . $this->p($node->default) : '');
+    }
+
+    public function pStmt_ClassMethod(Stmt\ClassMethod $node) {
+        return $this->pModifiers($node->type)
+             . 'function ' . ($node->byRef ? '&' : '') . $node->name
+             . '(' . $this->pCommaSeparated($node->params) . ')'
+             . (null !== $node->returnType ? ' : ' . $this->pType($node->returnType) : '')
+             . (null !== $node->stmts
+                ? "\n" . '{' . $this->pStmts($node->stmts) . "\n" . '}'
+                : ';');
+    }
+
+    public function pStmt_ClassConst(Stmt\ClassConst $node) {
+        return 'const ' . $this->pCommaSeparated($node->consts) . ';';
+    }
+
+    public function pStmt_Function(Stmt\Function_ $node) {
+        return 'function ' . ($node->byRef ? '&' : '') . $node->name
+             . '(' . $this->pCommaSeparated($node->params) . ')'
+             . (null !== $node->returnType ? ' : ' . $this->pType($node->returnType) : '')
+             . "\n" . '{' . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_Const(Stmt\Const_ $node) {
+        return 'const ' . $this->pCommaSeparated($node->consts) . ';';
+    }
+
+    public function pStmt_Declare(Stmt\Declare_ $node) {
+        return 'declare (' . $this->pCommaSeparated($node->declares) . ') {'
+             . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_DeclareDeclare(Stmt\DeclareDeclare $node) {
+        return $node->key . ' = ' . $this->p($node->value);
+    }
+
+    // Control flow
+
+    public function pStmt_If(Stmt\If_ $node) {
+        return 'if (' . $this->p($node->cond) . ') {'
+             . $this->pStmts($node->stmts) . "\n" . '}'
+             . $this->pImplode($node->elseifs)
+             . (null !== $node->else ? $this->p($node->else) : '');
+    }
+
+    public function pStmt_ElseIf(Stmt\ElseIf_ $node) {
+        return ' elseif (' . $this->p($node->cond) . ') {'
+             . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_Else(Stmt\Else_ $node) {
+        return ' else {' . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_For(Stmt\For_ $node) {
+        return 'for ('
+             . $this->pCommaSeparated($node->init) . ';' . (!empty($node->cond) ? ' ' : '')
+             . $this->pCommaSeparated($node->cond) . ';' . (!empty($node->loop) ? ' ' : '')
+             . $this->pCommaSeparated($node->loop)
+             . ') {' . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_Foreach(Stmt\Foreach_ $node) {
+        return 'foreach (' . $this->p($node->expr) . ' as '
+             . (null !== $node->keyVar ? $this->p($node->keyVar) . ' => ' : '')
+             . ($node->byRef ? '&' : '') . $this->p($node->valueVar) . ') {'
+             . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_While(Stmt\While_ $node) {
+        return 'while (' . $this->p($node->cond) . ') {'
+             . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_Do(Stmt\Do_ $node) {
+        return 'do {' . $this->pStmts($node->stmts) . "\n"
+             . '} while (' . $this->p($node->cond) . ');';
+    }
+
+    public function pStmt_Switch(Stmt\Switch_ $node) {
+        return 'switch (' . $this->p($node->cond) . ') {'
+             . $this->pStmts($node->cases) . "\n" . '}';
+    }
+
+    public function pStmt_Case(Stmt\Case_ $node) {
+        return (null !== $node->cond ? 'case ' . $this->p($node->cond) : 'default') . ':'
+             . $this->pStmts($node->stmts);
+    }
+
+    public function pStmt_TryCatch(Stmt\TryCatch $node) {
+        return 'try {' . $this->pStmts($node->stmts) . "\n" . '}'
+             . $this->pImplode($node->catches)
+             . ($node->finallyStmts !== null
+                ? ' finally {' . $this->pStmts($node->finallyStmts) . "\n" . '}'
+                : '');
+    }
+
+    public function pStmt_Catch(Stmt\Catch_ $node) {
+        return ' catch (' . $this->p($node->type) . ' $' . $node->var . ') {'
+             . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    public function pStmt_Break(Stmt\Break_ $node) {
+        return 'break' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';';
+    }
+
+    public function pStmt_Continue(Stmt\Continue_ $node) {
+        return 'continue' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';';
+    }
+
+    public function pStmt_Return(Stmt\Return_ $node) {
+        return 'return' . (null !== $node->expr ? ' ' . $this->p($node->expr) : '') . ';';
+    }
+
+    public function pStmt_Throw(Stmt\Throw_ $node) {
+        return 'throw ' . $this->p($node->expr) . ';';
+    }
+
+    public function pStmt_Label(Stmt\Label $node) {
+        return $node->name . ':';
+    }
+
+    public function pStmt_Goto(Stmt\Goto_ $node) {
+        return 'goto ' . $node->name . ';';
+    }
+
+    // Other
+
+    public function pStmt_Echo(Stmt\Echo_ $node) {
+        return 'echo ' . $this->pCommaSeparated($node->exprs) . ';';
+    }
+
+    public function pStmt_Static(Stmt\Static_ $node) {
+        return 'static ' . $this->pCommaSeparated($node->vars) . ';';
+    }
+
+    public function pStmt_Global(Stmt\Global_ $node) {
+        return 'global ' . $this->pCommaSeparated($node->vars) . ';';
+    }
+
+    public function pStmt_StaticVar(Stmt\StaticVar $node) {
+        return '$' . $node->name
+             . (null !== $node->default ? ' = ' . $this->p($node->default) : '');
+    }
+
+    public function pStmt_Unset(Stmt\Unset_ $node) {
+        return 'unset(' . $this->pCommaSeparated($node->vars) . ');';
+    }
+
+    public function pStmt_InlineHTML(Stmt\InlineHTML $node) {
+        return '?>' . $this->pNoIndent("\n" . $node->value) . 'remaining;
+    }
+
+    // Helpers
+
+    protected function pType($node) {
+        return is_string($node) ? $node : $this->p($node);
+    }
+
+    protected function pClassCommon(Stmt\Class_ $node, $afterClassToken) {
+        return $this->pModifiers($node->type)
+        . 'class' . $afterClassToken
+        . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '')
+        . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '')
+        . "\n" . '{' . $this->pStmts($node->stmts) . "\n" . '}';
+    }
+
+    /** @internal */
+    public function pObjectProperty($node) {
+        if ($node instanceof Expr) {
+            return '{' . $this->p($node) . '}';
+        } else {
+            return $node;
+        }
+    }
+
+    /** @internal */
+    public function pModifiers($modifiers) {
+        return ($modifiers & Stmt\Class_::MODIFIER_PUBLIC    ? 'public '    : '')
+             . ($modifiers & Stmt\Class_::MODIFIER_PROTECTED ? 'protected ' : '')
+             . ($modifiers & Stmt\Class_::MODIFIER_PRIVATE   ? 'private '   : '')
+             . ($modifiers & Stmt\Class_::MODIFIER_STATIC    ? 'static '    : '')
+             . ($modifiers & Stmt\Class_::MODIFIER_ABSTRACT  ? 'abstract '  : '')
+             . ($modifiers & Stmt\Class_::MODIFIER_FINAL     ? 'final '     : '');
+    }
+
+    /** @internal */
+    public function pEncapsList(array $encapsList, $quote) {
+        $return = '';
+        foreach ($encapsList as $element) {
+            if (is_string($element)) {
+                $return .= addcslashes($element, "\n\r\t\f\v$" . $quote . "\\");
+            } else {
+                $return .= '{' . $this->p($element) . '}';
+            }
+        }
+
+        return $return;
+    }
+
+    /** @internal */
+    public function pVarOrNewExpr(Node $node) {
+        if ($node instanceof Expr\New_) {
+            return '(' . $this->p($node) . ')';
+        } else {
+            return $this->p($node);
+        }
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
new file mode 100644
index 0000000..e4195ff
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
@@ -0,0 +1,270 @@
+ array(  0,  1),
+        'Expr_BitwiseNot'              => array( 10,  1),
+        'Expr_PreInc'                  => array( 10,  1),
+        'Expr_PreDec'                  => array( 10,  1),
+        'Expr_PostInc'                 => array( 10, -1),
+        'Expr_PostDec'                 => array( 10, -1),
+        'Expr_UnaryPlus'               => array( 10,  1),
+        'Expr_UnaryMinus'              => array( 10,  1),
+        'Expr_Cast_Int'                => array( 10,  1),
+        'Expr_Cast_Double'             => array( 10,  1),
+        'Expr_Cast_String'             => array( 10,  1),
+        'Expr_Cast_Array'              => array( 10,  1),
+        'Expr_Cast_Object'             => array( 10,  1),
+        'Expr_Cast_Bool'               => array( 10,  1),
+        'Expr_Cast_Unset'              => array( 10,  1),
+        'Expr_ErrorSuppress'           => array( 10,  1),
+        'Expr_Instanceof'              => array( 20,  0),
+        'Expr_BooleanNot'              => array( 30,  1),
+        'Expr_BinaryOp_Mul'            => array( 40, -1),
+        'Expr_BinaryOp_Div'            => array( 40, -1),
+        'Expr_BinaryOp_Mod'            => array( 40, -1),
+        'Expr_BinaryOp_Plus'           => array( 50, -1),
+        'Expr_BinaryOp_Minus'          => array( 50, -1),
+        'Expr_BinaryOp_Concat'         => array( 50, -1),
+        'Expr_BinaryOp_ShiftLeft'      => array( 60, -1),
+        'Expr_BinaryOp_ShiftRight'     => array( 60, -1),
+        'Expr_BinaryOp_Smaller'        => array( 70,  0),
+        'Expr_BinaryOp_SmallerOrEqual' => array( 70,  0),
+        'Expr_BinaryOp_Greater'        => array( 70,  0),
+        'Expr_BinaryOp_GreaterOrEqual' => array( 70,  0),
+        'Expr_BinaryOp_Equal'          => array( 80,  0),
+        'Expr_BinaryOp_NotEqual'       => array( 80,  0),
+        'Expr_BinaryOp_Identical'      => array( 80,  0),
+        'Expr_BinaryOp_NotIdentical'   => array( 80,  0),
+        'Expr_BinaryOp_Spaceship'      => array( 80,  0),
+        'Expr_BinaryOp_BitwiseAnd'     => array( 90, -1),
+        'Expr_BinaryOp_BitwiseXor'     => array(100, -1),
+        'Expr_BinaryOp_BitwiseOr'      => array(110, -1),
+        'Expr_BinaryOp_BooleanAnd'     => array(120, -1),
+        'Expr_BinaryOp_BooleanOr'      => array(130, -1),
+        'Expr_BinaryOp_Coalesce'       => array(140,  1),
+        'Expr_Ternary'                 => array(150, -1),
+        // parser uses %left for assignments, but they really behave as %right
+        'Expr_Assign'                  => array(160,  1),
+        'Expr_AssignRef'               => array(160,  1),
+        'Expr_AssignOp_Plus'           => array(160,  1),
+        'Expr_AssignOp_Minus'          => array(160,  1),
+        'Expr_AssignOp_Mul'            => array(160,  1),
+        'Expr_AssignOp_Div'            => array(160,  1),
+        'Expr_AssignOp_Concat'         => array(160,  1),
+        'Expr_AssignOp_Mod'            => array(160,  1),
+        'Expr_AssignOp_BitwiseAnd'     => array(160,  1),
+        'Expr_AssignOp_BitwiseOr'      => array(160,  1),
+        'Expr_AssignOp_BitwiseXor'     => array(160,  1),
+        'Expr_AssignOp_ShiftLeft'      => array(160,  1),
+        'Expr_AssignOp_ShiftRight'     => array(160,  1),
+        'Expr_AssignOp_Pow'            => array(160,  1),
+        'Expr_YieldFrom'               => array(165,  1),
+        'Expr_Print'                   => array(168,  1),
+        'Expr_BinaryOp_LogicalAnd'     => array(170, -1),
+        'Expr_BinaryOp_LogicalXor'     => array(180, -1),
+        'Expr_BinaryOp_LogicalOr'      => array(190, -1),
+        'Expr_Include'                 => array(200, -1),
+    );
+
+    protected $noIndentToken;
+    protected $canUseSemicolonNamespaces;
+
+    public function __construct() {
+        $this->noIndentToken = '_NO_INDENT_' . mt_rand();
+    }
+
+    /**
+     * Pretty prints an array of statements.
+     *
+     * @param Node[] $stmts Array of statements
+     *
+     * @return string Pretty printed statements
+     */
+    public function prettyPrint(array $stmts) {
+        $this->preprocessNodes($stmts);
+
+        return ltrim(str_replace("\n" . $this->noIndentToken, "\n", $this->pStmts($stmts, false)));
+    }
+
+    /**
+     * Pretty prints an expression.
+     *
+     * @param Expr $node Expression node
+     *
+     * @return string Pretty printed node
+     */
+    public function prettyPrintExpr(Expr $node) {
+        return str_replace("\n" . $this->noIndentToken, "\n", $this->p($node));
+    }
+
+    /**
+     * Pretty prints a file of statements (includes the opening prettyPrint($stmts));
+
+        $p = preg_replace('/^\?>\n?/', '', $p, -1, $count);
+        $p = preg_replace('/<\?php$/', '', $p);
+
+        if (!$count) {
+            $p = "canUseSemicolonNamespaces = true;
+        foreach ($nodes as $node) {
+            if ($node instanceof Stmt\Namespace_ && null === $node->name) {
+                $this->canUseSemicolonNamespaces = false;
+            }
+        }
+    }
+
+    /**
+     * 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, $indent = true) {
+        $result = '';
+        foreach ($nodes as $node) {
+            $result .= "\n"
+                    . $this->pComments($node->getAttribute('comments', array()))
+                    . $this->p($node)
+                    . ($node instanceof Expr ? ';' : '');
+        }
+
+        if ($indent) {
+            return preg_replace('~\n(?!$|' . $this->noIndentToken . ')~', "\n    ", $result);
+        } else {
+            return $result;
+        }
+    }
+
+    /**
+     * Pretty prints a node.
+     *
+     * @param Node $node Node to be pretty printed
+     *
+     * @return string Pretty printed node
+     */
+    protected function p(Node $node) {
+        return $this->{'p' . $node->getType()}($node);
+    }
+
+    protected function pInfixOp($type, Node $leftNode, $operatorString, Node $rightNode) {
+        list($precedence, $associativity) = $this->precedenceMap[$type];
+
+        return $this->pPrec($leftNode, $precedence, $associativity, -1)
+             . $operatorString
+             . $this->pPrec($rightNode, $precedence, $associativity, 1);
+    }
+
+    protected function pPrefixOp($type, $operatorString, Node $node) {
+        list($precedence, $associativity) = $this->precedenceMap[$type];
+        return $operatorString . $this->pPrec($node, $precedence, $associativity, 1);
+    }
+
+    protected function pPostfixOp($type, Node $node, $operatorString) {
+        list($precedence, $associativity) = $this->precedenceMap[$type];
+        return $this->pPrec($node, $precedence, $associativity, -1) . $operatorString;
+    }
+
+    /**
+     * Prints an expression node with the least amount of parentheses necessary to preserve the meaning.
+     *
+     * @param Node $node                Node to pretty print
+     * @param int  $parentPrecedence    Precedence of the parent operator
+     * @param int  $parentAssociativity Associativity of parent operator
+     *                                  (-1 is left, 0 is nonassoc, 1 is right)
+     * @param int  $childPosition       Position of the node relative to the operator
+     *                                  (-1 is left, 1 is right)
+     *
+     * @return string The pretty printed node
+     */
+    protected function pPrec(Node $node, $parentPrecedence, $parentAssociativity, $childPosition) {
+        $type = $node->getType();
+        if (isset($this->precedenceMap[$type])) {
+            $childPrecedence = $this->precedenceMap[$type][0];
+            if ($childPrecedence > $parentPrecedence
+                || ($parentPrecedence == $childPrecedence && $parentAssociativity != $childPosition)
+            ) {
+                return '(' . $this->{'p' . $type}($node) . ')';
+            }
+        }
+
+        return $this->{'p' . $type}($node);
+    }
+
+    /**
+     * 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
+     */
+    protected function pImplode(array $nodes, $glue = '') {
+        $pNodes = array();
+        foreach ($nodes as $node) {
+            $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) {
+        return $this->pImplode($nodes, ', ');
+    }
+
+    /**
+     * Signals the pretty printer that a string shall not be indented.
+     *
+     * @param string $string Not to be indented string
+     *
+     * @return mixed String marked with $this->noIndentToken's.
+     */
+    protected function pNoIndent($string) {
+        return str_replace("\n", "\n" . $this->noIndentToken, $string);
+    }
+
+    protected function pComments(array $comments) {
+        $result = '';
+
+        foreach ($comments as $comment) {
+            $result .= $comment->getReformattedText() . "\n";
+        }
+
+        return $result;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Serializer.php b/vendor/nikic/php-parser/lib/PhpParser/Serializer.php
new file mode 100644
index 0000000..7c173cd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Serializer.php
@@ -0,0 +1,15 @@
+writer = new XMLWriter;
+        $this->writer->openMemory();
+        $this->writer->setIndent(true);
+    }
+
+    public function serialize(array $nodes) {
+        $this->writer->flush();
+        $this->writer->startDocument('1.0', 'UTF-8');
+
+        $this->writer->startElement('AST');
+        $this->writer->writeAttribute('xmlns:node',      'http://nikic.github.com/PHPParser/XML/node');
+        $this->writer->writeAttribute('xmlns:subNode',   'http://nikic.github.com/PHPParser/XML/subNode');
+        $this->writer->writeAttribute('xmlns:attribute', 'http://nikic.github.com/PHPParser/XML/attribute');
+        $this->writer->writeAttribute('xmlns:scalar',    'http://nikic.github.com/PHPParser/XML/scalar');
+
+        $this->_serialize($nodes);
+
+        $this->writer->endElement();
+
+        return $this->writer->outputMemory();
+    }
+
+    protected function _serialize($node) {
+        if ($node instanceof Node) {
+            $this->writer->startElement('node:' . $node->getType());
+
+            foreach ($node->getAttributes() as $name => $value) {
+                $this->writer->startElement('attribute:' . $name);
+                $this->_serialize($value);
+                $this->writer->endElement();
+            }
+
+            foreach ($node as $name => $subNode) {
+                $this->writer->startElement('subNode:' . $name);
+                $this->_serialize($subNode);
+                $this->writer->endElement();
+            }
+
+            $this->writer->endElement();
+        } elseif ($node instanceof Comment) {
+            $this->writer->startElement('comment');
+            $this->writer->writeAttribute('isDocComment', $node instanceof Comment\Doc ? 'true' : 'false');
+            $this->writer->writeAttribute('line', (string) $node->getLine());
+            $this->writer->text($node->getText());
+            $this->writer->endElement();
+        } elseif (is_array($node)) {
+            $this->writer->startElement('scalar:array');
+            foreach ($node as $subNode) {
+                $this->_serialize($subNode);
+            }
+            $this->writer->endElement();
+        } elseif (is_string($node)) {
+            $this->writer->writeElement('scalar:string', $node);
+        } elseif (is_int($node)) {
+            $this->writer->writeElement('scalar:int', (string) $node);
+        } elseif (is_float($node)) {
+            // TODO Higher precision conversion?
+            $this->writer->writeElement('scalar:float', (string) $node);
+        } elseif (true === $node) {
+            $this->writer->writeElement('scalar:true');
+        } elseif (false === $node) {
+            $this->writer->writeElement('scalar:false');
+        } elseif (null === $node) {
+            $this->writer->writeElement('scalar:null');
+        } else {
+            throw new \InvalidArgumentException('Unexpected node type');
+        }
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Unserializer.php b/vendor/nikic/php-parser/lib/PhpParser/Unserializer.php
new file mode 100644
index 0000000..bfa6da0
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Unserializer.php
@@ -0,0 +1,15 @@
+reader = new XMLReader;
+    }
+
+    public function unserialize($string) {
+        $this->reader->XML($string);
+
+        $this->reader->read();
+        if ('AST' !== $this->reader->name) {
+            throw new DomainException('AST root element not found');
+        }
+
+        return $this->read($this->reader->depth);
+    }
+
+    protected function read($depthLimit, $throw = true, &$nodeFound = null) {
+        $nodeFound = true;
+        while ($this->reader->read() && $depthLimit < $this->reader->depth) {
+            if (XMLReader::ELEMENT !== $this->reader->nodeType) {
+                continue;
+            }
+
+            if ('node' === $this->reader->prefix) {
+                return $this->readNode();
+            } elseif ('scalar' === $this->reader->prefix) {
+                return $this->readScalar();
+            } elseif ('comment' === $this->reader->name) {
+                return $this->readComment();
+            } else {
+                throw new DomainException(sprintf('Unexpected node of type "%s"', $this->reader->name));
+            }
+        }
+
+        $nodeFound = false;
+        if ($throw) {
+            throw new DomainException('Expected node or scalar');
+        }
+    }
+
+    protected function readNode() {
+        $className = $this->getClassNameFromType($this->reader->localName);
+
+        // create the node without calling it's constructor
+        $node = unserialize(
+            sprintf(
+                "O:%d:\"%s\":1:{s:13:\"\0*\0attributes\";a:0:{}}",
+                strlen($className), $className
+            )
+        );
+
+        $depthLimit = $this->reader->depth;
+        while ($this->reader->read() && $depthLimit < $this->reader->depth) {
+            if (XMLReader::ELEMENT !== $this->reader->nodeType) {
+                continue;
+            }
+
+            $type = $this->reader->prefix;
+            if ('subNode' !== $type && 'attribute' !== $type) {
+                throw new DomainException(
+                    sprintf('Expected sub node or attribute, got node of type "%s"', $this->reader->name)
+                );
+            }
+
+            $name = $this->reader->localName;
+            $value = $this->read($this->reader->depth);
+
+            if ('subNode' === $type) {
+                $node->$name = $value;
+            } else {
+                $node->setAttribute($name, $value);
+            }
+        }
+
+        return $node;
+    }
+
+    protected function readScalar() {
+        switch ($name = $this->reader->localName) {
+            case 'array':
+                $depth = $this->reader->depth;
+                $array = array();
+                while (true) {
+                    $node = $this->read($depth, false, $nodeFound);
+                    if (!$nodeFound) {
+                        break;
+                    }
+                    $array[] = $node;
+                }
+                return $array;
+            case 'string':
+                return $this->reader->readString();
+            case 'int':
+                return $this->parseInt($this->reader->readString());
+            case 'float':
+                $text = $this->reader->readString();
+                if (false === $float = filter_var($text, FILTER_VALIDATE_FLOAT)) {
+                    throw new DomainException(sprintf('"%s" is not a valid float', $text));
+                }
+                return $float;
+            case 'true':
+            case 'false':
+            case 'null':
+                if (!$this->reader->isEmptyElement) {
+                    throw new DomainException(sprintf('"%s" scalar must be empty', $name));
+                }
+                return constant($name);
+            default:
+                throw new DomainException(sprintf('Unknown scalar type "%s"', $name));
+        }
+    }
+
+    private function parseInt($text) {
+        if (false === $int = filter_var($text, FILTER_VALIDATE_INT)) {
+            throw new DomainException(sprintf('"%s" is not a valid integer', $text));
+        }
+        return $int;
+    }
+
+    protected function readComment() {
+        $className = $this->reader->getAttribute('isDocComment') === 'true'
+            ? 'PhpParser\Comment\Doc'
+            : 'PhpParser\Comment'
+        ;
+        return new $className(
+            $this->reader->readString(),
+            $this->parseInt($this->reader->getAttribute('line'))
+        );
+    }
+
+    protected function getClassNameFromType($type) {
+        $className = 'PhpParser\\Node\\' . strtr($type, '_', '\\');
+        if (!class_exists($className)) {
+            $className .= '_';
+        }
+        if (!class_exists($className)) {
+            throw new DomainException(sprintf('Unknown node type "%s"', $type));
+        }
+        return $className;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/bootstrap.php b/vendor/nikic/php-parser/lib/bootstrap.php
new file mode 100644
index 0000000..b0f5178
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/bootstrap.php
@@ -0,0 +1,6 @@
+
+
+
+    
+        
+            ./test/
+        
+    
+
+    
+        
+            ./lib/PhpParser/
+        
+    
+
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PhpParser/AutoloaderTest.php b/vendor/nikic/php-parser/test/PhpParser/AutoloaderTest.php
new file mode 100644
index 0000000..4fdc4c2
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/AutoloaderTest.php
@@ -0,0 +1,41 @@
+assertInstanceof('PhpParser\Lexer', $lexer);
+        $this->assertInstanceof('PhpParser\Parser', $parser);
+        $this->assertInstanceof('PhpParser\PrettyPrinter\Standard', $prettyPrinter);
+    }
+
+    public function testPhp7ReservedNames() {
+        if (version_compare(PHP_VERSION, '7.0-dev', '>=')) {
+            $this->markTestSkipped('Cannot create aliases to reserved names on PHP 7');
+        }
+
+        $this->assertTrue(new Expr\Cast\Bool_(new Expr\Variable('foo')) instanceof Expr\Cast\Bool);
+        $this->assertTrue(new Expr\Cast\Int_(new Expr\Variable('foo')) instanceof Expr\Cast\Int);
+
+        $this->assertInstanceof('PhpParser\Node\Expr\Cast\Object_', new Expr\Cast\Object(new Expr\Variable('foo')));
+        $this->assertInstanceof('PhpParser\Node\Expr\Cast\String_', new Expr\Cast\String(new Expr\Variable('foo')));
+        $this->assertInstanceof('PhpParser\Node\Scalar\String_', new Scalar\String('foobar'));
+    }
+
+    public function testClassExists() {
+        $this->assertTrue(class_exists('PhpParser\NodeVisitorAbstract'));
+        $this->assertTrue(class_exists('PHPParser_NodeVisitor_NameResolver'));
+
+        $this->assertFalse(class_exists('PhpParser\FooBar'));
+        $this->assertFalse(class_exists('PHPParser_FooBar'));
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php
new file mode 100644
index 0000000..94ce67a
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php
@@ -0,0 +1,161 @@
+createClassBuilder('SomeLogger')
+            ->extend('BaseLogger')
+            ->implement('Namespaced\Logger', new Name('SomeInterface'))
+            ->implement('\Fully\Qualified', 'namespace\NamespaceRelative')
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Class_('SomeLogger', array(
+                'extends' => new Name('BaseLogger'),
+                'implements' => array(
+                    new Name('Namespaced\Logger'),
+                    new Name('SomeInterface'),
+                    new Name\FullyQualified('Fully\Qualified'),
+                    new Name\Relative('NamespaceRelative'),
+                ),
+            )),
+            $node
+        );
+    }
+
+    public function testAbstract() {
+        $node = $this->createClassBuilder('Test')
+            ->makeAbstract()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Class_('Test', array(
+                'type' => Stmt\Class_::MODIFIER_ABSTRACT
+            )),
+            $node
+        );
+    }
+
+    public function testFinal() {
+        $node = $this->createClassBuilder('Test')
+            ->makeFinal()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Class_('Test', array(
+                'type' => Stmt\Class_::MODIFIER_FINAL
+            )),
+            $node
+        );
+    }
+
+    public function testStatementOrder() {
+        $method = new Stmt\ClassMethod('testMethod');
+        $property = new Stmt\Property(
+            Stmt\Class_::MODIFIER_PUBLIC,
+            array(new Stmt\PropertyProperty('testProperty'))
+        );
+        $const = new Stmt\ClassConst(array(
+            new Node\Const_('TEST_CONST', new Node\Scalar\String_('ABC'))
+        ));
+        $use = new Stmt\TraitUse(array(new Name('SomeTrait')));
+
+        $node = $this->createClassBuilder('Test')
+            ->addStmt($method)
+            ->addStmt($property)
+            ->addStmts(array($const, $use))
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Class_('Test', array(
+                'stmts' => array($use, $const, $property, $method)
+            )),
+            $node
+        );
+    }
+
+    public function testDocComment() {
+        $docComment = <<<'DOC'
+/**
+ * Test
+ */
+DOC;
+        $class = $this->createClassBuilder('Test')
+            ->setDocComment($docComment)
+            ->getNode();
+
+        $this->assertEquals(
+            new Stmt\Class_('Test', array(), array(
+                'comments' => array(
+                    new Comment\Doc($docComment)
+                )
+            )),
+            $class
+        );
+
+        $class = $this->createClassBuilder('Test')
+            ->setDocComment(new Comment\Doc($docComment))
+            ->getNode();
+
+        $this->assertEquals(
+            new Stmt\Class_('Test', array(), array(
+                'comments' => array(
+                    new Comment\Doc($docComment)
+                )
+            )),
+            $class
+        );
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Unexpected node of type "Stmt_Echo"
+     */
+    public function testInvalidStmtError() {
+        $this->createClassBuilder('Test')
+            ->addStmt(new Stmt\Echo_(array()))
+        ;
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Doc comment must be a string or an instance of PhpParser\Comment\Doc
+     */
+    public function testInvalidDocComment() {
+        $this->createClassBuilder('Test')
+            ->setDocComment(new Comment('Test'));
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Name cannot be empty
+     */
+    public function testEmptyName() {
+        $this->createClassBuilder('Test')
+            ->extend('');
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Name must be a string or an instance of PhpParser\Node\Name
+     */
+    public function testInvalidName() {
+        $this->createClassBuilder('Test')
+            ->extend(array('Foo'));
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php
new file mode 100644
index 0000000..88fb205
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php
@@ -0,0 +1,88 @@
+createFunctionBuilder('test')
+            ->makeReturnByRef()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Function_('test', array(
+                'byRef' => true
+            )),
+            $node
+        );
+    }
+
+    public function testParams() {
+        $param1 = new Node\Param('test1');
+        $param2 = new Node\Param('test2');
+        $param3 = new Node\Param('test3');
+
+        $node = $this->createFunctionBuilder('test')
+            ->addParam($param1)
+            ->addParams(array($param2, $param3))
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Function_('test', array(
+                'params' => array($param1, $param2, $param3)
+            )),
+            $node
+        );
+    }
+
+    public function testStmts() {
+        $stmt1 = new Print_(new String_('test1'));
+        $stmt2 = new Print_(new String_('test2'));
+        $stmt3 = new Print_(new String_('test3'));
+
+        $node = $this->createFunctionBuilder('test')
+            ->addStmt($stmt1)
+            ->addStmts(array($stmt2, $stmt3))
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Function_('test', array(
+                'stmts' => array($stmt1, $stmt2, $stmt3)
+            )),
+            $node
+        );
+    }
+
+    public function testDocComment() {
+        $node = $this->createFunctionBuilder('test')
+            ->setDocComment('/** Test */')
+            ->getNode();
+
+        $this->assertEquals(new Stmt\Function_('test', array(), array(
+            'comments' => array(new Comment\Doc('/** Test */'))
+        )), $node);
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Expected parameter node, got "Name"
+     */
+    public function testInvalidParamError() {
+        $this->createFunctionBuilder('test')
+            ->addParam(new Node\Name('foo'))
+        ;
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php
new file mode 100644
index 0000000..c0d2fe3
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php
@@ -0,0 +1,105 @@
+builder = new Interface_('Contract');
+    }
+
+    private function dump($node) {
+        $pp = new \PhpParser\PrettyPrinter\Standard;
+        return $pp->prettyPrint(array($node));
+    }
+
+    public function testEmpty() {
+        $contract = $this->builder->getNode();
+        $this->assertInstanceOf('PhpParser\Node\Stmt\Interface_', $contract);
+        $this->assertSame('Contract', $contract->name);
+    }
+
+    public function testExtending() {
+        $contract = $this->builder->extend('Space\Root1', 'Root2')->getNode();
+        $this->assertEquals(
+            new Stmt\Interface_('Contract', array(
+                'extends' => array(
+                    new Node\Name('Space\Root1'),
+                    new Node\Name('Root2')
+                ),
+            )), $contract
+        );
+    }
+
+    public function testAddMethod() {
+        $method = new Stmt\ClassMethod('doSomething');
+        $contract = $this->builder->addStmt($method)->getNode();
+        $this->assertSame(array($method), $contract->stmts);
+    }
+
+    public function testAddConst() {
+        $const = new Stmt\ClassConst(array(
+            new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458.0))
+        ));
+        $contract = $this->builder->addStmt($const)->getNode();
+        $this->assertSame(299792458.0, $contract->stmts[0]->consts[0]->value->value);
+    }
+
+    public function testOrder() {
+        $const = new Stmt\ClassConst(array(
+            new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458))
+        ));
+        $method = new Stmt\ClassMethod('doSomething');
+        $contract = $this->builder
+            ->addStmt($method)
+            ->addStmt($const)
+            ->getNode()
+        ;
+
+        $this->assertInstanceOf('PhpParser\Node\Stmt\ClassConst', $contract->stmts[0]);
+        $this->assertInstanceOf('PhpParser\Node\Stmt\ClassMethod', $contract->stmts[1]);
+    }
+
+    public function testDocComment() {
+        $node = $this->builder
+            ->setDocComment('/** Test */')
+            ->getNode();
+
+        $this->assertEquals(new Stmt\Interface_('Contract', array(), array(
+            'comments' => array(new Comment\Doc('/** Test */'))
+        )), $node);
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Unexpected node of type "Stmt_PropertyProperty"
+     */
+    public function testInvalidStmtError() {
+        $this->builder->addStmt(new Stmt\PropertyProperty('invalid'));
+    }
+
+    public function testFullFunctional() {
+        $const = new Stmt\ClassConst(array(
+            new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458))
+        ));
+        $method = new Stmt\ClassMethod('doSomething');
+        $contract = $this->builder
+            ->addStmt($method)
+            ->addStmt($const)
+            ->getNode()
+        ;
+
+        eval($this->dump($contract));
+
+        $this->assertTrue(interface_exists('Contract', false));
+    }
+}
+
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php
new file mode 100644
index 0000000..668d13f
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php
@@ -0,0 +1,154 @@
+createMethodBuilder('test')
+            ->makePublic()
+            ->makeAbstract()
+            ->makeStatic()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\ClassMethod('test', array(
+                'type' => Stmt\Class_::MODIFIER_PUBLIC
+                        | Stmt\Class_::MODIFIER_ABSTRACT
+                        | Stmt\Class_::MODIFIER_STATIC,
+                'stmts' => null,
+            )),
+            $node
+        );
+
+        $node = $this->createMethodBuilder('test')
+            ->makeProtected()
+            ->makeFinal()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\ClassMethod('test', array(
+                'type' => Stmt\Class_::MODIFIER_PROTECTED
+                        | Stmt\Class_::MODIFIER_FINAL
+            )),
+            $node
+        );
+
+        $node = $this->createMethodBuilder('test')
+            ->makePrivate()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\ClassMethod('test', array(
+                'type' => Stmt\Class_::MODIFIER_PRIVATE
+            )),
+            $node
+        );
+    }
+
+    public function testReturnByRef() {
+        $node = $this->createMethodBuilder('test')
+            ->makeReturnByRef()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\ClassMethod('test', array(
+                'byRef' => true
+            )),
+            $node
+        );
+    }
+
+    public function testParams() {
+        $param1 = new Node\Param('test1');
+        $param2 = new Node\Param('test2');
+        $param3 = new Node\Param('test3');
+
+        $node = $this->createMethodBuilder('test')
+            ->addParam($param1)
+            ->addParams(array($param2, $param3))
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\ClassMethod('test', array(
+                'params' => array($param1, $param2, $param3)
+            )),
+            $node
+        );
+    }
+
+    public function testStmts() {
+        $stmt1 = new Print_(new String_('test1'));
+        $stmt2 = new Print_(new String_('test2'));
+        $stmt3 = new Print_(new String_('test3'));
+
+        $node = $this->createMethodBuilder('test')
+            ->addStmt($stmt1)
+            ->addStmts(array($stmt2, $stmt3))
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\ClassMethod('test', array(
+                'stmts' => array($stmt1, $stmt2, $stmt3)
+            )),
+            $node
+        );
+    }
+    public function testDocComment() {
+        $node = $this->createMethodBuilder('test')
+            ->setDocComment('/** Test */')
+            ->getNode();
+
+        $this->assertEquals(new Stmt\ClassMethod('test', array(), array(
+            'comments' => array(new Comment\Doc('/** Test */'))
+        )), $node);
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Cannot add statements to an abstract method
+     */
+    public function testAddStmtToAbstractMethodError() {
+        $this->createMethodBuilder('test')
+            ->makeAbstract()
+            ->addStmt(new Print_(new String_('test')))
+        ;
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Cannot make method with statements abstract
+     */
+    public function testMakeMethodWithStmtsAbstractError() {
+        $this->createMethodBuilder('test')
+            ->addStmt(new Print_(new String_('test')))
+            ->makeAbstract()
+        ;
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Expected parameter node, got "Name"
+     */
+    public function testInvalidParamError() {
+        $this->createMethodBuilder('test')
+            ->addParam(new Node\Name('foo'))
+        ;
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php
new file mode 100644
index 0000000..54e8c93
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php
@@ -0,0 +1,41 @@
+createNamespaceBuilder('Name\Space')
+            ->addStmt($stmt1)
+            ->addStmts(array($stmt2, $stmt3))
+            ->getNode()
+        ;
+        $this->assertEquals($expected, $node);
+
+        $node = $this->createNamespaceBuilder(new Node\Name(array('Name', 'Space')))
+            ->addStmts(array($stmt1, $stmt2))
+            ->addStmt($stmt3)
+            ->getNode()
+        ;
+        $this->assertEquals($expected, $node);
+
+        $node = $this->createNamespaceBuilder(null)->getNode();
+        $this->assertNull($node->name);
+        $this->assertEmpty($node->stmts);
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php
new file mode 100644
index 0000000..f71a10c
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php
@@ -0,0 +1,124 @@
+createParamBuilder('test')
+            ->setDefault($value)
+            ->getNode()
+        ;
+
+        $this->assertEquals($expectedValueNode, $node->default);
+    }
+
+    public function provideTestDefaultValues() {
+        return array(
+            array(
+                null,
+                new Expr\ConstFetch(new Node\Name('null'))
+            ),
+            array(
+                true,
+                new Expr\ConstFetch(new Node\Name('true'))
+            ),
+            array(
+                false,
+                new Expr\ConstFetch(new Node\Name('false'))
+            ),
+            array(
+                31415,
+                new Scalar\LNumber(31415)
+            ),
+            array(
+                3.1415,
+                new Scalar\DNumber(3.1415)
+            ),
+            array(
+                'Hallo World',
+                new Scalar\String_('Hallo World')
+            ),
+            array(
+                array(1, 2, 3),
+                new Expr\Array_(array(
+                    new Expr\ArrayItem(new Scalar\LNumber(1)),
+                    new Expr\ArrayItem(new Scalar\LNumber(2)),
+                    new Expr\ArrayItem(new Scalar\LNumber(3)),
+                ))
+            ),
+            array(
+                array('foo' => 'bar', 'bar' => 'foo'),
+                new Expr\Array_(array(
+                    new Expr\ArrayItem(
+                        new Scalar\String_('bar'),
+                        new Scalar\String_('foo')
+                    ),
+                    new Expr\ArrayItem(
+                        new Scalar\String_('foo'),
+                        new Scalar\String_('bar')
+                    ),
+                ))
+            ),
+            array(
+                new Scalar\MagicConst\Dir,
+                new Scalar\MagicConst\Dir
+            )
+        );
+    }
+
+    public function testTypeHints() {
+        $node = $this->createParamBuilder('test')
+            ->setTypeHint('array')
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Node\Param('test', null, 'array'),
+            $node
+        );
+
+        $node = $this->createParamBuilder('test')
+            ->setTypeHint('callable')
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Node\Param('test', null, 'callable'),
+            $node
+        );
+
+        $node = $this->createParamBuilder('test')
+            ->setTypeHint('Some\Class')
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Node\Param('test', null, new Node\Name('Some\Class')),
+            $node
+        );
+    }
+
+    public function testByRef() {
+        $node = $this->createParamBuilder('test')
+            ->makeByRef()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Node\Param('test', null, null, true),
+            $node
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php
new file mode 100644
index 0000000..1e62173
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php
@@ -0,0 +1,147 @@
+createPropertyBuilder('test')
+            ->makePrivate()
+            ->makeStatic()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Property(
+                Stmt\Class_::MODIFIER_PRIVATE
+              | Stmt\Class_::MODIFIER_STATIC,
+                array(
+                    new Stmt\PropertyProperty('test')
+                )
+            ),
+            $node
+        );
+
+        $node = $this->createPropertyBuilder('test')
+            ->makeProtected()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Property(
+                Stmt\Class_::MODIFIER_PROTECTED,
+                array(
+                    new Stmt\PropertyProperty('test')
+                )
+            ),
+            $node
+        );
+
+        $node = $this->createPropertyBuilder('test')
+            ->makePublic()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Stmt\Property(
+                Stmt\Class_::MODIFIER_PUBLIC,
+                array(
+                    new Stmt\PropertyProperty('test')
+                )
+            ),
+            $node
+        );
+    }
+
+    public function testDocComment() {
+        $node = $this->createPropertyBuilder('test')
+            ->setDocComment('/** Test */')
+            ->getNode();
+
+        $this->assertEquals(new Stmt\Property(
+            Stmt\Class_::MODIFIER_PUBLIC,
+            array(
+                new Stmt\PropertyProperty('test')
+            ),
+            array(
+                'comments' => array(new Comment\Doc('/** Test */'))
+            )
+        ), $node);
+    }
+
+    /**
+     * @dataProvider provideTestDefaultValues
+     */
+    public function testDefaultValues($value, $expectedValueNode) {
+        $node = $this->createPropertyBuilder('test')
+            ->setDefault($value)
+            ->getNode()
+        ;
+
+        $this->assertEquals($expectedValueNode, $node->props[0]->default);
+    }
+
+    public function provideTestDefaultValues() {
+        return array(
+            array(
+                null,
+                new Expr\ConstFetch(new Name('null'))
+            ),
+            array(
+                true,
+                new Expr\ConstFetch(new Name('true'))
+            ),
+            array(
+                false,
+                new Expr\ConstFetch(new Name('false'))
+            ),
+            array(
+                31415,
+                new Scalar\LNumber(31415)
+            ),
+            array(
+                3.1415,
+                new Scalar\DNumber(3.1415)
+            ),
+            array(
+                'Hallo World',
+                new Scalar\String_('Hallo World')
+            ),
+            array(
+                array(1, 2, 3),
+                new Expr\Array_(array(
+                    new Expr\ArrayItem(new Scalar\LNumber(1)),
+                    new Expr\ArrayItem(new Scalar\LNumber(2)),
+                    new Expr\ArrayItem(new Scalar\LNumber(3)),
+                ))
+            ),
+            array(
+                array('foo' => 'bar', 'bar' => 'foo'),
+                new Expr\Array_(array(
+                    new Expr\ArrayItem(
+                        new Scalar\String_('bar'),
+                        new Scalar\String_('foo')
+                    ),
+                    new Expr\ArrayItem(
+                        new Scalar\String_('foo'),
+                        new Scalar\String_('bar')
+                    ),
+                ))
+            ),
+            array(
+                new Scalar\MagicConst\Dir,
+                new Scalar\MagicConst\Dir
+            )
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php
new file mode 100644
index 0000000..a6d69ad
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php
@@ -0,0 +1,47 @@
+createTraitBuilder('TestTrait')
+            ->setDocComment('/** Nice trait */')
+            ->addStmt($method1)
+            ->addStmts(array($method2, $method3))
+            ->addStmt($prop)
+            ->getNode();
+        $this->assertEquals(new Stmt\Trait_('TestTrait', array(
+            $prop, $method1, $method2, $method3
+        ), array(
+            'comments' => array(
+                new Comment\Doc('/** Nice trait */')
+            )
+        )), $trait);
+    }
+
+    /**
+     * @expectedException \LogicException
+     * @expectedExceptionMessage Unexpected node of type "Stmt_Echo"
+     */
+    public function testInvalidStmtError() {
+        $this->createTraitBuilder('Test')
+            ->addStmt(new Stmt\Echo_(array()))
+        ;
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php
new file mode 100644
index 0000000..adaeb3a
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php
@@ -0,0 +1,35 @@
+createUseBuilder('Foo\Bar')->getNode();
+        $this->assertEquals(new Stmt\Use_(array(
+            new Stmt\UseUse(new Name('Foo\Bar'), 'Bar')
+        )), $node);
+
+        $node = $this->createUseBuilder(new Name('Foo\Bar'))->as('XYZ')->getNode();
+        $this->assertEquals(new Stmt\Use_(array(
+            new Stmt\UseUse(new Name('Foo\Bar'), 'XYZ')
+        )), $node);
+
+        $node = $this->createUseBuilder('foo\bar', Stmt\Use_::TYPE_FUNCTION)->as('foo')->getNode();
+        $this->assertEquals(new Stmt\Use_(array(
+            new Stmt\UseUse(new Name('foo\bar'), 'foo')
+        ), Stmt\Use_::TYPE_FUNCTION), $node);
+    }
+
+    public function testNonExistingMethod() {
+        $this->setExpectedException('LogicException', 'Method "foo" does not exist');
+        $builder = $this->createUseBuilder('Test');
+        $builder->foo();
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php b/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php
new file mode 100644
index 0000000..1c3ef18
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php
@@ -0,0 +1,108 @@
+assertInstanceOf($className, $factory->$methodName('test'));
+    }
+
+    public function provideTestFactory() {
+        return array(
+            array('namespace', 'PhpParser\Builder\Namespace_'),
+            array('class',     'PhpParser\Builder\Class_'),
+            array('interface', 'PhpParser\Builder\Interface_'),
+            array('trait',     'PhpParser\Builder\Trait_'),
+            array('method',    'PhpParser\Builder\Method'),
+            array('function',  'PhpParser\Builder\Function_'),
+            array('property',  'PhpParser\Builder\Property'),
+            array('param',     'PhpParser\Builder\Param'),
+            array('use',       'PhpParser\Builder\Use_'),
+        );
+    }
+
+    public function testNonExistingMethod() {
+        $this->setExpectedException('LogicException', 'Method "foo" does not exist');
+        $factory = new BuilderFactory();
+        $factory->foo();
+    }
+
+    public function testIntegration() {
+        $factory = new BuilderFactory;
+        $node = $factory->namespace('Name\Space')
+            ->addStmt($factory->use('Foo\Bar\SomeOtherClass'))
+            ->addStmt($factory->use('Foo\Bar')->as('A'))
+            ->addStmt($factory
+                ->class('SomeClass')
+                ->extend('SomeOtherClass')
+                ->implement('A\Few', '\Interfaces')
+                ->makeAbstract()
+
+                ->addStmt($factory->method('firstMethod'))
+
+                ->addStmt($factory->method('someMethod')
+                    ->makePublic()
+                    ->makeAbstract()
+                    ->addParam($factory->param('someParam')->setTypeHint('SomeClass'))
+                    ->setDocComment('/**
+                                      * This method does something.
+                                      *
+                                      * @param SomeClass And takes a parameter
+                                      */'))
+
+                ->addStmt($factory->method('anotherMethod')
+                    ->makeProtected()
+                    ->addParam($factory->param('someParam')->setDefault('test'))
+                    ->addStmt(new Expr\Print_(new Expr\Variable('someParam'))))
+
+                ->addStmt($factory->property('someProperty')->makeProtected())
+                ->addStmt($factory->property('anotherProperty')
+                    ->makePrivate()
+                    ->setDefault(array(1, 2, 3))))
+            ->getNode()
+        ;
+
+        $expected = <<<'EOC'
+prettyPrintFile($stmts);
+
+        $this->assertEquals(
+            str_replace("\r\n", "\n", $expected),
+            str_replace("\r\n", "\n", $generated)
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php b/vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php
new file mode 100644
index 0000000..d22617e
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php
@@ -0,0 +1,53 @@
+getPathname());
+            $fileContents = file_get_contents($fileName);
+
+            // evaluate @@{expr}@@ expressions
+            $fileContents = preg_replace_callback(
+                '/@@\{(.*?)\}@@/',
+                array($this, 'evalCallback'),
+                $fileContents
+            );
+
+            // parse sections
+            $parts = array_map('trim', explode('-----', $fileContents));
+
+            // first part is the name
+            $name = array_shift($parts) . ' (' . $fileName . ')';
+
+            // multiple sections possible with always two forming a pair
+            foreach (array_chunk($parts, 2) as $chunk) {
+                $tests[] = array($name, $chunk[0], $chunk[1]);
+            }
+        }
+
+        return $tests;
+    }
+
+    protected function evalCallback($matches) {
+        return eval('return ' . $matches[1] . ';');
+    }
+
+    protected function canonicalize($str) {
+        // trim from both sides
+        $str = trim($str);
+
+        // normalize EOL to \n
+        $str = str_replace(array("\r\n", "\r"), "\n", $str);
+
+        // trim right side of all lines
+        return implode("\n", array_map('rtrim', explode("\n", $str)));
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CommentTest.php b/vendor/nikic/php-parser/test/PhpParser/CommentTest.php
new file mode 100644
index 0000000..96db6e6
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/CommentTest.php
@@ -0,0 +1,71 @@
+assertSame('/* Some comment */', $comment->getText());
+        $this->assertSame('/* Some comment */', (string) $comment);
+        $this->assertSame(1, $comment->getLine());
+
+        $comment->setText('/* Some other comment */');
+        $comment->setLine(10);
+
+        $this->assertSame('/* Some other comment */', $comment->getText());
+        $this->assertSame('/* Some other comment */', (string) $comment);
+        $this->assertSame(10, $comment->getLine());
+    }
+
+    /**
+     * @dataProvider provideTestReformatting
+     */
+    public function testReformatting($commentText, $reformattedText) {
+        $comment = new Comment($commentText);
+        $this->assertSame($reformattedText, $comment->getReformattedText());
+    }
+
+    public function provideTestReformatting() {
+        return array(
+            array('// Some text' . "\n", '// Some text'),
+            array('/* Some text */', '/* Some text */'),
+            array(
+                '/**
+     * Some text.
+     * Some more text.
+     */',
+                '/**
+ * Some text.
+ * Some more text.
+ */'
+            ),
+            array(
+                '/*
+        Some text.
+        Some more text.
+    */',
+                '/*
+    Some text.
+    Some more text.
+*/'
+            ),
+            array(
+                '/* Some text.
+       More text.
+       Even more text. */',
+                '/* Some text.
+   More text.
+   Even more text. */'
+            ),
+            // invalid comment -> no reformatting
+            array(
+                'hallo
+    world',
+                'hallo
+    world',
+            ),
+        );
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PhpParser/ErrorTest.php b/vendor/nikic/php-parser/test/PhpParser/ErrorTest.php
new file mode 100644
index 0000000..021a7f8
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/ErrorTest.php
@@ -0,0 +1,112 @@
+ 10,
+            'endLine' => 11,
+        );
+        $error = new Error('Some error', $attributes);
+
+        $this->assertSame('Some error', $error->getRawMessage());
+        $this->assertSame($attributes, $error->getAttributes());
+        $this->assertSame(10, $error->getStartLine());
+        $this->assertSame(11, $error->getEndLine());
+        $this->assertSame(10, $error->getRawLine());
+        $this->assertSame('Some error on line 10', $error->getMessage());
+
+        return $error;
+    }
+
+    /**
+     * @depends testConstruct
+     */
+    public function testSetMessageAndLine(Error $error) {
+        $error->setRawMessage('Some other error');
+        $this->assertSame('Some other error', $error->getRawMessage());
+
+        $error->setStartLine(15);
+        $this->assertSame(15, $error->getStartLine());
+        $this->assertSame('Some other error on line 15', $error->getMessage());
+
+        $error->setRawLine(17);
+        $this->assertSame(17, $error->getRawLine());
+        $this->assertSame('Some other error on line 17', $error->getMessage());
+    }
+
+    public function testUnknownLine() {
+        $error = new Error('Some error');
+
+        $this->assertSame(-1, $error->getStartLine());
+        $this->assertSame(-1, $error->getEndLine());
+        $this->assertSame(-1, $error->getRawLine());
+        $this->assertSame('Some error on unknown line', $error->getMessage());
+    }
+
+    /** @dataProvider provideTestColumnInfo */
+    public function testColumnInfo($code, $startPos, $endPos, $startColumn, $endColumn) {
+        $error = new Error('Some error', array(
+            'startFilePos' => $startPos,
+            'endFilePos' => $endPos,
+        ));
+
+        $this->assertSame(true, $error->hasColumnInfo());
+        $this->assertSame($startColumn, $error->getStartColumn($code));
+        $this->assertSame($endColumn, $error->getEndColumn($code));
+
+    }
+
+    public function provideTestColumnInfo() {
+        return array(
+            // Error at "bar"
+            array("assertSame(false, $error->hasColumnInfo());
+        try {
+            $error->getStartColumn('');
+            $this->fail('Expected RuntimeException');
+        } catch (\RuntimeException $e) {
+            $this->assertSame('Error does not have column information', $e->getMessage());
+        }
+        try {
+            $error->getEndColumn('');
+            $this->fail('Expected RuntimeException');
+        } catch (\RuntimeException $e) {
+            $this->assertSame('Error does not have column information', $e->getMessage());
+        }
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Invalid position information
+     */
+    public function testInvalidPosInfo() {
+        $error = new Error('Some error', array(
+            'startFilePos' => 10,
+            'endFilePos' => 11,
+        ));
+        $error->getStartColumn('code');
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php b/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php
new file mode 100644
index 0000000..7743428
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php
@@ -0,0 +1,133 @@
+getLexer();
+        $lexer->startLexing('assertSame($expectedToken, $lexer->getNextToken());
+        $this->assertSame(0, $lexer->getNextToken());
+    }
+
+    /**
+     * @dataProvider provideTestReplaceKeywords
+     */
+    public function testNoReplaceKeywordsAfterObjectOperator($keyword) {
+        $lexer = $this->getLexer();
+        $lexer->startLexing('' . $keyword);
+
+        $this->assertSame(Parser::T_OBJECT_OPERATOR, $lexer->getNextToken());
+        $this->assertSame(Parser::T_STRING, $lexer->getNextToken());
+        $this->assertSame(0, $lexer->getNextToken());
+    }
+
+    public function provideTestReplaceKeywords() {
+        return array(
+            // PHP 5.5
+            array('finally',       Parser::T_FINALLY),
+            array('yield',         Parser::T_YIELD),
+
+            // PHP 5.4
+            array('callable',      Parser::T_CALLABLE),
+            array('insteadof',     Parser::T_INSTEADOF),
+            array('trait',         Parser::T_TRAIT),
+            array('__TRAIT__',     Parser::T_TRAIT_C),
+
+            // PHP 5.3
+            array('__DIR__',       Parser::T_DIR),
+            array('goto',          Parser::T_GOTO),
+            array('namespace',     Parser::T_NAMESPACE),
+            array('__NAMESPACE__', Parser::T_NS_C),
+        );
+    }
+
+    /**
+     * @dataProvider provideTestLexNewFeatures
+     */
+    public function testLexNewFeatures($code, array $expectedTokens) {
+        $lexer = $this->getLexer();
+        $lexer->startLexing('assertSame($expectedTokenType, $lexer->getNextToken($text));
+            $this->assertSame($expectedTokenText, $text);
+        }
+        $this->assertSame(0, $lexer->getNextToken());
+    }
+
+    /**
+     * @dataProvider provideTestLexNewFeatures
+     */
+    public function testLeaveStuffAloneInStrings($code) {
+        $stringifiedToken = '"' . addcslashes($code, '"\\') . '"';
+
+        $lexer = $this->getLexer();
+        $lexer->startLexing('assertSame(Parser::T_CONSTANT_ENCAPSED_STRING, $lexer->getNextToken($text));
+        $this->assertSame($stringifiedToken, $text);
+        $this->assertSame(0, $lexer->getNextToken());
+    }
+
+    public function provideTestLexNewFeatures() {
+        return array(
+            array('yield from', array(
+                array(Parser::T_YIELD_FROM, 'yield from'),
+            )),
+            array("yield\r\nfrom", array(
+                array(Parser::T_YIELD_FROM, "yield\r\nfrom"),
+            )),
+            array('...', array(
+                array(Parser::T_ELLIPSIS, '...'),
+            )),
+            array('**', array(
+                array(Parser::T_POW, '**'),
+            )),
+            array('**=', array(
+                array(Parser::T_POW_EQUAL, '**='),
+            )),
+            array('??', array(
+                array(Parser::T_COALESCE, '??'),
+            )),
+            array('<=>', array(
+                array(Parser::T_SPACESHIP, '<=>'),
+            )),
+            array('0b1010110', array(
+                array(Parser::T_LNUMBER, '0b1010110'),
+            )),
+            array('0b1011010101001010110101010010101011010101010101101011001110111100', array(
+                array(Parser::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'),
+            )),
+            array('\\', array(
+                array(Parser::T_NS_SEPARATOR, '\\'),
+            )),
+            array("<<<'NOWDOC'\nNOWDOC;\n", array(
+                array(Parser::T_START_HEREDOC, "<<<'NOWDOC'\n"),
+                array(Parser::T_END_HEREDOC, 'NOWDOC'),
+                array(ord(';'), ';'),
+            )),
+            array("<<<'NOWDOC'\nFoobar\nNOWDOC;\n", array(
+                array(Parser::T_START_HEREDOC, "<<<'NOWDOC'\n"),
+                array(Parser::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"),
+                array(Parser::T_END_HEREDOC, 'NOWDOC'),
+                array(ord(';'), ';'),
+            )),
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/LexerTest.php b/vendor/nikic/php-parser/test/PhpParser/LexerTest.php
new file mode 100644
index 0000000..5b20989
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/LexerTest.php
@@ -0,0 +1,246 @@
+markTestSkipped('HHVM does not throw warnings from token_get_all()');
+        }
+
+        $lexer = $this->getLexer();
+        try {
+            $lexer->startLexing($code);
+        } catch (Error $e) {
+            $this->assertSame($message, $e->getMessage());
+
+            return;
+        }
+
+        $this->fail('Expected PhpParser\Error');
+    }
+
+    public function provideTestError() {
+        return array(
+            array('getLexer($options);
+        $lexer->startLexing($code);
+        while ($id = $lexer->getNextToken($value, $startAttributes, $endAttributes)) {
+            $token = array_shift($tokens);
+
+            $this->assertSame($token[0], $id);
+            $this->assertSame($token[1], $value);
+            $this->assertEquals($token[2], $startAttributes);
+            $this->assertEquals($token[3], $endAttributes);
+        }
+    }
+
+    public function provideTestLex() {
+        return array(
+            // tests conversion of closing PHP tag and drop of whitespace and opening tags
+            array(
+                'plaintext',
+                array(),
+                array(
+                    array(
+                        Parser::T_STRING, 'tokens',
+                        array('startLine' => 1), array('endLine' => 1)
+                    ),
+                    array(
+                        ord(';'), '?>',
+                        array('startLine' => 1), array('endLine' => 1)
+                    ),
+                    array(
+                        Parser::T_INLINE_HTML, 'plaintext',
+                        array('startLine' => 1), array('endLine' => 1)
+                    ),
+                )
+            ),
+            // tests line numbers
+            array(
+                ' 2), array('endLine' => 2)
+                    ),
+                    array(
+                        Parser::T_STRING, 'token',
+                        array('startLine' => 2), array('endLine' => 2)
+                    ),
+                    array(
+                        ord('$'), '$',
+                        array(
+                            'startLine' => 3,
+                            'comments' => array(new Comment\Doc('/** doc' . "\n" . 'comment */', 2))
+                        ),
+                        array('endLine' => 3)
+                    ),
+                )
+            ),
+            // tests comment extraction
+            array(
+                ' 2,
+                            'comments' => array(
+                                new Comment('/* comment */', 1),
+                                new Comment('// comment' . "\n", 1),
+                                new Comment\Doc('/** docComment 1 */', 2),
+                                new Comment\Doc('/** docComment 2 */', 2),
+                            ),
+                        ),
+                        array('endLine' => 2)
+                    ),
+                )
+            ),
+            // tests differing start and end line
+            array(
+                ' 1), array('endLine' => 2)
+                    ),
+                )
+            ),
+            // tests exact file offsets
+            array(
+                ' array('startFilePos', 'endFilePos')),
+                array(
+                    array(
+                        Parser::T_CONSTANT_ENCAPSED_STRING, '"a"',
+                        array('startFilePos' => 6), array('endFilePos' => 8)
+                    ),
+                    array(
+                        ord(';'), ';',
+                        array('startFilePos' => 9), array('endFilePos' => 9)
+                    ),
+                    array(
+                        Parser::T_CONSTANT_ENCAPSED_STRING, '"b"',
+                        array('startFilePos' => 18), array('endFilePos' => 20)
+                    ),
+                    array(
+                        ord(';'), ';',
+                        array('startFilePos' => 21), array('endFilePos' => 21)
+                    ),
+                )
+            ),
+            // tests token offsets
+            array(
+                ' array('startTokenPos', 'endTokenPos')),
+                array(
+                    array(
+                        Parser::T_CONSTANT_ENCAPSED_STRING, '"a"',
+                        array('startTokenPos' => 1), array('endTokenPos' => 1)
+                    ),
+                    array(
+                        ord(';'), ';',
+                        array('startTokenPos' => 2), array('endTokenPos' => 2)
+                    ),
+                    array(
+                        Parser::T_CONSTANT_ENCAPSED_STRING, '"b"',
+                        array('startTokenPos' => 5), array('endTokenPos' => 5)
+                    ),
+                    array(
+                        ord(';'), ';',
+                        array('startTokenPos' => 6), array('endTokenPos' => 6)
+                    ),
+                )
+            ),
+            // tests all attributes being disabled
+            array(
+                ' array()),
+                array(
+                    array(
+                        Parser::T_VARIABLE, '$bar',
+                        array(), array()
+                    ),
+                    array(
+                        ord(';'), ';',
+                        array(), array()
+                    )
+                )
+            )
+        );
+    }
+
+    /**
+     * @dataProvider provideTestHaltCompiler
+     */
+    public function testHandleHaltCompiler($code, $remaining) {
+        $lexer = $this->getLexer();
+        $lexer->startLexing($code);
+
+        while (Parser::T_HALT_COMPILER !== $lexer->getNextToken());
+
+        $this->assertSame($remaining, $lexer->handleHaltCompiler());
+        $this->assertSame(0, $lexer->getNextToken());
+    }
+
+    public function provideTestHaltCompiler() {
+        return array(
+            array('Remaining Text', 'Remaining Text'),
+            //array('getLexer();
+        $lexer->startLexing('getNextToken());
+        $lexer->handleHaltCompiler();
+    }
+
+    public function testGetTokens() {
+        $code = 'getLexer();
+        $lexer->startLexing($code);
+        $this->assertSame($expectedTokens, $lexer->getTokens());
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php
new file mode 100644
index 0000000..1b20ae3
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php
@@ -0,0 +1,132 @@
+assertSame(array('foo', 'bar'), $name->parts);
+
+        $name = new Name('foo\bar');
+        $this->assertSame(array('foo', 'bar'), $name->parts);
+    }
+
+    public function testGet() {
+        $name = new Name('foo');
+        $this->assertSame('foo', $name->getFirst());
+        $this->assertSame('foo', $name->getLast());
+
+        $name = new Name('foo\bar');
+        $this->assertSame('foo', $name->getFirst());
+        $this->assertSame('bar', $name->getLast());
+    }
+
+    public function testToString() {
+        $name = new Name('foo\bar');
+
+        $this->assertSame('foo\bar', (string) $name);
+        $this->assertSame('foo\bar', $name->toString());
+        $this->assertSame('foo_bar', $name->toString('_'));
+    }
+
+    public function testSet() {
+        $name = new Name('foo');
+
+        $name->set('foo\bar');
+        $this->assertSame('foo\bar', $name->toString());
+
+        $name->set(array('foo', 'bar'));
+        $this->assertSame('foo\bar', $name->toString());
+
+        $name->set(new Name('foo\bar'));
+        $this->assertSame('foo\bar', $name->toString());
+    }
+
+    public function testSetFirst() {
+        $name = new Name('foo');
+
+        $name->setFirst('bar');
+        $this->assertSame('bar', $name->toString());
+
+        $name->setFirst('A\B');
+        $this->assertSame('A\B', $name->toString());
+
+        $name->setFirst('C');
+        $this->assertSame('C\B', $name->toString());
+
+        $name->setFirst('D\E');
+        $this->assertSame('D\E\B', $name->toString());
+    }
+
+    public function testSetLast() {
+        $name = new Name('foo');
+
+        $name->setLast('bar');
+        $this->assertSame('bar', $name->toString());
+
+        $name->setLast('A\B');
+        $this->assertSame('A\B', $name->toString());
+
+        $name->setLast('C');
+        $this->assertSame('A\C', $name->toString());
+
+        $name->setLast('D\E');
+        $this->assertSame('A\D\E', $name->toString());
+    }
+
+    public function testAppend() {
+        $name = new Name('foo');
+
+        $name->append('bar');
+        $this->assertSame('foo\bar', $name->toString());
+
+        $name->append('bar\foo');
+        $this->assertSame('foo\bar\bar\foo', $name->toString());
+    }
+
+    public function testPrepend() {
+        $name = new Name('foo');
+
+        $name->prepend('bar');
+        $this->assertSame('bar\foo', $name->toString());
+
+        $name->prepend('foo\bar');
+        $this->assertSame('foo\bar\bar\foo', $name->toString());
+    }
+
+    public function testIs() {
+        $name = new Name('foo');
+        $this->assertTrue ($name->isUnqualified());
+        $this->assertFalse($name->isQualified());
+        $this->assertFalse($name->isFullyQualified());
+        $this->assertFalse($name->isRelative());
+
+        $name = new Name('foo\bar');
+        $this->assertFalse($name->isUnqualified());
+        $this->assertTrue ($name->isQualified());
+        $this->assertFalse($name->isFullyQualified());
+        $this->assertFalse($name->isRelative());
+
+        $name = new Name\FullyQualified('foo');
+        $this->assertFalse($name->isUnqualified());
+        $this->assertFalse($name->isQualified());
+        $this->assertTrue ($name->isFullyQualified());
+        $this->assertFalse($name->isRelative());
+
+        $name = new Name\Relative('foo');
+        $this->assertFalse($name->isUnqualified());
+        $this->assertFalse($name->isQualified());
+        $this->assertFalse($name->isFullyQualified());
+        $this->assertTrue ($name->isRelative());
+    }
+
+    /**
+     * @expectedException        \InvalidArgumentException
+     * @expectedExceptionMessage When changing a name you need to pass either a string, an array or a Name node
+     */
+    public function testInvalidArg() {
+        $name = new Name('foo');
+        $name->set(new \stdClass);
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php
new file mode 100644
index 0000000..3141f56
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php
@@ -0,0 +1,25 @@
+assertSame($name, $magicConst->getName());
+    }
+
+    public function provideTestGetName() {
+        return array(
+            array(new MagicConst\Class_, '__CLASS__'),
+            array(new MagicConst\Dir, '__DIR__'),
+            array(new MagicConst\File, '__FILE__'),
+            array(new MagicConst\Function_, '__FUNCTION__'),
+            array(new MagicConst\Line, '__LINE__'),
+            array(new MagicConst\Method, '__METHOD__'),
+            array(new MagicConst\Namespace_, '__NAMESPACE__'),
+            array(new MagicConst\Trait_, '__TRAIT__'),
+        );
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php
new file mode 100644
index 0000000..be39035
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php
@@ -0,0 +1,61 @@
+assertSame(
+            $expected,
+            String_::parseEscapeSequences($string, $quote)
+        );
+    }
+
+    /**
+     * @dataProvider provideTestParse
+     */
+    public function testCreate($expected, $string) {
+        $this->assertSame(
+            $expected,
+            String_::parse($string)
+        );
+    }
+
+    public function provideTestParseEscapeSequences() {
+        return array(
+            array('"',              '\\"',              '"'),
+            array('\\"',            '\\"',              '`'),
+            array('\\"\\`',         '\\"\\`',           null),
+            array("\\\$\n\r\t\f\v", '\\\\\$\n\r\t\f\v', null),
+            array("\x1B",           '\e',               null),
+            array(chr(255),         '\xFF',             null),
+            array(chr(255),         '\377',             null),
+            array(chr(0),           '\400',             null),
+            array("\0",             '\0',               null),
+            array('\xFF',           '\\\\xFF',          null),
+        );
+    }
+
+    public function provideTestParse() {
+        $tests = array(
+            array('A', '\'A\''),
+            array('A', 'b\'A\''),
+            array('A', '"A"'),
+            array('A', 'b"A"'),
+            array('\\', '\'\\\\\''),
+            array('\'', '\'\\\'\''),
+        );
+
+        foreach ($this->provideTestParseEscapeSequences() as $i => $test) {
+            // skip second and third tests, they aren't for double quotes
+            if ($i != 1 && $i != 2) {
+                $tests[] = array($test[0], '"' . $test[1] . '"');
+            }
+        }
+
+        return $tests;
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php
new file mode 100644
index 0000000..fa8aed8
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php
@@ -0,0 +1,63 @@
+ constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
+        ));
+
+        $this->assertTrue($node->{'is' . $modifier}());
+    }
+
+    public function testNoModifiers() {
+        $node = new ClassMethod('foo', array('type' => 0));
+
+        $this->assertTrue($node->isPublic());
+        $this->assertFalse($node->isProtected());
+        $this->assertFalse($node->isPrivate());
+        $this->assertFalse($node->isAbstract());
+        $this->assertFalse($node->isFinal());
+        $this->assertFalse($node->isStatic());
+    }
+
+    public function provideModifiers() {
+        return array(
+            array('public'),
+            array('protected'),
+            array('private'),
+            array('abstract'),
+            array('final'),
+            array('static'),
+        );
+    }
+
+    /**
+     * Checks that implicit public modifier detection for method is working
+     *
+     * @dataProvider implicitPublicModifiers
+     *
+     * @param integer $modifier Node type modifier
+     */
+    public function testImplicitPublic($modifier)
+    {
+        $node = new ClassMethod('foo', array(
+            'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
+        ));
+
+        $this->assertTrue($node->isPublic(), 'Node should be implicitly public');
+    }
+
+    public function implicitPublicModifiers() {
+        return array(
+            array('abstract'),
+            array('final'),
+            array('static'),
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php
new file mode 100644
index 0000000..643b15c
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php
@@ -0,0 +1,59 @@
+ Class_::MODIFIER_ABSTRACT));
+        $this->assertTrue($class->isAbstract());
+
+        $class = new Class_('Foo');
+        $this->assertFalse($class->isAbstract());
+    }
+
+    public function testIsFinal() {
+        $class = new Class_('Foo', array('type' => Class_::MODIFIER_FINAL));
+        $this->assertTrue($class->isFinal());
+
+        $class = new Class_('Foo');
+        $this->assertFalse($class->isFinal());
+    }
+
+    public function testGetMethods() {
+        $methods = array(
+            new ClassMethod('foo'),
+            new ClassMethod('bar'),
+            new ClassMethod('fooBar'),
+        );
+        $class = new Class_('Foo', array(
+            'stmts' => array(
+                new TraitUse(array()),
+                $methods[0],
+                new ClassConst(array()),
+                $methods[1],
+                new Property(0, array()),
+                $methods[2],
+            )
+        ));
+
+        $this->assertSame($methods, $class->getMethods());
+    }
+
+    public function testGetMethod() {
+        $methodConstruct = new ClassMethod('__CONSTRUCT');
+        $methodTest = new ClassMethod('test');
+        $class = new Class_('Foo', array(
+            'stmts' => array(
+                new ClassConst(array()),
+                $methodConstruct,
+                new Property(0, array()),
+                $methodTest,
+            )
+        ));
+
+        $this->assertSame($methodConstruct, $class->getMethod('__construct'));
+        $this->assertSame($methodTest, $class->getMethod('test'));
+        $this->assertNull($class->getMethod('nonExisting'));
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php
new file mode 100644
index 0000000..c499058
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php
@@ -0,0 +1,26 @@
+ array(
+                new Node\Stmt\ClassConst(array(new Node\Const_('C1', new Node\Scalar\String_('C1')))),
+                $methods[0],
+                new Node\Stmt\ClassConst(array(new Node\Const_('C2', new Node\Scalar\String_('C2')))),
+                $methods[1],
+                new Node\Stmt\ClassConst(array(new Node\Const_('C3', new Node\Scalar\String_('C3')))),
+            )
+        ));
+
+        $this->assertSame($methods, $interface->getMethods());
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php
new file mode 100644
index 0000000..bcfc0c6
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php
@@ -0,0 +1,44 @@
+assertTrue($node->{'is' . $modifier}());
+    }
+
+    public function testNoModifiers() {
+        $node = new Property(0, array());
+
+        $this->assertTrue($node->isPublic());
+        $this->assertFalse($node->isProtected());
+        $this->assertFalse($node->isPrivate());
+        $this->assertFalse($node->isStatic());
+    }
+
+    public function testStaticImplicitlyPublic() {
+        $node = new Property(Class_::MODIFIER_STATIC, array());
+        $this->assertTrue($node->isPublic());
+        $this->assertFalse($node->isProtected());
+        $this->assertFalse($node->isPrivate());
+        $this->assertTrue($node->isStatic());
+    }
+
+    public function provideModifiers() {
+        return array(
+            array('public'),
+            array('protected'),
+            array('private'),
+            array('static'),
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php
new file mode 100644
index 0000000..dc2e6f7
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php
@@ -0,0 +1,161 @@
+subNode1 = $subNode1;
+        $this->subNode2 = $subNode2;
+    }
+
+    public function getSubNodeNames() {
+        return array('subNode1', 'subNode2');
+    }
+
+    // This method is only overwritten because the node is located in an unusual namespace
+    public function getType() {
+        return 'Dummy';
+    }
+}
+
+class NodeAbstractTest extends \PHPUnit_Framework_TestCase
+{
+    public function provideNodes() {
+        $attributes = array(
+            'startLine' => 10,
+            'comments'  => array(
+                new Comment('// Comment' . "\n"),
+                new Comment\Doc('/** doc comment */'),
+            ),
+        );
+
+        $node1 = $this->getMockForAbstractClass(
+            'PhpParser\NodeAbstract',
+            array(
+                array(
+                    'subNode1' => 'value1',
+                    'subNode2' => 'value2',
+                ),
+                $attributes
+            ),
+            'PhpParser_Node_Dummy'
+        );
+        $node1->notSubNode = 'value3';
+
+        $node2 = new DummyNode('value1', 'value2', $attributes);
+        $node2->notSubNode = 'value3';
+
+        return array(
+            array($attributes, $node1),
+            array($attributes, $node2),
+        );
+    }
+
+    /**
+     * @dataProvider provideNodes
+     */
+    public function testConstruct(array $attributes, Node $node) {
+        $this->assertSame('Dummy', $node->getType());
+        $this->assertSame(array('subNode1', 'subNode2'), $node->getSubNodeNames());
+        $this->assertSame(10, $node->getLine());
+        $this->assertSame('/** doc comment */', $node->getDocComment()->getText());
+        $this->assertSame('value1', $node->subNode1);
+        $this->assertSame('value2', $node->subNode2);
+        $this->assertTrue(isset($node->subNode1));
+        $this->assertTrue(isset($node->subNode2));
+        $this->assertFalse(isset($node->subNode3));
+        $this->assertSame($attributes, $node->getAttributes());
+
+        return $node;
+    }
+
+    /**
+     * @dataProvider provideNodes
+     */
+    public function testGetDocComment(array $attributes, Node $node) {
+        $this->assertSame('/** doc comment */', $node->getDocComment()->getText());
+        array_pop($node->getAttribute('comments')); // remove doc comment
+        $this->assertNull($node->getDocComment());
+        array_pop($node->getAttribute('comments')); // remove comment
+        $this->assertNull($node->getDocComment());
+    }
+
+    /**
+     * @dataProvider provideNodes
+     */
+    public function testChange(array $attributes, Node $node) {
+        // change of line
+        $node->setLine(15);
+        $this->assertSame(15, $node->getLine());
+
+        // direct modification
+        $node->subNode = 'newValue';
+        $this->assertSame('newValue', $node->subNode);
+
+        // indirect modification
+        $subNode =& $node->subNode;
+        $subNode = 'newNewValue';
+        $this->assertSame('newNewValue', $node->subNode);
+
+        // removal
+        unset($node->subNode);
+        $this->assertFalse(isset($node->subNode));
+    }
+
+    /**
+     * @dataProvider provideNodes
+     */
+    public function testIteration(array $attributes, Node $node) {
+        // Iteration is simple object iteration over properties,
+        // not over subnodes
+        $i = 0;
+        foreach ($node as $key => $value) {
+            if ($i === 0) {
+                $this->assertSame('subNode1', $key);
+                $this->assertSame('value1', $value);
+            } else if ($i === 1) {
+                $this->assertSame('subNode2', $key);
+                $this->assertSame('value2', $value);
+            } else if ($i === 2) {
+                $this->assertSame('notSubNode', $key);
+                $this->assertSame('value3', $value);
+            } else {
+                throw new \Exception;
+            }
+            $i++;
+        }
+        $this->assertSame(3, $i);
+    }
+
+    public function testAttributes() {
+        /** @var $node Node */
+        $node = $this->getMockForAbstractClass('PhpParser\NodeAbstract');
+
+        $this->assertEmpty($node->getAttributes());
+
+        $node->setAttribute('key', 'value');
+        $this->assertTrue($node->hasAttribute('key'));
+        $this->assertSame('value', $node->getAttribute('key'));
+
+        $this->assertFalse($node->hasAttribute('doesNotExist'));
+        $this->assertNull($node->getAttribute('doesNotExist'));
+        $this->assertSame('default', $node->getAttribute('doesNotExist', 'default'));
+
+        $node->setAttribute('null', null);
+        $this->assertTrue($node->hasAttribute('null'));
+        $this->assertNull($node->getAttribute('null'));
+        $this->assertNull($node->getAttribute('null', 'default'));
+
+        $this->assertSame(
+            array(
+                'key'  => 'value',
+                'null' => null,
+            ),
+            $node->getAttributes()
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php
new file mode 100644
index 0000000..306bc20
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php
@@ -0,0 +1,72 @@
+assertSame($this->canonicalize($dump), $this->canonicalize($dumper->dump($node)));
+    }
+
+    public function provideTestDump() {
+        return array(
+            array(
+                array(),
+'array(
+)'
+            ),
+            array(
+                array('Foo', 'Bar', 'Key' => 'FooBar'),
+'array(
+    0: Foo
+    1: Bar
+    Key: FooBar
+)'
+            ),
+            array(
+                new Node\Name(array('Hallo', 'World')),
+'Name(
+    parts: array(
+        0: Hallo
+        1: World
+    )
+)'
+            ),
+            array(
+                new Node\Expr\Array_(array(
+                    new Node\Expr\ArrayItem(new Node\Scalar\String_('Foo'))
+                )),
+'Expr_Array(
+    items: array(
+        0: Expr_ArrayItem(
+            key: null
+            value: Scalar_String(
+                value: Foo
+            )
+            byRef: false
+        )
+    )
+)'
+            ),
+        );
+    }
+
+    /**
+     * @expectedException        \InvalidArgumentException
+     * @expectedExceptionMessage Can only dump nodes and arrays.
+     */
+    public function testError() {
+        $dumper = new NodeDumper;
+        $dumper->dump(new \stdClass);
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php
new file mode 100644
index 0000000..3b702ea
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php
@@ -0,0 +1,203 @@
+getMock('PhpParser\NodeVisitor');
+
+        $visitor->expects($this->at(0))->method('beforeTraverse')->with($stmts);
+        $visitor->expects($this->at(1))->method('enterNode')->with($echoNode);
+        $visitor->expects($this->at(2))->method('enterNode')->with($str1Node);
+        $visitor->expects($this->at(3))->method('leaveNode')->with($str1Node);
+        $visitor->expects($this->at(4))->method('enterNode')->with($str2Node);
+        $visitor->expects($this->at(5))->method('leaveNode')->with($str2Node);
+        $visitor->expects($this->at(6))->method('leaveNode')->with($echoNode);
+        $visitor->expects($this->at(7))->method('afterTraverse')->with($stmts);
+
+        $traverser = new NodeTraverser;
+        $traverser->addVisitor($visitor);
+
+        $this->assertEquals($stmts, $traverser->traverse($stmts));
+    }
+
+    public function testModifying() {
+        $str1Node  = new String_('Foo');
+        $str2Node  = new String_('Bar');
+        $printNode = new Expr\Print_($str1Node);
+
+        // first visitor changes the node, second verifies the change
+        $visitor1 = $this->getMock('PhpParser\NodeVisitor');
+        $visitor2 = $this->getMock('PhpParser\NodeVisitor');
+
+        // replace empty statements with string1 node
+        $visitor1->expects($this->at(0))->method('beforeTraverse')->with(array())
+                 ->will($this->returnValue(array($str1Node)));
+        $visitor2->expects($this->at(0))->method('beforeTraverse')->with(array($str1Node));
+
+        // replace string1 node with print node
+        $visitor1->expects($this->at(1))->method('enterNode')->with($str1Node)
+                 ->will($this->returnValue($printNode));
+        $visitor2->expects($this->at(1))->method('enterNode')->with($printNode);
+
+        // replace string1 node with string2 node
+        $visitor1->expects($this->at(2))->method('enterNode')->with($str1Node)
+                 ->will($this->returnValue($str2Node));
+        $visitor2->expects($this->at(2))->method('enterNode')->with($str2Node);
+
+        // replace string2 node with string1 node again
+        $visitor1->expects($this->at(3))->method('leaveNode')->with($str2Node)
+                 ->will($this->returnValue($str1Node));
+        $visitor2->expects($this->at(3))->method('leaveNode')->with($str1Node);
+
+        // replace print node with string1 node again
+        $visitor1->expects($this->at(4))->method('leaveNode')->with($printNode)
+                 ->will($this->returnValue($str1Node));
+        $visitor2->expects($this->at(4))->method('leaveNode')->with($str1Node);
+
+        // replace string1 node with empty statements again
+        $visitor1->expects($this->at(5))->method('afterTraverse')->with(array($str1Node))
+                 ->will($this->returnValue(array()));
+        $visitor2->expects($this->at(5))->method('afterTraverse')->with(array());
+
+        $traverser = new NodeTraverser;
+        $traverser->addVisitor($visitor1);
+        $traverser->addVisitor($visitor2);
+
+        // as all operations are reversed we end where we start
+        $this->assertEquals(array(), $traverser->traverse(array()));
+    }
+
+    public function testRemove() {
+        $str1Node = new String_('Foo');
+        $str2Node = new String_('Bar');
+
+        $visitor = $this->getMock('PhpParser\NodeVisitor');
+
+        // remove the string1 node, leave the string2 node
+        $visitor->expects($this->at(2))->method('leaveNode')->with($str1Node)
+                ->will($this->returnValue(false));
+
+        $traverser = new NodeTraverser;
+        $traverser->addVisitor($visitor);
+
+        $this->assertEquals(array($str2Node), $traverser->traverse(array($str1Node, $str2Node)));
+    }
+
+    public function testMerge() {
+        $strStart  = new String_('Start');
+        $strMiddle = new String_('End');
+        $strEnd    = new String_('Middle');
+        $strR1     = new String_('Replacement 1');
+        $strR2     = new String_('Replacement 2');
+
+        $visitor = $this->getMock('PhpParser\NodeVisitor');
+
+        // replace strMiddle with strR1 and strR2 by merge
+        $visitor->expects($this->at(4))->method('leaveNode')->with($strMiddle)
+                ->will($this->returnValue(array($strR1, $strR2)));
+
+        $traverser = new NodeTraverser;
+        $traverser->addVisitor($visitor);
+
+        $this->assertEquals(
+            array($strStart, $strR1, $strR2, $strEnd),
+            $traverser->traverse(array($strStart, $strMiddle, $strEnd))
+        );
+    }
+
+    public function testDeepArray() {
+        $strNode = new String_('Foo');
+        $stmts = array(array(array($strNode)));
+
+        $visitor = $this->getMock('PhpParser\NodeVisitor');
+        $visitor->expects($this->at(1))->method('enterNode')->with($strNode);
+
+        $traverser = new NodeTraverser;
+        $traverser->addVisitor($visitor);
+
+        $this->assertEquals($stmts, $traverser->traverse($stmts));
+    }
+
+    public function testDontTraverseChildren() {
+        $strNode = new String_('str');
+        $printNode = new Expr\Print_($strNode);
+        $varNode = new Expr\Variable('foo');
+        $mulNode = new Expr\BinaryOp\Mul($varNode, $varNode);
+        $negNode = new Expr\UnaryMinus($mulNode);
+        $stmts = array($printNode, $negNode);
+
+        $visitor1 = $this->getMock('PhpParser\NodeVisitor');
+        $visitor2 = $this->getMock('PhpParser\NodeVisitor');
+
+        $visitor1->expects($this->at(1))->method('enterNode')->with($printNode)
+            ->will($this->returnValue(NodeTraverser::DONT_TRAVERSE_CHILDREN));
+        $visitor2->expects($this->at(1))->method('enterNode')->with($printNode);
+
+        $visitor1->expects($this->at(2))->method('leaveNode')->with($printNode);
+        $visitor2->expects($this->at(2))->method('leaveNode')->with($printNode);
+
+        $visitor1->expects($this->at(3))->method('enterNode')->with($negNode);
+        $visitor2->expects($this->at(3))->method('enterNode')->with($negNode);
+
+        $visitor1->expects($this->at(4))->method('enterNode')->with($mulNode);
+        $visitor2->expects($this->at(4))->method('enterNode')->with($mulNode)
+            ->will($this->returnValue(NodeTraverser::DONT_TRAVERSE_CHILDREN));
+
+        $visitor1->expects($this->at(5))->method('leaveNode')->with($mulNode);
+        $visitor2->expects($this->at(5))->method('leaveNode')->with($mulNode);
+
+        $visitor1->expects($this->at(6))->method('leaveNode')->with($negNode);
+        $visitor2->expects($this->at(6))->method('leaveNode')->with($negNode);
+
+        $traverser = new NodeTraverser;
+        $traverser->addVisitor($visitor1);
+        $traverser->addVisitor($visitor2);
+
+        $this->assertEquals($stmts, $traverser->traverse($stmts));
+    }
+
+    public function testRemovingVisitor() {
+        $visitor1 = $this->getMock('PhpParser\NodeVisitor');
+        $visitor2 = $this->getMock('PhpParser\NodeVisitor');
+        $visitor3 = $this->getMock('PhpParser\NodeVisitor');
+
+        $traverser = new NodeTraverser;
+        $traverser->addVisitor($visitor1);
+        $traverser->addVisitor($visitor2);
+        $traverser->addVisitor($visitor3);
+
+        $preExpected = array($visitor1, $visitor2, $visitor3);
+        $this->assertAttributeSame($preExpected, 'visitors', $traverser, 'The appropriate visitors have not been added');
+
+        $traverser->removeVisitor($visitor2);
+
+        $postExpected = array(0 => $visitor1, 2 => $visitor3);
+        $this->assertAttributeSame($postExpected, 'visitors', $traverser, 'The appropriate visitors are not present after removal');
+    }
+
+    public function testCloneNodesByDefault() {
+        $stmts = array(new Node\Stmt\Echo_(array(new String_('Foo'), new String_('Bar'))));
+
+        $traverser = new NodeTraverser;
+
+        $this->assertNotSame($stmts, $traverser->traverse($stmts));
+    }
+
+    public function testCloneNodesDisabled() {
+        $stmts = array(new Node\Stmt\Echo_(array(new String_('Foo'), new String_('Bar'))));
+
+        $traverser = new NodeTraverser(false);
+
+        $this->assertSame($stmts, $traverser->traverse($stmts));
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php
new file mode 100644
index 0000000..08027e2
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php
@@ -0,0 +1,398 @@
+addVisitor(new NameResolver);
+
+        $stmts = $parser->parse($code);
+        $stmts = $traverser->traverse($stmts);
+
+        $this->assertSame(
+            $this->canonicalize($expectedCode),
+            $prettyPrinter->prettyPrint($stmts)
+        );
+    }
+
+    /**
+     * @covers PhpParser\NodeVisitor\NameResolver
+     */
+    public function testResolveLocations() {
+        $code = <<<'EOC'
+addVisitor(new NameResolver);
+
+        $stmts = $parser->parse($code);
+        $stmts = $traverser->traverse($stmts);
+
+        $this->assertSame(
+            $this->canonicalize($expectedCode),
+            $prettyPrinter->prettyPrint($stmts)
+        );
+    }
+
+    public function testNoResolveSpecialName() {
+        $stmts = array(new Node\Expr\New_(new Name('self')));
+
+        $traverser = new PhpParser\NodeTraverser;
+        $traverser->addVisitor(new NameResolver);
+
+        $this->assertEquals($stmts, $traverser->traverse($stmts));
+    }
+
+    protected function createNamespacedAndNonNamespaced(array $stmts) {
+        return array(
+            new Stmt\Namespace_(new Name('NS'), $stmts),
+            new Stmt\Namespace_(null,                          $stmts),
+        );
+    }
+
+    public function testAddNamespacedName() {
+        $stmts = $this->createNamespacedAndNonNamespaced(array(
+            new Stmt\Class_('A'),
+            new Stmt\Interface_('B'),
+            new Stmt\Function_('C'),
+            new Stmt\Const_(array(
+                new Node\Const_('D', new Node\Scalar\String_('E'))
+            )),
+            new Expr\New_(new Stmt\Class_(null)),
+        ));
+
+        $traverser = new PhpParser\NodeTraverser;
+        $traverser->addVisitor(new NameResolver);
+
+        $stmts = $traverser->traverse($stmts);
+
+        $this->assertSame('NS\\A', (string) $stmts[0]->stmts[0]->namespacedName);
+        $this->assertSame('NS\\B', (string) $stmts[0]->stmts[1]->namespacedName);
+        $this->assertSame('NS\\C', (string) $stmts[0]->stmts[2]->namespacedName);
+        $this->assertSame('NS\\D', (string) $stmts[0]->stmts[3]->consts[0]->namespacedName);
+        $this->assertObjectNotHasAttribute('namespacedName', $stmts[0]->stmts[4]->class);
+        $this->assertSame('A',     (string) $stmts[1]->stmts[0]->namespacedName);
+        $this->assertSame('B',     (string) $stmts[1]->stmts[1]->namespacedName);
+        $this->assertSame('C',     (string) $stmts[1]->stmts[2]->namespacedName);
+        $this->assertSame('D',     (string) $stmts[1]->stmts[3]->consts[0]->namespacedName);
+        $this->assertObjectNotHasAttribute('namespacedName', $stmts[1]->stmts[4]->class);
+    }
+
+    public function testAddTraitNamespacedName() {
+        $stmts = $this->createNamespacedAndNonNamespaced(array(
+            new Stmt\Trait_('A')
+        ));
+
+        $traverser = new PhpParser\NodeTraverser;
+        $traverser->addVisitor(new NameResolver);
+
+        $stmts = $traverser->traverse($stmts);
+
+        $this->assertSame('NS\\A', (string) $stmts[0]->stmts[0]->namespacedName);
+        $this->assertSame('A',     (string) $stmts[1]->stmts[0]->namespacedName);
+    }
+
+    /**
+     * @dataProvider provideTestError
+     */
+    public function testError(Node $stmt, $errorMsg) {
+        $this->setExpectedException('PhpParser\Error', $errorMsg);
+
+        $traverser = new PhpParser\NodeTraverser;
+        $traverser->addVisitor(new NameResolver);
+        $traverser->traverse(array($stmt));
+    }
+
+    public function provideTestError() {
+        return array(
+            array(
+                new Stmt\Use_(array(
+                    new Stmt\UseUse(new Name('A\B'), 'B', array('startLine' => 1)),
+                    new Stmt\UseUse(new Name('C\D'), 'B', array('startLine' => 2)),
+                ), Stmt\Use_::TYPE_NORMAL),
+                'Cannot use C\D as B because the name is already in use on line 2'
+            ),
+            array(
+                new Stmt\Use_(array(
+                    new Stmt\UseUse(new Name('a\b'), 'b', array('startLine' => 1)),
+                    new Stmt\UseUse(new Name('c\d'), 'B', array('startLine' => 2)),
+                ), Stmt\Use_::TYPE_FUNCTION),
+                'Cannot use function c\d as B because the name is already in use on line 2'
+            ),
+            array(
+                new Stmt\Use_(array(
+                    new Stmt\UseUse(new Name('A\B'), 'B', array('startLine' => 1)),
+                    new Stmt\UseUse(new Name('C\D'), 'B', array('startLine' => 2)),
+                ), Stmt\Use_::TYPE_CONSTANT),
+                'Cannot use const C\D as B because the name is already in use on line 2'
+            ),
+            array(
+                new Expr\New_(new Name\FullyQualified('self', array('startLine' => 3))),
+                "'\\self' is an invalid class name on line 3"
+            ),
+            array(
+                new Expr\New_(new Name\Relative('self', array('startLine' => 3))),
+                "'\\self' is an invalid class name on line 3"
+            ),
+            array(
+                new Expr\New_(new Name\FullyQualified('PARENT', array('startLine' => 3))),
+                "'\\PARENT' is an invalid class name on line 3"
+            ),
+            array(
+                new Expr\New_(new Name\Relative('STATIC', array('startLine' => 3))),
+                "'\\STATIC' is an invalid class name on line 3"
+            ),
+        );
+    }
+
+    public function testClassNameIsCaseInsensitive()
+    {
+        $source = <<<'EOC'
+parse($source);
+
+        $traverser = new PhpParser\NodeTraverser;
+        $traverser->addVisitor(new NameResolver);
+
+        $stmts = $traverser->traverse($stmts);
+        $stmt = $stmts[0];
+
+        $this->assertSame(array('Bar', 'Baz'), $stmt->stmts[1]->expr->class->parts);
+    }
+
+    public function testSpecialClassNamesAreCaseInsensitive() {
+        $source = <<<'EOC'
+parse($source);
+
+        $traverser = new PhpParser\NodeTraverser;
+        $traverser->addVisitor(new NameResolver);
+
+        $stmts = $traverser->traverse($stmts);
+        $classStmt = $stmts[0];
+        $methodStmt = $classStmt->stmts[0]->stmts[0];
+
+        $this->assertSame('SELF', (string)$methodStmt->stmts[0]->class);
+        $this->assertSame('PARENT', (string)$methodStmt->stmts[1]->class);
+        $this->assertSame('STATIC', (string)$methodStmt->stmts[2]->class);
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ParserTest.php b/vendor/nikic/php-parser/test/PhpParser/ParserTest.php
new file mode 100644
index 0000000..b066ee1
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/ParserTest.php
@@ -0,0 +1,154 @@
+ array(
+            'startLine', 'endLine', 'startFilePos', 'endFilePos'
+        )));
+        $parser = new Parser($lexer, array(
+            'throwOnError' => false,
+        ));
+
+        $stmts = $parser->parse($code);
+        $errors = $parser->getErrors();
+
+        $output = '';
+        foreach ($errors as $error) {
+            $output .= $this->formatErrorMessage($error, $code) . "\n";
+        }
+
+        if (null !== $stmts) {
+            $dumper = new NodeDumper;
+            $output .= $dumper->dump($stmts);
+        }
+
+        $this->assertSame($this->canonicalize($expected), $this->canonicalize($output), $name);
+    }
+
+    public function provideTestParse() {
+        return $this->getTests(__DIR__ . '/../code/parser', 'test');
+    }
+
+    private function formatErrorMessage(Error $e, $code) {
+        if ($e->hasColumnInfo()) {
+            return $e->getRawMessage() . ' from ' . $e->getStartLine() . ':' . $e->getStartColumn($code)
+                . ' to ' . $e->getEndLine() . ':' . $e->getEndColumn($code);
+        } else {
+            return $e->getMessage();
+        }
+    }
+
+    /**
+     * @expectedException \PhpParser\Error
+     * @expectedExceptionMessage Syntax error, unexpected EOF on line 1
+     */
+    public function testParserThrowsSyntaxError() {
+        $parser = new Parser(new Lexer());
+        $parser->parse('parse(' array(
+                'comments', 'startLine', 'endLine',
+                'startTokenPos', 'endTokenPos',
+            )
+        ));
+
+        $code = <<<'EOC'
+canonicalize($code);
+
+        $parser = new Parser($lexer);
+        $stmts = $parser->parse($code);
+
+        /** @var \PhpParser\Node\Stmt\Function_ $fn */
+        $fn = $stmts[0];
+        $this->assertInstanceOf('PhpParser\Node\Stmt\Function_', $fn);
+        $this->assertEquals(array(
+            'comments' => array(
+                new Comment\Doc('/** Doc comment */', 2),
+            ),
+            'startLine' => 3,
+            'endLine' => 7,
+            'startTokenPos' => 3,
+            'endTokenPos' => 21,
+        ), $fn->getAttributes());
+
+        $param = $fn->params[0];
+        $this->assertInstanceOf('PhpParser\Node\Param', $param);
+        $this->assertEquals(array(
+            'startLine' => 3,
+            'endLine' => 3,
+            'startTokenPos' => 7,
+            'endTokenPos' => 7,
+        ), $param->getAttributes());
+
+        /** @var \PhpParser\Node\Stmt\Echo_ $echo */
+        $echo = $fn->stmts[0];
+        $this->assertInstanceOf('PhpParser\Node\Stmt\Echo_', $echo);
+        $this->assertEquals(array(
+            'comments' => array(
+                new Comment("// Line\n", 4),
+                new Comment("// Comments\n", 5),
+            ),
+            'startLine' => 6,
+            'endLine' => 6,
+            'startTokenPos' => 16,
+            'endTokenPos' => 19,
+        ), $echo->getAttributes());
+
+        /** @var \PhpParser\Node\Expr\Variable $var */
+        $var = $echo->exprs[0];
+        $this->assertInstanceOf('PhpParser\Node\Expr\Variable', $var);
+        $this->assertEquals(array(
+            'startLine' => 6,
+            'endLine' => 6,
+            'startTokenPos' => 18,
+            'endTokenPos' => 18,
+        ), $var->getAttributes());
+    }
+
+    /**
+     * @expectedException \RangeException
+     * @expectedExceptionMessage The lexer returned an invalid token (id=999, value=foobar)
+     */
+    public function testInvalidToken() {
+        $lexer = new InvalidTokenLexer;
+        $parser = new Parser($lexer);
+        $parser->parse('dummy');
+    }
+}
+
+class InvalidTokenLexer extends Lexer {
+    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) {
+        $value = 'foobar';
+        return 999;
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php b/vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php
new file mode 100644
index 0000000..6415b06
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php
@@ -0,0 +1,63 @@
+parse($code);
+        $this->assertSame(
+            $this->canonicalize($dump),
+            $this->canonicalize($prettyPrinter->$method($stmts)),
+            $name
+        );
+    }
+
+    /**
+     * @dataProvider provideTestPrettyPrint
+     * @covers PhpParser\PrettyPrinter\Standard
+     */
+    public function testPrettyPrint($name, $code, $dump) {
+        $this->doTestPrettyPrintMethod('prettyPrint', $name, $code, $dump);
+    }
+
+    /**
+     * @dataProvider provideTestPrettyPrintFile
+     * @covers PhpParser\PrettyPrinter\Standard
+     */
+    public function testPrettyPrintFile($name, $code, $dump) {
+        $this->doTestPrettyPrintMethod('prettyPrintFile', $name, $code, $dump);
+    }
+
+    public function provideTestPrettyPrint() {
+        return $this->getTests(__DIR__ . '/../code/prettyPrinter', 'test');
+    }
+
+    public function provideTestPrettyPrintFile() {
+        return $this->getTests(__DIR__ . '/../code/prettyPrinter', 'file-test');
+    }
+
+    public function testPrettyPrintExpr() {
+        $prettyPrinter = new Standard;
+        $expr = new Expr\BinaryOp\Mul(
+            new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b')),
+            new Expr\Variable('c')
+        );
+        $this->assertEquals('($a + $b) * $c', $prettyPrinter->prettyPrintExpr($expr));
+
+        $expr = new Expr\Closure(array(
+            'stmts' => array(new Stmt\Return_(new String_("a\nb")))
+        ));
+        $this->assertEquals("function () {\n    return 'a\nb';\n}", $prettyPrinter->prettyPrintExpr($expr));
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Serializer/XMLTest.php b/vendor/nikic/php-parser/test/PhpParser/Serializer/XMLTest.php
new file mode 100644
index 0000000..78370c6
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Serializer/XMLTest.php
@@ -0,0 +1,165 @@
+
+     */
+    public function testSerialize() {
+        $code = <<
+
+ 
+  
+   
+    
+     // comment
+
+     /** doc comment */
+    
+   
+   
+    4
+   
+   
+    6
+   
+   
+    
+   
+   
+    functionName
+   
+   
+    
+     
+      
+       4
+      
+      
+       4
+      
+      
+       
+      
+      
+       
+      
+      
+       
+      
+      
+       a
+      
+      
+       
+        
+         4
+        
+        
+         4
+        
+        
+         0
+        
+       
+      
+     
+     
+      
+       4
+      
+      
+       4
+      
+      
+       
+      
+      
+       
+      
+      
+       
+      
+      
+       b
+      
+      
+       
+        
+         4
+        
+        
+         4
+        
+        
+         1
+        
+       
+      
+     
+    
+   
+   
+     
+   
+   
+    
+     
+      
+       5
+      
+      
+       5
+      
+      
+       
+        
+         
+          5
+         
+         
+          5
+         
+         
+          Foo
+         
+        
+       
+      
+     
+    
+   
+  
+ 
+
+XML;
+
+        $parser     = new PhpParser\Parser(new PhpParser\Lexer);
+        $serializer = new XML;
+
+        $stmts = $parser->parse($code);
+        $this->assertXmlStringEqualsXmlString($xml, $serializer->serialize($stmts));
+    }
+
+    /**
+     * @expectedException        \InvalidArgumentException
+     * @expectedExceptionMessage Unexpected node type
+     */
+    public function testError() {
+        $serializer = new XML;
+        $serializer->serialize(array(new \stdClass));
+    }
+}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Unserializer/XMLTest.php b/vendor/nikic/php-parser/test/PhpParser/Unserializer/XMLTest.php
new file mode 100644
index 0000000..8ee5d7b
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Unserializer/XMLTest.php
@@ -0,0 +1,150 @@
+
+
+ 
+  
+   1
+  
+  
+   
+    // comment
+
+    /** doc comment */
+   
+  
+  
+   Test
+  
+ 
+
+XML;
+
+        $unserializer  = new XML;
+        $this->assertEquals(
+            new Scalar\String_('Test', array(
+                'startLine' => 1,
+                'comments'  => array(
+                    new Comment('// comment' . "\n", 2),
+                    new Comment\Doc('/** doc comment */', 3),
+                ),
+            )),
+            $unserializer->unserialize($xml)
+        );
+    }
+
+    public function testEmptyNode() {
+        $xml = <<
+
+ 
+
+XML;
+
+        $unserializer  = new XML;
+
+        $this->assertEquals(
+            new Scalar\MagicConst\Class_,
+            $unserializer->unserialize($xml)
+        );
+    }
+
+    public function testScalars() {
+        $xml = <<
+
+ 
+  
+  
+  test
+  
+  
+  1
+  1
+  1.5
+  
+  
+  
+ 
+
+XML;
+        $result = array(
+            array(), array(),
+            'test', '', '',
+            1,
+            1, 1.5,
+            true, false, null
+        );
+
+        $unserializer  = new XML;
+        $this->assertEquals($result, $unserializer->unserialize($xml));
+    }
+
+    /**
+     * @expectedException        \DomainException
+     * @expectedExceptionMessage AST root element not found
+     */
+    public function testWrongRootElementError() {
+        $xml = <<
+
+XML;
+
+        $unserializer = new XML;
+        $unserializer->unserialize($xml);
+    }
+
+    /**
+     * @dataProvider             provideTestErrors
+     */
+    public function testErrors($xml, $errorMsg) {
+        $this->setExpectedException('DomainException', $errorMsg);
+
+        $xml = <<
+
+ $xml
+
+XML;
+
+        $unserializer = new XML;
+        $unserializer->unserialize($xml);
+    }
+
+    public function provideTestErrors() {
+        return array(
+            array('test',   '"true" scalar must be empty'),
+            array('test', '"false" scalar must be empty'),
+            array('test',   '"null" scalar must be empty'),
+            array('bar',      'Unknown scalar type "foo"'),
+            array('x',        '"x" is not a valid int'),
+            array('x',    '"x" is not a valid float'),
+            array('',                                  'Expected node or scalar'),
+            array('test',           'Unexpected node of type "foo:bar"'),
+            array(
+                'test',
+                'Expected sub node or attribute, got node of type "foo:bar"'
+            ),
+            array(
+                '',
+                'Expected node or scalar'
+            ),
+            array(
+                '',
+                'Unknown node type "Foo"'
+            ),
+        );
+    }
+}
diff --git a/vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test b/vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test
new file mode 100644
index 0000000..8914f56
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test
@@ -0,0 +1,13 @@
+Error positions
+-----
+ 'd', 'e' => &$f);
+
+// short array syntax
+[];
+[1, 2, 3];
+['a' => 'b'];
+-----
+array(
+    0: Expr_Array(
+        items: array(
+        )
+    )
+    1: Expr_Array(
+        items: array(
+            0: Expr_ArrayItem(
+                key: null
+                value: Scalar_String(
+                    value: a
+                )
+                byRef: false
+            )
+        )
+    )
+    2: Expr_Array(
+        items: array(
+            0: Expr_ArrayItem(
+                key: null
+                value: Scalar_String(
+                    value: a
+                )
+                byRef: false
+            )
+        )
+    )
+    3: Expr_Array(
+        items: array(
+            0: Expr_ArrayItem(
+                key: null
+                value: Scalar_String(
+                    value: a
+                )
+                byRef: false
+            )
+            1: Expr_ArrayItem(
+                key: null
+                value: Scalar_String(
+                    value: b
+                )
+                byRef: false
+            )
+        )
+    )
+    4: Expr_Array(
+        items: array(
+            0: Expr_ArrayItem(
+                key: null
+                value: Scalar_String(
+                    value: a
+                )
+                byRef: false
+            )
+            1: Expr_ArrayItem(
+                key: null
+                value: Expr_Variable(
+                    name: b
+                )
+                byRef: true
+            )
+            2: Expr_ArrayItem(
+                key: Scalar_String(
+                    value: c
+                )
+                value: Scalar_String(
+                    value: d
+                )
+                byRef: false
+            )
+            3: Expr_ArrayItem(
+                key: Scalar_String(
+                    value: e
+                )
+                value: Expr_Variable(
+                    name: f
+                )
+                byRef: true
+            )
+        )
+    )
+    5: Expr_Array(
+        items: array(
+        )
+    )
+    6: Expr_Array(
+        items: array(
+            0: Expr_ArrayItem(
+                key: null
+                value: Scalar_LNumber(
+                    value: 1
+                )
+                byRef: false
+            )
+            1: Expr_ArrayItem(
+                key: null
+                value: Scalar_LNumber(
+                    value: 2
+                )
+                byRef: false
+            )
+            2: Expr_ArrayItem(
+                key: null
+                value: Scalar_LNumber(
+                    value: 3
+                )
+                byRef: false
+            )
+        )
+    )
+    7: Expr_Array(
+        items: array(
+            0: Expr_ArrayItem(
+                key: Scalar_String(
+                    value: a
+                )
+                value: Scalar_String(
+                    value: b
+                )
+                byRef: false
+            )
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/assign.test b/vendor/nikic/php-parser/test/code/parser/expr/assign.test
new file mode 100644
index 0000000..66ae18f
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/expr/assign.test
@@ -0,0 +1,255 @@
+Assignments
+-----
+>= $b;
+$a **= $b;
+
+// chained assign
+$a = $b *= $c **= $d;
+
+// by ref assign
+$a =& $b;
+$a =& new B;
+
+// list() assign
+list($a) = $b;
+list($a, , $b) = $c;
+list($a, list(, $c), $d) = $e;
+
+// inc/dec
+++$a;
+$a++;
+--$a;
+$a--;
+-----
+array(
+    0: Expr_Assign(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    1: Expr_AssignOp_BitwiseAnd(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    2: Expr_AssignOp_BitwiseOr(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    3: Expr_AssignOp_BitwiseXor(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    4: Expr_AssignOp_Concat(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    5: Expr_AssignOp_Div(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    6: Expr_AssignOp_Minus(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    7: Expr_AssignOp_Mod(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    8: Expr_AssignOp_Mul(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    9: Expr_AssignOp_Plus(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    10: Expr_AssignOp_ShiftLeft(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    11: Expr_AssignOp_ShiftRight(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    12: Expr_AssignOp_Pow(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    13: Expr_Assign(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_AssignOp_Mul(
+            var: Expr_Variable(
+                name: b
+            )
+            expr: Expr_AssignOp_Pow(
+                var: Expr_Variable(
+                    name: c
+                )
+                expr: Expr_Variable(
+                    name: d
+                )
+            )
+        )
+    )
+    14: Expr_AssignRef(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    15: Expr_AssignRef(
+        var: Expr_Variable(
+            name: a
+        )
+        expr: Expr_New(
+            class: Name(
+                parts: array(
+                    0: B
+                )
+            )
+            args: array(
+            )
+        )
+    )
+    16: Expr_Assign(
+        var: Expr_List(
+            vars: array(
+                0: Expr_Variable(
+                    name: a
+                )
+            )
+        )
+        expr: Expr_Variable(
+            name: b
+        )
+    )
+    17: Expr_Assign(
+        var: Expr_List(
+            vars: array(
+                0: Expr_Variable(
+                    name: a
+                )
+                1: null
+                2: Expr_Variable(
+                    name: b
+                )
+            )
+        )
+        expr: Expr_Variable(
+            name: c
+        )
+    )
+    18: Expr_Assign(
+        var: Expr_List(
+            vars: array(
+                0: Expr_Variable(
+                    name: a
+                )
+                1: Expr_List(
+                    vars: array(
+                        0: null
+                        1: Expr_Variable(
+                            name: c
+                        )
+                    )
+                )
+                2: Expr_Variable(
+                    name: d
+                )
+            )
+        )
+        expr: Expr_Variable(
+            name: e
+        )
+    )
+    19: Expr_PreInc(
+        var: Expr_Variable(
+            name: a
+        )
+    )
+    20: Expr_PostInc(
+        var: Expr_Variable(
+            name: a
+        )
+    )
+    21: Expr_PreDec(
+        var: Expr_Variable(
+            name: a
+        )
+    )
+    22: Expr_PostDec(
+        var: Expr_Variable(
+            name: a
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/cast.test b/vendor/nikic/php-parser/test/code/parser/expr/cast.test
new file mode 100644
index 0000000..3c54ba7
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/expr/cast.test
@@ -0,0 +1,72 @@
+Casts
+-----
+ $b;
+$a >= $b;
+$a == $b;
+$a === $b;
+$a != $b;
+$a !== $b;
+$a <=> $b;
+$a instanceof B;
+$a instanceof $b;
+-----
+array(
+    0: Expr_BinaryOp_Smaller(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    1: Expr_BinaryOp_SmallerOrEqual(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    2: Expr_BinaryOp_Greater(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    3: Expr_BinaryOp_GreaterOrEqual(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    4: Expr_BinaryOp_Equal(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    5: Expr_BinaryOp_Identical(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    6: Expr_BinaryOp_NotEqual(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    7: Expr_BinaryOp_NotIdentical(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    8: Expr_BinaryOp_Spaceship(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    9: Expr_Instanceof(
+        expr: Expr_Variable(
+            name: a
+        )
+        class: Name(
+            parts: array(
+                0: B
+            )
+        )
+    )
+    10: Expr_Instanceof(
+        expr: Expr_Variable(
+            name: a
+        )
+        class: Expr_Variable(
+            name: b
+        )
+    )
+)
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test b/vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test
new file mode 100644
index 0000000..3e7a23e
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test
@@ -0,0 +1,621 @@
+Expressions in static scalar context
+-----
+ 0;
+const T_20 = 1 >= 0;
+const T_21 = 1 === 1;
+const T_22 = 1 !== 1;
+const T_23 = 0 != "0";
+const T_24 = 1 == "1";
+const T_25 = 1 + 2 * 3;
+const T_26 = "1" + 2 + "3";
+const T_27 = 2 ** 3;
+const T_28 = [1, 2, 3][1];
+const T_29 = 12 - 13;
+const T_30 = 12 ^ 13;
+const T_31 = 12 & 13;
+const T_32 = 12 | 13;
+const T_33 = 12 % 3;
+const T_34 = 100 >> 4;
+const T_35 = !false;
+-----
+array(
+    0: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_1
+                value: Expr_BinaryOp_ShiftLeft(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 1
+                    )
+                )
+            )
+        )
+    )
+    1: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_2
+                value: Expr_BinaryOp_Div(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 2
+                    )
+                )
+            )
+        )
+    )
+    2: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_3
+                value: Expr_BinaryOp_Plus(
+                    left: Scalar_DNumber(
+                        value: 1.5
+                    )
+                    right: Scalar_DNumber(
+                        value: 1.5
+                    )
+                )
+            )
+        )
+    )
+    3: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_4
+                value: Expr_BinaryOp_Concat(
+                    left: Scalar_String(
+                        value: foo
+                    )
+                    right: Scalar_String(
+                        value: bar
+                    )
+                )
+            )
+        )
+    )
+    4: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_5
+                value: Expr_BinaryOp_Mul(
+                    left: Expr_BinaryOp_Plus(
+                        left: Scalar_DNumber(
+                            value: 1.5
+                        )
+                        right: Scalar_DNumber(
+                            value: 1.5
+                        )
+                    )
+                    right: Scalar_LNumber(
+                        value: 2
+                    )
+                )
+            )
+        )
+    )
+    5: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_6
+                value: Expr_BinaryOp_Concat(
+                    left: Expr_BinaryOp_Concat(
+                        left: Expr_BinaryOp_Concat(
+                            left: Scalar_String(
+                                value: foo
+                            )
+                            right: Scalar_LNumber(
+                                value: 2
+                            )
+                        )
+                        right: Scalar_LNumber(
+                            value: 3
+                        )
+                    )
+                    right: Scalar_DNumber(
+                        value: 4
+                    )
+                )
+            )
+        )
+    )
+    6: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_7
+                value: Scalar_MagicConst_Line(
+                )
+            )
+        )
+    )
+    7: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_8
+                value: Scalar_String(
+                    value: This is a test string
+                )
+            )
+        )
+    )
+    8: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_9
+                value: Expr_BitwiseNot(
+                    expr: Expr_UnaryMinus(
+                        expr: Scalar_LNumber(
+                            value: 1
+                        )
+                    )
+                )
+            )
+        )
+    )
+    9: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_10
+                value: Expr_BinaryOp_Plus(
+                    left: Expr_Ternary(
+                        cond: Expr_UnaryMinus(
+                            expr: Scalar_LNumber(
+                                value: 1
+                            )
+                        )
+                        if: null
+                        else: Scalar_LNumber(
+                            value: 1
+                        )
+                    )
+                    right: Expr_Ternary(
+                        cond: Scalar_LNumber(
+                            value: 0
+                        )
+                        if: Scalar_LNumber(
+                            value: 2
+                        )
+                        else: Scalar_LNumber(
+                            value: 3
+                        )
+                    )
+                )
+            )
+        )
+    )
+    10: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_11
+                value: Expr_BinaryOp_BooleanAnd(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 0
+                    )
+                )
+            )
+        )
+    )
+    11: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_12
+                value: Expr_BinaryOp_LogicalAnd(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 1
+                    )
+                )
+            )
+        )
+    )
+    12: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_13
+                value: Expr_BinaryOp_BooleanOr(
+                    left: Scalar_LNumber(
+                        value: 0
+                    )
+                    right: Scalar_LNumber(
+                        value: 0
+                    )
+                )
+            )
+        )
+    )
+    13: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_14
+                value: Expr_BinaryOp_LogicalOr(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 0
+                    )
+                )
+            )
+        )
+    )
+    14: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_15
+                value: Expr_BinaryOp_LogicalXor(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 1
+                    )
+                )
+            )
+        )
+    )
+    15: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_16
+                value: Expr_BinaryOp_LogicalXor(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 0
+                    )
+                )
+            )
+        )
+    )
+    16: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_17
+                value: Expr_BinaryOp_Smaller(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 0
+                    )
+                )
+            )
+        )
+    )
+    17: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_18
+                value: Expr_BinaryOp_SmallerOrEqual(
+                    left: Scalar_LNumber(
+                        value: 0
+                    )
+                    right: Scalar_LNumber(
+                        value: 0
+                    )
+                )
+            )
+        )
+    )
+    18: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_19
+                value: Expr_BinaryOp_Greater(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 0
+                    )
+                )
+            )
+        )
+    )
+    19: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_20
+                value: Expr_BinaryOp_GreaterOrEqual(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 0
+                    )
+                )
+            )
+        )
+    )
+    20: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_21
+                value: Expr_BinaryOp_Identical(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 1
+                    )
+                )
+            )
+        )
+    )
+    21: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_22
+                value: Expr_BinaryOp_NotIdentical(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_LNumber(
+                        value: 1
+                    )
+                )
+            )
+        )
+    )
+    22: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_23
+                value: Expr_BinaryOp_NotEqual(
+                    left: Scalar_LNumber(
+                        value: 0
+                    )
+                    right: Scalar_String(
+                        value: 0
+                    )
+                )
+            )
+        )
+    )
+    23: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_24
+                value: Expr_BinaryOp_Equal(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Scalar_String(
+                        value: 1
+                    )
+                )
+            )
+        )
+    )
+    24: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_25
+                value: Expr_BinaryOp_Plus(
+                    left: Scalar_LNumber(
+                        value: 1
+                    )
+                    right: Expr_BinaryOp_Mul(
+                        left: Scalar_LNumber(
+                            value: 2
+                        )
+                        right: Scalar_LNumber(
+                            value: 3
+                        )
+                    )
+                )
+            )
+        )
+    )
+    25: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_26
+                value: Expr_BinaryOp_Plus(
+                    left: Expr_BinaryOp_Plus(
+                        left: Scalar_String(
+                            value: 1
+                        )
+                        right: Scalar_LNumber(
+                            value: 2
+                        )
+                    )
+                    right: Scalar_String(
+                        value: 3
+                    )
+                )
+            )
+        )
+    )
+    26: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_27
+                value: Expr_BinaryOp_Pow(
+                    left: Scalar_LNumber(
+                        value: 2
+                    )
+                    right: Scalar_LNumber(
+                        value: 3
+                    )
+                )
+            )
+        )
+    )
+    27: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_28
+                value: Expr_ArrayDimFetch(
+                    var: Expr_Array(
+                        items: array(
+                            0: Expr_ArrayItem(
+                                key: null
+                                value: Scalar_LNumber(
+                                    value: 1
+                                )
+                                byRef: false
+                            )
+                            1: Expr_ArrayItem(
+                                key: null
+                                value: Scalar_LNumber(
+                                    value: 2
+                                )
+                                byRef: false
+                            )
+                            2: Expr_ArrayItem(
+                                key: null
+                                value: Scalar_LNumber(
+                                    value: 3
+                                )
+                                byRef: false
+                            )
+                        )
+                    )
+                    dim: Scalar_LNumber(
+                        value: 1
+                    )
+                )
+            )
+        )
+    )
+    28: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_29
+                value: Expr_BinaryOp_Minus(
+                    left: Scalar_LNumber(
+                        value: 12
+                    )
+                    right: Scalar_LNumber(
+                        value: 13
+                    )
+                )
+            )
+        )
+    )
+    29: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_30
+                value: Expr_BinaryOp_BitwiseXor(
+                    left: Scalar_LNumber(
+                        value: 12
+                    )
+                    right: Scalar_LNumber(
+                        value: 13
+                    )
+                )
+            )
+        )
+    )
+    30: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_31
+                value: Expr_BinaryOp_BitwiseAnd(
+                    left: Scalar_LNumber(
+                        value: 12
+                    )
+                    right: Scalar_LNumber(
+                        value: 13
+                    )
+                )
+            )
+        )
+    )
+    31: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_32
+                value: Expr_BinaryOp_BitwiseOr(
+                    left: Scalar_LNumber(
+                        value: 12
+                    )
+                    right: Scalar_LNumber(
+                        value: 13
+                    )
+                )
+            )
+        )
+    )
+    32: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_33
+                value: Expr_BinaryOp_Mod(
+                    left: Scalar_LNumber(
+                        value: 12
+                    )
+                    right: Scalar_LNumber(
+                        value: 3
+                    )
+                )
+            )
+        )
+    )
+    33: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_34
+                value: Expr_BinaryOp_ShiftRight(
+                    left: Scalar_LNumber(
+                        value: 100
+                    )
+                    right: Scalar_LNumber(
+                        value: 4
+                    )
+                )
+            )
+        )
+    )
+    34: Stmt_Const(
+        consts: array(
+            0: Const(
+                name: T_35
+                value: Expr_BooleanNot(
+                    expr: Expr_ConstFetch(
+                        name: Name(
+                            parts: array(
+                                0: false
+                            )
+                        )
+                    )
+                )
+            )
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test b/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test
new file mode 100644
index 0000000..ce3fce9
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test
@@ -0,0 +1,12 @@
+Error suppression
+-----
+b['c']();
+
+// array dereferencing
+a()['b'];
+-----
+array(
+    0: Expr_FuncCall(
+        name: Name(
+            parts: array(
+                0: a
+            )
+        )
+        args: array(
+        )
+    )
+    1: Expr_FuncCall(
+        name: Expr_Variable(
+            name: a
+        )
+        args: array(
+        )
+    )
+    2: Expr_FuncCall(
+        name: Expr_Variable(
+            name: Scalar_String(
+                value: a
+            )
+        )
+        args: array(
+        )
+    )
+    3: Expr_FuncCall(
+        name: Expr_Variable(
+            name: Expr_Variable(
+                name: a
+            )
+        )
+        args: array(
+        )
+    )
+    4: Expr_FuncCall(
+        name: Expr_Variable(
+            name: Expr_Variable(
+                name: Expr_Variable(
+                    name: a
+                )
+            )
+        )
+        args: array(
+        )
+    )
+    5: Expr_FuncCall(
+        name: Expr_ArrayDimFetch(
+            var: Expr_Variable(
+                name: a
+            )
+            dim: Scalar_String(
+                value: b
+            )
+        )
+        args: array(
+        )
+    )
+    6: Expr_FuncCall(
+        name: Expr_ArrayDimFetch(
+            var: Expr_Variable(
+                name: a
+            )
+            dim: Scalar_String(
+                value: b
+            )
+        )
+        args: array(
+        )
+    )
+    7: Expr_FuncCall(
+        name: Expr_ArrayDimFetch(
+            var: Expr_PropertyFetch(
+                var: Expr_Variable(
+                    name: a
+                )
+                name: b
+            )
+            dim: Scalar_String(
+                value: c
+            )
+        )
+        args: array(
+        )
+    )
+    8: Expr_ArrayDimFetch(
+        var: Expr_FuncCall(
+            name: Name(
+                parts: array(
+                    0: a
+                )
+            )
+            args: array(
+            )
+        )
+        dim: Scalar_String(
+            value: b
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test
new file mode 100644
index 0000000..5e36ff8
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test
@@ -0,0 +1,70 @@
+New expression dereferencing
+-----
+b;
+(new A)->b();
+(new A)['b'];
+(new A)['b']['c'];
+-----
+array(
+    0: Expr_PropertyFetch(
+        var: Expr_New(
+            class: Name(
+                parts: array(
+                    0: A
+                )
+            )
+            args: array(
+            )
+        )
+        name: b
+    )
+    1: Expr_MethodCall(
+        var: Expr_New(
+            class: Name(
+                parts: array(
+                    0: A
+                )
+            )
+            args: array(
+            )
+        )
+        name: b
+        args: array(
+        )
+    )
+    2: Expr_ArrayDimFetch(
+        var: Expr_New(
+            class: Name(
+                parts: array(
+                    0: A
+                )
+            )
+            args: array(
+            )
+        )
+        dim: Scalar_String(
+            value: b
+        )
+    )
+    3: Expr_ArrayDimFetch(
+        var: Expr_ArrayDimFetch(
+            var: Expr_New(
+                class: Name(
+                    parts: array(
+                        0: A
+                    )
+                )
+                args: array(
+                )
+            )
+            dim: Scalar_String(
+                value: b
+            )
+        )
+        dim: Scalar_String(
+            value: c
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test
new file mode 100644
index 0000000..9dd1858
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test
@@ -0,0 +1,118 @@
+Object access
+-----
+b;
+$a->b['c'];
+$a->b{'c'};
+
+// method call variations
+$a->b();
+$a->{'b'}();
+$a->$b();
+$a->$b['c']();
+
+// array dereferencing
+$a->b()['c'];
+$a->b(){'c'}; // invalid PHP: drop Support?
+-----
+array(
+    0: Expr_PropertyFetch(
+        var: Expr_Variable(
+            name: a
+        )
+        name: b
+    )
+    1: Expr_ArrayDimFetch(
+        var: Expr_PropertyFetch(
+            var: Expr_Variable(
+                name: a
+            )
+            name: b
+        )
+        dim: Scalar_String(
+            value: c
+        )
+    )
+    2: Expr_ArrayDimFetch(
+        var: Expr_PropertyFetch(
+            var: Expr_Variable(
+                name: a
+            )
+            name: b
+        )
+        dim: Scalar_String(
+            value: c
+        )
+    )
+    3: Expr_MethodCall(
+        var: Expr_Variable(
+            name: a
+        )
+        name: b
+        args: array(
+        )
+    )
+    4: Expr_MethodCall(
+        var: Expr_Variable(
+            name: a
+        )
+        name: Scalar_String(
+            value: b
+        )
+        args: array(
+        )
+    )
+    5: Expr_MethodCall(
+        var: Expr_Variable(
+            name: a
+        )
+        name: Expr_Variable(
+            name: b
+        )
+        args: array(
+        )
+    )
+    6: Expr_MethodCall(
+        var: Expr_Variable(
+            name: a
+        )
+        name: Expr_ArrayDimFetch(
+            var: Expr_Variable(
+                name: b
+            )
+            dim: Scalar_String(
+                value: c
+            )
+        )
+        args: array(
+        )
+    )
+    7: Expr_ArrayDimFetch(
+        var: Expr_MethodCall(
+            var: Expr_Variable(
+                name: a
+            )
+            name: b
+            args: array(
+            )
+        )
+        dim: Scalar_String(
+            value: c
+        )
+    )
+    8: Expr_ArrayDimFetch(
+        var: Expr_MethodCall(
+            var: Expr_Variable(
+                name: a
+            )
+            name: b
+            args: array(
+            )
+        )
+        dim: Scalar_String(
+            value: c
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
new file mode 100644
index 0000000..ea3f9ef
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
@@ -0,0 +1,62 @@
+Simple array access
+-----
+> $b;
+$a ** $b;
+
+// associativity
+$a * $b * $c;
+$a * ($b * $c);
+
+// precedence
+$a + $b * $c;
+($a + $b) * $c;
+
+// pow is special
+$a ** $b ** $c;
+($a ** $b) ** $c;
+-----
+array(
+    0: Expr_BitwiseNot(
+        expr: Expr_Variable(
+            name: a
+        )
+    )
+    1: Expr_UnaryPlus(
+        expr: Expr_Variable(
+            name: a
+        )
+    )
+    2: Expr_UnaryMinus(
+        expr: Expr_Variable(
+            name: a
+        )
+    )
+    3: Expr_BinaryOp_BitwiseAnd(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    4: Expr_BinaryOp_BitwiseOr(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    5: Expr_BinaryOp_BitwiseXor(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    6: Expr_BinaryOp_Concat(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    7: Expr_BinaryOp_Div(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    8: Expr_BinaryOp_Minus(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    9: Expr_BinaryOp_Mod(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    10: Expr_BinaryOp_Mul(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    11: Expr_BinaryOp_Plus(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    12: Expr_BinaryOp_ShiftLeft(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    13: Expr_BinaryOp_ShiftRight(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    14: Expr_BinaryOp_Pow(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_Variable(
+            name: b
+        )
+    )
+    15: Expr_BinaryOp_Mul(
+        left: Expr_BinaryOp_Mul(
+            left: Expr_Variable(
+                name: a
+            )
+            right: Expr_Variable(
+                name: b
+            )
+        )
+        right: Expr_Variable(
+            name: c
+        )
+    )
+    16: Expr_BinaryOp_Mul(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_BinaryOp_Mul(
+            left: Expr_Variable(
+                name: b
+            )
+            right: Expr_Variable(
+                name: c
+            )
+        )
+    )
+    17: Expr_BinaryOp_Plus(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_BinaryOp_Mul(
+            left: Expr_Variable(
+                name: b
+            )
+            right: Expr_Variable(
+                name: c
+            )
+        )
+    )
+    18: Expr_BinaryOp_Mul(
+        left: Expr_BinaryOp_Plus(
+            left: Expr_Variable(
+                name: a
+            )
+            right: Expr_Variable(
+                name: b
+            )
+        )
+        right: Expr_Variable(
+            name: c
+        )
+    )
+    19: Expr_BinaryOp_Pow(
+        left: Expr_Variable(
+            name: a
+        )
+        right: Expr_BinaryOp_Pow(
+            left: Expr_Variable(
+                name: b
+            )
+            right: Expr_Variable(
+                name: c
+            )
+        )
+    )
+    20: Expr_BinaryOp_Pow(
+        left: Expr_BinaryOp_Pow(
+            left: Expr_Variable(
+                name: a
+            )
+            right: Expr_Variable(
+                name: b
+            )
+        )
+        right: Expr_Variable(
+            name: c
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/new.test b/vendor/nikic/php-parser/test/code/parser/expr/new.test
new file mode 100644
index 0000000..b7ce7a9
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/expr/new.test
@@ -0,0 +1,140 @@
+New
+-----
+b();
+new $a->b->c();
+new $a->b['c']();
+new $a->b{'c'}();
+
+// test regression introduces by new dereferencing syntax
+(new A);
+-----
+array(
+    0: Expr_New(
+        class: Name(
+            parts: array(
+                0: A
+            )
+        )
+        args: array(
+        )
+    )
+    1: Expr_New(
+        class: Name(
+            parts: array(
+                0: A
+            )
+        )
+        args: array(
+            0: Arg(
+                value: Expr_Variable(
+                    name: b
+                )
+                byRef: false
+                unpack: false
+            )
+        )
+    )
+    2: Expr_New(
+        class: Expr_Variable(
+            name: a
+        )
+        args: array(
+        )
+    )
+    3: Expr_New(
+        class: Expr_ArrayDimFetch(
+            var: Expr_Variable(
+                name: a
+            )
+            dim: Scalar_String(
+                value: b
+            )
+        )
+        args: array(
+        )
+    )
+    4: Expr_New(
+        class: Expr_StaticPropertyFetch(
+            class: Name(
+                parts: array(
+                    0: A
+                )
+            )
+            name: b
+        )
+        args: array(
+        )
+    )
+    5: Expr_New(
+        class: Expr_PropertyFetch(
+            var: Expr_Variable(
+                name: a
+            )
+            name: b
+        )
+        args: array(
+        )
+    )
+    6: Expr_New(
+        class: Expr_PropertyFetch(
+            var: Expr_PropertyFetch(
+                var: Expr_Variable(
+                    name: a
+                )
+                name: b
+            )
+            name: c
+        )
+        args: array(
+        )
+    )
+    7: Expr_New(
+        class: Expr_ArrayDimFetch(
+            var: Expr_PropertyFetch(
+                var: Expr_Variable(
+                    name: a
+                )
+                name: b
+            )
+            dim: Scalar_String(
+                value: c
+            )
+        )
+        args: array(
+        )
+    )
+    8: Expr_New(
+        class: Expr_ArrayDimFetch(
+            var: Expr_PropertyFetch(
+                var: Expr_Variable(
+                    name: a
+                )
+                name: b
+            )
+            dim: Scalar_String(
+                value: c
+            )
+        )
+        args: array(
+        )
+    )
+    9: Expr_New(
+        class: Name(
+            parts: array(
+                0: A
+            )
+        )
+        args: array(
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test b/vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test
new file mode 100644
index 0000000..84ec7b1
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test
@@ -0,0 +1,8 @@
+New without a class
+-----
+c test
+EOS;
+
+// comment to force line break before EOF
+-----
+array(
+    0: Scalar_String(
+        value:
+    )
+    1: Scalar_String(
+        value:
+    )
+    2: Scalar_String(
+        value: Test '" $a \n
+    )
+    3: Scalar_String(
+        value: Test '" $a
+
+    )
+    4: Scalar_Encapsed(
+        parts: array(
+            0: Test
+            1: Expr_Variable(
+                name: a
+            )
+        )
+    )
+    5: Scalar_Encapsed(
+        parts: array(
+            0: Test
+            1: Expr_Variable(
+                name: a
+            )
+            2:  and
+            3: Expr_PropertyFetch(
+                var: Expr_Variable(
+                    name: b
+                )
+                name: c
+            )
+            4:  test
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test b/vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test
new file mode 100644
index 0000000..479c995
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test
@@ -0,0 +1,58 @@
+Trailing newlines in doc strings
+-----
+B";
+"$A[B]";
+"$A[0]";
+"$A[0x0]";
+"$A[$B]";
+"{$A}";
+"{$A['B']}";
+"${A}";
+"${A['B']}";
+"${$A}";
+"\{$A}";
+"\{ $A }";
+"\\{$A}";
+"\\{ $A }";
+"{$$A}[B]";
+"$$A[B]";
+"A $B C";
+b"$A";
+-----
+array(
+    0: Scalar_Encapsed(
+        parts: array(
+            0: Expr_Variable(
+                name: A
+            )
+        )
+    )
+    1: Scalar_Encapsed(
+        parts: array(
+            0: Expr_PropertyFetch(
+                var: Expr_Variable(
+                    name: A
+                )
+                name: B
+            )
+        )
+    )
+    2: Scalar_Encapsed(
+        parts: array(
+            0: Expr_ArrayDimFetch(
+                var: Expr_Variable(
+                    name: A
+                )
+                dim: Scalar_String(
+                    value: B
+                )
+            )
+        )
+    )
+    3: Scalar_Encapsed(
+        parts: array(
+            0: Expr_ArrayDimFetch(
+                var: Expr_Variable(
+                    name: A
+                )
+                dim: Scalar_String(
+                    value: 0
+                )
+            )
+        )
+    )
+    4: Scalar_Encapsed(
+        parts: array(
+            0: Expr_ArrayDimFetch(
+                var: Expr_Variable(
+                    name: A
+                )
+                dim: Scalar_String(
+                    value: 0x0
+                )
+            )
+        )
+    )
+    5: Scalar_Encapsed(
+        parts: array(
+            0: Expr_ArrayDimFetch(
+                var: Expr_Variable(
+                    name: A
+                )
+                dim: Expr_Variable(
+                    name: B
+                )
+            )
+        )
+    )
+    6: Scalar_Encapsed(
+        parts: array(
+            0: Expr_Variable(
+                name: A
+            )
+        )
+    )
+    7: Scalar_Encapsed(
+        parts: array(
+            0: Expr_ArrayDimFetch(
+                var: Expr_Variable(
+                    name: A
+                )
+                dim: Scalar_String(
+                    value: B
+                )
+            )
+        )
+    )
+    8: Scalar_Encapsed(
+        parts: array(
+            0: Expr_Variable(
+                name: A
+            )
+        )
+    )
+    9: Scalar_Encapsed(
+        parts: array(
+            0: Expr_ArrayDimFetch(
+                var: Expr_Variable(
+                    name: A
+                )
+                dim: Scalar_String(
+                    value: B
+                )
+            )
+        )
+    )
+    10: Scalar_Encapsed(
+        parts: array(
+            0: Expr_Variable(
+                name: Expr_Variable(
+                    name: A
+                )
+            )
+        )
+    )
+    11: Scalar_Encapsed(
+        parts: array(
+            0: \{
+            1: Expr_Variable(
+                name: A
+            )
+            2: }
+        )
+    )
+    12: Scalar_Encapsed(
+        parts: array(
+            0: \{
+            1: Expr_Variable(
+                name: A
+            )
+            2:  }
+        )
+    )
+    13: Scalar_Encapsed(
+        parts: array(
+            0: \
+            1: Expr_Variable(
+                name: A
+            )
+        )
+    )
+    14: Scalar_Encapsed(
+        parts: array(
+            0: \{
+            1: Expr_Variable(
+                name: A
+            )
+            2:  }
+        )
+    )
+    15: Scalar_Encapsed(
+        parts: array(
+            0: Expr_Variable(
+                name: Expr_Variable(
+                    name: A
+                )
+            )
+            1: [B]
+        )
+    )
+    16: Scalar_Encapsed(
+        parts: array(
+            0: $
+            1: Expr_ArrayDimFetch(
+                var: Expr_Variable(
+                    name: A
+                )
+                dim: Scalar_String(
+                    value: B
+                )
+            )
+        )
+    )
+    17: Scalar_Encapsed(
+        parts: array(
+            0: A
+            1: Expr_Variable(
+                name: B
+            )
+            2:  C
+        )
+    )
+    18: Scalar_Encapsed(
+        parts: array(
+            0: Expr_Variable(
+                name: A
+            )
+        )
+    )
+)
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/float.test b/vendor/nikic/php-parser/test/code/parser/scalar/float.test
new file mode 100644
index 0000000..c91b7ac
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/scalar/float.test
@@ -0,0 +1,70 @@
+Different float syntaxes
+-----
+ float overflows
+// (all are actually the same number, just in different representations)
+18446744073709551615;
+0xFFFFFFFFFFFFFFFF;
+01777777777777777777777;
+0177777777777777777777787;
+0b1111111111111111111111111111111111111111111111111111111111111111;
+-----
+array(
+    0: Scalar_DNumber(
+        value: 0
+    )
+    1: Scalar_DNumber(
+        value: 0
+    )
+    2: Scalar_DNumber(
+        value: 0
+    )
+    3: Scalar_DNumber(
+        value: 0
+    )
+    4: Scalar_DNumber(
+        value: 0
+    )
+    5: Scalar_DNumber(
+        value: 0
+    )
+    6: Scalar_DNumber(
+        value: 0
+    )
+    7: Scalar_DNumber(
+        value: 302000000000
+    )
+    8: Scalar_DNumber(
+        value: 3.002E+102
+    )
+    9: Scalar_DNumber(
+        value: INF
+    )
+    10: Scalar_DNumber(
+        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
+    )
+    11: Scalar_DNumber(
+        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
+    )
+    12: Scalar_DNumber(
+        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
+    )
+    13: Scalar_DNumber(
+        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
+    )
+    14: Scalar_DNumber(
+        value: @@{ 0xFFFFFFFFFFFFFFFF }@@
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/int.test b/vendor/nikic/php-parser/test/code/parser/scalar/int.test
new file mode 100644
index 0000000..17a5785
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/scalar/int.test
@@ -0,0 +1,47 @@
+Different integer syntaxes
+-----
+ 'baz']
+) {}
+-----
+array(
+    0: Stmt_Function(
+        byRef: false
+        name: a
+        params: array(
+            0: Param(
+                type: null
+                byRef: false
+                variadic: false
+                name: b
+                default: Expr_ConstFetch(
+                    name: Name(
+                        parts: array(
+                            0: null
+                        )
+                    )
+                )
+            )
+            1: Param(
+                type: null
+                byRef: false
+                variadic: false
+                name: c
+                default: Scalar_String(
+                    value: foo
+                )
+            )
+            2: Param(
+                type: null
+                byRef: false
+                variadic: false
+                name: d
+                default: Expr_ClassConstFetch(
+                    class: Name(
+                        parts: array(
+                            0: A
+                        )
+                    )
+                    name: B
+                )
+            )
+            3: Param(
+                type: null
+                byRef: false
+                variadic: false
+                name: f
+                default: Expr_UnaryPlus(
+                    expr: Scalar_LNumber(
+                        value: 1
+                    )
+                )
+            )
+            4: Param(
+                type: null
+                byRef: false
+                variadic: false
+                name: g
+                default: Expr_UnaryMinus(
+                    expr: Scalar_DNumber(
+                        value: 1
+                    )
+                )
+            )
+            5: Param(
+                type: null
+                byRef: false
+                variadic: false
+                name: h
+                default: Expr_Array(
+                    items: array(
+                    )
+                )
+            )
+            6: Param(
+                type: null
+                byRef: false
+                variadic: false
+                name: i
+                default: Expr_Array(
+                    items: array(
+                    )
+                )
+            )
+            7: Param(
+                type: null
+                byRef: false
+                variadic: false
+                name: j
+                default: Expr_Array(
+                    items: array(
+                        0: Expr_ArrayItem(
+                            key: null
+                            value: Scalar_String(
+                                value: foo
+                            )
+                            byRef: false
+                        )
+                    )
+                )
+            )
+            8: Param(
+                type: null
+                byRef: false
+                variadic: false
+                name: k
+                default: Expr_Array(
+                    items: array(
+                        0: Expr_ArrayItem(
+                            key: null
+                            value: Scalar_String(
+                                value: foo
+                            )
+                            byRef: false
+                        )
+                        1: Expr_ArrayItem(
+                            key: Scalar_String(
+                                value: bar
+                            )
+                            value: Scalar_String(
+                                value: baz
+                            )
+                            byRef: false
+                        )
+                    )
+                )
+            )
+        )
+        returnType: null
+        stmts: array(
+        )
+    )
+)
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/generator.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/generator.test
new file mode 100644
index 0000000..f18b4b7
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/stmt/function/generator.test
@@ -0,0 +1,262 @@
+Generators (yield expression)
+-----
+ $value;
+
+    // expressions
+    $data = yield;
+    $data = (yield $value);
+    $data = (yield $key => $value);
+
+    // yield in language constructs with their own parentheses
+    if (yield $foo); elseif (yield $foo);
+    if (yield $foo): elseif (yield $foo): endif;
+    while (yield $foo);
+    do {} while (yield $foo);
+    switch (yield $foo) {}
+    die(yield $foo);
+
+    // yield in function calls
+    func(yield $foo);
+    $foo->func(yield $foo);
+    new Foo(yield $foo);
+
+    yield from $foo;
+    yield from $foo and yield from $bar;
+    yield from $foo + $bar;
+}
+-----
+array(
+    0: Stmt_Function(
+        byRef: false
+        name: gen
+        params: array(
+        )
+        returnType: null
+        stmts: array(
+            0: Expr_Yield(
+                key: null
+                value: null
+            )
+            1: Expr_Yield(
+                key: null
+                value: Expr_Variable(
+                    name: value
+                )
+            )
+            2: Expr_Yield(
+                key: Expr_Variable(
+                    name: key
+                )
+                value: Expr_Variable(
+                    name: value
+                )
+            )
+            3: Expr_Assign(
+                var: Expr_Variable(
+                    name: data
+                )
+                expr: Expr_Yield(
+                    key: null
+                    value: null
+                )
+            )
+            4: Expr_Assign(
+                var: Expr_Variable(
+                    name: data
+                )
+                expr: Expr_Yield(
+                    key: null
+                    value: Expr_Variable(
+                        name: value
+                    )
+                )
+            )
+            5: Expr_Assign(
+                var: Expr_Variable(
+                    name: data
+                )
+                expr: Expr_Yield(
+                    key: Expr_Variable(
+                        name: key
+                    )
+                    value: Expr_Variable(
+                        name: value
+                    )
+                )
+            )
+            6: Stmt_If(
+                cond: Expr_Yield(
+                    key: null
+                    value: Expr_Variable(
+                        name: foo
+                    )
+                )
+                stmts: array(
+                )
+                elseifs: array(
+                    0: Stmt_ElseIf(
+                        cond: Expr_Yield(
+                            key: null
+                            value: Expr_Variable(
+                                name: foo
+                            )
+                        )
+                        stmts: array(
+                        )
+                    )
+                )
+                else: null
+            )
+            7: Stmt_If(
+                cond: Expr_Yield(
+                    key: null
+                    value: Expr_Variable(
+                        name: foo
+                    )
+                )
+                stmts: array(
+                )
+                elseifs: array(
+                    0: Stmt_ElseIf(
+                        cond: Expr_Yield(
+                            key: null
+                            value: Expr_Variable(
+                                name: foo
+                            )
+                        )
+                        stmts: array(
+                        )
+                    )
+                )
+                else: null
+            )
+            8: Stmt_While(
+                cond: Expr_Yield(
+                    key: null
+                    value: Expr_Variable(
+                        name: foo
+                    )
+                )
+                stmts: array(
+                )
+            )
+            9: Stmt_Do(
+                cond: Expr_Yield(
+                    key: null
+                    value: Expr_Variable(
+                        name: foo
+                    )
+                )
+                stmts: array(
+                )
+            )
+            10: Stmt_Switch(
+                cond: Expr_Yield(
+                    key: null
+                    value: Expr_Variable(
+                        name: foo
+                    )
+                )
+                cases: array(
+                )
+            )
+            11: Expr_Exit(
+                expr: Expr_Yield(
+                    key: null
+                    value: Expr_Variable(
+                        name: foo
+                    )
+                )
+            )
+            12: Expr_FuncCall(
+                name: Name(
+                    parts: array(
+                        0: func
+                    )
+                )
+                args: array(
+                    0: Arg(
+                        value: Expr_Yield(
+                            key: null
+                            value: Expr_Variable(
+                                name: foo
+                            )
+                        )
+                        byRef: false
+                        unpack: false
+                    )
+                )
+            )
+            13: Expr_MethodCall(
+                var: Expr_Variable(
+                    name: foo
+                )
+                name: func
+                args: array(
+                    0: Arg(
+                        value: Expr_Yield(
+                            key: null
+                            value: Expr_Variable(
+                                name: foo
+                            )
+                        )
+                        byRef: false
+                        unpack: false
+                    )
+                )
+            )
+            14: Expr_New(
+                class: Name(
+                    parts: array(
+                        0: Foo
+                    )
+                )
+                args: array(
+                    0: Arg(
+                        value: Expr_Yield(
+                            key: null
+                            value: Expr_Variable(
+                                name: foo
+                            )
+                        )
+                        byRef: false
+                        unpack: false
+                    )
+                )
+            )
+            15: Expr_YieldFrom(
+                expr: Expr_Variable(
+                    name: foo
+                )
+            )
+            16: Expr_BinaryOp_LogicalAnd(
+                left: Expr_YieldFrom(
+                    expr: Expr_Variable(
+                        name: foo
+                    )
+                )
+                right: Expr_YieldFrom(
+                    expr: Expr_Variable(
+                        name: bar
+                    )
+                )
+            )
+            17: Expr_YieldFrom(
+                expr: Expr_BinaryOp_Plus(
+                    left: Expr_Variable(
+                        name: foo
+                    )
+                    right: Expr_Variable(
+                        name: bar
+                    )
+                )
+            )
+        )
+    )
+)
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test
new file mode 100644
index 0000000..ca6c310
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test
@@ -0,0 +1,52 @@
+Return type declarations
+-----
+
+Hallo World!
+-----
+array(
+    0: Expr_Variable(
+        name: a
+    )
+    1: Stmt_HaltCompiler(
+        remaining: Hallo World!
+    )
+)
+-----
+
+#!/usr/bin/env php
+-----
+array(
+    0: Stmt_InlineHTML(
+        value: #!/usr/bin/env php
+
+    )
+    1: Stmt_Echo(
+        exprs: array(
+            0: Scalar_String(
+                value: foobar
+            )
+        )
+    )
+    2: Stmt_InlineHTML(
+        value: #!/usr/bin/env php
+    )
+)
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/if.test b/vendor/nikic/php-parser/test/code/parser/stmt/if.test
new file mode 100644
index 0000000..6ae1e16
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/stmt/if.test
@@ -0,0 +1,95 @@
+If/Elseif/Else
+-----
+
+B
+
+ $c) {}
+foreach ($a as $b => &$c) {}
+foreach ($a as list($a, $b)) {}
+foreach ($a as $a => list($b, , $c)) {}
+
+// foreach on expression
+foreach (array() as $b) {}
+
+// alternative syntax
+foreach ($a as $b):
+endforeach;
+-----
+array(
+    0: Stmt_Foreach(
+        expr: Expr_Variable(
+            name: a
+        )
+        keyVar: null
+        byRef: false
+        valueVar: Expr_Variable(
+            name: b
+        )
+        stmts: array(
+        )
+    )
+    1: Stmt_Foreach(
+        expr: Expr_Variable(
+            name: a
+        )
+        keyVar: null
+        byRef: true
+        valueVar: Expr_Variable(
+            name: b
+        )
+        stmts: array(
+        )
+    )
+    2: Stmt_Foreach(
+        expr: Expr_Variable(
+            name: a
+        )
+        keyVar: Expr_Variable(
+            name: b
+        )
+        byRef: false
+        valueVar: Expr_Variable(
+            name: c
+        )
+        stmts: array(
+        )
+    )
+    3: Stmt_Foreach(
+        expr: Expr_Variable(
+            name: a
+        )
+        keyVar: Expr_Variable(
+            name: b
+        )
+        byRef: true
+        valueVar: Expr_Variable(
+            name: c
+        )
+        stmts: array(
+        )
+    )
+    4: Stmt_Foreach(
+        expr: Expr_Variable(
+            name: a
+        )
+        keyVar: null
+        byRef: false
+        valueVar: Expr_List(
+            vars: array(
+                0: Expr_Variable(
+                    name: a
+                )
+                1: Expr_Variable(
+                    name: b
+                )
+            )
+        )
+        stmts: array(
+        )
+    )
+    5: Stmt_Foreach(
+        expr: Expr_Variable(
+            name: a
+        )
+        keyVar: Expr_Variable(
+            name: a
+        )
+        byRef: false
+        valueVar: Expr_List(
+            vars: array(
+                0: Expr_Variable(
+                    name: b
+                )
+                1: null
+                2: Expr_Variable(
+                    name: c
+                )
+            )
+        )
+        stmts: array(
+        )
+    )
+    6: Stmt_Foreach(
+        expr: Expr_Array(
+            items: array(
+            )
+        )
+        keyVar: null
+        byRef: false
+        valueVar: Expr_Variable(
+            name: b
+        )
+        stmts: array(
+        )
+    )
+    7: Stmt_Foreach(
+        expr: Expr_Variable(
+            name: a
+        )
+        keyVar: null
+        byRef: false
+        valueVar: Expr_Variable(
+            name: b
+        )
+        stmts: array(
+        )
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test
new file mode 100644
index 0000000..65f6b23
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test
@@ -0,0 +1,25 @@
+While loop
+-----
+
+Hi!
+-----
+array(
+    0: Stmt_Declare(
+        declares: array(
+            0: Stmt_DeclareDeclare(
+                key: A
+                value: Scalar_String(
+                    value: B
+                )
+            )
+        )
+        stmts: array(
+        )
+    )
+    1: Stmt_Namespace(
+        name: Name(
+            parts: array(
+                0: B
+            )
+        )
+        stmts: array(
+        )
+    )
+    2: Stmt_HaltCompiler(
+        remaining: Hi!
+    )
+)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test
new file mode 100644
index 0000000..52e8843
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test
@@ -0,0 +1,20 @@
+There (mostly) can't be statements outside of namespaces
+-----
+a = $a;
+    }
+};
+-----
+new class
+{
+};
+new class extends A implements B, C
+{
+};
+new class($a) extends A
+{
+    private $a;
+    public function __construct($a)
+    {
+        $this->a = $a;
+    }
+};
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/call.test b/vendor/nikic/php-parser/test/code/prettyPrinter/call.test
new file mode 100644
index 0000000..0ec8925
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/prettyPrinter/call.test
@@ -0,0 +1,13 @@
+Calls
+-----
+a = 'bar';
+        echo 'test';
+    }
+
+    protected function baz() {}
+    public function foo() {}
+    abstract static function bar() {}
+}
+-----
+class Foo
+{
+    var $a = 'foo';
+    private $b = 'bar';
+    static $c = 'baz';
+    function test()
+    {
+        $this->a = 'bar';
+        echo 'test';
+    }
+    protected function baz()
+    {
+    }
+    public function foo()
+    {
+    }
+    static abstract function bar()
+    {
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/closure.test b/vendor/nikic/php-parser/test/code/prettyPrinter/closure.test
new file mode 100644
index 0000000..7e4fcfd
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/prettyPrinter/closure.test
@@ -0,0 +1,18 @@
+Closures
+-----
+
+HTML
+-----
+
+HTML
+-----
+HTML
+
+HTML
+-----
+HTML
+
+HTML
+-----
+HTML
+
+HTML
+
+HTML
+-----
+HTML
+
+HTML
+
+HTML
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/list.test b/vendor/nikic/php-parser/test/code/prettyPrinter/list.test
new file mode 100644
index 0000000..608ced6
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/prettyPrinter/list.test
@@ -0,0 +1,19 @@
+list()
+-----
+> $b;
+$a < $b;
+$a <= $b;
+$a > $b;
+$a >= $b;
+$a == $b;
+$a != $b;
+$a <> $b;
+$a === $b;
+$a !== $b;
+$a <=> $b;
+$a & $b;
+$a ^ $b;
+$a | $b;
+$a && $b;
+$a || $b;
+$a ? $b : $c;
+$a ?: $c;
+$a ?? $c;
+
+$a = $b;
+$a **= $b;
+$a *= $b;
+$a /= $b;
+$a %= $b;
+$a += $b;
+$a -= $b;
+$a .= $b;
+$a <<= $b;
+$a >>= $b;
+$a &= $b;
+$a ^= $b;
+$a |= $b;
+$a =& $b;
+
+$a and $b;
+$a xor $b;
+$a or $b;
+
+$a instanceof Foo;
+$a instanceof $b;
+-----
+$a ** $b;
+++$a;
+--$a;
+$a++;
+$a--;
+@$a;
+~$a;
+-$a;
++$a;
+(int) $a;
+(int) $a;
+(double) $a;
+(double) $a;
+(double) $a;
+(string) $a;
+(string) $a;
+(array) $a;
+(object) $a;
+(bool) $a;
+(bool) $a;
+(unset) $a;
+$a * $b;
+$a / $b;
+$a % $b;
+$a + $b;
+$a - $b;
+$a . $b;
+$a << $b;
+$a >> $b;
+$a < $b;
+$a <= $b;
+$a > $b;
+$a >= $b;
+$a == $b;
+$a != $b;
+$a != $b;
+$a === $b;
+$a !== $b;
+$a <=> $b;
+$a & $b;
+$a ^ $b;
+$a | $b;
+$a && $b;
+$a || $b;
+$a ? $b : $c;
+$a ?: $c;
+$a ?? $c;
+$a = $b;
+$a **= $b;
+$a *= $b;
+$a /= $b;
+$a %= $b;
+$a += $b;
+$a -= $b;
+$a .= $b;
+$a <<= $b;
+$a >>= $b;
+$a &= $b;
+$a ^= $b;
+$a |= $b;
+$a =& $b;
+$a and $b;
+$a xor $b;
+$a or $b;
+$a instanceof Foo;
+$a instanceof $b;
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/parentheses.test b/vendor/nikic/php-parser/test/code/prettyPrinter/parentheses.test
new file mode 100644
index 0000000..1f18b65
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/prettyPrinter/parentheses.test
@@ -0,0 +1,77 @@
+Pretty printer generates least-parentheses output
+-----
+ 0) > (1 < 0);
+++$a + $b;
+$a + $b++;
+
+$a ** $b ** $c;
+($a ** $b) ** $c;
+-1 ** 2;
+
+yield from $a and yield from $b;
+yield from ($a and yield from $b);
+
+print ($a and print $b);
+
+// The following will currently add unnecessary parentheses, because the pretty printer is not aware that assignment
+// and incdec only work on variables.
+!$a = $b;
+++$a ** $b;
+$a ** $b++;
+-----
+echo 'abc' . 'cde' . 'fgh';
+echo 'abc' . ('cde' . 'fgh');
+echo 'abc' . 1 + 2 . 'fgh';
+echo 'abc' . (1 + 2) . 'fgh';
+echo 1 * 2 + 3 / 4 % 5 . 6;
+echo 1 * (2 + 3) / (4 % (5 . 6));
+$a = $b = $c = $d = $f && true;
+($a = $b = $c = $d = $f) && true;
+$a = $b = $c = $d = $f and true;
+$a = $b = $c = $d = ($f and true);
+$a ? $b : $c ? $d : $e ? $f : $g;
+$a ? $b : ($c ? $d : ($e ? $f : $g));
+$a ? $b ? $c : $d : $f;
+$a ?? $b ?? $c;
+($a ?? $b) ?? $c;
+$a ?? ($b ? $c : $d);
+$a || ($b ?? $c);
+(1 > 0) > (1 < 0);
+++$a + $b;
+$a + $b++;
+$a ** $b ** $c;
+($a ** $b) ** $c;
+-1 ** 2;
+yield from $a and yield from $b;
+yield from ($a and yield from $b);
+print ($a and print $b);
+// The following will currently add unnecessary parentheses, because the pretty printer is not aware that assignment
+// and incdec only work on variables.
+!($a = $b);
+(++$a) ** $b;
+$a ** ($b++);
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/switch.test b/vendor/nikic/php-parser/test/code/prettyPrinter/switch.test
new file mode 100644
index 0000000..0733a48
--- /dev/null
+++ b/vendor/nikic/php-parser/test/code/prettyPrinter/switch.test
@@ -0,0 +1,35 @@
+switch/case/default
+-----
+b;
+$a->b();
+$a->b($c);
+$a->$b();
+$a->{$b}();
+$a->$b[$c]();
+$$a->b;
+$a[$b];
+$a[$b]();
+$$a[$b];
+$a::B;
+$a::$b;
+$a::b();
+$a::b($c);
+$a::$b();
+$a::$b[$c];
+$a::$b[$c]($d);
+$a::{$b[$c]}($d);
+$a::{$b->c}();
+a();
+$a();
+$a()[$b];
+$a->b()[$c];
+$a::$b()[$c];
+(new A)->b;
+(new A())->b();
+(new $$a)[$b];
+(new $a->b)->c;
+
+global $a, $$a, $$a[$b], $$a->b;
+-----
+$a;
+${$a};
+${$a};
+$a->b;
+$a->b();
+$a->b($c);
+$a->{$b}();
+$a->{$b}();
+$a->{$b[$c]}();
+${$a}->b;
+$a[$b];
+$a[$b]();
+${$a[$b]};
+$a::B;
+$a::$b;
+$a::b();
+$a::b($c);
+$a::$b();
+$a::$b[$c];
+$a::$b[$c]($d);
+$a::$b[$c]($d);
+$a::{$b->c}();
+a();
+$a();
+$a()[$b];
+$a->b()[$c];
+$a::$b()[$c];
+(new A())->b;
+(new A())->b();
+(new ${$a}())[$b];
+(new $a->b())->c;
+global $a, ${$a}, ${$a[$b]}, ${$a->b};
diff --git a/vendor/nikic/php-parser/test_old/run.php b/vendor/nikic/php-parser/test_old/run.php
new file mode 100644
index 0000000..9a78141
--- /dev/null
+++ b/vendor/nikic/php-parser/test_old/run.php
@@ -0,0 +1,189 @@
+ 0) {
+    if (count($options) === 1 && $options[0] === '--no-progress') {
+        $SHOW_PROGRESS = false;
+    } else {
+        showHelp('Invalid option passed!');
+    }
+}
+
+$TEST_TYPE = $arguments[0];
+$DIR       = $arguments[1];
+
+if ('Symfony' === $TEST_TYPE) {
+    function filter_func($path) {
+        return preg_match('~\.php(?:\.cache)?$~', $path) && false === strpos($path, 'skeleton');
+    };
+} elseif ('PHP' === $TEST_TYPE) {
+    function filter_func($path) {
+        return preg_match('~\.phpt$~', $path);
+    };
+} else {
+    showHelp('Test type must be either "Symfony" or "PHP"!');
+}
+
+require_once dirname(__FILE__) . '/../lib/PhpParser/Autoloader.php';
+PhpParser\Autoloader::register();
+
+$parser        = new PhpParser\Parser(new PhpParser\Lexer\Emulative);
+$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
+$nodeDumper    = new PhpParser\NodeDumper;
+
+$parseFail = $ppFail = $compareFail = $count = 0;
+
+$readTime = $parseTime = $ppTime = $reparseTime = $compareTime = 0;
+$totalStartTime = microtime(true);
+
+foreach (new RecursiveIteratorIterator(
+             new RecursiveDirectoryIterator($DIR),
+             RecursiveIteratorIterator::LEAVES_ONLY)
+         as $file) {
+    if (!filter_func($file)) {
+        continue;
+    }
+
+    $startTime = microtime(true);
+    $code = file_get_contents($file);
+    $readTime += microtime(true) - $startTime;
+
+    if ('PHP' === $TEST_TYPE) {
+        if (preg_match('~(?:
+# skeleton files
+  ext.gmp.tests.001
+| ext.skeleton.tests.001
+# multibyte encoded files
+| ext.mbstring.tests.zend_multibyte-01
+| Zend.tests.multibyte.multibyte_encoding_001
+| Zend.tests.multibyte.multibyte_encoding_004
+| Zend.tests.multibyte.multibyte_encoding_005
+# token_get_all bug (https://bugs.php.net/bug.php?id=60097)
+| Zend.tests.bug47516
+# pretty print difference due to INF vs 1e1000
+| ext.standard.tests.general_functions.bug27678
+| tests.lang.bug24640
+)\.phpt$~x', $file)) {
+            continue;
+        }
+
+        if (!preg_match('~--FILE--\s*(.*?)--[A-Z]+--~s', $code, $matches)) {
+            continue;
+        }
+        if (preg_match('~--EXPECT(?:F|REGEX)?--\s*(?:Parse|Fatal) error~', $code)) {
+            continue;
+        }
+
+        $code = $matches[1];
+    }
+
+    set_time_limit(10);
+
+    ++$count;
+
+    if ($SHOW_PROGRESS) {
+        echo substr(str_pad('Testing file ' . $count . ': ' . substr($file, strlen($DIR)), 79), 0, 79), "\r";
+    }
+
+    try {
+        $startTime = microtime(true);
+        $stmts = $parser->parse($code);
+        $parseTime += microtime(true) - $startTime;
+
+        $startTime = microtime(true);
+        $code = 'prettyPrint($stmts);
+        $ppTime += microtime(true) - $startTime;
+
+        try {
+            $startTime = microtime(true);
+            $ppStmts = $parser->parse($code);
+            $reparseTime += microtime(true) - $startTime;
+
+            $startTime = microtime(true);
+            $same = $nodeDumper->dump($stmts) == $nodeDumper->dump($ppStmts);
+            $compareTime += microtime(true) - $startTime;
+
+            if (!$same) {
+                echo $file, ":\n    Result of initial parse and parse after pretty print differ\n";
+
+                ++$compareFail;
+            }
+        } catch (PhpParser\Error $e) {
+            echo $file, ":\n    Parse of pretty print failed with message: {$e->getMessage()}\n";
+
+            ++$ppFail;
+        }
+    } catch (PhpParser\Error $e) {
+        echo $file, ":\n    Parse failed with message: {$e->getMessage()}\n";
+
+        ++$parseFail;
+    }
+}
+
+if (0 === $parseFail && 0 === $ppFail && 0 === $compareFail) {
+    echo "\n\n", 'All tests passed.', "\n";
+} else {
+    echo "\n\n", '==========', "\n\n", 'There were: ', "\n";
+    if (0 !== $parseFail) {
+        echo '    ', $parseFail,   ' parse failures.',        "\n";
+    }
+    if (0 !== $ppFail) {
+        echo '    ', $ppFail,      ' pretty print failures.', "\n";
+    }
+    if (0 !== $compareFail) {
+        echo '    ', $compareFail, ' compare failures.',      "\n";
+    }
+}
+
+echo "\n",
+     'Tested files:         ', $count,        "\n",
+     "\n",
+     'Reading files took:   ', $readTime,    "\n",
+     'Parsing took:         ', $parseTime,   "\n",
+     'Pretty printing took: ', $ppTime,      "\n",
+     'Reparsing took:       ', $reparseTime, "\n",
+     'Comparing took:       ', $compareTime, "\n",
+     "\n",
+     'Total time:           ', microtime(true) - $totalStartTime, "\n",
+     'Maximum memory usage: ', memory_get_peak_usage(true), "\n";
\ No newline at end of file
diff --git a/vendor/pdepend/pdepend/CHANGELOG.md b/vendor/pdepend/pdepend/CHANGELOG.md
new file mode 100644
index 0000000..be81ecb
--- /dev/null
+++ b/vendor/pdepend/pdepend/CHANGELOG.md
@@ -0,0 +1,620 @@
+pdepend-2.5.2 (2017/12/13)
+=
+
+This release contains a single bugfix for missing command options.
+
+- Fix for GH355: Unknown option --jdepend-chart [\#356](https://github.com/pdepend/pdepend/pull/356) ([manuelpichler](https://github.com/manuelpichler))
+
+pdepend-2.5.1 (2017/12/06)
+==========================
+
+This release contains many bugfixes, enables Scrutinizer and adds code coverage integration. HHVM support was dropped. Full support for missing language features for PHP <= 7.1 were added.
+
+- Support for "yield from" in PHP 7.0 [\#350](https://github.com/pdepend/pdepend/pull/350) ([emirb](https://github.com/emirb))
+- Support for constant visibility in interfaces in PHP 7.1 [\#349](https://github.com/pdepend/pdepend/pull/349) ([KacerCZ](https://github.com/KacerCZ))
+- Support catch of multiple exception types in PHP 7.1 [\#348](https://github.com/pdepend/pdepend/pull/348) ([KacerCZ](https://github.com/KacerCZ))
+- Added support for PHP 7.1 types - iterable and void [\#342](https://github.com/pdepend/pdepend/pull/342) ([KacerCZ](https://github.com/KacerCZ))
+- Add Symfony 4 support [\#340](https://github.com/pdepend/pdepend/pull/340) ([surikman](https://github.com/surikman))
+- Fix Scrutinizer config [\#336](https://github.com/pdepend/pdepend/pull/336) ([emirb](https://github.com/emirb))
+- Fixed PHPUnit warnings [\#333](https://github.com/pdepend/pdepend/pull/333) ([KacerCZ](https://github.com/KacerCZ))
+- Codecov explicit coverage file [\#332](https://github.com/pdepend/pdepend/pull/332) ([emirb](https://github.com/emirb))
+- Add codecov.io integration [\#331](https://github.com/pdepend/pdepend/pull/331) ([emirb](https://github.com/emirb))
+- Use uniqid\(\) in AbstractASTArtifact::getId\(\) instead of microtime\(\) [\#330](https://github.com/pdepend/pdepend/pull/330) ([KacerCZ](https://github.com/KacerCZ))
+- Fix Iterator so it will not return directories [\#329](https://github.com/pdepend/pdepend/pull/329) ([KacerCZ](https://github.com/KacerCZ))
+- Fix tests on Windows [\#328](https://github.com/pdepend/pdepend/pull/328) ([KacerCZ](https://github.com/KacerCZ))
+- PHP 7.2 fixes [\#326](https://github.com/pdepend/pdepend/pull/326) ([emirb](https://github.com/emirb))
+- Capitalize XML word [\#325](https://github.com/pdepend/pdepend/pull/325) ([bocharsky-bw](https://github.com/bocharsky-bw))
+- Fix typo [\#321](https://github.com/pdepend/pdepend/pull/321) ([ravage84](https://github.com/ravage84))
+- Fixes \#193 regression [\#319](https://github.com/pdepend/pdepend/pull/319) ([mdeboer](https://github.com/mdeboer))
+- Remove running of PHP 5.3 build since dropped by Travis. [\#316](https://github.com/pdepend/pdepend/pull/316) ([niconoe-](https://github.com/niconoe-))
+- Fix issue \#297 adding support for constant visibility into the parser for PHP 7.1 [\#314](https://github.com/pdepend/pdepend/pull/314) ([mmucklo](https://github.com/mmucklo))
+- Remove references to HHVM [\#309](https://github.com/pdepend/pdepend/pull/309) ([ravage84](https://github.com/ravage84))
+- fix count\(\): Parameter must be an array or an object that implements ... [\#303](https://github.com/pdepend/pdepend/pull/303) ([remicollet](https://github.com/remicollet))
+- "a xml" -\> "an xml" [\#300](https://github.com/pdepend/pdepend/pull/300) ([bocharsky-bw](https://github.com/bocharsky-bw))
+
+pdepend-2.5.0 (2017/01/19)
+==========================
+
+This release closes a parsing bug in PDepend 2.4.1, starts with the 
+implementation of PHP 7.1 support and adds a new attribute for the 
+fully-qualified-classname to the summary report.
+
+- Fixed #282: Issue with grouped use statements when only a single 
+  level namespace prefix was used. Fixed in commit #3e523f5.
+- Implemented #294: Add support for PHP 7.1 optionals. Implemented in 
+  commit #c5c53eb.
+- Implemented #88: Fully qualified classname in summary report. 
+  Implemented in commit #13e9cbc.
+
+pdepend-2.4.1 (2017/01/11)
+==========================
+
+This release closes a bug within PDepend's parser when keywords are 
+used as method or constant names in PHP 7.0
+
+- Fixes an issue with methods or constants with keyword identifiers 
+  called/accessed in PHP 7. Fixed in commit #8f07ac7.
+
+pdepend-2.4.0 (2017/01/10)
+==========================
+
+This release implements language features like Anonymous Classes, 
+Group use Declarations, Uniform Variable Syntax or Loosening Reserved 
+Word Restrictions that were introduced with PHP 7.0, so that PDepend 
+2.4 is now PHP 7.0 compatible.
+
+- Fixed #281: PHP 7 - Anonymous Class - Internal parser state issues 
+  Fixed in commit #00a61c6.
+- Fixed #285: Parse the magic constant __TRAIT__ Fixed in commit 
+  #b76e2b0.
+- Fixed #210: Partial Class Namespace is Calculated Twice: in Global 
+  and it's Own Namespace Fixed in commit #e81411f.
+- Implemented #280: Refactor SymbolTable Implemented in commit 
+  #1265259.
+- Implemented #282: PHP 7 - Group use declarations Implemented in 
+  commit #fd4aaca.
+- Implemented #269: Unexpected token: :: (implicit object / method 
+  usage) Implemented in commit #e611915.
+- Implemented #204: Support for the ... operator in function calls 
+  Implemented in commit #078e532.
+- Implemented #290: Unexpected token: ARRAY (reserved keyword as a 
+  class constant) Implemented in commit #d4bf7bb.
+
+pdepend-2.3.2 (2016/11/23)
+==========================
+
+Bugfix release that closes a caching issue that was introduced in 
+2.3.1.
+
+- Fixed #276: Uncaught Error: Call to a member function type() on null 
+  in Fixed in commit #48d8081.
+- Allow list as method name under PHP 7 Fixed in commit #4968ed4.
+- Fixed #277: serialize(): "comment" is returned from __sleep multiple 
+  times in store in FileCacheDriver.php Fixed in commit #31cf053.
+
+pdepend-2.3.1 (2016/11/23)
+==========================
+
+
+
+- Fixed #250: Updating ASTAnonymousClass to implement ASTNode, 
+  retaining class behavior. Fixed in commit #2111906.
+
+pdepend-2.3.0 (2016/11/22)
+==========================
+
+This release closes multiple bugs/issue and has merged several 
+outstanding pull requests. Beside that it is now possible to pipe 
+source through STDIN into pdepend.
+
+- Fixed #263: Fix NPath calculations for the ternary operator. Fixed 
+  in commit #df0e9c5.
+- Fixed #260: Fix typos Fixed in commit #20b36c1.
+- Fixed #259: DOMDocument file handling. Fixed in commit #fa2afc6.
+- Fixed #247: Fix handling of use declarations with const and function 
+  keywords. Fixed in commit #dc9128b.
+- Fixed #240: Fix some typos from the website. Fixed in commit 
+  #332672a.
+- Fixed #249: Unexpected token: callable Fixed in commit #.
+- Support for PHP's ** pow expression implemented. Implemented in 
+  commit #bce6145.
+- Implemented #262: Support stdin implemented. Implemented in commit 
+  #3ef2328.
+- Implemented #231: Apply the filter on files as well. Implemented in 
+  commit #62d1406.
+
+pdepend-2.2.6 (2016/10/04)
+==========================
+
+Bugfix release.
+
+- Fixed #267: Fix UnexpectedTokenException on null coalesce operator 
+  Fixed in commit #8e80aaa.
+
+pdepend-2.2.4 (2016/03/10)
+==========================
+
+This releases closes a bug in PDepend's parsing code for PHP 7 return 
+types, that caused a invalid state in the internal AST representation. 
+This bug was issued in PHPMD's issue tracker first by user radmen.
+
+- Cannot create new nodes, when internal state is frozen. #328 Fixed 
+  in commit #ffe9957.
+
+pdepend-2.2.3 (2016/02/22)
+==========================
+
+This release includes several pending pull requests from GitHub. 
+Beside that this release adds support for complex expressions in 
+property, constant and parameter declarations, introduced with PHP 
+5.6.
+
+- Fixed #226: Fixed division by zero issue. Fixed in commit #fb46614.
+- Fixed #227: Fix support to files filters. Fixed in commit #4e150db.
+- Fixed #230: Fix handling cygwin home folder location. Fixed in 
+  commit #126c38a.
+- Implemented #221: Add --quiet option. Implemented in commit 
+  #9a710f7.
+- Implemented #236: Switch to PSR-4 for autoloading Implemented in 
+  commit #57b54bd.
+- Implemented #238: Unexpected token errors for 5.6 "constant 
+  expression" initializers. Implemented in commit #0087c94.
+
+pdepend-2.2.2 (2015/10/16)
+==========================
+
+This release adds a new analyzer that can be used to visualize 
+namespace dependencies.
+
+- Implemented #221: Added line numbers to summary log. Implemented in 
+  commit #a975553.
+- Implemented #222: Calculate type dependencies. Implemented in commit 
+  #8a924f6.
+
+pdepend-2.2.1 (2015/09/24)
+==========================
+
+With this release we made a dependency downgrade, so that we can 
+support more environments.
+
+- Implemented #223: Minimum Symfony version downgraded to 2.3. 
+  Implemented in commit #8601cc3.
+
+pdepend-2.2.0 (2015/09/19)
+==========================
+
+This release contains beside several contributed additions and 
+bugfixes better support for PHP 7 language constructs.
+
+- Fixed #119: PDepend doesn't follow any symlinks to directories. 
+  Fixed in commit #b80ae7e.
+- Fixed #143: Truncated summary when analyzing ISO-8859-1 input. Fixed 
+  in commit #d979462.
+- Fixed #193: Cache conflict when executing pdepend in parallel. Fixed 
+  in commit #a4e20ff.
+- Fixed #197: Warning: DOMNode::cloneNode(): ID  already defined 
+  in phar. Fixed in commit #2221f74.
+- Fixed #201: ShellCheck warnings in scripts/compare.sh Fixed in 
+  commit #.
+- Fixed #209: PHP 5.6 constant syntax not supported. Fixed in commit 
+  #1209b0e.
+- Fixed #213: PHP 7: T_CHARACTER and T_BAD_CHARACTER are no longer 
+  defined. Fixed in commit #1f5b051.
+- Fixed #214: PHP 7: Return types not supported. Fixed in commit 
+  #249932b.
+
+pdepend-2.1.0 (2015/05/21)
+==========================
+
+This release introduces an analyzer for the Halstead metrics and the 
+maintainability index, contributed by Matthias Mullie. Beside that we 
+have closed several issues and bugs in PDepend's source code.
+
+- Fixed #196: Fix Typo in phpDoc Fixed in commit #2b51fed.
+- Fixed #200: Fix annotation-typo in AbstractPHPParser.php Fixed in 
+  commit #776529d.
+- Fixed #202: Support for variable arg list implemented Fixed in 
+  commit #dff2547.
+- Implemented #177: HHVM support Implemented in commit #48ee5d9.
+- Implemented #185: Remove unused imports and order alphabetically 
+  Implemented in commit #46d5fb.
+- Implemented #198: Add analyzers for Halstead measures & 
+  maintainability index Implemented in commit #3497862.
+
+pdepend-2.0.6 (2015/03/02)
+==========================
+
+Concurrency issue in the file cache garbage collector fixed.
+
+- Suppress exceptions when there are concurrency issues within the 
+  garbage collector. Fixed in commit #3e31cc7.
+
+pdepend-2.0.5 (2015/02/27)
+==========================
+
+This release just adds a simple garbage collector for PDepend's file 
+cache
+
+- Garbage collector for old cache files added. Implemented in commit 
+  #56712b1.
+
+pdepend-2.0.4 (2014/12/04)
+==========================
+
+This release closes some minor issues and incorporates several 
+outstanding pull requests.
+
+- Fixed #187: Unexpected token :?> with broken up switch statement 
+  Fixed in commit #c12ee0e.
+- Fixed #180: Unexpected token: <<, line: 5, col: 27 Fixed in commit 
+  #4df5b9d.
+- Fixed #179: Fixed display of duration longer than one hour Fixed in 
+  commit #1288292.
+- Fixed #176: Typo on website fixed. Fixed in commit #6a8e542.
+- Fixed #175: Inconsistent indention in phpunit.dist.xml file fixed. 
+  Fixed in commit #bc758e4.
+- Fixed #174: Fix conflicting import: "Extension" is already in use in 
+  the "PDepend\DependencyInjection" namespace. Fixed in commit 
+  #e3e672b.
+- Fixed #173: Fixing parsing True/False keywords in namespaces: Usage 
+  of true and false keywords are allowed in namespace declarations in 
+  PHP. Fixed in commit #d96e4e7.
+- Fixed #170: invalid xml-report after parsing traits Fixed in commit 
+  #1d1bec0.
+- Fixed #167: Fix Invalid argument supplied for foreach() in 
+  FileCacheDriver.php Fixed in commit #73d32f3.
+- Fixed #165: Fix FileUtil::getUserHomeDir on Mac Fixed in commit 
+  #4826c3f.
+- Fixed #164: Empty yields raise Fatal error: When using empty yields 
+  yield; the parser raises an fatal error. Fixed in commit #7ab0736.
+- Fixed #163: File cache concurrency fix: Fixes concurrent run of 
+  pdepend and phpmd. Fixed in commit #3955c07.
+- Fixed #154: Invalid trait conflict errors: t is completely valid to 
+  mix traits in PHP that have the same methods declared, as long as 
+  only one of them is concrete (all the others must be abstract). 
+  Fixed in commit #45ab1d3.
+- Fixed #128: Problem when I use parent:: in trait Fixed in commit 
+  #a73e6de.
+- Implemented #177: HHVM support Implemented in commit #17da34b.
+
+pdepend-2.0.3 (2014/10/08)
+==========================
+
+This is a bugfix release which closes some minor issues.
+
+- Fixed #129: Windows+Composer install fails due to "path too long" 
+  Fixed in commit #64f95c1.
+- Fixed #172: Outdated news on the website
+- Fixed #166: Added support for foreach with list statement (PHP 5.5) 
+  Fixed in commit #a744af1.
+- Fixed #171: The list usage in foreach loops reports an invalid token 
+  Fixed in commit #a744af1.
+
+pdepend-2.0.2 (2014/09/16)
+==========================
+
+
+
+- Fixed #160: include_once PDepend/Util/Coverage/CloverReport.php: 
+  failed to open stream Fixed in commit #4dca605.
+- Implemented #105: Support Java style array notations in doc comments 
+  Implemented in commit #2ec5166.
+
+pdepend-2.0.1 (2014/09/09)
+==========================
+
+Bug fix release which closes a issue within PDepend's C.R.A.P. index 
+calculation.
+
+- Handle code surrounded by @codeCoverageIgnore annotations correct. 
+  Fixed in commit #3e67aa2.
+
+pdepend-2.0.0 (2014/05/21)
+==========================
+
+New mayor release of PDepend.
+
+- Fixed #126: Allow closure as array element Fixed in commit #b9775ac.
+- Fixed #153: Support for new finally keyword implemented. Fixed in 
+  commit #e536e7a.
+- Fixed #144: pdepend --version gives me a wrong message.. Fixed in 
+  commit #f6acea9.
+- Implemented #113: Specify license, BSD license was missing in 
+  composer.json file. Implemented in commit #3ba9c9e.
+- Implemented #117: Adds composer autoload info Implemented in commit 
+  #e624f8e.
+
+pdepend-1.1.1 (2013/07/25)
+==========================
+
+Closes several PHP 5.4 issues.
+
+- Fixed #116: Adding a fix for PHP 5.4 style arrays. Fixed in commit 
+  #cbfddaa.
+- Fixed #95: PHP 5.4 array syntax is not supported in property 
+  initialization. Fixed in commit #f6ee217.
+- Fixed #97: protected property PHP_Depend_Code_Method::$parent Fixed 
+  in commit #87a1b5e.
+- Fixed #104: Syntax errors reported when PHP 5.4 short array syntax 
+  is used in method signatures or class variable definitions. Fixed in 
+  commit #d731fa6.
+- Fixed #103: Fix syntax error in composer.json example Fixed in 
+  commit #e897a66.
+- Implemented #101: Package name for chart svg Implemented in commit 
+  #479aaa5.
+
+pdepend-1.1.0 (2012/09/12)
+==========================
+
+This release closes a critical issue in the context of traits 
+handling.
+
+- Changed type of Node/Trait Fixed in commit #806eaab.
+- Changed to PSR1 coding standard. Implemented in commit #.
+
+pdepend-1.0.7 (2012/04/29)
+==========================
+
+This release closes a minor bug within the parsing code for doc 
+comments..
+
+- Fixed: DocComment is sometimes incorrectly set for functions Fixed 
+  in commit #ac71753.
+
+pdepend-1.0.6 (2012/04/22)
+==========================
+
+This release closes a bug with traits that were introduced with PHP 
+5.4. This bug results in an E_FATAL when PHP_Depend performs coupling 
+analysis on a trait.
+
+- Fixed: E_FATAL when the coupling analyzer processes a trait. Fixed 
+  in commit #ac71753.
+- Added: Composer support Implemented in commit #3d98f02.
+
+pdepend-1.0.5 (2012/04/05)
+==========================
+
+This release closes a bug introduced with the last release, which 
+causes PHP_Depend not to flush it's metric cache when a file has 
+changed.
+
+- Fixed #27588643: PHP_Depend doesn't invalidate the cache. Fixed in 
+  commit #99d5c13.
+
+pdepend-1.0.4 (2012/02/25)
+==========================
+
+This release closes an issue introduced with the last release. It 
+closes one more regression related to PHP's memory_limit and the 
+Suhosin patch.
+
+- Fixed fatal error due to bug in memory_limit modification code. 
+  Fixed in commit #b869eff.
+
+pdepend-1.0.3 (2012/02/25)
+==========================
+
+This release closes a minor issue in PHP_Depend's memory handling when 
+it is run in a PHP environment that uses the Suhosin patch and the 
+suhosin.memory_limit setting.
+
+- Fixed #25450915: Alert disable memory_limit Fixed in commit 
+  #0628e7d.
+
+pdepend-1.0.2 (2012/02/15)
+==========================
+
+This release contains a huge improvement in PHP_Depend's memory usage. 
+Due to some changes in the caching behavior we got a memory reduction 
+of ~ 90%, measured against medium sized code bases like Symfony2 or 
+FLOW3.
+
+- Fixed #24732243: pdepend fails on 'const' Fixed in commit #4d6a687.
+- Fixed #24975343: PHP_Depend doesn't handle nested list expressions. 
+  Fixed in commit #d124ef0.
+- Implemented #24702477: Huge memory footprint Implemented in commit 
+  #75c9755.
+
+pdepend-1.0.1 (2012/02/08)
+==========================
+
+This release fixes two bugs in PHP_Depend's parser, which resulted in 
+uncatchable errors.
+
+- Fixed #24635313: _parseOptionalExpression() returning null causes 
+  exception Fixed in commit #97189b0.
+- Fixed #24638569: pdepend crashes on vanilia drupal site Fixed in 
+  commit #f20f40a.
+
+pdepend-1.0.0 (2012/02/04)
+==========================
+
+Now that we have completed support for all the new language features 
+introduced with PHP 5.4, we are ready to release version 1.0.0 of 
+PHP_Depend. PHP_Depend can now handle traits, static closures, binary 
+numbers, the callable type hint and the new short array syntax. Beside 
+that, we have spent much effort in improving PHP_Depend's overall 
+performance and we got an average speed gain of ~ 15% for processing 
+major frameworks like Symfony2 or FLOW3, when PHP_Depend's file cache 
+(default setup) is used. Additionally this release closes several 
+minor issues in PHP_Depend.
+
+- Fixed #18976391: PHP_Depend's file cache implementation does not 
+  work with PHP 5.4. Fixed in commit #06ce51a.
+- Fixed #18459091: PDepend task never ends, if there is an incorrect 
+  inheritance Fixed in commit #13b5d12.
+- Fixed #19875155: Implement static closures Fixed in commit #1e24a34.
+- Implemented #8927307: Add support for traits Implemented in commit 
+  #84f612e.
+- Implemented #19874825: Implement the short array syntax introduced 
+  with PHP 5.4 Implemented in commit #338bca2.
+- Implemented #9069837: Implement expression lists. Implemented in 
+  commit #bbb06c7.
+- Implemented #21435399: Implement PHP 5.4 variable method names 
+  Implemented in commit #911b6ec.
+- Implemented #21408469: Implement PHP 5.4 binary number format 
+  Implemented in commit #e3bccf1.
+- Implemented #21339411: Implement PHP 5.4 callable type hint 
+  Implemented in commit #ee5caa6.
+- Implemented #21271399: Deprecate the --phpunit-xml log option 
+  Implemented in commit #658c25c.
+- Implemented #19817309: Implement PHP 5.4 array dereferencing 
+  Implemented in commit #6dba831.
+
+pdepend-0.10.9 (2012/01/25)
+===========================
+
+This release fixes a small issue in PHP_Depend's parser, which results 
+in an exception when heredoc was used as property or constant 
+initializer.
+
+- Fixed #23951621: PHP_Depend fails on Heredocs and Nowdocs in 
+  property declaration. Fixed in commit #373c478.
+
+pdepend-0.10.8 (2012/01/24)
+===========================
+
+This release closes an issue in PHP_Depend's parser that produces 
+invalid package names when the source file contains a statement before 
+the class or interface doc comment.
+
+- Fixed #23905939: Package gets lost when prefixed with control 
+  structure Fixed in commit #b62bed7.
+
+pdepend-0.10.7 (2011/12/06)
+===========================
+
+This release closes a critical bug in PHP_Depend's parser which 
+results in an E_FATAL. This can happen when a control structure does 
+not contain a body or termination token.
+
+- E_FATAL when a control structure like if, for or foreach does not 
+  contain a body or a termination symbol. Fixed in commit #b367a41.
+
+pdepend-0.10.6 (2011/08/21)
+===========================
+
+This release closes a critical bug in PHP_Depend's parser that 
+produced false positiv error messages for classes named like 'True', 
+'False' or 'Null'
+
+- Fixed #17264279: Unexpected token: True, line: 348, col: 49, 
+  file:... Fixed in commit #5ac3e55.
+
+pdepend-0.10.5 (2011/05/20)
+===========================
+
+This release closes two minor bugs in PHP_Depend. One incompatibility 
+with PHP 5.2.x versions and one bug related to PHP_Depend's log 
+behavior when PHP_Depend analyzes unstructured source code. This 
+release was published on May the 20th 2011.
+
+- Fixed #13255437: PHP 5.2 Compatibility Issues. Fixed in commit 
+  #8d4a095.
+- Fixed #13405179: PHP Depend report is not generated if all files do 
+  not contain a class nor a function. Fixed in commit #554ade1.
+
+pdepend-0.10.4 (2011/04/09)
+===========================
+
+This release contains an improvement in PHP_Depend's memory 
+consumption. We have optimized the internal data structures in such a 
+way that the memory footprint was reduced by ~30%. These values were 
+measured for currently popular frameworks with a medium to large sized 
+code base. The tests were run under ubuntu with PHP 5.2.17 and PHP 
+5.3.6.
+
+pdepend-0.10.3 (2011/03/02)
+===========================
+
+This release closes a critial bug in PHP_Depend's analyzer locator 
+code that prevents PHP_Depend from running on windows. This release 
+was published on March the 02th 2011.
+
+- Fixed #10659085: Analyzer locator code does not work on windows. 
+  Fixed in commit #0101798.
+
+pdepend-0.10.2 (2011/02/28)
+===========================
+
+This release of PHP_Depend closes two bugs. One related to the start 
+and end line properties of object property nodes in the syntax tree. 
+The second fix closes a bug in PHP_Depend's implementation of the WMCi 
+metric. Beside these two fixes this release implements three minor 
+features, one design issue in the syntax tree api and the other two 
+other features are related to the new metrics CE, CA, CBO and NPM. 
+Additionally we have restructured PHP_Depend's directory structure 
+from a custom, freestyle format to a directory layout that is similar 
+to maven's convention. With this change we have fixed several issues 
+and workarounds in PHP_Depend's build process.
+
+- Fixed #9936901: WMCi calculation is incorrect for overwritten 
+  methods. Fixed in commit #69d079a.
+- Fixed #8927377: Invalid Start/End Line/Column for object property 
+  access. Fixed in commit #fc57264.
+- Implemented #9069393: Replace optional NULL argument of setPackage() 
+  with separate method. Implemented in commit #1282cdb.
+- Implemented #9069871: Implement efferent- and afferent-coupling for 
+  classes. Implemented in commit #07537c2.
+- Implemented #9997915: Implement Number of Public Methods metric. 
+  Implemented in commit #2dd3ebf.
+
+pdepend-0.10.1 (2011/02/06)
+===========================
+
+- Fixed #9634613: Notice: Undefined property $___temp___. Fixed in 
+  commit #5fb6900.
+
+pdepend-0.10.0 (2011/02/05)
+===========================
+
+This version only contains a small bugfix compared to the last release 
+canditate. Version 0.10.0 of PHP_Depend was released on February the 
+05th 2011. The key feature for this release is the overall performance 
+of PHP_Depend. Therefore we have implemented a new caching layer that 
+reuses already calculated analyzes-results much more efficient than 
+older versions of PHP_Depend. With these modifications we have 
+achieved a performance gain of 100% and more for consecutive 
+analysis-runs. This final release only fixes a small bug in 
+PHP_Depend's analyzer class locator that has caused some issues when 
+PHP_Depend was executed as an external dependency that uses a \*.phar 
+archive as distribution format.
+
+- Fixed #9623949: Also find analyzers in phar archives in the current 
+  include_path. Fixed in commit #f53dca9.
+- Fixed #113: PHP fatal error when an unserialized object graph none 
+  NodeI instances. Fixed in commit #c0f4384.
+- Fixed #164: Faulty implementation of the --ignore path filter fixed. 
+  Now this filter only works on the local part of a file or directory 
+  name and not on the complete path. Fixed in commit #f75275e.
+- Fixed #176: Calculation of CIS metric is incorrect. Fixed in commit 
+  #1193f4a.
+- Fixed #182: Clone is a valid function, method and type name in older 
+  php versions. Fixed with git commit Fixed in commit #b18bf37.
+- Fixed #189: Invalid Start/End Line/Column for object method 
+  invocation. Fixed in commit #c6cc9dd.
+- Fixed #191: New implementation of --ignore only accepts relative 
+  paths. Fixed in commit #38e6b52.
+- Fixed #163: Alternative syntax end tokens can terminate with closing 
+  PHP-tag.
+- Fixed #181: No log generated when parsing Typo3 extension 
+  "t3extplorer" (Unexpected token ASCII 39). Indirectly fixed in this 
+  release.
+- Implemented #130: Simplify PHP_Depend's ASTCompoundVariable and skip 
+  nested ASTCompoundExpression node instance.
+- Implemented #131: Add new method isThis() to PHP_Depend's 
+  ASTVariable class.
+- Implemented #132: Housekeeping: Cleanup the PHP_Depend_Input package 
+  test code.
+- Implemented #139: Implement Post-/Pre- Increment/Decrement.
+- Implemented #143: Support PHP's alternative control structure 
+  syntax.
+- Implemented #146: Implement PHP's declare-statement.
+- Implemented #148: Implement cast expressions.
+- Implemented #170: Rename FunctionNameParserImpl into 
+  FunctionNameParserAllVersions. Task scope changed and complete 
+  refactoring done. Parser moved into a version specific parser class.
+- Implemented #178: Provide configuration option for the cache 
+  directory. Implemented in commit #00ed8ec.
+
diff --git a/vendor/pdepend/pdepend/LICENSE b/vendor/pdepend/pdepend/LICENSE
new file mode 100644
index 0000000..73a9442
--- /dev/null
+++ b/vendor/pdepend/pdepend/LICENSE
@@ -0,0 +1,31 @@
+Copyright (c) 2008-2013, Manuel Pichler .
+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 Manuel Pichler nor the names of his
+    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 OWNER 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.
diff --git a/vendor/pdepend/pdepend/README.md b/vendor/pdepend/pdepend/README.md
new file mode 100644
index 0000000..51fa0cf
--- /dev/null
+++ b/vendor/pdepend/pdepend/README.md
@@ -0,0 +1,6 @@
+PHP Depend
+=======
+[![Build Status](https://travis-ci.org/pdepend/pdepend.svg?branch=master)](https://travis-ci.org/pdepend/pdepend)
+[![Packagist](https://img.shields.io/packagist/dt/pdepend/pdepend.svg)](https://github.com/pdepend/pdepend)
+[![codecov.io](https://codecov.io/gh/pdepend/pdepend/branch/master/graphs/badge.svg?branch=master)](https://codecov.io/github/pdepend/pdepend?branch=master)
+[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/pdepend/pdepend/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/pdepend/pdepend/?branch=master)
diff --git a/vendor/pdepend/pdepend/Vagrantfile b/vendor/pdepend/pdepend/Vagrantfile
new file mode 100644
index 0000000..486061e
--- /dev/null
+++ b/vendor/pdepend/pdepend/Vagrantfile
@@ -0,0 +1,58 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+$build_script = <
+        
+        
+        
+    
+
+
diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/chrome/header.xsl b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/chrome/header.xsl
new file mode 100644
index 0000000..cac615a
--- /dev/null
+++ b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/chrome/header.xsl
@@ -0,0 +1,16 @@
+
+
+    
+
+    
+        

+ + + + + + +

+
+ +
\ No newline at end of file diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/chrome/menu.xsl b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/chrome/menu.xsl new file mode 100644 index 0000000..9eb9a9d --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/chrome/menu.xsl @@ -0,0 +1,14 @@ + + + + + + + +
    + + +
+
+ +
\ No newline at end of file diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/content.xsl b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/content.xsl new file mode 100644 index 0000000..dd39a44 --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/content.xsl @@ -0,0 +1,14 @@ + + + + + + + +
+

Welcome!

+ This documentation was generated by phpDocumentor . +
+
+ +
diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/css/abstract.css b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/css/abstract.css new file mode 100644 index 0000000..a03b789 --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/css/abstract.css @@ -0,0 +1,202 @@ +@import url('sen.full.min.css'); + +html, body, #page { + height: 99.9%; + width: 100%; +} + +#frameset { + overflow:hidden; +} + +body { + /*font: 80% / 1.5em Arial, Helvetica, "DejaVu Sans", "Liberation sans", "Bitstream Vera Sans", sans-serif*/ +} + +#sidebar { + width: 200px; +} + +h2 { + margin-top: 25px; +} + +h3 { + margin: 0 0 0 0.2em; +} + +#sidebar ul { + list-style: none; + padding: 0px; + margin: 0 0 1.5em 0em; +} + +#sidebar ul ul { + margin: 0 0 0 0.6em; +} + +#sidebar, #contents { + height:100%; +} + +#sidebar iframe, #contents iframe { + height: 100%; + width: 100%; + border: none; +} + +div.success_notification { + margin: 5px; + padding: 5px; + padding-left: 35px; + background: #f9f9f9 url('../images/icons/ok.png') no-repeat 5px center; + border: 1px solid silver; +} + +#marker-accordion h3 small { + float: right; + padding: 2px 5px; + margin-right: 20px; +} + +span.attribute { + padding: 2px 6px; + background: #F0F0F0; + display: inline-block; + border-radius: 3px; + margin: 0px 4px; + font-weight: bold; + color: gray; + border: 1px solid silver; + font-size: 0.9em; +} + +.description small.inherited_from { + display: none; +} + +.to-top { + float: right; + margin-right: 20px; + font-size: 0.6em; +} + +#marker-accordion h3 { + margin-top: 20px; +} + +#marker-accordion h3 a { + text-decoration: none; + cursor: text; +} + +#marker-accordion h3 small { + float: right; + cursor: text; + background: #F0F0F0; + border: 1px solid silver; + font-weight: normal; + border-radius: 3px; +} + +.code-tabs code { + display: block; + padding: 10px; +} + +#file-nav-tab { + display: none; +} + +#file-nav-options { + text-align: right; +} + +#file-nav-box { + position: fixed; + top: 10px; + right: 10px; +} + +#file-nav-container { + overflow: auto; + max-height: 400px; + background: #f5f5f5; + padding: 5px; + border: 1px solid silver; + border-radius: 3px; +} + +ul#file-nav { + margin: 0px; + list-style: none; +} + +ul#file-nav ul { + list-style: none; +} + +.gripper { + display: none; +} + +div.property, div.method, div.function, div.constant { + border: 1px solid silver; + margin-top: 10px; + padding: 5px; +} + +div.class { + border-left: 1px solid #e0e0ff; + padding-left: 15px; +} + +code.title { + font-size: 0.97em; + font-weight: bold; + color: gray; + background: #F9F9F9; + padding: 3px; + display: block; + border-bottom: 1px solid #F0F0F0; + margin-bottom: 3px; +} + +span.highlight { + color: #504CC9; +} + +code.title img { + padding-right: 5px; +} + +#content table { + font-size: 0.9em; + border: 1px solid #f0f0f0; + margin: 5px; +} + +#content tr { + border-bottom: 1px solid #f0f0f0; +} + +#content th { + background: #f9f9f9; + min-width: 100px; + text-align: left; +} + +div.sidebar-section ul span { + background: transparent no-repeat top left; + padding-left: 20px; +} + +div.sidebar-section ul span.method { background-image: url('../images/icons/method.png'); } +div.sidebar-section ul span.function { background-image: url('../images/icons/function.png'); } +div.sidebar-section ul span.class { background-image: url('../images/icons/class.png'); } +div.sidebar-section ul span.interface { background-image: url('../images/icons/interface.png'); } +div.sidebar-section ul span.constant { background-image: url('../images/icons/constant.png'); } +div.sidebar-section ul span.property { background-image: url('../images/icons/property.png'); } +div.sidebar-section ul span.package { background-image: url('../images/icons/folder.gif'); } +div.sidebar-section ul span.namespace { background-image: url('../images/icons/namespace.png'); } +div.sidebar-section ul span.file { background-image: url('../images/icons/file.gif'); } diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/css/sen.full.min.css b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/css/sen.full.min.css new file mode 100644 index 0000000..21a520f --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/css/sen.full.min.css @@ -0,0 +1,81 @@ +@charset utf-8; +/** + * SenCSS - Sensible Standards CSS framework + * + * Copyright (c) 2008-2009 Kilian Valkhof (kilianvalkhof.com) + * Visit sencss.kilianvalkhof.com for more information and changelogs. + * Licensed under the MIT license. http://www.opensource.org/licenses/mit-license.php + * + */ +html,body,div,span,object,iframe,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,var,fieldset,form,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,dialog,figure,footer,header,hgroup,menu,nav,section,time,mark,audio,video{vertical-align:baseline;margin:0;padding:0} +article,aside,dialog,figure,footer,header,hgroup,menu,nav,section,time,mark,audio,video {display:block} +body{background:#fff;color:#000;font:75%/1.5em Arial, Helvetica, "DejaVu Sans", "Liberation sans", "Bitstream Vera Sans", sans-serif;position:relative} +textarea{font:101%/1.5em Arial, Helvetica, "DejaVu Sans", "Liberation sans", "Bitstream Vera Sans", sans-serif;border:1px solid #ccc;border-bottom-color:#eee;border-right-color:#eee;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;width:100%;margin:0;padding:.29em 0} +blockquote,q{quotes:none} +blockquote:before,blockquote:after,q:before,q:after{content:none} +:focus{outline:none} +a{text-decoration:underline;border:0} +a:hover,a:focus{text-decoration:none} +a img{border:0} +abbr,acronym{border-bottom:1px dotted;cursor:help;font-variant:small-caps} +address,cite,em,i{font-style:italic} +blockquote p{margin:0 1.5em 1.5em;padding:.75em} +code,kbd,tt{font-family:"Courier New", Courier, monospace, serif;line-height:1.5} +del{text-decoration:line-through} +dfn{border-bottom:1px dashed;font-style:italic} +dl{margin:0 0 1.5em} +dd{margin-left:1.5em} +h1,h2,h3,h4,h5,h6{font-weight:700;padding:0} +h1{font-size:2em;margin:0 0 .75em} +h2{font-size:1.5em;margin:0 0 1em} +h3{font-size:1.1666em;margin:0 0 1.286em} +h4{font-size:1em;margin:0 0 1.5em} +h5{font-size:.8333em;margin:0 0 1.8em} +h6{font-size:.666em;margin:0 0 2.25em} +img{display:inline-block;vertical-align:text-bottom} +ins{text-decoration:overline} +mark{background-color:#ff9;color:#000;font-style:italic;font-weight:700} +ol{list-style:outside decimal} +p{font-weight:300;margin:0 0 1.5em} +pre{font-family:"Courier New", Courier, monospace, serif;margin:0 0 1.5em} +sub{top:.4em;font-size:.85em;line-height:1;position:relative;vertical-align:baseline} +sup{font-size:.85em;line-height:1;position:relative;bottom:.5em;vertical-align:baseline} +ul{list-style:outside disc} +ul,ol{margin:0 0 1.5em 1.5em;padding:0} +li ul,li ol{margin:0 0 1.5em 1.5em;padding:0} +table{border-collapse:collapse;border-spacing:0;margin:0 0 1.5em;padding:0} +caption{font-style:italic;text-align:left} +tr.alt td{background:#eee} +td{vertical-align:top;padding:.333em} +th{font-weight:700;vertical-align:middle;padding:.333em} +button{cursor:pointer;display:block;font-size:1em;height:2em;line-height:1.5em;margin:1.75em 0 0;padding:0 .5em} +button::-moz-focus-inner{border:0} +fieldset{border:0;position:relative;margin:0 0 1.5em;padding:1.5em 0 0} +fieldset fieldset{clear:both;margin:0 0 1.5em;padding:0 0 0 1.5em} +input{border:1px solid #ccc;border-bottom-color:#eee;border-right-color:#eee;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;font-size:1em;height:1.5em;line-height:1.5em;width:100%;margin:0 0 .75em;padding:.29em 0} +input[type=file]{height:2.25em;padding:0} +select{border:1px solid #ccc;border-bottom-color:#eee;border-right-color:#eee;font-size:1em;height:2.25em;_margin:0 0 1.3em;margin:0 0 .8em;padding:.2em 0 0} +optgroup{font-weight:700;font-style:normal;text-indent:.2em} +optgroup + optgroup{margin-top:1em} +option{font-size:1em;height:1.5em;text-indent:1em;padding:0} +label{cursor:pointer;display:block;height:auto;line-height:1.4em;width:100%;margin:0;padding:0} +label input{background:0;border:0;height:1.5em;line-height:1.5em;width:auto;margin:0 .5em 0 0;padding:0} +legend{font-size:1.1666em;font-weight:700;left:0;margin:0;padding:0} +dt,strong,b{font-weight:700} +.amp{font-family:Baskerville, "Goudy Old Style", Palatino, "Book Antiqua", "URW Chancery L", Gentium, serif;font-style:italic} +.quo{font-family:Georgia, Gentium, "Times New Roman", Times, serif} +.lquo{font-family:Georgia, Gentium, "Times New Roman", Times, serif;margin:0 0 0 -.55em} +.introParagraphArticle:first-letter{float:left;font-size:3.2em;font-weight:700;line-height:1em;margin:0 0 -.2em;padding:.125em .1em 0 0} +.message{background:#eee;border:1px solid #999;margin:1.5em;padding:.666em} +.error{background:#fee;border:1px solid red;margin:1.5em;padding:.666em} +.notice{background:#eef;border:1px solid #00f;margin:1.5em;padding:.666em} +.success{background:#efe;border:1px solid #0f0;margin:1.5em;padding:.666em} +.warning{background:#ffe;border:1px solid #ff0;margin:1.5em;padding:.666em} +.aside-left{clear:left;float:left;overflow:hidden;margin:0 1.5em 1.5em 0} +.aside-right{clear:right;float:right;overflow:hidden;margin:0 0 1.5em 1.5em} +.horizontalForm button{clear:left;float:left;margin:.25em 0 0} +.horizontalForm input,.horizontalForm textarea{float:left;width:49%;margin:0 0 .8em} +.horizontalForm select{float:left;_margin:0 0 1.25em;margin:0 0 .75em} +.horizontalForm label{clear:left;float:left;width:49%;padding:.375em 0} +.horizontalForm label input{height:1em;line-height:1.5em;width:auto;margin:.25em .5em 0 0} +.horizontalForm label.singleLine{clear:both;float:none;height:1.5em;width:100%;padding:0} \ No newline at end of file diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/css/template.css b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/css/template.css new file mode 100644 index 0000000..c5bd77e --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/css/template.css @@ -0,0 +1,31 @@ +@import url('abstract.css'); + +a { + color: #504cc9; +} + +sidebar-logo { + vertical-align: bottom; +} + +#db-header { + padding-bottom: 0px; +} + +#db-header h1 { + margin-bottom: 0px; +} + +td#db-menu { + font-size: 0.8em; + border-bottom: 1px solid silver; +} + +td#db-menu ul { + display: block; +} + +td#db-menu li { + float: right; + padding-right: 10px; +} diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/graph_class.xsl b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/graph_class.xsl new file mode 100644 index 0000000..87e154f --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/graph_class.xsl @@ -0,0 +1,47 @@ + + + + + + + + + +
+
+ The following actions are supported in this diagram: +
    +
  • + Zoom, you can use the scrollwheel, or double-click, + to zoom in or out +
  • +
  • + Move, you can move around by dragging + the Diagram +
  • +
+
+ +
+
+
+ +
\ No newline at end of file diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/helpers.xsl b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/helpers.xsl new file mode 100644 index 0000000..18a2a9b --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/helpers.xsl @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/collapse_all.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/collapse_all.png new file mode 100644 index 0000000..1787a7f Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/collapse_all.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/expand_all.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/expand_all.png new file mode 100644 index 0000000..6bad6bb Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/expand_all.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/arrow_down.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/arrow_down.png new file mode 100644 index 0000000..61505ad Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/arrow_down.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/arrow_right.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/arrow_right.png new file mode 100644 index 0000000..60c5927 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/arrow_right.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/class.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/class.png new file mode 100644 index 0000000..0f0d94e Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/class.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/constant.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/constant.png new file mode 100644 index 0000000..76e2242 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/constant.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/favicon.ico b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/favicon.ico new file mode 100644 index 0000000..df28db3 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/favicon.ico differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/file-php.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/file-php.png new file mode 100644 index 0000000..c323f09 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/file-php.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/file.gif b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/file.gif new file mode 100644 index 0000000..7e62167 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/file.gif differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/folder.gif b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/folder.gif new file mode 100644 index 0000000..2b31631 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/folder.gif differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/function.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/function.png new file mode 100644 index 0000000..5dea687 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/function.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/interface.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/interface.png new file mode 100644 index 0000000..d6383c0 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/interface.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/method.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/method.png new file mode 100644 index 0000000..946d0ff Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/method.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/namespace.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/namespace.png new file mode 100644 index 0000000..1974b00 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/namespace.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/ok.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/ok.png new file mode 100644 index 0000000..39f287a Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/ok.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/property.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/property.png new file mode 100644 index 0000000..0671c39 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/property.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/search.gif b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/search.gif new file mode 100644 index 0000000..eef46fc Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/search.gif differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/variable.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/variable.png new file mode 100644 index 0000000..a39bc19 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/variable.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/view_source.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/view_source.png new file mode 100644 index 0000000..0c76bd1 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/view_source.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/visibility_private.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/visibility_private.png new file mode 100644 index 0000000..386dc2d Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/visibility_private.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/visibility_protected.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/visibility_protected.png new file mode 100644 index 0000000..d3bd8e7 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/visibility_protected.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/visibility_public.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/visibility_public.png new file mode 100644 index 0000000..4e10063 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/icons/visibility_public.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/logo.png b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/logo.png new file mode 100644 index 0000000..3b1b832 Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/logo.png differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/search.gif b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/search.gif new file mode 100644 index 0000000..f23afdc Binary files /dev/null and b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/images/search.gif differ diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/index.xsl b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/index.xsl new file mode 100644 index 0000000..5a29c85 --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/abstract/index.xsl @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + +
+ +
diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/zend/js/jquery.splitter.js b/vendor/phpdocumentor/phpdocumentor/data/templates/zend/js/jquery.splitter.js new file mode 100644 index 0000000..ae312d2 --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/zend/js/jquery.splitter.js @@ -0,0 +1,228 @@ +/* + * jQuery.splitter.js - two-pane splitter window plugin + * + * version 1.51 (2009/01/09) + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +/** + * The splitter() plugin implements a two-pane resizable splitter window. + * The selected elements in the jQuery object are converted to a splitter; + * each selected element should have two child elements, used for the panes + * of the splitter. The plugin adds a third child element for the splitbar. + * + * For more details see: http://methvin.com/splitter/ + * + * + * @example $('#MySplitter').splitter(); + * @desc Create a vertical splitter with default settings + * + * @example $('#MySplitter').splitter({type: 'h', accessKey: 'M'}); + * @desc Create a horizontal splitter resizable via Alt+Shift+M + * + * @name splitter + * @type jQuery + * @param Object options Options for the splitter (not required) + * @cat Plugins/Splitter + * @return jQuery + * @author Dave Methvin (dave.methvin@gmail.com) + */ +; +(function($) { + + $.fn.splitter = function(args) { + args = args || {}; + return this.each(function() { + var zombie; // left-behind splitbar for outline resizes + function startSplitMouse(evt) { + if (opts.outline) + zombie = zombie || bar.clone(false).insertAfter(A); + panes.css("-webkit-user-select", "none"); // Safari selects A/B text on a move + bar.addClass(opts.activeClass); + $('
').insertAfter(bar); + A._posSplit = A[0][opts.pxSplit] - evt[opts.eventPos]; + $(document) + .bind("mousemove", doSplitMouse) + .bind("mouseup", endSplitMouse); + } + + function doSplitMouse(evt) { + var newPos = A._posSplit + evt[opts.eventPos]; + if (opts.outline) { + newPos = Math.max(0, Math.min(newPos, splitter._DA - bar._DA)); + bar.css(opts.origin, newPos); + } else + resplit(newPos); + } + + function endSplitMouse(evt) { + $('div.splitterMask').remove(); + bar.removeClass(opts.activeClass); + var newPos = A._posSplit + evt[opts.eventPos]; + if (opts.outline) { + zombie.remove(); + zombie = null; + resplit(newPos); + } + panes.css("-webkit-user-select", "text"); // let Safari select text again + $(document) + .unbind("mousemove", doSplitMouse) + .unbind("mouseup", endSplitMouse); + } + + function resplit(newPos) { + // Constrain new splitbar position to fit pane size limits + newPos = Math.max(A._min, splitter._DA - B._max, + Math.min(newPos, A._max, splitter._DA - bar._DA - B._min)); + // Resize/position the two panes + bar._DA = bar[0][opts.pxSplit]; // bar size may change during dock + bar.css(opts.origin, newPos).css(opts.fixed, splitter._DF); + A.css(opts.origin, 0).css(opts.split, newPos).css(opts.fixed, splitter._DF); + B.css(opts.origin, newPos + bar._DA) + .css(opts.split, splitter._DA - bar._DA - newPos).css(opts.fixed, splitter._DF); + // IE fires resize for us; all others pay cash + if (!$.browser.msie) + panes.trigger("resize"); + } + + function dimSum(jq, dims) { + // Opera returns -1 for missing min/max width, turn into 0 + var sum = 0; + for (var i = 1; i < arguments.length; i++) + sum += Math.max(parseInt(jq.css(arguments[i])) || 0, 0); + return sum; + } + + // Determine settings based on incoming opts, element classes, and defaults + var vh = (args.splitHorizontal ? 'h' : args.splitVertical ? 'v' : args.type) || 'v'; + var opts = $.extend({ + activeClass: 'active', // class name for active splitter + pxPerKey: 8, // splitter px moved per keypress + tabIndex: 0, // tab order indicator + accessKey: '' // accessKey for splitbar + }, { + v: { // Vertical splitters: + keyLeft: 39, keyRight: 37, cursor: "e-resize", + splitbarClass: "vsplitbar", outlineClass: "voutline", + type: 'v', eventPos: "pageX", origin: "left", + split: "width", pxSplit: "offsetWidth", side1: "Left", side2: "Right", + fixed: "height", pxFixed: "offsetHeight", side3: "Top", side4: "Bottom" + }, + h: { // Horizontal splitters: + keyTop: 40, keyBottom: 38, cursor: "n-resize", + splitbarClass: "hsplitbar", outlineClass: "houtline", + type: 'h', eventPos: "pageY", origin: "top", + split: "height", pxSplit: "offsetHeight", side1: "Top", side2: "Bottom", + fixed: "width", pxFixed: "offsetWidth", side3: "Left", side4: "Right" + } + }[vh], args); + + // Create jQuery object closures for splitter and both panes + var splitter = $(this).css({position: "relative"}); + var panes = $(">*", splitter[0]).css({ + position: "absolute", // positioned inside splitter container + "z-index": "1", // splitbar is positioned above + "-moz-outline-style": "none" // don't show dotted outline + }); + var A = $(panes[0]); // left or top + var B = $(panes[1]); // right or bottom + + // Focuser element, provides keyboard support; title is shown by Opera accessKeys + var focuser = $('') + .attr({accessKey: opts.accessKey, tabIndex: opts.tabIndex, title: opts.splitbarClass}) + .bind($.browser.opera ? "click" : "focus", function() { + this.focus(); + bar.addClass(opts.activeClass) + }) + .bind("keydown", function(e) { + var key = e.which || e.keyCode; + var dir = key == opts["key" + opts.side1] ? 1 : key == opts["key" + opts.side2] ? -1 : 0; + if (dir) + resplit(A[0][opts.pxSplit] + dir * opts.pxPerKey, false); + }) + .bind("blur", function() { + bar.removeClass(opts.activeClass) + }); + + // Splitbar element, can be already in the doc or we create one + var bar = $(panes[2] || '
') + .insertAfter(A).css("z-index", "100").append(focuser) + .attr({"class": opts.splitbarClass, unselectable: "on"}) + .css({position: "absolute", "user-select": "none", "-webkit-user-select": "none", + "-khtml-user-select": "none", "-moz-user-select": "none", "top": "0px"}) + .bind("mousedown", startSplitMouse); + // Use our cursor unless the style specifies a non-default cursor + if (/^(auto|default|)$/.test(bar.css("cursor"))) + bar.css("cursor", opts.cursor); + + // Cache several dimensions for speed, rather than re-querying constantly + bar._DA = bar[0][opts.pxSplit]; + splitter._PBF = $.boxModel ? dimSum(splitter, "border" + opts.side3 + "Width", "border" + opts.side4 + "Width") : 0; + splitter._PBA = $.boxModel ? dimSum(splitter, "border" + opts.side1 + "Width", "border" + opts.side2 + "Width") : 0; + A._pane = opts.side1; + B._pane = opts.side2; + $.each([A,B], function() { + this._min = opts["min" + this._pane] || dimSum(this, "min-" + opts.split); + this._max = opts["max" + this._pane] || dimSum(this, "max-" + opts.split) || 9999; + this._init = opts["size" + this._pane] === true ? + parseInt($.curCSS(this[0], opts.split)) : opts["size" + this._pane]; + }); + + // Determine initial position, get from cookie if specified + var initPos = A._init; + if (!isNaN(B._init)) // recalc initial B size as an offset from the top or left side + initPos = splitter[0][opts.pxSplit] - splitter._PBA - B._init - bar._DA; + if (opts.cookie) { + if (!$.cookie) + alert('jQuery.splitter(): jQuery cookie plugin required'); + var ckpos = parseInt($.cookie(opts.cookie)); + if (!isNaN(ckpos)) + initPos = ckpos; + $(window).bind("unload", function() { + var state = String(bar.css(opts.origin)); // current location of splitbar + $.cookie(opts.cookie, state, {expires: opts.cookieExpires || 365, + path: opts.cookiePath || document.location.pathname}); + }); + } + if (isNaN(initPos)) // King Solomon's algorithm + initPos = Math.round((splitter[0][opts.pxSplit] - splitter._PBA - bar._DA) / 2); + + // Resize event propagation and splitter sizing + if (opts.anchorToWindow) { + // Account for margin or border on the splitter container and enforce min height + splitter._hadjust = dimSum(splitter, "borderTopWidth", "borderBottomWidth", "marginBottom"); + splitter._hmin = Math.max(dimSum(splitter, "minHeight"), 20); + $(window).bind("resize", + function() { + var top = splitter.offset().top; + var wh = $(window).height(); + splitter.css("height", Math.max(wh - top - splitter._hadjust, splitter._hmin) + "px"); + if (!$.browser.msie) splitter.trigger("resize"); + }).trigger("resize"); + } + else if (opts.resizeToWidth && !$.browser.msie) + $(window).bind("resize", function() { + splitter.trigger("resize"); + }); + + // Resize event handler; triggered immediately to set initial position + splitter.bind("resize", + function(e, size) { + // Custom events bubble in jQuery 1.3; don't Yo Dawg + if (e.target != this) return; + // Determine new width/height of splitter container + splitter._DF = splitter[0][opts.pxFixed] - splitter._PBF; + splitter._DA = splitter[0][opts.pxSplit] - splitter._PBA; + // Bail if splitter isn't visible or content isn't there yet + if (splitter._DF <= 0 || splitter._DA <= 0) return; + // Re-divvy the adjustable dimension; maintain size of the preferred pane + resplit(!isNaN(size) ? size : (!(opts.sizeRight || opts.sizeBottom) ? A[0][opts.pxSplit] : + splitter._DA - B[0][opts.pxSplit] - bar._DA)); + }).trigger("resize", [initPos]); + }); + }; + +})(jQuery); \ No newline at end of file diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/zend/js/template.js b/vendor/phpdocumentor/phpdocumentor/data/templates/zend/js/template.js new file mode 100644 index 0000000..2cc989f --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/zend/js/template.js @@ -0,0 +1,32 @@ +function filterElements() { + inherited = !$('#show-inherited').hasClass('deselected'); + public = !$('#show-public').hasClass('deselected'); + protected = !$('#show-protected').hasClass('deselected'); + private = !$('#show-private').hasClass('deselected'); + + $('div.public').each(function(index, val) { + $(val).toggle(public && !($(val).hasClass('inherited_from') && !inherited)); + }); + $('div.protected').each(function(index, val) { + $(val).toggle(protected && !($(val).hasClass('inherited_from') && !inherited)); + }); + $('div.private').each(function(index, val) { + $(val).toggle(private && !($(val).hasClass('inherited_from') && !inherited)); + }); +} + +$(document).ready(function() { + $('#show-public, #show-protected, #show-private, #show-inherited') + .css('cursor', 'pointer') + .click(function() { + $(this).toggleClass('deselected'); + if ($(this).hasClass('deselected')) { + $(this).fadeTo('fast', '0.4'); + } else { + $(this).fadeTo('fast', '1.0'); + } + filterElements(); + return false; + }); + $('#show-protected, #show-private').click(); +}); \ No newline at end of file diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/zend/page_header.xsl b/vendor/phpdocumentor/phpdocumentor/data/templates/zend/page_header.xsl new file mode 100644 index 0000000..1603c5a --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/zend/page_header.xsl @@ -0,0 +1,15 @@ + +]> + + + +
+
+

API Documentation

+
+ +
+
+ + + \ No newline at end of file diff --git a/vendor/phpdocumentor/phpdocumentor/data/templates/zend/template.xml b/vendor/phpdocumentor/phpdocumentor/data/templates/zend/template.xml new file mode 100644 index 0000000..a64f3a1 --- /dev/null +++ b/vendor/phpdocumentor/phpdocumentor/data/templates/zend/template.xml @@ -0,0 +1,43 @@ + +