diff --git a/.laminas-ci.json b/.laminas-ci.json new file mode 100644 index 00000000..bce3fa21 --- /dev/null +++ b/.laminas-ci.json @@ -0,0 +1,5 @@ +{ + "ignore_php_platform_requirements": { + "8.1": true + } +} diff --git a/composer.json b/composer.json index 6c367cf8..d910c3ec 100644 --- a/composer.json +++ b/composer.json @@ -24,22 +24,21 @@ "sort-packages": true }, "require": { - "php": "^7.3 || ~8.0.0", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0", "container-interop/container-interop": "^1.2", "laminas/laminas-stdlib": "^3.2.1", - "laminas/laminas-zendframework-bridge": "^1.0", "psr/container": "^1.0" }, "require-dev": { "composer/package-versions-deprecated": "^1.0", - "laminas/laminas-coding-standard": "~2.2.0", + "laminas/laminas-coding-standard": "~2.2.1", "laminas/laminas-container-config-test": "^0.3", "laminas/laminas-dependency-plugin": "^2.1.2", - "mikey179/vfsstream": "^1.6.8", - "ocramius/proxy-manager": "^2.2.3", - "phpbench/phpbench": "^1.0.4", + "mikey179/vfsstream": "^1.6.10@alpha", + "ocramius/proxy-manager": "^2.11", + "phpbench/phpbench": "^1.1", "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.4", + "phpunit/phpunit": "^9.5.5", "psalm/plugin-phpunit": "^0.16.1", "vimeo/psalm": "^4.8" }, @@ -49,6 +48,7 @@ }, "conflict": { "zendframework/zend-code": "<3.3.1", + "zendframework/zend-servicemanager": "*", "laminas/laminas-code": "<3.3.1" }, "suggest": { @@ -60,6 +60,9 @@ } }, "autoload-dev": { + "files": [ + "test/autoload.php" + ], "psr-4": { "LaminasTest\\ServiceManager\\": "test/", "LaminasBench\\ServiceManager\\": "benchmarks/" @@ -80,8 +83,5 @@ "test": "phpunit --colors=always", "test-coverage": "phpunit --colors=always --coverage-clover clover.xml", "static-analysis" : "psalm --shepherd --stats" - }, - "replace": { - "zendframework/zend-servicemanager": "^3.4.0" } } diff --git a/composer.lock b/composer.lock index b88a2a31..3c0a0967 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e090ce6236c2e7929878aca459fbdf52", + "content-hash": "da9c8fc1ea22138319b001f2a867c711", "packages": [ { "name": "container-interop/container-interop", @@ -44,29 +44,30 @@ }, { "name": "laminas/laminas-stdlib", - "version": "3.3.1", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "d81c7ffe602ed0e6ecb18691019111c0f4bf1efe" + "reference": "c53d8537f108fac3fae652677a19735db730ba46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/d81c7ffe602ed0e6ecb18691019111c0f4bf1efe", - "reference": "d81c7ffe602ed0e6ecb18691019111c0f4bf1efe", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/c53d8537f108fac3fae652677a19735db730ba46", + "reference": "c53d8537f108fac3fae652677a19735db730ba46", "shasum": "" }, "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.3 || ^8.0" + "php": "^7.3 || ~8.0.0 || ~8.1.0" }, - "replace": { - "zendframework/zend-stdlib": "^3.2.1" + "conflict": { + "zendframework/zend-stdlib": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-coding-standard": "~2.3.0", "phpbench/phpbench": "^0.17.1", - "phpunit/phpunit": "~9.3.7" + "phpunit/phpunit": "~9.3.7", + "psalm/plugin-phpunit": "^0.16.0", + "vimeo/psalm": "^4.7" }, "type": "library", "autoload": { @@ -98,116 +99,7 @@ "type": "community_bridge" } ], - "time": "2020-11-19T20:18:59+00:00" - }, - { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "6ede70583e101030bcace4dcddd648f760ddf642" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", - "reference": "6ede70583e101030bcace4dcddd648f760ddf642", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": [ - "ZendFramework", - "autoloading", - "laminas", - "zf" - ], - "support": { - "forum": "https://discourse.laminas.dev/", - "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", - "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", - "source": "https://github.com/laminas/laminas-zendframework-bridge" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2020-09-14T14:23:00+00:00" - }, - { - "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" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/master" - }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-09-02T16:11:32+00:00" }, { "name": "psr/container", @@ -427,16 +319,16 @@ }, { "name": "composer/package-versions-deprecated", - "version": "1.11.99.2", + "version": "1.11.99.4", "source": { "type": "git", "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "c6522afe5540d5fc46675043d3ed5a45a740b27c" + "reference": "b174585d1fe49ceed21928a945138948cb394600" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/c6522afe5540d5fc46675043d3ed5a45a740b27c", - "reference": "c6522afe5540d5fc46675043d3ed5a45a740b27c", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600", + "reference": "b174585d1fe49ceed21928a945138948cb394600", "shasum": "" }, "require": { @@ -480,7 +372,7 @@ "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", "support": { "issues": "https://github.com/composer/package-versions-deprecated/issues", - "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.2" + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.4" }, "funding": [ { @@ -496,7 +388,7 @@ "type": "tidelift" } ], - "time": "2021-05-24T07:46:03+00:00" + "time": "2021-09-13T08:41:34+00:00" }, { "name": "composer/semver", @@ -581,21 +473,21 @@ }, { "name": "composer/xdebug-handler", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496" + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", - "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { "phpstan/phpstan": "^0.12.55", @@ -625,7 +517,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.1" + "source": "https://github.com/composer/xdebug-handler/tree/2.0.2" }, "funding": [ { @@ -641,7 +533,7 @@ "type": "tidelift" } ], - "time": "2021-05-05T19:37:51+00:00" + "time": "2021-07-31T17:03:58+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", @@ -752,16 +644,16 @@ }, { "name": "doctrine/annotations", - "version": "1.13.1", + "version": "1.13.2", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f" + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", "shasum": "" }, "require": { @@ -818,9 +710,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.1" + "source": "https://github.com/doctrine/annotations/tree/1.13.2" }, - "time": "2021-05-16T18:07:53+00:00" + "time": "2021-08-05T19:00:23+00:00" }, { "name": "doctrine/instantiator", @@ -1074,39 +966,37 @@ }, { "name": "laminas/laminas-code", - "version": "3.5.1", + "version": "4.4.2", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "b549b70c0bb6e935d497f84f750c82653326ac77" + "reference": "54251ab2b16c41c6980387839496b235f5f6e10b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/b549b70c0bb6e935d497f84f750c82653326ac77", - "reference": "b549b70c0bb6e935d497f84f750c82653326ac77", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/54251ab2b16c41c6980387839496b235f5f6e10b", + "reference": "54251ab2b16c41c6980387839496b235f5f6e10b", "shasum": "" }, "require": { - "laminas/laminas-eventmanager": "^3.3", - "laminas/laminas-zendframework-bridge": "^1.1", - "php": "^7.3 || ~8.0.0" + "php": "^7.4 || ~8.0.0" }, "conflict": { "phpspec/prophecy": "<1.9.0" }, - "replace": { - "zendframework/zend-code": "^3.4.1" - }, "require-dev": { "doctrine/annotations": "^1.10.4", "ext-phar": "*", - "laminas/laminas-coding-standard": "^1.0.0", + "laminas/laminas-coding-standard": "^2.1.4", "laminas/laminas-stdlib": "^3.3.0", - "phpunit/phpunit": "^9.4.2" + "phpunit/phpunit": "^9.4.2", + "psalm/plugin-phpunit": "^0.14.0", + "vimeo/psalm": "^4.3.1" }, "suggest": { "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "laminas/laminas-stdlib": "Laminas\\Stdlib component" + "laminas/laminas-stdlib": "Laminas\\Stdlib component", + "laminas/laminas-zendframework-bridge": "A bridge with Zend Framework" }, "type": "library", "autoload": { @@ -1122,7 +1012,8 @@ "homepage": "https://laminas.dev", "keywords": [ "code", - "laminas" + "laminas", + "laminasframework" ], "support": { "chat": "https://laminas.dev/chat", @@ -1138,7 +1029,7 @@ "type": "community_bridge" } ], - "time": "2020-11-30T20:16:31+00:00" + "time": "2021-07-09T11:58:40+00:00" }, { "name": "laminas/laminas-coding-standard", @@ -1195,16 +1086,16 @@ }, { "name": "laminas/laminas-container-config-test", - "version": "0.3.0", + "version": "0.3.2", "source": { "type": "git", "url": "https://github.com/laminas/laminas-container-config-test.git", - "reference": "2f2380caead15c58d2fd09da105259e129b641f0" + "reference": "090ccad748e822eb0c113c834811936cf515786f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-container-config-test/zipball/2f2380caead15c58d2fd09da105259e129b641f0", - "reference": "2f2380caead15c58d2fd09da105259e129b641f0", + "url": "https://api.github.com/repos/laminas/laminas-container-config-test/zipball/090ccad748e822eb0c113c834811936cf515786f", + "reference": "090ccad748e822eb0c113c834811936cf515786f", "shasum": "" }, "require": { @@ -1220,7 +1111,9 @@ "laminas/laminas-coding-standard": "~1.0.0", "laminas/laminas-pimple-config": "^1.1", "laminas/laminas-servicemanager": "^3.3.2", - "phpunit/phpunit": "^7.5.15 || ^8.3.4" + "phpunit/phpunit": "^7.5.15 || ^8.3.4", + "psalm/plugin-phpunit": "^0.15.1", + "vimeo/psalm": "^4.7" }, "type": "library", "autoload": { @@ -1260,30 +1153,34 @@ "type": "community_bridge" } ], - "time": "2020-12-05T22:24:49+00:00" + "time": "2021-04-19T14:56:37+00:00" }, { "name": "laminas/laminas-dependency-plugin", - "version": "2.1.2", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-dependency-plugin.git", - "reference": "c5b4bf87729d6f38c73ca8ed22a5d62ec641d075" + "reference": "73cfb63ddca9d6bfedad5e0a038f6d55063975a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-dependency-plugin/zipball/c5b4bf87729d6f38c73ca8ed22a5d62ec641d075", - "reference": "c5b4bf87729d6f38c73ca8ed22a5d62ec641d075", + "url": "https://api.github.com/repos/laminas/laminas-dependency-plugin/zipball/73cfb63ddca9d6bfedad5e0a038f6d55063975a3", + "reference": "73cfb63ddca9d6bfedad5e0a038f6d55063975a3", "shasum": "" }, "require": { "composer-plugin-api": "^1.1 || ^2.0", - "php": "^7.3 || ~8.0.0" + "php": "^7.3 || ~8.0.0 || ~8.1.0" }, "require-dev": { "composer/composer": "^1.9 || ^2.0", - "mikey179/vfsstream": "^1.6", - "roave/security-advisories": "dev-master" + "laminas/laminas-coding-standard": "^2.2.1", + "mikey179/vfsstream": "^1.6.10@alpha", + "phpunit/phpunit": "^9.5.5", + "psalm/plugin-phpunit": "^0.15.1", + "roave/security-advisories": "dev-master", + "vimeo/psalm": "^4.5" }, "type": "composer-plugin", "extra": { @@ -1301,7 +1198,7 @@ "description": "Replace zendframework and zfcampus packages with their Laminas Project equivalents.", "support": { "issues": "https://github.com/laminas/laminas-dependency-plugin/issues", - "source": "https://github.com/laminas/laminas-dependency-plugin/tree/2.1.2" + "source": "https://github.com/laminas/laminas-dependency-plugin/tree/2.2.0" }, "funding": [ { @@ -1309,71 +1206,61 @@ "type": "community_bridge" } ], - "time": "2021-02-15T16:44:31+00:00" + "time": "2021-09-08T17:51:35+00:00" }, { - "name": "laminas/laminas-eventmanager", - "version": "3.3.0", + "name": "laminas/laminas-zendframework-bridge", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082" + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/1940ccf30e058b2fd66f5a9d696f1b5e0027b082", - "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/bf180a382393e7db5c1e8d0f2ec0c4af9c724baf", + "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf", "shasum": "" }, "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.3 || ^8.0" - }, - "replace": { - "zendframework/zend-eventmanager": "^3.2.1" + "php": "^7.3 || ~8.0.0 || ~8.1.0" }, "require-dev": { - "container-interop/container-interop": "^1.1", - "laminas/laminas-coding-standard": "~1.0.0", - "laminas/laminas-stdlib": "^2.7.3 || ^3.0", - "phpbench/phpbench": "^0.17.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "container-interop/container-interop": "^1.1, to use the lazy listeners feature", - "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + "phpunit/phpunit": "^9.3", + "psalm/plugin-phpunit": "^0.15.1", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.6" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev", - "dev-develop": "3.4.x-dev" + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" } }, "autoload": { + "files": [ + "src/autoload.php" + ], "psr-4": { - "Laminas\\EventManager\\": "src/" + "Laminas\\ZendFrameworkBridge\\": "src//" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://laminas.dev", + "description": "Alias legacy ZF class names to Laminas Project equivalents.", "keywords": [ - "event", - "eventmanager", - "events", - "laminas" + "ZendFramework", + "autoloading", + "laminas", + "zf" ], "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-eventmanager/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-eventmanager/issues", - "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", - "source": "https://github.com/laminas/laminas-eventmanager" + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" }, "funding": [ { @@ -1381,20 +1268,20 @@ "type": "community_bridge" } ], - "time": "2020-08-25T11:10:44+00:00" + "time": "2021-09-03T17:53:30+00:00" }, { "name": "mikey179/vfsstream", - "version": "v1.6.8", + "version": "v1.6.10-alpha.0", "source": { "type": "git", "url": "https://github.com/bovigo/vfsStream.git", - "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe" + "reference": "78cda242630dfdcc3e3b551107c7868347ec642c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/231c73783ebb7dd9ec77916c10037eff5a2b6efe", - "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe", + "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/78cda242630dfdcc3e3b551107c7868347ec642c", + "reference": "78cda242630dfdcc3e3b551107c7868347ec642c", "shasum": "" }, "require": { @@ -1432,7 +1319,7 @@ "source": "https://github.com/bovigo/vfsStream/tree/master", "wiki": "https://github.com/bovigo/vfsStream/wiki" }, - "time": "2019-10-30T15:31:00+00:00" + "time": "2021-08-02T03:15:02+00:00" }, { "name": "myclabs/deep-copy", @@ -1601,40 +1488,47 @@ }, { "name": "ocramius/proxy-manager", - "version": "2.2.3", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "4d154742e31c35137d5374c998e8f86b54db2e2f" + "reference": "21e2b4aa7d7661e7641cc6362fc8635ddcfa8464" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/4d154742e31c35137d5374c998e8f86b54db2e2f", - "reference": "4d154742e31c35137d5374c998e8f86b54db2e2f", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/21e2b4aa7d7661e7641cc6362fc8635ddcfa8464", + "reference": "21e2b4aa7d7661e7641cc6362fc8635ddcfa8464", "shasum": "" }, "require": { - "ocramius/package-versions": "^1.1.3", - "php": "^7.2.0", - "zendframework/zend-code": "^3.3.0" + "composer-runtime-api": "^2.1.0", + "laminas/laminas-code": "^4.3.0", + "php": "~7.4.1 || ~8.0.0", + "webimpress/safe-writer": "^2.2.0" + }, + "conflict": { + "doctrine/annotations": "<1.6.1", + "laminas/laminas-stdlib": "<3.2.1", + "thecodingmachine/safe": "<1.3.3", + "zendframework/zend-stdlib": "<3.2.1" }, "require-dev": { - "couscous/couscous": "^1.6.1", + "codelicia/xulieta": "^0.1.6", + "doctrine/coding-standard": "^8.2.1", "ext-phar": "*", - "humbug/humbug": "1.0.0-RC.0@RC", - "nikic/php-parser": "^3.1.1", - "padraic/phpunit-accelerator": "dev-master@DEV", - "phpbench/phpbench": "^0.12.2", - "phpstan/phpstan": "dev-master#856eb10a81c1d27c701a83f167dc870fd8f4236a as 0.9.999", - "phpstan/phpstan-phpunit": "dev-master#5629c0a1f4a9c417cb1077cf6693ad9753895761", - "phpunit/phpunit": "^6.4.3", - "squizlabs/php_codesniffer": "^2.9.1" + "infection/infection": "^0.21.5", + "nikic/php-parser": "^4.10.5", + "phpbench/phpbench": "^0.17.1 || 1.0.0-alpha2", + "phpunit/phpunit": "^9.5.4", + "slevomat/coding-standard": "^6.3.10", + "squizlabs/php_codesniffer": "^3.6.0", + "vimeo/psalm": "^4.4.1" }, "suggest": { - "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", - "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)", - "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)", - "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)" + "laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)", + "laminas/laminas-soap": "To have the Soap adapter (Remote Object feature)", + "laminas/laminas-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)", + "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects" }, "type": "library", "extra": { @@ -1643,8 +1537,8 @@ } }, "autoload": { - "psr-0": { - "ProxyManager\\": "src" + "psr-4": { + "ProxyManager\\": "src/ProxyManager" } }, "notification-url": "https://packagist.org/downloads/", @@ -1669,9 +1563,19 @@ ], "support": { "issues": "https://github.com/Ocramius/ProxyManager/issues", - "source": "https://github.com/Ocramius/ProxyManager/tree/2.2.x" + "source": "https://github.com/Ocramius/ProxyManager/tree/2.13.0" }, - "time": "2019-08-10T08:37:15+00:00" + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2021-06-09T10:16:06+00:00" }, { "name": "openlss/lib-array2xml", @@ -1728,16 +1632,16 @@ }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { @@ -1782,22 +1686,22 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "3.0.4", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -1833,9 +1737,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.4" + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2020-12-13T23:18:30+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpbench/container", @@ -1941,16 +1845,16 @@ }, { "name": "phpbench/phpbench", - "version": "1.0.4", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/phpbench/phpbench.git", - "reference": "52cb206677ef235d4f26317a25db8791a64cda12" + "reference": "1bb7bec67389121278a1758a593caacdf34ab4d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpbench/phpbench/zipball/52cb206677ef235d4f26317a25db8791a64cda12", - "reference": "52cb206677ef235d4f26317a25db8791a64cda12", + "url": "https://api.github.com/repos/phpbench/phpbench/zipball/1bb7bec67389121278a1758a593caacdf34ab4d3", + "reference": "1bb7bec67389121278a1758a593caacdf34ab4d3", "shasum": "" }, "require": { @@ -1975,7 +1879,7 @@ }, "require-dev": { "dantleech/invoke": "^2.0", - "friendsofphp/php-cs-fixer": "^2.13.1", + "friendsofphp/php-cs-fixer": "^3.0", "jangregor/phpstan-prophecy": "^0.8.1", "phpspec/prophecy": "^1.12", "phpstan/phpstan": "^0.12.7", @@ -1992,10 +1896,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.1-dev" } }, "autoload": { + "files": [ + "lib/Report/Func/functions.php" + ], "psr-4": { "PhpBench\\": "lib/", "PhpBench\\Extensions\\XDebug\\": "extensions/xdebug/lib/", @@ -2015,7 +1922,7 @@ "description": "PHP Benchmarking Framework", "support": { "issues": "https://github.com/phpbench/phpbench/issues", - "source": "https://github.com/phpbench/phpbench/tree/1.0.4" + "source": "https://github.com/phpbench/phpbench/tree/1.1.1" }, "funding": [ { @@ -2023,7 +1930,7 @@ "type": "github" } ], - "time": "2021-07-18T14:07:54+00:00" + "time": "2021-09-08T19:08:37+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2185,33 +2092,33 @@ }, { "name": "phpspec/prophecy", - "version": "1.12.2", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "245710e971a030f42e08f4912863805570f23d39" + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", - "reference": "245710e971a030f42e08f4912863805570f23d39", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", + "php": "^7.2 || ~8.0, <8.2", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", + "phpspec/phpspec": "^6.0 || ^7.0", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -2246,9 +2153,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + "source": "https://github.com/phpspec/prophecy/tree/1.14.0" }, - "time": "2020-12-19T10:15:11+00:00" + "time": "2021-09-10T09:02:12+00:00" }, { "name": "phpspec/prophecy-phpunit", @@ -2357,16 +2264,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.5", + "version": "9.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + "reference": "f6293e1b30a2354e8428e004689671b83871edde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", "shasum": "" }, "require": { @@ -2422,7 +2329,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" }, "funding": [ { @@ -2430,7 +2337,7 @@ "type": "github" } ], - "time": "2020-11-28T06:44:49+00:00" + "time": "2021-03-28T07:26:59+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2675,16 +2582,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.2", + "version": "9.5.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" + "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b", + "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b", "shasum": "" }, "require": { @@ -2696,7 +2603,7 @@ "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", + "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", @@ -2714,7 +2621,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", + "sebastian/type": "^2.3.4", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -2762,7 +2669,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.9" }, "funding": [ { @@ -2774,7 +2681,7 @@ "type": "github" } ], - "time": "2021-02-02T14:45:58+00:00" + "time": "2021-08-31T06:47:40+00:00" }, { "name": "psalm/plugin-phpunit", @@ -2836,6 +2743,55 @@ }, "time": "2021-06-18T23:56:46+00:00" }, + { + "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" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, { "name": "psr/log", "version": "1.1.4", @@ -3392,16 +3348,16 @@ }, { "name": "sebastian/global-state", - "version": "5.0.2", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", "shasum": "" }, "require": { @@ -3444,7 +3400,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" }, "funding": [ { @@ -3452,7 +3408,7 @@ "type": "github" } ], - "time": "2020-10-26T15:55:19+00:00" + "time": "2021-06-11T13:31:12+00:00" }, { "name": "sebastian/lines-of-code", @@ -3744,16 +3700,16 @@ }, { "name": "sebastian/type", - "version": "2.3.1", + "version": "2.3.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", "shasum": "" }, "require": { @@ -3788,7 +3744,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" }, "funding": [ { @@ -3796,7 +3752,7 @@ "type": "github" } ], - "time": "2020-10-26T13:18:59+00:00" + "time": "2021-06-15T12:49:02+00:00" }, { "name": "sebastian/version", @@ -4033,16 +3989,16 @@ }, { "name": "symfony/console", - "version": "v5.3.2", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1" + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/649730483885ff2ca99ca0560ef0e5f6b03f2ac1", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1", + "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a", + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a", "shasum": "" }, "require": { @@ -4050,11 +4006,12 @@ "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2", "symfony/string": "^5.1" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", @@ -4062,10 +4019,10 @@ "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/event-dispatcher": "^4.4|^5.0", @@ -4111,7 +4068,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.2" + "source": "https://github.com/symfony/console/tree/v5.3.7" }, "funding": [ { @@ -4127,7 +4084,7 @@ "type": "tidelift" } ], - "time": "2021-06-12T09:42:48+00:00" + "time": "2021-08-25T20:02:16+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4198,21 +4155,22 @@ }, { "name": "symfony/filesystem", - "version": "v5.3.3", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "19b71c8f313b411172dd5f470fd61f24466d79a9" + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/19b71c8f313b411172dd5f470fd61f24466d79a9", - "reference": "19b71c8f313b411172dd5f470fd61f24466d79a9", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32", + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -4240,7 +4198,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.3.3" + "source": "https://github.com/symfony/filesystem/tree/v5.3.4" }, "funding": [ { @@ -4256,24 +4214,25 @@ "type": "tidelift" } ], - "time": "2021-06-30T07:27:52+00:00" + "time": "2021-07-21T12:40:44+00:00" }, { "name": "symfony/finder", - "version": "v5.3.0", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6" + "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", + "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93", + "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -4301,7 +4260,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.3.0" + "source": "https://github.com/symfony/finder/tree/v5.3.7" }, "funding": [ { @@ -4317,27 +4276,27 @@ "type": "tidelift" } ], - "time": "2021-05-26T12:52:38+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.3.0", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5" + "reference": "4b78e55b179003a42523a362cc0e8327f7a69b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/162e886ca035869866d233a2bfef70cc28f9bbe5", - "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/4b78e55b179003a42523a362cc0e8327f7a69b5e", + "reference": "4b78e55b179003a42523a362cc0e8327f7a69b5e", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -4370,7 +4329,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.3.0" + "source": "https://github.com/symfony/options-resolver/tree/v5.3.7" }, "funding": [ { @@ -4386,7 +4345,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4469,16 +4428,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab" + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", "shasum": "" }, "require": { @@ -4530,7 +4489,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" }, "funding": [ { @@ -4546,7 +4505,7 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-intl-normalizer", @@ -4634,16 +4593,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", "shasum": "" }, "require": { @@ -4694,7 +4653,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" }, "funding": [ { @@ -4710,7 +4669,7 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-php73", @@ -4793,16 +4752,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", "shasum": "" }, "require": { @@ -4856,7 +4815,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" }, "funding": [ { @@ -4872,25 +4831,25 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-07-28T13:41:28+00:00" }, { "name": "symfony/process", - "version": "v5.3.2", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "714b47f9196de61a196d86c4bad5f09201b307df" + "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/714b47f9196de61a196d86c4bad5f09201b307df", - "reference": "714b47f9196de61a196d86c4bad5f09201b307df", + "url": "https://api.github.com/repos/symfony/process/zipball/38f26c7d6ed535217ea393e05634cb0b244a1967", + "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -4918,7 +4877,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.3.2" + "source": "https://github.com/symfony/process/tree/v5.3.7" }, "funding": [ { @@ -4934,7 +4893,7 @@ "type": "tidelift" } ], - "time": "2021-06-12T10:15:01+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { "name": "symfony/service-contracts", @@ -5017,16 +4976,16 @@ }, { "name": "symfony/string", - "version": "v5.3.3", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1" + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", - "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", + "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5", + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5", "shasum": "" }, "require": { @@ -5080,7 +5039,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.3" + "source": "https://github.com/symfony/string/tree/v5.3.7" }, "funding": [ { @@ -5096,20 +5055,20 @@ "type": "tidelift" } ], - "time": "2021-06-27T11:44:38+00:00" + "time": "2021-08-26T08:00:08+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -5138,7 +5097,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { @@ -5146,20 +5105,20 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { "name": "vimeo/psalm", - "version": "4.8.1", + "version": "4.10.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "f73f2299dbc59a3e6c4d66cff4605176e728ee69" + "reference": "916b098b008f6de4543892b1e0651c1c3b92cbfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f73f2299dbc59a3e6c4d66cff4605176e728ee69", - "reference": "f73f2299dbc59a3e6c4d66cff4605176e728ee69", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/916b098b008f6de4543892b1e0651c1c3b92cbfa", + "reference": "916b098b008f6de4543892b1e0651c1c3b92cbfa", "shasum": "" }, "require": { @@ -5169,6 +5128,7 @@ "composer/semver": "^1.4 || ^2.0 || ^3.0", "composer/xdebug-handler": "^1.1 || ^2.0", "dnoegel/php-xdg-base-dir": "^0.1.1", + "ext-ctype": "*", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -5178,7 +5138,7 @@ "felixfbecker/advanced-json-rpc": "^3.0.3", "felixfbecker/language-server-protocol": "^1.5", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.10.5", + "nikic/php-parser": "^4.12", "openlss/lib-array2xml": "^1.0", "php": "^7.1|^8", "sebastian/diff": "^3.0 || ^4.0", @@ -5201,7 +5161,6 @@ "slevomat/coding-standard": "^7.0", "squizlabs/php_codesniffer": "^3.5", "symfony/process": "^4.3 || ^5.0", - "weirdan/phpunit-appveyor-reporter": "^1.0.0", "weirdan/prophecy-shim": "^1.0 || ^2.0" }, "suggest": { @@ -5249,9 +5208,9 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.8.1" + "source": "https://github.com/vimeo/psalm/tree/4.10.0" }, - "time": "2021-06-20T23:03:20+00:00" + "time": "2021-09-04T21:00:09+00:00" }, { "name": "webimpress/coding-standard", @@ -5308,6 +5267,65 @@ ], "time": "2021-04-12T12:51:27+00:00" }, + { + "name": "webimpress/safe-writer", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/webimpress/safe-writer.git", + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.4", + "vimeo/psalm": "^4.7", + "webimpress/coding-standard": "^1.2.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev", + "dev-develop": "2.3.x-dev", + "dev-release-1.0": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Webimpress\\SafeWriter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "Tool to write files safely, to avoid race conditions", + "keywords": [ + "concurrent write", + "file writer", + "race condition", + "safe writer", + "webimpress" + ], + "support": { + "issues": "https://github.com/webimpress/safe-writer/issues", + "source": "https://github.com/webimpress/safe-writer/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2021-04-19T16:34:45+00:00" + }, { "name": "webmozart/assert", "version": "1.10.0", @@ -5419,11 +5437,13 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "mikey179/vfsstream": 15 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.3 || ~8.0.0" + "php": "~7.4.0 || ~8.0.0 || ~8.1.0" }, "platform-dev": [], "plugin-api-version": "2.1.0" diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 4f817882..a8083863 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -16,6 +16,7 @@ bin src test + test/TestAsset/laminas-code/*.php diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 52dfbfeb..348537dc 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1,5 +1,5 @@ - + new $requestedName(...$arguments) @@ -242,10 +242,6 @@ $creationCallback($this->creationContext, $name, $creationCallback, $options) - - $factory - callable - $name $name @@ -941,6 +937,8 @@ $plugin + + $aliases $factories diff --git a/psalm.xml.dist b/psalm.xml.dist index d772ea13..7b2015cc 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -12,6 +12,7 @@ + diff --git a/src/Proxy/LazyServiceFactory.php b/src/Proxy/LazyServiceFactory.php index 9e06b1bd..eab13dcd 100644 --- a/src/Proxy/LazyServiceFactory.php +++ b/src/Proxy/LazyServiceFactory.php @@ -24,12 +24,12 @@ final class LazyServiceFactory implements DelegatorFactoryInterface /** @var LazyLoadingValueHolderFactory */ private $proxyFactory; - /** @var string[] map of service names to class names */ + /** @var array map of service names to class names */ private $servicesMap; /** - * @param string[] $servicesMap a map of service names to class names of their - * respective classes + * @param array $servicesMap A map of service names to + * class names of their respective classes */ public function __construct(LazyLoadingValueHolderFactory $proxyFactory, array $servicesMap) { @@ -40,6 +40,7 @@ public function __construct(LazyLoadingValueHolderFactory $proxyFactory, array $ /** * {@inheritDoc} * + * @param string $name * @return VirtualProxyInterface */ public function __invoke(ContainerInterface $container, $name, callable $callback, ?array $options = null) diff --git a/test/Proxy/LazyServiceFactoryTest.php b/test/Proxy/LazyServiceFactoryTest.php index 8b4bc4cc..9f86c473 100644 --- a/test/Proxy/LazyServiceFactoryTest.php +++ b/test/Proxy/LazyServiceFactoryTest.php @@ -36,6 +36,7 @@ protected function setUp(): void 'fooService' => 'FooClass', ]; + /** @psalm-suppress ArgumentTypeCoercion */ $this->factory = new LazyServiceFactory($this->proxyFactory, $servicesMap); } diff --git a/test/TestAsset/laminas-code/ClassReflection.php b/test/TestAsset/laminas-code/ClassReflection.php new file mode 100644 index 00000000..7ad47694 --- /dev/null +++ b/test/TestAsset/laminas-code/ClassReflection.php @@ -0,0 +1,231 @@ +docBlock)) { + return $this->docBlock; + } + + if ('' == $this->getDocComment()) { + return false; + } + + $this->docBlock = new DocBlockReflection($this); + + return $this->docBlock; + } + + /** + * Return the start line of the class + * + * @param bool $includeDocComment + * @return int + */ + #[ReturnTypeWillChange] + public function getStartLine($includeDocComment = false) + { + if ($includeDocComment && $this->getDocComment() != '') { + return $this->getDocBlock()->getStartLine(); + } + + return parent::getStartLine(); + } + + /** + * Return the contents of the class + * + * @param bool $includeDocBlock + * @return string + */ + public function getContents($includeDocBlock = true) + { + $fileName = $this->getFileName(); + + if (false === $fileName || ! file_exists($fileName)) { + return ''; + } + + $filelines = file($fileName); + $startnum = $this->getStartLine($includeDocBlock); + $endnum = $this->getEndLine() - $this->getStartLine(); + + // Ensure we get between the open and close braces + $lines = array_slice($filelines, $startnum, $endnum); + array_unshift($lines, $filelines[$startnum - 1]); + + return strstr(implode('', $lines), '{'); + } + + /** + * Get all reflection objects of implemented interfaces + * + * @return ClassReflection[] + */ + #[ReturnTypeWillChange] + public function getInterfaces() + { + $phpReflections = parent::getInterfaces(); + $laminasReflections = []; + while ($phpReflections && ($phpReflection = array_shift($phpReflections))) { + $instance = new ClassReflection($phpReflection->getName()); + $laminasReflections[] = $instance; + unset($phpReflection); + } + unset($phpReflections); + + return $laminasReflections; + } + + /** + * Return method reflection by name + * + * @param string $name + * @return MethodReflection + */ + #[ReturnTypeWillChange] + public function getMethod($name) + { + return new MethodReflection($this->getName(), parent::getMethod($name)->getName()); + } + + /** + * Get reflection objects of all methods + * + * @param int $filter + * @return MethodReflection[] + */ + #[ReturnTypeWillChange] + public function getMethods($filter = -1) + { + $methods = []; + foreach (parent::getMethods($filter) as $method) { + $instance = new MethodReflection($this->getName(), $method->getName()); + $methods[] = $instance; + } + + return $methods; + } + + /** + * Returns an array of reflection classes of traits used by this class. + * + * @return null|array + */ + #[ReturnTypeWillChange] + public function getTraits() + { + $vals = []; + $traits = parent::getTraits(); + if ($traits === null) { + return; + } + + foreach ($traits as $trait) { + $vals[] = new ClassReflection($trait->getName()); + } + + return $vals; + } + + /** + * Get parent reflection class of reflected class + * + * @return ClassReflection|bool + */ + #[ReturnTypeWillChange] + public function getParentClass() + { + $phpReflection = parent::getParentClass(); + if ($phpReflection) { + $laminasReflection = new ClassReflection($phpReflection->getName()); + unset($phpReflection); + + return $laminasReflection; + } + + return false; + } + + /** + * Return reflection property of this class by name + * + * @param string $name + * @return PropertyReflection + */ + #[ReturnTypeWillChange] + public function getProperty($name) + { + $phpReflection = parent::getProperty($name); + $laminasReflection = new PropertyReflection($this->getName(), $phpReflection->getName()); + unset($phpReflection); + + return $laminasReflection; + } + + /** + * Return reflection properties of this class + * + * @param int $filter + * @return PropertyReflection[] + */ + #[ReturnTypeWillChange] + public function getProperties($filter = -1) + { + $phpReflections = parent::getProperties($filter); + $laminasReflections = []; + while ($phpReflections && ($phpReflection = array_shift($phpReflections))) { + $instance = new PropertyReflection($this->getName(), $phpReflection->getName()); + $laminasReflections[] = $instance; + unset($phpReflection); + } + unset($phpReflections); + + return $laminasReflections; + } + + /** + * @return string + */ + public function toString() + { + return parent::__toString(); + } + + /** + * @return string + */ + public function __toString() + { + return parent::__toString(); + } +} diff --git a/test/TestAsset/laminas-code/MethodReflection.php b/test/TestAsset/laminas-code/MethodReflection.php new file mode 100644 index 00000000..65d7fa50 --- /dev/null +++ b/test/TestAsset/laminas-code/MethodReflection.php @@ -0,0 +1,466 @@ +getDocComment()) { + return false; + } + + return new DocBlockReflection($this); + } + + /** + * Get start line (position) of method + * + * @param bool $includeDocComment + * @return int + */ + #[ReturnTypeWillChange] + public function getStartLine($includeDocComment = false) + { + if ($includeDocComment) { + if ($this->getDocComment() != '') { + return $this->getDocBlock()->getStartLine(); + } + } + + return parent::getStartLine(); + } + + /** + * Get reflection of declaring class + * + * @return ClassReflection + */ + #[ReturnTypeWillChange] + public function getDeclaringClass() + { + $phpReflection = parent::getDeclaringClass(); + $laminasReflection = new ClassReflection($phpReflection->getName()); + unset($phpReflection); + + return $laminasReflection; + } + + /** + * Get method prototype + * + * @param string $format + * @return array|string + */ + #[ReturnTypeWillChange] + public function getPrototype($format = self::PROTOTYPE_AS_ARRAY) + { + $returnType = 'mixed'; + $docBlock = $this->getDocBlock(); + if ($docBlock) { + $return = $docBlock->getTag('return'); + $returnTypes = $return->getTypes(); + $returnType = count($returnTypes) > 1 ? implode('|', $returnTypes) : $returnTypes[0]; + } + + $declaringClass = $this->getDeclaringClass(); + $prototype = [ + 'namespace' => $declaringClass->getNamespaceName(), + 'class' => substr($declaringClass->getName(), strlen($declaringClass->getNamespaceName()) + 1), + 'name' => $this->getName(), + 'visibility' => $this->isPublic() ? 'public' : ($this->isPrivate() ? 'private' : 'protected'), + 'return' => $returnType, + 'arguments' => [], + ]; + + $parameters = $this->getParameters(); + foreach ($parameters as $parameter) { + $prototype['arguments'][$parameter->getName()] = [ + 'type' => $parameter->detectType(), + 'required' => ! $parameter->isOptional(), + 'by_ref' => $parameter->isPassedByReference(), + 'default' => $parameter->isDefaultValueAvailable() ? $parameter->getDefaultValue() : null, + ]; + } + + if ($format == self::PROTOTYPE_AS_STRING) { + $line = $prototype['visibility'] . ' ' . $prototype['return'] . ' ' . $prototype['name'] . '('; + $args = []; + foreach ($prototype['arguments'] as $name => $argument) { + $argsLine = ($argument['type'] ? + $argument['type'] . ' ' + : '') . ($argument['by_ref'] ? '&' : '') . '$' . $name; + if (! $argument['required']) { + $argsLine .= ' = ' . var_export($argument['default'], true); + } + $args[] = $argsLine; + } + $line .= implode(', ', $args); + $line .= ')'; + + return $line; + } + + return $prototype; + } + + /** + * Get all method parameter reflection objects + * + * @return ParameterReflection[] + */ + #[ReturnTypeWillChange] + public function getParameters() + { + $phpReflections = parent::getParameters(); + $laminasReflections = []; + while ($phpReflections && ($phpReflection = array_shift($phpReflections))) { + $instance = new ParameterReflection( + [$this->getDeclaringClass()->getName(), $this->getName()], + $phpReflection->getName() + ); + $laminasReflections[] = $instance; + unset($phpReflection); + } + unset($phpReflections); + + return $laminasReflections; + } + + /** + * Get method contents + * + * @param bool $includeDocBlock + * @return string + */ + public function getContents($includeDocBlock = true) + { + $docComment = $this->getDocComment(); + $content = $includeDocBlock && ! empty($docComment) ? $docComment . "\n" : ''; + $content .= $this->extractMethodContents(); + + return $content; + } + + /** + * Get method body + * + * @return string + */ + public function getBody() + { + return $this->extractMethodContents(true); + } + + /** + * Tokenize method string and return concatenated body + * + * @param bool $bodyOnly + * @return string + */ + protected function extractMethodContents($bodyOnly = false) + { + $fileName = $this->getFileName(); + + if ((class_exists($this->class) && false === $fileName) || ! file_exists($fileName)) { + return ''; + } + + $lines = array_slice( + file($fileName, FILE_IGNORE_NEW_LINES), + $this->getStartLine() - 1, + $this->getEndLine() - ($this->getStartLine() - 1), + true + ); + + $functionLine = implode("\n", $lines); + $tokens = token_get_all(' $token) { + $tokenType = is_array($token) ? token_name($token[0]) : $token; + $tokenValue = is_array($token) ? $token[1] : $token; + + switch ($tokenType) { + case 'T_FINAL': + case 'T_ABSTRACT': + case 'T_PUBLIC': + case 'T_PROTECTED': + case 'T_PRIVATE': + case 'T_STATIC': + case 'T_FUNCTION': + // check to see if we have a valid function + // then check if we are inside function and have a closure + if ($this->isValidFunction($tokens, $key, $this->getName())) { + if ($bodyOnly === false) { + //if first instance of tokenType grab prefixed whitespace + //and append to body + if ($capture === false) { + $body .= $this->extractPrefixedWhitespace($tokens, $key); + } + $body .= $tokenValue; + } + + $capture = true; + } else { + //closure test + if ($firstBrace && $tokenType == 'T_FUNCTION') { + $body .= $tokenValue; + break; + } + $capture = false; + break; + } + break; + + case '{': + if ($capture === false) { + break; + } + + if ($firstBrace === false) { + $firstBrace = true; + if ($bodyOnly === true) { + break; + } + } + + $body .= $tokenValue; + break; + + case '}': + if ($capture === false) { + break; + } + + //check to see if this is the last brace + if ($this->isEndingBrace($tokens, $key)) { + //capture the end brace if not bodyOnly + if ($bodyOnly === false) { + $body .= $tokenValue; + } + + break 2; + } + + $body .= $tokenValue; + break; + + default: + if ($capture === false) { + break; + } + + // if returning body only wait for first brace before capturing + if ($bodyOnly === true && $firstBrace !== true) { + break; + } + + $body .= $tokenValue; + break; + } + } + + //remove ending whitespace and return + return rtrim($body); + } + + /** + * Take current position and find any whitespace + * + * @param array $haystack + * @param int $position + * @return string + */ + protected function extractPrefixedWhitespace($haystack, $position) + { + $content = ''; + $count = count($haystack); + if ($position + 1 == $count) { + return $content; + } + + for ($i = $position - 1; $i >= 0; $i--) { + $tokenType = is_array($haystack[$i]) ? token_name($haystack[$i][0]) : $haystack[$i]; + $tokenValue = is_array($haystack[$i]) ? $haystack[$i][1] : $haystack[$i]; + + //search only for whitespace + if ($tokenType == 'T_WHITESPACE') { + $content .= $tokenValue; + } else { + break; + } + } + + return $content; + } + + /** + * Test for ending brace + * + * @param array $haystack + * @param int $position + * @return bool + */ + protected function isEndingBrace($haystack, $position) + { + $count = count($haystack); + + //advance one position + $position += 1; + + if ($position == $count) { + return true; + } + + for ($i = $position; $i < $count; $i++) { + $tokenType = is_array($haystack[$i]) ? token_name($haystack[$i][0]) : $haystack[$i]; + switch ($tokenType) { + case 'T_FINAL': + case 'T_ABSTRACT': + case 'T_PUBLIC': + case 'T_PROTECTED': + case 'T_PRIVATE': + case 'T_STATIC': + return true; + + case 'T_FUNCTION': + // If a function is encountered and that function is not a closure + // then return true. otherwise the function is a closure, return false + if ($this->isValidFunction($haystack, $i)) { + return true; + } + return false; + + case '}': + case ';': + case 'T_BREAK': + case 'T_CATCH': + case 'T_DO': + case 'T_ECHO': + case 'T_ELSE': + case 'T_ELSEIF': + case 'T_EVAL': + case 'T_EXIT': + case 'T_FINALLY': + case 'T_FOR': + case 'T_FOREACH': + case 'T_GOTO': + case 'T_IF': + case 'T_INCLUDE': + case 'T_INCLUDE_ONCE': + case 'T_PRINT': + case 'T_STRING': + case 'T_STRING_VARNAME': + case 'T_THROW': + case 'T_USE': + case 'T_VARIABLE': + case 'T_WHILE': + case 'T_YIELD': + return false; + } + } + } + + /** + * Test to see if current position is valid function or + * closure. Returns true if it's a function and NOT a closure + * + * @param array $haystack + * @param int $position + * @param string $functionName + * @return bool + */ + protected function isValidFunction($haystack, $position, $functionName = null) + { + $isValid = false; + $count = count($haystack); + for ($i = $position + 1; $i < $count; $i++) { + $tokenType = is_array($haystack[$i]) ? token_name($haystack[$i][0]) : $haystack[$i]; + $tokenValue = is_array($haystack[$i]) ? $haystack[$i][1] : $haystack[$i]; + + //check for occurrence of ( or + if ($tokenType == 'T_STRING') { + //check to see if function name is passed, if so validate against that + if ($functionName !== null && $tokenValue != $functionName) { + $isValid = false; + break; + } + + $isValid = true; + break; + } elseif ($tokenValue == '(') { + break; + } + } + + return $isValid; + } + + /** + * @return string + */ + public function toString() + { + return parent::__toString(); + } + + /** + * @return string + */ + public function __toString() + { + return parent::__toString(); + } +} diff --git a/test/TestAsset/laminas-code/ParameterReflection.php b/test/TestAsset/laminas-code/ParameterReflection.php new file mode 100644 index 00000000..d1ba559d --- /dev/null +++ b/test/TestAsset/laminas-code/ParameterReflection.php @@ -0,0 +1,129 @@ +getName()); + unset($phpReflection); + + return $laminasReflection; + } + + /** + * Get class reflection object + * + * @return null|ClassReflection + */ + #[ReturnTypeWillChange] + public function getClass() + { + $phpReflectionType = parent::getType(); + if ($phpReflectionType === null) { + return null; + } + + $laminasReflection = new ClassReflection($phpReflectionType->getName()); + unset($phpReflectionType); + + return $laminasReflection; + } + + /** + * Get declaring function reflection object + * + * @return FunctionReflection|MethodReflection + */ + #[ReturnTypeWillChange] + public function getDeclaringFunction() + { + $phpReflection = parent::getDeclaringFunction(); + if ($phpReflection instanceof ReflectionMethod) { + $laminasReflection = new MethodReflection($this->getDeclaringClass()->getName(), $phpReflection->getName()); + } else { + $laminasReflection = new FunctionReflection($phpReflection->getName()); + } + unset($phpReflection); + + return $laminasReflection; + } + + /** + * Get parameter type + * + * @return string|null + */ + public function detectType() + { + if ( + method_exists($this, 'getType') + && null !== ($type = $this->getType()) + && $type->isBuiltin() + ) { + return $type->getName(); + } + + if (null !== $type && $type->getName() === 'self') { + return $this->getDeclaringClass()->getName(); + } + + if (($class = $this->getClass()) instanceof ReflectionClass) { + return $class->getName(); + } + + $docBlock = $this->getDeclaringFunction()->getDocBlock(); + + if (! $docBlock instanceof DocBlockReflection) { + return null; + } + + $params = $docBlock->getTags('param'); + + if (isset($params[$this->getPosition()])) { + return $params[$this->getPosition()]->getType(); + } + + return null; + } + + /** + * @return string + */ + public function toString() + { + return parent::__toString(); + } + + /** + * @return string + */ + public function __toString() + { + return parent::__toString(); + } +} diff --git a/test/autoload.php b/test/autoload.php new file mode 100644 index 00000000..8e5af1e3 --- /dev/null +++ b/test/autoload.php @@ -0,0 +1,7 @@ += 80100) { + require __DIR__ . '/TestAsset/laminas-code/ParameterReflection.php'; + require __DIR__ . '/TestAsset/laminas-code/MethodReflection.php'; + require __DIR__ . '/TestAsset/laminas-code/ClassReflection.php'; +}