diff --git a/.gitignore b/.gitignore index 8d50498..64e0b00 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ build /vendor/ .php_cs.cache + +!/tests/integration/ diff --git a/tests/integration/composer.json b/tests/integration/composer.json index bb2be51..7836cce 100644 --- a/tests/integration/composer.json +++ b/tests/integration/composer.json @@ -1,6 +1,12 @@ { + "require": { + "php": ">=7.3" + }, "require-dev": { "behat/behat": "^3.3", "guzzlehttp/guzzle": "^7.0" + }, + "conflict": { + "psr/container": ">=1.1" } } diff --git a/tests/integration/composer.lock b/tests/integration/composer.lock index 4000548..81b6c67 100644 --- a/tests/integration/composer.lock +++ b/tests/integration/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": "342c9ad15194753594ee6d6b8e1bb2fc", + "content-hash": "9ff9f72d6a7cf43bebb439d1db2825a4", "packages": [], "packages-dev": [ { @@ -531,22 +531,27 @@ }, { "name": "psr/container", - "version": "1.1.2", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=7.4.0" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -559,7 +564,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "homepage": "http://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -573,9 +578,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/master" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2017-02-14T16:28:37+00:00" }, { "name": "psr/event-dispatcher", @@ -1011,41 +1016,39 @@ }, { "name": "symfony/dependency-injection", - "version": "v5.4.5", + "version": "v5.2.12", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "17f31bc13ef2b577d3c652d71af49d000cbd5894" + "reference": "2f0326ab0e142a3600b1b435cb3e852bc96264b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/17f31bc13ef2b577d3c652d71af49d000cbd5894", - "reference": "17f31bc13ef2b577d3c652d71af49d000cbd5894", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2f0326ab0e142a3600b1b435cb3e852bc96264b6", + "reference": "2f0326ab0e142a3600b1b435cb3e852bc96264b6", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.1.1", - "symfony/deprecation-contracts": "^2.1|^3", + "psr/container": "^1.0", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<5.3", + "symfony/config": "<5.1", "symfony/finder": "<4.4", "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4.26" + "symfony/yaml": "<4.4" }, "provide": { "psr/container-implementation": "1.0", "symfony/service-implementation": "1.0|2.0" }, "require-dev": { - "symfony/config": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4.26|^5.0|^6.0" + "symfony/config": "^5.1", + "symfony/expression-language": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" }, "suggest": { "symfony/config": "", @@ -1080,7 +1083,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.5" + "source": "https://github.com/symfony/dependency-injection/tree/v5.2.12" }, "funding": [ { @@ -1096,7 +1099,7 @@ "type": "tidelift" } ], - "time": "2022-02-24T09:30:07+00:00" + "time": "2021-07-23T15:54:19+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1331,16 +1334,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.5", + "version": "v5.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "797680071ea8f71b94eb958680c50d0e002638f5" + "reference": "d53a45039974952af7f7ebc461ccdd4295e29440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/797680071ea8f71b94eb958680c50d0e002638f5", - "reference": "797680071ea8f71b94eb958680c50d0e002638f5", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d53a45039974952af7f7ebc461ccdd4295e29440", + "reference": "d53a45039974952af7f7ebc461ccdd4295e29440", "shasum": "" }, "require": { @@ -1375,7 +1378,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.5" + "source": "https://github.com/symfony/filesystem/tree/v5.4.6" }, "funding": [ { @@ -1391,11 +1394,11 @@ "type": "tidelift" } ], - "time": "2022-02-27T10:31:47+00:00" + "time": "2022-03-02T12:42:23+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -1457,7 +1460,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" }, "funding": [ { @@ -1477,7 +1480,7 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -1538,7 +1541,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" }, "funding": [ { @@ -1558,7 +1561,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -1622,7 +1625,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" }, "funding": [ { @@ -1642,7 +1645,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -1705,7 +1708,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" }, "funding": [ { @@ -1725,7 +1728,7 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -1784,7 +1787,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0" }, "funding": [ { @@ -1804,16 +1807,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", "shasum": "" }, "require": { @@ -1867,7 +1870,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" }, "funding": [ { @@ -1883,11 +1886,11 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2022-03-04T08:16:47+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -1946,7 +1949,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" }, "funding": [ { @@ -1966,25 +1969,21 @@ }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" - }, - "conflict": { - "ext-psr": "<1.1|>=2" + "psr/container": "^1.0" }, "suggest": { "symfony/service-implementation": "" @@ -1992,7 +1991,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -2029,7 +2028,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/master" }, "funding": [ { @@ -2045,7 +2044,7 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/string", @@ -2135,16 +2134,16 @@ }, { "name": "symfony/translation", - "version": "v5.4.5", + "version": "v5.4.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "7e4d52d39e5d86f3f04bef46fa29a1091786bc73" + "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7e4d52d39e5d86f3f04bef46fa29a1091786bc73", - "reference": "7e4d52d39e5d86f3f04bef46fa29a1091786bc73", + "url": "https://api.github.com/repos/symfony/translation/zipball/a7ca9fdfffb0174209440c2ffa1dee228e15d95b", + "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b", "shasum": "" }, "require": { @@ -2212,7 +2211,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.5" + "source": "https://github.com/symfony/translation/tree/v5.4.6" }, "funding": [ { @@ -2228,7 +2227,7 @@ "type": "tidelift" } ], - "time": "2022-02-09T15:49:12+00:00" + "time": "2022-03-02T12:56:28+00:00" }, { "name": "symfony/translation-contracts", @@ -2389,7 +2388,9 @@ "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, - "platform": [], + "platform": { + "php": ">=7.3" + }, "platform-dev": [], "plugin-api-version": "2.2.0" } diff --git a/tests/integration/vendor/composer/autoload_classmap.php b/tests/integration/vendor/composer/autoload_classmap.php index fc2f83d..0874015 100644 --- a/tests/integration/vendor/composer/autoload_classmap.php +++ b/tests/integration/vendor/composer/autoload_classmap.php @@ -10,6 +10,7 @@ return array( 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', + 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'ReturnTypeWillChange' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', diff --git a/tests/integration/vendor/composer/autoload_files.php b/tests/integration/vendor/composer/autoload_files.php index 13b619f..77d1f8d 100644 --- a/tests/integration/vendor/composer/autoload_files.php +++ b/tests/integration/vendor/composer/autoload_files.php @@ -6,8 +6,8 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php', diff --git a/tests/integration/vendor/composer/autoload_real.php b/tests/integration/vendor/composer/autoload_real.php index a8bbc91..3f6da58 100644 --- a/tests/integration/vendor/composer/autoload_real.php +++ b/tests/integration/vendor/composer/autoload_real.php @@ -22,6 +22,8 @@ class ComposerAutoloaderInit2b078a63e93bc9e9825cefae96ca1eb3 return self::$loader; } + require __DIR__ . '/platform_check.php'; + spl_autoload_register(array('ComposerAutoloaderInit2b078a63e93bc9e9825cefae96ca1eb3', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); spl_autoload_unregister(array('ComposerAutoloaderInit2b078a63e93bc9e9825cefae96ca1eb3', 'loadClassLoader')); diff --git a/tests/integration/vendor/composer/autoload_static.php b/tests/integration/vendor/composer/autoload_static.php index bdd1110..4f9f3e4 100644 --- a/tests/integration/vendor/composer/autoload_static.php +++ b/tests/integration/vendor/composer/autoload_static.php @@ -7,8 +7,8 @@ namespace Composer\Autoload; class ComposerStaticInit2b078a63e93bc9e9825cefae96ca1eb3 { public static $files = array ( - '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php', @@ -206,6 +206,7 @@ class ComposerStaticInit2b078a63e93bc9e9825cefae96ca1eb3 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', + 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'ReturnTypeWillChange' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', diff --git a/tests/integration/vendor/composer/installed.json b/tests/integration/vendor/composer/installed.json index 8cf8be5..7df4ff5 100644 --- a/tests/integration/vendor/composer/installed.json +++ b/tests/integration/vendor/composer/installed.json @@ -538,24 +538,29 @@ }, { "name": "psr/container", - "version": "1.1.2", - "version_normalized": "1.1.2.0", + "version": "1.0.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=7.4.0" + "php": ">=5.3.0" }, - "time": "2021-11-05T16:50:12+00:00", + "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": { @@ -569,7 +574,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "homepage": "http://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -583,7 +588,7 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/master" }, "install-path": "../psr/container" }, @@ -1028,42 +1033,40 @@ }, { "name": "symfony/dependency-injection", - "version": "v5.4.5", - "version_normalized": "5.4.5.0", + "version": "v5.2.12", + "version_normalized": "5.2.12.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "17f31bc13ef2b577d3c652d71af49d000cbd5894" + "reference": "2f0326ab0e142a3600b1b435cb3e852bc96264b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/17f31bc13ef2b577d3c652d71af49d000cbd5894", - "reference": "17f31bc13ef2b577d3c652d71af49d000cbd5894", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2f0326ab0e142a3600b1b435cb3e852bc96264b6", + "reference": "2f0326ab0e142a3600b1b435cb3e852bc96264b6", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.1.1", - "symfony/deprecation-contracts": "^2.1|^3", + "psr/container": "^1.0", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<5.3", + "symfony/config": "<5.1", "symfony/finder": "<4.4", "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4.26" + "symfony/yaml": "<4.4" }, "provide": { "psr/container-implementation": "1.0", "symfony/service-implementation": "1.0|2.0" }, "require-dev": { - "symfony/config": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4.26|^5.0|^6.0" + "symfony/config": "^5.1", + "symfony/expression-language": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" }, "suggest": { "symfony/config": "", @@ -1072,7 +1075,7 @@ "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, - "time": "2022-02-24T09:30:07+00:00", + "time": "2021-07-23T15:54:19+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1100,7 +1103,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.5" + "source": "https://github.com/symfony/dependency-injection/tree/v5.2.12" }, "funding": [ { @@ -1360,17 +1363,17 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.5", - "version_normalized": "5.4.5.0", + "version": "v5.4.6", + "version_normalized": "5.4.6.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "797680071ea8f71b94eb958680c50d0e002638f5" + "reference": "d53a45039974952af7f7ebc461ccdd4295e29440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/797680071ea8f71b94eb958680c50d0e002638f5", - "reference": "797680071ea8f71b94eb958680c50d0e002638f5", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d53a45039974952af7f7ebc461ccdd4295e29440", + "reference": "d53a45039974952af7f7ebc461ccdd4295e29440", "shasum": "" }, "require": { @@ -1379,7 +1382,7 @@ "symfony/polyfill-mbstring": "~1.8", "symfony/polyfill-php80": "^1.16" }, - "time": "2022-02-27T10:31:47+00:00", + "time": "2022-03-02T12:42:23+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1407,7 +1410,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.5" + "source": "https://github.com/symfony/filesystem/tree/v5.4.6" }, "funding": [ { @@ -1427,8 +1430,8 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -1492,7 +1495,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" }, "funding": [ { @@ -1512,8 +1515,8 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -1576,7 +1579,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" }, "funding": [ { @@ -1596,8 +1599,8 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -1663,7 +1666,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" }, "funding": [ { @@ -1683,8 +1686,8 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -1749,7 +1752,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" }, "funding": [ { @@ -1769,8 +1772,8 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -1831,7 +1834,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0" }, "funding": [ { @@ -1851,23 +1854,23 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2021-09-13T13:58:33+00:00", + "time": "2022-03-04T08:16:47+00:00", "type": "library", "extra": { "branch-alias": { @@ -1917,7 +1920,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" }, "funding": [ { @@ -1937,8 +1940,8 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -1999,7 +2002,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" }, "funding": [ { @@ -2019,35 +2022,31 @@ }, { "name": "symfony/service-contracts", - "version": "v2.5.0", - "version_normalized": "2.5.0.0", + "version": "v2.2.0", + "version_normalized": "2.2.0.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" - }, - "conflict": { - "ext-psr": "<1.1|>=2" + "psr/container": "^1.0" }, "suggest": { "symfony/service-implementation": "" }, - "time": "2021-11-04T16:48:04+00:00", + "time": "2020-09-07T11:33:47+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -2085,7 +2084,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/master" }, "funding": [ { @@ -2194,17 +2193,17 @@ }, { "name": "symfony/translation", - "version": "v5.4.5", - "version_normalized": "5.4.5.0", + "version": "v5.4.6", + "version_normalized": "5.4.6.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "7e4d52d39e5d86f3f04bef46fa29a1091786bc73" + "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7e4d52d39e5d86f3f04bef46fa29a1091786bc73", - "reference": "7e4d52d39e5d86f3f04bef46fa29a1091786bc73", + "url": "https://api.github.com/repos/symfony/translation/zipball/a7ca9fdfffb0174209440c2ffa1dee228e15d95b", + "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b", "shasum": "" }, "require": { @@ -2243,7 +2242,7 @@ "symfony/config": "", "symfony/yaml": "" }, - "time": "2022-02-09T15:49:12+00:00", + "time": "2022-03-02T12:56:28+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -2274,7 +2273,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.5" + "source": "https://github.com/symfony/translation/tree/v5.4.6" }, "funding": [ { diff --git a/tests/integration/vendor/composer/installed.php b/tests/integration/vendor/composer/installed.php index 144a5b9..8f72636 100644 --- a/tests/integration/vendor/composer/installed.php +++ b/tests/integration/vendor/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'd3018a7656471a5b0c2d3ad2d01f0fa626d28c7e', + 'reference' => 'cbc480eadc87e4f8dcb722ba76e7fe78903b9e60', 'name' => '__root__', 'dev' => true, ), @@ -16,7 +16,7 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'd3018a7656471a5b0c2d3ad2d01f0fa626d28c7e', + 'reference' => 'cbc480eadc87e4f8dcb722ba76e7fe78903b9e60', 'dev_requirement' => false, ), 'behat/behat' => array( @@ -74,12 +74,12 @@ 'dev_requirement' => true, ), 'psr/container' => array( - 'pretty_version' => '1.1.2', - 'version' => '1.1.2.0', + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), - 'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea', + 'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f', 'dev_requirement' => true, ), 'psr/container-implementation' => array( @@ -182,12 +182,12 @@ 'dev_requirement' => true, ), 'symfony/dependency-injection' => array( - 'pretty_version' => 'v5.4.5', - 'version' => '5.4.5.0', + 'pretty_version' => 'v5.2.12', + 'version' => '5.2.12.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/dependency-injection', 'aliases' => array(), - 'reference' => '17f31bc13ef2b577d3c652d71af49d000cbd5894', + 'reference' => '2f0326ab0e142a3600b1b435cb3e852bc96264b6', 'dev_requirement' => true, ), 'symfony/deprecation-contracts' => array( @@ -224,17 +224,17 @@ ), ), 'symfony/filesystem' => array( - 'pretty_version' => 'v5.4.5', - 'version' => '5.4.5.0', + 'pretty_version' => 'v5.4.6', + 'version' => '5.4.6.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), - 'reference' => '797680071ea8f71b94eb958680c50d0e002638f5', + 'reference' => 'd53a45039974952af7f7ebc461ccdd4295e29440', 'dev_requirement' => true, ), 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), @@ -242,8 +242,8 @@ 'dev_requirement' => true, ), 'symfony/polyfill-intl-grapheme' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', 'aliases' => array(), @@ -251,8 +251,8 @@ 'dev_requirement' => true, ), 'symfony/polyfill-intl-normalizer' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', 'aliases' => array(), @@ -260,8 +260,8 @@ 'dev_requirement' => true, ), 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), @@ -269,8 +269,8 @@ 'dev_requirement' => true, ), 'symfony/polyfill-php73' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php73', 'aliases' => array(), @@ -278,17 +278,17 @@ 'dev_requirement' => true, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), - 'reference' => '57b712b08eddb97c762a8caa32c84e037892d2e9', + 'reference' => '4407588e0d3f1f52efb65fbe92babe41f37fe50c', 'dev_requirement' => true, ), 'symfony/polyfill-php81' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php81', 'aliases' => array(), @@ -296,12 +296,12 @@ 'dev_requirement' => true, ), 'symfony/service-contracts' => array( - 'pretty_version' => 'v2.5.0', - 'version' => '2.5.0.0', + 'pretty_version' => 'v2.2.0', + 'version' => '2.2.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), - 'reference' => '1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc', + 'reference' => 'd15da7ba4957ffb8f1747218be9e1a121fd298a1', 'dev_requirement' => true, ), 'symfony/service-implementation' => array( @@ -320,12 +320,12 @@ 'dev_requirement' => true, ), 'symfony/translation' => array( - 'pretty_version' => 'v5.4.5', - 'version' => '5.4.5.0', + 'pretty_version' => 'v5.4.6', + 'version' => '5.4.6.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation', 'aliases' => array(), - 'reference' => '7e4d52d39e5d86f3f04bef46fa29a1091786bc73', + 'reference' => 'a7ca9fdfffb0174209440c2ffa1dee228e15d95b', 'dev_requirement' => true, ), 'symfony/translation-contracts' => array( diff --git a/tests/integration/vendor/composer/platform_check.php b/tests/integration/vendor/composer/platform_check.php new file mode 100644 index 0000000..92370c5 --- /dev/null +++ b/tests/integration/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70300)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/tests/integration/vendor/psr/container/README.md b/tests/integration/vendor/psr/container/README.md index 1b9d9e5..084f6df 100644 --- a/tests/integration/vendor/psr/container/README.md +++ b/tests/integration/vendor/psr/container/README.md @@ -1,13 +1,5 @@ -Container interface -============== +# PSR Container -This repository holds all interfaces related to [PSR-11 (Container Interface)][psr-url]. - -Note that this is not a Container implementation of its own. It is merely abstractions that describe the components of a Dependency Injection Container. - -The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. - -[psr-url]: https://www.php-fig.org/psr/psr-11/ -[package-url]: https://packagist.org/packages/psr/container -[implementation-url]: https://packagist.org/providers/psr/container-implementation +This repository holds all interfaces/classes/traits related to [PSR-11](https://github.com/container-interop/fig-standards/blob/master/proposed/container.md). +Note that this is not a container implementation of its own. See the specification for more details. diff --git a/tests/integration/vendor/psr/container/composer.json b/tests/integration/vendor/psr/container/composer.json index 017f41e..b8ee012 100644 --- a/tests/integration/vendor/psr/container/composer.json +++ b/tests/integration/vendor/psr/container/composer.json @@ -8,15 +8,20 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "homepage": "http://www.php-fig.org/" } ], "require": { - "php": ">=7.4.0" + "php": ">=5.3.0" }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } } } diff --git a/tests/integration/vendor/psr/container/src/ContainerExceptionInterface.php b/tests/integration/vendor/psr/container/src/ContainerExceptionInterface.php index 0f213f2..d35c6b4 100644 --- a/tests/integration/vendor/psr/container/src/ContainerExceptionInterface.php +++ b/tests/integration/vendor/psr/container/src/ContainerExceptionInterface.php @@ -1,12 +1,13 @@ serviceMap[$id]) ? ($this->factory)(...$this->serviceMap[$id]) : parent::get($id); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Attribute/AsTaggedItem.php b/tests/integration/vendor/symfony/dependency-injection/Attribute/AsTaggedItem.php deleted file mode 100644 index 2320336..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Attribute/AsTaggedItem.php +++ /dev/null @@ -1,27 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Attribute; - -/** - * An attribute to tell under which index and priority a service class should be found in tagged iterators/locators. - * - * @author Nicolas Grekas - */ -#[\Attribute(\Attribute::TARGET_CLASS)] -class AsTaggedItem -{ - public function __construct( - public ?string $index = null, - public ?int $priority = null, - ) { - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Attribute/Autoconfigure.php b/tests/integration/vendor/symfony/dependency-injection/Attribute/Autoconfigure.php deleted file mode 100644 index abab040..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Attribute/Autoconfigure.php +++ /dev/null @@ -1,34 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Attribute; - -/** - * An attribute to tell how a base type should be autoconfigured. - * - * @author Nicolas Grekas - */ -#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] -class Autoconfigure -{ - public function __construct( - public ?array $tags = null, - public ?array $calls = null, - public ?array $bind = null, - public bool|string|null $lazy = null, - public ?bool $public = null, - public ?bool $shared = null, - public ?bool $autowire = null, - public ?array $properties = null, - public array|string|null $configurator = null, - ) { - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Attribute/AutoconfigureTag.php b/tests/integration/vendor/symfony/dependency-injection/Attribute/AutoconfigureTag.php deleted file mode 100644 index ed5807c..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Attribute/AutoconfigureTag.php +++ /dev/null @@ -1,30 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Attribute; - -/** - * An attribute to tell how a base type should be tagged. - * - * @author Nicolas Grekas - */ -#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)] -class AutoconfigureTag extends Autoconfigure -{ - public function __construct(string $name = null, array $attributes = []) - { - parent::__construct( - tags: [ - [$name ?? 0 => $attributes], - ] - ); - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Attribute/TaggedIterator.php b/tests/integration/vendor/symfony/dependency-injection/Attribute/TaggedIterator.php deleted file mode 100644 index d498f46..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Attribute/TaggedIterator.php +++ /dev/null @@ -1,24 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Attribute; - -#[\Attribute(\Attribute::TARGET_PARAMETER)] -class TaggedIterator -{ - public function __construct( - public string $tag, - public ?string $indexAttribute = null, - public ?string $defaultIndexMethod = null, - public ?string $defaultPriorityMethod = null, - ) { - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Attribute/TaggedLocator.php b/tests/integration/vendor/symfony/dependency-injection/Attribute/TaggedLocator.php deleted file mode 100644 index 4617e0f..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Attribute/TaggedLocator.php +++ /dev/null @@ -1,24 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Attribute; - -#[\Attribute(\Attribute::TARGET_PARAMETER)] -class TaggedLocator -{ - public function __construct( - public string $tag, - public ?string $indexAttribute = null, - public ?string $defaultIndexMethod = null, - public ?string $defaultPriorityMethod = null, - ) { - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Attribute/Target.php b/tests/integration/vendor/symfony/dependency-injection/Attribute/Target.php deleted file mode 100644 index a7a4d8b..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Attribute/Target.php +++ /dev/null @@ -1,54 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Attribute; - -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; - -/** - * An attribute to tell how a dependency is used and hint named autowiring aliases. - * - * @author Nicolas Grekas - */ -#[\Attribute(\Attribute::TARGET_PARAMETER)] -final class Target -{ - /** - * @var string - */ - public $name; - - public function __construct(string $name) - { - $this->name = lcfirst(str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $name)))); - } - - public static function parseName(\ReflectionParameter $parameter): string - { - if (80000 > \PHP_VERSION_ID || !$target = $parameter->getAttributes(self::class)[0] ?? null) { - return $parameter->name; - } - - $name = $target->newInstance()->name; - - if (!preg_match('/^[a-zA-Z_\x7f-\xff]/', $name)) { - if (($function = $parameter->getDeclaringFunction()) instanceof \ReflectionMethod) { - $function = $function->class.'::'.$function->name; - } else { - $function = $function->name; - } - - throw new InvalidArgumentException(sprintf('Invalid #[Target] name "%s" on parameter "$%s" of "%s()": the first character must be a letter.', $name, $parameter->name, $function)); - } - - return $name; - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Attribute/When.php b/tests/integration/vendor/symfony/dependency-injection/Attribute/When.php deleted file mode 100644 index 3114115..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Attribute/When.php +++ /dev/null @@ -1,26 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Attribute; - -/** - * An attribute to tell under which environement this class should be registered as a service. - * - * @author Nicolas Grekas - */ -#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] -class When -{ - public function __construct( - public string $env, - ) { - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/CHANGELOG.md b/tests/integration/vendor/symfony/dependency-injection/CHANGELOG.md index 88a6df8..4da43e0 100644 --- a/tests/integration/vendor/symfony/dependency-injection/CHANGELOG.md +++ b/tests/integration/vendor/symfony/dependency-injection/CHANGELOG.md @@ -1,32 +1,6 @@ CHANGELOG ========= -5.4 ---- - * Add `$defaultIndexMethod` and `$defaultPriorityMethod` to `TaggedIterator` and `TaggedLocator` attributes - * Add `service_closure()` to the PHP-DSL - * Add support for autoconfigurable attributes on methods, properties and parameters - * Make auto-aliases private by default - * Add support for autowiring union and intersection types - -5.3 ---- - - * Add `ServicesConfigurator::remove()` in the PHP-DSL - * Add `%env(not:...)%` processor to negate boolean values - * Add support for loading autoconfiguration rules via the `#[Autoconfigure]` and `#[AutoconfigureTag]` attributes on PHP 8 - * Add `#[AsTaggedItem]` attribute for defining the index and priority of classes found in tagged iterators/locators - * Add autoconfigurable attributes - * Add support for autowiring tagged iterators and locators via attributes on PHP 8 - * Add support for per-env configuration in XML and Yaml loaders - * Add `ContainerBuilder::willBeAvailable()` to help with conditional configuration - * Add support an integer return value for default_index_method - * Add `#[When(env: 'foo')]` to skip autoregistering a class when the env doesn't match - * Add `env()` and `EnvConfigurator` in the PHP-DSL - * Add support for `ConfigBuilder` in the `PhpFileLoader` - * Add `ContainerConfigurator::env()` to get the current environment - * Add `#[Target]` to tell how a dependency is used and hint named autowiring aliases - 5.2.0 ----- diff --git a/tests/integration/vendor/symfony/dependency-injection/ChildDefinition.php b/tests/integration/vendor/symfony/dependency-injection/ChildDefinition.php index 5c648ba..868cd14 100644 --- a/tests/integration/vendor/symfony/dependency-injection/ChildDefinition.php +++ b/tests/integration/vendor/symfony/dependency-injection/ChildDefinition.php @@ -61,7 +61,7 @@ class ChildDefinition extends Definition * * @param int|string $index * - * @return mixed + * @return mixed The argument value * * @throws OutOfBoundsException When the argument does not exist */ diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php index 362c5f5..85478da 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php @@ -12,7 +12,6 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; -use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\LogicException; @@ -70,7 +69,7 @@ abstract class AbstractRecursivePass implements CompilerPassInterface * * @param mixed $value * - * @return mixed + * @return mixed The processed value */ protected function processValue($value, bool $isRoot = false) { @@ -129,35 +128,25 @@ abstract class AbstractRecursivePass implements CompilerPassInterface if ($factory) { [$class, $method] = $factory; - - if ('__construct' === $method) { - throw new RuntimeException(sprintf('Invalid service "%s": "__construct()" cannot be used as a factory method.', $this->currentId)); - } - if ($class instanceof Reference) { - $factoryDefinition = $this->container->findDefinition((string) $class); - while ((null === $class = $factoryDefinition->getClass()) && $factoryDefinition instanceof ChildDefinition) { - $factoryDefinition = $this->container->findDefinition($factoryDefinition->getParent()); - } + $class = $this->container->findDefinition((string) $class)->getClass(); } elseif ($class instanceof Definition) { $class = $class->getClass(); } elseif (null === $class) { $class = $definition->getClass(); } + if ('__construct' === $method) { + throw new RuntimeException(sprintf('Invalid service "%s": "__construct()" cannot be used as a factory method.', $this->currentId)); + } + return $this->getReflectionMethod(new Definition($class), $method); } - while ((null === $class = $definition->getClass()) && $definition instanceof ChildDefinition) { - $definition = $this->container->findDefinition($definition->getParent()); - } + $class = $definition->getClass(); try { if (!$r = $this->container->getReflectionClass($class)) { - if (null === $class) { - throw new RuntimeException(sprintf('Invalid service "%s": the class is not set.', $this->currentId)); - } - throw new RuntimeException(sprintf('Invalid service "%s": class "%s" does not exist.', $this->currentId, $class)); } } catch (\ReflectionException $e) { @@ -185,11 +174,7 @@ abstract class AbstractRecursivePass implements CompilerPassInterface return $this->getConstructor($definition, true); } - while ((null === $class = $definition->getClass()) && $definition instanceof ChildDefinition) { - $definition = $this->container->findDefinition($definition->getParent()); - } - - if (null === $class) { + if (!$class = $definition->getClass()) { throw new RuntimeException(sprintf('Invalid service "%s": the class is not set.', $this->currentId)); } @@ -198,10 +183,6 @@ abstract class AbstractRecursivePass implements CompilerPassInterface } if (!$r->hasMethod($method)) { - if ($r->hasMethod('__call') && ($r = $r->getMethod('__call')) && $r->isPublic()) { - return new \ReflectionMethod(static function (...$arguments) {}, '__invoke'); - } - throw new RuntimeException(sprintf('Invalid service "%s": method "%s()" does not exist.', $this->currentId, $class !== $this->currentId ? $class.'::'.$method : $method)); } @@ -217,7 +198,7 @@ abstract class AbstractRecursivePass implements CompilerPassInterface { if (null === $this->expressionLanguage) { if (!class_exists(ExpressionLanguage::class)) { - throw new LogicException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed. Try running "composer require symfony/expression-language".'); + throw new LogicException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.'); } $providers = $this->container->getExpressionLanguageProviders(); diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/AliasDeprecatedPublicServicesPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/AliasDeprecatedPublicServicesPass.php index 8d3fefe..a44767d 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/AliasDeprecatedPublicServicesPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/AliasDeprecatedPublicServicesPass.php @@ -23,10 +23,6 @@ final class AliasDeprecatedPublicServicesPass extends AbstractRecursivePass public function __construct(string $tagName = 'container.private') { - if (0 < \func_num_args()) { - trigger_deprecation('symfony/dependency-injection', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - $this->tagName = $tagName; } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/AttributeAutoconfigurationPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/AttributeAutoconfigurationPass.php deleted file mode 100644 index 4db7185..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/AttributeAutoconfigurationPass.php +++ /dev/null @@ -1,168 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\ChildDefinition; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\LogicException; -use Symfony\Component\DependencyInjection\Exception\RuntimeException; - -/** - * @author Alexander M. Turek - */ -final class AttributeAutoconfigurationPass extends AbstractRecursivePass -{ - private $classAttributeConfigurators = []; - private $methodAttributeConfigurators = []; - private $propertyAttributeConfigurators = []; - private $parameterAttributeConfigurators = []; - - public function process(ContainerBuilder $container): void - { - if (80000 > \PHP_VERSION_ID || !$container->getAutoconfiguredAttributes()) { - return; - } - - foreach ($container->getAutoconfiguredAttributes() as $attributeName => $callable) { - $callableReflector = new \ReflectionFunction(\Closure::fromCallable($callable)); - if ($callableReflector->getNumberOfParameters() <= 2) { - $this->classAttributeConfigurators[$attributeName] = $callable; - continue; - } - - $reflectorParameter = $callableReflector->getParameters()[2]; - $parameterType = $reflectorParameter->getType(); - $types = []; - if ($parameterType instanceof \ReflectionUnionType) { - foreach ($parameterType->getTypes() as $type) { - $types[] = $type->getName(); - } - } elseif ($parameterType instanceof \ReflectionNamedType) { - $types[] = $parameterType->getName(); - } else { - throw new LogicException(sprintf('Argument "$%s" of attribute autoconfigurator should have a type, use one or more of "\ReflectionClass|\ReflectionMethod|\ReflectionProperty|\ReflectionParameter|\Reflector" in "%s" on line "%d".', $reflectorParameter->getName(), $callableReflector->getFileName(), $callableReflector->getStartLine())); - } - - try { - $attributeReflector = new \ReflectionClass($attributeName); - } catch (\ReflectionException $e) { - continue; - } - - $targets = $attributeReflector->getAttributes(\Attribute::class)[0] ?? 0; - $targets = $targets ? $targets->getArguments()[0] ?? -1 : 0; - - foreach (['class', 'method', 'property', 'parameter'] as $symbol) { - if (['Reflector'] !== $types) { - if (!\in_array('Reflection'.ucfirst($symbol), $types, true)) { - continue; - } - if (!($targets & \constant('Attribute::TARGET_'.strtoupper($symbol)))) { - throw new LogicException(sprintf('Invalid type "Reflection%s" on argument "$%s": attribute "%s" cannot target a '.$symbol.' in "%s" on line "%d".', ucfirst($symbol), $reflectorParameter->getName(), $attributeName, $callableReflector->getFileName(), $callableReflector->getStartLine())); - } - } - $this->{$symbol.'AttributeConfigurators'}[$attributeName] = $callable; - } - } - - parent::process($container); - } - - protected function processValue($value, bool $isRoot = false) - { - if (!$value instanceof Definition - || !$value->isAutoconfigured() - || $value->isAbstract() - || $value->hasTag('container.ignore_attributes') - || !($classReflector = $this->container->getReflectionClass($value->getClass(), false)) - ) { - return parent::processValue($value, $isRoot); - } - - $instanceof = $value->getInstanceofConditionals(); - $conditionals = $instanceof[$classReflector->getName()] ?? new ChildDefinition(''); - - if ($this->classAttributeConfigurators) { - foreach ($classReflector->getAttributes() as $attribute) { - if ($configurator = $this->classAttributeConfigurators[$attribute->getName()] ?? null) { - $configurator($conditionals, $attribute->newInstance(), $classReflector); - } - } - } - - if ($this->parameterAttributeConfigurators) { - try { - $constructorReflector = $this->getConstructor($value, false); - } catch (RuntimeException $e) { - $constructorReflector = null; - } - - if ($constructorReflector) { - foreach ($constructorReflector->getParameters() as $parameterReflector) { - foreach ($parameterReflector->getAttributes() as $attribute) { - if ($configurator = $this->parameterAttributeConfigurators[$attribute->getName()] ?? null) { - $configurator($conditionals, $attribute->newInstance(), $parameterReflector); - } - } - } - } - } - - if ($this->methodAttributeConfigurators || $this->parameterAttributeConfigurators) { - foreach ($classReflector->getMethods(\ReflectionMethod::IS_PUBLIC) as $methodReflector) { - if ($methodReflector->isStatic() || $methodReflector->isConstructor() || $methodReflector->isDestructor()) { - continue; - } - - if ($this->methodAttributeConfigurators) { - foreach ($methodReflector->getAttributes() as $attribute) { - if ($configurator = $this->methodAttributeConfigurators[$attribute->getName()] ?? null) { - $configurator($conditionals, $attribute->newInstance(), $methodReflector); - } - } - } - - if ($this->parameterAttributeConfigurators) { - foreach ($methodReflector->getParameters() as $parameterReflector) { - foreach ($parameterReflector->getAttributes() as $attribute) { - if ($configurator = $this->parameterAttributeConfigurators[$attribute->getName()] ?? null) { - $configurator($conditionals, $attribute->newInstance(), $parameterReflector); - } - } - } - } - } - } - - if ($this->propertyAttributeConfigurators) { - foreach ($classReflector->getProperties(\ReflectionProperty::IS_PUBLIC) as $propertyReflector) { - if ($propertyReflector->isStatic()) { - continue; - } - - foreach ($propertyReflector->getAttributes() as $attribute) { - if ($configurator = $this->propertyAttributeConfigurators[$attribute->getName()] ?? null) { - $configurator($conditionals, $attribute->newInstance(), $propertyReflector); - } - } - } - } - - if (!isset($instanceof[$classReflector->getName()]) && new ChildDefinition('') != $conditionals) { - $instanceof[$classReflector->getName()] = $conditionals; - $value->setInstanceofConditionals($instanceof); - } - - return parent::processValue($value, $isRoot); - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/AutoAliasServicePass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/AutoAliasServicePass.php index b150e70..0342068 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/AutoAliasServicePass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/AutoAliasServicePass.php @@ -20,8 +20,6 @@ use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; */ class AutoAliasServicePass implements CompilerPassInterface { - private $privateAliases = []; - /** * {@inheritdoc} */ @@ -35,26 +33,9 @@ class AutoAliasServicePass implements CompilerPassInterface $aliasId = $container->getParameterBag()->resolveValue($tag['format']); if ($container->hasDefinition($aliasId) || $container->hasAlias($aliasId)) { - $alias = new Alias($aliasId, $container->getDefinition($serviceId)->isPublic()); - $container->setAlias($serviceId, $alias); - - if (!$alias->isPublic()) { - $alias->setPublic(true); - $this->privateAliases[] = $alias; - } + $container->setAlias($serviceId, new Alias($aliasId, true)); } } } } - - /** - * @internal to be removed in Symfony 6.0 - */ - public function getPrivateAliases(): array - { - $privateAliases = $this->privateAliases; - $this->privateAliases = []; - - return $privateAliases; - } } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/AutowirePass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/AutowirePass.php index c2b8077..052cfc4 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/AutowirePass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/AutowirePass.php @@ -12,11 +12,6 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\Config\Resource\ClassExistenceResource; -use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; -use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; -use Symfony\Component\DependencyInjection\Attribute\TaggedIterator; -use Symfony\Component\DependencyInjection\Attribute\TaggedLocator; -use Symfony\Component\DependencyInjection\Attribute\Target; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\AutowiringFailedException; @@ -34,26 +29,19 @@ class AutowirePass extends AbstractRecursivePass { private $types; private $ambiguousServiceTypes; - private $autowiringAliases; private $lastFailure; private $throwOnAutowiringException; private $decoratedClass; private $decoratedId; private $methodCalls; - private $defaultArgument; private $getPreviousValue; private $decoratedMethodIndex; private $decoratedMethodArgumentIndex; private $typesClone; - private $combinedAliases; public function __construct(bool $throwOnAutowireException = true) { $this->throwOnAutowiringException = $throwOnAutowireException; - $this->defaultArgument = new class() { - public $value; - public $names; - }; } /** @@ -61,8 +49,6 @@ class AutowirePass extends AbstractRecursivePass */ public function process(ContainerBuilder $container) { - $this->populateCombinedAliases($container); - try { $this->typesClone = clone $this; parent::process($container); @@ -70,12 +56,10 @@ class AutowirePass extends AbstractRecursivePass $this->decoratedClass = null; $this->decoratedId = null; $this->methodCalls = null; - $this->defaultArgument->names = null; $this->getPreviousValue = null; $this->decoratedMethodIndex = null; $this->decoratedMethodArgumentIndex = null; $this->typesClone = null; - $this->combinedAliases = []; } } @@ -103,7 +87,7 @@ class AutowirePass extends AbstractRecursivePass private function doProcessValue($value, bool $isRoot = false) { if ($value instanceof TypedReference) { - if ($ref = $this->getAutowiredReference($value, true)) { + if ($ref = $this->getAutowiredReference($value)) { return $ref; } if (ContainerBuilder::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE === $value->getInvalidBehavior()) { @@ -139,8 +123,7 @@ class AutowirePass extends AbstractRecursivePass array_unshift($this->methodCalls, [$constructor, $value->getArguments()]); } - $checkAttributes = 80000 <= \PHP_VERSION_ID && !$value->hasTag('container.ignore_attributes'); - $this->methodCalls = $this->autowireCalls($reflectionClass, $isRoot, $checkAttributes); + $this->methodCalls = $this->autowireCalls($reflectionClass, $isRoot); if ($constructor) { [, $arguments] = array_shift($this->methodCalls); @@ -157,7 +140,7 @@ class AutowirePass extends AbstractRecursivePass return $value; } - private function autowireCalls(\ReflectionClass $reflectionClass, bool $isRoot, bool $checkAttributes): array + private function autowireCalls(\ReflectionClass $reflectionClass, bool $isRoot): array { $this->decoratedId = null; $this->decoratedClass = null; @@ -167,9 +150,8 @@ class AutowirePass extends AbstractRecursivePass $this->decoratedClass = $this->container->findDefinition($this->decoratedId)->getClass(); } - $patchedIndexes = []; - foreach ($this->methodCalls as $i => $call) { + $this->decoratedMethodIndex = $i; [$method, $arguments] = $call; if ($method instanceof \ReflectionFunctionAbstract) { @@ -186,48 +168,24 @@ class AutowirePass extends AbstractRecursivePass } } - $arguments = $this->autowireMethod($reflectionMethod, $arguments, $checkAttributes, $i); + $arguments = $this->autowireMethod($reflectionMethod, $arguments); if ($arguments !== $call[1]) { $this->methodCalls[$i][1] = $arguments; - $patchedIndexes[] = $i; } } - // use named arguments to skip complex default values - foreach ($patchedIndexes as $i) { - $namedArguments = null; - $arguments = $this->methodCalls[$i][1]; - - foreach ($arguments as $j => $value) { - if ($namedArguments && !$value instanceof $this->defaultArgument) { - unset($arguments[$j]); - $arguments[$namedArguments[$j]] = $value; - } - if ($namedArguments || !$value instanceof $this->defaultArgument) { - continue; - } - - if (\PHP_VERSION_ID >= 80100 && (\is_array($value->value) ? $value->value : \is_object($value->value))) { - unset($arguments[$j]); - $namedArguments = $value->names; - } else { - $arguments[$j] = $value->value; - } - } - - $this->methodCalls[$i][1] = $arguments; - } - return $this->methodCalls; } /** * Autowires the constructor or a method. * + * @return array The autowired arguments + * * @throws AutowiringFailedException */ - private function autowireMethod(\ReflectionFunctionAbstract $reflectionMethod, array $arguments, bool $checkAttributes, int $methodIndex): array + private function autowireMethod(\ReflectionFunctionAbstract $reflectionMethod, array $arguments): array { $class = $reflectionMethod instanceof \ReflectionMethod ? $reflectionMethod->class : $this->currentId; $method = $reflectionMethod->name; @@ -235,37 +193,14 @@ class AutowirePass extends AbstractRecursivePass if ($reflectionMethod->isVariadic()) { array_pop($parameters); } - $this->defaultArgument->names = new \ArrayObject(); foreach ($parameters as $index => $parameter) { - $this->defaultArgument->names[$index] = $parameter->name; - if (\array_key_exists($index, $arguments) && '' !== $arguments[$index]) { continue; } $type = ProxyHelper::getTypeHint($reflectionMethod, $parameter, true); - if ($checkAttributes) { - foreach ($parameter->getAttributes() as $attribute) { - if (TaggedIterator::class === $attribute->getName()) { - $attribute = $attribute->newInstance(); - $arguments[$index] = new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, false, $attribute->defaultPriorityMethod); - break; - } - - if (TaggedLocator::class === $attribute->getName()) { - $attribute = $attribute->newInstance(); - $arguments[$index] = new ServiceLocatorArgument(new TaggedIteratorArgument($attribute->tag, $attribute->indexAttribute, $attribute->defaultIndexMethod, true, $attribute->defaultPriorityMethod)); - break; - } - } - - if ('' !== ($arguments[$index] ?? '')) { - continue; - } - } - if (!$type) { if (isset($arguments[$index])) { continue; @@ -277,8 +212,7 @@ class AutowirePass extends AbstractRecursivePass // be false when isOptional() returns true. If the // argument *is* optional, allow it to be missing if ($parameter->isOptional()) { - --$index; - break; + continue; } $type = ProxyHelper::getTypeHint($reflectionMethod, $parameter, false); $type = $type ? sprintf('is type-hinted "%s"', ltrim($type, '\\')) : 'has no type-hint'; @@ -287,19 +221,17 @@ class AutowirePass extends AbstractRecursivePass } // specifically pass the default value - $arguments[$index] = clone $this->defaultArgument; - $arguments[$index]->value = $parameter->getDefaultValue(); + $arguments[$index] = $parameter->getDefaultValue(); continue; } $getValue = function () use ($type, $parameter, $class, $method) { - if (!$value = $this->getAutowiredReference($ref = new TypedReference($type, $type, ContainerBuilder::EXCEPTION_ON_INVALID_REFERENCE, Target::parseName($parameter)), true)) { + if (!$value = $this->getAutowiredReference($ref = new TypedReference($type, $type, ContainerBuilder::EXCEPTION_ON_INVALID_REFERENCE, $parameter->name))) { $failureMessage = $this->createTypeNotFoundMessageCallback($ref, sprintf('argument "$%s" of method "%s()"', $parameter->name, $class !== $this->currentId ? $class.'::'.$method : $method)); if ($parameter->isDefaultValueAvailable()) { - $value = clone $this->defaultArgument; - $value->value = $parameter->getDefaultValue(); + $value = $parameter->getDefaultValue(); } elseif (!$parameter->allowsNull()) { throw new AutowiringFailedException($this->currentId, $failureMessage); } @@ -320,7 +252,6 @@ class AutowirePass extends AbstractRecursivePass } else { $arguments[$index] = new TypedReference($this->decoratedId, $this->decoratedClass); $this->getPreviousValue = $getValue; - $this->decoratedMethodIndex = $methodIndex; $this->decoratedMethodArgumentIndex = $index; continue; @@ -332,7 +263,8 @@ class AutowirePass extends AbstractRecursivePass if ($parameters && !isset($arguments[++$index])) { while (0 <= --$index) { - if (!$arguments[$index] instanceof $this->defaultArgument) { + $parameter = $parameters[$index]; + if (!$parameter->isDefaultValueAvailable() || $parameter->getDefaultValue() !== $arguments[$index]) { break; } unset($arguments[$index]); @@ -349,7 +281,7 @@ class AutowirePass extends AbstractRecursivePass /** * Returns a reference to the service matching the given type, if any. */ - private function getAutowiredReference(TypedReference $reference, bool $filterType): ?TypedReference + private function getAutowiredReference(TypedReference $reference): ?TypedReference { $this->lastFailure = null; $type = $reference->getType(); @@ -358,25 +290,13 @@ class AutowirePass extends AbstractRecursivePass return $reference; } - if ($filterType && false !== $m = strpbrk($type, '&|')) { - $types = array_diff(explode($m[0], $type), ['int', 'string', 'array', 'bool', 'float', 'iterable', 'object', 'callable', 'null']); - - sort($types); - - $type = implode($m[0], $types); - } - if (null !== $name = $reference->getName()) { if ($this->container->has($alias = $type.' $'.$name) && !$this->container->findDefinition($alias)->isAbstract()) { return new TypedReference($alias, $type, $reference->getInvalidBehavior()); } - if (null !== ($alias = $this->combinedAliases[$alias] ?? null) && !$this->container->findDefinition($alias)->isAbstract()) { - return new TypedReference($alias, $type, $reference->getInvalidBehavior()); - } - if ($this->container->has($name) && !$this->container->findDefinition($name)->isAbstract()) { - foreach ($this->container->getAliases() + $this->combinedAliases as $id => $alias) { + foreach ($this->container->getAliases() as $id => $alias) { if ($name === (string) $alias && str_starts_with($id, $type.' $')) { return new TypedReference($name, $type, $reference->getInvalidBehavior()); } @@ -388,10 +308,6 @@ class AutowirePass extends AbstractRecursivePass return new TypedReference($type, $type, $reference->getInvalidBehavior()); } - if (null !== ($alias = $this->combinedAliases[$type] ?? null) && !$this->container->findDefinition($alias)->isAbstract()) { - return new TypedReference($alias, $type, $reference->getInvalidBehavior()); - } - return null; } @@ -402,15 +318,10 @@ class AutowirePass extends AbstractRecursivePass { $this->types = []; $this->ambiguousServiceTypes = []; - $this->autowiringAliases = []; foreach ($container->getDefinitions() as $id => $definition) { $this->populateAvailableType($container, $id, $definition); } - - foreach ($container->getAliases() as $id => $alias) { - $this->populateAutowiringAlias($id); - } } /** @@ -434,8 +345,6 @@ class AutowirePass extends AbstractRecursivePass do { $this->set($reflectionClass->name, $id); } while ($reflectionClass = $reflectionClass->getParentClass()); - - $this->populateAutowiringAlias($id); } /** @@ -525,10 +434,6 @@ class AutowirePass extends AbstractRecursivePass } $servicesAndAliases = $container->getServiceIds(); - if (null !== ($autowiringAliases = $this->autowiringAliases[$type] ?? null) && !isset($autowiringAliases[''])) { - return sprintf(' Available autowiring aliases for this %s are: "$%s".', class_exists($type, false) ? 'class' : 'interface', implode('", "$', $autowiringAliases)); - } - if (!$container->has($type) && false !== $key = array_search(strtolower($type), array_map('strtolower', $servicesAndAliases))) { return sprintf(' Did you mean "%s"?', $servicesAndAliases[$key]); } elseif (isset($this->ambiguousServiceTypes[$type])) { @@ -567,59 +472,4 @@ class AutowirePass extends AbstractRecursivePass return null; } - - private function populateAutowiringAlias(string $id): void - { - if (!preg_match('/(?(DEFINE)(?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+))^((?&V)(?:\\\\(?&V))*+)(?: \$((?&V)))?$/', $id, $m)) { - return; - } - - $type = $m[2]; - $name = $m[3] ?? ''; - - if (class_exists($type, false) || interface_exists($type, false)) { - $this->autowiringAliases[$type][$name] = $name; - } - } - - private function populateCombinedAliases(ContainerBuilder $container): void - { - $this->combinedAliases = []; - $reverseAliases = []; - - foreach ($container->getAliases() as $id => $alias) { - if (!preg_match('/(?(DEFINE)(?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+))^((?&V)(?:\\\\(?&V))*+)(?: \$((?&V)))?$/', $id, $m)) { - continue; - } - - $type = $m[2]; - $name = $m[3] ?? ''; - $reverseAliases[(string) $alias][$name][] = $type; - } - - foreach ($reverseAliases as $alias => $names) { - foreach ($names as $name => $types) { - if (2 > $count = \count($types)) { - continue; - } - sort($types); - $i = 1 << $count; - - // compute the powerset of the list of types - while ($i--) { - $set = []; - for ($j = 0; $j < $count; ++$j) { - if ($i & (1 << $j)) { - $set[] = $types[$j]; - } - } - - if (2 <= \count($set)) { - $this->combinedAliases[implode('&', $set).('' === $name ? '' : ' $'.$name)] = $alias; - $this->combinedAliases[implode('|', $set).('' === $name ? '' : ' $'.$name)] = $alias; - } - } - } - } - } } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php index 93808b2..348498d 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php @@ -39,13 +39,7 @@ class CheckArgumentsValidityPass extends AbstractRecursivePass } $i = 0; - $hasNamedArgs = false; foreach ($value->getArguments() as $k => $v) { - if (\PHP_VERSION_ID >= 80000 && preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $k)) { - $hasNamedArgs = true; - continue; - } - if ($k !== $i++) { if (!\is_int($k)) { $msg = sprintf('Invalid constructor argument for service "%s": integer expected but found string "%s". Check your service definition.', $this->currentId, $k); @@ -63,27 +57,11 @@ class CheckArgumentsValidityPass extends AbstractRecursivePass throw new RuntimeException($msg); } } - - if ($hasNamedArgs) { - $msg = sprintf('Invalid constructor argument for service "%s": cannot use positional argument after named argument. Check your service definition.', $this->currentId); - $value->addError($msg); - if ($this->throwExceptions) { - throw new RuntimeException($msg); - } - - break; - } } foreach ($value->getMethodCalls() as $methodCall) { $i = 0; - $hasNamedArgs = false; foreach ($methodCall[1] as $k => $v) { - if (\PHP_VERSION_ID >= 80000 && preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $k)) { - $hasNamedArgs = true; - continue; - } - if ($k !== $i++) { if (!\is_int($k)) { $msg = sprintf('Invalid argument for method call "%s" of service "%s": integer expected but found string "%s". Check your service definition.', $methodCall[0], $this->currentId, $k); @@ -101,16 +79,6 @@ class CheckArgumentsValidityPass extends AbstractRecursivePass throw new RuntimeException($msg); } } - - if ($hasNamedArgs) { - $msg = sprintf('Invalid argument for method call "%s" of service "%s": cannot use positional argument after named argument. Check your service definition.', $methodCall[0], $this->currentId); - $value->addError($msg); - if ($this->throwExceptions) { - throw new RuntimeException($msg); - } - - break; - } } } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php index 6fe564a..7abac90 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php @@ -44,7 +44,7 @@ class CheckDefinitionValidityPass implements CompilerPassInterface } // non-synthetic, non-abstract service has class - if (!$definition->isAbstract() && !$definition->isSynthetic() && !$definition->getClass() && !$definition->hasTag('container.service_locator') && (!$definition->getFactory() || !preg_match(FileLoader::ANONYMOUS_ID_REGEXP, $id))) { + if (!$definition->isAbstract() && !$definition->isSynthetic() && !$definition->getClass() && (!$definition->getFactory() || !preg_match(FileLoader::ANONYMOUS_ID_REGEXP, $id))) { if ($definition->getFactory()) { throw new RuntimeException(sprintf('Please add the class to service "%s" even if it is constructed by a factory since we might need to add method calls based on compile-time checks.', $id)); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckTypeDeclarationsPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckTypeDeclarationsPass.php index b7ec85c..f8ec921 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckTypeDeclarationsPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/CheckTypeDeclarationsPass.php @@ -210,10 +210,6 @@ final class CheckTypeDeclarationsPass extends AbstractRecursivePass $class = null; if ($value instanceof Definition) { - if ($value->getFactory()) { - return; - } - $class = $value->getClass(); if ($class && isset(self::BUILTIN_TYPES[strtolower($class)])) { diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/Compiler.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/Compiler.php index 4c5d003..f656607 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/Compiler.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/Compiler.php @@ -32,7 +32,9 @@ class Compiler } /** - * @return PassConfig + * Returns the PassConfig. + * + * @return PassConfig The PassConfig instance */ public function getPassConfig() { @@ -40,13 +42,18 @@ class Compiler } /** - * @return ServiceReferenceGraph + * Returns the ServiceReferenceGraph. + * + * @return ServiceReferenceGraph The ServiceReferenceGraph instance */ public function getServiceReferenceGraph() { return $this->serviceReferenceGraph; } + /** + * Adds a pass to the PassConfig. + */ public function addPass(CompilerPassInterface $pass, string $type = PassConfig::TYPE_BEFORE_OPTIMIZATION, int $priority = 0) { $this->passConfig->addPass($pass, $type, $priority); @@ -65,7 +72,9 @@ class Compiler } /** - * @return array + * Returns the log. + * + * @return array Log array */ public function getLog() { diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php index 0284587..0c3f75a 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php @@ -31,10 +31,6 @@ class DecoratorServicePass extends AbstractRecursivePass public function __construct(?string $innerId = '.inner') { - if (0 < \func_num_args()) { - trigger_deprecation('symfony/dependency-injection', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - $this->innerId = $innerId; } @@ -73,11 +69,13 @@ class DecoratorServicePass extends AbstractRecursivePass if ($container->hasAlias($inner)) { $alias = $container->getAlias($inner); $public = $alias->isPublic(); + $private = $alias->isPrivate(); $container->setAlias($renamedId, new Alias((string) $alias, false)); $decoratedDefinition = $container->findDefinition($alias); } elseif ($container->hasDefinition($inner)) { $decoratedDefinition = $container->getDefinition($inner); $public = $decoratedDefinition->isPublic(); + $private = $decoratedDefinition->isPrivate(); $decoratedDefinition->setPublic(false); $container->setDefinition($renamedId, $decoratedDefinition); $decoratingDefinitions[$inner] = $decoratedDefinition; @@ -86,6 +84,7 @@ class DecoratorServicePass extends AbstractRecursivePass continue; } elseif (ContainerInterface::NULL_ON_INVALID_REFERENCE === $invalidBehavior) { $public = $definition->isPublic(); + $private = $definition->isPrivate(); $decoratedDefinition = null; } else { throw new ServiceNotFoundException($inner, $id); diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php index 00ebdfe..fe7d29e 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php @@ -110,7 +110,7 @@ class InlineServiceDefinitionsPass extends AbstractRecursivePass protected function processValue($value, bool $isRoot = false) { if ($value instanceof ArgumentInterface) { - // References found in ArgumentInterface::getValues() are not inlineable + // Reference found in ArgumentInterface::getValues() are not inlineable return $value; } @@ -176,7 +176,7 @@ class InlineServiceDefinitionsPass extends AbstractRecursivePass $srcId = $edge->getSourceNode()->getId(); $this->connectedIds[$srcId] = true; if ($edge->isWeak() || $edge->isLazy()) { - return !$this->connectedIds[$id] = true; + return false; } } @@ -198,7 +198,9 @@ class InlineServiceDefinitionsPass extends AbstractRecursivePass $srcIds = []; $srcCount = 0; + $isReferencedByConstructor = false; foreach ($this->graph->getNode($id)->getInEdges() as $edge) { + $isReferencedByConstructor = $isReferencedByConstructor || $edge->isReferencedByConstructor(); $srcId = $edge->getSourceNode()->getId(); $this->connectedIds[$srcId] = true; if ($edge->isWeak() || $edge->isLazy()) { diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php index 9dc3931..feaad77 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php @@ -79,6 +79,10 @@ class MergeExtensionConfigurationPass implements CompilerPassInterface $container->getParameterBag()->mergeEnvPlaceholders($resolvingBag); } + if ($configAvailable) { + BaseNode::resetPlaceholders(); + } + throw $e; } @@ -91,6 +95,10 @@ class MergeExtensionConfigurationPass implements CompilerPassInterface $container->getParameterBag()->add($parameters); } + if ($configAvailable) { + BaseNode::resetPlaceholders(); + } + $container->addDefinitions($definitions); $container->addAliases($aliases); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/PassConfig.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/PassConfig.php index 9f9a56e..961711f 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/PassConfig.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/PassConfig.php @@ -42,8 +42,6 @@ class PassConfig $this->beforeOptimizationPasses = [ 100 => [ new ResolveClassPass(), - new RegisterAutoconfigureAttributesPass(), - new AttributeAutoconfigurationPass(), new ResolveInstanceofConditionalsPass(), new RegisterEnvVarProcessorsPass(), ], @@ -51,7 +49,7 @@ class PassConfig ]; $this->optimizationPasses = [[ - $autoAliasServicePass = new AutoAliasServicePass(), + new AutoAliasServicePass(), new ValidateEnvPlaceholdersPass(), new ResolveDecoratorStackPass(), new ResolveChildDefinitionsPass(), @@ -66,7 +64,6 @@ class PassConfig new DecoratorServicePass(), new CheckDefinitionValidityPass(), new AutowirePass(false), - new ServiceLocatorTagPass(), new ResolveTaggedIteratorArgumentPass(), new ResolveServiceSubscribersPass(), new ResolveReferencesToAliasesPass(), @@ -79,7 +76,7 @@ class PassConfig $this->removingPasses = [[ new RemovePrivateAliasesPass(), - (new ReplaceAliasByActualDefinitionPass())->setAutoAliasServicePass($autoAliasServicePass), + new ReplaceAliasByActualDefinitionPass(), new RemoveAbstractDefinitionsPass(), new RemoveUnusedDefinitionsPass(), new AnalyzeServiceReferencesPass(), diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php index 8c4d841..806545b 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php @@ -12,7 +12,6 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; -use Symfony\Component\DependencyInjection\Attribute\AsTaggedItem; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Reference; @@ -57,10 +56,8 @@ trait PriorityTaggedServiceTrait foreach ($container->findTaggedServiceIds($tagName, true) as $serviceId => $attributes) { $defaultPriority = null; $defaultIndex = null; - $definition = $container->getDefinition($serviceId); - $class = $definition->getClass(); + $class = $container->getDefinition($serviceId)->getClass(); $class = $container->getParameterBag()->resolveValue($class) ?: null; - $checkTaggedItem = !$definition->hasTag(80000 <= \PHP_VERSION_ID && $definition->isAutoconfigured() ? 'container.ignore_attributes' : $tagName); foreach ($attributes as $attribute) { $index = $priority = null; @@ -68,7 +65,7 @@ trait PriorityTaggedServiceTrait if (isset($attribute['priority'])) { $priority = $attribute['priority']; } elseif (null === $defaultPriority && $defaultPriorityMethod && $class) { - $defaultPriority = PriorityTaggedServiceUtil::getDefault($container, $serviceId, $class, $defaultPriorityMethod, $tagName, 'priority', $checkTaggedItem); + $defaultPriority = PriorityTaggedServiceUtil::getDefaultPriority($container, $serviceId, $class, $defaultPriorityMethod, $tagName); } $priority = $priority ?? $defaultPriority ?? $defaultPriority = 0; @@ -80,7 +77,7 @@ trait PriorityTaggedServiceTrait if (null !== $indexAttribute && isset($attribute[$indexAttribute])) { $index = $attribute[$indexAttribute]; } elseif (null === $defaultIndex && $defaultPriorityMethod && $class) { - $defaultIndex = PriorityTaggedServiceUtil::getDefault($container, $serviceId, $class, $defaultIndexMethod ?? 'getDefaultName', $tagName, $indexAttribute, $checkTaggedItem); + $defaultIndex = PriorityTaggedServiceUtil::getDefaultIndex($container, $serviceId, $class, $defaultIndexMethod ?? 'getDefaultName', $tagName, $indexAttribute); } $index = $index ?? $defaultIndex ?? $defaultIndex = $serviceId; @@ -117,30 +114,22 @@ trait PriorityTaggedServiceTrait class PriorityTaggedServiceUtil { /** - * @return string|int|null + * Gets the index defined by the default index method. */ - public static function getDefault(ContainerBuilder $container, string $serviceId, string $class, string $defaultMethod, string $tagName, ?string $indexAttribute, bool $checkTaggedItem) + public static function getDefaultIndex(ContainerBuilder $container, string $serviceId, string $class, string $defaultIndexMethod, string $tagName, ?string $indexAttribute): ?string { - if (!($r = $container->getReflectionClass($class)) || (!$checkTaggedItem && !$r->hasMethod($defaultMethod))) { - return null; - } - - if ($checkTaggedItem && !$r->hasMethod($defaultMethod)) { - foreach ($r->getAttributes(AsTaggedItem::class) as $attribute) { - return 'priority' === $indexAttribute ? $attribute->newInstance()->priority : $attribute->newInstance()->index; - } - + if (!($r = $container->getReflectionClass($class)) || !$r->hasMethod($defaultIndexMethod)) { return null; } if (null !== $indexAttribute) { $service = $class !== $serviceId ? sprintf('service "%s"', $serviceId) : 'on the corresponding service'; - $message = [sprintf('Either method "%s::%s()" should ', $class, $defaultMethod), sprintf(' or tag "%s" on %s is missing attribute "%s".', $tagName, $service, $indexAttribute)]; + $message = [sprintf('Either method "%s::%s()" should ', $class, $defaultIndexMethod), sprintf(' or tag "%s" on %s is missing attribute "%s".', $tagName, $service, $indexAttribute)]; } else { - $message = [sprintf('Method "%s::%s()" should ', $class, $defaultMethod), '.']; + $message = [sprintf('Method "%s::%s()" should ', $class, $defaultIndexMethod), '.']; } - if (!($rm = $r->getMethod($defaultMethod))->isStatic()) { + if (!($rm = $r->getMethod($defaultIndexMethod))->isStatic()) { throw new InvalidArgumentException(implode('be static', $message)); } @@ -148,24 +137,38 @@ class PriorityTaggedServiceUtil throw new InvalidArgumentException(implode('be public', $message)); } - $default = $rm->invoke(null); + $defaultIndex = $rm->invoke(null); - if ('priority' === $indexAttribute) { - if (!\is_int($default)) { - throw new InvalidArgumentException(implode(sprintf('return int (got "%s")', get_debug_type($default)), $message)); - } - - return $default; + if (!\is_string($defaultIndex)) { + throw new InvalidArgumentException(implode(sprintf('return a string (got "%s")', get_debug_type($defaultIndex)), $message)); } - if (\is_int($default)) { - $default = (string) $default; + return $defaultIndex; + } + + /** + * Gets the priority defined by the default priority method. + */ + public static function getDefaultPriority(ContainerBuilder $container, string $serviceId, string $class, string $defaultPriorityMethod, string $tagName): ?int + { + if (!($r = $container->getReflectionClass($class)) || !$r->hasMethod($defaultPriorityMethod)) { + return null; } - if (!\is_string($default)) { - throw new InvalidArgumentException(implode(sprintf('return string|int (got "%s")', get_debug_type($default)), $message)); + if (!($rm = $r->getMethod($defaultPriorityMethod))->isStatic()) { + throw new InvalidArgumentException(sprintf('Either method "%s::%s()" should be static or tag "%s" on service "%s" is missing attribute "priority".', $class, $defaultPriorityMethod, $tagName, $serviceId)); } - return $default; + if (!$rm->isPublic()) { + throw new InvalidArgumentException(sprintf('Either method "%s::%s()" should be public or tag "%s" on service "%s" is missing attribute "priority".', $class, $defaultPriorityMethod, $tagName, $serviceId)); + } + + $defaultPriority = $rm->invoke(null); + + if (!\is_int($defaultPriority)) { + throw new InvalidArgumentException(sprintf('Method "%s::%s()" should return an integer (got "%s") or tag "%s" on service "%s" is missing attribute "priority".', $class, $defaultPriorityMethod, get_debug_type($defaultPriority), $tagName, $serviceId)); + } + + return $defaultPriority; } } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterAutoconfigureAttributesPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterAutoconfigureAttributesPass.php deleted file mode 100644 index 08befc4..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterAutoconfigureAttributesPass.php +++ /dev/null @@ -1,91 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\Attribute\Autoconfigure; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; - -/** - * Reads #[Autoconfigure] attributes on definitions that are autoconfigured - * and don't have the "container.ignore_attributes" tag. - * - * @author Nicolas Grekas - */ -final class RegisterAutoconfigureAttributesPass implements CompilerPassInterface -{ - private static $registerForAutoconfiguration; - - /** - * {@inheritdoc} - */ - public function process(ContainerBuilder $container) - { - if (80000 > \PHP_VERSION_ID) { - return; - } - - foreach ($container->getDefinitions() as $id => $definition) { - if ($this->accept($definition) && $class = $container->getReflectionClass($definition->getClass(), false)) { - $this->processClass($container, $class); - } - } - } - - public function accept(Definition $definition): bool - { - return 80000 <= \PHP_VERSION_ID && $definition->isAutoconfigured() && !$definition->hasTag('container.ignore_attributes'); - } - - public function processClass(ContainerBuilder $container, \ReflectionClass $class) - { - foreach ($class->getAttributes(Autoconfigure::class, \ReflectionAttribute::IS_INSTANCEOF) as $attribute) { - self::registerForAutoconfiguration($container, $class, $attribute); - } - } - - private static function registerForAutoconfiguration(ContainerBuilder $container, \ReflectionClass $class, \ReflectionAttribute $attribute) - { - if (self::$registerForAutoconfiguration) { - return (self::$registerForAutoconfiguration)($container, $class, $attribute); - } - - $parseDefinitions = new \ReflectionMethod(YamlFileLoader::class, 'parseDefinitions'); - $parseDefinitions->setAccessible(true); - $yamlLoader = $parseDefinitions->getDeclaringClass()->newInstanceWithoutConstructor(); - - self::$registerForAutoconfiguration = static function (ContainerBuilder $container, \ReflectionClass $class, \ReflectionAttribute $attribute) use ($parseDefinitions, $yamlLoader) { - $attribute = (array) $attribute->newInstance(); - - foreach ($attribute['tags'] ?? [] as $i => $tag) { - if (\is_array($tag) && [0] === array_keys($tag)) { - $attribute['tags'][$i] = [$class->name => $tag[0]]; - } - } - - $parseDefinitions->invoke( - $yamlLoader, - [ - 'services' => [ - '_instanceof' => [ - $class->name => [$container->registerForAutoconfiguration($class->name)] + $attribute, - ], - ], - ], - $class->getFileName() - ); - }; - - return (self::$registerForAutoconfiguration)($container, $class, $attribute); - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterReverseContainerPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterReverseContainerPass.php index c5eb9bf..571eab3 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterReverseContainerPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterReverseContainerPass.php @@ -28,10 +28,6 @@ class RegisterReverseContainerPass implements CompilerPassInterface public function __construct(bool $beforeRemoving, string $serviceId = 'reverse_container', string $tagName = 'container.reversible') { - if (1 < \func_num_args()) { - trigger_deprecation('symfony/dependency-injection', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - $this->beforeRemoving = $beforeRemoving; $this->serviceId = $serviceId; $this->tagName = $tagName; diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php index 2a458ad..c292c23 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php @@ -12,14 +12,12 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Psr\Container\ContainerInterface as PsrContainerInterface; -use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\Argument\BoundArgument; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\TypedReference; -use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Contracts\Service\ServiceProviderInterface; use Symfony\Contracts\Service\ServiceSubscriberInterface; @@ -68,11 +66,11 @@ class RegisterServiceSubscribersPass extends AbstractRecursivePass throw new InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $this->currentId, ServiceSubscriberInterface::class)); } $class = $r->name; - $replaceDeprecatedSession = $this->container->has('.session.deprecated') && $r->isSubclassOf(AbstractController::class); + $subscriberMap = []; foreach ($class::getSubscribedServices() as $key => $type) { - if (!\is_string($type) || !preg_match('/(?(DEFINE)(?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+))(?(DEFINE)(?(?&cn)(?:\\\\(?&cn))*+))^\??(?&fqcn)(?:(?:\|(?&fqcn))*+|(?:&(?&fqcn))*+)$/', $type)) { + if (!\is_string($type) || !preg_match('/^\??[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)*+$/', $type)) { throw new InvalidArgumentException(sprintf('"%s::getSubscribedServices()" must return valid PHP types for service "%s" key "%s", "%s" returned.', $class, $this->currentId, $key, \is_string($type) ? $type : get_debug_type($type))); } if ($optionalBehavior = '?' === $type[0]) { @@ -87,11 +85,6 @@ class RegisterServiceSubscribersPass extends AbstractRecursivePass if (!$autowire) { throw new InvalidArgumentException(sprintf('Service "%s" misses a "container.service_subscriber" tag with "key"/"id" attributes corresponding to entry "%s" as returned by "%s::getSubscribedServices()".', $this->currentId, $key, $class)); } - if ($replaceDeprecatedSession && SessionInterface::class === $type) { - // This prevents triggering the deprecation when building the container - // Should be removed in Symfony 6.0 - $type = '.session.deprecated'; - } $serviceMap[$key] = new Reference($type); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php index bb2ba0d..18e69fd 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php @@ -25,19 +25,6 @@ use Symfony\Component\DependencyInjection\Reference; class ReplaceAliasByActualDefinitionPass extends AbstractRecursivePass { private $replacements; - private $autoAliasServicePass; - - /** - * @internal to be removed in Symfony 6.0 - * - * @return $this - */ - public function setAutoAliasServicePass(AutoAliasServicePass $autoAliasServicePass): self - { - $this->autoAliasServicePass = $autoAliasServicePass; - - return $this; - } /** * Process the Container to replace aliases with service definitions. @@ -49,25 +36,15 @@ class ReplaceAliasByActualDefinitionPass extends AbstractRecursivePass // First collect all alias targets that need to be replaced $seenAliasTargets = []; $replacements = []; - - $privateAliases = $this->autoAliasServicePass ? $this->autoAliasServicePass->getPrivateAliases() : []; - foreach ($privateAliases as $target) { - $target->setDeprecated('symfony/dependency-injection', '5.4', 'Accessing the "%alias_id%" service directly from the container is deprecated, use dependency injection instead.'); - } - foreach ($container->getAliases() as $definitionId => $target) { $targetId = (string) $target; // Special case: leave this target alone if ('service_container' === $targetId) { continue; } - // Check if target needs to be replaced + // Check if target needs to be replaces if (isset($replacements[$targetId])) { $container->setAlias($definitionId, $replacements[$targetId])->setPublic($target->isPublic()); - - if ($target->isDeprecated()) { - $container->getAlias($definitionId)->setDeprecated(...array_values($target->getDeprecation('%alias_id%'))); - } } // No need to process the same target twice if (isset($seenAliasTargets[$targetId])) { @@ -92,10 +69,6 @@ class ReplaceAliasByActualDefinitionPass extends AbstractRecursivePass $container->setDefinition($definitionId, $definition); $container->removeDefinition($targetId); $replacements[$targetId] = $definitionId; - - if ($target->isPublic() && $target->isDeprecated()) { - $definition->addTag('container.private', $target->getDeprecation('%service_id%')); - } } $this->replacements = $replacements; diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php index 5bc3791..91cba00 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php @@ -14,7 +14,6 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Argument\BoundArgument; use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; -use Symfony\Component\DependencyInjection\Attribute\Target; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; @@ -126,7 +125,7 @@ class ResolveBindingsPass extends AbstractRecursivePass $this->unusedBindings[$bindingId] = [$key, $this->currentId, $bindingType, $file]; } - if (preg_match('/^(?:(?:array|bool|float|int|string|iterable|([^ $]++)) )\$/', $key, $m)) { + if (preg_match('/^(?:(?:array|bool|float|int|string|([^ $]++)) )\$/', $key, $m)) { $bindingNames[substr($key, \strlen($m[0]))] = $binding; } @@ -134,11 +133,6 @@ class ResolveBindingsPass extends AbstractRecursivePass continue; } - if (is_subclass_of($m[1], \UnitEnum::class)) { - $bindingNames[substr($key, \strlen($m[0]))] = $binding; - continue; - } - if (null !== $bindingValue && !$bindingValue instanceof Reference && !$bindingValue instanceof Definition && !$bindingValue instanceof TaggedIteratorArgument && !$bindingValue instanceof ServiceLocatorArgument) { throw new InvalidArgumentException(sprintf('Invalid value for binding key "%s" for service "%s": expected "%s", "%s", "%s", "%s" or null, "%s" given.', $key, $this->currentId, Reference::class, Definition::class, TaggedIteratorArgument::class, ServiceLocatorArgument::class, get_debug_type($bindingValue))); } @@ -183,16 +177,15 @@ class ResolveBindingsPass extends AbstractRecursivePass } $typeHint = ProxyHelper::getTypeHint($reflectionMethod, $parameter); - $name = Target::parseName($parameter); - if ($typeHint && \array_key_exists($k = ltrim($typeHint, '\\').' $'.$name, $bindings)) { + if ($typeHint && \array_key_exists($k = ltrim($typeHint, '\\').' $'.$parameter->name, $bindings)) { $arguments[$key] = $this->getBindingValue($bindings[$k]); continue; } - if (\array_key_exists('$'.$name, $bindings)) { - $arguments[$key] = $this->getBindingValue($bindings['$'.$name]); + if (\array_key_exists('$'.$parameter->name, $bindings)) { + $arguments[$key] = $this->getBindingValue($bindings['$'.$parameter->name]); continue; } @@ -203,7 +196,7 @@ class ResolveBindingsPass extends AbstractRecursivePass continue; } - if (isset($bindingNames[$name]) || isset($bindingNames[$parameter->name])) { + if (isset($bindingNames[$parameter->name])) { $bindingKey = array_search($binding, $bindings, true); $argumentType = substr($bindingKey, 0, strpos($bindingKey, ' ')); $this->errorMessages[] = sprintf('Did you forget to add the type "%s" to argument "$%s" of method "%s::%s()"?', $argumentType, $parameter->name, $reflectionMethod->class, $reflectionMethod->name); diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php index 46a2d78..a1b2c86 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php @@ -115,8 +115,6 @@ class ResolveChildDefinitionsPass extends AbstractRecursivePass $def->setBindings($definition->getBindings() + $parentDef->getBindings()); - $def->setSynthetic($definition->isSynthetic()); - // overwrite with values specified in the decorator $changes = $definition->getChanges(); if (isset($changes['class'])) { diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveDecoratorStackPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveDecoratorStackPass.php index 4914b3a..61202ad 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveDecoratorStackPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveDecoratorStackPass.php @@ -28,10 +28,6 @@ class ResolveDecoratorStackPass implements CompilerPassInterface public function __construct(string $tag = 'container.stack') { - if (0 < \func_num_args()) { - trigger_deprecation('symfony/dependency-injection', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - $this->tag = $tag; } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveHotPathPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveHotPathPass.php index dee2dc6..f6942c4 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveHotPathPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveHotPathPass.php @@ -28,10 +28,6 @@ class ResolveHotPathPass extends AbstractRecursivePass public function __construct(string $tagName = 'container.hot_path') { - if (0 < \func_num_args()) { - trigger_deprecation('symfony/dependency-injection', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - $this->tagName = $tagName; } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveNoPreloadPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveNoPreloadPass.php index 016be55..50c35df 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveNoPreloadPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/ResolveNoPreloadPass.php @@ -29,10 +29,6 @@ class ResolveNoPreloadPass extends AbstractRecursivePass public function __construct(string $tagName = 'container.no_preload') { - if (0 < \func_num_args()) { - trigger_deprecation('symfony/dependency-injection', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - $this->tagName = $tagName; } diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php index faa7b57..b872bdc 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php @@ -14,7 +14,6 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; -use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; @@ -48,19 +47,14 @@ final class ServiceLocatorTagPass extends AbstractRecursivePass $value->setClass(ServiceLocator::class); } - $services = $value->getArguments()[0] ?? null; - - if ($services instanceof TaggedIteratorArgument) { - $services = $this->findAndSortTaggedServices($services, $this->container); - } - - if (!\is_array($services)) { + $arguments = $value->getArguments(); + if (!isset($arguments[0]) || !\is_array($arguments[0])) { throw new InvalidArgumentException(sprintf('Invalid definition for service "%s": an array of references is expected as first argument when the "container.service_locator" tag is set.', $this->currentId)); } $i = 0; - foreach ($services as $k => $v) { + foreach ($arguments[0] as $k => $v) { if ($v instanceof ServiceClosureArgument) { continue; } @@ -69,18 +63,18 @@ final class ServiceLocatorTagPass extends AbstractRecursivePass } if ($i === $k) { - unset($services[$k]); + unset($arguments[0][$k]); $k = (string) $v; ++$i; } elseif (\is_int($k)) { $i = null; } - $services[$k] = new ServiceClosureArgument($v); + $arguments[0][$k] = new ServiceClosureArgument($v); } - ksort($services); + ksort($arguments[0]); - $value->setArgument(0, $services); + $value->setArguments($arguments); $id = '.service_locator.'.ContainerBuilder::hash($value); @@ -108,6 +102,7 @@ final class ServiceLocatorTagPass extends AbstractRecursivePass } $refMap[$id] = new ServiceClosureArgument($ref); } + ksort($refMap); $locator = (new Definition(ServiceLocator::class)) ->addArgument($refMap) diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php index ba96da2..fec1424 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php @@ -51,7 +51,7 @@ class ServiceReferenceGraphNode /** * Checks if the value of this node is an Alias. * - * @return bool + * @return bool True if the value is an Alias instance */ public function isAlias() { @@ -61,7 +61,7 @@ class ServiceReferenceGraphNode /** * Checks if the value of this node is a Definition. * - * @return bool + * @return bool True if the value is a Definition instance */ public function isDefinition() { @@ -101,7 +101,7 @@ class ServiceReferenceGraphNode /** * Returns the value of this Node. * - * @return mixed + * @return mixed The value */ public function getValue() { diff --git a/tests/integration/vendor/symfony/dependency-injection/Compiler/ValidateEnvPlaceholdersPass.php b/tests/integration/vendor/symfony/dependency-injection/Compiler/ValidateEnvPlaceholdersPass.php index 23bfe59..88c7851 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Compiler/ValidateEnvPlaceholdersPass.php +++ b/tests/integration/vendor/symfony/dependency-injection/Compiler/ValidateEnvPlaceholdersPass.php @@ -48,42 +48,46 @@ class ValidateEnvPlaceholdersPass implements CompilerPassInterface $defaultBag = new ParameterBag($resolvingBag->all()); $envTypes = $resolvingBag->getProvidedTypes(); - foreach ($resolvingBag->getEnvPlaceholders() + $resolvingBag->getUnusedEnvPlaceholders() as $env => $placeholders) { - $values = []; - if (false === $i = strpos($env, ':')) { - $default = $defaultBag->has("env($env)") ? $defaultBag->get("env($env)") : self::TYPE_FIXTURES['string']; - $defaultType = null !== $default ? get_debug_type($default) : 'string'; - $values[$defaultType] = $default; - } else { - $prefix = substr($env, 0, $i); - foreach ($envTypes[$prefix] ?? ['string'] as $type) { - $values[$type] = self::TYPE_FIXTURES[$type] ?? null; + try { + foreach ($resolvingBag->getEnvPlaceholders() + $resolvingBag->getUnusedEnvPlaceholders() as $env => $placeholders) { + $values = []; + if (false === $i = strpos($env, ':')) { + $default = $defaultBag->has("env($env)") ? $defaultBag->get("env($env)") : self::TYPE_FIXTURES['string']; + $defaultType = null !== $default ? get_debug_type($default) : 'string'; + $values[$defaultType] = $default; + } else { + $prefix = substr($env, 0, $i); + foreach ($envTypes[$prefix] ?? ['string'] as $type) { + $values[$type] = self::TYPE_FIXTURES[$type] ?? null; + } + } + foreach ($placeholders as $placeholder) { + BaseNode::setPlaceholder($placeholder, $values); } } - foreach ($placeholders as $placeholder) { - BaseNode::setPlaceholder($placeholder, $values); + + $processor = new Processor(); + + foreach ($extensions as $name => $extension) { + if (!($extension instanceof ConfigurationExtensionInterface || $extension instanceof ConfigurationInterface) + || !$config = array_filter($container->getExtensionConfig($name)) + ) { + // this extension has no semantic configuration or was not called + continue; + } + + $config = $resolvingBag->resolveValue($config); + + if ($extension instanceof ConfigurationInterface) { + $configuration = $extension; + } elseif (null === $configuration = $extension->getConfiguration($config, $container)) { + continue; + } + + $this->extensionConfig[$name] = $processor->processConfiguration($configuration, $config); } - } - - $processor = new Processor(); - - foreach ($extensions as $name => $extension) { - if (!($extension instanceof ConfigurationExtensionInterface || $extension instanceof ConfigurationInterface) - || !$config = array_filter($container->getExtensionConfig($name)) - ) { - // this extension has no semantic configuration or was not called - continue; - } - - $config = $resolvingBag->resolveValue($config); - - if ($extension instanceof ConfigurationInterface) { - $configuration = $extension; - } elseif (null === $configuration = $extension->getConfiguration($config, $container)) { - continue; - } - - $this->extensionConfig[$name] = $processor->processConfiguration($configuration, $config); + } finally { + BaseNode::resetPlaceholders(); } $resolvingBag->clearUnusedEnvPlaceholders(); diff --git a/tests/integration/vendor/symfony/dependency-injection/Config/ContainerParametersResource.php b/tests/integration/vendor/symfony/dependency-injection/Config/ContainerParametersResource.php index c10398b..52b3030 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Config/ContainerParametersResource.php +++ b/tests/integration/vendor/symfony/dependency-injection/Config/ContainerParametersResource.php @@ -37,6 +37,9 @@ class ContainerParametersResource implements ResourceInterface return 'container_parameters_'.md5(serialize($this->parameters)); } + /** + * @return array Tracked parameters + */ public function getParameters(): array { return $this->parameters; diff --git a/tests/integration/vendor/symfony/dependency-injection/Container.php b/tests/integration/vendor/symfony/dependency-injection/Container.php index 6f61eb8..d2793f1 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Container.php +++ b/tests/integration/vendor/symfony/dependency-injection/Container.php @@ -97,7 +97,7 @@ class Container implements ContainerInterface, ResetInterface /** * Gets the service container parameter bag. * - * @return ParameterBagInterface + * @return ParameterBagInterface A ParameterBagInterface instance */ public function getParameterBag() { @@ -107,7 +107,7 @@ class Container implements ContainerInterface, ResetInterface /** * Gets a parameter. * - * @return array|bool|string|int|float|\UnitEnum|null + * @return array|bool|string|int|float|null * * @throws InvalidArgumentException if the parameter is not defined */ @@ -117,7 +117,7 @@ class Container implements ContainerInterface, ResetInterface } /** - * @return bool + * @return bool The presence of parameter in container */ public function hasParameter(string $name) { @@ -127,8 +127,8 @@ class Container implements ContainerInterface, ResetInterface /** * Sets a parameter. * - * @param string $name The parameter name - * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value + * @param string $name The parameter name + * @param array|bool|string|int|float|null $value The parameter value */ public function setParameter(string $name, $value) { @@ -184,9 +184,9 @@ class Container implements ContainerInterface, ResetInterface * * @param string $id The service identifier * - * @return bool + * @return bool true if the service is defined, false otherwise */ - public function has(string $id) + public function has($id) { if (isset($this->aliases[$id])) { $id = $this->aliases[$id]; @@ -204,7 +204,7 @@ class Container implements ContainerInterface, ResetInterface /** * Gets a service. * - * @return object|null + * @return object|null The associated service * * @throws ServiceCircularReferenceException When a circular reference is detected * @throws ServiceNotFoundException When the service is not defined @@ -212,7 +212,7 @@ class Container implements ContainerInterface, ResetInterface * * @see Reference */ - public function get(string $id, int $invalidBehavior = /* self::EXCEPTION_ON_INVALID_REFERENCE */ 1) + public function get($id, int $invalidBehavior = /* self::EXCEPTION_ON_INVALID_REFERENCE */ 1) { return $this->services[$id] ?? $this->services[$id = $this->aliases[$id] ?? $id] @@ -277,7 +277,7 @@ class Container implements ContainerInterface, ResetInterface /** * Returns true if the given service has actually been initialized. * - * @return bool + * @return bool true if service has already been initialized, false otherwise */ public function initialized(string $id) { @@ -314,7 +314,7 @@ class Container implements ContainerInterface, ResetInterface /** * Gets all service ids. * - * @return string[] + * @return string[] An array of all defined service ids */ public function getServiceIds() { @@ -334,7 +334,7 @@ class Container implements ContainerInterface, ResetInterface /** * Camelizes a string. * - * @return string + * @return string The camelized string */ public static function camelize(string $id) { @@ -344,7 +344,7 @@ class Container implements ContainerInterface, ResetInterface /** * A string to underscore. * - * @return string + * @return string The underscored string */ public static function underscore(string $id) { @@ -362,7 +362,7 @@ class Container implements ContainerInterface, ResetInterface /** * Fetches a variable from the environment. * - * @return mixed + * @return mixed The value to use for the provided environment variable name * * @throws EnvNotFoundException When the environment variable is not found and has no default value */ diff --git a/tests/integration/vendor/symfony/dependency-injection/ContainerBuilder.php b/tests/integration/vendor/symfony/dependency-injection/ContainerBuilder.php index 485630a..266c3bf 100644 --- a/tests/integration/vendor/symfony/dependency-injection/ContainerBuilder.php +++ b/tests/integration/vendor/symfony/dependency-injection/ContainerBuilder.php @@ -11,7 +11,6 @@ namespace Symfony\Component\DependencyInjection; -use Composer\InstalledVersions; use Psr\Container\ContainerInterface as PsrContainerInterface; use Symfony\Component\Config\Resource\ClassExistenceResource; use Symfony\Component\Config\Resource\ComposerResource; @@ -27,7 +26,6 @@ use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; use Symfony\Component\DependencyInjection\Argument\ServiceLocator; use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; -use Symfony\Component\DependencyInjection\Attribute\Target; use Symfony\Component\DependencyInjection\Compiler\Compiler; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Compiler\PassConfig; @@ -55,33 +53,30 @@ use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface; class ContainerBuilder extends Container implements TaggedContainerInterface { /** - * @var array + * @var ExtensionInterface[] */ private $extensions = []; /** - * @var array + * @var ExtensionInterface[] */ private $extensionsByNs = []; /** - * @var array + * @var Definition[] */ private $definitions = []; /** - * @var array + * @var Alias[] */ private $aliasDefinitions = []; /** - * @var array + * @var ResourceInterface[] */ private $resources = []; - /** - * @var array>> - */ private $extensionConfigs = []; /** @@ -89,9 +84,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ private $compiler; - /** - * @var bool - */ private $trackResources; /** @@ -129,24 +121,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ private $vendors; - /** - * @var array - */ private $autoconfiguredInstanceof = []; - /** - * @var array - */ - private $autoconfiguredAttributes = []; - - /** - * @var array - */ private $removedIds = []; - /** - * @var array - */ private $removedBindingIds = []; private const INTERNAL_TYPES = [ @@ -174,7 +152,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } /** - * @var array + * @var \ReflectionClass[] a list of class reflectors */ private $classReflectors; @@ -192,7 +170,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Checks if resources are tracked. * - * @return bool + * @return bool true If resources are tracked, false otherwise */ public function isTrackingResources() { @@ -219,7 +197,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Returns an extension by alias or namespace. * - * @return ExtensionInterface + * @return ExtensionInterface An extension instance * * @throws LogicException if the extension is not registered */ @@ -239,7 +217,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Returns all registered extensions. * - * @return array + * @return ExtensionInterface[] An array of ExtensionInterface */ public function getExtensions() { @@ -249,7 +227,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Checks if we have an extension. * - * @return bool + * @return bool If the extension exists */ public function hasExtension(string $name) { @@ -259,7 +237,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Returns an array of resources loaded to build this configuration. * - * @return ResourceInterface[] + * @return ResourceInterface[] An array of resources */ public function getResources() { @@ -287,7 +265,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Sets the resources for this configuration. * - * @param array $resources + * @param ResourceInterface[] $resources An array of resources * * @return $this */ @@ -432,8 +410,8 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Loads the configuration for an extension. * - * @param string $extension The extension alias or namespace - * @param array|null $values An array of values that customizes the extension + * @param string $extension The extension alias or namespace + * @param array $values An array of values that customizes the extension * * @return $this * @@ -446,9 +424,13 @@ class ContainerBuilder extends Container implements TaggedContainerInterface throw new BadMethodCallException('Cannot load from an extension on a compiled container.'); } + if (\func_num_args() < 2) { + $values = []; + } + $namespace = $this->getExtension($extension)->getAlias(); - $this->extensionConfigs[$namespace][] = $values ?? []; + $this->extensionConfigs[$namespace][] = $values; return $this; } @@ -473,7 +455,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Returns the compiler pass config which can then be modified. * - * @return PassConfig + * @return PassConfig The compiler pass config */ public function getCompilerPassConfig() { @@ -483,7 +465,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Returns the compiler. * - * @return Compiler + * @return Compiler The compiler */ public function getCompiler() { @@ -527,15 +509,17 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * * @param string $id The service identifier * - * @return bool + * @return bool true if the service is defined, false otherwise */ - public function has(string $id) + public function has($id) { + $id = (string) $id; + return isset($this->definitions[$id]) || isset($this->aliasDefinitions[$id]) || parent::has($id); } /** - * @return object|null + * @return object|null The associated service * * @throws InvalidArgumentException when no definitions are available * @throws ServiceCircularReferenceException When a circular reference is detected @@ -544,9 +528,9 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * * @see Reference */ - public function get(string $id, int $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) + public function get($id, int $invalidBehavior = ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) { - if ($this->isCompiled() && isset($this->removedIds[$id]) && ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE >= $invalidBehavior) { + if ($this->isCompiled() && isset($this->removedIds[$id = (string) $id]) && ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE >= $invalidBehavior) { return parent::get($id); } @@ -682,20 +666,12 @@ class ContainerBuilder extends Container implements TaggedContainerInterface $this->autoconfiguredInstanceof[$interface] = $childDefinition; } - - foreach ($container->getAutoconfiguredAttributes() as $attribute => $configurator) { - if (isset($this->autoconfiguredAttributes[$attribute])) { - throw new InvalidArgumentException(sprintf('"%s" has already been autoconfigured and merge() does not support merging autoconfiguration for the same attribute.', $attribute)); - } - - $this->autoconfiguredAttributes[$attribute] = $configurator; - } } /** * Returns the configuration array for the given extension. * - * @return array> + * @return array An array of configuration */ public function getExtensionConfig(string $name) { @@ -708,8 +684,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Prepends a config array to the configs of the given extension. - * - * @param array $config */ public function prependExtensionConfig(string $name, array $config) { @@ -792,7 +766,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Gets removed service or alias ids. * - * @return array + * @return array */ public function getRemovedIds() { @@ -801,8 +775,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Adds the service aliases. - * - * @param array $aliases */ public function addAliases(array $aliases) { @@ -813,8 +785,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Sets the service aliases. - * - * @param array $aliases */ public function setAliases(array $aliases) { @@ -846,7 +816,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } if ($alias === (string) $id) { - throw new InvalidArgumentException(sprintf('An alias cannot reference itself, got a circular reference on "%s".', $alias)); + throw new InvalidArgumentException(sprintf('An alias can not reference itself, got a circular reference on "%s".', $alias)); } unset($this->definitions[$alias], $this->removedIds[$alias]); @@ -863,7 +833,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } /** - * @return bool + * @return bool true if the alias exists, false otherwise */ public function hasAlias(string $id) { @@ -871,7 +841,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } /** - * @return array + * @return Alias[] An array of aliases */ public function getAliases() { @@ -879,7 +849,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface } /** - * @return Alias + * @return Alias An Alias instance * * @throws InvalidArgumentException if the alias does not exist */ @@ -898,7 +868,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * This methods allows for simple registration of service definition * with a fluid interface. * - * @return Definition + * @return Definition A Definition instance */ public function register(string $id, string $class = null) { @@ -911,7 +881,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * This method implements a shortcut for using setDefinition() with * an autowired definition. * - * @return Definition + * @return Definition The created definition */ public function autowire(string $id, string $class = null) { @@ -921,7 +891,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Adds the service definitions. * - * @param array $definitions + * @param Definition[] $definitions An array of service definitions */ public function addDefinitions(array $definitions) { @@ -933,7 +903,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Sets the service definitions. * - * @param array $definitions + * @param Definition[] $definitions An array of service definitions */ public function setDefinitions(array $definitions) { @@ -944,7 +914,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Gets all service definitions. * - * @return array + * @return Definition[] An array of Definition instances */ public function getDefinitions() { @@ -954,7 +924,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Sets a service definition. * - * @return Definition + * @return Definition the service definition * * @throws BadMethodCallException When this ContainerBuilder is compiled */ @@ -976,7 +946,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Returns true if a service definition exists under the given identifier. * - * @return bool + * @return bool true if the service definition exists, false otherwise */ public function hasDefinition(string $id) { @@ -986,7 +956,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Gets a service definition. * - * @return Definition + * @return Definition A Definition instance * * @throws ServiceNotFoundException if the service definition does not exist */ @@ -1004,7 +974,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * * The method "unaliases" recursively to return a Definition instance. * - * @return Definition + * @return Definition A Definition instance * * @throws ServiceNotFoundException if the service definition does not exist */ @@ -1031,7 +1001,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Creates a service for a service definition. * - * @return mixed + * @return mixed The service described by the service definition * * @throws RuntimeException When the factory definition is incomplete * @throws RuntimeException When the service is a synthetic service @@ -1159,7 +1129,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Replaces service references by the real service instance and evaluates expressions. * - * @param mixed $value + * @param mixed $value A value * * @return mixed The same value with all service references replaced by * the real service instances and all expressions evaluated @@ -1253,7 +1223,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * } * } * - * @return array An array of tags with the tagged service as key, holding a list of attribute arrays + * @return array An array of tags with the tagged service as key, holding a list of attribute arrays */ public function findTaggedServiceIds(string $name, bool $throwOnAbstract = false) { @@ -1274,22 +1244,22 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Returns all tags the defined services use. * - * @return string[] + * @return array An array of tags */ public function findTags() { $tags = []; foreach ($this->getDefinitions() as $id => $definition) { - $tags[] = array_keys($definition->getTags()); + $tags = array_merge(array_keys($definition->getTags()), $tags); } - return array_unique(array_merge([], ...$tags)); + return array_unique($tags); } /** * Returns all tags not queried by findTaggedServiceIds. * - * @return string[] + * @return string[] An array of tags */ public function findUnusedTags() { @@ -1323,24 +1293,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $this->autoconfiguredInstanceof[$interface]; } - /** - * Registers an attribute that will be used for autoconfiguring annotated classes. - * - * The third argument passed to the callable is the reflector of the - * class/method/property/parameter that the attribute targets. Using one or many of - * \ReflectionClass|\ReflectionMethod|\ReflectionProperty|\ReflectionParameter as a type-hint - * for this argument allows filtering which attributes should be passed to the callable. - * - * @template T - * - * @param class-string $attributeClass - * @param callable(ChildDefinition, T, \Reflector): void $configurator - */ - public function registerAttributeForAutoconfiguration(string $attributeClass, callable $configurator): void - { - $this->autoconfiguredAttributes[$attributeClass] = $configurator; - } - /** * Registers an autowiring alias that only binds to a specific argument name. * @@ -1351,7 +1303,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface */ public function registerAliasForArgument(string $id, string $type, string $name = null): Alias { - $name = (new Target($name ?? $id))->name; + $name = lcfirst(str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $name ?? $id)))); if (!preg_match('/^[a-zA-Z_\x7f-\xff]/', $name)) { throw new InvalidArgumentException(sprintf('Invalid argument name "%s" for service "%s": the first character must be a letter.', $name, $id)); @@ -1363,21 +1315,13 @@ class ContainerBuilder extends Container implements TaggedContainerInterface /** * Returns an array of ChildDefinition[] keyed by interface. * - * @return array + * @return ChildDefinition[] */ public function getAutoconfiguredInstanceof() { return $this->autoconfiguredInstanceof; } - /** - * @return array - */ - public function getAutoconfiguredAttributes(): array - { - return $this->autoconfiguredAttributes; - } - /** * Resolves env parameter placeholders in a string or an array. * @@ -1413,7 +1357,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface return $result; } - if (!\is_string($value) || 38 > \strlen($value) || !preg_match('/env[_(]/i', $value)) { + if (!\is_string($value) || 38 > \strlen($value)) { return $value; } $envPlaceholders = $bag instanceof EnvPlaceholderParameterBag ? $bag->getEnvPlaceholders() : $this->envPlaceholders; @@ -1476,51 +1420,9 @@ class ContainerBuilder extends Container implements TaggedContainerInterface $this->getCompiler()->log($pass, $this->resolveEnvPlaceholders($message)); } - /** - * Checks whether a class is available and will remain available in the "no-dev" mode of Composer. - * - * When parent packages are provided and if any of them is in dev-only mode, - * the class will be considered available even if it is also in dev-only mode. - */ - final public static function willBeAvailable(string $package, string $class, array $parentPackages): bool - { - $skipDeprecation = 3 < \func_num_args() && func_get_arg(3); - $hasRuntimeApi = class_exists(InstalledVersions::class); - - if (!$hasRuntimeApi && !$skipDeprecation) { - trigger_deprecation('symfony/dependency-injection', '5.4', 'Calling "%s" when dependencies have been installed with Composer 1 is deprecated. Consider upgrading to Composer 2.', __METHOD__); - } - - if (!class_exists($class) && !interface_exists($class, false) && !trait_exists($class, false)) { - return false; - } - - if (!$hasRuntimeApi || !InstalledVersions::isInstalled($package) || InstalledVersions::isInstalled($package, false)) { - return true; - } - - // the package is installed but in dev-mode only, check if this applies to one of the parent packages too - - $rootPackage = InstalledVersions::getRootPackage()['name'] ?? ''; - - if ('symfony/symfony' === $rootPackage) { - return true; - } - - foreach ($parentPackages as $parentPackage) { - if ($rootPackage === $parentPackage || (InstalledVersions::isInstalled($parentPackage) && !InstalledVersions::isInstalled($parentPackage, false))) { - return true; - } - } - - return false; - } - /** * Gets removed binding ids. * - * @return array - * * @internal */ public function getRemovedBindingIds(): array @@ -1548,8 +1450,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * * @param mixed $value An array of conditionals to return * - * @return string[] - * * @internal */ public static function getServiceConditionals($value): array @@ -1572,8 +1472,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface * * @param mixed $value An array of conditionals to return * - * @return string[] - * * @internal */ public static function getInitializedConditionals($value): array diff --git a/tests/integration/vendor/symfony/dependency-injection/ContainerInterface.php b/tests/integration/vendor/symfony/dependency-injection/ContainerInterface.php index 3a44b99..a3b0891 100644 --- a/tests/integration/vendor/symfony/dependency-injection/ContainerInterface.php +++ b/tests/integration/vendor/symfony/dependency-injection/ContainerInterface.php @@ -41,29 +41,31 @@ interface ContainerInterface extends PsrContainerInterface * @param string $id The service identifier * @param int $invalidBehavior The behavior when the service does not exist * - * @return object|null + * @return object|null The associated service * * @throws ServiceCircularReferenceException When a circular reference is detected * @throws ServiceNotFoundException When the service is not defined * * @see Reference */ - public function get(string $id, int $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE); + public function get($id, int $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE); /** - * @return bool + * @param string $id The service identifier + * + * @return bool true if the service is defined, false otherwise */ - public function has(string $id); + public function has($id); /** * Check for whether or not a service has been initialized. * - * @return bool + * @return bool true if the service has been initialized, false otherwise */ public function initialized(string $id); /** - * @return array|bool|string|int|float|\UnitEnum|null + * @return array|bool|string|int|float|null * * @throws InvalidArgumentException if the parameter is not defined */ @@ -77,8 +79,8 @@ interface ContainerInterface extends PsrContainerInterface /** * Sets a parameter. * - * @param string $name The parameter name - * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value + * @param string $name The parameter name + * @param array|bool|string|int|float|null $value The parameter value */ public function setParameter(string $name, $value); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Definition.php b/tests/integration/vendor/symfony/dependency-injection/Definition.php index 7fc6752..90f8f88 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Definition.php +++ b/tests/integration/vendor/symfony/dependency-injection/Definition.php @@ -72,7 +72,7 @@ class Definition /** * Returns all changes tracked for the Definition object. * - * @return array + * @return array An array of changes for this Definition */ public function getChanges() { @@ -146,7 +146,7 @@ class Definition if (null === $id) { $this->decoratedService = null; } else { - $this->decoratedService = [$id, $renamedId, $priority]; + $this->decoratedService = [$id, $renamedId, (int) $priority]; if (ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE !== $invalidBehavior) { $this->decoratedService[] = $invalidBehavior; @@ -183,7 +183,7 @@ class Definition /** * Gets the service class. * - * @return string|null + * @return string|null The service class */ public function getClass() { @@ -265,15 +265,15 @@ class Definition public function replaceArgument($index, $argument) { if (0 === \count($this->arguments)) { - throw new OutOfBoundsException(sprintf('Cannot replace arguments for class "%s" if none have been configured yet.', $this->class)); + throw new OutOfBoundsException('Cannot replace arguments if none have been configured yet.'); } if (\is_int($index) && ($index < 0 || $index > \count($this->arguments) - 1)) { - throw new OutOfBoundsException(sprintf('The index "%d" is not in the range [0, %d] of the arguments of class "%s".', $index, \count($this->arguments) - 1, $this->class)); + throw new OutOfBoundsException(sprintf('The index "%d" is not in the range [0, %d].', $index, \count($this->arguments) - 1)); } if (!\array_key_exists($index, $this->arguments)) { - throw new OutOfBoundsException(sprintf('The argument "%s" doesn\'t exist in class "%s".', $index, $this->class)); + throw new OutOfBoundsException(sprintf('The argument "%s" doesn\'t exist.', $index)); } $this->arguments[$index] = $argument; @@ -299,7 +299,7 @@ class Definition /** * Gets the arguments to pass to the service constructor/factory method. * - * @return array + * @return array The array of arguments */ public function getArguments() { @@ -311,14 +311,14 @@ class Definition * * @param int|string $index * - * @return mixed + * @return mixed The argument value * * @throws OutOfBoundsException When the argument does not exist */ public function getArgument($index) { if (!\array_key_exists($index, $this->arguments)) { - throw new OutOfBoundsException(sprintf('The argument "%s" doesn\'t exist in class "%s".', $index, $this->class)); + throw new OutOfBoundsException(sprintf('The argument "%s" doesn\'t exist.', $index)); } return $this->arguments[$index]; @@ -395,7 +395,7 @@ class Definition /** * Gets the methods to call after service initialization. * - * @return array + * @return array An array of method calls */ public function getMethodCalls() { @@ -463,7 +463,7 @@ class Definition /** * Returns all tags. * - * @return array + * @return array An array of tags */ public function getTags() { @@ -473,7 +473,7 @@ class Definition /** * Gets a tag by name. * - * @return array + * @return array An array of attributes */ public function getTag(string $name) { @@ -543,7 +543,7 @@ class Definition /** * Gets the file to require before creating the service. * - * @return string|null + * @return string|null The full pathname to include */ public function getFile() { @@ -812,7 +812,7 @@ class Definition /** * Gets the configurator to call after the service is fully initialized. * - * @return string|array|null + * @return callable|array|null */ public function getConfigurator() { @@ -846,7 +846,7 @@ class Definition /** * Gets bindings. * - * @return BoundArgument[] + * @return array|BoundArgument[] */ public function getBindings() { diff --git a/tests/integration/vendor/symfony/dependency-injection/Dumper/DumperInterface.php b/tests/integration/vendor/symfony/dependency-injection/Dumper/DumperInterface.php index a00f30b..8abc192 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Dumper/DumperInterface.php +++ b/tests/integration/vendor/symfony/dependency-injection/Dumper/DumperInterface.php @@ -21,7 +21,7 @@ interface DumperInterface /** * Dumps the service container. * - * @return string|array + * @return string|array The representation of the service container */ public function dump(array $options = []); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php b/tests/integration/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php index e8ca838..09836cd 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php +++ b/tests/integration/vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php @@ -54,7 +54,7 @@ class GraphvizDumper extends Dumper * * node.definition: The default options for services that are defined via service definition instances * * node.missing: The default options for missing services * - * @return string + * @return string The dot representation of the service container */ public function dump(array $options = []) { @@ -130,22 +130,23 @@ class GraphvizDumper extends Dumper $lazyEdge = $lazy || $this->container->getDefinition((string) $argument)->isLazy(); } - $edges[] = [['name' => $name, 'required' => $required, 'to' => $argument, 'lazy' => $lazyEdge]]; + $edges[] = ['name' => $name, 'required' => $required, 'to' => $argument, 'lazy' => $lazyEdge]; } elseif ($argument instanceof ArgumentInterface) { - $edges[] = $this->findEdges($id, $argument->getValues(), $required, $name, true); + $edges = array_merge($edges, $this->findEdges($id, $argument->getValues(), $required, $name, true)); } elseif ($argument instanceof Definition) { - $edges[] = $this->findEdges($id, $argument->getArguments(), $required, ''); - $edges[] = $this->findEdges($id, $argument->getProperties(), false, ''); - + $edges = array_merge($edges, + $this->findEdges($id, $argument->getArguments(), $required, ''), + $this->findEdges($id, $argument->getProperties(), false, '') + ); foreach ($argument->getMethodCalls() as $call) { - $edges[] = $this->findEdges($id, $call[1], false, $call[0].'()'); + $edges = array_merge($edges, $this->findEdges($id, $call[1], false, $call[0].'()')); } } elseif (\is_array($argument)) { - $edges[] = $this->findEdges($id, $argument, $required, $name, $lazy); + $edges = array_merge($edges, $this->findEdges($id, $argument, $required, $name, $lazy)); } } - return array_merge([], ...$edges); + return $edges; } private function findNodes(): array diff --git a/tests/integration/vendor/symfony/dependency-injection/Dumper/PhpDumper.php b/tests/integration/vendor/symfony/dependency-injection/Dumper/PhpDumper.php index 3043669..da74585 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Dumper/PhpDumper.php +++ b/tests/integration/vendor/symfony/dependency-injection/Dumper/PhpDumper.php @@ -62,9 +62,6 @@ class PhpDumper extends Dumper */ public const NON_FIRST_CHARS = 'abcdefghijklmnopqrstuvwxyz0123456789_'; - /** - * @var \SplObjectStorage|null - */ private $definitionVariables; private $referenceVariables; private $variableCount; @@ -222,7 +219,7 @@ class PhpDumper extends Dumper } $code = - $this->startClass($options['class'], $baseClass, $this->inlineFactories && $proxyClasses). + $this->startClass($options['class'], $baseClass). $this->addServices($services). $this->addDeprecatedAliases(). $this->addDefaultParametersMethod() @@ -286,15 +283,14 @@ EOF; $code .= $this->endClass(); - if ($this->inlineFactories && $proxyClasses) { - $files['proxy-classes.php'] = "inlineFactories) { foreach ($proxyClasses as $c) { - $files['proxy-classes.php'] .= $c; + $code .= $c; } } $files[$options['class'].'.php'] = $code; + $preloadedFiles[$options['class'].'.php'] = $options['class'].'.php'; $hash = ucfirst(strtr(ContainerBuilder::hash($files), '._', 'xx')); $code = []; @@ -314,9 +310,7 @@ EOF; $autoloadFile = trim($this->export($autoloadFile), '()\\'); $preloadedFiles = array_reverse($preloadedFiles); - if ('' !== $preloadedFiles = implode("';\nrequire __DIR__.'/", $preloadedFiles)) { - $preloadedFiles = "require __DIR__.'/$preloadedFiles';\n"; - } + $preloadedFiles = implode("';\nrequire __DIR__.'/", $preloadedFiles); $code[$options['class'].'.preload.php'] = <<set(\\Container{$hash}\\{$options['class']}::class, null); -$preloadedFiles +require __DIR__.'/$preloadedFiles'; + \$classes = []; EOF; @@ -341,14 +335,14 @@ EOF; if (!$class || str_contains($class, '$') || \in_array($class, ['int', 'float', 'string', 'bool', 'resource', 'object', 'array', 'null', 'callable', 'iterable', 'mixed', 'void'], true)) { continue; } - if (!(class_exists($class, false) || interface_exists($class, false) || trait_exists($class, false)) || ((new \ReflectionClass($class))->isUserDefined() && !\in_array($class, ['Attribute', 'JsonException', 'ReturnTypeWillChange', 'Stringable', 'UnhandledMatchError', 'ValueError'], true))) { + if (!(class_exists($class, false) || interface_exists($class, false) || trait_exists($class, false)) || (new \ReflectionClass($class))->isUserDefined()) { $code[$options['class'].'.preload.php'] .= sprintf("\$classes[] = '%s';\n", $class); } } $code[$options['class'].'.preload.php'] .= <<<'EOF' -$preloaded = Preloader::preload($classes); +Preloader::preload($classes); EOF; } @@ -745,8 +739,8 @@ EOF; $calls = ''; foreach ($definition->getMethodCalls() as $k => $call) { $arguments = []; - foreach ($call[1] as $i => $value) { - $arguments[] = (\is_string($i) ? $i.': ' : '').$this->dumpValue($value); + foreach ($call[1] as $value) { + $arguments[] = $this->dumpValue($value); } $witherAssignation = ''; @@ -1138,8 +1132,8 @@ EOTXT } $arguments = []; - foreach ($definition->getArguments() as $i => $value) { - $arguments[] = (\is_string($i) ? $i.': ' : '').$this->dumpValue($value); + foreach ($definition->getArguments() as $value) { + $arguments[] = $this->dumpValue($value); } if (null !== $definition->getFactory()) { @@ -1182,7 +1176,7 @@ EOTXT return $return.sprintf('new %s(%s)', $this->dumpLiteralClass($this->dumpValue($class)), implode(', ', $arguments)).$tail; } - private function startClass(string $class, string $baseClass, bool $hasProxyClasses): string + private function startClass(string $class, string $baseClass): string { $namespaceLine = !$this->asFiles && $this->namespace ? "\nnamespace {$this->namespace};\n" : ''; @@ -1242,7 +1236,7 @@ EOF; $code .= $this->addMethodMap(); $code .= $this->asFiles && !$this->inlineFactories ? $this->addFileMap() : ''; $code .= $this->addAliases(); - $code .= $this->addInlineRequires($hasProxyClasses); + $code .= $this->addInlineRequires(); $code .= <<hotPathTag && $this->inlineRequires ? $this->container->findTaggedServiceIds($this->hotPathTag) : []; + if (!$this->hotPathTag || !$this->inlineRequires) { + return ''; + } - foreach ($hotPathServices as $id => $tags) { + $lineage = []; + + foreach ($this->container->findTaggedServiceIds($this->hotPathTag) as $id => $tags) { $definition = $this->container->getDefinition($id); if ($this->getProxyDumper()->isProxyCandidate($definition)) { @@ -1484,10 +1481,6 @@ EOF; } } - if ($hasProxyClasses) { - $code .= "\n include_once __DIR__.'/proxy-classes.php';"; - } - return $code ? sprintf("\n \$this->privates['service_container'] = function () {%s\n };\n", $code) : ''; } @@ -1504,11 +1497,10 @@ EOF; if ($key !== $resolvedKey = $this->container->resolveEnvPlaceholders($key)) { throw new InvalidArgumentException(sprintf('Parameter name cannot use env parameters: "%s".', $resolvedKey)); } - $hasEnum = false; - $export = $this->exportParameters([$value], '', 12, $hasEnum); + $export = $this->exportParameters([$value]); $export = explode('0 => ', substr(rtrim($export, " ]\n"), 2, -1), 2); - if ($hasEnum || preg_match("/\\\$this->(?:getEnv\('(?:[-.\w]*+:)*+\w++'\)|targetDir\.'')/", $export[1])) { + if (preg_match("/\\\$this->(?:getEnv\('(?:[-.\w]*+:)*+\w++'\)|targetDir\.'')/", $export[1])) { $dynamicPhp[$key] = sprintf('%scase %s: $value = %s; break;', $export[0], $this->export($key), $export[1]); } else { $php[] = sprintf('%s%s => %s,', $export[0], $this->export($key), $export[1]); @@ -1519,7 +1511,7 @@ EOF; $code = <<<'EOF' /** - * @return array|bool|float|int|string|\UnitEnum|null + * @return array|bool|float|int|string|null */ public function getParameter(string $name) { @@ -1612,12 +1604,12 @@ EOF; /** * @throws InvalidArgumentException */ - private function exportParameters(array $parameters, string $path = '', int $indent = 12, bool &$hasEnum = false): string + private function exportParameters(array $parameters, string $path = '', int $indent = 12): string { $php = []; foreach ($parameters as $key => $value) { if (\is_array($value)) { - $value = $this->exportParameters($value, $path.'/'.$key, $indent + 4, $hasEnum); + $value = $this->exportParameters($value, $path.'/'.$key, $indent + 4); } elseif ($value instanceof ArgumentInterface) { throw new InvalidArgumentException(sprintf('You cannot dump a container with parameters that contain special arguments. "%s" found in "%s".', get_debug_type($value), $path.'/'.$key)); } elseif ($value instanceof Variable) { @@ -1628,9 +1620,6 @@ EOF; throw new InvalidArgumentException(sprintf('You cannot dump a container with parameters that contain references to other services (reference to service "%s" found in "%s").', $value, $path.'/'.$key)); } elseif ($value instanceof Expression) { throw new InvalidArgumentException(sprintf('You cannot dump a container with parameters that contain expressions. Expression "%s" found in "%s".', $value, $path.'/'.$key)); - } elseif ($value instanceof \UnitEnum) { - $hasEnum = true; - $value = sprintf('\%s::%s', \get_class($value), $value->name); } else { $value = $this->export($value); } @@ -1762,7 +1751,7 @@ EOF; $returnedType = ''; if ($value instanceof TypedReference) { - $returnedType = sprintf(': %s\%s', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE >= $value->getInvalidBehavior() ? '' : '?', str_replace(['|', '&'], ['|\\', '&\\'], $value->getType())); + $returnedType = sprintf(': %s\%s', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE >= $value->getInvalidBehavior() ? '' : '?', $value->getType()); } $code = sprintf('return %s;', $code); diff --git a/tests/integration/vendor/symfony/dependency-injection/Dumper/Preloader.php b/tests/integration/vendor/symfony/dependency-injection/Dumper/Preloader.php index c61b08e..95f060d 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Dumper/Preloader.php +++ b/tests/integration/vendor/symfony/dependency-injection/Dumper/Preloader.php @@ -34,10 +34,10 @@ final class Preloader $classes[] = sprintf("\$classes[] = %s;\n", var_export($item, true)); } - file_put_contents($file, sprintf("\n\$classes = [];\n%s\$preloaded = Preloader::preload(\$classes, \$preloaded);\n", implode('', $classes)), \FILE_APPEND); + file_put_contents($file, sprintf("\n\$classes = [];\n%sPreloader::preload(\$classes);\n", implode('', $classes)), \FILE_APPEND); } - public static function preload(array $classes, array $preloaded = []): array + public static function preload(array $classes): void { set_error_handler(function ($t, $m, $f, $l) { if (error_reporting() & $t) { @@ -50,6 +50,7 @@ final class Preloader }); $prev = []; + $preloaded = []; try { while ($prev !== $classes) { @@ -64,8 +65,6 @@ final class Preloader } finally { restore_error_handler(); } - - return $preloaded; } private static function doPreload(string $class, array &$preloaded): void @@ -77,10 +76,6 @@ final class Preloader $preloaded[$class] = true; try { - if (!class_exists($class) && !interface_exists($class, false) && !trait_exists($class, false)) { - return; - } - $r = new \ReflectionClass($class); if ($r->isInternal()) { diff --git a/tests/integration/vendor/symfony/dependency-injection/Dumper/XmlDumper.php b/tests/integration/vendor/symfony/dependency-injection/Dumper/XmlDumper.php index 4f7b16d..a04f75a 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Dumper/XmlDumper.php +++ b/tests/integration/vendor/symfony/dependency-injection/Dumper/XmlDumper.php @@ -40,7 +40,7 @@ class XmlDumper extends Dumper /** * Dumps the service container as an XML string. * - * @return string + * @return string An xml string representing of the service container */ public function dump(array $options = []) { @@ -143,7 +143,7 @@ class XmlDumper extends Dumper $tag->appendChild($this->document->createTextNode($name)); } foreach ($attributes as $key => $value) { - $tag->setAttribute($key, $value ?? ''); + $tag->setAttribute($key, $value); } $service->appendChild($tag); } @@ -268,7 +268,7 @@ class XmlDumper extends Dumper private function convertParameters(array $parameters, string $type, \DOMElement $parent, string $keyAttribute = 'key') { - $withKeys = !array_is_list($parameters); + $withKeys = array_keys($parameters) !== range(0, \count($parameters) - 1); foreach ($parameters as $key => $value) { $element = $this->document->createElement($type); if ($withKeys) { diff --git a/tests/integration/vendor/symfony/dependency-injection/Dumper/YamlDumper.php b/tests/integration/vendor/symfony/dependency-injection/Dumper/YamlDumper.php index 823eb97..4c9bb75 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Dumper/YamlDumper.php +++ b/tests/integration/vendor/symfony/dependency-injection/Dumper/YamlDumper.php @@ -42,7 +42,7 @@ class YamlDumper extends Dumper /** * Dumps the service container as an YAML string. * - * @return string + * @return string A YAML string representing of the service container */ public function dump(array $options = []) { diff --git a/tests/integration/vendor/symfony/dependency-injection/EnvVarProcessor.php b/tests/integration/vendor/symfony/dependency-injection/EnvVarProcessor.php index 77ac210..02d7adb 100644 --- a/tests/integration/vendor/symfony/dependency-injection/EnvVarProcessor.php +++ b/tests/integration/vendor/symfony/dependency-injection/EnvVarProcessor.php @@ -41,7 +41,6 @@ class EnvVarProcessor implements EnvVarProcessorInterface return [ 'base64' => 'string', 'bool' => 'bool', - 'not' => 'bool', 'const' => 'bool|int|float|string|array', 'csv' => 'array', 'file' => 'string', @@ -192,10 +191,8 @@ class EnvVarProcessor implements EnvVarProcessorInterface return (string) $env; } - if (\in_array($prefix, ['bool', 'not'], true)) { - $env = (bool) (filter_var($env, \FILTER_VALIDATE_BOOLEAN) ?: filter_var($env, \FILTER_VALIDATE_INT) ?: filter_var($env, \FILTER_VALIDATE_FLOAT)); - - return 'not' === $prefix ? !$env : $env; + if ('bool' === $prefix) { + return (bool) (filter_var($env, \FILTER_VALIDATE_BOOLEAN) ?: filter_var($env, \FILTER_VALIDATE_INT) ?: filter_var($env, \FILTER_VALIDATE_FLOAT)); } if ('int' === $prefix) { @@ -258,8 +255,10 @@ class EnvVarProcessor implements EnvVarProcessorInterface 'fragment' => null, ]; - // remove the '/' separator - $parsedEnv['path'] = '/' === ($parsedEnv['path'] ?? '/') ? '' : substr($parsedEnv['path'], 1); + if (null !== $parsedEnv['path']) { + // remove the '/' separator + $parsedEnv['path'] = '/' === $parsedEnv['path'] ? null : substr($parsedEnv['path'], 1); + } return $parsedEnv; } @@ -272,17 +271,11 @@ class EnvVarProcessor implements EnvVarProcessorInterface } if ('resolve' === $prefix) { - return preg_replace_callback('/%%|%([^%\s]+)%/', function ($match) use ($name, $getEnv) { + return preg_replace_callback('/%%|%([^%\s]+)%/', function ($match) use ($name) { if (!isset($match[1])) { return '%'; } - - if (str_starts_with($match[1], 'env(') && str_ends_with($match[1], ')') && 'env()' !== $match[1]) { - $value = $getEnv(substr($match[1], 4, -1)); - } else { - $value = $this->container->getParameter($match[1]); - } - + $value = $this->container->getParameter($match[1]); if (!is_scalar($value)) { throw new RuntimeException(sprintf('Parameter "%s" found when resolving env var "%s" must be scalar, "%s" given.', $match[1], $name, get_debug_type($value))); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php b/tests/integration/vendor/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php index a42967f..c3bd842 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php +++ b/tests/integration/vendor/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php @@ -24,7 +24,7 @@ interface ConfigurationExtensionInterface /** * Returns extension configuration. * - * @return ConfigurationInterface|null + * @return ConfigurationInterface|null The configuration or null */ public function getConfiguration(array $config, ContainerBuilder $container); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Extension/Extension.php b/tests/integration/vendor/symfony/dependency-injection/Extension/Extension.php index ef6c1aa..8fcf678 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Extension/Extension.php +++ b/tests/integration/vendor/symfony/dependency-injection/Extension/Extension.php @@ -60,7 +60,7 @@ abstract class Extension implements ExtensionInterface, ConfigurationExtensionIn * * This can be overridden in a sub-class to specify the alias manually. * - * @return string + * @return string The alias * * @throws BadMethodCallException When the extension name does not follow conventions */ @@ -124,7 +124,7 @@ abstract class Extension implements ExtensionInterface, ConfigurationExtensionIn } /** - * @return bool + * @return bool Whether the configuration is enabled * * @throws InvalidArgumentException When the config is not enableable */ diff --git a/tests/integration/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php b/tests/integration/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php index f2373ed..6a7a2cf 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php +++ b/tests/integration/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php @@ -30,7 +30,7 @@ interface ExtensionInterface /** * Returns the namespace to be used for this extension (XML namespace). * - * @return string + * @return string The XML namespace */ public function getNamespace(); @@ -46,7 +46,7 @@ interface ExtensionInterface * * This alias is also the mandatory prefix to use when using YAML. * - * @return string + * @return string The alias */ public function getAlias(); } diff --git a/tests/integration/vendor/symfony/dependency-injection/LICENSE b/tests/integration/vendor/symfony/dependency-injection/LICENSE index 88bf75b..9ff2d0d 100644 --- a/tests/integration/vendor/symfony/dependency-injection/LICENSE +++ b/tests/integration/vendor/symfony/dependency-injection/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2022 Fabien Potencier +Copyright (c) 2004-2021 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/integration/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php b/tests/integration/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php index 8eb45b5..32b94df 100644 --- a/tests/integration/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php +++ b/tests/integration/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php @@ -70,8 +70,6 @@ class ProxyHelper } } - sort($types); - return $types ? implode($glue, $types) : null; } } diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/ClosureLoader.php b/tests/integration/vendor/symfony/dependency-injection/Loader/ClosureLoader.php index fe2b91a..57aa83d 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/ClosureLoader.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/ClosureLoader.php @@ -25,10 +25,9 @@ class ClosureLoader extends Loader { private $container; - public function __construct(ContainerBuilder $container, string $env = null) + public function __construct(ContainerBuilder $container) { $this->container = $container; - parent::__construct($env); } /** @@ -36,7 +35,7 @@ class ClosureLoader extends Loader */ public function load($resource, string $type = null) { - return $resource($this->container, $this->env); + $resource($this->container); } /** diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php index e5b1888..5ac7c60 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php @@ -11,10 +11,8 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; -use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\DependencyInjection\Argument\AbstractArgument; use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; -use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Parameter; @@ -78,9 +76,7 @@ abstract class AbstractConfigurator } if ($value instanceof ReferenceConfigurator) { - $reference = new Reference($value->id, $value->invalidBehavior); - - return $value instanceof ClosureReferenceConfigurator ? new ServiceClosureArgument($reference) : $reference; + return new Reference($value->id, $value->invalidBehavior); } if ($value instanceof InlineServiceConfigurator) { @@ -90,10 +86,6 @@ abstract class AbstractConfigurator return $def; } - if ($value instanceof ParamConfigurator) { - return (string) $value; - } - if ($value instanceof self) { throw new InvalidArgumentException(sprintf('"%s()" can be used only at the root of service configuration files.', $value::FACTORY)); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php index 96d6fd7..68b3cb5 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php @@ -32,8 +32,8 @@ abstract class AbstractServiceConfigurator extends AbstractConfigurator { // default tags should be added last foreach ($this->defaultTags as $name => $attributes) { - foreach ($attributes as $attribute) { - $this->definition->addTag($name, $attribute); + foreach ($attributes as $attributes) { + $this->definition->addTag($name, $attributes); } } $this->defaultTags = []; @@ -81,16 +81,6 @@ abstract class AbstractServiceConfigurator extends AbstractConfigurator return $this->parent->get($id); } - /** - * Removes an already defined service definition or alias. - */ - final public function remove(string $id): ServicesConfigurator - { - $this->__destruct(); - - return $this->parent->remove($id); - } - /** * Registers a stack of decorator services. * diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ClosureReferenceConfigurator.php b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ClosureReferenceConfigurator.php deleted file mode 100644 index ba83d91..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ClosureReferenceConfigurator.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator; - -class ClosureReferenceConfigurator extends ReferenceConfigurator -{ -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php index ac6fdb6..666f11f 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php @@ -11,7 +11,6 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; -use Symfony\Component\Config\Loader\ParamConfigurator; use Symfony\Component\DependencyInjection\Argument\AbstractArgument; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; @@ -36,16 +35,14 @@ class ContainerConfigurator extends AbstractConfigurator private $path; private $file; private $anonymousCount = 0; - private $env; - public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path, string $file, string $env = null) + public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path, string $file) { $this->container = $container; $this->loader = $loader; $this->instanceof = &$instanceof; $this->path = $path; $this->file = $file; - $this->env = $env; } final public function extension(string $namespace, array $config) @@ -74,14 +71,6 @@ class ContainerConfigurator extends AbstractConfigurator return new ServicesConfigurator($this->container, $this->loader, $this->instanceof, $this->path, $this->anonymousCount); } - /** - * Get the current environment to be able to write conditional configuration. - */ - final public function env(): ?string - { - return $this->env; - } - /** * @return static */ @@ -98,9 +87,9 @@ class ContainerConfigurator extends AbstractConfigurator /** * Creates a parameter. */ -function param(string $name): ParamConfigurator +function param(string $name): string { - return new ParamConfigurator($name); + return '%'.$name.'%'; } /** @@ -174,9 +163,9 @@ function tagged_iterator(string $tag, string $indexAttribute = null, string $def /** * Creates a service locator by tag name. */ -function tagged_locator(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null, string $defaultPriorityMethod = null): ServiceLocatorArgument +function tagged_locator(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null): ServiceLocatorArgument { - return new ServiceLocatorArgument(new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod, true, $defaultPriorityMethod)); + return new ServiceLocatorArgument(new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod, true)); } /** @@ -194,19 +183,3 @@ function abstract_arg(string $description): AbstractArgument { return new AbstractArgument($description); } - -/** - * Creates an environment variable reference. - */ -function env(string $name): EnvConfigurator -{ - return new EnvConfigurator($name); -} - -/** - * Creates a closure service reference. - */ -function service_closure(string $serviceId): ClosureReferenceConfigurator -{ - return new ClosureReferenceConfigurator($serviceId); -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php deleted file mode 100644 index d1864f5..0000000 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php +++ /dev/null @@ -1,224 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator; - -use Symfony\Component\Config\Loader\ParamConfigurator; - -class EnvConfigurator extends ParamConfigurator -{ - /** - * @var string[] - */ - private $stack; - - public function __construct(string $name) - { - $this->stack = explode(':', $name); - } - - public function __toString(): string - { - return '%env('.implode(':', $this->stack).')%'; - } - - /** - * @return $this - */ - public function __call(string $name, array $arguments): self - { - $processor = strtolower(preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'], '\1_\2', $name)); - - $this->custom($processor, ...$arguments); - - return $this; - } - - /** - * @return $this - */ - public function custom(string $processor, ...$args): self - { - array_unshift($this->stack, $processor, ...$args); - - return $this; - } - - /** - * @return $this - */ - public function base64(): self - { - array_unshift($this->stack, 'base64'); - - return $this; - } - - /** - * @return $this - */ - public function bool(): self - { - array_unshift($this->stack, 'bool'); - - return $this; - } - - /** - * @return $this - */ - public function not(): self - { - array_unshift($this->stack, 'not'); - - return $this; - } - - /** - * @return $this - */ - public function const(): self - { - array_unshift($this->stack, 'const'); - - return $this; - } - - /** - * @return $this - */ - public function csv(): self - { - array_unshift($this->stack, 'csv'); - - return $this; - } - - /** - * @return $this - */ - public function file(): self - { - array_unshift($this->stack, 'file'); - - return $this; - } - - /** - * @return $this - */ - public function float(): self - { - array_unshift($this->stack, 'float'); - - return $this; - } - - /** - * @return $this - */ - public function int(): self - { - array_unshift($this->stack, 'int'); - - return $this; - } - - /** - * @return $this - */ - public function json(): self - { - array_unshift($this->stack, 'json'); - - return $this; - } - - /** - * @return $this - */ - public function key(string $key): self - { - array_unshift($this->stack, 'key', $key); - - return $this; - } - - /** - * @return $this - */ - public function url(): self - { - array_unshift($this->stack, 'url'); - - return $this; - } - - /** - * @return $this - */ - public function queryString(): self - { - array_unshift($this->stack, 'query_string'); - - return $this; - } - - /** - * @return $this - */ - public function resolve(): self - { - array_unshift($this->stack, 'resolve'); - - return $this; - } - - /** - * @return $this - */ - public function default(string $fallbackParam): self - { - array_unshift($this->stack, 'default', $fallbackParam); - - return $this; - } - - /** - * @return $this - */ - public function string(): self - { - array_unshift($this->stack, 'string'); - - return $this; - } - - /** - * @return $this - */ - public function trim(): self - { - array_unshift($this->stack, 'trim'); - - return $this; - } - - /** - * @return $this - */ - public function require(): self - { - array_unshift($this->stack, 'require'); - - return $this; - } -} diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php index f0cf177..244da04 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php @@ -12,8 +12,6 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\ExpressionLanguage\Expression; /** * @author Nicolas Grekas @@ -36,10 +34,6 @@ class ParametersConfigurator extends AbstractConfigurator */ final public function set(string $name, $value): self { - if ($value instanceof Expression) { - throw new InvalidArgumentException(sprintf('Using an expression in parameter "%s" is not allowed.', $name)); - } - $this->container->setParameter($name, static::processValue($value, true)); return $this; diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php index 932ecd3..308d4ae 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php @@ -45,7 +45,6 @@ class ServiceConfigurator extends AbstractServiceConfigurator private $instanceof; private $allowParent; private $path; - private $destructed = false; public function __construct(ContainerBuilder $container, array $instanceof, bool $allowParent, ServicesConfigurator $parent, Definition $definition, ?string $id, array $defaultTags, string $path = null) { @@ -59,11 +58,6 @@ class ServiceConfigurator extends AbstractServiceConfigurator public function __destruct() { - if ($this->destructed) { - return; - } - $this->destructed = true; - parent::__destruct(); $this->container->removeBindings($this->id); diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php index 388251e..38d002a 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php @@ -96,19 +96,6 @@ class ServicesConfigurator extends AbstractConfigurator return null !== $class ? $configurator->class($class) : $configurator; } - /** - * Removes an already defined service definition or alias. - * - * @return $this - */ - final public function remove(string $id): self - { - $this->container->removeDefinition($id); - $this->container->removeAlias($id); - - return $this; - } - /** * Creates an alias. */ diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php index 3021e07..573b6f5 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php @@ -12,8 +12,10 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; use Symfony\Component\DependencyInjection\Argument\BoundArgument; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Loader\Configurator\DefaultsConfigurator; use Symfony\Component\DependencyInjection\Loader\Configurator\InstanceofConfigurator; +use Symfony\Component\DependencyInjection\Reference; trait BindTrait { @@ -32,6 +34,9 @@ trait BindTrait final public function bind(string $nameOrFqcn, $valueOrRef): self { $valueOrRef = static::processValue($valueOrRef, true); + if (!preg_match('/^(?:(?:array|bool|float|int|string|iterable)[ \t]*+)?\$/', $nameOrFqcn) && !$valueOrRef instanceof Reference) { + throw new InvalidArgumentException(sprintf('Invalid binding for service "%s": named arguments must start with a "$", and FQCN must map to references. Neither applies to binding "%s".', $this->id, $nameOrFqcn)); + } $bindings = $this->definition->getBindings(); $type = $this instanceof DefaultsConfigurator ? BoundArgument::DEFAULTS_BINDING : ($this instanceof InstanceofConfigurator ? BoundArgument::INSTANCEOF_BINDING : BoundArgument::SERVICE_BINDING); $bindings[$nameOrFqcn] = new BoundArgument($valueOrRef, true, $type, $this->path ?? null); diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/DirectoryLoader.php b/tests/integration/vendor/symfony/dependency-injection/Loader/DirectoryLoader.php index b4e9a59..d4b454a 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/DirectoryLoader.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/DirectoryLoader.php @@ -38,8 +38,6 @@ class DirectoryLoader extends FileLoader $this->import($dir, null, false, $path); } } - - return null; } /** diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/FileLoader.php b/tests/integration/vendor/symfony/dependency-injection/Loader/FileLoader.php index f5f78e3..bdb9c9a 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/FileLoader.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/FileLoader.php @@ -17,9 +17,7 @@ use Symfony\Component\Config\FileLocatorInterface; use Symfony\Component\Config\Loader\FileLoader as BaseFileLoader; use Symfony\Component\Config\Loader\Loader; use Symfony\Component\Config\Resource\GlobResource; -use Symfony\Component\DependencyInjection\Attribute\When; use Symfony\Component\DependencyInjection\ChildDefinition; -use Symfony\Component\DependencyInjection\Compiler\RegisterAutoconfigureAttributesPass; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; @@ -40,11 +38,11 @@ abstract class FileLoader extends BaseFileLoader protected $singlyImplemented = []; protected $autoRegisterAliasesForSinglyImplementedInterfaces = true; - public function __construct(ContainerBuilder $container, FileLocatorInterface $locator, string $env = null) + public function __construct(ContainerBuilder $container, FileLocatorInterface $locator) { $this->container = $container; - parent::__construct($locator, $env); + parent::__construct($locator); } /** @@ -52,7 +50,7 @@ abstract class FileLoader extends BaseFileLoader * * @param bool|string $ignoreErrors Whether errors should be ignored; pass "not_found" to ignore only when the loaded resource is not found */ - public function import($resource, string $type = null, $ignoreErrors = false, string $sourceResource = null, $exclude = null) + public function import($resource, $type = null, $ignoreErrors = false, $sourceResource = null, $exclude = null) { $args = \func_get_args(); @@ -63,7 +61,7 @@ abstract class FileLoader extends BaseFileLoader } try { - return parent::import(...$args); + parent::import(...$args); } catch (LoaderLoadException $e) { if (!$ignoreNotFound || !($prev = $e->getPrevious()) instanceof FileLocatorFileNotFoundException) { throw $e; @@ -79,8 +77,6 @@ abstract class FileLoader extends BaseFileLoader throw $e; } } - - return null; } /** @@ -91,7 +87,7 @@ abstract class FileLoader extends BaseFileLoader * @param string $resource The directory to look for classes, glob-patterns allowed * @param string|string[]|null $exclude A globbed path of files to exclude or an array of globbed paths of files to exclude */ - public function registerClasses(Definition $prototype, string $namespace, string $resource, $exclude = null) + public function registerClasses(Definition $prototype, $namespace, $resource, $exclude = null) { if (!str_ends_with($namespace, '\\')) { throw new InvalidArgumentException(sprintf('Namespace prefix must end with a "\\": "%s".', $namespace)); @@ -100,27 +96,11 @@ abstract class FileLoader extends BaseFileLoader throw new InvalidArgumentException(sprintf('Namespace is not a valid PSR-4 prefix: "%s".', $namespace)); } - $autoconfigureAttributes = new RegisterAutoconfigureAttributesPass(); - $autoconfigureAttributes = $autoconfigureAttributes->accept($prototype) ? $autoconfigureAttributes : null; - $classes = $this->findClasses($namespace, $resource, (array) $exclude, $autoconfigureAttributes); + $classes = $this->findClasses($namespace, $resource, (array) $exclude); // prepare for deep cloning $serializedPrototype = serialize($prototype); foreach ($classes as $class => $errorMessage) { - if (null === $errorMessage && $autoconfigureAttributes && $this->env) { - $r = $this->container->getReflectionClass($class); - $attribute = null; - foreach ($r->getAttributes(When::class) as $attribute) { - if ($this->env === $attribute->newInstance()->env) { - $attribute = null; - break; - } - } - if (null !== $attribute) { - continue; - } - } - if (interface_exists($class, false)) { $this->interfaces[] = $class; } else { @@ -154,8 +134,10 @@ abstract class FileLoader extends BaseFileLoader /** * Registers a definition in the container with its instanceof-conditionals. + * + * @param string $id */ - protected function setDefinition(string $id, Definition $definition) + protected function setDefinition($id, Definition $definition) { $this->container->removeBindings($id); @@ -169,7 +151,7 @@ abstract class FileLoader extends BaseFileLoader } } - private function findClasses(string $namespace, string $pattern, array $excludePatterns, ?RegisterAutoconfigureAttributesPass $autoconfigureAttributes): array + private function findClasses(string $namespace, string $pattern, array $excludePatterns): array { $parameterBag = $this->container->getParameterBag(); @@ -227,10 +209,6 @@ abstract class FileLoader extends BaseFileLoader if ($r->isInstantiable() || $r->isInterface()) { $classes[$class] = null; } - - if ($autoconfigureAttributes && !$r->isInstantiable()) { - $autoconfigureAttributes->processClass($this->container, $r); - } } // track only for new & removed files diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/GlobFileLoader.php b/tests/integration/vendor/symfony/dependency-injection/Loader/GlobFileLoader.php index e38aaf4..53af9cf 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/GlobFileLoader.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/GlobFileLoader.php @@ -28,8 +28,6 @@ class GlobFileLoader extends FileLoader } $this->container->addResource($globResource); - - return null; } /** diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/IniFileLoader.php b/tests/integration/vendor/symfony/dependency-injection/Loader/IniFileLoader.php index d88d7a6..f313cbc 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/IniFileLoader.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/IniFileLoader.php @@ -44,14 +44,6 @@ class IniFileLoader extends FileLoader $this->container->setParameter($key, $this->phpize($value)); } } - - if ($this->env && \is_array($result['parameters@'.$this->env] ?? null)) { - foreach ($result['parameters@'.$this->env] as $key => $value) { - $this->container->setParameter($key, $this->phpize($value)); - } - } - - return null; } /** diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php b/tests/integration/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php index 3815b28..196baf6 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php @@ -11,16 +11,6 @@ namespace Symfony\Component\DependencyInjection\Loader; -use Symfony\Component\Config\Builder\ConfigBuilderGenerator; -use Symfony\Component\Config\Builder\ConfigBuilderGeneratorInterface; -use Symfony\Component\Config\Builder\ConfigBuilderInterface; -use Symfony\Component\Config\FileLocatorInterface; -use Symfony\Component\DependencyInjection\Attribute\When; -use Symfony\Component\DependencyInjection\Container; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface; -use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; /** @@ -34,18 +24,11 @@ use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigura class PhpFileLoader extends FileLoader { protected $autoRegisterAliasesForSinglyImplementedInterfaces = false; - private $generator; - - public function __construct(ContainerBuilder $container, FileLocatorInterface $locator, string $env = null, ConfigBuilderGeneratorInterface $generator = null) - { - parent::__construct($container, $locator, $env); - $this->generator = $generator; - } /** * {@inheritdoc} */ - public function load($resource, string $type = null) + public function load($resource, $type = null) { // the container and loader variables are exposed to the included file below $container = $this->container; @@ -56,22 +39,20 @@ class PhpFileLoader extends FileLoader $this->container->fileExists($path); // the closure forbids access to the private scope in the included file - $load = \Closure::bind(function ($path, $env) use ($container, $loader, $resource, $type) { + $load = \Closure::bind(function ($path) use ($container, $loader, $resource, $type) { return include $path; }, $this, ProtectedPhpFileLoader::class); try { - $callback = $load($path, $this->env); + $callback = $load($path); if (\is_object($callback) && \is_callable($callback)) { - $this->executeCallback($callback, new ContainerConfigurator($this->container, $this, $this->instanceof, $path, $resource, $this->env), $path); + $callback(new ContainerConfigurator($this->container, $this, $this->instanceof, $path, $resource), $this->container, $this); } } finally { $this->instanceof = []; $this->registerAliasesForSinglyImplementedInterfaces(); } - - return null; } /** @@ -89,118 +70,6 @@ class PhpFileLoader extends FileLoader return 'php' === $type; } - - /** - * Resolve the parameters to the $callback and execute it. - */ - private function executeCallback(callable $callback, ContainerConfigurator $containerConfigurator, string $path) - { - if (!$callback instanceof \Closure) { - $callback = \Closure::fromCallable($callback); - } - - $arguments = []; - $configBuilders = []; - $r = new \ReflectionFunction($callback); - - if (\PHP_VERSION_ID >= 80000) { - $attribute = null; - foreach ($r->getAttributes(When::class) as $attribute) { - if ($this->env === $attribute->newInstance()->env) { - $attribute = null; - break; - } - } - if (null !== $attribute) { - return; - } - } - - foreach ($r->getParameters() as $parameter) { - $reflectionType = $parameter->getType(); - if (!$reflectionType instanceof \ReflectionNamedType) { - throw new \InvalidArgumentException(sprintf('Could not resolve argument "$%s" for "%s". You must typehint it (for example with "%s" or "%s").', $parameter->getName(), $path, ContainerConfigurator::class, ContainerBuilder::class)); - } - $type = $reflectionType->getName(); - - switch ($type) { - case ContainerConfigurator::class: - $arguments[] = $containerConfigurator; - break; - case ContainerBuilder::class: - $arguments[] = $this->container; - break; - case FileLoader::class: - case self::class: - $arguments[] = $this; - break; - default: - try { - $configBuilder = $this->configBuilder($type); - } catch (InvalidArgumentException|\LogicException $e) { - throw new \InvalidArgumentException(sprintf('Could not resolve argument "%s" for "%s".', $type.' $'.$parameter->getName(), $path), 0, $e); - } - $configBuilders[] = $configBuilder; - $arguments[] = $configBuilder; - } - } - - // Force load ContainerConfigurator to make env(), param() etc available. - class_exists(ContainerConfigurator::class); - - $callback(...$arguments); - - /** @var ConfigBuilderInterface $configBuilder */ - foreach ($configBuilders as $configBuilder) { - $containerConfigurator->extension($configBuilder->getExtensionAlias(), $configBuilder->toArray()); - } - } - - /** - * @param string $namespace FQCN string for a class implementing ConfigBuilderInterface - */ - private function configBuilder(string $namespace): ConfigBuilderInterface - { - if (!class_exists(ConfigBuilderGenerator::class)) { - throw new \LogicException('You cannot use the config builder as the Config component is not installed. Try running "composer require symfony/config".'); - } - - if (null === $this->generator) { - throw new \LogicException('You cannot use the ConfigBuilders without providing a class implementing ConfigBuilderGeneratorInterface.'); - } - - // If class exists and implements ConfigBuilderInterface - if (class_exists($namespace) && is_subclass_of($namespace, ConfigBuilderInterface::class)) { - return new $namespace(); - } - - // If it does not start with Symfony\Config\ we dont know how to handle this - if ('Symfony\\Config\\' !== substr($namespace, 0, 15)) { - throw new InvalidArgumentException(sprintf('Could not find or generate class "%s".', $namespace)); - } - - // Try to get the extension alias - $alias = Container::underscore(substr($namespace, 15, -6)); - - if (false !== strpos($alias, '\\')) { - throw new InvalidArgumentException('You can only use "root" ConfigBuilders from "Symfony\\Config\\" namespace. Nested classes like "Symfony\\Config\\Framework\\CacheConfig" cannot be used.'); - } - - if (!$this->container->hasExtension($alias)) { - $extensions = array_filter(array_map(function (ExtensionInterface $ext) { return $ext->getAlias(); }, $this->container->getExtensions())); - throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s". Looked for namespace "%s", found "%s".', $namespace, $alias, $extensions ? implode('", "', $extensions) : 'none')); - } - - $extension = $this->container->getExtension($alias); - if (!$extension instanceof ConfigurationExtensionInterface) { - throw new \LogicException(sprintf('You cannot use the config builder for "%s" because the extension does not implement "%s".', $namespace, ConfigurationExtensionInterface::class)); - } - - $configuration = $extension->getConfiguration([], $this->container); - $loader = $this->generator->build($configuration); - - return $loader(); - } } /** diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php b/tests/integration/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php index d0a016f..970818f 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php @@ -51,44 +51,23 @@ class XmlFileLoader extends FileLoader $this->container->fileExists($path); - $this->loadXml($xml, $path); - - if ($this->env) { - $xpath = new \DOMXPath($xml); - $xpath->registerNamespace('container', self::NS); - foreach ($xpath->query(sprintf('//container:when[@env="%s"]', $this->env)) ?: [] as $root) { - $env = $this->env; - $this->env = null; - try { - $this->loadXml($xml, $path, $root); - } finally { - $this->env = $env; - } - } - } - - return null; - } - - private function loadXml(\DOMDocument $xml, string $path, \DOMNode $root = null): void - { - $defaults = $this->getServiceDefaults($xml, $path, $root); + $defaults = $this->getServiceDefaults($xml, $path); // anonymous services - $this->processAnonymousServices($xml, $path, $root); + $this->processAnonymousServices($xml, $path); // imports - $this->parseImports($xml, $path, $root); + $this->parseImports($xml, $path); // parameters - $this->parseParameters($xml, $path, $root); + $this->parseParameters($xml, $path); // extensions - $this->loadFromExtensions($xml, $root); + $this->loadFromExtensions($xml); // services try { - $this->parseDefinitions($xml, $path, $defaults, $root); + $this->parseDefinitions($xml, $path, $defaults); } finally { $this->instanceof = []; $this->registerAliasesForSinglyImplementedInterfaces(); @@ -111,19 +90,19 @@ class XmlFileLoader extends FileLoader return 'xml' === $type; } - private function parseParameters(\DOMDocument $xml, string $file, \DOMNode $root = null) + private function parseParameters(\DOMDocument $xml, string $file) { - if ($parameters = $this->getChildren($root ?? $xml->documentElement, 'parameters')) { + if ($parameters = $this->getChildren($xml->documentElement, 'parameters')) { $this->container->getParameterBag()->add($this->getArgumentsAsPhp($parameters[0], 'parameter', $file)); } } - private function parseImports(\DOMDocument $xml, string $file, \DOMNode $root = null) + private function parseImports(\DOMDocument $xml, string $file) { $xpath = new \DOMXPath($xml); $xpath->registerNamespace('container', self::NS); - if (false === $imports = $xpath->query('.//container:imports/container:import', $root)) { + if (false === $imports = $xpath->query('//container:imports/container:import')) { return; } @@ -134,19 +113,19 @@ class XmlFileLoader extends FileLoader } } - private function parseDefinitions(\DOMDocument $xml, string $file, Definition $defaults, \DOMNode $root = null) + private function parseDefinitions(\DOMDocument $xml, string $file, Definition $defaults) { $xpath = new \DOMXPath($xml); $xpath->registerNamespace('container', self::NS); - if (false === $services = $xpath->query('.//container:services/container:service|.//container:services/container:prototype|.//container:services/container:stack', $root)) { + if (false === $services = $xpath->query('//container:services/container:service|//container:services/container:prototype|//container:services/container:stack')) { return; } $this->setCurrentDir(\dirname($file)); $this->instanceof = []; $this->isLoadingInstanceof = true; - $instanceof = $xpath->query('.//container:services/container:instanceof', $root); + $instanceof = $xpath->query('//container:services/container:instanceof'); foreach ($instanceof as $service) { $this->setDefinition((string) $service->getAttribute('id'), $this->parseDefinition($service, $file, new Definition())); } @@ -192,12 +171,12 @@ class XmlFileLoader extends FileLoader } } - private function getServiceDefaults(\DOMDocument $xml, string $file, \DOMNode $root = null): Definition + private function getServiceDefaults(\DOMDocument $xml, string $file): Definition { $xpath = new \DOMXPath($xml); $xpath->registerNamespace('container', self::NS); - if (null === $defaultsNode = $xpath->query('.//container:services/container:defaults', $root)->item(0)) { + if (null === $defaultsNode = $xpath->query('//container:services/container:defaults')->item(0)) { return new Definition(); } @@ -214,7 +193,7 @@ class XmlFileLoader extends FileLoader if ($alias = $service->getAttribute('alias')) { $this->validateAlias($service, $file); - $this->container->setAlias($service->getAttribute('id'), $alias = new Alias($alias)); + $this->container->setAlias((string) $service->getAttribute('id'), $alias = new Alias($alias)); if ($publicAttr = $service->getAttribute('public')) { $alias->setPublic(XmlUtils::phpize($publicAttr)); } elseif ($defaults->getChanges()['public'] ?? false) { @@ -352,7 +331,7 @@ class XmlFileLoader extends FileLoader } if ('' === $tagName && '' === $tagName = $tag->getAttribute('name')) { - throw new InvalidArgumentException(sprintf('The tag name for service "%s" in "%s" must be a non-empty string.', $service->getAttribute('id'), $file)); + throw new InvalidArgumentException(sprintf('The tag name for service "%s" in "%s" must be a non-empty string.', (string) $service->getAttribute('id'), $file)); } $definition->addTag($tagName, $parameters); @@ -382,7 +361,7 @@ class XmlFileLoader extends FileLoader } elseif ('null' === $decorationOnInvalid) { $invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE; } else { - throw new InvalidArgumentException(sprintf('Invalid value "%s" for attribute "decoration-on-invalid" on service "%s". Did you mean "exception", "ignore" or "null" in "%s"?', $decorationOnInvalid, $service->getAttribute('id'), $file)); + throw new InvalidArgumentException(sprintf('Invalid value "%s" for attribute "decoration-on-invalid" on service "%s". Did you mean "exception", "ignore" or "null" in "%s"?', $decorationOnInvalid, (string) $service->getAttribute('id'), $file)); } $renameId = $service->hasAttribute('decoration-inner-name') ? $service->getAttribute('decoration-inner-name') : null; @@ -415,7 +394,7 @@ class XmlFileLoader extends FileLoader /** * Processes anonymous services. */ - private function processAnonymousServices(\DOMDocument $xml, string $file, \DOMNode $root = null) + private function processAnonymousServices(\DOMDocument $xml, string $file) { $definitions = []; $count = 0; @@ -425,7 +404,7 @@ class XmlFileLoader extends FileLoader $xpath->registerNamespace('container', self::NS); // anonymous services as arguments/properties - if (false !== $nodes = $xpath->query('.//container:argument[@type="service"][not(@id)]|.//container:property[@type="service"][not(@id)]|.//container:bind[not(@id)]|.//container:factory[not(@service)]|.//container:configurator[not(@service)]', $root)) { + if (false !== $nodes = $xpath->query('//container:argument[@type="service"][not(@id)]|//container:property[@type="service"][not(@id)]|//container:bind[not(@id)]|//container:factory[not(@service)]|//container:configurator[not(@service)]')) { foreach ($nodes as $node) { if ($services = $this->getChildren($node, 'service')) { // give it a unique name @@ -444,7 +423,7 @@ class XmlFileLoader extends FileLoader } // anonymous services "in the wild" - if (false !== $nodes = $xpath->query('.//container:services/container:service[not(@id)]', $root)) { + if (false !== $nodes = $xpath->query('//container:services/container:service[not(@id)]')) { foreach ($nodes as $node) { throw new InvalidArgumentException(sprintf('Top-level services must have "id" attribute, none found in "%s" at line %d.', $file, $node->getLineNo())); } diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php b/tests/integration/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php index 7efda3c..b644bd0 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php @@ -13,6 +13,7 @@ namespace Symfony\Component\DependencyInjection\Loader; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\Argument\AbstractArgument; +use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; use Symfony\Component\DependencyInjection\Argument\BoundArgument; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; @@ -126,31 +127,9 @@ class YamlFileLoader extends FileLoader // empty file if (null === $content) { - return null; + return; } - $this->loadContent($content, $path); - - // per-env configuration - if ($this->env && isset($content['when@'.$this->env])) { - if (!\is_array($content['when@'.$this->env])) { - throw new InvalidArgumentException(sprintf('The "when@%s" key should contain an array in "%s". Check your YAML syntax.', $this->env, $path)); - } - - $env = $this->env; - $this->env = null; - try { - $this->loadContent($content['when@'.$env], $path); - } finally { - $this->env = $env; - } - } - - return null; - } - - private function loadContent(array $content, string $path) - { // imports $this->parseImports($content, $path); @@ -411,9 +390,6 @@ class YamlFileLoader extends FileLoader ]; } - $definition = isset($service[0]) && $service[0] instanceof Definition ? array_shift($service) : null; - $return = null === $definition ? $return : true; - $this->checkDefinition($id, $service, $file); if (isset($service['alias'])) { @@ -448,9 +424,7 @@ class YamlFileLoader extends FileLoader return $return ? $alias : $this->container->setAlias($id, $alias); } - if (null !== $definition) { - // no-op - } elseif ($this->isLoadingInstanceof) { + if ($this->isLoadingInstanceof) { $definition = new ChildDefinition(''); } elseif (isset($service['parent'])) { if ('' !== $service['parent'] && '@' === $service['parent'][0]) { @@ -654,8 +628,7 @@ class YamlFileLoader extends FileLoader if (isset($defaults['bind']) || isset($service['bind'])) { // deep clone, to avoid multiple process of the same instance in the passes - $bindings = $definition->getBindings(); - $bindings += isset($defaults['bind']) ? unserialize(serialize($defaults['bind'])) : []; + $bindings = isset($defaults['bind']) ? unserialize(serialize($defaults['bind'])) : []; if (isset($service['bind'])) { if (!\is_array($service['bind'])) { @@ -709,7 +682,7 @@ class YamlFileLoader extends FileLoader * * @throws InvalidArgumentException When errors occur * - * @return string|array|Reference + * @return string|array|Reference A parsed callable */ private function parseCallable($callable, string $parameter, string $id, string $file) { @@ -743,7 +716,7 @@ class YamlFileLoader extends FileLoader /** * Loads a YAML file. * - * @return array|null + * @return array The file content * * @throws InvalidArgumentException when the given file is not a local file or when it does not exist */ @@ -790,7 +763,7 @@ class YamlFileLoader extends FileLoader } foreach ($content as $namespace => $data) { - if (\in_array($namespace, ['imports', 'parameters', 'services']) || 0 === strpos($namespace, 'when@')) { + if (\in_array($namespace, ['imports', 'parameters', 'services'])) { continue; } @@ -804,7 +777,9 @@ class YamlFileLoader extends FileLoader } /** - * @return mixed + * Resolves services. + * + * @return array|string|Reference|ArgumentInterface */ private function resolveServices($value, string $file, bool $isParameter = false) { @@ -900,10 +875,6 @@ class YamlFileLoader extends FileLoader $value[$k] = $this->resolveServices($v, $file, $isParameter); } } elseif (\is_string($value) && str_starts_with($value, '@=')) { - if ($isParameter) { - throw new InvalidArgumentException(sprintf('Using expressions in parameters is not allowed in "%s".', $file)); - } - if (!class_exists(Expression::class)) { throw new \LogicException('The "@=" expression syntax cannot be used without the ExpressionLanguage component. Try running "composer require symfony/expression-language".'); } @@ -935,7 +906,7 @@ class YamlFileLoader extends FileLoader private function loadFromExtensions(array $content) { foreach ($content as $namespace => $values) { - if (\in_array($namespace, ['imports', 'parameters', 'services']) || 0 === strpos($namespace, 'when@')) { + if (\in_array($namespace, ['imports', 'parameters', 'services'])) { continue; } diff --git a/tests/integration/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd b/tests/integration/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd index 3c30002..3d98eaf 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd +++ b/tests/integration/vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd @@ -37,31 +37,9 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/integration/vendor/symfony/dependency-injection/Parameter.php b/tests/integration/vendor/symfony/dependency-injection/Parameter.php index e182e12..d484ac0 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Parameter.php +++ b/tests/integration/vendor/symfony/dependency-injection/Parameter.php @@ -26,7 +26,7 @@ class Parameter } /** - * @return string + * @return string The parameter key */ public function __toString() { diff --git a/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ContainerBag.php b/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ContainerBag.php index 54aaa55..724a94e 100644 --- a/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ContainerBag.php +++ b/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ContainerBag.php @@ -36,9 +36,9 @@ class ContainerBag extends FrozenParameterBag implements ContainerBagInterface /** * {@inheritdoc} * - * @return array|bool|string|int|float|\UnitEnum|null + * @return array|bool|string|int|float|null */ - public function get(string $name) + public function get($name) { return $this->container->getParameter($name); } @@ -48,7 +48,7 @@ class ContainerBag extends FrozenParameterBag implements ContainerBagInterface * * @return bool */ - public function has(string $name) + public function has($name) { return $this->container->hasParameter($name); } diff --git a/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php b/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php index f8380ac..1c1227a 100644 --- a/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php +++ b/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php @@ -24,7 +24,7 @@ interface ContainerBagInterface extends ContainerInterface /** * Gets the service container parameters. * - * @return array + * @return array An array of parameters */ public function all(); diff --git a/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php b/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php index b1bf775..fad04fc 100644 --- a/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php +++ b/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php @@ -109,7 +109,7 @@ class ParameterBag implements ParameterBagInterface */ public function has(string $name) { - return \array_key_exists($name, $this->parameters); + return \array_key_exists((string) $name, $this->parameters); } /** @@ -151,7 +151,7 @@ class ParameterBag implements ParameterBagInterface * @param mixed $value A value * @param array $resolving An array of keys that are being resolved (used internally to detect circular references) * - * @return mixed + * @return mixed The resolved value * * @throws ParameterNotFoundException if a placeholder references a parameter that does not exist * @throws ParameterCircularReferenceException if a circular reference if detected @@ -180,7 +180,7 @@ class ParameterBag implements ParameterBagInterface * * @param array $resolving An array of keys that are being resolved (used internally to detect circular references) * - * @return mixed + * @return mixed The resolved string * * @throws ParameterNotFoundException if a placeholder references a parameter that does not exist * @throws ParameterCircularReferenceException if a circular reference if detected diff --git a/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php b/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php index 808a0fa..b532edf 100644 --- a/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php +++ b/tests/integration/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php @@ -24,28 +24,28 @@ interface ParameterBagInterface /** * Clears all parameters. * - * @throws LogicException if the ParameterBagInterface cannot be cleared + * @throws LogicException if the ParameterBagInterface can not be cleared */ public function clear(); /** * Adds parameters to the service container parameters. * - * @throws LogicException if the parameter cannot be added + * @throws LogicException if the parameter can not be added */ public function add(array $parameters); /** * Gets the service container parameters. * - * @return array + * @return array An array of parameters */ public function all(); /** * Gets a service container parameter. * - * @return array|bool|string|int|float|\UnitEnum|null + * @return array|bool|string|int|float|null * * @throws ParameterNotFoundException if the parameter is not defined */ @@ -59,16 +59,16 @@ interface ParameterBagInterface /** * Sets a service container parameter. * - * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value + * @param array|bool|string|int|float|null $value The parameter value * - * @throws LogicException if the parameter cannot be set + * @throws LogicException if the parameter can not be set */ public function set(string $name, $value); /** * Returns true if a parameter name is defined. * - * @return bool + * @return bool true if the parameter name is defined, false otherwise */ public function has(string $name); diff --git a/tests/integration/vendor/symfony/dependency-injection/Reference.php b/tests/integration/vendor/symfony/dependency-injection/Reference.php index 7f7b32c..c13cf6f 100644 --- a/tests/integration/vendor/symfony/dependency-injection/Reference.php +++ b/tests/integration/vendor/symfony/dependency-injection/Reference.php @@ -28,7 +28,7 @@ class Reference } /** - * @return string + * @return string The service identifier */ public function __toString() { diff --git a/tests/integration/vendor/symfony/dependency-injection/ServiceLocator.php b/tests/integration/vendor/symfony/dependency-injection/ServiceLocator.php index 4be0d6f..5855811 100644 --- a/tests/integration/vendor/symfony/dependency-injection/ServiceLocator.php +++ b/tests/integration/vendor/symfony/dependency-injection/ServiceLocator.php @@ -38,7 +38,7 @@ class ServiceLocator implements ServiceProviderInterface * * @return mixed */ - public function get(string $id) + public function get($id) { if (!$this->externalId) { return $this->doGet($id); diff --git a/tests/integration/vendor/symfony/dependency-injection/TaggedContainerInterface.php b/tests/integration/vendor/symfony/dependency-injection/TaggedContainerInterface.php index 25d5a09..2e32cd5 100644 --- a/tests/integration/vendor/symfony/dependency-injection/TaggedContainerInterface.php +++ b/tests/integration/vendor/symfony/dependency-injection/TaggedContainerInterface.php @@ -23,7 +23,7 @@ interface TaggedContainerInterface extends ContainerInterface * * @param string $name The tag name * - * @return array + * @return array An array of tags */ public function findTaggedServiceIds(string $name); } diff --git a/tests/integration/vendor/symfony/dependency-injection/composer.json b/tests/integration/vendor/symfony/dependency-injection/composer.json index cb891c7..9a80c47 100644 --- a/tests/integration/vendor/symfony/dependency-injection/composer.json +++ b/tests/integration/vendor/symfony/dependency-injection/composer.json @@ -17,16 +17,15 @@ ], "require": { "php": ">=7.2.5", - "psr/container": "^1.1.1", - "symfony/deprecation-contracts": "^2.1|^3", + "psr/container": "^1.0", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", "symfony/service-contracts": "^1.1.6|^2" }, "require-dev": { - "symfony/yaml": "^4.4.26|^5.0|^6.0", - "symfony/config": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0" + "symfony/yaml": "^4.4|^5.0", + "symfony/config": "^5.1", + "symfony/expression-language": "^4.4|^5.0" }, "suggest": { "symfony/yaml": "", @@ -36,11 +35,10 @@ "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them" }, "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<5.3", + "symfony/config": "<5.1", "symfony/finder": "<4.4", "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4.26" + "symfony/yaml": "<4.4" }, "provide": { "psr/container-implementation": "1.0", diff --git a/tests/integration/vendor/symfony/polyfill-php80/Php80.php b/tests/integration/vendor/symfony/polyfill-php80/Php80.php index 5fef511..362dd1a 100644 --- a/tests/integration/vendor/symfony/polyfill-php80/Php80.php +++ b/tests/integration/vendor/symfony/polyfill-php80/Php80.php @@ -100,6 +100,16 @@ final class Php80 public static function str_ends_with(string $haystack, string $needle): bool { - return '' === $needle || ('' !== $haystack && 0 === substr_compare($haystack, $needle, -\strlen($needle))); + if ('' === $needle || $needle === $haystack) { + return true; + } + + if ('' === $haystack) { + return false; + } + + $needleLength = \strlen($needle); + + return $needleLength <= \strlen($haystack) && 0 === substr_compare($haystack, $needle, -$needleLength); } } diff --git a/tests/integration/vendor/symfony/polyfill-php80/PhpToken.php b/tests/integration/vendor/symfony/polyfill-php80/PhpToken.php new file mode 100644 index 0000000..fe6e691 --- /dev/null +++ b/tests/integration/vendor/symfony/polyfill-php80/PhpToken.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 Symfony\Polyfill\Php80; + +/** + * @author Fedonyuk Anton + * + * @internal + */ +class PhpToken implements \Stringable +{ + /** + * @var int + */ + public $id; + + /** + * @var string + */ + public $text; + + /** + * @var int + */ + public $line; + + /** + * @var int + */ + public $pos; + + public function __construct(int $id, string $text, int $line = -1, int $position = -1) + { + $this->id = $id; + $this->text = $text; + $this->line = $line; + $this->pos = $position; + } + + public function getTokenName(): ?string + { + if ('UNKNOWN' === $name = token_name($this->id)) { + $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; + } + + return $name; + } + + /** + * @param int|string|array $kind + */ + public function is($kind): bool + { + foreach ((array) $kind as $value) { + if (\in_array($value, [$this->id, $this->text], true)) { + return true; + } + } + + return false; + } + + public function isIgnorable(): bool + { + return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); + } + + public function __toString(): string + { + return (string) $this->text; + } + + /** + * @return static[] + */ + public static function tokenize(string $code, int $flags = 0): array + { + $line = 1; + $position = 0; + $tokens = token_get_all($code, $flags); + foreach ($tokens as $index => $token) { + if (\is_string($token)) { + $id = \ord($token); + $text = $token; + } else { + [$id, $text, $line] = $token; + } + $tokens[$index] = new static($id, $text, $line, $position); + $position += \strlen($text); + } + + return $tokens; + } +} diff --git a/tests/integration/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php b/tests/integration/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php new file mode 100644 index 0000000..72f1081 --- /dev/null +++ b/tests/integration/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php @@ -0,0 +1,7 @@ + */ -#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_PROPERTY)] +#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_PROPERTY)] final class Required { } diff --git a/tests/integration/vendor/symfony/service-contracts/Attribute/SubscribedService.php b/tests/integration/vendor/symfony/service-contracts/Attribute/SubscribedService.php deleted file mode 100644 index 10d1bc3..0000000 --- a/tests/integration/vendor/symfony/service-contracts/Attribute/SubscribedService.php +++ /dev/null @@ -1,33 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Contracts\Service\Attribute; - -use Symfony\Contracts\Service\ServiceSubscriberTrait; - -/** - * Use with {@see ServiceSubscriberTrait} to mark a method's return type - * as a subscribed service. - * - * @author Kevin Bond - */ -#[\Attribute(\Attribute::TARGET_METHOD)] -final class SubscribedService -{ - /** - * @param string|null $key The key to use for the service - * If null, use "ClassName::methodName" - */ - public function __construct( - public ?string $key = null - ) { - } -} diff --git a/tests/integration/vendor/symfony/service-contracts/CHANGELOG.md b/tests/integration/vendor/symfony/service-contracts/CHANGELOG.md index 7932e26..e984777 100644 --- a/tests/integration/vendor/symfony/service-contracts/CHANGELOG.md +++ b/tests/integration/vendor/symfony/service-contracts/CHANGELOG.md @@ -2,4 +2,4 @@ CHANGELOG ========= The changelog is maintained for all Symfony contracts at the following URL: -https://github.com/symfony/contracts/blob/main/CHANGELOG.md +https://github.com/symfony/contracts/blob/master/CHANGELOG.md diff --git a/tests/integration/vendor/symfony/service-contracts/LICENSE b/tests/integration/vendor/symfony/service-contracts/LICENSE index 2358414..69d925b 100644 --- a/tests/integration/vendor/symfony/service-contracts/LICENSE +++ b/tests/integration/vendor/symfony/service-contracts/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018-2021 Fabien Potencier +Copyright (c) 2018-2020 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/integration/vendor/symfony/service-contracts/README.md b/tests/integration/vendor/symfony/service-contracts/README.md index 41e054a..d033a43 100644 --- a/tests/integration/vendor/symfony/service-contracts/README.md +++ b/tests/integration/vendor/symfony/service-contracts/README.md @@ -6,4 +6,4 @@ A set of abstractions extracted out of the Symfony components. Can be used to build on semantics that the Symfony components proved useful - and that already have battle tested implementations. -See https://github.com/symfony/contracts/blob/main/README.md for more information. +See https://github.com/symfony/contracts/blob/master/README.md for more information. diff --git a/tests/integration/vendor/symfony/service-contracts/ServiceLocatorTrait.php b/tests/integration/vendor/symfony/service-contracts/ServiceLocatorTrait.php index 74dfa43..1737f50 100644 --- a/tests/integration/vendor/symfony/service-contracts/ServiceLocatorTrait.php +++ b/tests/integration/vendor/symfony/service-contracts/ServiceLocatorTrait.php @@ -43,17 +43,15 @@ trait ServiceLocatorTrait * * @return bool */ - public function has(string $id) + public function has($id) { return isset($this->factories[$id]); } /** * {@inheritdoc} - * - * @return mixed */ - public function get(string $id) + public function get($id) { if (!isset($this->factories[$id])) { throw $this->createNotFoundException($id); diff --git a/tests/integration/vendor/symfony/service-contracts/ServiceSubscriberInterface.php b/tests/integration/vendor/symfony/service-contracts/ServiceSubscriberInterface.php index 098ab90..8bb320f 100644 --- a/tests/integration/vendor/symfony/service-contracts/ServiceSubscriberInterface.php +++ b/tests/integration/vendor/symfony/service-contracts/ServiceSubscriberInterface.php @@ -47,7 +47,7 @@ interface ServiceSubscriberInterface * * ['?Psr\Log\LoggerInterface'] is a shortcut for * * ['Psr\Log\LoggerInterface' => '?Psr\Log\LoggerInterface'] * - * @return string[] The required service types, optionally keyed by service names + * @return array The required service types, optionally keyed by service names */ public static function getSubscribedServices(); } diff --git a/tests/integration/vendor/symfony/service-contracts/ServiceSubscriberTrait.php b/tests/integration/vendor/symfony/service-contracts/ServiceSubscriberTrait.php index 46cd007..82fb5ab 100644 --- a/tests/integration/vendor/symfony/service-contracts/ServiceSubscriberTrait.php +++ b/tests/integration/vendor/symfony/service-contracts/ServiceSubscriberTrait.php @@ -12,11 +12,10 @@ namespace Symfony\Contracts\Service; use Psr\Container\ContainerInterface; -use Symfony\Contracts\Service\Attribute\SubscribedService; /** * Implementation of ServiceSubscriberInterface that determines subscribed services from - * method return types. Service ids are available as "ClassName::methodName". + * private method return types. Service ids are available as "ClassName::methodName". * * @author Kevin Bond */ @@ -25,9 +24,6 @@ trait ServiceSubscriberTrait /** @var ContainerInterface */ protected $container; - /** - * {@inheritdoc} - */ public static function getSubscribedServices(): array { static $services; @@ -37,60 +33,14 @@ trait ServiceSubscriberTrait } $services = \is_callable(['parent', __FUNCTION__]) ? parent::getSubscribedServices() : []; - $attributeOptIn = false; - if (\PHP_VERSION_ID >= 80000) { - foreach ((new \ReflectionClass(self::class))->getMethods() as $method) { - if (self::class !== $method->getDeclaringClass()->name) { - continue; - } - - if (!$attribute = $method->getAttributes(SubscribedService::class)[0] ?? null) { - continue; - } - - if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) { - throw new \LogicException(sprintf('Cannot use "%s" on method "%s::%s()" (can only be used on non-static, non-abstract methods with no parameters).', SubscribedService::class, self::class, $method->name)); - } - - if (!$returnType = $method->getReturnType()) { - throw new \LogicException(sprintf('Cannot use "%s" on methods without a return type in "%s::%s()".', SubscribedService::class, $method->name, self::class)); - } - - $serviceId = $returnType instanceof \ReflectionNamedType ? $returnType->getName() : (string) $returnType; - - if ($returnType->allowsNull()) { - $serviceId = '?'.$serviceId; - } - - $services[$attribute->newInstance()->key ?? self::class.'::'.$method->name] = $serviceId; - $attributeOptIn = true; + foreach ((new \ReflectionClass(self::class))->getMethods() as $method) { + if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) { + continue; } - } - if (!$attributeOptIn) { - foreach ((new \ReflectionClass(self::class))->getMethods() as $method) { - if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) { - continue; - } - - if (self::class !== $method->getDeclaringClass()->name) { - continue; - } - - if (!($returnType = $method->getReturnType()) instanceof \ReflectionNamedType) { - continue; - } - - if ($returnType->isBuiltin()) { - continue; - } - - if (\PHP_VERSION_ID >= 80000) { - trigger_deprecation('symfony/service-contracts', '2.5', 'Using "%s" in "%s" without using the "%s" attribute on any method is deprecated.', ServiceSubscriberTrait::class, self::class, SubscribedService::class); - } - - $services[self::class.'::'.$method->name] = '?'.($returnType instanceof \ReflectionNamedType ? $returnType->getName() : $returnType); + if (self::class === $method->getDeclaringClass()->name && ($returnType = $method->getReturnType()) && !$returnType->isBuiltin()) { + $services[self::class.'::'.$method->name] = '?'.($returnType instanceof \ReflectionNamedType ? $returnType->getName() : $type); } } @@ -99,8 +49,6 @@ trait ServiceSubscriberTrait /** * @required - * - * @return ContainerInterface|null */ public function setContainer(ContainerInterface $container) { diff --git a/tests/integration/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php b/tests/integration/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php index 2a1b565..5ed9149 100644 --- a/tests/integration/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php +++ b/tests/integration/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php @@ -17,9 +17,6 @@ use Symfony\Contracts\Service\ServiceLocatorTrait; abstract class ServiceLocatorTest extends TestCase { - /** - * @return ContainerInterface - */ protected function getServiceLocator(array $factories) { return new class($factories) implements ContainerInterface { @@ -70,7 +67,7 @@ abstract class ServiceLocatorTest extends TestCase public function testThrowsOnUndefinedInternalService() { if (!$this->getExpectedException()) { - $this->expectException(\Psr\Container\NotFoundExceptionInterface::class); + $this->expectException('Psr\Container\NotFoundExceptionInterface'); $this->expectExceptionMessage('The service "foo" has a dependency on a non-existent service "bar". This locator only knows about the "foo" service.'); } $locator = $this->getServiceLocator([ @@ -82,7 +79,7 @@ abstract class ServiceLocatorTest extends TestCase public function testThrowsOnCircularReference() { - $this->expectException(\Psr\Container\ContainerExceptionInterface::class); + $this->expectException('Psr\Container\ContainerExceptionInterface'); $this->expectExceptionMessage('Circular reference detected for service "bar", path: "bar -> baz -> bar".'); $locator = $this->getServiceLocator([ 'foo' => function () use (&$locator) { return $locator->get('bar'); }, diff --git a/tests/integration/vendor/symfony/service-contracts/composer.json b/tests/integration/vendor/symfony/service-contracts/composer.json index e680798..47244fb 100644 --- a/tests/integration/vendor/symfony/service-contracts/composer.json +++ b/tests/integration/vendor/symfony/service-contracts/composer.json @@ -17,11 +17,7 @@ ], "require": { "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" - }, - "conflict": { - "ext-psr": "<1.1|>=2" + "psr/container": "^1.0" }, "suggest": { "symfony/service-implementation": "" @@ -32,7 +28,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", diff --git a/tests/integration/vendor/symfony/translation/PseudoLocalizationTranslator.php b/tests/integration/vendor/symfony/translation/PseudoLocalizationTranslator.php index 3fdc1aa..e004986 100644 --- a/tests/integration/vendor/symfony/translation/PseudoLocalizationTranslator.php +++ b/tests/integration/vendor/symfony/translation/PseudoLocalizationTranslator.php @@ -123,7 +123,7 @@ final class PseudoLocalizationTranslator implements TranslatorInterface return [[true, true, $originalTrans]]; } - $html = mb_convert_encoding($originalTrans, 'HTML-ENTITIES', mb_detect_encoding($originalTrans, null, true) ?: 'UTF-8'); + $html = mb_encode_numericentity($originalTrans, [0x80, 0xFFFF, 0, 0xFFFF], mb_detect_encoding($originalTrans, null, true) ?: 'UTF-8'); $useInternalErrors = libxml_use_internal_errors(true);