From ff521847ce40e364e33fb9de2363ccd3024f2d07 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 12 Apr 2024 08:00:59 +0000
Subject: [PATCH 001/129] Build(deps): bump phpdocumentor/reflection-docblock
 from 5.3.0 to 5.4.0

Bumps [phpdocumentor/reflection-docblock](https://github.com/phpDocumentor/ReflectionDocBlock) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/phpDocumentor/ReflectionDocBlock/releases)
- [Commits](https://github.com/phpDocumentor/ReflectionDocBlock/compare/5.3.0...5.4.0)

---
updated-dependencies:
- dependency-name: phpdocumentor/reflection-docblock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 41 ++++++++++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git a/composer.lock b/composer.lock
index 1958c424..7300c487 100644
--- a/composer.lock
+++ b/composer.lock
@@ -164,28 +164,35 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "5.3.0",
+            "version": "5.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
+                "reference": "298d2febfe79d03fe714eb871d5538da55205b1a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
-                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a",
+                "reference": "298d2febfe79d03fe714eb871d5538da55205b1a",
                 "shasum": ""
             },
             "require": {
+                "doctrine/deprecations": "^1.1",
                 "ext-filter": "*",
-                "php": "^7.2 || ^8.0",
+                "php": "^7.4 || ^8.0",
                 "phpdocumentor/reflection-common": "^2.2",
-                "phpdocumentor/type-resolver": "^1.3",
+                "phpdocumentor/type-resolver": "^1.7",
+                "phpstan/phpdoc-parser": "^1.7",
                 "webmozart/assert": "^1.9.1"
             },
             "require-dev": {
-                "mockery/mockery": "~1.3.2",
-                "psalm/phar": "^4.8"
+                "mockery/mockery": "~1.3.5",
+                "phpstan/extension-installer": "^1.1",
+                "phpstan/phpstan": "^1.8",
+                "phpstan/phpstan-mockery": "^1.1",
+                "phpstan/phpstan-webmozart-assert": "^1.2",
+                "phpunit/phpunit": "^9.5",
+                "vimeo/psalm": "^5.13"
             },
             "type": "library",
             "extra": {
@@ -209,15 +216,15 @@
                 },
                 {
                     "name": "Jaap van Otterdijk",
-                    "email": "account@ijaap.nl"
+                    "email": "opensource@ijaap.nl"
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
             "support": {
                 "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0"
             },
-            "time": "2021-10-19T17:43:47+00:00"
+            "time": "2024-04-09T21:13:58+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
@@ -279,16 +286,16 @@
         },
         {
             "name": "phpstan/phpdoc-parser",
-            "version": "1.26.0",
+            "version": "1.28.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpdoc-parser.git",
-                "reference": "231e3186624c03d7e7c890ec662b81e6b0405227"
+                "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/231e3186624c03d7e7c890ec662b81e6b0405227",
-                "reference": "231e3186624c03d7e7c890ec662b81e6b0405227",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+                "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
                 "shasum": ""
             },
             "require": {
@@ -320,9 +327,9 @@
             "description": "PHPDoc parser with support for nullable, intersection and generic types",
             "support": {
                 "issues": "https://github.com/phpstan/phpdoc-parser/issues",
-                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.26.0"
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
             },
-            "time": "2024-02-23T16:05:55+00:00"
+            "time": "2024-04-03T18:51:33+00:00"
         },
         {
             "name": "symfony/polyfill-php80",

From b15316890a018f29ba041faaad8c8ff905fff353 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 15 Apr 2024 08:31:08 +0000
Subject: [PATCH 002/129] Build(deps): bump phpDocumentor/.github from 0.5.0 to
 0.6

Bumps [phpDocumentor/.github](https://github.com/phpdocumentor/.github) from 0.5.0 to 0.6.
- [Release notes](https://github.com/phpdocumentor/.github/releases)
- [Commits](https://github.com/phpdocumentor/.github/compare/v0.5.0...v0.6)

---
updated-dependencies:
- dependency-name: phpDocumentor/.github
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 .github/workflows/integrate.yaml | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml
index a2f335dd..c486f756 100644
--- a/.github/workflows/integrate.yaml
+++ b/.github/workflows/integrate.yaml
@@ -13,7 +13,7 @@ on: # yamllint disable-line rule:truthy
 jobs:
   code-coverage:
     name: "Code Coverage"
-    uses: "phpDocumentor/.github/.github/workflows/code-coverage.yml@v0.5.0"
+    uses: "phpDocumentor/.github/.github/workflows/code-coverage.yml@v0.6"
     with:
       php-version: "8.2"
 
@@ -41,31 +41,31 @@ jobs:
 
   dependency-analysis:
     name: "Dependency analysis"
-    uses: "phpDocumentor/.github/.github/workflows/dependency-analysis.yml@v0.5.0"
+    uses: "phpDocumentor/.github/.github/workflows/dependency-analysis.yml@v0.6"
     with:
       php-version: "8.2"
 
   lint-root:
     name: "Lint root"
-    uses: "phpDocumentor/.github/.github/workflows/lint.yml@v0.5.0"
+    uses: "phpDocumentor/.github/.github/workflows/lint.yml@v0.6"
     with:
       php-version: "8.2"
       composer-options: "--no-check-publish --ansi"
 
   static-analysis:
     name: "Static analysis"
-    uses: "phpDocumentor/.github/.github/workflows/static-analysis.yml@v0.5.0"
+    uses: "phpDocumentor/.github/.github/workflows/static-analysis.yml@v0.6"
     with:
       php-version: "8.2"
       php-extensions: "none, ctype, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter, fileinfo, pcntl, posix"
 
   unit-tests:
     name: "Unit test"
-    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.5.0"
+    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.6"
 
   integration-tests:
     name: "Integration test"
-    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.5.0"
+    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.6"
     needs: "unit-tests"
     with:
       test-suite: "integration"

From f3fd2afc683a45be3f75d6aa76d3e5989d2ad439 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 16 Apr 2024 08:08:51 +0000
Subject: [PATCH 003/129] Build(deps-dev): bump phpstan/phpstan from 1.10.66 to
 1.10.67

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.10.66 to 1.10.67.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.11.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.10.66...1.10.67)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/composer.lock b/composer.lock
index 7300c487..9fcd0711 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1838,16 +1838,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.10.66",
+            "version": "1.10.67",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "94779c987e4ebd620025d9e5fdd23323903950bd"
+                "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd",
-                "reference": "94779c987e4ebd620025d9e5fdd23323903950bd",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493",
+                "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493",
                 "shasum": ""
             },
             "require": {
@@ -1890,13 +1890,9 @@
                 {
                     "url": "https://github.com/phpstan",
                     "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
-                    "type": "tidelift"
                 }
             ],
-            "time": "2024-03-28T16:17:31+00:00"
+            "time": "2024-04-16T07:22:02+00:00"
         },
         {
             "name": "phpstan/phpstan-php-parser",

From 5739243e0ed86dd1c308f361253ef2f76bb4768f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 24 Apr 2024 08:17:06 +0000
Subject: [PATCH 004/129] Build(deps-dev): bump squizlabs/php_codesniffer from
 3.9.1 to 3.9.2

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.9.1 to 3.9.2.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.9.1...3.9.2)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 9fcd0711..5e1cdbd0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -3675,16 +3675,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.9.1",
+            "version": "3.9.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909"
+                "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/267a4405fff1d9c847134db3a3c92f1ab7f77909",
-                "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/aac1f6f347a5c5ac6bc98ad395007df00990f480",
+                "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480",
                 "shasum": ""
             },
             "require": {
@@ -3751,7 +3751,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-03-31T21:03:09+00:00"
+            "time": "2024-04-23T20:25:34+00:00"
         },
         {
             "name": "symfony/console",

From ee675f4cc2b48545959cc08291abbf00f106fadf Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 29 Apr 2024 08:41:23 +0000
Subject: [PATCH 005/129] Build(deps): bump dependabot/fetch-metadata from
 2.0.0 to 2.1.0

Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/dependabot/fetch-metadata/releases)
- [Commits](https://github.com/dependabot/fetch-metadata/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: dependabot/fetch-metadata
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 .github/workflows/dependabot-auto-merge.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml
index 59db2da4..35e8e705 100644
--- a/.github/workflows/dependabot-auto-merge.yml
+++ b/.github/workflows/dependabot-auto-merge.yml
@@ -13,7 +13,7 @@ jobs:
     steps:
       - name: "Dependabot metadata"
         id: "metadata"
-        uses: "dependabot/fetch-metadata@v2.0.0"
+        uses: "dependabot/fetch-metadata@v2.1.0"
         with:
           github-token: "${{ secrets.GITHUB_TOKEN }}"
       - name: "Enable auto-merge for Dependabot PRs"

From 301ecc7f4f06e5a78acfeb54af3d4da6b5411201 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 2 May 2024 08:59:21 +0000
Subject: [PATCH 006/129] Build(deps-dev): bump vimeo/psalm from 5.23.1 to
 5.24.0

Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 5.23.1 to 5.24.0.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/5.23.1...5.24.0)

---
updated-dependencies:
- dependency-name: vimeo/psalm
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 203 ++++++++++++++++++++++++++++++++------------------
 1 file changed, 132 insertions(+), 71 deletions(-)

diff --git a/composer.lock b/composer.lock
index 5e1cdbd0..c2852d94 100644
--- a/composer.lock
+++ b/composer.lock
@@ -473,16 +473,16 @@
     "packages-dev": [
         {
             "name": "amphp/amp",
-            "version": "v2.6.2",
+            "version": "v2.6.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/amphp/amp.git",
-                "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb"
+                "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
-                "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
+                "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d",
+                "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d",
                 "shasum": ""
             },
             "require": {
@@ -494,8 +494,8 @@
                 "ext-json": "*",
                 "jetbrains/phpstorm-stubs": "^2019.3",
                 "phpunit/phpunit": "^7 | ^8 | ^9",
-                "psalm/phar": "^3.11@dev",
-                "react/promise": "^2"
+                "react/promise": "^2",
+                "vimeo/psalm": "^3.12"
             },
             "type": "library",
             "extra": {
@@ -550,7 +550,7 @@
             "support": {
                 "irc": "irc://irc.freenode.org/amphp",
                 "issues": "https://github.com/amphp/amp/issues",
-                "source": "https://github.com/amphp/amp/tree/v2.6.2"
+                "source": "https://github.com/amphp/amp/tree/v2.6.4"
             },
             "funding": [
                 {
@@ -558,20 +558,20 @@
                     "type": "github"
                 }
             ],
-            "time": "2022-02-20T17:52:18+00:00"
+            "time": "2024-03-21T18:52:26+00:00"
         },
         {
             "name": "amphp/byte-stream",
-            "version": "v1.8.1",
+            "version": "v1.8.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/amphp/byte-stream.git",
-                "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd"
+                "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd",
-                "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd",
+                "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc",
+                "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc",
                 "shasum": ""
             },
             "require": {
@@ -587,11 +587,6 @@
                 "psalm/phar": "^3.11.4"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
             "autoload": {
                 "files": [
                     "lib/functions.php"
@@ -615,7 +610,7 @@
                 }
             ],
             "description": "A stream abstraction to make working with non-blocking I/O simple.",
-            "homepage": "http://amphp.org/byte-stream",
+            "homepage": "https://amphp.org/byte-stream",
             "keywords": [
                 "amp",
                 "amphp",
@@ -625,9 +620,8 @@
                 "stream"
             ],
             "support": {
-                "irc": "irc://irc.freenode.org/amphp",
                 "issues": "https://github.com/amphp/byte-stream/issues",
-                "source": "https://github.com/amphp/byte-stream/tree/v1.8.1"
+                "source": "https://github.com/amphp/byte-stream/tree/v1.8.2"
             },
             "funding": [
                 {
@@ -635,20 +629,20 @@
                     "type": "github"
                 }
             ],
-            "time": "2021-03-30T17:13:30+00:00"
+            "time": "2024-04-13T18:00:56+00:00"
         },
         {
             "name": "composer/pcre",
-            "version": "3.1.2",
+            "version": "3.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/pcre.git",
-                "reference": "4775f35b2d70865807c89d32c8e7385b86eb0ace"
+                "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/pcre/zipball/4775f35b2d70865807c89d32c8e7385b86eb0ace",
-                "reference": "4775f35b2d70865807c89d32c8e7385b86eb0ace",
+                "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
+                "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
                 "shasum": ""
             },
             "require": {
@@ -690,7 +684,7 @@
             ],
             "support": {
                 "issues": "https://github.com/composer/pcre/issues",
-                "source": "https://github.com/composer/pcre/tree/3.1.2"
+                "source": "https://github.com/composer/pcre/tree/3.1.3"
             },
             "funding": [
                 {
@@ -706,7 +700,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-03-07T15:38:35+00:00"
+            "time": "2024-03-19T10:26:25+00:00"
         },
         {
             "name": "composer/semver",
@@ -791,16 +785,16 @@
         },
         {
             "name": "composer/xdebug-handler",
-            "version": "3.0.3",
+            "version": "3.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "ced299686f41dce890debac69273b47ffe98a40c"
+                "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
-                "reference": "ced299686f41dce890debac69273b47ffe98a40c",
+                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
+                "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
                 "shasum": ""
             },
             "require": {
@@ -811,7 +805,7 @@
             "require-dev": {
                 "phpstan/phpstan": "^1.0",
                 "phpstan/phpstan-strict-rules": "^1.1",
-                "symfony/phpunit-bridge": "^6.0"
+                "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
             },
             "type": "library",
             "autoload": {
@@ -835,9 +829,9 @@
                 "performance"
             ],
             "support": {
-                "irc": "irc://irc.freenode.org/composer",
+                "irc": "ircs://irc.libera.chat:6697/composer",
                 "issues": "https://github.com/composer/xdebug-handler/issues",
-                "source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
+                "source": "https://github.com/composer/xdebug-handler/tree/3.0.4"
             },
             "funding": [
                 {
@@ -853,7 +847,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-02-25T21:32:43+00:00"
+            "time": "2024-03-26T18:29:49+00:00"
         },
         {
             "name": "dealerdirect/phpcodesniffer-composer-installer",
@@ -3612,16 +3606,16 @@
         },
         {
             "name": "spatie/array-to-xml",
-            "version": "3.2.3",
+            "version": "3.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/spatie/array-to-xml.git",
-                "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab"
+                "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/c95fd4db94ec199f798d4b5b4a81757bd20d88ab",
-                "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab",
+                "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f56b220fe2db1ade4c88098d83413ebdfc3bf876",
+                "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876",
                 "shasum": ""
             },
             "require": {
@@ -3634,6 +3628,11 @@
                 "spatie/pest-plugin-snapshots": "^1.1"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
                     "Spatie\\ArrayToXml\\": "src"
@@ -3659,7 +3658,7 @@
                 "xml"
             ],
             "support": {
-                "source": "https://github.com/spatie/array-to-xml/tree/3.2.3"
+                "source": "https://github.com/spatie/array-to-xml/tree/3.3.0"
             },
             "funding": [
                 {
@@ -3671,7 +3670,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-02-07T10:39:02+00:00"
+            "time": "2024-05-01T10:20:27+00:00"
         },
         {
             "name": "squizlabs/php_codesniffer",
@@ -3755,16 +3754,16 @@
         },
         {
             "name": "symfony/console",
-            "version": "v6.4.4",
+            "version": "v6.4.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "0d9e4eb5ad413075624378f474c4167ea202de78"
+                "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78",
-                "reference": "0d9e4eb5ad413075624378f474c4167ea202de78",
+                "url": "https://api.github.com/repos/symfony/console/zipball/a170e64ae10d00ba89e2acbb590dc2e54da8ad8f",
+                "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f",
                 "shasum": ""
             },
             "require": {
@@ -3829,7 +3828,7 @@
                 "terminal"
             ],
             "support": {
-                "source": "https://github.com/symfony/console/tree/v6.4.4"
+                "source": "https://github.com/symfony/console/tree/v6.4.7"
             },
             "funding": [
                 {
@@ -3845,7 +3844,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-02-22T20:27:10+00:00"
+            "time": "2024-04-18T09:22:46+00:00"
         },
         {
             "name": "symfony/deprecation-contracts",
@@ -3916,22 +3915,23 @@
         },
         {
             "name": "symfony/filesystem",
-            "version": "v6.4.3",
+            "version": "v6.4.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb"
+                "reference": "78dde75f8f6dbbca4ec436a4b0087f7af02076d4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb",
-                "reference": "7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/78dde75f8f6dbbca4ec436a4b0087f7af02076d4",
+                "reference": "78dde75f8f6dbbca4ec436a4b0087f7af02076d4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=8.1",
                 "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.8"
+                "symfony/polyfill-mbstring": "~1.8",
+                "symfony/process": "^5.4|^6.4"
             },
             "type": "library",
             "autoload": {
@@ -3959,7 +3959,7 @@
             "description": "Provides basic utilities for the filesystem",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/filesystem/tree/v6.4.3"
+                "source": "https://github.com/symfony/filesystem/tree/v6.4.7"
             },
             "funding": [
                 {
@@ -3975,7 +3975,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-23T14:51:35+00:00"
+            "time": "2024-04-18T09:22:46+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
@@ -4295,18 +4295,79 @@
             ],
             "time": "2024-01-29T20:11:03+00:00"
         },
+        {
+            "name": "symfony/process",
+            "version": "v6.4.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "cdb1c81c145fd5aa9b0038bab694035020943381"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/cdb1c81c145fd5aa9b0038bab694035020943381",
+                "reference": "cdb1c81c145fd5aa9b0038bab694035020943381",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Executes commands in sub-processes",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/process/tree/v6.4.7"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-04-18T09:22:46+00:00"
+        },
         {
             "name": "symfony/service-contracts",
-            "version": "v3.4.1",
+            "version": "v3.4.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0"
+                "reference": "11bbf19a0fb7b36345861e85c5768844c552906e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0",
-                "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e",
+                "reference": "11bbf19a0fb7b36345861e85c5768844c552906e",
                 "shasum": ""
             },
             "require": {
@@ -4359,7 +4420,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/service-contracts/tree/v3.4.1"
+                "source": "https://github.com/symfony/service-contracts/tree/v3.4.2"
             },
             "funding": [
                 {
@@ -4375,20 +4436,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-12-26T14:02:43+00:00"
+            "time": "2023-12-19T21:51:00+00:00"
         },
         {
             "name": "symfony/string",
-            "version": "v6.4.4",
+            "version": "v6.4.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/string.git",
-                "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9"
+                "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9",
-                "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9",
+                "url": "https://api.github.com/repos/symfony/string/zipball/ffeb9591c61f65a68d47f77d12b83fa530227a69",
+                "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69",
                 "shasum": ""
             },
             "require": {
@@ -4445,7 +4506,7 @@
                 "utf8"
             ],
             "support": {
-                "source": "https://github.com/symfony/string/tree/v6.4.4"
+                "source": "https://github.com/symfony/string/tree/v6.4.7"
             },
             "funding": [
                 {
@@ -4461,7 +4522,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-02-01T13:16:41+00:00"
+            "time": "2024-04-18T09:22:46+00:00"
         },
         {
             "name": "theseer/tokenizer",
@@ -4515,16 +4576,16 @@
         },
         {
             "name": "vimeo/psalm",
-            "version": "5.23.1",
+            "version": "5.24.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/vimeo/psalm.git",
-                "reference": "8471a896ccea3526b26d082f4461eeea467f10a4"
+                "reference": "462c80e31c34e58cc4f750c656be3927e80e550e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vimeo/psalm/zipball/8471a896ccea3526b26d082f4461eeea467f10a4",
-                "reference": "8471a896ccea3526b26d082f4461eeea467f10a4",
+                "url": "https://api.github.com/repos/vimeo/psalm/zipball/462c80e31c34e58cc4f750c656be3927e80e550e",
+                "reference": "462c80e31c34e58cc4f750c656be3927e80e550e",
                 "shasum": ""
             },
             "require": {
@@ -4621,7 +4682,7 @@
                 "issues": "https://github.com/vimeo/psalm/issues",
                 "source": "https://github.com/vimeo/psalm"
             },
-            "time": "2024-03-11T20:33:46+00:00"
+            "time": "2024-05-01T19:32:08+00:00"
         }
     ],
     "aliases": [],

From 84eea624b71bd096ccb3dcc7456931101190a060 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Mon, 6 May 2024 23:28:12 +0200
Subject: [PATCH 007/129] Upgrade to phpunit 10

---
 .gitignore                                    |   1 +
 composer.json                                 |   2 +-
 composer.lock                                 | 518 ++++++++----------
 phpunit.xml.dist                              |  43 +-
 .../Reflection/File/LocalFileTest.php         |  10 +-
 .../Middleware/ChainFactoryTest.php           |   8 +-
 .../NodeVisitor/ElementNameResolverTest.php   |  25 +-
 .../Reflection/Php/ArgumentTest.php           |  12 +-
 .../Reflection/Php/Class_Test.php             |  52 +-
 .../Reflection/Php/ConstantTest.php           |  36 +-
 .../Reflection/Php/EnumCaseTest.php           |  15 +-
 .../Reflection/Php/Enum_Test.php              |  43 +-
 .../Php/Factory/ClassConstantIteratorTest.php |  26 +-
 .../Php/Factory/ClassConstantTest.php         |  22 +-
 .../Reflection/Php/Factory/Class_Test.php     |  32 +-
 .../Php/Factory/ConstructorPromotionTest.php  |  22 +-
 .../Php/Factory/ContextStackTest.php          |  37 +-
 .../Reflection/Php/Factory/DefineTest.php     |  15 +-
 .../Reflection/Php/Factory/EnumCaseTest.php   |  12 +-
 .../Reflection/Php/Factory/Enum_Test.php      |  24 +-
 .../Php/Factory/File/CreateCommandTest.php    |  14 +-
 .../Reflection/Php/Factory/FileTest.php       |  47 +-
 .../Reflection/Php/Factory/Function_Test.php  |  22 +-
 .../Factory/GlobalConstantIteratorTest.php    |  25 +-
 .../Php/Factory/GlobalConstantTest.php        |  17 +-
 .../Reflection/Php/Factory/Interface_Test.php |  26 +-
 .../Reflection/Php/Factory/MethodTest.php     |  25 +-
 .../Reflection/Php/Factory/Namespace_Test.php |   6 +-
 .../Php/Factory/PropertyIteratorTest.php      |  33 +-
 .../Reflection/Php/Factory/PropertyTest.php   |  24 +-
 .../Reflection/Php/Factory/TestCase.php       |   3 +-
 .../Reflection/Php/Factory/TraitUseTest.php   |  20 +-
 .../Reflection/Php/Factory/Trait_Test.php     |  30 +-
 .../Reflection/Php/Factory/TypeTest.php       |  12 +-
 .../phpDocumentor/Reflection/Php/FileTest.php |  63 +--
 .../Reflection/Php/Function_Test.php          |  33 +-
 .../Reflection/Php/Interface_Test.php         |  39 +-
 ...st.php => MetadataContainerTestHelper.php} |   7 +-
 .../Reflection/Php/MethodTest.php             |  37 +-
 .../Reflection/Php/Namespace_Test.php         |  36 +-
 .../Reflection/Php/NodesFactoryTest.php       |  10 +-
 .../Php/ProjectFactoryStrategiesTest.php      |  12 +-
 .../Reflection/Php/ProjectFactoryTest.php     |  74 +--
 .../Reflection/Php/ProjectTest.php            |  32 +-
 .../Reflection/Php/PropertyTest.php           |  56 +-
 .../phpDocumentor/Reflection/Php/TestCase.php |  15 +-
 .../Reflection/Php/Trait_Test.php             |  44 +-
 .../ValueEvaluator/ConstantEvaluatorTest.php  |  12 +-
 .../Reflection/Php/VisibilityTest.php         |  14 +-
 .../Types/NamespaceNodeToContextTest.php      |  14 +-
 50 files changed, 539 insertions(+), 1218 deletions(-)
 rename tests/unit/phpDocumentor/Reflection/Php/{MetadataContainerTest.php => MetadataContainerTestHelper.php} (85%)

diff --git a/.gitignore b/.gitignore
index 2f7c377a..9e57f05f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,4 @@ vendor/
 # By default the phpunit.xml.dist is provided; you can override this using a local config file
 phpunit.xml
 .phpunit.result.cache
+.phpunit.cache
diff --git a/composer.json b/composer.json
index 64a59bd8..3c9045d1 100644
--- a/composer.json
+++ b/composer.json
@@ -37,7 +37,7 @@
         "phpstan/phpstan": "^1.8",
         "phpstan/phpstan-php-parser": "^1.1",
         "phpstan/phpstan-webmozart-assert": "^1.2",
-        "phpunit/phpunit": "^9.5",
+        "phpunit/phpunit": "^10.0",
         "rector/rector": "^1.0.0",
         "squizlabs/php_codesniffer": "^3.8",
         "vimeo/psalm": "^5.0"
diff --git a/composer.lock b/composer.lock
index c2852d94..76402555 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "a75aa0bc395a71d9fa4f95b7292ae854",
+    "content-hash": "c9f02f2c20dd063dd9d81eabd836d3aa",
     "packages": [
         {
             "name": "doctrine/deprecations",
@@ -1993,16 +1993,16 @@
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "9.2.31",
+            "version": "10.1.14",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965"
+                "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965",
-                "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
+                "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
                 "shasum": ""
             },
             "require": {
@@ -2010,18 +2010,18 @@
                 "ext-libxml": "*",
                 "ext-xmlwriter": "*",
                 "nikic/php-parser": "^4.18 || ^5.0",
-                "php": ">=7.3",
-                "phpunit/php-file-iterator": "^3.0.3",
-                "phpunit/php-text-template": "^2.0.2",
-                "sebastian/code-unit-reverse-lookup": "^2.0.2",
-                "sebastian/complexity": "^2.0",
-                "sebastian/environment": "^5.1.2",
-                "sebastian/lines-of-code": "^1.0.3",
-                "sebastian/version": "^3.0.1",
+                "php": ">=8.1",
+                "phpunit/php-file-iterator": "^4.0",
+                "phpunit/php-text-template": "^3.0",
+                "sebastian/code-unit-reverse-lookup": "^3.0",
+                "sebastian/complexity": "^3.0",
+                "sebastian/environment": "^6.0",
+                "sebastian/lines-of-code": "^2.0",
+                "sebastian/version": "^4.0",
                 "theseer/tokenizer": "^1.2.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.1"
             },
             "suggest": {
                 "ext-pcov": "PHP extension that provides line coverage",
@@ -2030,7 +2030,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "9.2-dev"
+                    "dev-main": "10.1-dev"
                 }
             },
             "autoload": {
@@ -2059,7 +2059,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                 "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14"
             },
             "funding": [
                 {
@@ -2067,32 +2067,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-03-02T06:37:42+00:00"
+            "time": "2024-03-12T15:33:41+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
-            "version": "3.0.6",
+            "version": "4.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+                "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
-                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c",
+                "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.0-dev"
+                    "dev-main": "4.0-dev"
                 }
             },
             "autoload": {
@@ -2119,7 +2119,8 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
-                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+                "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0"
             },
             "funding": [
                 {
@@ -2127,28 +2128,28 @@
                     "type": "github"
                 }
             ],
-            "time": "2021-12-02T12:48:52+00:00"
+            "time": "2023-08-31T06:24:48+00:00"
         },
         {
             "name": "phpunit/php-invoker",
-            "version": "3.1.1",
+            "version": "4.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-invoker.git",
-                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+                "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
-                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+                "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
                 "ext-pcntl": "*",
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "suggest": {
                 "ext-pcntl": "*"
@@ -2156,7 +2157,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.1-dev"
+                    "dev-main": "4.0-dev"
                 }
             },
             "autoload": {
@@ -2182,7 +2183,7 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
-                "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+                "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
             },
             "funding": [
                 {
@@ -2190,32 +2191,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T05:58:55+00:00"
+            "time": "2023-02-03T06:56:09+00:00"
         },
         {
             "name": "phpunit/php-text-template",
-            "version": "2.0.4",
+            "version": "3.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+                "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
-                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+                "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-main": "3.0-dev"
                 }
             },
             "autoload": {
@@ -2241,7 +2242,8 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
-                "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+                "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+                "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1"
             },
             "funding": [
                 {
@@ -2249,32 +2251,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T05:33:50+00:00"
+            "time": "2023-08-31T14:07:24+00:00"
         },
         {
             "name": "phpunit/php-timer",
-            "version": "5.0.3",
+            "version": "6.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+                "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
-                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+                "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.0-dev"
+                    "dev-main": "6.0-dev"
                 }
             },
             "autoload": {
@@ -2300,7 +2302,7 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-timer/issues",
-                "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+                "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
             },
             "funding": [
                 {
@@ -2308,24 +2310,23 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:16:10+00:00"
+            "time": "2023-02-03T06:57:52+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "9.6.17",
+            "version": "10.5.20",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd"
+                "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a156980d78a6666721b7e8e8502fe210b587fcd",
-                "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/547d314dc24ec1e177720d45c6263fb226cc2ae3",
+                "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3",
                 "shasum": ""
             },
             "require": {
-                "doctrine/instantiator": "^1.3.1 || ^2",
                 "ext-dom": "*",
                 "ext-json": "*",
                 "ext-libxml": "*",
@@ -2335,27 +2336,26 @@
                 "myclabs/deep-copy": "^1.10.1",
                 "phar-io/manifest": "^2.0.3",
                 "phar-io/version": "^3.0.2",
-                "php": ">=7.3",
-                "phpunit/php-code-coverage": "^9.2.28",
-                "phpunit/php-file-iterator": "^3.0.5",
-                "phpunit/php-invoker": "^3.1.1",
-                "phpunit/php-text-template": "^2.0.3",
-                "phpunit/php-timer": "^5.0.2",
-                "sebastian/cli-parser": "^1.0.1",
-                "sebastian/code-unit": "^1.0.6",
-                "sebastian/comparator": "^4.0.8",
-                "sebastian/diff": "^4.0.3",
-                "sebastian/environment": "^5.1.3",
-                "sebastian/exporter": "^4.0.5",
-                "sebastian/global-state": "^5.0.1",
-                "sebastian/object-enumerator": "^4.0.3",
-                "sebastian/resource-operations": "^3.0.3",
-                "sebastian/type": "^3.2",
-                "sebastian/version": "^3.0.2"
+                "php": ">=8.1",
+                "phpunit/php-code-coverage": "^10.1.5",
+                "phpunit/php-file-iterator": "^4.0",
+                "phpunit/php-invoker": "^4.0",
+                "phpunit/php-text-template": "^3.0",
+                "phpunit/php-timer": "^6.0",
+                "sebastian/cli-parser": "^2.0",
+                "sebastian/code-unit": "^2.0",
+                "sebastian/comparator": "^5.0",
+                "sebastian/diff": "^5.0",
+                "sebastian/environment": "^6.0",
+                "sebastian/exporter": "^5.1",
+                "sebastian/global-state": "^6.0.1",
+                "sebastian/object-enumerator": "^5.0",
+                "sebastian/recursion-context": "^5.0",
+                "sebastian/type": "^4.0",
+                "sebastian/version": "^4.0"
             },
             "suggest": {
-                "ext-soap": "To be able to generate mocks based on WSDL files",
-                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+                "ext-soap": "To be able to generate mocks based on WSDL files"
             },
             "bin": [
                 "phpunit"
@@ -2363,7 +2363,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "9.6-dev"
+                    "dev-main": "10.5-dev"
                 }
             },
             "autoload": {
@@ -2395,7 +2395,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.17"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.20"
             },
             "funding": [
                 {
@@ -2411,7 +2411,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-02-23T13:14:51+00:00"
+            "time": "2024-04-24T06:32:35+00:00"
         },
         {
             "name": "psr/container",
@@ -2577,28 +2577,28 @@
         },
         {
             "name": "sebastian/cli-parser",
-            "version": "1.0.2",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/cli-parser.git",
-                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
+                "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
-                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+                "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-main": "2.0-dev"
                 }
             },
             "autoload": {
@@ -2621,7 +2621,8 @@
             "homepage": "https://github.com/sebastianbergmann/cli-parser",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
-                "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
+                "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+                "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
             },
             "funding": [
                 {
@@ -2629,32 +2630,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-03-02T06:27:43+00:00"
+            "time": "2024-03-02T07:12:49+00:00"
         },
         {
             "name": "sebastian/code-unit",
-            "version": "1.0.8",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/code-unit.git",
-                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+                "reference": "a81fee9eef0b7a76af11d121767abc44c104e503"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
-                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503",
+                "reference": "a81fee9eef0b7a76af11d121767abc44c104e503",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-main": "2.0-dev"
                 }
             },
             "autoload": {
@@ -2677,7 +2678,7 @@
             "homepage": "https://github.com/sebastianbergmann/code-unit",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/code-unit/issues",
-                "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+                "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0"
             },
             "funding": [
                 {
@@ -2685,32 +2686,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:08:54+00:00"
+            "time": "2023-02-03T06:58:43+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
-            "version": "2.0.3",
+            "version": "3.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
-                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+                "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
-                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
+                "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-main": "3.0-dev"
                 }
             },
             "autoload": {
@@ -2732,7 +2733,7 @@
             "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
-                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0"
             },
             "funding": [
                 {
@@ -2740,34 +2741,36 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T05:30:19+00:00"
+            "time": "2023-02-03T06:59:15+00:00"
         },
         {
             "name": "sebastian/comparator",
-            "version": "4.0.8",
+            "version": "5.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
+                "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
-                "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
+                "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/diff": "^4.0",
-                "sebastian/exporter": "^4.0"
+                "ext-dom": "*",
+                "ext-mbstring": "*",
+                "php": ">=8.1",
+                "sebastian/diff": "^5.0",
+                "sebastian/exporter": "^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.0-dev"
                 }
             },
             "autoload": {
@@ -2806,7 +2809,8 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/comparator/issues",
-                "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
+                "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+                "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
             },
             "funding": [
                 {
@@ -2814,33 +2818,33 @@
                     "type": "github"
                 }
             ],
-            "time": "2022-09-14T12:41:17+00:00"
+            "time": "2023-08-14T13:18:12+00:00"
         },
         {
             "name": "sebastian/complexity",
-            "version": "2.0.3",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/complexity.git",
-                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
+                "reference": "68ff824baeae169ec9f2137158ee529584553799"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
-                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
+                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
+                "reference": "68ff824baeae169ec9f2137158ee529584553799",
                 "shasum": ""
             },
             "require": {
                 "nikic/php-parser": "^4.18 || ^5.0",
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-main": "3.2-dev"
                 }
             },
             "autoload": {
@@ -2863,7 +2867,8 @@
             "homepage": "https://github.com/sebastianbergmann/complexity",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/complexity/issues",
-                "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
+                "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+                "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
             },
             "funding": [
                 {
@@ -2871,33 +2876,33 @@
                     "type": "github"
                 }
             ],
-            "time": "2023-12-22T06:19:30+00:00"
+            "time": "2023-12-21T08:37:17+00:00"
         },
         {
             "name": "sebastian/diff",
-            "version": "4.0.6",
+            "version": "5.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
+                "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
-                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
+                "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3",
-                "symfony/process": "^4.2 || ^5"
+                "phpunit/phpunit": "^10.0",
+                "symfony/process": "^6.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.1-dev"
                 }
             },
             "autoload": {
@@ -2929,7 +2934,8 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/diff/issues",
-                "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
+                "security": "https://github.com/sebastianbergmann/diff/security/policy",
+                "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
             },
             "funding": [
                 {
@@ -2937,27 +2943,27 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-03-02T06:30:58+00:00"
+            "time": "2024-03-02T07:15:17+00:00"
         },
         {
             "name": "sebastian/environment",
-            "version": "5.1.5",
+            "version": "6.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
+                "reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
-                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
+                "reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "suggest": {
                 "ext-posix": "*"
@@ -2965,7 +2971,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.1-dev"
+                    "dev-main": "6.1-dev"
                 }
             },
             "autoload": {
@@ -2984,7 +2990,7 @@
                 }
             ],
             "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "homepage": "https://github.com/sebastianbergmann/environment",
             "keywords": [
                 "Xdebug",
                 "environment",
@@ -2992,7 +2998,8 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/environment/issues",
-                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
+                "security": "https://github.com/sebastianbergmann/environment/security/policy",
+                "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
             },
             "funding": [
                 {
@@ -3000,34 +3007,34 @@
                     "type": "github"
                 }
             ],
-            "time": "2023-02-03T06:03:51+00:00"
+            "time": "2024-03-23T08:47:14+00:00"
         },
         {
             "name": "sebastian/exporter",
-            "version": "4.0.6",
+            "version": "5.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
+                "reference": "955288482d97c19a372d3f31006ab3f37da47adf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
-                "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
+                "reference": "955288482d97c19a372d3f31006ab3f37da47adf",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/recursion-context": "^4.0"
+                "ext-mbstring": "*",
+                "php": ">=8.1",
+                "sebastian/recursion-context": "^5.0"
             },
             "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.1-dev"
                 }
             },
             "autoload": {
@@ -3069,7 +3076,8 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/exporter/issues",
-                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
+                "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+                "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
             },
             "funding": [
                 {
@@ -3077,38 +3085,35 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-03-02T06:33:00+00:00"
+            "time": "2024-03-02T07:17:12+00:00"
         },
         {
             "name": "sebastian/global-state",
-            "version": "5.0.7",
+            "version": "6.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
+                "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
-                "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+                "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
+                "php": ">=8.1",
+                "sebastian/object-reflector": "^3.0",
+                "sebastian/recursion-context": "^5.0"
             },
             "require-dev": {
                 "ext-dom": "*",
-                "phpunit/phpunit": "^9.3"
-            },
-            "suggest": {
-                "ext-uopz": "*"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.0-dev"
+                    "dev-main": "6.0-dev"
                 }
             },
             "autoload": {
@@ -3127,13 +3132,14 @@
                 }
             ],
             "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "homepage": "https://www.github.com/sebastianbergmann/global-state",
             "keywords": [
                 "global state"
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/global-state/issues",
-                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
+                "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+                "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
             },
             "funding": [
                 {
@@ -3141,33 +3147,33 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-03-02T06:35:11+00:00"
+            "time": "2024-03-02T07:19:19+00:00"
         },
         {
             "name": "sebastian/lines-of-code",
-            "version": "1.0.4",
+            "version": "2.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/lines-of-code.git",
-                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
+                "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
-                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
+                "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
                 "shasum": ""
             },
             "require": {
                 "nikic/php-parser": "^4.18 || ^5.0",
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-main": "2.0-dev"
                 }
             },
             "autoload": {
@@ -3190,7 +3196,8 @@
             "homepage": "https://github.com/sebastianbergmann/lines-of-code",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
-                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
+                "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
             },
             "funding": [
                 {
@@ -3198,34 +3205,34 @@
                     "type": "github"
                 }
             ],
-            "time": "2023-12-22T06:20:34+00:00"
+            "time": "2023-12-21T08:38:20+00:00"
         },
         {
             "name": "sebastian/object-enumerator",
-            "version": "4.0.4",
+            "version": "5.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/object-enumerator.git",
-                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+                "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
-                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906",
+                "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
+                "php": ">=8.1",
+                "sebastian/object-reflector": "^3.0",
+                "sebastian/recursion-context": "^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3247,7 +3254,7 @@
             "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
-                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0"
             },
             "funding": [
                 {
@@ -3255,32 +3262,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:12:34+00:00"
+            "time": "2023-02-03T07:08:32+00:00"
         },
         {
             "name": "sebastian/object-reflector",
-            "version": "2.0.4",
+            "version": "3.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/object-reflector.git",
-                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+                "reference": "24ed13d98130f0e7122df55d06c5c4942a577957"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
-                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957",
+                "reference": "24ed13d98130f0e7122df55d06c5c4942a577957",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-main": "3.0-dev"
                 }
             },
             "autoload": {
@@ -3302,7 +3309,7 @@
             "homepage": "https://github.com/sebastianbergmann/object-reflector/",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
-                "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+                "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0"
             },
             "funding": [
                 {
@@ -3310,32 +3317,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:14:26+00:00"
+            "time": "2023-02-03T07:06:18+00:00"
         },
         {
             "name": "sebastian/recursion-context",
-            "version": "4.0.5",
+            "version": "5.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
+                "reference": "05909fb5bc7df4c52992396d0116aed689f93712"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
-                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712",
+                "reference": "05909fb5bc7df4c52992396d0116aed689f93712",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3365,62 +3372,7 @@
             "homepage": "https://github.com/sebastianbergmann/recursion-context",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
-                "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2023-02-03T06:07:39+00:00"
-        },
-        {
-            "name": "sebastian/resource-operations",
-            "version": "3.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sebastianbergmann/resource-operations.git",
-                "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
-                "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                }
-            ],
-            "description": "Provides a list of PHP built-in functions that operate on resources",
-            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
-            "support": {
-                "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
-                "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+                "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0"
             },
             "funding": [
                 {
@@ -3428,32 +3380,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T06:45:17+00:00"
+            "time": "2023-02-03T07:05:40+00:00"
         },
         {
             "name": "sebastian/type",
-            "version": "3.2.1",
+            "version": "4.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/type.git",
-                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
+                "reference": "462699a16464c3944eefc02ebdd77882bd3925bf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
-                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf",
+                "reference": "462699a16464c3944eefc02ebdd77882bd3925bf",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.5"
+                "phpunit/phpunit": "^10.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.2-dev"
+                    "dev-main": "4.0-dev"
                 }
             },
             "autoload": {
@@ -3476,7 +3428,7 @@
             "homepage": "https://github.com/sebastianbergmann/type",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/type/issues",
-                "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
+                "source": "https://github.com/sebastianbergmann/type/tree/4.0.0"
             },
             "funding": [
                 {
@@ -3484,29 +3436,29 @@
                     "type": "github"
                 }
             ],
-            "time": "2023-02-03T06:13:03+00:00"
+            "time": "2023-02-03T07:10:45+00:00"
         },
         {
             "name": "sebastian/version",
-            "version": "3.0.2",
+            "version": "4.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "c6c1022351a901512170118436c764e473f6de8c"
+                "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
-                "reference": "c6c1022351a901512170118436c764e473f6de8c",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+                "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.0-dev"
+                    "dev-main": "4.0-dev"
                 }
             },
             "autoload": {
@@ -3529,7 +3481,7 @@
             "homepage": "https://github.com/sebastianbergmann/version",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/version/issues",
-                "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+                "source": "https://github.com/sebastianbergmann/version/tree/4.0.1"
             },
             "funding": [
                 {
@@ -3537,7 +3489,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T06:39:44+00:00"
+            "time": "2023-02-07T11:34:05+00:00"
         },
         {
             "name": "slevomat/coding-standard",
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 235ec710..a7903131 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,18 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
-
-<phpunit
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/8.0/phpunit.xsd"
-        colors="true"
-        verbose="true"
-        bootstrap="vendor/autoload.php"
-        forceCoversAnnotation="true"
-        convertDeprecationsToExceptions="true"
-        beStrictAboutCoversAnnotation="false"
-        beStrictAboutOutputDuringTests="true"
-        beStrictAboutChangesToGlobalState="true"
-        beStrictAboutTodoAnnotatedTests="true"
->
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" colors="true" bootstrap="vendor/autoload.php" beStrictAboutOutputDuringTests="true" beStrictAboutChangesToGlobalState="true" cacheDirectory=".phpunit.cache" requireCoverageMetadata="true" beStrictAboutCoverageMetadata="false">
+  <coverage>
+    <report>
+      <clover outputFile="build/logs/clover.xml"/>
+      <html outputDirectory="build/coverage" lowUpperBound="35" highLowerBound="70"/>
+    </report>
+  </coverage>
   <testsuites>
     <testsuite name="unit">
       <directory>./tests/unit</directory>
@@ -21,22 +14,10 @@
       <directory>./tests/integration</directory>
     </testsuite>
   </testsuites>
-  <filter>
-    <whitelist>
+  <logging/>
+  <source>
+    <include>
       <directory suffix=".php">./src/</directory>
-    </whitelist>
-  </filter>
-  <logging>
-    <log type="coverage-html"
-         target="build/coverage"
-         lowUpperBound="35"
-         highLowerBound="70"/>
-    <log type="coverage-clover" target="build/logs/clover.xml"/>
-  </logging>
-  <listeners>
-    <listener
-            class="Mockery\Adapter\Phpunit\TestListener"
-            file="vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/TestListener.php"
-    />
-  </listeners>
+    </include>
+  </source>
 </phpunit>
diff --git a/tests/unit/phpDocumentor/Reflection/File/LocalFileTest.php b/tests/unit/phpDocumentor/Reflection/File/LocalFileTest.php
index 05cd23a1..acfe40cc 100644
--- a/tests/unit/phpDocumentor/Reflection/File/LocalFileTest.php
+++ b/tests/unit/phpDocumentor/Reflection/File/LocalFileTest.php
@@ -14,38 +14,32 @@
 namespace phpDocumentor\Reflection\File;
 
 use InvalidArgumentException;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
 
 use function md5_file;
 
-/**
- * @coversDefaultClass phpDocumentor\Reflection\File\LocalFile
- * @covers ::__construct
- */
+#[CoversClass(LocalFile::class)]
 class LocalFileTest extends TestCase
 {
-    /** @covers ::getContents */
     public function testGetContents(): void
     {
         $file = new LocalFile(__FILE__);
         $this->assertStringEqualsFile(__FILE__, $file->getContents());
     }
 
-    /** @covers ::md5 */
     public function testMd5(): void
     {
         $file = new LocalFile(__FILE__);
         $this->assertEquals(md5_file(__FILE__), $file->md5());
     }
 
-    /** @covers ::__construct */
     public function testNotExistingFileThrowsException(): void
     {
         $this->expectException(InvalidArgumentException::class);
         new LocalFile('aa');
     }
 
-    /** @covers ::path */
     public function testPath(): void
     {
         $file = new LocalFile(__FILE__);
diff --git a/tests/unit/phpDocumentor/Reflection/Middleware/ChainFactoryTest.php b/tests/unit/phpDocumentor/Reflection/Middleware/ChainFactoryTest.php
index 7a7e68f2..6a071ff4 100644
--- a/tests/unit/phpDocumentor/Reflection/Middleware/ChainFactoryTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Middleware/ChainFactoryTest.php
@@ -14,16 +14,13 @@
 namespace phpDocumentor\Reflection\Middleware;
 
 use InvalidArgumentException;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
 use stdClass;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Middleware\ChainFactory
- * @covers ::<private>
- */
+#[CoversClass(ChainFactory::class)]
 final class ChainFactoryTest extends TestCase
 {
-    /** @covers ::createExecutionChain */
     public function testItCreatesAChainOfCallablesThatWillInvokeAllMiddlewares(): void
     {
         $exampleCommand = new class implements Command {
@@ -46,7 +43,6 @@ static function (): stdClass {
         $this->assertSame('abc', $chain(new $exampleCommand())->counter);
     }
 
-    /** @covers ::createExecutionChain */
     public function testItThrowsAnExceptionIfAnythingOtherThanAMiddlewareIsPassed(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/phpDocumentor/Reflection/NodeVisitor/ElementNameResolverTest.php b/tests/unit/phpDocumentor/Reflection/NodeVisitor/ElementNameResolverTest.php
index f32d116a..ac06dbab 100644
--- a/tests/unit/phpDocumentor/Reflection/NodeVisitor/ElementNameResolverTest.php
+++ b/tests/unit/phpDocumentor/Reflection/NodeVisitor/ElementNameResolverTest.php
@@ -26,14 +26,10 @@
 use PhpParser\Node\Stmt\Namespace_;
 use PhpParser\Node\Stmt\PropertyProperty;
 use PhpParser\NodeTraverser;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
 
-/**
- * @uses \phpDocumentor\Reflection\NodeVisitor\ElementNameResolver::beforeTraverse
- *
- * @coversDefaultClass \phpDocumentor\Reflection\NodeVisitor\ElementNameResolver
- * @covers ::<private>
- */
+#[CoversClass(ElementNameResolver::class)]
 class ElementNameResolverTest extends TestCase
 {
     private ElementNameResolver $fixture;
@@ -44,7 +40,6 @@ protected function setUp(): void
         $this->fixture->beforeTraverse([]);
     }
 
-    /** @covers ::enterNode */
     public function testFunctionWithoutNamespace(): void
     {
         $function = new Function_('myFunction');
@@ -53,7 +48,6 @@ public function testFunctionWithoutNamespace(): void
         $this->assertEquals('\myFunction()', (string) $function->getAttribute('fqsen'));
     }
 
-    /** @covers ::enterNode */
     public function testWithClass(): void
     {
         $class = new Class_('myClass');
@@ -62,7 +56,6 @@ public function testWithClass(): void
         $this->assertEquals('\myClass', (string) $class->getAttribute('fqsen'));
     }
 
-    /** @covers ::enterNode */
     public function testWithClassMethod(): void
     {
         $class = new Class_('myClass');
@@ -74,7 +67,6 @@ public function testWithClassMethod(): void
         $this->assertEquals('\myClass::method()', (string) $method->getAttribute('fqsen'));
     }
 
-    /** @covers ::enterNode */
     public function testWithClassProperty(): void
     {
         $class = new Class_('myClass');
@@ -89,8 +81,6 @@ public function testWithClassProperty(): void
     /**
      * If anonymous classes were processed, we would obtain a
      * InvalidArgumentException for an invalid Fqsen.
-     *
-     * @covers ::enterNode
      */
     public function testDoesNotEnterAnonymousClass(): void
     {
@@ -101,12 +91,7 @@ public function testDoesNotEnterAnonymousClass(): void
         );
     }
 
-    /**
-     * @link https://github.com/phpDocumentor/Reflection/issues/103
-     *
-     * @covers ::enterNode
-     * @covers ::leaveNode
-     */
+    /** @link https://github.com/phpDocumentor/Reflection/issues/103 */
     public function testAnonymousClassDoesNotPopParts(): void
     {
         $anonymousClass = new Class_(null);
@@ -125,7 +110,6 @@ public function testAnonymousClassDoesNotPopParts(): void
         $this->assertTrue(true);
     }
 
-    /** @covers ::enterNode */
     public function testClassConstant(): void
     {
         $const      = new Const_('MY_CLASS', new String_('value'));
@@ -139,7 +123,6 @@ public function testClassConstant(): void
         $this->assertEquals('\\myClass::MY_CLASS', (string) $const->getAttribute('fqsen'));
     }
 
-    /** @covers ::enterNode */
     public function testNamespacedConstant(): void
     {
         $const     = new Const_('MY_CLASS', new String_('value'));
@@ -151,7 +134,6 @@ public function testNamespacedConstant(): void
         $this->assertEquals('\\name\\MY_CLASS', (string) $const->getAttribute('fqsen'));
     }
 
-    /** @covers ::enterNode */
     public function testNoNameNamespace(): void
     {
         $const     = new Const_('MY_CLASS', new String_('value'));
@@ -163,7 +145,6 @@ public function testNoNameNamespace(): void
         $this->assertEquals('\\MY_CLASS', (string) $const->getAttribute('fqsen'));
     }
 
-    /** @covers ::enterNode */
     public function testWithEnumWithCase(): void
     {
         $enum = new Enum_('myEnum');
diff --git a/tests/unit/phpDocumentor/Reflection/Php/ArgumentTest.php b/tests/unit/phpDocumentor/Reflection/Php/ArgumentTest.php
index 14696997..a07de699 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/ArgumentTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/ArgumentTest.php
@@ -15,19 +15,15 @@
 
 use phpDocumentor\Reflection\Types\Mixed_;
 use phpDocumentor\Reflection\Types\String_;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
 
 /**
  * Tests the functionality for the Argument class.
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Argument
- * @covers ::__construct
- * @covers ::<private>
- * @covers ::<protected>
  */
+#[CoversClass(Argument::class)]
 final class ArgumentTest extends TestCase
 {
-    /** @covers ::getType */
     public function testGetTypes(): void
     {
         $argument = new Argument('myArgument', null, 'myDefaultValue', true, true);
@@ -43,14 +39,12 @@ public function testGetTypes(): void
         $this->assertEquals(new String_(), $argument->getType());
     }
 
-    /** @covers ::getName */
     public function testGetName(): void
     {
         $argument = new Argument('myArgument', null, 'myDefault', true, true);
         $this->assertEquals('myArgument', $argument->getName());
     }
 
-    /** @covers ::getDefault */
     public function testGetDefault(): void
     {
         $argument = new Argument('myArgument', null, 'myDefaultValue', true, true);
@@ -60,7 +54,6 @@ public function testGetDefault(): void
         $this->assertNull($argument->getDefault());
     }
 
-    /** @covers ::isByReference */
     public function testGetWhetherArgumentIsPassedByReference(): void
     {
         $argument = new Argument('myArgument', null, 'myDefaultValue', true, true);
@@ -70,7 +63,6 @@ public function testGetWhetherArgumentIsPassedByReference(): void
         $this->assertFalse($argument->isByReference());
     }
 
-    /** @covers ::isVariadic */
     public function testGetWhetherArgumentisVariadic(): void
     {
         $argument = new Argument('myArgument', null, 'myDefaultValue', true, true);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Class_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Class_Test.php
index a139b2e4..c3764ef7 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Class_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Class_Test.php
@@ -17,23 +17,18 @@
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
-
-/**
- * @uses \phpDocumentor\Reflection\Php\Property
- * @uses \phpDocumentor\Reflection\Php\Constant
- * @uses \phpDocumentor\Reflection\Php\Method
- * @uses \phpDocumentor\Reflection\Php\Visibility
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Class_
- * @covers ::__construct
- * @covers ::<private>
- * @covers ::<protected>
- *
- * @property Class_ $fixture
- */
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
+
+/** @property Class_ $fixture */
+#[CoversClass(Class_::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Property')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Method')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
 final class Class_Test extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     private Fqsen $parent;
 
@@ -58,25 +53,21 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /** @covers ::getName */
     public function testGettingName(): void
     {
         $this->assertSame($this->fqsen->getName(), $this->fixture->getName());
     }
 
-    /** @covers ::getFqsen */
     public function testGettingFqsen(): void
     {
         $this->assertSame($this->fqsen, $this->fixture->getFqsen());
     }
 
-    /** @covers ::getDocBlock */
     public function testGettingDocBlock(): void
     {
         $this->assertSame($this->docBlock, $this->fixture->getDocBlock());
     }
 
-    /** @covers ::getParent */
     public function testGettingParent(): void
     {
         $class = new Class_($this->fqsen, $this->docBlock);
@@ -86,10 +77,6 @@ public function testGettingParent(): void
         $this->assertSame($this->parent, $class->getParent());
     }
 
-    /**
-     * @covers ::getInterfaces
-     * @covers ::AddInterface
-     */
     public function testAddAndGettingInterfaces(): void
     {
         $this->assertEmpty($this->fixture->getInterfaces());
@@ -101,10 +88,6 @@ public function testAddAndGettingInterfaces(): void
         $this->assertSame(['\MyInterface' => $interface], $this->fixture->getInterfaces());
     }
 
-    /**
-     * @covers ::getConstants
-     * @covers ::addConstant
-     */
     public function testAddAndGettingConstants(): void
     {
         $this->assertEmpty($this->fixture->getConstants());
@@ -116,10 +99,6 @@ public function testAddAndGettingConstants(): void
         $this->assertSame(['\MyClass::MY_CONSTANT' => $constant], $this->fixture->getConstants());
     }
 
-    /**
-     * @covers ::addProperty
-     * @covers ::getProperties
-     */
     public function testAddAndGettingProperties(): void
     {
         $this->assertEmpty($this->fixture->getProperties());
@@ -131,10 +110,6 @@ public function testAddAndGettingProperties(): void
         $this->assertSame(['\MyClass::$myProperty' => $property], $this->fixture->getProperties());
     }
 
-    /**
-     * @covers ::addMethod
-     * @covers ::getMethods
-     */
     public function testAddAndGettingMethods(): void
     {
         $this->assertEmpty($this->fixture->getMethods());
@@ -146,10 +121,6 @@ public function testAddAndGettingMethods(): void
         $this->assertSame(['\MyClass::myMethod()' => $method], $this->fixture->getMethods());
     }
 
-    /**
-     * @covers ::getUsedTraits
-     * @covers ::AddUsedTrait
-     */
     public function testAddAndGettingUsedTrait(): void
     {
         $this->assertEmpty($this->fixture->getUsedTraits());
@@ -161,7 +132,6 @@ public function testAddAndGettingUsedTrait(): void
         $this->assertSame(['\MyTrait' => $trait], $this->fixture->getUsedTraits());
     }
 
-    /** @covers ::isAbstract */
     public function testGettingWhetherClassIsAbstract(): void
     {
         $class = new Class_($this->fqsen, $this->docBlock);
@@ -171,7 +141,6 @@ public function testGettingWhetherClassIsAbstract(): void
         $this->assertTrue($class->isAbstract());
     }
 
-    /** @covers ::isFinal */
     public function testGettingWhetherClassIsFinal(): void
     {
         $class = new Class_($this->fqsen, $this->docBlock);
@@ -181,7 +150,6 @@ public function testGettingWhetherClassIsFinal(): void
         $this->assertTrue($class->isFinal());
     }
 
-    /** @covers ::isFinal */
     public function testGettingWhetherClassIsReadOnly(): void
     {
         $class = new Class_($this->fqsen, $this->docBlock);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/ConstantTest.php b/tests/unit/phpDocumentor/Reflection/Php/ConstantTest.php
index bbd79bb2..0fbed684 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/ConstantTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/ConstantTest.php
@@ -17,21 +17,17 @@
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
-
-/**
- * @uses \phpDocumentor\Reflection\DocBlock
- * @uses \phpDocumentor\Reflection\Php\Visibility
- * @uses \phpDocumentor\Reflection\Fqsen
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Constant
- * @covers ::__construct
- * @covers ::<private>
- *
- * @property Constant $fixture
- */
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
+
+/** @property Constant $fixture */
+#[CoversClass(Constant::class)]
+#[UsesClass('\phpDocumentor\Reflection\DocBlock')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Fqsen')]
 final class ConstantTest extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     private Fqsen $fqsen;
 
@@ -54,41 +50,27 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /**
-     * @covers ::getValue
-     * @covers ::__construct
-     */
     public function testGetValue(): void
     {
         $this->assertSame($this->value, $this->fixture->getValue());
     }
 
-    /**
-     * @covers ::isFinal
-     * @covers ::__construct
-     */
     public function testIsFinal(): void
     {
         $this->assertFalse($this->fixture->isFinal());
     }
 
-    /**
-     * @covers ::getFqsen
-     * @covers ::getName
-     */
     public function testGetFqsen(): void
     {
         $this->assertSame($this->fqsen, $this->fixture->getFqsen());
         $this->assertSame($this->fqsen->getName(), $this->fixture->getName());
     }
 
-    /** @covers ::getDocBlock */
     public function testGetDocblock(): void
     {
         $this->assertSame($this->docBlock, $this->fixture->getDocBlock());
     }
 
-    /** @covers ::getVisibility */
     public function testGetVisibility(): void
     {
         $this->assertEquals(new Visibility(Visibility::PUBLIC_), $this->fixture->getVisibility());
diff --git a/tests/unit/phpDocumentor/Reflection/Php/EnumCaseTest.php b/tests/unit/phpDocumentor/Reflection/Php/EnumCaseTest.php
index cbc768ee..11267ac2 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/EnumCaseTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/EnumCaseTest.php
@@ -17,17 +17,13 @@
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Php\EnumCase
- * @covers ::__construct
- * @covers ::<private>
- * @covers ::<protected>
- */
+#[CoversClass(EnumCase::class)]
 final class EnumCaseTest extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     private EnumCase $fixture;
 
@@ -51,31 +47,26 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /** @covers ::getName */
     public function testGettingName(): void
     {
         $this->assertSame($this->fqsen->getName(), $this->fixture->getName());
     }
 
-    /** @covers ::getFqsen */
     public function testGettingFqsen(): void
     {
         $this->assertSame($this->fqsen, $this->fixture->getFqsen());
     }
 
-    /** @covers ::getDocBlock */
     public function testGettingDocBlock(): void
     {
         $this->assertSame($this->docBlock, $this->fixture->getDocBlock());
     }
 
-    /** @covers ::getValue */
     public function testGetValue(): void
     {
         $this->assertNull($this->fixture->getValue());
     }
 
-    /** @covers ::getLocation */
     public function testGetLocationReturnsDefault(): void
     {
         self::assertEquals(new Location(-1), $this->fixture->getLocation());
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Enum_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Enum_Test.php
index 82bb94cb..6ed91334 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Enum_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Enum_Test.php
@@ -17,21 +17,16 @@
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\Method
- * @uses \phpDocumentor\Reflection\Php\EnumCase
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Enum_
- * @covers ::__construct
- * @covers ::<private>
- * @covers ::<protected>
- *
- * @property Enum_ $fixture
- */
+/** @property Enum_ $fixture */
+#[CoversClass(Enum_::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Method')]
+#[UsesClass('\phpDocumentor\Reflection\Php\EnumCase')]
 final class Enum_Test extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     private Fqsen $parent;
 
@@ -56,34 +51,26 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /** @covers ::getName */
     public function testGettingName(): void
     {
         $this->assertSame($this->fqsen->getName(), $this->fixture->getName());
     }
 
-    /** @covers ::getBackedType */
     public function testGetBackedWithOutType(): void
     {
         $this->assertNull($this->fixture->getBackedType());
     }
 
-    /** @covers ::getFqsen */
     public function testGettingFqsen(): void
     {
         $this->assertSame($this->fqsen, $this->fixture->getFqsen());
     }
 
-    /** @covers ::getDocBlock */
     public function testGettingDocBlock(): void
     {
         $this->assertSame($this->docBlock, $this->fixture->getDocBlock());
     }
 
-    /**
-     * @covers ::getInterfaces
-     * @covers ::AddInterface
-     */
     public function testAddAndGettingInterfaces(): void
     {
         $this->assertEmpty($this->fixture->getInterfaces());
@@ -95,10 +82,6 @@ public function testAddAndGettingInterfaces(): void
         $this->assertSame(['\MyInterface' => $interface], $this->fixture->getInterfaces());
     }
 
-    /**
-     * @covers ::addConstant
-     * @covers ::getConstants
-     */
     public function testAddAndGettingConstants(): void
     {
         $this->assertEmpty($this->fixture->getConstants());
@@ -110,10 +93,6 @@ public function testAddAndGettingConstants(): void
         $this->assertSame(['\MyClass::MYCONST' => $constant], $this->fixture->getConstants());
     }
 
-    /**
-     * @covers ::addMethod
-     * @covers ::getMethods
-     */
     public function testAddAndGettingMethods(): void
     {
         $this->assertEmpty($this->fixture->getMethods());
@@ -125,10 +104,6 @@ public function testAddAndGettingMethods(): void
         $this->assertSame(['\MyClass::myMethod()' => $method], $this->fixture->getMethods());
     }
 
-    /**
-     * @covers ::getUsedTraits
-     * @covers ::AddUsedTrait
-     */
     public function testAddAndGettingUsedTrait(): void
     {
         $this->assertEmpty($this->fixture->getUsedTraits());
@@ -140,10 +115,6 @@ public function testAddAndGettingUsedTrait(): void
         $this->assertSame(['\MyTrait' => $trait], $this->fixture->getUsedTraits());
     }
 
-    /**
-     * @covers ::addCase
-     * @covers ::getCases
-     */
     public function testAddAndGettingCases(): void
     {
         $this->assertEmpty($this->fixture->getCases());
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/ClassConstantIteratorTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/ClassConstantIteratorTest.php
index cc7661d0..61f5cf7c 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/ClassConstantIteratorTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/ClassConstantIteratorTest.php
@@ -20,23 +20,11 @@
 use PhpParser\Node\Const_;
 use PhpParser\Node\Expr\Variable;
 use PhpParser\Node\Stmt\ClassConst;
+use PHPUnit\Framework\Attributes\CoversClass;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\ClassConstantIterator
- * @covers ::__construct
- * @covers ::<private>
- */
+#[CoversClass(ClassConstantIterator::class)]
 final class ClassConstantIteratorTest extends MockeryTestCase
 {
-    /**
-     * @covers ::current()
-     * @covers ::next()
-     * @covers ::valid()
-     * @covers ::rewind()
-     * @covers ::getName()
-     * @covers ::getValue()
-     * @covers ::getFqsen()
-     */
     public function testIterateProps(): void
     {
         $const1 = new Const_('\Space\MyClass::MY_CONST1', new Variable('1'));
@@ -55,10 +43,6 @@ public function testIterateProps(): void
         }
     }
 
-    /**
-     * @covers ::key()
-     * @covers ::next()
-     */
     public function testKey(): void
     {
         $constantMock = m::mock(ClassConst::class);
@@ -70,10 +54,6 @@ public function testKey(): void
         $this->assertEquals(1, $fixture->key());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::getLine
-     */
     public function testProxyMethods(): void
     {
         $constantMock = m::mock(ClassConst::class);
@@ -84,7 +64,6 @@ public function testProxyMethods(): void
         $this->assertEquals(10, $fixture->getLine());
     }
 
-    /** @covers ::getDocComment */
     public function testGetDocCommentPropFirst(): void
     {
         $const = m::mock(Const_::class);
@@ -99,7 +78,6 @@ public function testGetDocCommentPropFirst(): void
         $this->assertEquals('test', $fixture->getDocComment()->getText());
     }
 
-    /** @covers ::getDocComment */
     public function testGetDocComment(): void
     {
         $const = m::mock(Const_::class);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/ClassConstantTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/ClassConstantTest.php
index 30945f5d..dec052dc 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/ClassConstantTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/ClassConstantTest.php
@@ -30,21 +30,21 @@
 use PhpParser\Node\Stmt\Class_ as ClassNode;
 use PhpParser\Node\Stmt\ClassConst;
 use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
 use stdClass;
 
 use function current;
 
-/**
- * @uses   \phpDocumentor\Reflection\Php\Factory\ClassConstantIterator
- * @uses   \phpDocumentor\Reflection\Php\ProjectFactoryStrategies
- * @uses   \phpDocumentor\Reflection\Php\Constant
- * @uses   \phpDocumentor\Reflection\Php\Visibility
- *
- * @covers \phpDocumentor\Reflection\Php\Factory\ClassConstant
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- */
+#[CoversClass(ClassConstant::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\ClassConstantIterator')]
+#[UsesClass('\phpDocumentor\Reflection\Php\ProjectFactoryStrategies')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
 final class ClassConstantTest extends TestCase
 {
     use ProphecyTrait;
@@ -66,7 +66,7 @@ public function testMatches(): void
         $this->assertTrue($this->fixture->matches(self::createContext(null), $this->buildConstantIteratorStub()));
     }
 
-    /** @dataProvider visibilityProvider */
+    #[DataProvider('visibilityProvider')]
     public function testCreateWithVisibility(int $input, string $expectedVisibility, bool $isFinal = false): void
     {
         $constantStub = $this->buildConstantIteratorStub($input);
@@ -79,7 +79,7 @@ public function testCreateWithVisibility(int $input, string $expectedVisibility,
     }
 
     /** @return array<string|int[]> */
-    public function visibilityProvider(): array
+    public static function visibilityProvider(): array
     {
         return [
             [
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php
index 4642d6d6..96229b5e 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php
@@ -26,6 +26,8 @@
 use PhpParser\Node\Name;
 use PhpParser\Node\Stmt\Class_ as ClassNode;
 use PhpParser\Node\Stmt\ClassMethod;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
@@ -33,21 +35,15 @@
 
 use function current;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\Class_
- * @uses \phpDocumentor\Reflection\Php\Constant
- * @uses \phpDocumentor\Reflection\Php\Property
- * @uses \phpDocumentor\Reflection\Php\Visibility
- * @uses \phpDocumentor\Reflection\Php\Method
- * @uses \phpDocumentor\Reflection\Php\Factory\Class_::matches
- * @uses \phpDocumentor\Reflection\Php\Factory\ClassConstantIterator
- * @uses \phpDocumentor\Reflection\Php\Factory\PropertyIterator
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\Class_
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- * @covers ::<protected>
- * @covers ::<private>
- */
+#[CoversClass(Class_::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Class_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Property')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Method')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\ClassConstantIterator')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\PropertyIterator')]
 final class Class_Test extends TestCase
 {
     use ProphecyTrait;
@@ -60,7 +56,6 @@ protected function setUp(): void
         $this->fixture = new Class_($this->docblockFactory->reveal());
     }
 
-    /** @covers ::matches */
     public function testMatches(): void
     {
         $this->assertFalse($this->fixture->matches(self::createContext(null), new stdClass()));
@@ -72,7 +67,6 @@ public function testMatches(): void
         );
     }
 
-    /** @covers ::create */
     public function testSimpleCreate(): void
     {
         $containerMock = m::mock(StrategyContainer::class);
@@ -88,7 +82,6 @@ public function testSimpleCreate(): void
         $this->assertTrue($class->isAbstract());
     }
 
-    /** @covers ::create */
     public function testClassWithParent(): void
     {
         $containerMock = m::mock(StrategyContainer::class);
@@ -103,7 +96,6 @@ public function testClassWithParent(): void
         $this->assertEquals('\Space\MyParent', (string) $class->getParent());
     }
 
-    /** @covers ::create */
     public function testClassImplementingInterface(): void
     {
         $containerMock = m::mock(StrategyContainer::class);
@@ -125,7 +117,6 @@ public function testClassImplementingInterface(): void
         );
     }
 
-    /** @covers ::create */
     public function testIteratesStatements(): void
     {
         $method1           = new ClassMethod('MyClass::method1');
@@ -157,7 +148,6 @@ public function testIteratesStatements(): void
         );
     }
 
-    /** @covers ::create */
     public function testCreateWithDocBlock(): void
     {
         $doc       = new Doc('Text');
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/ConstructorPromotionTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/ConstructorPromotionTest.php
index 9777ff3e..bb63942d 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/ConstructorPromotionTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/ConstructorPromotionTest.php
@@ -22,6 +22,8 @@
 use PhpParser\Node\Stmt\Class_ as ClassNode;
 use PhpParser\Node\Stmt\ClassMethod;
 use PhpParser\PrettyPrinter\Standard;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
 use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
@@ -29,7 +31,7 @@
 
 use function current;
 
-/** @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\ConstructorPromotion */
+#[CoversClass(ConstructorPromotion::class)]
 final class ConstructorPromotionTest extends TestCase
 {
     use ProphecyTrait;
@@ -51,18 +53,14 @@ protected function setUp(): void
         );
     }
 
-    /**
-     * @dataProvider objectProvider
-     * @covers ::__construct
-     * @covers ::matches
-     */
+    #[DataProvider('objectProvider')]
     public function testMatches(ContextStack $context, object $object, bool $expected): void
     {
         self::assertEquals($expected, $this->fixture->matches($context, $object));
     }
 
     /** @return mixed[][] */
-    public function objectProvider(): array
+    public static function objectProvider(): array
     {
         $context = new ContextStack(new Project('test'));
 
@@ -90,13 +88,7 @@ public function objectProvider(): array
         ];
     }
 
-    /**
-     * @covers ::buildPropertyVisibilty
-     * @covers ::doCreate
-     * @covers ::promoteParameterToProperty
-     * @covers ::readOnly
-     * @dataProvider visibilityProvider
-     */
+    #[DataProvider('visibilityProvider')]
     public function testCreateWithProperty(int $flags, string $visibility, bool $readOnly = false): void
     {
         $methodNode         = new ClassMethod('__construct');
@@ -141,7 +133,7 @@ public function testCreateWithProperty(int $flags, string $visibility, bool $rea
     }
 
     /** @return mixed[][] */
-    public function visibilityProvider(): array
+    public static function visibilityProvider(): array
     {
         return [
             [
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/ContextStackTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/ContextStackTest.php
index cd094f08..68af0687 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/ContextStackTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/ContextStackTest.php
@@ -10,16 +10,12 @@
 use phpDocumentor\Reflection\Php\Method;
 use phpDocumentor\Reflection\Php\Project;
 use phpDocumentor\Reflection\Types\Context;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase as PHPUnitTestCase;
 
-/** @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\ContextStack */
+#[CoversClass(ContextStack::class)]
 final class ContextStackTest extends PHPUnitTestCase
 {
-    /**
-     * @covers ::__construct
-     * @covers ::getTypeContext
-     * @covers ::getProject
-     */
     public function testCreate(): void
     {
         $project = new Project('myProject');
@@ -30,10 +26,6 @@ public function testCreate(): void
         self::assertSame($typeContext, $context->getTypeContext());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::peek
-     */
     public function testPeekThowsWhenEmpty(): void
     {
         $this->expectException(OutOfBoundsException::class);
@@ -44,14 +36,6 @@ public function testPeekThowsWhenEmpty(): void
         $context->peek();
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::peek
-     * @covers ::push
-     * @covers ::getTypeContext
-     * @covers ::getProject
-     * @covers ::createFromSelf
-     */
     public function testPeekReturnsTopOfStack(): void
     {
         $class = new ClassElement(new Fqsen('\MyClass'));
@@ -66,15 +50,6 @@ public function testPeekReturnsTopOfStack(): void
         self::assertSame($typeContext, $context->getTypeContext());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::withTypeContext
-     * @covers ::peek
-     * @covers ::push
-     * @covers ::getTypeContext
-     * @covers ::getProject
-     * @covers ::createFromSelf
-     */
     public function testCreateWithTypeContext(): void
     {
         $class = new ClassElement(new Fqsen('\MyClass'));
@@ -89,10 +64,6 @@ public function testCreateWithTypeContext(): void
         self::assertSame($typeContext, $context->getTypeContext());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::search
-     */
     public function testSearchEmptyStackResultsInNull(): void
     {
         $project = new Project('myProject');
@@ -101,10 +72,6 @@ public function testSearchEmptyStackResultsInNull(): void
         self::assertNull($context->search(ClassElement::class));
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::search
-     */
     public function testSearchStackForExistingElementTypeWillReturnTheFirstHit(): void
     {
         $class = new ClassElement(new Fqsen('\MyClass'));
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/DefineTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/DefineTest.php
index 83e62d8a..c0668641 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/DefineTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/DefineTest.php
@@ -27,20 +27,19 @@
 use PhpParser\Node\Scalar\String_;
 use PhpParser\Node\Stmt\Expression;
 use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
 use stdClass;
 
 use function current;
 
-/**
- * @uses   \phpDocumentor\Reflection\Php\ProjectFactoryStrategies
- * @uses   \phpDocumentor\Reflection\Php\Constant
- * @uses   \phpDocumentor\Reflection\Php\Visibility
- *
- * @covers \phpDocumentor\Reflection\Php\Factory\Define
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- */
+#[CoversClass(Define::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\ProjectFactoryStrategies')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
 final class DefineTest extends TestCase
 {
     use ProphecyTrait;
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/EnumCaseTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/EnumCaseTest.php
index f33306f6..af0107fe 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/EnumCaseTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/EnumCaseTest.php
@@ -22,17 +22,13 @@
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use PhpParser\Node\Stmt\EnumCase as EnumCaseNode;
 use PhpParser\PrettyPrinter\Standard;
+use PHPUnit\Framework\Attributes\CoversClass;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
 use stdClass;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\EnumCase
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- * @covers ::__construct
- * @covers ::<protected>
- * @covers ::<private>
- */
+#[CoversClass(EnumCase::class)]
+#[CoversClass(AbstractFactory::class)]
 final class EnumCaseTest extends TestCase
 {
     use ProphecyTrait;
@@ -45,7 +41,6 @@ protected function setUp(): void
         $this->fixture = new EnumCase($this->docblockFactory->reveal(), new Standard());
     }
 
-    /** @covers ::matches */
     public function testMatches(): void
     {
         self::assertFalse($this->fixture->matches(self::createContext(null), new stdClass()));
@@ -57,7 +52,6 @@ public function testMatches(): void
         );
     }
 
-    /** @covers ::create */
     public function testSimpleCreate(): void
     {
         $containerMock = $this->prophesize(StrategyContainer::class)->reveal();
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Enum_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Enum_Test.php
index 11d27a5a..ccf6e4f0 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Enum_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Enum_Test.php
@@ -29,6 +29,8 @@
 use PhpParser\Node\Stmt\Class_ as ClassNode;
 use PhpParser\Node\Stmt\ClassMethod;
 use PhpParser\Node\Stmt\Enum_ as EnumNode;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
@@ -36,17 +38,11 @@
 
 use function current;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\Enum_
- * @uses \phpDocumentor\Reflection\Php\Constant
- * @uses \phpDocumentor\Reflection\Php\Method
- * @uses \phpDocumentor\Reflection\Php\Factory\Enum_::matches
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\Enum_
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- * @covers ::<protected>
- * @covers ::<private>
- */
+#[CoversClass(Enum_::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Enum_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Method')]
 final class Enum_Test extends TestCase
 {
     use ProphecyTrait;
@@ -59,7 +55,6 @@ protected function setUp(): void
         $this->fixture = new Enum_($this->docblockFactory->reveal());
     }
 
-    /** @covers ::matches */
     public function testMatches(): void
     {
         self::assertFalse($this->fixture->matches(self::createContext(null), new stdClass()));
@@ -71,7 +66,6 @@ public function testMatches(): void
         );
     }
 
-    /** @covers ::create */
     public function testSimpleCreate(): void
     {
         $containerMock = m::mock(StrategyContainer::class);
@@ -84,7 +78,6 @@ public function testSimpleCreate(): void
         self::assertEquals('\Space\MyEnum', (string) $result->getFqsen());
     }
 
-    /** @covers ::create */
     public function testBackedEnumTypeIsSet(): void
     {
         $containerMock = m::mock(StrategyContainer::class);
@@ -99,7 +92,6 @@ public function testBackedEnumTypeIsSet(): void
         self::assertEquals(new String_(), $result->getBackedType());
     }
 
-    /** @covers ::create */
     public function testClassImplementingInterface(): void
     {
         $containerMock = m::mock(StrategyContainer::class);
@@ -121,7 +113,6 @@ public function testClassImplementingInterface(): void
         );
     }
 
-    /** @covers ::create */
     public function testIteratesStatements(): void
     {
         $method1           = new ClassMethod('MyEnum::method1');
@@ -153,7 +144,6 @@ public function testIteratesStatements(): void
         );
     }
 
-    /** @covers ::create */
     public function testCreateWithDocBlock(): void
     {
         $doc       = new Doc('Text');
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/File/CreateCommandTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/File/CreateCommandTest.php
index 7ed26d97..d6df9cdd 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/File/CreateCommandTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/File/CreateCommandTest.php
@@ -17,15 +17,13 @@
 use phpDocumentor\Reflection\Php\Factory\ContextStack;
 use phpDocumentor\Reflection\Php\Project;
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategies;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use PHPUnit\Framework\TestCase;
 
-/**
- * @uses phpDocumentor\Reflection\File\LocalFile
- * @uses phpDocumentor\Reflection\Php\ProjectFactoryStrategies
- *
- * @coversDefaultClass phpDocumentor\Reflection\Php\Factory\File\CreateCommand
- * @covers ::__construct
- */
+#[CoversClass(CreateCommand::class)]
+#[UsesClass('phpDocumentor\Reflection\File\LocalFile')]
+#[UsesClass('phpDocumentor\Reflection\Php\ProjectFactoryStrategies')]
 class CreateCommandTest extends TestCase
 {
     private CreateCommand $fixture;
@@ -45,13 +43,11 @@ protected function setUp(): void
         );
     }
 
-    /** @covers ::getFile */
     public function testGetFile(): void
     {
         $this->assertSame($this->file, $this->fixture->getFile());
     }
 
-    /** @covers ::getStrategies */
     public function testGetStrategies(): void
     {
         $this->assertSame($this->strategies, $this->fixture->getStrategies());
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/FileTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/FileTest.php
index b3026112..7e7fdd94 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/FileTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/FileTest.php
@@ -30,6 +30,9 @@
 use PhpParser\Node\Name;
 use PhpParser\Node\Stmt\Class_ as ClassNode;
 use PhpParser\Node\Stmt\Namespace_ as NamespaceNode;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
@@ -38,27 +41,20 @@
 use function current;
 use function file_get_contents;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\File
- * @uses \phpDocumentor\Reflection\Php\Factory\File::matches
- * @uses \phpDocumentor\Reflection\File\LocalFile
- * @uses \phpDocumentor\Reflection\Middleware\ChainFactory
- * @uses \phpDocumentor\Reflection\Php\Class_
- * @uses \phpDocumentor\Reflection\Php\Trait_
- * @uses \phpDocumentor\Reflection\Php\Interface_
- * @uses \phpDocumentor\Reflection\Php\Function_
- * @uses \phpDocumentor\Reflection\Php\Constant
- * @uses \phpDocumentor\Reflection\Php\Visibility
- * @uses \phpDocumentor\Reflection\Php\Factory\GlobalConstantIterator
- * @uses \phpDocumentor\Reflection\Types\NamespaceNodeToContext
- * @uses \phpDocumentor\Reflection\Php\Factory\File\CreateCommand
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\File
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- * @covers ::__construct
- * @covers ::<protected>
- * @covers ::<private>
- */
+#[CoversClass(File::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\File')]
+#[UsesClass('\phpDocumentor\Reflection\File\LocalFile')]
+#[UsesClass('\phpDocumentor\Reflection\Middleware\ChainFactory')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Class_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Trait_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Interface_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Function_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\GlobalConstantIterator')]
+#[UsesClass('\phpDocumentor\Reflection\Types\NamespaceNodeToContext')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\File\CreateCommand')]
 final class FileTest extends TestCase
 {
     use ProphecyTrait;
@@ -74,14 +70,12 @@ protected function setUp(): void
         $this->fixture = new File($this->docBlockFactory->reveal(), $this->nodesFactoryMock->reveal());
     }
 
-    /** @covers ::matches */
     public function testMatches(): void
     {
         $this->assertFalse($this->fixture->matches(self::createContext(null), new stdClass()));
         $this->assertTrue($this->fixture->matches(self::createContext(null), m::mock(SourceFile::class)));
     }
 
-    /** @covers ::create */
     public function testMiddlewareIsExecuted(): void
     {
         $file = new FileElement('aa', __FILE__);
@@ -108,10 +102,7 @@ public function testMiddlewareIsChecked(): void
         new File($this->docBlockFactory->reveal(), $this->nodesFactoryMock->reveal(), [new stdClass()]);
     }
 
-    /**
-     * @covers ::create
-     * @dataProvider nodeProvider
-     */
+    #[DataProvider('nodeProvider')]
     public function testFileGetsCommentFromFirstNode(Node $node, DocBlockDescriptor $docblock): void
     {
         $this->nodesFactoryMock->create(file_get_contents(__FILE__))->willReturn([$node]);
@@ -132,7 +123,7 @@ public function testFileGetsCommentFromFirstNode(Node $node, DocBlockDescriptor
     }
 
     /** @return array<string, mixed[]> */
-    public function nodeProvider(): array
+    public static function nodeProvider(): array
     {
         $docBlockNode = new DocBlockNode('Text');
         $namespaceNode = new NamespaceNode(new Name('mySpace'));
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Function_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Function_Test.php
index e96ff0ea..0820117f 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Function_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Function_Test.php
@@ -24,6 +24,8 @@
 use PhpParser\Node\Expr\FuncCall;
 use PhpParser\Node\Name;
 use PhpParser\Node\Stmt\Expression;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
@@ -31,17 +33,11 @@
 
 use function current;
 
-/**
- * @uses   \phpDocumentor\Reflection\Php\Factory\Function_::matches
- * @uses   \phpDocumentor\Reflection\Php\Function_
- * @uses   \phpDocumentor\Reflection\Php\Argument
- * @uses   \phpDocumentor\Reflection\Php\Factory\Type
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\Function_
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- * @covers ::<private>
- * @covers ::<protected>
- */
+#[CoversClass(Function_::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Function_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Argument')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\Type')]
 final class Function_Test extends TestCase
 {
     use ProphecyTrait;
@@ -54,7 +50,6 @@ protected function setUp(): void
         $this->fixture = new Function_($this->docBlockFactory->reveal());
     }
 
-    /** @covers ::matches */
     public function testMatches(): void
     {
         $this->assertFalse($this->fixture->matches(self::createContext(null), new stdClass()));
@@ -64,7 +59,6 @@ public function testMatches(): void
         ));
     }
 
-    /** @covers ::create */
     public function testCreateWithoutParameters(): void
     {
         $functionMock = $this->prophesize(\PhpParser\Node\Stmt\Function_::class);
@@ -85,7 +79,6 @@ public function testCreateWithoutParameters(): void
         $this->assertEquals('\SomeSpace::function()', (string) $function->getFqsen());
     }
 
-    /** @covers ::create */
     public function testCreateWithDocBlock(): void
     {
         $doc = new Doc('Text');
@@ -110,7 +103,6 @@ public function testCreateWithDocBlock(): void
         $this->assertSame($docBlock, $function->getDocBlock());
     }
 
-    /** @covers ::create */
     public function testIteratesStatements(): void
     {
         $doc = new Doc('Text');
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/GlobalConstantIteratorTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/GlobalConstantIteratorTest.php
index 4af9acb6..971a6054 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/GlobalConstantIteratorTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/GlobalConstantIteratorTest.php
@@ -19,22 +19,11 @@
 use PhpParser\Node\Const_;
 use PhpParser\Node\Expr\Variable;
 use PhpParser\Node\Stmt\Const_ as ConstStatement;
+use PHPUnit\Framework\Attributes\CoversClass;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\GlobalConstantIterator
- * @covers ::__construct
- * @covers ::<private>
- */
+#[CoversClass(GlobalConstantIterator::class)]
 final class GlobalConstantIteratorTest extends m\Adapter\Phpunit\MockeryTestCase
 {
-    /**
-     * @covers ::current()
-     * @covers ::next()
-     * @covers ::valid()
-     * @covers ::rewind()
-     * @covers ::getName()
-     * @covers ::getFqsen()
-     */
     public function testIterateProps(): void
     {
         $const1 = new Const_('\Space\MY_CONST1', new Variable('a'));
@@ -53,10 +42,6 @@ public function testIterateProps(): void
         }
     }
 
-    /**
-     * @covers ::key()
-     * @covers ::next()
-     */
     public function testKey(): void
     {
         $constant = m::mock(ConstStatement::class);
@@ -68,10 +53,6 @@ public function testKey(): void
         $this->assertEquals(1, $fixture->key());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::getLine
-     */
     public function testProxyMethods(): void
     {
         $constant = m::mock(ConstStatement::class);
@@ -82,7 +63,6 @@ public function testProxyMethods(): void
         $this->assertEquals(10, $fixture->getLine());
     }
 
-    /** @covers ::getDocComment */
     public function testGetDocCommentPropFirst(): void
     {
         $const = m::mock(Const_::class);
@@ -97,7 +77,6 @@ public function testGetDocCommentPropFirst(): void
         $this->assertEquals('test', $fixture->getDocComment()->getText());
     }
 
-    /** @covers ::getDocComment */
     public function testGetDocComment(): void
     {
         $const = m::mock(Const_::class);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/GlobalConstantTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/GlobalConstantTest.php
index 4c2d26a4..533c18f6 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/GlobalConstantTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/GlobalConstantTest.php
@@ -26,21 +26,20 @@
 use PhpParser\Node\Scalar\String_;
 use PhpParser\Node\Stmt\Const_ as ConstStatement;
 use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
 use stdClass;
 
 use function current;
 
-/**
- * @uses   \phpDocumentor\Reflection\Php\Factory\GlobalConstantIterator
- * @uses   \phpDocumentor\Reflection\Php\ProjectFactoryStrategies
- * @uses   \phpDocumentor\Reflection\Php\Constant
- * @uses   \phpDocumentor\Reflection\Php\Visibility
- *
- * @covers \phpDocumentor\Reflection\Php\Factory\GlobalConstant
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- */
+#[CoversClass(GlobalConstant::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\GlobalConstantIterator')]
+#[UsesClass('\phpDocumentor\Reflection\Php\ProjectFactoryStrategies')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
 final class GlobalConstantTest extends TestCase
 {
     use ProphecyTrait;
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Interface_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Interface_Test.php
index 91d29db2..91d40920 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Interface_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Interface_Test.php
@@ -25,6 +25,8 @@
 use PhpParser\Comment\Doc;
 use PhpParser\Node\Stmt\ClassMethod;
 use PhpParser\Node\Stmt\Interface_ as InterfaceNode;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
@@ -32,19 +34,13 @@
 
 use function current;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\Interface_
- * @uses \phpDocumentor\Reflection\Php\Constant
- * @uses \phpDocumentor\Reflection\Php\Method
- * @uses \phpDocumentor\Reflection\Php\Visibility
- * @uses \phpDocumentor\Reflection\Php\Factory\Interface_::matches
- * @uses \phpDocumentor\Reflection\Php\Factory\ClassConstantIterator
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\Interface_
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- * @covers ::<private>
- * @covers ::<protected>
- */
+#[CoversClass(Interface_::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Interface_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Method')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\ClassConstantIterator')]
 class Interface_Test extends TestCase
 {
     use ProphecyTrait;
@@ -57,14 +53,12 @@ protected function setUp(): void
         $this->fixture = new Interface_($this->docBlockFactory->reveal());
     }
 
-    /** @covers ::matches */
     public function testMatches(): void
     {
         $this->assertFalse($this->fixture->matches(self::createContext(null), new stdClass()));
         $this->assertTrue($this->fixture->matches(self::createContext(null), m::mock(InterfaceNode::class)));
     }
 
-    /** @covers ::create */
     public function testSimpleCreate(): void
     {
         $interfaceMock = $this->buildClassMock();
@@ -77,7 +71,6 @@ public function testSimpleCreate(): void
         $this->assertEquals('\Space\MyInterface', (string) $interface->getFqsen());
     }
 
-    /** @covers ::create */
     public function testCreateWithDocBlock(): void
     {
         $doc           = new Doc('Text');
@@ -93,7 +86,6 @@ public function testCreateWithDocBlock(): void
         $this->assertSame($docBlock, $interface->getDocBlock());
     }
 
-    /** @covers ::create */
     public function testIteratesStatements(): void
     {
         $method1           = new ClassMethod('MyClass::method1');
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/MethodTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/MethodTest.php
index ddfc7e2b..2de893bb 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/MethodTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/MethodTest.php
@@ -27,6 +27,8 @@
 use PhpParser\Node\Name;
 use PhpParser\Node\Stmt\ClassMethod;
 use PhpParser\Node\Stmt\Expression;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
@@ -34,18 +36,12 @@
 
 use function current;
 
-/**
- * @uses   \phpDocumentor\Reflection\Php\Method
- * @uses   \phpDocumentor\Reflection\Php\Argument
- * @uses   \phpDocumentor\Reflection\Php\Visibility
- * @uses   \phpDocumentor\Reflection\Php\Factory\Method::matches
- * @uses   \phpDocumentor\Reflection\Php\Factory\Type
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\Method
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- * @covers ::<protected>
- * @covers ::<private>
- */
+#[CoversClass(Method::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Method')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Argument')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\Type')]
 class MethodTest extends TestCase
 {
     use ProphecyTrait;
@@ -58,14 +54,12 @@ protected function setUp(): void
         $this->fixture = new Method($this->docBlockFactory->reveal());
     }
 
-    /** @covers ::matches */
     public function testMatches(): void
     {
         $this->assertFalse($this->fixture->matches(self::createContext(null), new stdClass()));
         $this->assertTrue($this->fixture->matches(self::createContext(null), m::mock(ClassMethod::class)));
     }
 
-    /** @covers ::create */
     public function testCreateWithoutParameters(): void
     {
         $classMethodMock = $this->buildClassMethodMock();
@@ -87,7 +81,6 @@ public function testCreateWithoutParameters(): void
         $this->assertEquals('public', (string) $method->getVisibility());
     }
 
-    /** @covers ::create */
     public function testCreateProtectedMethod(): void
     {
         $classMethodMock = $this->buildClassMethodMock();
@@ -109,7 +102,6 @@ public function testCreateProtectedMethod(): void
         $this->assertEquals('protected', (string) $method->getVisibility());
     }
 
-    /** @covers ::create */
     public function testCreateWithDocBlock(): void
     {
         $doc = new Doc('Text');
@@ -151,7 +143,6 @@ private function buildClassMethodMock(): MockInterface
         return $methodMock;
     }
 
-    /** @covers ::create */
     public function testIteratesStatements(): void
     {
         $method1 = $this->buildClassMethodMock();
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Namespace_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Namespace_Test.php
index ffef61e5..2e45e06c 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Namespace_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Namespace_Test.php
@@ -13,13 +13,14 @@
 use PhpParser\Node\Name;
 use PhpParser\Node\Stmt\Class_ as ClassNode;
 use PhpParser\Node\Stmt\Namespace_ as NamespaceNode;
+use PHPUnit\Framework\Attributes\CoversClass;
 use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use stdClass;
 
 use function current;
 
-/** @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\Namespace_ */
+#[CoversClass(Namespace_::class)]
 final class Namespace_Test extends TestCase
 {
     use ProphecyTrait;
@@ -29,7 +30,6 @@ protected function setUp(): void
         $this->fixture = new Namespace_();
     }
 
-    /** @covers ::matches */
     public function testMatches(): void
     {
         $this->assertFalse($this->fixture->matches(self::createContext(null), new stdClass()));
@@ -39,7 +39,6 @@ public function testMatches(): void
         ));
     }
 
-    /** @covers ::create */
     public function testCreateThrowsException(): void
     {
         $this->expectException(InvalidArgumentException::class);
@@ -50,7 +49,6 @@ public function testCreateThrowsException(): void
         );
     }
 
-    /** @covers ::create */
     public function testIteratesStatements(): void
     {
         $class           = new ClassNode('\MyClass');
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php
index 99a6e21e..54eaa929 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php
@@ -18,21 +18,11 @@
 use PhpParser\Comment\Doc;
 use PhpParser\Node\Stmt\Property as PropertyNode;
 use PhpParser\Node\Stmt\PropertyProperty;
+use PHPUnit\Framework\Attributes\CoversClass;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\PropertyIterator
- * @covers ::__construct
- * @covers ::<private>
- */
+#[CoversClass(PropertyIterator::class)]
 class PropertyIteratorTest extends MockeryTestCase
 {
-    /**
-     * @covers ::current()
-     * @covers ::next()
-     * @covers ::valid()
-     * @covers ::rewind()
-     * @covers ::getName()
-     */
     public function testIterateProps(): void
     {
         $prop1 = new PropertyProperty('prop1');
@@ -47,10 +37,6 @@ public function testIterateProps(): void
         }
     }
 
-    /**
-     * @covers ::key()
-     * @covers ::next()
-     */
     public function testKey(): void
     {
         $propertyMock = m::mock(PropertyNode::class);
@@ -62,15 +48,6 @@ public function testKey(): void
         $this->assertEquals(1, $fixture->key());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::isPublic
-     * @covers ::isProtected
-     * @covers ::isPrivate
-     * @covers ::isStatic
-     * @covers ::isReadOnly
-     * @covers ::getLine
-     */
     public function testProxyMethods(): void
     {
         $propertyMock = m::mock(PropertyNode::class);
@@ -91,10 +68,6 @@ public function testProxyMethods(): void
         $this->assertEquals(10, $fixture->getLine());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::getDefault
-     */
     public function testGetDefault(): void
     {
         $prop = m::mock(PropertyProperty::class);
@@ -106,7 +79,6 @@ public function testGetDefault(): void
         $this->assertEquals('myDefault', $fixture->getDefault());
     }
 
-    /** @covers ::getDocComment */
     public function testGetDocCommentPropFirst(): void
     {
         $prop = m::mock(PropertyProperty::class);
@@ -121,7 +93,6 @@ public function testGetDocCommentPropFirst(): void
         $this->assertEquals('test', $fixture->getDocComment()->getText());
     }
 
-    /** @covers ::getDocComment */
     public function testGetDocComment(): void
     {
         $prop = m::mock(PropertyProperty::class);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyTest.php
index 3c375eff..42c5a722 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyTest.php
@@ -25,6 +25,9 @@
 use PhpParser\Node\Stmt\Property as PropertyNode;
 use PhpParser\Node\Stmt\PropertyProperty;
 use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
 use stdClass;
@@ -32,16 +35,13 @@
 use function current;
 use function next;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\Factory\PropertyIterator
- * @uses \phpDocumentor\Reflection\Php\Property
- * @uses \phpDocumentor\Reflection\Php\Visibility
- * @uses \phpDocumentor\Reflection\Php\ProjectFactoryStrategies
- * @uses \phpDocumentor\Reflection\Php\Factory\Type
- *
- * @covers \phpDocumentor\Reflection\Php\Factory\Property
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- */
+#[CoversClass(Property::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\PropertyIterator')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Property')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Php\ProjectFactoryStrategies')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\Type')]
 final class PropertyTest extends TestCase
 {
     use ProphecyTrait;
@@ -60,7 +60,7 @@ public function testMatches(): void
         $this->assertTrue($this->fixture->matches(self::createContext(null), new PropertyNode(1, [])));
     }
 
-    /** @dataProvider visibilityProvider */
+    #[DataProvider('visibilityProvider')]
     public function testCreateWithVisibility(int $input, string $expectedVisibility): void
     {
         $constantStub = $this->buildPropertyMock($input);
@@ -72,7 +72,7 @@ public function testCreateWithVisibility(int $input, string $expectedVisibility)
     }
 
     /** @return array<string|int[]> */
-    public function visibilityProvider(): array
+    public static function visibilityProvider(): array
     {
         return [
             [
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/TestCase.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/TestCase.php
index 442a8bb2..36acc0a4 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/TestCase.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/TestCase.php
@@ -20,11 +20,13 @@
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategy;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use phpDocumentor\Reflection\Types\Context;
+use PHPUnit\Framework\Attributes\CoversClass;
 use stdClass;
 
 /**
  * Base test case for all strategies, to be sure that they check if the can handle objects before handeling them.
  */
+#[CoversClass(AbstractFactory::class)]
 abstract class TestCase extends MockeryTestCase
 {
     protected ProjectFactoryStrategy $fixture;
@@ -37,7 +39,6 @@ public static function createContext(Context|null $typeContext = null): ContextS
         );
     }
 
-    /** @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory::create */
     public function testCreateThrowsException(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/TraitUseTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/TraitUseTest.php
index 184a58a2..78414df2 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/TraitUseTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/TraitUseTest.php
@@ -14,15 +14,15 @@
 use phpDocumentor\Reflection\Php\Trait_ as Trait_Element;
 use PhpParser\Node\Name\FullyQualified;
 use PhpParser\Node\Stmt\TraitUse as TraitUseNode;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\TraitUse
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- */
+#[CoversClass(TraitUse::class)]
+#[CoversClass(AbstractFactory::class)]
 final class TraitUseTest extends TestCase
 {
     /** @return mixed[][] */
-    public function consumerProvider(): array
+    public static function consumerProvider(): array
     {
         return [
             [new Class_Element(new Fqsen('\MyClass'))],
@@ -36,7 +36,6 @@ protected function setUp(): void
         $this->fixture = new TraitUse();
     }
 
-    /** @covers ::matches */
     public function testMatchesOnlyTraitUseNode(): void
     {
         self::assertTrue(
@@ -47,7 +46,6 @@ public function testMatchesOnlyTraitUseNode(): void
         );
     }
 
-    /** @covers ::create */
     public function testCreateThrowsExceptionWhenStackDoesNotContainClass(): void
     {
         $this->expectException(InvalidArgumentException::class);
@@ -56,12 +54,8 @@ public function testCreateThrowsExceptionWhenStackDoesNotContainClass(): void
         $this->fixture->create($context, $this->givenTraitUse(), new ProjectFactoryStrategies([]));
     }
 
-    /**
-     * @param Class_Element|Trait_Element $traitConsumer
-     *
-     * @covers ::create
-     * @dataProvider consumerProvider
-     */
+    /** @param Class_Element|Trait_Element $traitConsumer */
+    #[DataProvider('consumerProvider')]
     public function testCreateWillAddUsedTraitToContextTop(Element $traitConsumer): void
     {
         $context = self::createContext()->push($traitConsumer);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Trait_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Trait_Test.php
index 7acbe604..89cc74f8 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Trait_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Trait_Test.php
@@ -25,6 +25,8 @@
 use PhpParser\Comment\Doc;
 use PhpParser\Node\Stmt\ClassMethod;
 use PhpParser\Node\Stmt\Trait_ as TraitNode;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\Argument;
 use Prophecy\PhpUnit\ProphecyTrait;
 use Prophecy\Prophecy\ObjectProphecy;
@@ -32,17 +34,14 @@
 
 use function current;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\Trait_
- * @uses \phpDocumentor\Reflection\Php\Method
- * @uses \phpDocumentor\Reflection\Php\Visibility
- * @uses \phpDocumentor\Reflection\Php\Property
- * @uses \phpDocumentor\Reflection\Php\Factory\PropertyIterator
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\Trait_
- * @covers \phpDocumentor\Reflection\Php\Factory\Trait_
- * @covers \phpDocumentor\Reflection\Php\Factory\AbstractFactory
- */
+#[CoversClass(Trait_::class)]
+#[CoversClass(Trait_::class)]
+#[CoversClass(AbstractFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Trait_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Method')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Property')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\PropertyIterator')]
 final class Trait_Test extends TestCase
 {
     use ProphecyTrait;
@@ -61,10 +60,6 @@ public function testMatches(): void
         $this->assertTrue($this->fixture->matches(self::createContext(null), m::mock(TraitNode::class)));
     }
 
-    /**
-     * @covers ::create
-     * @covers ::doCreate
-     */
     public function testSimpleCreate(): void
     {
         $containerMock = m::mock(StrategyContainer::class);
@@ -77,10 +72,6 @@ public function testSimpleCreate(): void
         $this->assertEquals('\Space\MyTrait', (string) $trait->getFqsen());
     }
 
-    /**
-     * @covers ::create
-     * @covers ::doCreate
-     */
     public function testIteratesStatements(): void
     {
         $method1           = new ClassMethod('\Space\MyTrait::method1');
@@ -111,7 +102,6 @@ public function testIteratesStatements(): void
         );
     }
 
-    /** @covers ::create */
     public function testCreateWithDocBlock(): void
     {
         $doc       = new Doc('Text');
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/TypeTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/TypeTest.php
index 037da55e..2aa20a91 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/TypeTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/TypeTest.php
@@ -24,15 +24,12 @@
 use PhpParser\Node\Name;
 use PhpParser\Node\NullableType;
 use PhpParser\Node\UnionType;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PhpUnit\Framework\TestCase as PhpUnitTestCase;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Factory\Type
- * @covers ::<private>
- */
+#[CoversClass(Type::class)]
 final class TypeTest extends PhpUnitTestCase
 {
-    /** @covers ::fromPhpParser */
     public function testReturnsNullWhenNoTypeIsPassed(): void
     {
         $factory = new Type();
@@ -42,7 +39,6 @@ public function testReturnsNullWhenNoTypeIsPassed(): void
         $this->assertNull($result);
     }
 
-    /** @covers ::fromPhpParser */
     public function testReturnsReflectedType(): void
     {
         $factory = new Type();
@@ -54,7 +50,6 @@ public function testReturnsReflectedType(): void
         $this->assertEquals($expected, $result);
     }
 
-    /** @covers ::fromPhpParser */
     public function testReturnsNullableTypeWhenPassedAPhpParserNullable(): void
     {
         $factory = new Type();
@@ -66,7 +61,6 @@ public function testReturnsNullableTypeWhenPassedAPhpParserNullable(): void
         $this->assertEquals($expected, $result);
     }
 
-    /** @covers ::fromPhpParser */
     public function testReturnsUnion(): void
     {
         $factory = new Type();
@@ -78,7 +72,6 @@ public function testReturnsUnion(): void
         $this->assertEquals($expected, $result);
     }
 
-    /** @covers ::fromPhpParser */
     public function testReturnsUnionGivenVariousTypes(): void
     {
         $factory = new Type();
@@ -90,7 +83,6 @@ public function testReturnsUnionGivenVariousTypes(): void
         $this->assertEquals($expected, $result);
     }
 
-    /** @covers ::fromPhpParser */
     public function testReturnsInterseptionType(): void
     {
         $factory = new Type();
diff --git a/tests/unit/phpDocumentor/Reflection/Php/FileTest.php b/tests/unit/phpDocumentor/Reflection/Php/FileTest.php
index 287dc8bc..9cdf0d3a 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/FileTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/FileTest.php
@@ -16,23 +16,21 @@
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use PHPUnit\Framework\TestCase;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\Trait_
- * @uses \phpDocumentor\Reflection\Php\Interface_
- * @uses \phpDocumentor\Reflection\Php\Class_
- * @uses \phpDocumentor\Reflection\Php\Namespace_
- * @uses \phpDocumentor\Reflection\Php\Function_
- * @uses \phpDocumentor\Reflection\Php\Constant
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\File
- * @covers ::__construct
- * @covers ::<private>
- */
+#[CoversClass(File::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Trait_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Interface_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Class_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Namespace_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Function_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
 final class FileTest extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     public const EXAMPLE_HASH = 'a-hash-string';
 
@@ -61,10 +59,6 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /**
-     * @covers ::getClasses
-     * @covers ::AddClass
-     */
     public function testAddAndGetClasses(): void
     {
         $this->assertEmpty($this->fixture->getClasses());
@@ -75,12 +69,6 @@ public function testAddAndGetClasses(): void
         $this->assertEquals(['\MySpace\MyClass' => $class], $this->fixture->getClasses());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::getConstants
-     * @covers ::addConstant
-     */
     public function testAddAndGetConstants(): void
     {
         $this->assertEmpty($this->fixture->getConstants());
@@ -91,10 +79,6 @@ public function testAddAndGetConstants(): void
         $this->assertEquals(['\MySpace::MY_CONSTANT' => $constant], $this->fixture->getConstants());
     }
 
-    /**
-     * @covers ::getFunctions
-     * @covers ::addFunction
-     */
     public function testAddAndGetFunctions(): void
     {
         $this->assertEmpty($this->fixture->getFunctions());
@@ -105,10 +89,6 @@ public function testAddAndGetFunctions(): void
         $this->assertEquals(['\MySpace::MyFunction()' => $function], $this->fixture->getFunctions());
     }
 
-    /**
-     * @covers ::getInterfaces
-     * @covers ::addInterface
-     */
     public function testAddAndGetInterfaces(): void
     {
         $this->assertEmpty($this->fixture->getInterfaces());
@@ -119,10 +99,6 @@ public function testAddAndGetInterfaces(): void
         $this->assertEquals(['\MySpace\MyInterface' => $interface], $this->fixture->getInterfaces());
     }
 
-    /**
-     * @covers ::getTraits
-     * @covers ::addTrait
-     */
     public function testAddAndGetTraits(): void
     {
         $this->assertEmpty($this->fixture->getTraits());
@@ -133,10 +109,6 @@ public function testAddAndGetTraits(): void
         $this->assertEquals(['\MySpace\MyTrait' => $trait], $this->fixture->getTraits());
     }
 
-    /**
-     * @covers ::getEnums
-     * @covers ::addEnum
-     */
     public function testAddAndGetEnums(): void
     {
         $this->assertEmpty($this->fixture->getEnums());
@@ -147,40 +119,31 @@ public function testAddAndGetEnums(): void
         $this->assertEquals(['\MySpace\MyEnum' => $enum], $this->fixture->getEnums());
     }
 
-    /** @covers ::getDocBlock */
     public function testGetDocBlock(): void
     {
         $this->assertSame($this->docBlock, $this->fixture->getDocBlock());
     }
 
-    /** @covers ::getHash */
     public function testGetHash(): void
     {
         $this->assertSame(self::EXAMPLE_HASH, $this->fixture->getHash());
     }
 
-    /** @covers ::getName */
     public function testGetName(): void
     {
         $this->assertSame(self::EXAMPLE_NAME, $this->fixture->getName());
     }
 
-    /** @covers ::getPath */
     public function testSetAndGetPath(): void
     {
         $this->assertSame(self::EXAMPLE_PATH, $this->fixture->getPath());
     }
 
-    /** @covers ::getSource */
     public function testSetAndGetSource(): void
     {
         $this->assertSame(self::EXAMPLE_SOURCE, $this->fixture->getSource());
     }
 
-    /**
-     * @covers ::addNamespace
-     * @covers ::getNamespaces
-     */
     public function testSetAndGetNamespaceAliases(): void
     {
         $this->assertEmpty($this->fixture->getNamespaces());
@@ -190,10 +153,6 @@ public function testSetAndGetNamespaceAliases(): void
         $this->assertEquals(['\MyNamepace\Foo' => new Fqsen('\MyNamepace\Foo')], $this->fixture->getNamespaces());
     }
 
-    /**
-     * @covers ::getIncludes
-     * @covers ::addInclude
-     */
     public function testAddAndGetIncludes(): void
     {
         $this->assertEmpty($this->fixture->getIncludes());
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Function_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Function_Test.php
index 6ca038e8..fbbdf7d0 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Function_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Function_Test.php
@@ -19,21 +19,17 @@
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
 use phpDocumentor\Reflection\Types\Mixed_;
 use phpDocumentor\Reflection\Types\String_;
-
-/**
- * @uses \phpDocumentor\Reflection\Php\Argument
- * @uses \phpDocumentor\Reflection\DocBlock
- * @uses \phpDocumentor\Reflection\Fqsen
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Function_
- * @covers ::__construct
- * @covers ::<private>
- *
- * @property Function_ $fixture
- */
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
+
+/** @property Function_ $fixture */
+#[CoversClass(Function_::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Argument')]
+#[UsesClass('\phpDocumentor\Reflection\DocBlock')]
+#[UsesClass('\phpDocumentor\Reflection\Fqsen')]
 final class Function_Test extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     private Fqsen $fqsen;
 
@@ -54,16 +50,11 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /** @covers ::getName */
     public function testGetName(): void
     {
         $this->assertEquals('MyFunction', $this->fixture->getName());
     }
 
-    /**
-     * @covers ::addArgument
-     * @covers ::getArguments
-     */
     public function testAddAndGetArguments(): void
     {
         $argument = new Argument('firstArgument');
@@ -72,26 +63,22 @@ public function testAddAndGetArguments(): void
         $this->assertEquals([$argument], $this->fixture->getArguments());
     }
 
-    /** @covers ::getFqsen */
     public function testGetFqsen(): void
     {
         $this->assertSame($this->fqsen, $this->fixture->getFqsen());
     }
 
-    /** @covers ::getDocBlock */
     public function testGetDocblock(): void
     {
         $this->assertSame($this->docBlock, $this->fixture->getDocBlock());
     }
 
-    /** @covers ::getReturnType */
     public function testGetDefaultReturnType(): void
     {
         $function = new Function_($this->fqsen);
         $this->assertEquals(new Mixed_(), $function->getReturnType());
     }
 
-    /** @covers ::getReturnType */
     public function testGetReturnTypeFromConstructor(): void
     {
         $returnType = new String_();
@@ -100,14 +87,12 @@ public function testGetReturnTypeFromConstructor(): void
         $this->assertSame($returnType, $function->getReturnType());
     }
 
-    /** @covers ::getHasReturnByReference */
     public function testGetHasReturnByReference(): void
     {
         $function = new Function_($this->fqsen);
         $this->assertSame(false, $function->getHasReturnByReference());
     }
 
-    /** @covers ::getHasReturnByReference */
     public function testGetHasReturnByReferenceFromConstructor(): void
     {
         $function = new Function_($this->fqsen, null, null, null, null, true);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Interface_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Interface_Test.php
index d5d1ccee..2d63f04f 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Interface_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Interface_Test.php
@@ -18,23 +18,19 @@
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
-
-/**
- * @uses \phpDocumentor\Reflection\DocBlock
- * @uses \phpDocumentor\Reflection\Fqsen
- * @uses \phpDocumentor\Reflection\Php\Method
- * @uses \phpDocumentor\Reflection\Php\Constant
- * @uses \phpDocumentor\Reflection\Php\Visibility
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Interface_
- * @covers ::__construct
- * @covers ::<private>
- *
- * @property Interface_ $fixture
- */
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
+
+/** @property Interface_ $fixture */
+#[CoversClass(Interface_::class)]
+#[UsesClass('\phpDocumentor\Reflection\DocBlock')]
+#[UsesClass('\phpDocumentor\Reflection\Fqsen')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Method')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
 final class Interface_Test extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     private Fqsen $fqsen;
 
@@ -63,28 +59,21 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /** @covers ::getName */
     public function testGetName(): void
     {
         $this->assertSame($this->fqsen->getName(), $this->fixture->getName());
     }
 
-    /** @covers ::getFqsen */
     public function testGetFqsen(): void
     {
         $this->assertSame($this->fqsen, $this->fixture->getFqsen());
     }
 
-    /** @covers ::getDocBlock */
     public function testGetDocblock(): void
     {
         $this->assertSame($this->docBlock, $this->fixture->getDocBlock());
     }
 
-    /**
-     * @covers ::addConstant
-     * @covers ::getConstants
-     */
     public function testSettingAndGettingConstants(): void
     {
         $this->assertEquals([], $this->fixture->getConstants());
@@ -96,10 +85,6 @@ public function testSettingAndGettingConstants(): void
         $this->assertEquals(['\MySpace\MyInterface::MY_CONSTANT' => $constant], $this->fixture->getConstants());
     }
 
-    /**
-     * @covers ::addMethod
-     * @covers ::getMethods
-     */
     public function testSettingAndGettingMethods(): void
     {
         $this->assertEquals([], $this->fixture->getMethods());
@@ -111,7 +96,6 @@ public function testSettingAndGettingMethods(): void
         $this->assertEquals(['\MySpace\MyInterface::myMethod()' => $method], $this->fixture->getMethods());
     }
 
-    /** @covers ::getParents */
     public function testReturningTheParentsOfThisInterface(): void
     {
         $this->assertSame($this->exampleParents, $this->fixture->getParents());
@@ -123,7 +107,6 @@ public function testLineAndColumnNumberIsReturnedWhenALocationIsProvided(): void
         $this->assertLineAndColumnNumberIsReturnedWhenALocationIsProvided($fixture);
     }
 
-    /** @covers ::__construct */
     public function testArrayWithParentsMustBeFqsenObjects(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/MetadataContainerTest.php b/tests/unit/phpDocumentor/Reflection/Php/MetadataContainerTestHelper.php
similarity index 85%
rename from tests/unit/phpDocumentor/Reflection/Php/MetadataContainerTest.php
rename to tests/unit/phpDocumentor/Reflection/Php/MetadataContainerTestHelper.php
index db3cfdd4..fc444117 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/MetadataContainerTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/MetadataContainerTestHelper.php
@@ -7,12 +7,8 @@
 use phpDocumentor\Reflection\Exception;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
 
-trait MetadataContainerTest
+trait MetadataContainerTestHelper
 {
-    /**
-     * @covers ::addMetadata
-     * @covers ::getMetadata
-     */
     public function testSetMetaDataForNonExistingKey(): void
     {
         $stub = new MetadataStub('stub');
@@ -22,7 +18,6 @@ public function testSetMetaDataForNonExistingKey(): void
         self::assertSame(['stub' => $stub], $this->getFixture()->getMetadata());
     }
 
-    /** @covers ::addMetadata */
     public function testSetMetaDataWithExistingKeyThrows(): void
     {
         self::expectException(Exception::class);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/MethodTest.php b/tests/unit/phpDocumentor/Reflection/Php/MethodTest.php
index 3798bc5a..c72b5fc3 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/MethodTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/MethodTest.php
@@ -19,19 +19,16 @@
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
 use phpDocumentor\Reflection\Types\Mixed_;
 use phpDocumentor\Reflection\Types\String_;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\Visibility
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Method
- * @covers ::__construct
- * @covers ::<private>
- *
- * @property Method $fixture
- */
+/** @property Method $fixture */
+#[CoversClass(Method::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Argument')]
 final class MethodTest extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     private Fqsen $fqsen;
 
@@ -52,10 +49,6 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /**
-     * @covers ::getFqsen
-     * @covers ::getName
-     */
     public function testGetFqsenAndGetName(): void
     {
         $method = new Method($this->fqsen);
@@ -64,7 +57,6 @@ public function testGetFqsenAndGetName(): void
         $this->assertEquals($this->fqsen->getName(), $method->getName());
     }
 
-    /** @covers ::getDocblock */
     public function testGetDocBlock(): void
     {
         $method = new Method($this->fqsen, $this->visibility, $this->docblock);
@@ -72,12 +64,6 @@ public function testGetDocBlock(): void
         $this->assertSame($this->docblock, $method->getDocBlock());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Argument
-     *
-     * @covers ::getArguments
-     * @covers ::addArgument
-     */
     public function testAddingAndGettingArguments(): void
     {
         $method = new Method($this->fqsen);
@@ -89,7 +75,6 @@ public function testAddingAndGettingArguments(): void
         $this->assertEquals([$argument], $method->getArguments());
     }
 
-    /** @covers ::isAbstract */
     public function testGettingWhetherMethodIsAbstract(): void
     {
         $method = new Method($this->fqsen, $this->visibility, $this->docblock, false);
@@ -99,7 +84,6 @@ public function testGettingWhetherMethodIsAbstract(): void
         $this->assertTrue($method->isAbstract());
     }
 
-    /** @covers ::isFinal */
     public function testGettingWhetherMethodIsFinal(): void
     {
         $method = new Method($this->fqsen, $this->visibility, $this->docblock, false, false, false);
@@ -109,7 +93,6 @@ public function testGettingWhetherMethodIsFinal(): void
         $this->assertTrue($method->isFinal());
     }
 
-    /** @covers ::isStatic */
     public function testGettingWhetherMethodIsStatic(): void
     {
         $method = new Method($this->fqsen, $this->visibility, $this->docblock, false, false, false);
@@ -119,28 +102,24 @@ public function testGettingWhetherMethodIsStatic(): void
         $this->assertTrue($method->isStatic());
     }
 
-    /** @covers ::getVisibility */
     public function testGettingVisibility(): void
     {
         $method = new Method($this->fqsen, $this->visibility, $this->docblock, false, false, false);
         $this->assertSame($this->visibility, $method->getVisibility());
     }
 
-    /** @covers ::getVisibility */
     public function testGetDefaultVisibility(): void
     {
         $method = new Method($this->fqsen);
         $this->assertEquals(new Visibility('public'), $method->getVisibility());
     }
 
-    /** @covers ::getReturnType */
     public function testGetDefaultReturnType(): void
     {
         $method = new Method($this->fqsen);
         $this->assertEquals(new Mixed_(), $method->getReturnType());
     }
 
-    /** @covers ::getReturnType */
     public function testGetReturnTypeFromConstructor(): void
     {
         $returnType = new String_();
@@ -159,14 +138,12 @@ public function testGetReturnTypeFromConstructor(): void
         $this->assertSame($returnType, $method->getReturnType());
     }
 
-    /** @covers ::getHasReturnByReference */
     public function testGetHasReturnByReference(): void
     {
         $method = new Method($this->fqsen);
         $this->assertSame(false, $method->getHasReturnByReference());
     }
 
-    /** @covers ::getHasReturnByReference */
     public function testGetHasReturnByReferenceFromConstructor(): void
     {
         $method = new Method($this->fqsen, null, null, false, false, false, null, null, null, true);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Namespace_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Namespace_Test.php
index 7179d2db..3ed7d211 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Namespace_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Namespace_Test.php
@@ -16,18 +16,18 @@
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
 
 /**
  * Tests the functionality for the Namespace_ class.
- *
- * @coversDefaultClass phpDocumentor\Reflection\Php\Namespace_
  */
 // @codingStandardsIgnoreStart
+#[CoversClass(Namespace_::class)]
 class Namespace_Test extends TestCase
 // @codingStandardsIgnoreEnd
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     protected Namespace_ $fixture;
 
@@ -51,11 +51,6 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::getClasses
-     * @covers ::AddClass
-     */
     public function testAddAndGetClasses(): void
     {
         $this->assertEmpty($this->fixture->getClasses());
@@ -66,11 +61,6 @@ public function testAddAndGetClasses(): void
         $this->assertEquals(['\MySpace\MyClass' => $class], $this->fixture->getClasses());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::getConstants
-     * @covers ::addConstant
-     */
     public function testAddAndGetConstants(): void
     {
         $this->assertEmpty($this->fixture->getConstants());
@@ -81,11 +71,6 @@ public function testAddAndGetConstants(): void
         $this->assertEquals(['\MySpace::MY_CONSTANT' => $constant], $this->fixture->getConstants());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::getFunctions
-     * @covers ::addFunction
-     */
     public function testAddAndGetFunctions(): void
     {
         $this->assertEmpty($this->fixture->getFunctions());
@@ -96,11 +81,6 @@ public function testAddAndGetFunctions(): void
         $this->assertEquals(['\MySpace\MyFunction()' => $function], $this->fixture->getFunctions());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::getInterfaces
-     * @covers ::addInterface
-     */
     public function testAddAndGetInterfaces(): void
     {
         $this->assertEmpty($this->fixture->getInterfaces());
@@ -111,11 +91,6 @@ public function testAddAndGetInterfaces(): void
         $this->assertEquals(['\MySpace\MyInterface' => $interface], $this->fixture->getInterfaces());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::getTraits
-     * @covers ::addTrait
-     */
     public function testAddAndGetTraits(): void
     {
         $this->assertEmpty($this->fixture->getTraits());
@@ -126,11 +101,6 @@ public function testAddAndGetTraits(): void
         $this->assertEquals(['\MySpace\MyTrait' => $trait], $this->fixture->getTraits());
     }
 
-    /**
-     * @covers ::__construct
-     * @covers ::getFqsen
-     * @covers ::getName
-     */
     public function testGetFqsen(): void
     {
         $this->assertSame($this->fqsen, $this->fixture->getFqsen());
diff --git a/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php b/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
index b7d69a80..e13d69b7 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
@@ -20,14 +20,11 @@
 use PhpParser\NodeVisitor\NameResolver;
 use PhpParser\Parser;
 use PhpParser\ParserFactory;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
 use Prophecy\PhpUnit\ProphecyTrait;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Php\NodesFactory
- * @covers ::__construct
- * @covers ::<private>
- */
+#[CoversClass(NodesFactory::class)]
 final class NodesFactoryTest extends TestCase
 {
     use ProphecyTrait;
@@ -37,8 +34,6 @@ final class NodesFactoryTest extends TestCase
      *
      * Unfortunately, we cannot actually inspect whether all recommended items were instantiated, so I create an example
      * NodesFactory containing what I expected and this test will verify that no regression took place.
-     *
-     * @covers ::createInstance
      */
     public function testThatAFactoryWithRecommendedComponentsCanBeInstantiated(): void
     {
@@ -48,7 +43,6 @@ public function testThatAFactoryWithRecommendedComponentsCanBeInstantiated(): vo
         $this->assertEquals($this->givenTheExpectedDefaultNodesFactory(), $factory);
     }
 
-    /** @covers ::create */
     public function testThatCodeGetsConvertedIntoNodes(): void
     {
         $parser = $this->prophesize(Parser::class);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/ProjectFactoryStrategiesTest.php b/tests/unit/phpDocumentor/Reflection/Php/ProjectFactoryStrategiesTest.php
index ce1b20ef..e8a332d0 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/ProjectFactoryStrategiesTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/ProjectFactoryStrategiesTest.php
@@ -17,29 +17,22 @@
 use phpDocumentor\Reflection\Php\Factory\ContextStack;
 use phpDocumentor\Reflection\Php\Factory\DummyFactoryStrategy;
 use phpDocumentor\Reflection\Types\Context;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
 use stdClass;
 
 /**
  * Test case for ProjectFactoryStrategies
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\ProjectFactoryStrategies
- * @covers ::__construct
- * @covers ::<private>
  */
+#[CoversClass(ProjectFactoryStrategies::class)]
 class ProjectFactoryStrategiesTest extends TestCase
 {
-    /** @covers ::addStrategy */
     public function testStrategiesAreChecked(): void
     {
         new ProjectFactoryStrategies([new DummyFactoryStrategy()]);
         $this->assertTrue(true);
     }
 
-    /**
-     * @covers ::findMatching
-     * @covers ::addStrategy
-     */
     public function testFindMatching(): void
     {
         $strategy  = new DummyFactoryStrategy();
@@ -52,7 +45,6 @@ public function testFindMatching(): void
         $this->assertSame($strategy, $actual);
     }
 
-    /** @covers ::findMatching */
     public function testCreateThrowsExceptionWhenStrategyNotFound(): void
     {
         $this->expectException(OutOfBoundsException::class);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/ProjectFactoryTest.php b/tests/unit/phpDocumentor/Reflection/Php/ProjectFactoryTest.php
index ed1e5736..67da45f4 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/ProjectFactoryTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/ProjectFactoryTest.php
@@ -19,6 +19,8 @@
 use phpDocumentor\Reflection\File\LocalFile;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Php\Factory\ContextStack;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use Prophecy\Argument as ProphesizeArgument;
 use Prophecy\PhpUnit\ProphecyTrait;
 
@@ -28,57 +30,37 @@
 use function key;
 use function md5;
 
-/**
- * @uses \phpDocumentor\Reflection\Php\Project
- * @uses \phpDocumentor\Reflection\Php\Namespace_
- * @uses \phpDocumentor\Reflection\Php\Class_
- * @uses \phpDocumentor\Reflection\Php\Interface_
- * @uses \phpDocumentor\Reflection\Php\Trait_
- * @uses \phpDocumentor\Reflection\Php\Constant
- * @uses \phpDocumentor\Reflection\Php\File
- * @uses \phpDocumentor\Reflection\Php\Function_
- * @uses \phpDocumentor\Reflection\Php\ProjectFactoryStrategies
- * @uses \phpDocumentor\Reflection\Php\Visibility
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\ProjectFactory
- * @covers ::__construct
- * @covers ::<private>
- */
+#[CoversClass(ProjectFactory::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Project')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Namespace_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Class_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Interface_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Trait_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Constant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\File')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Function_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\ProjectFactoryStrategies')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Middleware\ChainFactory')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\Property')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\Method')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\Class_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\Interface_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\ClassConstant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\Define')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\GlobalConstant')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\Trait_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Factory\File')]
+#[UsesClass('\phpDocumentor\Reflection\Php\NodesFactory')]
 final class ProjectFactoryTest extends MockeryTestCase
 {
     use ProphecyTrait;
 
-    /**
-     * Tests whether a factory can be instantiated using recommended factories.
-     *
-     * This test is unable to test which exact factories are instantiated because that is not exposed by
-     * the factory. Even using assertEquals to do a regression test against a pre-populated factory does not
-     * work because there is a piece of randomness inside one of the properties; causing the tests to fail when
-     * you try to do it like that.
-     *
-     * @uses \phpDocumentor\Reflection\Middleware\ChainFactory
-     * @uses \phpDocumentor\Reflection\Php\Factory\Property
-     * @uses \phpDocumentor\Reflection\Php\Factory\Argument
-     * @uses \phpDocumentor\Reflection\Php\Factory\Method
-     * @uses \phpDocumentor\Reflection\Php\Factory\Class_
-     * @uses \phpDocumentor\Reflection\Php\Factory\Interface_
-     * @uses \phpDocumentor\Reflection\Php\Factory\ClassConstant
-     * @uses \phpDocumentor\Reflection\Php\Factory\Define
-     * @uses \phpDocumentor\Reflection\Php\Factory\GlobalConstant
-     * @uses \phpDocumentor\Reflection\Php\Factory\Argument
-     * @uses \phpDocumentor\Reflection\Php\Factory\Trait_
-     * @uses \phpDocumentor\Reflection\Php\Factory\DocBlock
-     * @uses \phpDocumentor\Reflection\Php\Factory\File
-     * @uses \phpDocumentor\Reflection\Php\NodesFactory
-     *
-     * @covers ::createInstance
-     */
     public function testCreatingAnInstanceInstantiatesItWithTheRecommendedStrategies(): void
     {
         $this->assertInstanceOf(ProjectFactory::class, ProjectFactory::createInstance());
     }
 
-    /** @covers ::create */
     public function testCreate(): void
     {
         $expected = ['some/file.php', 'some/other.php'];
@@ -125,7 +107,6 @@ public function testCreate(): void
         $this->assertEquals(['some/file.php', 'some/other.php'], $projectFilePaths);
     }
 
-    /** @covers ::create */
     public function testCreateThrowsExceptionWhenStrategyNotFound(): void
     {
         $this->expectException(OutOfBoundsException::class);
@@ -133,7 +114,6 @@ public function testCreateThrowsExceptionWhenStrategyNotFound(): void
         $projectFactory->create('MyProject', ['aa']);
     }
 
-    /** @covers ::create */
     public function testCreateProjectFromFileWithNamespacedClass(): void
     {
         $file = new File(md5('some/file.php'), 'some/file.php');
@@ -150,7 +130,6 @@ public function testCreateProjectFromFileWithNamespacedClass(): void
         $this->assertEquals('\mySpace\MyClass', key($mySpace->getClasses()));
     }
 
-    /** @covers ::create */
     public function testWithNamespacedInterface(): void
     {
         $file = new File(md5('some/file.php'), 'some/file.php');
@@ -165,7 +144,6 @@ public function testWithNamespacedInterface(): void
         $this->assertEquals('\mySpace\MyInterface', key($mySpace->getInterfaces()));
     }
 
-    /** @covers ::create */
     public function testWithNamespacedFunction(): void
     {
         $file = new File(md5('some/file.php'), 'some/file.php');
@@ -180,7 +158,6 @@ public function testWithNamespacedFunction(): void
         $this->assertEquals('\mySpace\function()', key($mySpace->getFunctions()));
     }
 
-    /** @covers ::create */
     public function testWithNamespacedConstant(): void
     {
         $file = new File(md5('some/file.php'), 'some/file.php');
@@ -195,7 +172,6 @@ public function testWithNamespacedConstant(): void
         $this->assertEquals('\mySpace::MY_CONST', key($mySpace->getConstants()));
     }
 
-    /** @covers ::create */
     public function testWithNamespacedTrait(): void
     {
         $file = new File(md5('some/file.php'), 'some/file.php');
@@ -210,7 +186,6 @@ public function testWithNamespacedTrait(): void
         $this->assertEquals('\mySpace\MyTrait', key($mySpace->getTraits()));
     }
 
-    /** @covers ::create */
     public function testNamespaceSpreadOverMultipleFiles(): void
     {
         $someFile = new File(md5('some/file.php'), 'some/file.php');
@@ -227,7 +202,6 @@ public function testNamespaceSpreadOverMultipleFiles(): void
         $this->assertCount(2, current($namespaces)->getClasses());
     }
 
-    /** @covers ::create */
     public function testSingleFileMultipleNamespaces(): void
     {
         $someFile = new File(md5('some/file.php'), 'some/file.php');
diff --git a/tests/unit/phpDocumentor/Reflection/Php/ProjectTest.php b/tests/unit/phpDocumentor/Reflection/Php/ProjectTest.php
index 8df072bf..724a996c 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/ProjectTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/ProjectTest.php
@@ -14,15 +14,16 @@
 namespace phpDocumentor\Reflection\Php;
 
 use phpDocumentor\Reflection\Fqsen;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 use PHPUnit\Framework\TestCase;
 
 /**
  * Tests the functionality for the Project class.
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Project
- * @covers ::__construct
- * @covers ::<private>
  */
+#[CoversClass(Project::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Namespace_')]
+#[UsesClass('\phpDocumentor\Reflection\Php\File')]
 class ProjectTest extends TestCase
 {
     final public const EXAMPLE_NAME = 'Initial name';
@@ -37,23 +38,11 @@ protected function setUp(): void
         $this->fixture = new Project(self::EXAMPLE_NAME);
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Namespace_
-     *
-     * @covers ::getName
-     */
     public function testGetSetName(): void
     {
         $this->assertEquals(self::EXAMPLE_NAME, $this->fixture->getName());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Namespace_
-     * @uses \phpDocumentor\Reflection\Php\File
-     *
-     * @covers ::getFiles
-     * @covers ::addFile
-     */
     public function testGetAddFiles(): void
     {
         $this->assertEmpty($this->fixture->getFiles());
@@ -64,11 +53,6 @@ public function testGetAddFiles(): void
         $this->assertSame(['foo/bar' => $include], $this->fixture->getFiles());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Namespace_
-     *
-     * @covers ::getRootNamespace
-     */
     public function testGetRootNamespace(): void
     {
         $this->assertInstanceOf(Namespace_::class, $this->fixture->getRootNamespace());
@@ -79,12 +63,6 @@ public function testGetRootNamespace(): void
         $this->assertSame($namespaceDescriptor, $project->getRootNamespace());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Namespace_
-     *
-     * @covers ::getNamespaces
-     * @covers ::addNamespace
-     */
     public function testGetAddNamespace(): void
     {
         $this->assertEmpty($this->fixture->getNamespaces());
diff --git a/tests/unit/phpDocumentor/Reflection/Php/PropertyTest.php b/tests/unit/phpDocumentor/Reflection/Php/PropertyTest.php
index 5f8b319d..44a7d5ef 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/PropertyTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/PropertyTest.php
@@ -18,18 +18,20 @@
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
 use phpDocumentor\Reflection\Types\Integer;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
 
 /**
  * Tests the functionality for the Property class.
  *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Property
- * @covers ::__construct
- * @covers ::<private>
  * @property Property $fixture
  */
+#[CoversClass(Property::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Types\Integer')]
 final class PropertyTest extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     private Fqsen $fqsen;
 
@@ -50,12 +52,6 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::getFqsen
-     * @covers ::getName
-     */
     public function testGetFqsenAndGetName(): void
     {
         $property = new Property($this->fqsen);
@@ -64,12 +60,6 @@ public function testGetFqsenAndGetName(): void
         $this->assertEquals($this->fqsen->getName(), $property->getName());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::isStatic
-     * @covers ::__construct
-     */
     public function testGettingWhetherPropertyIsStatic(): void
     {
         $property = new Property($this->fqsen, $this->visibility, $this->docBlock, null, false);
@@ -79,12 +69,6 @@ public function testGettingWhetherPropertyIsStatic(): void
         $this->assertTrue($property->isStatic());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::isReadOnly
-     * @covers ::__construct
-     */
     public function testGettingWhetherPropertyIsReadOnly(): void
     {
         $property = new Property($this->fqsen, $this->visibility, $this->docBlock, null);
@@ -105,12 +89,6 @@ public function testGettingWhetherPropertyIsReadOnly(): void
         $this->assertTrue($property->isReadOnly());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::getVisibility
-     * @covers ::__construct
-     */
     public function testGettingVisibility(): void
     {
         $property = new Property($this->fqsen, $this->visibility, $this->docBlock, null, true);
@@ -118,12 +96,6 @@ public function testGettingVisibility(): void
         $this->assertSame($this->visibility, $property->getVisibility());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::getTypes
-     * @covers ::addType
-     */
     public function testSetAndGetTypes(): void
     {
         $property = new Property($this->fqsen, $this->visibility, $this->docBlock, null, true);
@@ -133,11 +105,6 @@ public function testSetAndGetTypes(): void
         $this->assertEquals(['a'], $property->getTypes());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::getDefault
-     */
     public function testGetDefault(): void
     {
         $property = new Property($this->fqsen, $this->visibility, $this->docBlock, null, false);
@@ -147,11 +114,6 @@ public function testGetDefault(): void
         $this->assertEquals('a', $property->getDefault());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::getDocBlock
-     */
     public function testGetDocBlock(): void
     {
         $property = new Property($this->fqsen, $this->visibility, $this->docBlock, null, false);
@@ -164,12 +126,6 @@ public function testLineAndColumnNumberIsReturnedWhenALocationIsProvided(): void
         $this->assertLineAndColumnNumberIsReturnedWhenALocationIsProvided($fixture);
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     * @uses \phpDocumentor\Reflection\Types\Integer
-     *
-     * @covers ::getType
-     */
     public function testGetType(): void
     {
         $type = new Integer();
diff --git a/tests/unit/phpDocumentor/Reflection/Php/TestCase.php b/tests/unit/phpDocumentor/Reflection/Php/TestCase.php
index 9be46c68..75712494 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/TestCase.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/TestCase.php
@@ -15,19 +15,20 @@
 
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
+use PHPUnit\Framework\Attributes\CoversFunction;
+use PHPUnit\Framework\Attributes\UsesClass;
 use PHPUnit\Framework\TestCase as BaseTestCase;
 
 /**
  * Base test case for all elements.
  */
+#[CoversFunction('getLocation')]
+#[CoversFunction('getEndLocation')]
+#[UsesClass('\phpDocumentor\Reflection\Location')]
 abstract class TestCase extends BaseTestCase
 {
     protected Element|MetaDataContainerInterface $fixture;
 
-    /**
-     * @covers ::getLocation
-     * @covers ::getEndLocation
-     */
     public function testLineNumberIsMinusOneWhenNoneIsProvided(): void
     {
         $this->assertSame(-1, $this->fixture->getLocation()->getLineNumber());
@@ -37,12 +38,6 @@ public function testLineNumberIsMinusOneWhenNoneIsProvided(): void
         $this->assertSame(0, $this->fixture->getEndLocation()->getColumnNumber());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Location
-     *
-     * @covers ::getLocation
-     * @covers ::getEndLocation
-     */
     public function testLineAndColumnNumberIsReturnedWhenALocationIsProvided(): void
     {
     }
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Trait_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Trait_Test.php
index 72f5ddd3..afddb001 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Trait_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Trait_Test.php
@@ -17,16 +17,17 @@
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
-
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Trait_
- * @covers ::__construct
- * @covers ::<private>
- * @property Trait_ $fixture
- */
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\UsesClass;
+
+/** @property Trait_ $fixture */
+#[CoversClass(Trait_::class)]
+#[UsesClass('\phpDocumentor\Reflection\Php\Property')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Visibility')]
+#[UsesClass('\phpDocumentor\Reflection\Php\Method')]
 final class Trait_Test extends TestCase
 {
-    use MetadataContainerTest;
+    use MetadataContainerTestHelper;
 
     private Fqsen $fqsen;
 
@@ -47,23 +48,12 @@ private function getFixture(): MetaDataContainerInterface
         return $this->fixture;
     }
 
-    /**
-     * @covers ::getFqsen
-     * @covers ::getName
-     */
     public function testGetFqsenAndGetName(): void
     {
         $this->assertSame($this->fqsen, $this->fixture->getFqsen());
         $this->assertEquals($this->fqsen->getName(), $this->fixture->getName());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Property
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::addProperty
-     * @covers ::getProperties
-     */
     public function testAddAndGettingProperties(): void
     {
         $this->assertEquals([], $this->fixture->getProperties());
@@ -75,13 +65,6 @@ public function testAddAndGettingProperties(): void
         $this->assertEquals(['\MyTrait::$myProperty' => $property], $this->fixture->getProperties());
     }
 
-    /**
-     * @uses \phpDocumentor\Reflection\Php\Method
-     * @uses \phpDocumentor\Reflection\Php\Visibility
-     *
-     * @covers ::addMethod
-     * @covers ::getMethods
-     */
     public function testAddAndGettingMethods(): void
     {
         $this->assertEquals([], $this->fixture->getMethods());
@@ -93,10 +76,6 @@ public function testAddAndGettingMethods(): void
         $this->assertEquals(['\MyTrait::myMethod()' => $method], $this->fixture->getMethods());
     }
 
-    /**
-     * @covers ::getUsedTraits
-     * @covers ::AddUsedTrait
-     */
     public function testAddAndGettingUsedTrait(): void
     {
         $this->assertEmpty($this->fixture->getUsedTraits());
@@ -108,10 +87,6 @@ public function testAddAndGettingUsedTrait(): void
         $this->assertSame(['\MyTrait' => $trait], $this->fixture->getUsedTraits());
     }
 
-    /**
-     * @covers ::getConstants
-     * @covers ::addConstant
-     */
     public function testAddAndGettingConstants(): void
     {
         $this->assertEmpty($this->fixture->getConstants());
@@ -123,7 +98,6 @@ public function testAddAndGettingConstants(): void
         $this->assertSame(['\MyClass::MY_CONSTANT' => $constant], $this->fixture->getConstants());
     }
 
-    /** @covers ::getDocBlock */
     public function testGetDocblock(): void
     {
         $this->assertSame($this->docBlock, $this->fixture->getDocBlock());
diff --git a/tests/unit/phpDocumentor/Reflection/Php/ValueEvaluator/ConstantEvaluatorTest.php b/tests/unit/phpDocumentor/Reflection/Php/ValueEvaluator/ConstantEvaluatorTest.php
index ea96ce1d..7c5754d0 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/ValueEvaluator/ConstantEvaluatorTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/ValueEvaluator/ConstantEvaluatorTest.php
@@ -10,14 +10,12 @@
 use PhpParser\ConstExprEvaluationException;
 use PhpParser\Node\Expr\ShellExec;
 use PhpParser\Node\Scalar\MagicConst\Namespace_;
+use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
 
-/** @coversDefaultClass \phpDocumentor\Reflection\Php\ValueEvaluator\ConstantEvaluator */
+#[CoversClass(ConstantEvaluator::class)]
 final class ConstantEvaluatorTest extends TestCase
 {
-    /** @covers ::evaluate */
-
-    /** @covers ::evaluateFallback */
     public function testEvaluateThrowsWhenTypeContextIsNotSet(): void
     {
         $this->expectException(ConstExprEvaluationException::class);
@@ -26,9 +24,6 @@ public function testEvaluateThrowsWhenTypeContextIsNotSet(): void
         $evaluator->evaluate(new Namespace_(), new ContextStack(new Project('test')));
     }
 
-    /** @covers ::evaluate */
-
-    /** @covers ::evaluateFallback */
     public function testEvaluateThrowsOnUnknownExpression(): void
     {
         $this->expectException(ConstExprEvaluationException::class);
@@ -37,9 +32,6 @@ public function testEvaluateThrowsOnUnknownExpression(): void
         $result = $evaluator->evaluate(new ShellExec([]), new ContextStack(new Project('test'), new Context('Test')));
     }
 
-    /** @covers ::evaluate */
-
-    /** @covers ::evaluateFallback */
     public function testEvaluateReturnsNamespaceFromContext(): void
     {
         $evaluator = new ConstantEvaluator();
diff --git a/tests/unit/phpDocumentor/Reflection/Php/VisibilityTest.php b/tests/unit/phpDocumentor/Reflection/Php/VisibilityTest.php
index 609d644f..17cf1e34 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/VisibilityTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/VisibilityTest.php
@@ -14,20 +14,17 @@
 namespace phpDocumentor\Reflection\Php;
 
 use InvalidArgumentException;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 /**
  * Test case for Visibility
- *
- * @coversDefaultClass \phpDocumentor\Reflection\Php\Visibility
  */
+#[CoversClass(Visibility::class)]
 class VisibilityTest extends TestCase
 {
-    /**
-     * @dataProvider visibilityProvider
-     * @covers ::__construct
-     * @covers ::__toString
-     */
+    #[DataProvider('visibilityProvider')]
     public function testVisibility(string $input, string $expected): void
     {
         $visibility = new Visibility($input);
@@ -36,7 +33,7 @@ public function testVisibility(string $input, string $expected): void
     }
 
     /** @return string[][] */
-    public function visibilityProvider(): array
+    public static function visibilityProvider(): array
     {
         return [
             ['public', 'public'],
@@ -46,7 +43,6 @@ public function visibilityProvider(): array
         ];
     }
 
-    /** @covers ::__construct */
     public function testVisibilityChecksInput(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/phpDocumentor/Reflection/Types/NamespaceNodeToContextTest.php b/tests/unit/phpDocumentor/Reflection/Types/NamespaceNodeToContextTest.php
index afe924fc..dd058a31 100644
--- a/tests/unit/phpDocumentor/Reflection/Types/NamespaceNodeToContextTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Types/NamespaceNodeToContextTest.php
@@ -11,25 +11,21 @@
 use PhpParser\Node\Stmt\Namespace_;
 use PhpParser\Node\Stmt\Use_ as UseStatement;
 use PhpParser\Node\Stmt\UseUse;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
-/**
- * @coversDefaultClass \phpDocumentor\Reflection\Types\NamespaceNodeToContext
- * @covers ::<private>
- */
+#[CoversClass(NamespaceNodeToContext::class)]
 final class NamespaceNodeToContextTest extends TestCase
 {
-    /**
-     * @dataProvider expectedContextsProvider
-     * @covers ::__invoke
-     */
+    #[DataProvider('expectedContextsProvider')]
     public function testConversion(Namespace_|null $namespace, Context $expectedContext): void
     {
         $this->assertEquals($expectedContext, (new NamespaceNodeToContext())->__invoke($namespace));
     }
 
     /** @return (Namespace|Context|null)[][] */
-    public function expectedContextsProvider(): array
+    public static function expectedContextsProvider(): array
     {
         $namespaceWithImports = new Namespace_(
             new Name('With\\Imports'),

From ced9c834a2989bc6f29f630358624729630d16fc Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Mon, 6 May 2024 23:48:43 +0200
Subject: [PATCH 008/129] Upgrade workflow

---
 .github/workflows/integrate.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml
index c486f756..bbdda76a 100644
--- a/.github/workflows/integrate.yaml
+++ b/.github/workflows/integrate.yaml
@@ -61,11 +61,11 @@ jobs:
 
   unit-tests:
     name: "Unit test"
-    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.6"
+    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.7"
 
   integration-tests:
     name: "Integration test"
-    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.6"
+    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.7"
     needs: "unit-tests"
     with:
       test-suite: "integration"

From e5cabbe0b043b1ba18bf7835cef4fac39853d096 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Mon, 6 May 2024 23:52:34 +0200
Subject: [PATCH 009/129] Fix coverage issues

---
 tests/integration/FileDocblockTest.php | 16 +++-------------
 1 file changed, 3 insertions(+), 13 deletions(-)

diff --git a/tests/integration/FileDocblockTest.php b/tests/integration/FileDocblockTest.php
index 2ac2c05f..d6fa98d6 100644
--- a/tests/integration/FileDocblockTest.php
+++ b/tests/integration/FileDocblockTest.php
@@ -6,11 +6,13 @@
 
 use phpDocumentor\Reflection\File\LocalFile;
 use phpDocumentor\Reflection\Php\ProjectFactory;
+use PHPUnit\Framework\Attributes\CoversNothing;
 use PHPUnit\Framework\TestCase;
 
 /**
  * Integration tests to check the correct working of processing a namespace into a project.
  */
+#[CoversNothing]
 final class FileDocblockTest extends TestCase
 {
     /** @var ProjectFactory */
@@ -37,7 +39,7 @@ public function testFileDocblock(string  $fileName) : void
         );
     }
 
-    public function fileProvider() : array
+    public static function fileProvider() : array
     {
         return [
             [ __DIR__ . '/data/GlobalFiles/empty.php' ],
@@ -48,10 +50,6 @@ public function fileProvider() : array
         ];
     }
 
-    /**
-     * @covers \phpDocumentor\Reflection\Php\Factory\File::create
-     * @covers \phpDocumentor\Reflection\Php\Factory\File::<private>
-     */
     public function testConditionalFunctionDefine() : void
     {
         $fileName =  __DIR__ . '/data/GlobalFiles/conditional_function.php';
@@ -66,10 +64,6 @@ public function testConditionalFunctionDefine() : void
         );
     }
 
-    /**
-     * @covers \phpDocumentor\Reflection\Php\Factory\File::create
-     * @covers \phpDocumentor\Reflection\Php\Factory\File::<private>
-     */
     public function testGlobalNamespacedFunctionDefine() : void
     {
         $fileName =  __DIR__ . '/data/GlobalFiles/global_namspaced_function.php';
@@ -84,10 +78,6 @@ public function testGlobalNamespacedFunctionDefine() : void
         );
     }
 
-    /**
-     * @covers \phpDocumentor\Reflection\Php\Factory\File::create
-     * @covers \phpDocumentor\Reflection\Php\Factory\File::<private>
-     */
     public function testFileWithInlineFunction() : void
     {
         $fileName =  __DIR__ . '/data/GlobalFiles/inline_function.php';

From b91ae7afa1fd03978716bdf55a7865f63b9d2817 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Tue, 7 May 2024 00:08:50 +0200
Subject: [PATCH 010/129] Switch to psalm phar

---
 .github/workflows/integrate.yaml |    2 +-
 Makefile                         |    2 +-
 composer.json                    |    5 +-
 composer.lock                    | 1816 +-----------------------------
 4 files changed, 63 insertions(+), 1762 deletions(-)

diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml
index bbdda76a..4a9d6230 100644
--- a/.github/workflows/integrate.yaml
+++ b/.github/workflows/integrate.yaml
@@ -54,7 +54,7 @@ jobs:
 
   static-analysis:
     name: "Static analysis"
-    uses: "phpDocumentor/.github/.github/workflows/static-analysis.yml@v0.6"
+    uses: "phpDocumentor/.github/.github/workflows/static-analysis.yml@main"
     with:
       php-version: "8.2"
       php-extensions: "none, ctype, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter, fileinfo, pcntl, posix"
diff --git a/Makefile b/Makefile
index 31d69963..5fd23d61 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@ fix-code-style:
 .PHONY: static-code-analysis
 static-code-analysis: vendor ## Runs a static code analysis with phpstan/phpstan and vimeo/psalm
 	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.1-cli vendor/bin/phpstan --configuration=phpstan.neon
-	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.1-cli vendor/bin/psalm
+	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.1-cli vendor/bin/psalm.phar
 
 .PHONY: test
 test: test-unit test-functional ## Runs all test suites with phpunit/phpunit
diff --git a/composer.json b/composer.json
index 3c9045d1..e7cdb4d2 100644
--- a/composer.json
+++ b/composer.json
@@ -35,12 +35,11 @@
         "phpspec/prophecy-phpunit": "^2.0",
         "phpstan/extension-installer": "^1.1",
         "phpstan/phpstan": "^1.8",
-        "phpstan/phpstan-php-parser": "^1.1",
         "phpstan/phpstan-webmozart-assert": "^1.2",
         "phpunit/phpunit": "^10.0",
+        "psalm/phar": "^5.24",
         "rector/rector": "^1.0.0",
-        "squizlabs/php_codesniffer": "^3.8",
-        "vimeo/psalm": "^5.0"
+        "squizlabs/php_codesniffer": "^3.8"
     },
     "config": {
         "preferred-install": {
diff --git a/composer.lock b/composer.lock
index 76402555..8e258ff9 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "c9f02f2c20dd063dd9d81eabd836d3aa",
+    "content-hash": "632acca5e52598434ef0221de06c0ed1",
     "packages": [
         {
             "name": "doctrine/deprecations",
@@ -471,384 +471,6 @@
         }
     ],
     "packages-dev": [
-        {
-            "name": "amphp/amp",
-            "version": "v2.6.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/amp.git",
-                "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d",
-                "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "require-dev": {
-                "amphp/php-cs-fixer-config": "dev-master",
-                "amphp/phpunit-util": "^1",
-                "ext-json": "*",
-                "jetbrains/phpstorm-stubs": "^2019.3",
-                "phpunit/phpunit": "^7 | ^8 | ^9",
-                "react/promise": "^2",
-                "vimeo/psalm": "^3.12"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.x-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "lib/functions.php",
-                    "lib/Internal/functions.php"
-                ],
-                "psr-4": {
-                    "Amp\\": "lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "rdlowrey@php.net"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                },
-                {
-                    "name": "Bob Weinand",
-                    "email": "bobwei9@hotmail.com"
-                },
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                }
-            ],
-            "description": "A non-blocking concurrency framework for PHP applications.",
-            "homepage": "https://amphp.org/amp",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "awaitable",
-                "concurrency",
-                "event",
-                "event-loop",
-                "future",
-                "non-blocking",
-                "promise"
-            ],
-            "support": {
-                "irc": "irc://irc.freenode.org/amphp",
-                "issues": "https://github.com/amphp/amp/issues",
-                "source": "https://github.com/amphp/amp/tree/v2.6.4"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/amphp",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-03-21T18:52:26+00:00"
-        },
-        {
-            "name": "amphp/byte-stream",
-            "version": "v1.8.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/byte-stream.git",
-                "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc",
-                "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "php": ">=7.1"
-            },
-            "require-dev": {
-                "amphp/php-cs-fixer-config": "dev-master",
-                "amphp/phpunit-util": "^1.4",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "jetbrains/phpstorm-stubs": "^2019.3",
-                "phpunit/phpunit": "^6 || ^7 || ^8",
-                "psalm/phar": "^3.11.4"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "lib/functions.php"
-                ],
-                "psr-4": {
-                    "Amp\\ByteStream\\": "lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                },
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                }
-            ],
-            "description": "A stream abstraction to make working with non-blocking I/O simple.",
-            "homepage": "https://amphp.org/byte-stream",
-            "keywords": [
-                "amp",
-                "amphp",
-                "async",
-                "io",
-                "non-blocking",
-                "stream"
-            ],
-            "support": {
-                "issues": "https://github.com/amphp/byte-stream/issues",
-                "source": "https://github.com/amphp/byte-stream/tree/v1.8.2"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/amphp",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-04-13T18:00:56+00:00"
-        },
-        {
-            "name": "composer/pcre",
-            "version": "3.1.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/pcre.git",
-                "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
-                "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.4 || ^8.0"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "^1.3",
-                "phpstan/phpstan-strict-rules": "^1.1",
-                "symfony/phpunit-bridge": "^5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Pcre\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
-            "keywords": [
-                "PCRE",
-                "preg",
-                "regex",
-                "regular expression"
-            ],
-            "support": {
-                "issues": "https://github.com/composer/pcre/issues",
-                "source": "https://github.com/composer/pcre/tree/3.1.3"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-03-19T10:26:25+00:00"
-        },
-        {
-            "name": "composer/semver",
-            "version": "3.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
-                "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0 || ^8.0"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "^1.4",
-                "symfony/phpunit-bridge": "^4.2 || ^5"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Semver\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "Semver library that offers utilities, version constraint parsing and validation.",
-            "keywords": [
-                "semantic",
-                "semver",
-                "validation",
-                "versioning"
-            ],
-            "support": {
-                "irc": "ircs://irc.libera.chat:6697/composer",
-                "issues": "https://github.com/composer/semver/issues",
-                "source": "https://github.com/composer/semver/tree/3.4.0"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2023-08-31T09:50:34+00:00"
-        },
-        {
-            "name": "composer/xdebug-handler",
-            "version": "3.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
-                "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
-                "shasum": ""
-            },
-            "require": {
-                "composer/pcre": "^1 || ^2 || ^3",
-                "php": "^7.2.5 || ^8.0",
-                "psr/log": "^1 || ^2 || ^3"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "^1.0",
-                "phpstan/phpstan-strict-rules": "^1.1",
-                "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Composer\\XdebugHandler\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "John Stevenson",
-                    "email": "john-stevenson@blueyonder.co.uk"
-                }
-            ],
-            "description": "Restarts a process without Xdebug.",
-            "keywords": [
-                "Xdebug",
-                "performance"
-            ],
-            "support": {
-                "irc": "ircs://irc.libera.chat:6697/composer",
-                "issues": "https://github.com/composer/xdebug-handler/issues",
-                "source": "https://github.com/composer/xdebug-handler/tree/3.0.4"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-03-26T18:29:49+00:00"
-        },
         {
             "name": "dealerdirect/phpcodesniffer-composer-installer",
             "version": "v1.0.0",
@@ -927,43 +549,6 @@
             },
             "time": "2023-01-05T11:28:13+00:00"
         },
-        {
-            "name": "dnoegel/php-xdg-base-dir",
-            "version": "v0.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
-                "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
-                "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "XdgBaseDir\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "implementation of xdg base directory specification for php",
-            "support": {
-                "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
-                "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
-            },
-            "time": "2019-12-04T15:06:13+00:00"
-        },
         {
             "name": "doctrine/coding-standard",
             "version": "12.0.0",
@@ -1091,179 +676,17 @@
             "time": "2022-12-30T00:23:10+00:00"
         },
         {
-            "name": "felixfbecker/advanced-json-rpc",
-            "version": "v3.2.1",
+            "name": "hamcrest/hamcrest-php",
+            "version": "v2.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
-                "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447"
+                "url": "https://github.com/hamcrest/hamcrest-php.git",
+                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447",
-                "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447",
-                "shasum": ""
-            },
-            "require": {
-                "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
-                "php": "^7.1 || ^8.0",
-                "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^7.0 || ^8.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "AdvancedJsonRpc\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "ISC"
-            ],
-            "authors": [
-                {
-                    "name": "Felix Becker",
-                    "email": "felix.b@outlook.com"
-                }
-            ],
-            "description": "A more advanced JSONRPC implementation",
-            "support": {
-                "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues",
-                "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1"
-            },
-            "time": "2021-06-11T22:34:44+00:00"
-        },
-        {
-            "name": "felixfbecker/language-server-protocol",
-            "version": "v1.5.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/felixfbecker/php-language-server-protocol.git",
-                "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842",
-                "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "*",
-                "squizlabs/php_codesniffer": "^3.1",
-                "vimeo/psalm": "^4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "LanguageServerProtocol\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "ISC"
-            ],
-            "authors": [
-                {
-                    "name": "Felix Becker",
-                    "email": "felix.b@outlook.com"
-                }
-            ],
-            "description": "PHP classes for the Language Server Protocol",
-            "keywords": [
-                "language",
-                "microsoft",
-                "php",
-                "server"
-            ],
-            "support": {
-                "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
-                "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2"
-            },
-            "time": "2022-03-02T22:36:06+00:00"
-        },
-        {
-            "name": "fidry/cpu-core-counter",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/theofidry/cpu-core-counter.git",
-                "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42",
-                "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2 || ^8.0"
-            },
-            "require-dev": {
-                "fidry/makefile": "^0.2.0",
-                "fidry/php-cs-fixer-config": "^1.1.2",
-                "phpstan/extension-installer": "^1.2.0",
-                "phpstan/phpstan": "^1.9.2",
-                "phpstan/phpstan-deprecation-rules": "^1.0.0",
-                "phpstan/phpstan-phpunit": "^1.2.2",
-                "phpstan/phpstan-strict-rules": "^1.4.4",
-                "phpunit/phpunit": "^8.5.31 || ^9.5.26",
-                "webmozarts/strict-phpunit": "^7.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Fidry\\CpuCoreCounter\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Théo FIDRY",
-                    "email": "theo.fidry@gmail.com"
-                }
-            ],
-            "description": "Tiny utility to get the number of CPU cores.",
-            "keywords": [
-                "CPU",
-                "core"
-            ],
-            "support": {
-                "issues": "https://github.com/theofidry/cpu-core-counter/issues",
-                "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/theofidry",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-02-07T09:43:46+00:00"
-        },
-        {
-            "name": "hamcrest/hamcrest-php",
-            "version": "v2.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/hamcrest/hamcrest-php.git",
-                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
-                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+                "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
                 "shasum": ""
             },
             "require": {
@@ -1496,57 +919,6 @@
             ],
             "time": "2023-03-08T13:26:56+00:00"
         },
-        {
-            "name": "netresearch/jsonmapper",
-            "version": "v4.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/cweiske/jsonmapper.git",
-                "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0",
-                "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0",
-                "shasum": ""
-            },
-            "require": {
-                "ext-json": "*",
-                "ext-pcre": "*",
-                "ext-reflection": "*",
-                "ext-spl": "*",
-                "php": ">=7.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0",
-                "squizlabs/php_codesniffer": "~3.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "JsonMapper": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "OSL-3.0"
-            ],
-            "authors": [
-                {
-                    "name": "Christian Weiske",
-                    "email": "cweiske@cweiske.de",
-                    "homepage": "http://github.com/cweiske/jsonmapper/",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Map nested JSON structures onto PHP classes",
-            "support": {
-                "email": "cweiske@cweiske.de",
-                "issues": "https://github.com/cweiske/jsonmapper/issues",
-                "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1"
-            },
-            "time": "2024-01-31T06:18:54+00:00"
-        },
         {
             "name": "phar-io/manifest",
             "version": "2.0.4",
@@ -1888,58 +1260,6 @@
             ],
             "time": "2024-04-16T07:22:02+00:00"
         },
-        {
-            "name": "phpstan/phpstan-php-parser",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpstan/phpstan-php-parser.git",
-                "reference": "1c7670dd92da864b5d019f22d9f512a6ae18b78e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan-php-parser/zipball/1c7670dd92da864b5d019f22d9f512a6ae18b78e",
-                "reference": "1c7670dd92da864b5d019f22d9f512a6ae18b78e",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1 || ^8.0",
-                "phpstan/phpstan": "^1.3"
-            },
-            "require-dev": {
-                "php-parallel-lint/php-parallel-lint": "^1.2",
-                "phpstan/phpstan-phpunit": "^1.0",
-                "phpstan/phpstan-strict-rules": "^1.0",
-                "phpunit/phpunit": "^9.5"
-            },
-            "type": "phpstan-extension",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1-dev"
-                },
-                "phpstan": {
-                    "includes": [
-                        "extension.neon"
-                    ]
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "PHPStan\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "PHP-Parser extensions for PHPStan",
-            "support": {
-                "issues": "https://github.com/phpstan/phpstan-php-parser/issues",
-                "source": "https://github.com/phpstan/phpstan-php-parser/tree/1.1.0"
-            },
-            "abandoned": true,
-            "time": "2021-12-16T19:43:32+00:00"
-        },
         {
             "name": "phpstan/phpstan-webmozart-assert",
             "version": "1.2.6",
@@ -2414,107 +1734,39 @@
             "time": "2024-04-24T06:32:35+00:00"
         },
         {
-            "name": "psr/container",
-            "version": "2.0.2",
+            "name": "psalm/phar",
+            "version": "5.24.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/container.git",
-                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
+                "url": "https://github.com/psalm/phar.git",
+                "reference": "6ca1cbe47bbda0759b22ffe555594b547ff8351b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
-                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/6ca1cbe47bbda0759b22ffe555594b547ff8351b",
+                "reference": "6ca1cbe47bbda0759b22ffe555594b547ff8351b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
+                "php": "^7.1 || ^8.0"
             },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Container\\": "src/"
-                }
+            "conflict": {
+                "vimeo/psalm": "*"
             },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common Container Interface (PHP FIG PSR-11)",
-            "homepage": "https://github.com/php-fig/container",
-            "keywords": [
-                "PSR-11",
-                "container",
-                "container-interface",
-                "container-interop",
-                "psr"
+            "bin": [
+                "psalm.phar"
             ],
-            "support": {
-                "issues": "https://github.com/php-fig/container/issues",
-                "source": "https://github.com/php-fig/container/tree/2.0.2"
-            },
-            "time": "2021-11-05T16:47:00+00:00"
-        },
-        {
-            "name": "psr/log",
-            "version": "3.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
-                "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.0"
-            },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Log\\": "src"
-                }
-            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
+            "description": "Composer-based Psalm Phar",
             "support": {
-                "source": "https://github.com/php-fig/log/tree/3.0.0"
+                "issues": "https://github.com/psalm/phar/issues",
+                "source": "https://github.com/psalm/phar/tree/5.24.0"
             },
-            "time": "2021-07-14T16:46:02+00:00"
+            "time": "2024-05-01T20:28:41+00:00"
         },
         {
             "name": "rector/rector",
@@ -3557,924 +2809,84 @@
             "time": "2023-10-08T07:28:08+00:00"
         },
         {
-            "name": "spatie/array-to-xml",
-            "version": "3.3.0",
+            "name": "squizlabs/php_codesniffer",
+            "version": "3.9.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/spatie/array-to-xml.git",
-                "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876"
+                "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
+                "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f56b220fe2db1ade4c88098d83413ebdfc3bf876",
-                "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/aac1f6f347a5c5ac6bc98ad395007df00990f480",
+                "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480",
                 "shasum": ""
             },
             "require": {
-                "ext-dom": "*",
-                "php": "^8.0"
+                "ext-simplexml": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": ">=5.4.0"
             },
             "require-dev": {
-                "mockery/mockery": "^1.2",
-                "pestphp/pest": "^1.21",
-                "spatie/pest-plugin-snapshots": "^1.1"
+                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
             },
+            "bin": [
+                "bin/phpcbf",
+                "bin/phpcs"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Spatie\\ArrayToXml\\": "src"
+                    "dev-master": "3.x-dev"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Freek Van der Herten",
-                    "email": "freek@spatie.be",
-                    "homepage": "https://freek.dev",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Convert an array to xml",
-            "homepage": "https://github.com/spatie/array-to-xml",
-            "keywords": [
-                "array",
-                "convert",
-                "xml"
-            ],
-            "support": {
-                "source": "https://github.com/spatie/array-to-xml/tree/3.3.0"
-            },
-            "funding": [
-                {
-                    "url": "https://spatie.be/open-source/support-us",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/spatie",
-                    "type": "github"
-                }
-            ],
-            "time": "2024-05-01T10:20:27+00:00"
-        },
-        {
-            "name": "squizlabs/php_codesniffer",
-            "version": "3.9.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/aac1f6f347a5c5ac6bc98ad395007df00990f480",
-                "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480",
-                "shasum": ""
-            },
-            "require": {
-                "ext-simplexml": "*",
-                "ext-tokenizer": "*",
-                "ext-xmlwriter": "*",
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
-            },
-            "bin": [
-                "bin/phpcbf",
-                "bin/phpcs"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.x-dev"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Greg Sherwood",
-                    "role": "Former lead"
-                },
-                {
-                    "name": "Juliette Reinders Folmer",
-                    "role": "Current lead"
-                },
-                {
-                    "name": "Contributors",
-                    "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
-                }
-            ],
-            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
-            "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
-            "keywords": [
-                "phpcs",
-                "standards",
-                "static analysis"
-            ],
-            "support": {
-                "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
-                "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
-                "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
-                "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/PHPCSStandards",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/jrfnl",
-                    "type": "github"
-                },
-                {
-                    "url": "https://opencollective.com/php_codesniffer",
-                    "type": "open_collective"
-                }
-            ],
-            "time": "2024-04-23T20:25:34+00:00"
-        },
-        {
-            "name": "symfony/console",
-            "version": "v6.4.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/a170e64ae10d00ba89e2acbb590dc2e54da8ad8f",
-                "reference": "a170e64ae10d00ba89e2acbb590dc2e54da8ad8f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.1",
-                "symfony/deprecation-contracts": "^2.5|^3",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/service-contracts": "^2.5|^3",
-                "symfony/string": "^5.4|^6.0|^7.0"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<5.4",
-                "symfony/dotenv": "<5.4",
-                "symfony/event-dispatcher": "<5.4",
-                "symfony/lock": "<5.4",
-                "symfony/process": "<5.4"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0|2.0|3.0"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2|^3",
-                "symfony/config": "^5.4|^6.0|^7.0",
-                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
-                "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
-                "symfony/http-foundation": "^6.4|^7.0",
-                "symfony/http-kernel": "^6.4|^7.0",
-                "symfony/lock": "^5.4|^6.0|^7.0",
-                "symfony/messenger": "^5.4|^6.0|^7.0",
-                "symfony/process": "^5.4|^6.0|^7.0",
-                "symfony/stopwatch": "^5.4|^6.0|^7.0",
-                "symfony/var-dumper": "^5.4|^6.0|^7.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Eases the creation of beautiful and testable command line interfaces",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "cli",
-                "command-line",
-                "console",
-                "terminal"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/console/tree/v6.4.7"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-04-18T09:22:46+00:00"
-        },
-        {
-            "name": "symfony/deprecation-contracts",
-            "version": "v3.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/deprecation-contracts.git",
-                "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
-                "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.4-dev"
-                },
-                "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "function.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "A generic function and convention to trigger deprecation notices",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2023-05-23T14:45:45+00:00"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v6.4.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "78dde75f8f6dbbca4ec436a4b0087f7af02076d4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/78dde75f8f6dbbca4ec436a4b0087f7af02076d4",
-                "reference": "78dde75f8f6dbbca4ec436a4b0087f7af02076d4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.1",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.8",
-                "symfony/process": "^5.4|^6.4"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides basic utilities for the filesystem",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/filesystem/tree/v6.4.7"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-04-18T09:22:46+00:00"
-        },
-        {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.29.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
-                "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "provide": {
-                "ext-ctype": "*"
-            },
-            "suggest": {
-                "ext-ctype": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for ctype functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "ctype",
-                "polyfill",
-                "portable"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-01-29T20:11:03+00:00"
-        },
-        {
-            "name": "symfony/polyfill-intl-grapheme",
-            "version": "v1.29.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
-                "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f",
-                "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "suggest": {
-                "ext-intl": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's grapheme_* functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "grapheme",
-                "intl",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-01-29T20:11:03+00:00"
-        },
-        {
-            "name": "symfony/polyfill-intl-normalizer",
-            "version": "v1.29.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
-                "reference": "bc45c394692b948b4d383a08d7753968bed9a83d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d",
-                "reference": "bc45c394692b948b4d383a08d7753968bed9a83d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "suggest": {
-                "ext-intl": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's Normalizer class and related functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "intl",
-                "normalizer",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-01-29T20:11:03+00:00"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.29.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
-                "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "provide": {
-                "ext-mbstring": "*"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-01-29T20:11:03+00:00"
-        },
-        {
-            "name": "symfony/process",
-            "version": "v6.4.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "cdb1c81c145fd5aa9b0038bab694035020943381"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/cdb1c81c145fd5aa9b0038bab694035020943381",
-                "reference": "cdb1c81c145fd5aa9b0038bab694035020943381",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.1"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Executes commands in sub-processes",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/process/tree/v6.4.7"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-04-18T09:22:46+00:00"
-        },
-        {
-            "name": "symfony/service-contracts",
-            "version": "v3.4.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "11bbf19a0fb7b36345861e85c5768844c552906e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e",
-                "reference": "11bbf19a0fb7b36345861e85c5768844c552906e",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.1",
-                "psr/container": "^1.1|^2.0"
-            },
-            "conflict": {
-                "ext-psr": "<1.1|>=2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.4-dev"
-                },
-                "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\Service\\": ""
+                    "name": "Greg Sherwood",
+                    "role": "Former lead"
                 },
-                "exclude-from-classmap": [
-                    "/Test/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
+                    "name": "Juliette Reinders Folmer",
+                    "role": "Current lead"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Contributors",
+                    "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
                 }
             ],
-            "description": "Generic abstractions related to writing services",
-            "homepage": "https://symfony.com",
+            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+            "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
             "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
+                "phpcs",
+                "standards",
+                "static analysis"
             ],
             "support": {
-                "source": "https://github.com/symfony/service-contracts/tree/v3.4.2"
+                "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
+                "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
+                "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+                "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
             },
             "funding": [
                 {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
+                    "url": "https://github.com/PHPCSStandards",
                     "type": "github"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2023-12-19T21:51:00+00:00"
-        },
-        {
-            "name": "symfony/string",
-            "version": "v6.4.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/string.git",
-                "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/ffeb9591c61f65a68d47f77d12b83fa530227a69",
-                "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.1",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-intl-grapheme": "~1.0",
-                "symfony/polyfill-intl-normalizer": "~1.0",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "conflict": {
-                "symfony/translation-contracts": "<2.5"
-            },
-            "require-dev": {
-                "symfony/error-handler": "^5.4|^6.0|^7.0",
-                "symfony/http-client": "^5.4|^6.0|^7.0",
-                "symfony/intl": "^6.2|^7.0",
-                "symfony/translation-contracts": "^2.5|^3.0",
-                "symfony/var-exporter": "^5.4|^6.0|^7.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "Resources/functions.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\String\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "grapheme",
-                "i18n",
-                "string",
-                "unicode",
-                "utf-8",
-                "utf8"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/string/tree/v6.4.7"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
+                    "url": "https://github.com/jrfnl",
                     "type": "github"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
+                    "url": "https://opencollective.com/php_codesniffer",
+                    "type": "open_collective"
                 }
             ],
-            "time": "2024-04-18T09:22:46+00:00"
+            "time": "2024-04-23T20:25:34+00:00"
         },
         {
             "name": "theseer/tokenizer",
@@ -4525,116 +2937,6 @@
                 }
             ],
             "time": "2024-03-03T12:36:25+00:00"
-        },
-        {
-            "name": "vimeo/psalm",
-            "version": "5.24.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/vimeo/psalm.git",
-                "reference": "462c80e31c34e58cc4f750c656be3927e80e550e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/vimeo/psalm/zipball/462c80e31c34e58cc4f750c656be3927e80e550e",
-                "reference": "462c80e31c34e58cc4f750c656be3927e80e550e",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2.4.2",
-                "amphp/byte-stream": "^1.5",
-                "composer-runtime-api": "^2",
-                "composer/semver": "^1.4 || ^2.0 || ^3.0",
-                "composer/xdebug-handler": "^2.0 || ^3.0",
-                "dnoegel/php-xdg-base-dir": "^0.1.1",
-                "ext-ctype": "*",
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-libxml": "*",
-                "ext-mbstring": "*",
-                "ext-simplexml": "*",
-                "ext-tokenizer": "*",
-                "felixfbecker/advanced-json-rpc": "^3.1",
-                "felixfbecker/language-server-protocol": "^1.5.2",
-                "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0",
-                "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
-                "nikic/php-parser": "^4.16",
-                "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
-                "sebastian/diff": "^4.0 || ^5.0 || ^6.0",
-                "spatie/array-to-xml": "^2.17.0 || ^3.0",
-                "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0",
-                "symfony/filesystem": "^5.4 || ^6.0 || ^7.0"
-            },
-            "conflict": {
-                "nikic/php-parser": "4.17.0"
-            },
-            "provide": {
-                "psalm/psalm": "self.version"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^2.0",
-                "bamarni/composer-bin-plugin": "^1.4",
-                "brianium/paratest": "^6.9",
-                "ext-curl": "*",
-                "mockery/mockery": "^1.5",
-                "nunomaduro/mock-final-classes": "^1.1",
-                "php-parallel-lint/php-parallel-lint": "^1.2",
-                "phpstan/phpdoc-parser": "^1.6",
-                "phpunit/phpunit": "^9.6",
-                "psalm/plugin-mockery": "^1.1",
-                "psalm/plugin-phpunit": "^0.18",
-                "slevomat/coding-standard": "^8.4",
-                "squizlabs/php_codesniffer": "^3.6",
-                "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0"
-            },
-            "suggest": {
-                "ext-curl": "In order to send data to shepherd",
-                "ext-igbinary": "^2.0.5 is required, used to serialize caching data"
-            },
-            "bin": [
-                "psalm",
-                "psalm-language-server",
-                "psalm-plugin",
-                "psalm-refactor",
-                "psalter"
-            ],
-            "type": "project",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.x-dev",
-                    "dev-4.x": "4.x-dev",
-                    "dev-3.x": "3.x-dev",
-                    "dev-2.x": "2.x-dev",
-                    "dev-1.x": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psalm\\": "src/Psalm/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Matthew Brown"
-                }
-            ],
-            "description": "A static analysis tool for finding errors in PHP applications",
-            "keywords": [
-                "code",
-                "inspection",
-                "php",
-                "static analysis"
-            ],
-            "support": {
-                "docs": "https://psalm.dev/docs",
-                "issues": "https://github.com/vimeo/psalm/issues",
-                "source": "https://github.com/vimeo/psalm"
-            },
-            "time": "2024-05-01T19:32:08+00:00"
         }
     ],
     "aliases": [],

From 03c0dbffa7cb95d22ac3bada6521000728f3e630 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Tue, 7 May 2024 16:45:54 +0200
Subject: [PATCH 011/129] Fix issue with phpparser 5

---
 .../Reflection/NodeVisitor/ElementNameResolver.php  |  8 ++------
 src/phpDocumentor/Reflection/Php/Factory/Class_.php |  2 +-
 .../Reflection/Php/Factory/PropertyIterator.php     |  2 +-
 src/phpDocumentor/Reflection/Php/NodesFactory.php   | 13 ++-----------
 .../NodeVisitor/ElementNameResolverTest.php         |  3 ++-
 .../Reflection/Php/Factory/Class_Test.php           |  5 +++--
 .../Reflection/Php/Factory/EnumCaseTest.php         |  1 +
 .../Reflection/Php/Factory/Enum_Test.php            |  1 +
 .../Reflection/Php/Factory/Function_Test.php        |  6 ++++++
 .../Reflection/Php/Factory/MethodTest.php           |  5 ++++-
 .../Reflection/Php/Factory/PropertyIteratorTest.php |  6 ++++--
 .../Reflection/Php/Factory/TypeTest.php             |  2 +-
 .../Reflection/Php/NodesFactoryTest.php             | 11 +----------
 13 files changed, 29 insertions(+), 36 deletions(-)

diff --git a/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php b/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php
index 35414437..9da5b4aa 100644
--- a/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php
+++ b/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php
@@ -68,6 +68,7 @@ public function leaveNode(Node $node)
             case ClassMethod::class:
             case Trait_::class:
             case PropertyProperty::class:
+            case Node\PropertyItem::class:
             case ClassConst::class:
             case Const_::class:
             case Interface_::class:
@@ -84,12 +85,6 @@ public function leaveNode(Node $node)
 
     /**
      * Adds fqsen property to a node when applicable.
-     *
-     * @todo this method is decorating the Node with an $fqsen property...
-     *       since we can't declare it in PhpParser/NodeAbstract,
-     *       we should add a decorator class wrapper in Reflection...
-     *       that should clear up the PHPSTAN errors about
-     *       "access to an undefined property ::$fqsen".
      */
     public function enterNode(Node $node): int|null
     {
@@ -132,6 +127,7 @@ public function enterNode(Node $node): int|null
                 $this->parts->push($node->name);
                 $this->setFqsen($node);
                 break;
+            case Node\PropertyItem::class:
             case PropertyProperty::class:
                 $this->parts->push('::$' . $node->name);
                 $this->setFqsen($node);
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Class_.php b/src/phpDocumentor/Reflection/Php/Factory/Class_.php
index 531d7590..a18c4741 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Class_.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Class_.php
@@ -48,7 +48,7 @@ protected function doCreate(ContextStack $context, object $object, StrategyConta
         $classElement = new ClassElement(
             $object->getAttribute('fqsen'),
             $docBlock,
-            $object->extends ? new Fqsen('\\' . $object->extends) : null,
+            isset($object->extends) ? new Fqsen('\\' . $object->extends) : null,
             $object->isAbstract(),
             $object->isFinal(),
             new Location($object->getLine()),
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
index 00b58da6..6d04da8b 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
@@ -130,7 +130,7 @@ public function getName(): string
     /**
      * returns the default value of the current property.
      */
-    public function getDefault(): string|Expr|null
+    public function getDefault(): null|Expr
     {
         return $this->property->props[$this->index]->default;
     }
diff --git a/src/phpDocumentor/Reflection/Php/NodesFactory.php b/src/phpDocumentor/Reflection/Php/NodesFactory.php
index 887fe204..44a0c05b 100644
--- a/src/phpDocumentor/Reflection/Php/NodesFactory.php
+++ b/src/phpDocumentor/Reflection/Php/NodesFactory.php
@@ -46,18 +46,9 @@ final public function __construct(private readonly Parser $parser, private reado
      *
      * @return static
      */
-    public static function createInstance(int $kind = ParserFactory::PREFER_PHP7): self
+    public static function createInstance(int $kind = 1): self
     {
-        $lexer = new Emulative([
-            'usedAttributes' => [
-                'comments',
-                'startLine',
-                'endLine',
-                'startFilePos',
-                'endFilePos',
-            ],
-        ]);
-        $parser = (new ParserFactory())->create($kind, $lexer);
+        $parser = (new ParserFactory())->createForNewestSupportedVersion();
         $traverser = new NodeTraverser();
         $traverser->addVisitor(new NameResolver());
         $traverser->addVisitor(new ElementNameResolver());
diff --git a/tests/unit/phpDocumentor/Reflection/NodeVisitor/ElementNameResolverTest.php b/tests/unit/phpDocumentor/Reflection/NodeVisitor/ElementNameResolverTest.php
index ac06dbab..18ceccda 100644
--- a/tests/unit/phpDocumentor/Reflection/NodeVisitor/ElementNameResolverTest.php
+++ b/tests/unit/phpDocumentor/Reflection/NodeVisitor/ElementNameResolverTest.php
@@ -25,6 +25,7 @@
 use PhpParser\Node\Stmt\Function_;
 use PhpParser\Node\Stmt\Namespace_;
 use PhpParser\Node\Stmt\PropertyProperty;
+use PhpParser\Node\Stmt\Return_;
 use PhpParser\NodeTraverser;
 use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\TestCase;
@@ -98,7 +99,7 @@ public function testAnonymousClassDoesNotPopParts(): void
 
         $new = new New_($anonymousClass);
 
-        $namespace = new Namespace_(new Name('ANamespace'), $new);
+        $namespace = new Namespace_(new Name('ANamespace'), [new Return_($new)]);
 
         $this->fixture->enterNode($namespace);
         $this->fixture->enterNode($new);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php
index 96229b5e..4121844d 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php
@@ -23,6 +23,7 @@
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategy;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use PhpParser\Comment\Doc;
+use PhpParser\Node\Identifier;
 use PhpParser\Node\Name;
 use PhpParser\Node\Stmt\Class_ as ClassNode;
 use PhpParser\Node\Stmt\ClassMethod;
@@ -87,7 +88,7 @@ public function testClassWithParent(): void
         $containerMock = m::mock(StrategyContainer::class);
         $classMock     = $this->buildClassMock();
         $classMock->shouldReceive('getDocComment')->andReturnNull();
-        $classMock->extends = 'Space\MyParent';
+        $classMock->extends = new Name('Space\MyParent');
 
         $class = $this->performCreate($classMock, $containerMock);
 
@@ -101,7 +102,7 @@ public function testClassImplementingInterface(): void
         $containerMock = m::mock(StrategyContainer::class);
         $classMock     = $this->buildClassMock();
         $classMock->shouldReceive('getDocComment')->andReturnNull();
-        $classMock->extends    = 'Space\MyParent';
+        $classMock->extends    = new Name('Space\MyParent');
         $classMock->implements = [
             new Name('MyInterface'),
         ];
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/EnumCaseTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/EnumCaseTest.php
index af0107fe..0193d8b0 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/EnumCaseTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/EnumCaseTest.php
@@ -86,6 +86,7 @@ private function performCreate(EnumCaseNode $enumCase): EnumElement
     private function buildEnumCaseMock(): ObjectProphecy
     {
         $enumMock = $this->prophesize(EnumCaseNode::class);
+        $enumMock->expr = null;
         $enumMock->getAttribute('fqsen')->willReturn(new Fqsen('\Space\MyEnum::VALUE'));
         $enumMock->getLine()->willReturn(1);
         $enumMock->getEndLine()->willReturn(2);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Enum_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Enum_Test.php
index ccf6e4f0..6a66d257 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Enum_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Enum_Test.php
@@ -161,6 +161,7 @@ public function testCreateWithDocBlock(): void
     private function buildEnumMock(): m\MockInterface|ClassNode
     {
         $enumMock = m::mock(EnumNode::class);
+        $enumMock->scalarType = null;
         $enumMock->shouldReceive('getAttribute')->andReturn(new Fqsen('\Space\MyEnum'));
         $enumMock->implements = [];
         $enumMock->stmts = [];
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Function_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Function_Test.php
index 0820117f..cd41c748 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Function_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Function_Test.php
@@ -62,6 +62,8 @@ public function testMatches(): void
     public function testCreateWithoutParameters(): void
     {
         $functionMock = $this->prophesize(\PhpParser\Node\Stmt\Function_::class);
+        $functionMock->byRef = false;
+        $functionMock->stmts = [];
         $functionMock->getAttribute('fqsen')->willReturn(new Fqsen('\SomeSpace::function()'));
         $functionMock->params = [];
         $functionMock->getDocComment()->willReturn(null);
@@ -83,6 +85,8 @@ public function testCreateWithDocBlock(): void
     {
         $doc = new Doc('Text');
         $functionMock = $this->prophesize(\PhpParser\Node\Stmt\Function_::class);
+        $functionMock->byRef = false;
+        $functionMock->stmts = [];
         $functionMock->getAttribute('fqsen')->willReturn(new Fqsen('\SomeSpace::function()'));
         $functionMock->params = [];
         $functionMock->getDocComment()->willReturn($doc);
@@ -107,6 +111,8 @@ public function testIteratesStatements(): void
     {
         $doc = new Doc('Text');
         $functionMock = $this->prophesize(\PhpParser\Node\Stmt\Function_::class);
+        $functionMock->byRef = false;
+        $functionMock->stmts = [];
         $functionMock->getAttribute('fqsen')->willReturn(new Fqsen('\SomeSpace::function()'));
         $functionMock->params = [];
         $functionMock->getDocComment()->willReturn(null);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/MethodTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/MethodTest.php
index 2de893bb..2e6ab447 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/MethodTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/MethodTest.php
@@ -24,6 +24,7 @@
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use PhpParser\Comment\Doc;
 use PhpParser\Node\Expr\FuncCall;
+use PhpParser\Node\Identifier;
 use PhpParser\Node\Name;
 use PhpParser\Node\Stmt\ClassMethod;
 use PhpParser\Node\Stmt\Expression;
@@ -128,7 +129,9 @@ public function testCreateWithDocBlock(): void
     private function buildClassMethodMock(): MockInterface
     {
         $methodMock = m::mock(ClassMethod::class);
-        $methodMock->name = 'function';
+        $methodMock->name = new Identifier('function');
+        $methodMock->byRef = false;
+        $methodMock->stmts = [];
         $methodMock->shouldReceive('getAttribute')->andReturn(new Fqsen('\SomeSpace\Class::function()'));
         $methodMock->params = [];
 
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php
index 54eaa929..621450be 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php
@@ -16,6 +16,8 @@
 use Mockery as m;
 use Mockery\Adapter\Phpunit\MockeryTestCase;
 use PhpParser\Comment\Doc;
+use PhpParser\Node\Identifier;
+use PhpParser\Node\Scalar\String_;
 use PhpParser\Node\Stmt\Property as PropertyNode;
 use PhpParser\Node\Stmt\PropertyProperty;
 use PHPUnit\Framework\Attributes\CoversClass;
@@ -71,12 +73,12 @@ public function testProxyMethods(): void
     public function testGetDefault(): void
     {
         $prop = m::mock(PropertyProperty::class);
-        $prop->default = 'myDefault';
+        $prop->default = new String_('myDefault');
         $property = new PropertyNode(1, [$prop]);
 
         $fixture = new PropertyIterator($property);
 
-        $this->assertEquals('myDefault', $fixture->getDefault());
+        $this->assertEquals(new String_('myDefault'), $fixture->getDefault());
     }
 
     public function testGetDocCommentPropFirst(): void
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/TypeTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/TypeTest.php
index 2aa20a91..be914b6d 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/TypeTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/TypeTest.php
@@ -53,7 +53,7 @@ public function testReturnsReflectedType(): void
     public function testReturnsNullableTypeWhenPassedAPhpParserNullable(): void
     {
         $factory = new Type();
-        $given = new NullableType('integer');
+        $given = new NullableType(new Identifier('integer'));
         $expected = new Nullable(new Integer());
 
         $result = $factory->fromPhpParser($given);
diff --git a/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php b/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
index e13d69b7..e9de5d03 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
@@ -60,16 +60,7 @@ public function testThatCodeGetsConvertedIntoNodes(): void
 
     private function givenTheExpectedDefaultNodesFactory(): NodesFactory
     {
-        $lexer = new Emulative([
-            'usedAttributes' => [
-                'comments',
-                'startLine',
-                'endLine',
-                'startFilePos',
-                'endFilePos',
-            ],
-        ]);
-        $parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7, $lexer);
+        $parser = (new ParserFactory())->createForNewestSupportedVersion();
         $traverser = new NodeTraverser();
         $traverser->addVisitor(new NameResolver());
         $traverser->addVisitor(new ElementNameResolver());

From f211c11a9208f053dfc3655515b47050c38d57ee Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Tue, 7 May 2024 16:54:31 +0200
Subject: [PATCH 012/129] Bump phpparser top 4.18 min

---
 composer-require-checker.json                 |  3 ++-
 composer.json                                 |  2 +-
 composer.lock                                 | 22 +++++++++--------
 phpstan.neon                                  |  4 ----
 psalm.xml                                     |  1 +
 .../Reflection/Php/Factory/Function_.php      |  6 -----
 .../Reflection/Php/Factory/Property.php       |  6 ++---
 .../Php/Factory/PropertyIterator.php          |  2 +-
 .../Reflection/Php/NodesFactory.php           |  1 -
 .../Types/NamespaceNodeToContext.php          | 24 ++++++++++++-------
 .../Reflection/Php/Factory/Class_Test.php     |  1 -
 .../Php/Factory/PropertyIteratorTest.php      |  1 -
 .../Reflection/Php/NodesFactoryTest.php       |  1 -
 13 files changed, 35 insertions(+), 39 deletions(-)

diff --git a/composer-require-checker.json b/composer-require-checker.json
index e2718623..a4883184 100644
--- a/composer-require-checker.json
+++ b/composer-require-checker.json
@@ -2,7 +2,8 @@
   "symbol-whitelist" : [
     "null", "true", "false",
     "static", "self", "parent",
-    "array", "string", "int", "float", "bool", "iterable", "callable", "void", "object"
+    "array", "string", "int", "float", "bool", "iterable", "callable", "void", "object",
+    "PhpParser\\Node\\Stmt\\PropertyProperty"
   ],
   "php-core-extensions" : [
     "Core",
diff --git a/composer.json b/composer.json
index e7cdb4d2..dec67b54 100644
--- a/composer.json
+++ b/composer.json
@@ -20,7 +20,7 @@
     },
     "require": {
         "php": "8.1.*|8.2.*|8.3.*",
-        "nikic/php-parser": "~4.14 || ^5.0",
+        "nikic/php-parser": "~4.18 || ^5.0",
         "phpdocumentor/reflection-common": "^2.1",
         "phpdocumentor/reflection-docblock": "^5",
         "phpdocumentor/type-resolver": "^1.2",
diff --git a/composer.lock b/composer.lock
index 8e258ff9..fb9b289f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "632acca5e52598434ef0221de06c0ed1",
+    "content-hash": "279b483d5011c8c542bf1fbea5df1543",
     "packages": [
         {
             "name": "doctrine/deprecations",
@@ -55,25 +55,27 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v4.19.1",
+            "version": "v5.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b"
+                "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b",
-                "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
+                "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
                 "shasum": ""
             },
             "require": {
+                "ext-ctype": "*",
+                "ext-json": "*",
                 "ext-tokenizer": "*",
-                "php": ">=7.1"
+                "php": ">=7.4"
             },
             "require-dev": {
                 "ircmaxell/php-yacc": "^0.0.7",
-                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
             },
             "bin": [
                 "bin/php-parse"
@@ -81,7 +83,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.9-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -105,9 +107,9 @@
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
             },
-            "time": "2024-03-17T08:10:35+00:00"
+            "time": "2024-03-05T20:51:40+00:00"
         },
         {
             "name": "phpdocumentor/reflection-common",
diff --git a/phpstan.neon b/phpstan.neon
index 3f6932cd..687d5bd5 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -16,10 +16,6 @@ parameters:
         - '#Parameter \#1 \$fqsen of class phpDocumentor\\Reflection\\Php\\(.*) constructor expects phpDocumentor\\Reflection\\Fqsen, mixed given\.#'
         - '#Parameter \#1 \$fqsen of method phpDocumentor\\Reflection\\Php\\File::addNamespace\(\) expects phpDocumentor\\Reflection\\Fqsen, mixed given\.#'
         #
-        # there is one test case that prevents changing PropertyIterator::getDefault() to just return Expr (this is set in PhpParser)
-        # src/phpDocumentor/Reflection/Php/Factory/Property.php
-        - '#Parameter \#1 \$node of method PhpParser\\PrettyPrinterAbstract::prettyPrintExpr\(\) expects PhpParser\\Node\\Expr, PhpParser\\Node\\Expr\|string given\.#'
-        #
         # Type hint in php-parser is incorrect.
         - '#Cannot cast PhpParser\\Node\\Expr\|string to string.#'
 
diff --git a/psalm.xml b/psalm.xml
index 8b73b240..bdac9dad 100644
--- a/psalm.xml
+++ b/psalm.xml
@@ -16,5 +16,6 @@
     <issueHandlers>
         <LessSpecificReturnType errorLevel="info" />
         <MoreSpecificImplementedParamType errorLevel="info" />
+        <DeprecatedConstant errorLevel="info" />
     </issueHandlers>
 </psalm>
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Function_.php b/src/phpDocumentor/Reflection/Php/Factory/Function_.php
index 191f1e05..8fc04ddf 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Function_.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Function_.php
@@ -21,8 +21,6 @@
 use PhpParser\Node\Stmt\Function_ as FunctionNode;
 use Webmozart\Assert\Assert;
 
-use function is_array;
-
 /**
  * Strategy to convert Function_ to FunctionDescriptor
  *
@@ -61,10 +59,6 @@ protected function doCreate(
 
         $file->addFunction($function);
 
-        if (!is_array($object->stmts)) {
-            return $function;
-        }
-
         $thisContext = $context->push($function);
         foreach ($object->stmts as $stmt) {
             $strategy = $strategies->findMatching($thisContext, $stmt);
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Property.php b/src/phpDocumentor/Reflection/Php/Factory/Property.php
index 1682f5f9..60b1be68 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Property.php
@@ -70,9 +70,9 @@ protected function doCreate(
 
         $iterator = new PropertyIterator($object);
         foreach ($iterator as $stmt) {
-            $default = null;
-            if ($iterator->getDefault() !== null) {
-                $default = $this->valueConverter->prettyPrintExpr($iterator->getDefault());
+            $default = $iterator->getDefault();
+            if ($default !== null) {
+                $default = $this->valueConverter->prettyPrintExpr($default);
             }
 
             $propertyContainer->addProperty(
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
index 6d04da8b..45b86d82 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
@@ -130,7 +130,7 @@ public function getName(): string
     /**
      * returns the default value of the current property.
      */
-    public function getDefault(): null|Expr
+    public function getDefault(): Expr|null
     {
         return $this->property->props[$this->index]->default;
     }
diff --git a/src/phpDocumentor/Reflection/Php/NodesFactory.php b/src/phpDocumentor/Reflection/Php/NodesFactory.php
index 44a0c05b..cb877df6 100644
--- a/src/phpDocumentor/Reflection/Php/NodesFactory.php
+++ b/src/phpDocumentor/Reflection/Php/NodesFactory.php
@@ -14,7 +14,6 @@
 namespace phpDocumentor\Reflection\Php;
 
 use phpDocumentor\Reflection\NodeVisitor\ElementNameResolver;
-use PhpParser\Lexer\Emulative;
 use PhpParser\Node;
 use PhpParser\NodeTraverser;
 use PhpParser\NodeTraverserInterface;
diff --git a/src/phpDocumentor/Reflection/Types/NamespaceNodeToContext.php b/src/phpDocumentor/Reflection/Types/NamespaceNodeToContext.php
index f4c78f70..012e1fad 100644
--- a/src/phpDocumentor/Reflection/Types/NamespaceNodeToContext.php
+++ b/src/phpDocumentor/Reflection/Types/NamespaceNodeToContext.php
@@ -33,15 +33,21 @@ public function __invoke(Namespace_|null $namespace): Context
     private function aliasesToFullyQualifiedNames(Namespace_ $namespace): array
     {
         // flatten(flatten(map(stuff)))
-        return array_merge([], ...array_merge([], ...array_map(static fn ($use): array => array_map(static function (UseUse $useUse) use ($use): array {
-            if ($use instanceof GroupUse) {
-                return [
-                    (string) $useUse->getAlias() => $use->prefix->toString() . '\\' . $useUse->name->toString(),
-                ];
-            }
-
-            return [(string) $useUse->getAlias() => $useUse->name->toString()];
-        }, $use->uses), $this->classAlikeUses($namespace))));
+        return array_merge([], ...array_merge([], ...array_map(
+            static fn ($use): array => array_map(
+                static function (Node\UseItem|UseUse $useUse) use ($use): array {
+                    if ($use instanceof GroupUse) {
+                    return [
+                        (string) $useUse->getAlias() => $use->prefix->toString() . '\\' . $useUse->name->toString(),
+                    ];
+                    }
+
+                return [(string) $useUse->getAlias() => $useUse->name->toString()];
+                },
+                $use->uses,
+            ),
+            $this->classAlikeUses($namespace),
+        )));
     }
 
     /** @return Use_[]|GroupUse[] */
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php
index 4121844d..82da37ef 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/Class_Test.php
@@ -23,7 +23,6 @@
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategy;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use PhpParser\Comment\Doc;
-use PhpParser\Node\Identifier;
 use PhpParser\Node\Name;
 use PhpParser\Node\Stmt\Class_ as ClassNode;
 use PhpParser\Node\Stmt\ClassMethod;
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php
index 621450be..a97feaa8 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyIteratorTest.php
@@ -16,7 +16,6 @@
 use Mockery as m;
 use Mockery\Adapter\Phpunit\MockeryTestCase;
 use PhpParser\Comment\Doc;
-use PhpParser\Node\Identifier;
 use PhpParser\Node\Scalar\String_;
 use PhpParser\Node\Stmt\Property as PropertyNode;
 use PhpParser\Node\Stmt\PropertyProperty;
diff --git a/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php b/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
index e9de5d03..1854ff0d 100644
--- a/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Php/NodesFactoryTest.php
@@ -14,7 +14,6 @@
 namespace phpDocumentor\Reflection\Php;
 
 use phpDocumentor\Reflection\NodeVisitor\ElementNameResolver;
-use PhpParser\Lexer\Emulative;
 use PhpParser\NodeTraverser;
 use PhpParser\NodeTraverserInterface;
 use PhpParser\NodeVisitor\NameResolver;

From 8e19021131cfb80327f8151ca63ca18a2b247809 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 10 May 2024 08:20:25 +0000
Subject: [PATCH 013/129] Build(deps-dev): bump rector/rector from 1.0.4 to
 1.0.5

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.0.4 to 1.0.5.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.0.4...1.0.5)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index fb9b289f..b5b6aecf 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1772,16 +1772,16 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.0.4",
+            "version": "1.0.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "6e04d0eb087aef707fa0c5686d33d6ff61f4a555"
+                "reference": "73eb63e4f9011dba6b7c66c3262543014e352f34"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/6e04d0eb087aef707fa0c5686d33d6ff61f4a555",
-                "reference": "6e04d0eb087aef707fa0c5686d33d6ff61f4a555",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/73eb63e4f9011dba6b7c66c3262543014e352f34",
+                "reference": "73eb63e4f9011dba6b7c66c3262543014e352f34",
                 "shasum": ""
             },
             "require": {
@@ -1819,7 +1819,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.0.4"
+                "source": "https://github.com/rectorphp/rector/tree/1.0.5"
             },
             "funding": [
                 {
@@ -1827,7 +1827,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-04-05T09:01:07+00:00"
+            "time": "2024-05-10T05:31:15+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 57cf7df2929801285ddf5a5cdbb897de1a17a2f5 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 13 May 2024 08:24:36 +0000
Subject: [PATCH 014/129] Build(deps): bump phpDocumentor/.github from 0.6 to
 0.7

Bumps [phpDocumentor/.github](https://github.com/phpdocumentor/.github) from 0.6 to 0.7.
- [Release notes](https://github.com/phpdocumentor/.github/releases)
- [Commits](https://github.com/phpdocumentor/.github/compare/v0.6...v0.7)

---
updated-dependencies:
- dependency-name: phpDocumentor/.github
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 .github/workflows/integrate.yaml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml
index 4a9d6230..0cf5dde9 100644
--- a/.github/workflows/integrate.yaml
+++ b/.github/workflows/integrate.yaml
@@ -13,7 +13,7 @@ on: # yamllint disable-line rule:truthy
 jobs:
   code-coverage:
     name: "Code Coverage"
-    uses: "phpDocumentor/.github/.github/workflows/code-coverage.yml@v0.6"
+    uses: "phpDocumentor/.github/.github/workflows/code-coverage.yml@v0.7"
     with:
       php-version: "8.2"
 
@@ -41,13 +41,13 @@ jobs:
 
   dependency-analysis:
     name: "Dependency analysis"
-    uses: "phpDocumentor/.github/.github/workflows/dependency-analysis.yml@v0.6"
+    uses: "phpDocumentor/.github/.github/workflows/dependency-analysis.yml@v0.7"
     with:
       php-version: "8.2"
 
   lint-root:
     name: "Lint root"
-    uses: "phpDocumentor/.github/.github/workflows/lint.yml@v0.6"
+    uses: "phpDocumentor/.github/.github/workflows/lint.yml@v0.7"
     with:
       php-version: "8.2"
       composer-options: "--no-check-publish --ansi"

From 05f2c171bf7bf37d93abd4c4f1060c5783e274c9 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 13 May 2024 08:24:52 +0000
Subject: [PATCH 015/129] Build(deps-dev): bump phpstan/phpstan from 1.10.67 to
 1.11.0

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.10.67 to 1.11.0.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.11.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.10.67...1.11.0)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index b5b6aecf..e16c8270 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1206,16 +1206,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.10.67",
+            "version": "1.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493"
+                "reference": "666cb1703742cea9cc80fee631f0940e1592fa6e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493",
-                "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/666cb1703742cea9cc80fee631f0940e1592fa6e",
+                "reference": "666cb1703742cea9cc80fee631f0940e1592fa6e",
                 "shasum": ""
             },
             "require": {
@@ -1260,7 +1260,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-04-16T07:22:02+00:00"
+            "time": "2024-05-13T06:02:22+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 36ae88d82b9cbeff656a46d8952be2974b3ebb4b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 15 May 2024 08:12:56 +0000
Subject: [PATCH 016/129] Build(deps-dev): bump phpstan/phpstan from 1.11.0 to
 1.11.1

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.0 to 1.11.1.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.11.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.0...1.11.1)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index e16c8270..8f8167d7 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1206,16 +1206,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.0",
+            "version": "1.11.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "666cb1703742cea9cc80fee631f0940e1592fa6e"
+                "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/666cb1703742cea9cc80fee631f0940e1592fa6e",
-                "reference": "666cb1703742cea9cc80fee631f0940e1592fa6e",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e524358f930e41a2b4cca1320e3b04fc26b39e0b",
+                "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b",
                 "shasum": ""
             },
             "require": {
@@ -1260,7 +1260,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-05-13T06:02:22+00:00"
+            "time": "2024-05-15T08:00:59+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From cd36de0d59edae342583a8a53ca89972822f5081 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 16 May 2024 08:22:29 +0000
Subject: [PATCH 017/129] Build(deps-dev): bump mockery/mockery from 1.6.11 to
 1.6.12

Bumps [mockery/mockery](https://github.com/mockery/mockery) from 1.6.11 to 1.6.12.
- [Release notes](https://github.com/mockery/mockery/releases)
- [Changelog](https://github.com/mockery/mockery/blob/1.6.x/CHANGELOG.md)
- [Commits](https://github.com/mockery/mockery/compare/1.6.11...1.6.12)

---
updated-dependencies:
- dependency-name: mockery/mockery
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 8f8167d7..395f7f5c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -781,16 +781,16 @@
         },
         {
             "name": "mockery/mockery",
-            "version": "1.6.11",
+            "version": "1.6.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/mockery/mockery.git",
-                "reference": "81a161d0b135df89951abd52296adf97deb0723d"
+                "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d",
-                "reference": "81a161d0b135df89951abd52296adf97deb0723d",
+                "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+                "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699",
                 "shasum": ""
             },
             "require": {
@@ -860,7 +860,7 @@
                 "security": "https://github.com/mockery/mockery/security/advisories",
                 "source": "https://github.com/mockery/mockery"
             },
-            "time": "2024-03-21T18:34:15+00:00"
+            "time": "2024-05-16T03:13:13+00:00"
         },
         {
             "name": "myclabs/deep-copy",

From 0d4cec8d71cfa23a5ea27ae385d875deaed4d119 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 20 May 2024 08:47:23 +0000
Subject: [PATCH 018/129] Build(deps-dev): bump rector/rector from 1.0.5 to
 1.1.0

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.0.5 to 1.1.0.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.0.5...1.1.0)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index 395f7f5c..9637f469 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1772,21 +1772,21 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.0.5",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "73eb63e4f9011dba6b7c66c3262543014e352f34"
+                "reference": "556509e2dcf527369892b7d411379c4a02f31859"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/73eb63e4f9011dba6b7c66c3262543014e352f34",
-                "reference": "73eb63e4f9011dba6b7c66c3262543014e352f34",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/556509e2dcf527369892b7d411379c4a02f31859",
+                "reference": "556509e2dcf527369892b7d411379c4a02f31859",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2|^8.0",
-                "phpstan/phpstan": "^1.10.57"
+                "phpstan/phpstan": "^1.11"
             },
             "conflict": {
                 "rector/rector-doctrine": "*",
@@ -1819,7 +1819,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.0.5"
+                "source": "https://github.com/rectorphp/rector/tree/1.1.0"
             },
             "funding": [
                 {
@@ -1827,7 +1827,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-05-10T05:31:15+00:00"
+            "time": "2024-05-18T09:40:27+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 0442d51e353b07920c16fe2b075b012750768fb5 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 20 May 2024 08:47:30 +0000
Subject: [PATCH 019/129] Build(deps-dev): bump squizlabs/php_codesniffer from
 3.9.2 to 3.10.0

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.9.2 to 3.10.0.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.9.2...3.10.0)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 395f7f5c..b4973c5e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2812,16 +2812,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.9.2",
+            "version": "3.10.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480"
+                "reference": "57e09801c2fbae2d257b8b75bebb3deeb7e9deb2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/aac1f6f347a5c5ac6bc98ad395007df00990f480",
-                "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/57e09801c2fbae2d257b8b75bebb3deeb7e9deb2",
+                "reference": "57e09801c2fbae2d257b8b75bebb3deeb7e9deb2",
                 "shasum": ""
             },
             "require": {
@@ -2888,7 +2888,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-04-23T20:25:34+00:00"
+            "time": "2024-05-20T08:11:32+00:00"
         },
         {
             "name": "theseer/tokenizer",

From 3cdff230aec846ec9c6981a64aa667ddba52a7db Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 21 May 2024 08:47:14 +0000
Subject: [PATCH 020/129] --- updated-dependencies: - dependency-name:
 phpdocumentor/reflection-docblock   dependency-type: direct:production  
 update-type: version-update:semver-patch ...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/composer.lock b/composer.lock
index 79126dcc..0d3da518 100644
--- a/composer.lock
+++ b/composer.lock
@@ -166,16 +166,16 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "5.4.0",
+            "version": "5.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "298d2febfe79d03fe714eb871d5538da55205b1a"
+                "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a",
-                "reference": "298d2febfe79d03fe714eb871d5538da55205b1a",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c",
+                "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c",
                 "shasum": ""
             },
             "require": {
@@ -224,9 +224,9 @@
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
             "support": {
                 "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0"
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1"
             },
-            "time": "2024-04-09T21:13:58+00:00"
+            "time": "2024-05-21T05:55:05+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
@@ -288,16 +288,16 @@
         },
         {
             "name": "phpstan/phpdoc-parser",
-            "version": "1.28.0",
+            "version": "1.29.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpdoc-parser.git",
-                "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
+                "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
-                "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
+                "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
                 "shasum": ""
             },
             "require": {
@@ -329,9 +329,9 @@
             "description": "PHPDoc parser with support for nullable, intersection and generic types",
             "support": {
                 "issues": "https://github.com/phpstan/phpdoc-parser/issues",
-                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
             },
-            "time": "2024-04-03T18:51:33+00:00"
+            "time": "2024-05-06T12:04:23+00:00"
         },
         {
             "name": "symfony/polyfill-php80",

From 7783383b0652fef72a8616012a869290b3ce1670 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 23 May 2024 08:37:43 +0000
Subject: [PATCH 021/129] Bump squizlabs/php_codesniffer from 3.10.0 to 3.10.1

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.10.0 to 3.10.1.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.10.0...3.10.1)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 0d3da518..50414cee 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2812,16 +2812,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.10.0",
+            "version": "3.10.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "57e09801c2fbae2d257b8b75bebb3deeb7e9deb2"
+                "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/57e09801c2fbae2d257b8b75bebb3deeb7e9deb2",
-                "reference": "57e09801c2fbae2d257b8b75bebb3deeb7e9deb2",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/8f90f7a53ce271935282967f53d0894f8f1ff877",
+                "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877",
                 "shasum": ""
             },
             "require": {
@@ -2888,7 +2888,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-05-20T08:11:32+00:00"
+            "time": "2024-05-22T21:24:41+00:00"
         },
         {
             "name": "theseer/tokenizer",

From 61e2f1fe7683e9647b9ed8d9e53d08699385267d Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Thu, 23 May 2024 21:28:12 +0200
Subject: [PATCH 022/129] Add attribute support to more elements

---
 .../Php/Factory/AbstractFactory.php           |  2 +-
 .../Reflection/Php/Factory/ClassConstant.php  | 25 ++++++++--
 .../Php/Factory/ConstructorPromotion.php      | 17 +++++--
 .../Reflection/Php/Factory/EnumCase.php       | 11 +++--
 .../Reflection/Php/Factory/Property.php       | 46 +++++++++++--------
 .../Php/Factory/Reducer/Reducer.php           |  7 +++
 .../Reflection/Php/ProjectFactory.php         | 12 ++---
 7 files changed, 84 insertions(+), 36 deletions(-)

diff --git a/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php b/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php
index 3e655605..1384e5a7 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php
@@ -31,7 +31,7 @@ abstract class AbstractFactory implements ProjectFactoryStrategy
     /** @param iterable<Reducer> $reducers */
     public function __construct(
         private readonly DocBlockFactoryInterface $docBlockFactory,
-        private readonly iterable $reducers = [],
+        protected readonly iterable $reducers = [],
     ) {
     }
 
diff --git a/src/phpDocumentor/Reflection/Php/Factory/ClassConstant.php b/src/phpDocumentor/Reflection/Php/Factory/ClassConstant.php
index 838b97fe..a3c714a3 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/ClassConstant.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/ClassConstant.php
@@ -18,6 +18,7 @@
 use phpDocumentor\Reflection\Php\Class_;
 use phpDocumentor\Reflection\Php\Constant as ConstantElement;
 use phpDocumentor\Reflection\Php\Enum_;
+use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\Interface_;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use phpDocumentor\Reflection\Php\Trait_;
@@ -34,9 +35,13 @@
  */
 final class ClassConstant extends AbstractFactory
 {
-    public function __construct(DocBlockFactoryInterface $blockFactory, private readonly PrettyPrinter $valueConverter)
-    {
-        parent::__construct($blockFactory);
+    /** @param iterable<Reducer> $reducers */
+    public function __construct(
+        DocBlockFactoryInterface $blockFactory,
+        private readonly PrettyPrinter $valueConverter,
+        iterable $reducers = [],
+    ) {
+        parent::__construct($blockFactory, $reducers);
     }
 
     public function matches(ContextStack $context, object $object): bool
@@ -73,7 +78,7 @@ protected function doCreate(
         $constants = new ClassConstantIterator($object);
 
         foreach ($constants as $const) {
-            $constantContainer->addConstant(new ConstantElement(
+            $constant = new ConstantElement(
                 $const->getFqsen(),
                 $this->createDocBlock($const->getDocComment(), $context->getTypeContext()),
                 $const->getValue() !== null ? $this->valueConverter->prettyPrintExpr($const->getValue()) : null,
@@ -81,7 +86,17 @@ protected function doCreate(
                 new Location($const->getEndLine()),
                 $this->buildVisibility($const),
                 $const->isFinal(),
-            ));
+            );
+
+            foreach ($this->reducers as $reducer) {
+                $constant = $reducer->reduce($context, $const, $strategies, $constant);
+            }
+
+            if ($constant === null) {
+                continue;
+            }
+
+            $constantContainer->addConstant($constant);
         }
 
         return null;
diff --git a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
index db055441..446122f8 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
@@ -9,6 +9,7 @@
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Class_ as ClassElement;
+use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategy;
 use phpDocumentor\Reflection\Php\Property;
 use phpDocumentor\Reflection\Php\StrategyContainer;
@@ -22,12 +23,14 @@
 
 final class ConstructorPromotion extends AbstractFactory
 {
+    /** @param iterable<Reducer> $reducers */
     public function __construct(
         private readonly ProjectFactoryStrategy $methodStrategy,
         DocBlockFactoryInterface $docBlockFactory,
         private readonly PrettyPrinter $valueConverter,
+        iterable $reducers = [],
     ) {
-        parent::__construct($docBlockFactory);
+        parent::__construct($docBlockFactory, $reducers);
     }
 
     public function matches(ContextStack $context, object $object): bool
@@ -51,13 +54,13 @@ protected function doCreate(ContextStack $context, object $object, StrategyConta
                 continue;
             }
 
-            $this->promoteParameterToProperty($context, $param);
+            $this->promoteParameterToProperty($context, $strategies, $param);
         }
 
         return $context->peek();
     }
 
-    private function promoteParameterToProperty(ContextStack $context, Param $param): void
+    private function promoteParameterToProperty(ContextStack $context, StrategyContainer $strategies, Param $param): void
     {
         $methodContainer = $context->peek();
         Assert::isInstanceOf($methodContainer, ClassElement::class);
@@ -75,6 +78,14 @@ private function promoteParameterToProperty(ContextStack $context, Param $param)
             $this->readOnly($param->flags),
         );
 
+        foreach ($this->reducers as $reducer) {
+            $property = $reducer->reduce($context, $param, $strategies, $property);
+        }
+
+        if ($property === null) {
+            return;
+        }
+
         $methodContainer->addProperty($property);
     }
 
diff --git a/src/phpDocumentor/Reflection/Php/Factory/EnumCase.php b/src/phpDocumentor/Reflection/Php/Factory/EnumCase.php
index bf05ae34..f81532d5 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/EnumCase.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/EnumCase.php
@@ -8,6 +8,7 @@
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Enum_ as EnumElement;
 use phpDocumentor\Reflection\Php\EnumCase as EnumCaseElement;
+use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use PhpParser\Node\Stmt\EnumCase as EnumCaseNode;
 use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
@@ -16,9 +17,13 @@
 
 final class EnumCase extends AbstractFactory
 {
-    public function __construct(DocBlockFactoryInterface $docBlockFactory, private readonly PrettyPrinter $prettyPrinter)
-    {
-        parent::__construct($docBlockFactory);
+    /** @param iterable<Reducer> $reducers */
+    public function __construct(
+        DocBlockFactoryInterface $docBlockFactory,
+        private readonly PrettyPrinter $prettyPrinter,
+        iterable $reducers = [],
+    ) {
+        parent::__construct($docBlockFactory, $reducers);
     }
 
     public function matches(ContextStack $context, object $object): bool
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Property.php b/src/phpDocumentor/Reflection/Php/Factory/Property.php
index 60b1be68..bbc31312 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Property.php
@@ -16,6 +16,7 @@
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Class_;
+use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\Property as PropertyDescriptor;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use phpDocumentor\Reflection\Php\Trait_;
@@ -32,12 +33,13 @@
  */
 final class Property extends AbstractFactory
 {
-    /**
-     * Initializes the object.
-     */
-    public function __construct(DocBlockFactoryInterface $docBlockFactory, private readonly PrettyPrinter $valueConverter)
-    {
-        parent::__construct($docBlockFactory);
+    /** @param iterable<Reducer> $reducers */
+    public function __construct(
+        DocBlockFactoryInterface $docBlockFactory,
+        private readonly PrettyPrinter $valueConverter,
+        iterable $reducers = [],
+    ) {
+        parent::__construct($docBlockFactory, $reducers);
     }
 
     public function matches(ContextStack $context, object $object): bool
@@ -75,19 +77,27 @@ protected function doCreate(
                 $default = $this->valueConverter->prettyPrintExpr($default);
             }
 
-            $propertyContainer->addProperty(
-                new PropertyDescriptor(
-                    $stmt->getFqsen(),
-                    $this->buildVisibility($stmt),
-                    $this->createDocBlock($stmt->getDocComment(), $context->getTypeContext()),
-                    $default,
-                    $stmt->isStatic(),
-                    new Location($stmt->getLine()),
-                    new Location($stmt->getEndLine()),
-                    (new Type())->fromPhpParser($stmt->getType()),
-                    $stmt->isReadonly(),
-                ),
+            $property = new PropertyDescriptor(
+                $stmt->getFqsen(),
+                $this->buildVisibility($stmt),
+                $this->createDocBlock($stmt->getDocComment(), $context->getTypeContext()),
+                $default,
+                $stmt->isStatic(),
+                new Location($stmt->getLine()),
+                new Location($stmt->getEndLine()),
+                (new Type())->fromPhpParser($stmt->getType()),
+                $stmt->isReadonly(),
             );
+
+            foreach ($this->reducers as $reducer) {
+                $property = $reducer->reduce($context, $object, $strategies, $property);
+            }
+
+            if ($property === null) {
+                continue;
+            }
+
+            $propertyContainer->addProperty($property);
         }
 
         return null;
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Reducer/Reducer.php b/src/phpDocumentor/Reflection/Php/Factory/Reducer/Reducer.php
index aa8321e0..a1e10a10 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Reducer/Reducer.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Reducer/Reducer.php
@@ -9,6 +9,13 @@
 
 interface Reducer
 {
+    /**
+     * @param TCarry|null $carry
+     *
+     * @return TCarry|null
+     *
+     * @template TCarry of object
+     */
     public function reduce(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/ProjectFactory.php b/src/phpDocumentor/Reflection/Php/ProjectFactory.php
index 4c03301f..9c6c5d74 100644
--- a/src/phpDocumentor/Reflection/Php/ProjectFactory.php
+++ b/src/phpDocumentor/Reflection/Php/ProjectFactory.php
@@ -77,16 +77,16 @@ public static function createInstance(): self
                 new \phpDocumentor\Reflection\Php\Factory\Namespace_(),
                 new Class_($docblockFactory, [$attributeReducer]),
                 new Enum_($docblockFactory, [$attributeReducer]),
-                new EnumCase($docblockFactory, new PrettyPrinter()),
+                new EnumCase($docblockFactory, new PrettyPrinter(), [$attributeReducer]),
                 new Define($docblockFactory, new PrettyPrinter()),
                 new GlobalConstant($docblockFactory, new PrettyPrinter()),
-                new ClassConstant($docblockFactory, new PrettyPrinter()),
+                new ClassConstant($docblockFactory, new PrettyPrinter(), [$attributeReducer]),
                 new Factory\File($docblockFactory, NodesFactory::createInstance()),
                 new Function_($docblockFactory, [$attributeReducer, $parameterReducer]),
-                new Interface_($docblockFactory),
+                new Interface_($docblockFactory, [$attributeReducer]),
                 $methodStrategy,
-                new Property($docblockFactory, new PrettyPrinter()),
-                new Trait_($docblockFactory),
+                new Property($docblockFactory, new PrettyPrinter(), [$attributeReducer]),
+                new Trait_($docblockFactory, [$attributeReducer]),
 
                 new IfStatement(),
                 new TraitUse(),
@@ -94,7 +94,7 @@ public static function createInstance(): self
         );
 
         $strategies->addStrategy(
-            new ConstructorPromotion($methodStrategy, $docblockFactory, new PrettyPrinter()),
+            new ConstructorPromotion($methodStrategy, $docblockFactory, new PrettyPrinter(), [$attributeReducer]),
             1100,
         );
         $strategies->addStrategy(new Noop(), -PHP_INT_MAX);

From a8ec66882590ef130659af729e7f03ed96f470e7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 27 May 2024 08:42:11 +0000
Subject: [PATCH 023/129] Bump phpstan/phpstan from 1.11.1 to 1.11.2

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.1 to 1.11.2.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.11.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.1...1.11.2)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 50414cee..1bdef794 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1206,16 +1206,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.1",
+            "version": "1.11.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b"
+                "reference": "0d5d4294a70deb7547db655c47685d680e39cfec"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e524358f930e41a2b4cca1320e3b04fc26b39e0b",
-                "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0d5d4294a70deb7547db655c47685d680e39cfec",
+                "reference": "0d5d4294a70deb7547db655c47685d680e39cfec",
                 "shasum": ""
             },
             "require": {
@@ -1260,7 +1260,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-05-15T08:00:59+00:00"
+            "time": "2024-05-24T13:23:04+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 8a3b1ce56970c00e67f906e21a2ec8b2712bdfd7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 3 Jun 2024 08:35:44 +0000
Subject: [PATCH 024/129] Bump phpstan/phpstan from 1.11.2 to 1.11.3

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.2 to 1.11.3.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.11.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.2...1.11.3)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 1bdef794..520c2f67 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1206,16 +1206,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.2",
+            "version": "1.11.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "0d5d4294a70deb7547db655c47685d680e39cfec"
+                "reference": "e64220a05c1209fc856d58e789c3b7a32c0bb9a5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0d5d4294a70deb7547db655c47685d680e39cfec",
-                "reference": "0d5d4294a70deb7547db655c47685d680e39cfec",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e64220a05c1209fc856d58e789c3b7a32c0bb9a5",
+                "reference": "e64220a05c1209fc856d58e789c3b7a32c0bb9a5",
                 "shasum": ""
             },
             "require": {
@@ -1260,7 +1260,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-05-24T13:23:04+00:00"
+            "time": "2024-05-31T13:53:37+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From dfdb547051b7ec9595802c1272d5a5ef8b1a56de Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 7 Jun 2024 08:13:22 +0000
Subject: [PATCH 025/129] Bump phpstan/extension-installer from 1.3.1 to 1.4.0

Bumps [phpstan/extension-installer](https://github.com/phpstan/extension-installer) from 1.3.1 to 1.4.0.
- [Release notes](https://github.com/phpstan/extension-installer/releases)
- [Commits](https://github.com/phpstan/extension-installer/compare/1.3.1...1.4.0)

---
updated-dependencies:
- dependency-name: phpstan/extension-installer
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/composer.lock b/composer.lock
index 520c2f67..9a20c74d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1162,20 +1162,20 @@
         },
         {
             "name": "phpstan/extension-installer",
-            "version": "1.3.1",
+            "version": "1.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/extension-installer.git",
-                "reference": "f45734bfb9984c6c56c4486b71230355f066a58a"
+                "reference": "5b19a72c93e79bb0d410ac2cd55f02c4a6e0cfbe"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f45734bfb9984c6c56c4486b71230355f066a58a",
-                "reference": "f45734bfb9984c6c56c4486b71230355f066a58a",
+                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/5b19a72c93e79bb0d410ac2cd55f02c4a6e0cfbe",
+                "reference": "5b19a72c93e79bb0d410ac2cd55f02c4a6e0cfbe",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^2.0",
+                "composer-plugin-api": "^2.6.0",
                 "php": "^7.2 || ^8.0",
                 "phpstan/phpstan": "^1.9.0"
             },
@@ -1200,22 +1200,22 @@
             "description": "Composer plugin for automatic installation of PHPStan extensions",
             "support": {
                 "issues": "https://github.com/phpstan/extension-installer/issues",
-                "source": "https://github.com/phpstan/extension-installer/tree/1.3.1"
+                "source": "https://github.com/phpstan/extension-installer/tree/1.4.0"
             },
-            "time": "2023-05-24T08:59:17+00:00"
+            "time": "2024-06-06T11:26:29+00:00"
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.3",
+            "version": "1.11.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "e64220a05c1209fc856d58e789c3b7a32c0bb9a5"
+                "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e64220a05c1209fc856d58e789c3b7a32c0bb9a5",
-                "reference": "e64220a05c1209fc856d58e789c3b7a32c0bb9a5",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9100a76ce8015b9aa7125b9171ae3a76887b6c82",
+                "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82",
                 "shasum": ""
             },
             "require": {
@@ -1260,7 +1260,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-05-31T13:53:37+00:00"
+            "time": "2024-06-06T12:19:22+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 11a47db98beca54fb0ccb0d5e217846e2e13adc7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 10 Jun 2024 08:43:34 +0000
Subject: [PATCH 026/129] Bump phpstan/extension-installer from 1.4.0 to 1.4.1

Bumps [phpstan/extension-installer](https://github.com/phpstan/extension-installer) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/phpstan/extension-installer/releases)
- [Commits](https://github.com/phpstan/extension-installer/compare/1.4.0...1.4.1)

---
updated-dependencies:
- dependency-name: phpstan/extension-installer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index 9a20c74d..17eee9df 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1162,20 +1162,20 @@
         },
         {
             "name": "phpstan/extension-installer",
-            "version": "1.4.0",
+            "version": "1.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/extension-installer.git",
-                "reference": "5b19a72c93e79bb0d410ac2cd55f02c4a6e0cfbe"
+                "reference": "f6b87faf9fc7978eab2f7919a8760bc9f58f9203"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/5b19a72c93e79bb0d410ac2cd55f02c4a6e0cfbe",
-                "reference": "5b19a72c93e79bb0d410ac2cd55f02c4a6e0cfbe",
+                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f6b87faf9fc7978eab2f7919a8760bc9f58f9203",
+                "reference": "f6b87faf9fc7978eab2f7919a8760bc9f58f9203",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^2.6.0",
+                "composer-plugin-api": "^2.0",
                 "php": "^7.2 || ^8.0",
                 "phpstan/phpstan": "^1.9.0"
             },
@@ -1200,9 +1200,9 @@
             "description": "Composer plugin for automatic installation of PHPStan extensions",
             "support": {
                 "issues": "https://github.com/phpstan/extension-installer/issues",
-                "source": "https://github.com/phpstan/extension-installer/tree/1.4.0"
+                "source": "https://github.com/phpstan/extension-installer/tree/1.4.1"
             },
-            "time": "2024-06-06T11:26:29+00:00"
+            "time": "2024-06-10T08:20:49+00:00"
         },
         {
             "name": "phpstan/phpstan",

From 80fc84a79ad0dcf0fd84addeb439a225bb73a1c5 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 17 Jun 2024 08:07:56 +0000
Subject: [PATCH 027/129] Bump phpunit/phpunit from 10.5.20 to 10.5.21

Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.20 to 10.5.21.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.21/ChangeLog-10.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.20...10.5.21)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/composer.lock b/composer.lock
index 17eee9df..e84cf805 100644
--- a/composer.lock
+++ b/composer.lock
@@ -864,16 +864,16 @@
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.11.1",
+            "version": "1.12.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
+                "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
-                "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
+                "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
                 "shasum": ""
             },
             "require": {
@@ -881,11 +881,12 @@
             },
             "conflict": {
                 "doctrine/collections": "<1.6.8",
-                "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+                "doctrine/common": "<2.13.3 || >=3 <3.2.2"
             },
             "require-dev": {
                 "doctrine/collections": "^1.6.8",
                 "doctrine/common": "^2.13.3 || ^3.2.2",
+                "phpspec/prophecy": "^1.10",
                 "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
             },
             "type": "library",
@@ -911,7 +912,7 @@
             ],
             "support": {
                 "issues": "https://github.com/myclabs/DeepCopy/issues",
-                "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
             },
             "funding": [
                 {
@@ -919,7 +920,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-03-08T13:26:56+00:00"
+            "time": "2024-06-12T14:39:25+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -1636,16 +1637,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.20",
+            "version": "10.5.21",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3"
+                "reference": "ac837816fa52078f7a5e17ed774f256a72a51af6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/547d314dc24ec1e177720d45c6263fb226cc2ae3",
-                "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ac837816fa52078f7a5e17ed774f256a72a51af6",
+                "reference": "ac837816fa52078f7a5e17ed774f256a72a51af6",
                 "shasum": ""
             },
             "require": {
@@ -1717,7 +1718,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.20"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.21"
             },
             "funding": [
                 {
@@ -1733,7 +1734,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-04-24T06:32:35+00:00"
+            "time": "2024-06-15T09:13:15+00:00"
         },
         {
             "name": "psalm/phar",

From 2d94f54c8036ca2225309efa2ce0115077a072ae Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 18 Jun 2024 08:12:27 +0000
Subject: [PATCH 028/129] Bump phpstan/phpstan from 1.11.4 to 1.11.5

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.4 to 1.11.5.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.11.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.4...1.11.5)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index e84cf805..aa6d4418 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1207,16 +1207,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.4",
+            "version": "1.11.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82"
+                "reference": "490f0ae1c92b082f154681d7849aee776a7c1443"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9100a76ce8015b9aa7125b9171ae3a76887b6c82",
-                "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/490f0ae1c92b082f154681d7849aee776a7c1443",
+                "reference": "490f0ae1c92b082f154681d7849aee776a7c1443",
                 "shasum": ""
             },
             "require": {
@@ -1261,7 +1261,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-06-06T12:19:22+00:00"
+            "time": "2024-06-17T15:10:54+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 82cb6b8b814c3b8b54a3543088be92a16ab3bbe8 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 20 Jun 2024 08:50:01 +0000
Subject: [PATCH 029/129] Bump symfony/polyfill-php80 from 1.29.0 to 1.30.0

Bumps [symfony/polyfill-php80](https://github.com/symfony/polyfill-php80) from 1.29.0 to 1.30.0.
- [Commits](https://github.com/symfony/polyfill-php80/compare/v1.29.0...v1.30.0)

---
updated-dependencies:
- dependency-name: symfony/polyfill-php80
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index aa6d4418..37008c2b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -335,16 +335,16 @@
         },
         {
             "name": "symfony/polyfill-php80",
-            "version": "v1.29.0",
+            "version": "v1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php80.git",
-                "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
+                "reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
-                "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
+                "reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
                 "shasum": ""
             },
             "require": {
@@ -395,7 +395,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0"
             },
             "funding": [
                 {
@@ -411,7 +411,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-01-29T20:11:03+00:00"
+            "time": "2024-05-31T15:07:36+00:00"
         },
         {
             "name": "webmozart/assert",

From f404ec32826c3d166b1c793814e3781bcc54eaa1 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 20 Jun 2024 08:50:06 +0000
Subject: [PATCH 030/129] Bump psalm/phar from 5.24.0 to 5.25.0

Bumps [psalm/phar](https://github.com/psalm/phar) from 5.24.0 to 5.25.0.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/5.24.0...5.25.0)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index aa6d4418..ad1f9836 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1738,16 +1738,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "5.24.0",
+            "version": "5.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "6ca1cbe47bbda0759b22ffe555594b547ff8351b"
+                "reference": "d42708449bd2d99ec6509924332fd94263974b20"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/6ca1cbe47bbda0759b22ffe555594b547ff8351b",
-                "reference": "6ca1cbe47bbda0759b22ffe555594b547ff8351b",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/d42708449bd2d99ec6509924332fd94263974b20",
+                "reference": "d42708449bd2d99ec6509924332fd94263974b20",
                 "shasum": ""
             },
             "require": {
@@ -1767,9 +1767,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/5.24.0"
+                "source": "https://github.com/psalm/phar/tree/5.25.0"
             },
-            "time": "2024-05-01T20:28:41+00:00"
+            "time": "2024-06-19T20:02:02+00:00"
         },
         {
             "name": "rector/rector",

From 33bfa6db93bb4b4f5c8049a6e73de076c8fe3fbe Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 21 Jun 2024 08:02:09 +0000
Subject: [PATCH 031/129] Bump rector/rector from 1.1.0 to 1.1.1

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.1.0 to 1.1.1.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.1.0...1.1.1)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 5e5ce1ad..9b93c5ba 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1773,16 +1773,16 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.1.0",
+            "version": "1.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "556509e2dcf527369892b7d411379c4a02f31859"
+                "reference": "c930cdb21294f10955ddfc31b720971e8333943d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/556509e2dcf527369892b7d411379c4a02f31859",
-                "reference": "556509e2dcf527369892b7d411379c4a02f31859",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/c930cdb21294f10955ddfc31b720971e8333943d",
+                "reference": "c930cdb21294f10955ddfc31b720971e8333943d",
                 "shasum": ""
             },
             "require": {
@@ -1820,7 +1820,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.1.0"
+                "source": "https://github.com/rectorphp/rector/tree/1.1.1"
             },
             "funding": [
                 {
@@ -1828,7 +1828,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-05-18T09:40:27+00:00"
+            "time": "2024-06-21T07:51:17+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From d7f96406846bd4e2e33e4efb8fdb0187bc24997c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 28 Jun 2024 08:26:20 +0000
Subject: [PATCH 032/129] Bump phpunit/phpunit from 10.5.21 to 10.5.24

Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.21 to 10.5.24.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.24/ChangeLog-10.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.21...10.5.24)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 9b93c5ba..82c13d67 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1637,16 +1637,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.21",
+            "version": "10.5.24",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "ac837816fa52078f7a5e17ed774f256a72a51af6"
+                "reference": "5f124e3e3e561006047b532fd0431bf5bb6b9015"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ac837816fa52078f7a5e17ed774f256a72a51af6",
-                "reference": "ac837816fa52078f7a5e17ed774f256a72a51af6",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5f124e3e3e561006047b532fd0431bf5bb6b9015",
+                "reference": "5f124e3e3e561006047b532fd0431bf5bb6b9015",
                 "shasum": ""
             },
             "require": {
@@ -1718,7 +1718,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.21"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.24"
             },
             "funding": [
                 {
@@ -1734,7 +1734,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-15T09:13:15+00:00"
+            "time": "2024-06-20T13:09:54+00:00"
         },
         {
             "name": "psalm/phar",

From 5993e869b3038dcccacbaa57ee6d4e668fceadfa Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 2 Jul 2024 08:21:20 +0000
Subject: [PATCH 033/129] Bump rector/rector from 1.1.1 to 1.2.0

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.1.1 to 1.2.0.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.1.1...1.2.0)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/composer.lock b/composer.lock
index 82c13d67..7e281696 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1207,16 +1207,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.5",
+            "version": "1.11.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "490f0ae1c92b082f154681d7849aee776a7c1443"
+                "reference": "6ac78f1165346c83b4a753f7e4186d969c6ad0ee"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/490f0ae1c92b082f154681d7849aee776a7c1443",
-                "reference": "490f0ae1c92b082f154681d7849aee776a7c1443",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6ac78f1165346c83b4a753f7e4186d969c6ad0ee",
+                "reference": "6ac78f1165346c83b4a753f7e4186d969c6ad0ee",
                 "shasum": ""
             },
             "require": {
@@ -1261,7 +1261,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-06-17T15:10:54+00:00"
+            "time": "2024-07-01T15:33:06+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",
@@ -1773,16 +1773,16 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.1.1",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "c930cdb21294f10955ddfc31b720971e8333943d"
+                "reference": "2fa387553db22b6f9bcccf5ff16f2c2c18a52a65"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/c930cdb21294f10955ddfc31b720971e8333943d",
-                "reference": "c930cdb21294f10955ddfc31b720971e8333943d",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/2fa387553db22b6f9bcccf5ff16f2c2c18a52a65",
+                "reference": "2fa387553db22b6f9bcccf5ff16f2c2c18a52a65",
                 "shasum": ""
             },
             "require": {
@@ -1820,7 +1820,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.1.1"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.0"
             },
             "funding": [
                 {
@@ -1828,7 +1828,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-06-21T07:51:17+00:00"
+            "time": "2024-07-01T14:24:45+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From a365b3d2124e907fcbd6d83e38da6138475e86a7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 2 Jul 2024 08:21:30 +0000
Subject: [PATCH 034/129] Bump nikic/php-parser from 5.0.2 to 5.1.0

Bumps [nikic/php-parser](https://github.com/nikic/PHP-Parser) from 5.0.2 to 5.1.0.
- [Release notes](https://github.com/nikic/PHP-Parser/releases)
- [Changelog](https://github.com/nikic/PHP-Parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nikic/PHP-Parser/compare/v5.0.2...v5.1.0)

---
updated-dependencies:
- dependency-name: nikic/php-parser
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index 82c13d67..321263ac 100644
--- a/composer.lock
+++ b/composer.lock
@@ -55,16 +55,16 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v5.0.2",
+            "version": "v5.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
+                "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
-                "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1",
+                "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1",
                 "shasum": ""
             },
             "require": {
@@ -75,7 +75,7 @@
             },
             "require-dev": {
                 "ircmaxell/php-yacc": "^0.0.7",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+                "phpunit/phpunit": "^9.0"
             },
             "bin": [
                 "bin/php-parse"
@@ -107,9 +107,9 @@
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0"
             },
-            "time": "2024-03-05T20:51:40+00:00"
+            "time": "2024-07-01T20:03:41+00:00"
         },
         {
             "name": "phpdocumentor/reflection-common",

From 8d648b3efa303bcee882d3c75a10aa82ea0f06a1 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 3 Jul 2024 08:52:12 +0000
Subject: [PATCH 035/129] Bump phpunit/phpunit from 10.5.24 to 10.5.25

Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.24 to 10.5.25.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.25/ChangeLog-10.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.24...10.5.25)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/composer.lock b/composer.lock
index 43249227..af3e8c84 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1316,16 +1316,16 @@
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "10.1.14",
+            "version": "10.1.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b"
+                "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
-                "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
+                "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
                 "shasum": ""
             },
             "require": {
@@ -1382,7 +1382,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                 "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.15"
             },
             "funding": [
                 {
@@ -1390,7 +1390,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-03-12T15:33:41+00:00"
+            "time": "2024-06-29T08:25:15+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -1637,16 +1637,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.24",
+            "version": "10.5.25",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "5f124e3e3e561006047b532fd0431bf5bb6b9015"
+                "reference": "831bf82312be6037e811833ddbea0b8de60ea314"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5f124e3e3e561006047b532fd0431bf5bb6b9015",
-                "reference": "5f124e3e3e561006047b532fd0431bf5bb6b9015",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/831bf82312be6037e811833ddbea0b8de60ea314",
+                "reference": "831bf82312be6037e811833ddbea0b8de60ea314",
                 "shasum": ""
             },
             "require": {
@@ -1718,7 +1718,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.24"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.25"
             },
             "funding": [
                 {
@@ -1734,7 +1734,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-20T13:09:54+00:00"
+            "time": "2024-07-03T05:49:17+00:00"
         },
         {
             "name": "psalm/phar",

From 7c0bb9ebf3bce3ca0a9837a51b7fb6820e844c40 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 5 Jul 2024 08:19:57 +0000
Subject: [PATCH 036/129] Bump phpstan/phpstan-webmozart-assert from 1.2.6 to
 1.2.7

Bumps [phpstan/phpstan-webmozart-assert](https://github.com/phpstan/phpstan-webmozart-assert) from 1.2.6 to 1.2.7.
- [Release notes](https://github.com/phpstan/phpstan-webmozart-assert/releases)
- [Commits](https://github.com/phpstan/phpstan-webmozart-assert/compare/1.2.6...1.2.7)

---
updated-dependencies:
- dependency-name: phpstan/phpstan-webmozart-assert
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index af3e8c84..306a945c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1265,16 +1265,16 @@
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",
-            "version": "1.2.6",
+            "version": "1.2.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan-webmozart-assert.git",
-                "reference": "c1739d090e44b82b41b8e32f429fa68ddc28072a"
+                "reference": "923bd58cc1c8d2bf8e78a8fbca4b224805237dc2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/c1739d090e44b82b41b8e32f429fa68ddc28072a",
-                "reference": "c1739d090e44b82b41b8e32f429fa68ddc28072a",
+                "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/923bd58cc1c8d2bf8e78a8fbca4b224805237dc2",
+                "reference": "923bd58cc1c8d2bf8e78a8fbca4b224805237dc2",
                 "shasum": ""
             },
             "require": {
@@ -1310,9 +1310,9 @@
             "description": "PHPStan webmozart/assert extension",
             "support": {
                 "issues": "https://github.com/phpstan/phpstan-webmozart-assert/issues",
-                "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.6"
+                "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.7"
             },
-            "time": "2024-03-30T14:14:20+00:00"
+            "time": "2024-07-05T08:05:21+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From 4d2052ae2a05f369c018a0488c1ceb8225ba1d50 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 8 Jul 2024 08:12:43 +0000
Subject: [PATCH 037/129] Bump dependabot/fetch-metadata from 2.1.0 to 2.2.0

Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/dependabot/fetch-metadata/releases)
- [Commits](https://github.com/dependabot/fetch-metadata/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: dependabot/fetch-metadata
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 .github/workflows/dependabot-auto-merge.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml
index 35e8e705..a269727d 100644
--- a/.github/workflows/dependabot-auto-merge.yml
+++ b/.github/workflows/dependabot-auto-merge.yml
@@ -13,7 +13,7 @@ jobs:
     steps:
       - name: "Dependabot metadata"
         id: "metadata"
-        uses: "dependabot/fetch-metadata@v2.1.0"
+        uses: "dependabot/fetch-metadata@v2.2.0"
         with:
           github-token: "${{ secrets.GITHUB_TOKEN }}"
       - name: "Enable auto-merge for Dependabot PRs"

From 026c3c6eb37f4d995eeaa3d632a74a5d56238ed4 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 8 Jul 2024 08:36:28 +0000
Subject: [PATCH 038/129] Bump phpstan/phpstan from 1.11.6 to 1.11.7

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.6 to 1.11.7.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.12.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.6...1.11.7)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 306a945c..017a8f3d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1207,16 +1207,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.6",
+            "version": "1.11.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "6ac78f1165346c83b4a753f7e4186d969c6ad0ee"
+                "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6ac78f1165346c83b4a753f7e4186d969c6ad0ee",
-                "reference": "6ac78f1165346c83b4a753f7e4186d969c6ad0ee",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/52d2bbfdcae7f895915629e4694e9497d0f8e28d",
+                "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d",
                 "shasum": ""
             },
             "require": {
@@ -1261,7 +1261,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-07-01T15:33:06+00:00"
+            "time": "2024-07-06T11:17:41+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 7f755104e5c4786e925982cbfaa05a24d110253b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 8 Jul 2024 08:36:38 +0000
Subject: [PATCH 039/129] Bump phpunit/phpunit from 10.5.25 to 10.5.26

Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.25 to 10.5.26.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.26/ChangeLog-10.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.25...10.5.26)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 306a945c..9dfcfaad 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1637,16 +1637,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.25",
+            "version": "10.5.26",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "831bf82312be6037e811833ddbea0b8de60ea314"
+                "reference": "42e2f13ceaa2e34461bc89bea75407550b40b2aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/831bf82312be6037e811833ddbea0b8de60ea314",
-                "reference": "831bf82312be6037e811833ddbea0b8de60ea314",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/42e2f13ceaa2e34461bc89bea75407550b40b2aa",
+                "reference": "42e2f13ceaa2e34461bc89bea75407550b40b2aa",
                 "shasum": ""
             },
             "require": {
@@ -1718,7 +1718,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.25"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.26"
             },
             "funding": [
                 {
@@ -1734,7 +1734,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-03T05:49:17+00:00"
+            "time": "2024-07-08T05:30:46+00:00"
         },
         {
             "name": "psalm/phar",

From 42daf0cb8df4faad70a59587e448cdf46e7b2531 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 16 Jul 2024 08:20:59 +0000
Subject: [PATCH 040/129] Bump rector/rector from 1.2.0 to 1.2.1

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.0 to 1.2.1.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.0...1.2.1)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index d49c88e5..02e56bec 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1773,16 +1773,16 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.0",
+            "version": "1.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "2fa387553db22b6f9bcccf5ff16f2c2c18a52a65"
+                "reference": "b38a3eed3ce2046f40c001255e2fec9d2746bacf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/2fa387553db22b6f9bcccf5ff16f2c2c18a52a65",
-                "reference": "2fa387553db22b6f9bcccf5ff16f2c2c18a52a65",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/b38a3eed3ce2046f40c001255e2fec9d2746bacf",
+                "reference": "b38a3eed3ce2046f40c001255e2fec9d2746bacf",
                 "shasum": ""
             },
             "require": {
@@ -1820,7 +1820,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.0"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.1"
             },
             "funding": [
                 {
@@ -1828,7 +1828,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-07-01T14:24:45+00:00"
+            "time": "2024-07-16T00:22:54+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From df551ef9f9d9919b4c4ebec48384428759b64037 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 22 Jul 2024 08:06:46 +0000
Subject: [PATCH 041/129] Bump squizlabs/php_codesniffer from 3.10.1 to 3.10.2

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.10.1 to 3.10.2.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.10.1...3.10.2)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 02e56bec..2337c577 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2813,16 +2813,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.10.1",
+            "version": "3.10.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877"
+                "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/8f90f7a53ce271935282967f53d0894f8f1ff877",
-                "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017",
+                "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017",
                 "shasum": ""
             },
             "require": {
@@ -2889,7 +2889,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-05-22T21:24:41+00:00"
+            "time": "2024-07-21T23:26:44+00:00"
         },
         {
             "name": "theseer/tokenizer",

From 760e1af2295d7ab3ce8bd3e28ee69e89f404f3e7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 24 Jul 2024 08:09:20 +0000
Subject: [PATCH 042/129] Bump phpstan/phpstan from 1.11.7 to 1.11.8

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.7 to 1.11.8.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.12.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.7...1.11.8)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 2337c577..c801bc8a 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1207,16 +1207,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.7",
+            "version": "1.11.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d"
+                "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/52d2bbfdcae7f895915629e4694e9497d0f8e28d",
-                "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec",
+                "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec",
                 "shasum": ""
             },
             "require": {
@@ -1261,7 +1261,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-07-06T11:17:41+00:00"
+            "time": "2024-07-24T07:01:22+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 9738f1649a9a457c09c84a4b9b03785d12b0b8c5 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 25 Jul 2024 08:29:00 +0000
Subject: [PATCH 043/129] Bump rector/rector from 1.2.1 to 1.2.2

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.1 to 1.2.2.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.1...1.2.2)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index c801bc8a..f4813adf 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1773,16 +1773,16 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.1",
+            "version": "1.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "b38a3eed3ce2046f40c001255e2fec9d2746bacf"
+                "reference": "044e6364017882d1e346da8690eeabc154da5495"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/b38a3eed3ce2046f40c001255e2fec9d2746bacf",
-                "reference": "b38a3eed3ce2046f40c001255e2fec9d2746bacf",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/044e6364017882d1e346da8690eeabc154da5495",
+                "reference": "044e6364017882d1e346da8690eeabc154da5495",
                 "shasum": ""
             },
             "require": {
@@ -1820,7 +1820,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.1"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.2"
             },
             "funding": [
                 {
@@ -1828,7 +1828,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-07-16T00:22:54+00:00"
+            "time": "2024-07-25T07:44:34+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 1b936d32aa8259988665cd4840f618580d7596e4 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 2 Aug 2024 08:17:15 +0000
Subject: [PATCH 044/129] Bump phpstan/phpstan from 1.11.8 to 1.11.9

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.8 to 1.11.9.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.12.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.8...1.11.9)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index f4813adf..79f36f39 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1207,16 +1207,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.8",
+            "version": "1.11.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec"
+                "reference": "e370bcddadaede0c1716338b262346f40d296f82"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec",
-                "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e370bcddadaede0c1716338b262346f40d296f82",
+                "reference": "e370bcddadaede0c1716338b262346f40d296f82",
                 "shasum": ""
             },
             "require": {
@@ -1261,7 +1261,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-07-24T07:01:22+00:00"
+            "time": "2024-08-01T16:25:18+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 26146e98b55b68f0c7f2431a4cbc1470ca97c36a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 6 Aug 2024 08:48:00 +0000
Subject: [PATCH 045/129] Bump phpstan/phpstan-webmozart-assert from 1.2.7 to
 1.2.9

Bumps [phpstan/phpstan-webmozart-assert](https://github.com/phpstan/phpstan-webmozart-assert) from 1.2.7 to 1.2.9.
- [Release notes](https://github.com/phpstan/phpstan-webmozart-assert/releases)
- [Commits](https://github.com/phpstan/phpstan-webmozart-assert/compare/1.2.7...1.2.9)

---
updated-dependencies:
- dependency-name: phpstan/phpstan-webmozart-assert
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 79f36f39..18fa040f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1265,16 +1265,16 @@
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",
-            "version": "1.2.7",
+            "version": "1.2.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan-webmozart-assert.git",
-                "reference": "923bd58cc1c8d2bf8e78a8fbca4b224805237dc2"
+                "reference": "ae758a21fa3b28060c316db4fc39ed3fab911219"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/923bd58cc1c8d2bf8e78a8fbca4b224805237dc2",
-                "reference": "923bd58cc1c8d2bf8e78a8fbca4b224805237dc2",
+                "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/ae758a21fa3b28060c316db4fc39ed3fab911219",
+                "reference": "ae758a21fa3b28060c316db4fc39ed3fab911219",
                 "shasum": ""
             },
             "require": {
@@ -1310,9 +1310,9 @@
             "description": "PHPStan webmozart/assert extension",
             "support": {
                 "issues": "https://github.com/phpstan/phpstan-webmozart-assert/issues",
-                "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.7"
+                "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.9"
             },
-            "time": "2024-07-05T08:05:21+00:00"
+            "time": "2024-08-06T06:58:49+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From 6ff27fa32d86e607922065afa1f8fac7fddff350 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 9 Aug 2024 08:24:20 +0000
Subject: [PATCH 046/129] Bump phpstan/phpstan from 1.11.9 to 1.11.10

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.9 to 1.11.10.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.12.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.9...1.11.10)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 18fa040f..fcb1798b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1207,16 +1207,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.9",
+            "version": "1.11.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "e370bcddadaede0c1716338b262346f40d296f82"
+                "reference": "640410b32995914bde3eed26fa89552f9c2c082f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e370bcddadaede0c1716338b262346f40d296f82",
-                "reference": "e370bcddadaede0c1716338b262346f40d296f82",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f",
+                "reference": "640410b32995914bde3eed26fa89552f9c2c082f",
                 "shasum": ""
             },
             "require": {
@@ -1261,7 +1261,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-01T16:25:18+00:00"
+            "time": "2024-08-08T09:02:50+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 4fa0a6c72340d85df0945a4c0223fade97622cbf Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 13 Aug 2024 08:56:34 +0000
Subject: [PATCH 047/129] Bump rector/rector from 1.2.2 to 1.2.3

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.2 to 1.2.3.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.2...1.2.3)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index fcb1798b..69f8b9f3 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1773,21 +1773,21 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.2",
+            "version": "1.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "044e6364017882d1e346da8690eeabc154da5495"
+                "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/044e6364017882d1e346da8690eeabc154da5495",
-                "reference": "044e6364017882d1e346da8690eeabc154da5495",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/2433e95410aef1b34b15d7f1b6a134365a4ddb39",
+                "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2|^8.0",
-                "phpstan/phpstan": "^1.11"
+                "phpstan/phpstan": "^1.11.9"
             },
             "conflict": {
                 "rector/rector-doctrine": "*",
@@ -1820,7 +1820,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.2"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.3"
             },
             "funding": [
                 {
@@ -1828,7 +1828,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-07-25T07:44:34+00:00"
+            "time": "2024-08-12T16:36:46+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 768f9b18e63ee664503b390f789091318c31f96e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 20 Aug 2024 08:23:18 +0000
Subject: [PATCH 048/129] Bump phpstan/phpstan-webmozart-assert from 1.2.9 to
 1.2.10

Bumps [phpstan/phpstan-webmozart-assert](https://github.com/phpstan/phpstan-webmozart-assert) from 1.2.9 to 1.2.10.
- [Release notes](https://github.com/phpstan/phpstan-webmozart-assert/releases)
- [Commits](https://github.com/phpstan/phpstan-webmozart-assert/compare/1.2.9...1.2.10)

---
updated-dependencies:
- dependency-name: phpstan/phpstan-webmozart-assert
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/composer.lock b/composer.lock
index 69f8b9f3..74b30939 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1207,16 +1207,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.10",
+            "version": "1.11.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "640410b32995914bde3eed26fa89552f9c2c082f"
+                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f",
-                "reference": "640410b32995914bde3eed26fa89552f9c2c082f",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/707c2aed5d8d0075666e673a5e71440c1d01a5a3",
+                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3",
                 "shasum": ""
             },
             "require": {
@@ -1261,20 +1261,20 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-08T09:02:50+00:00"
+            "time": "2024-08-19T14:37:29+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",
-            "version": "1.2.9",
+            "version": "1.2.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan-webmozart-assert.git",
-                "reference": "ae758a21fa3b28060c316db4fc39ed3fab911219"
+                "reference": "be3dcd883f52f1c7372519a3c019e54e847dbc17"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/ae758a21fa3b28060c316db4fc39ed3fab911219",
-                "reference": "ae758a21fa3b28060c316db4fc39ed3fab911219",
+                "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/be3dcd883f52f1c7372519a3c019e54e847dbc17",
+                "reference": "be3dcd883f52f1c7372519a3c019e54e847dbc17",
                 "shasum": ""
             },
             "require": {
@@ -1310,9 +1310,9 @@
             "description": "PHPStan webmozart/assert extension",
             "support": {
                 "issues": "https://github.com/phpstan/phpstan-webmozart-assert/issues",
-                "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.9"
+                "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.10"
             },
-            "time": "2024-08-06T06:58:49+00:00"
+            "time": "2024-08-19T12:57:18+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From 41e861c4aa11ebf041cf0efff644b491f12452df Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 20 Aug 2024 08:23:23 +0000
Subject: [PATCH 049/129] Bump phpstan/phpstan from 1.11.10 to 1.11.11

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.10 to 1.11.11.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.12.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.10...1.11.11)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 69f8b9f3..7fb6421f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1207,16 +1207,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.10",
+            "version": "1.11.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "640410b32995914bde3eed26fa89552f9c2c082f"
+                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f",
-                "reference": "640410b32995914bde3eed26fa89552f9c2c082f",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/707c2aed5d8d0075666e673a5e71440c1d01a5a3",
+                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3",
                 "shasum": ""
             },
             "require": {
@@ -1261,7 +1261,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-08T09:02:50+00:00"
+            "time": "2024-08-19T14:37:29+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 016bd452f11414406115ff20e285cc6b547718e1 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 26 Aug 2024 08:41:08 +0000
Subject: [PATCH 050/129] Bump rector/rector from 1.2.3 to 1.2.4

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index 74b30939..afd9afaa 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1773,21 +1773,21 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.3",
+            "version": "1.2.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39"
+                "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/2433e95410aef1b34b15d7f1b6a134365a4ddb39",
-                "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/42a4aa23b48b4cfc8ebfeac2b570364e27744381",
+                "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2|^8.0",
-                "phpstan/phpstan": "^1.11.9"
+                "phpstan/phpstan": "^1.11.11"
             },
             "conflict": {
                 "rector/rector-doctrine": "*",
@@ -1820,7 +1820,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.3"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.4"
             },
             "funding": [
                 {
@@ -1828,7 +1828,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-12T16:36:46+00:00"
+            "time": "2024-08-23T09:03:01+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 50340e642a277e294adcb2f6838ccc4938543815 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 26 Aug 2024 08:41:13 +0000
Subject: [PATCH 051/129] Bump phpstan/extension-installer from 1.4.1 to 1.4.2

Bumps [phpstan/extension-installer](https://github.com/phpstan/extension-installer) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/phpstan/extension-installer/releases)
- [Commits](https://github.com/phpstan/extension-installer/compare/1.4.1...1.4.2)

---
updated-dependencies:
- dependency-name: phpstan/extension-installer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 74b30939..709c1524 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1163,16 +1163,16 @@
         },
         {
             "name": "phpstan/extension-installer",
-            "version": "1.4.1",
+            "version": "1.4.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/extension-installer.git",
-                "reference": "f6b87faf9fc7978eab2f7919a8760bc9f58f9203"
+                "reference": "46c8219b3fb0deb3fc08301e8f0797d321d17dcd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f6b87faf9fc7978eab2f7919a8760bc9f58f9203",
-                "reference": "f6b87faf9fc7978eab2f7919a8760bc9f58f9203",
+                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/46c8219b3fb0deb3fc08301e8f0797d321d17dcd",
+                "reference": "46c8219b3fb0deb3fc08301e8f0797d321d17dcd",
                 "shasum": ""
             },
             "require": {
@@ -1199,11 +1199,15 @@
                 "MIT"
             ],
             "description": "Composer plugin for automatic installation of PHPStan extensions",
+            "keywords": [
+                "dev",
+                "static analysis"
+            ],
             "support": {
                 "issues": "https://github.com/phpstan/extension-installer/issues",
-                "source": "https://github.com/phpstan/extension-installer/tree/1.4.1"
+                "source": "https://github.com/phpstan/extension-installer/tree/1.4.2"
             },
-            "time": "2024-06-10T08:20:49+00:00"
+            "time": "2024-08-26T07:38:00+00:00"
         },
         {
             "name": "phpstan/phpstan",

From 07912aec1a0327fda28bac14a55422c7215bec3b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 08:04:58 +0000
Subject: [PATCH 052/129] Bump phpstan/phpstan from 1.11.11 to 1.12.0

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.11.11 to 1.12.0.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.12.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.11.11...1.12.0)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 52953f4b..a9476393 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1211,16 +1211,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.11",
+            "version": "1.12.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3"
+                "reference": "384af967d35b2162f69526c7276acadce534d0e1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/707c2aed5d8d0075666e673a5e71440c1d01a5a3",
-                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/384af967d35b2162f69526c7276acadce534d0e1",
+                "reference": "384af967d35b2162f69526c7276acadce534d0e1",
                 "shasum": ""
             },
             "require": {
@@ -1265,7 +1265,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-19T14:37:29+00:00"
+            "time": "2024-08-27T09:18:05+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 65f54ffc750dfd82d1783ee2bba67c7c8ed1c10c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 30 Aug 2024 08:27:41 +0000
Subject: [PATCH 053/129] Bump mikey179/vfsstream from 1.6.11 to 1.6.12

Bumps [mikey179/vfsstream](https://github.com/bovigo/vfsStream) from 1.6.11 to 1.6.12.
- [Release notes](https://github.com/bovigo/vfsStream/releases)
- [Changelog](https://github.com/bovigo/vfsStream/blob/v1.6.12/CHANGELOG.md)
- [Commits](https://github.com/bovigo/vfsStream/compare/v1.6.11...v1.6.12)

---
updated-dependencies:
- dependency-name: mikey179/vfsstream
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index a9476393..f1a3d4de 100644
--- a/composer.lock
+++ b/composer.lock
@@ -730,23 +730,24 @@
         },
         {
             "name": "mikey179/vfsstream",
-            "version": "v1.6.11",
+            "version": "v1.6.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bovigo/vfsStream.git",
-                "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f"
+                "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f",
-                "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f",
+                "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/fe695ec993e0a55c3abdda10a9364eb31c6f1bf0",
+                "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": ">=7.1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.5|^5.0"
+                "phpunit/phpunit": "^7.5||^8.5||^9.6",
+                "yoast/phpunit-polyfills": "^2.0"
             },
             "type": "library",
             "extra": {
@@ -777,7 +778,7 @@
                 "source": "https://github.com/bovigo/vfsStream/tree/master",
                 "wiki": "https://github.com/bovigo/vfsStream/wiki"
             },
-            "time": "2022-02-23T02:02:42+00:00"
+            "time": "2024-08-29T18:43:31+00:00"
         },
         {
             "name": "mockery/mockery",

From 9c779303a0defa5b5718f7bf5383b05ee06b41e0 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 08:51:00 +0000
Subject: [PATCH 054/129] Bump phpstan/phpstan from 1.12.0 to 1.12.1

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.12.0 to 1.12.1.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/1.12.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.12.0...1.12.1)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index f1a3d4de..2f5a1453 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.0",
+            "version": "1.12.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "384af967d35b2162f69526c7276acadce534d0e1"
+                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/384af967d35b2162f69526c7276acadce534d0e1",
-                "reference": "384af967d35b2162f69526c7276acadce534d0e1",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
+                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-27T09:18:05+00:00"
+            "time": "2024-09-03T19:55:22+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 76d5ca813d3256108265cff1991d54d39d369526 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 08:11:45 +0000
Subject: [PATCH 055/129] Bump phpstan/extension-installer from 1.4.2 to 1.4.3

Bumps [phpstan/extension-installer](https://github.com/phpstan/extension-installer) from 1.4.2 to 1.4.3.
- [Release notes](https://github.com/phpstan/extension-installer/releases)
- [Commits](https://github.com/phpstan/extension-installer/compare/1.4.2...1.4.3)

---
updated-dependencies:
- dependency-name: phpstan/extension-installer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index 2f5a1453..de892576 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1164,22 +1164,22 @@
         },
         {
             "name": "phpstan/extension-installer",
-            "version": "1.4.2",
+            "version": "1.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/extension-installer.git",
-                "reference": "46c8219b3fb0deb3fc08301e8f0797d321d17dcd"
+                "reference": "85e90b3942d06b2326fba0403ec24fe912372936"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/46c8219b3fb0deb3fc08301e8f0797d321d17dcd",
-                "reference": "46c8219b3fb0deb3fc08301e8f0797d321d17dcd",
+                "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936",
+                "reference": "85e90b3942d06b2326fba0403ec24fe912372936",
                 "shasum": ""
             },
             "require": {
                 "composer-plugin-api": "^2.0",
                 "php": "^7.2 || ^8.0",
-                "phpstan/phpstan": "^1.9.0"
+                "phpstan/phpstan": "^1.9.0 || ^2.0"
             },
             "require-dev": {
                 "composer/composer": "^2.0",
@@ -1206,9 +1206,9 @@
             ],
             "support": {
                 "issues": "https://github.com/phpstan/extension-installer/issues",
-                "source": "https://github.com/phpstan/extension-installer/tree/1.4.2"
+                "source": "https://github.com/phpstan/extension-installer/tree/1.4.3"
             },
-            "time": "2024-08-26T07:38:00+00:00"
+            "time": "2024-09-04T20:21:43+00:00"
         },
         {
             "name": "phpstan/phpstan",

From 7a34c06cf69f7604e8d9119e83f90187d0138f11 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 6 Sep 2024 08:43:18 +0000
Subject: [PATCH 056/129] Bump phpstan/phpstan from 1.12.1 to 1.12.2

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.12.1 to 1.12.2.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/2.0.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.12.1...1.12.2)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index de892576..c0ad96bb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.1",
+            "version": "1.12.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2"
+                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
-                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
+                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-09-03T19:55:22+00:00"
+            "time": "2024-09-05T16:09:28+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 9814379c2239cce5dbd62a222b218e944a5ed18e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 08:15:14 +0000
Subject: [PATCH 057/129] Bump phpstan/phpstan from 1.12.2 to 1.12.3

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.12.2 to 1.12.3.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/2.0.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.12.2...1.12.3)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index c0ad96bb..eaa1c614 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.2",
+            "version": "1.12.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1"
+                "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
-                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009",
+                "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-09-05T16:09:28+00:00"
+            "time": "2024-09-09T08:10:35+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From a91e096265beb90eff5c10278ef641aea9e156a6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 08:15:20 +0000
Subject: [PATCH 058/129] Bump psalm/phar from 5.25.0 to 5.26.0

Bumps [psalm/phar](https://github.com/psalm/phar) from 5.25.0 to 5.26.0.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/5.25.0...5.26.0)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index c0ad96bb..901e58a6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1743,16 +1743,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "5.25.0",
+            "version": "5.26.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "d42708449bd2d99ec6509924332fd94263974b20"
+                "reference": "004fa1aa67e1d04198458a2e5b34c75b40257519"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/d42708449bd2d99ec6509924332fd94263974b20",
-                "reference": "d42708449bd2d99ec6509924332fd94263974b20",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/004fa1aa67e1d04198458a2e5b34c75b40257519",
+                "reference": "004fa1aa67e1d04198458a2e5b34c75b40257519",
                 "shasum": ""
             },
             "require": {
@@ -1772,9 +1772,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/5.25.0"
+                "source": "https://github.com/psalm/phar/tree/5.26.0"
             },
-            "time": "2024-06-19T20:02:02+00:00"
+            "time": "2024-09-08T17:24:40+00:00"
         },
         {
             "name": "rector/rector",

From c793c252486a4bcea2e5615fcbff74a08c13081a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 08:15:29 +0000
Subject: [PATCH 059/129] Bump rector/rector from 1.2.4 to 1.2.5

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.4 to 1.2.5.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.4...1.2.5)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/composer.lock b/composer.lock
index c0ad96bb..fb2ec0d8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.2",
+            "version": "1.12.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1"
+                "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
-                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009",
+                "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-09-05T16:09:28+00:00"
+            "time": "2024-09-09T08:10:35+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",
@@ -1778,21 +1778,21 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.4",
+            "version": "1.2.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381"
+                "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/42a4aa23b48b4cfc8ebfeac2b570364e27744381",
-                "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/e98aa793ca3fcd17e893cfaf9103ac049775d339",
+                "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2|^8.0",
-                "phpstan/phpstan": "^1.11.11"
+                "phpstan/phpstan": "^1.12.2"
             },
             "conflict": {
                 "rector/rector-doctrine": "*",
@@ -1825,7 +1825,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.4"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.5"
             },
             "funding": [
                 {
@@ -1833,7 +1833,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-23T09:03:01+00:00"
+            "time": "2024-09-08T17:43:24+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 8efcbbc233d0ec0e7a21717d39400abffd7dda56 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 10 Sep 2024 08:17:50 +0000
Subject: [PATCH 060/129] Bump psalm/phar from 5.26.0 to 5.26.1

Bumps [psalm/phar](https://github.com/psalm/phar) from 5.26.0 to 5.26.1.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/5.26.0...5.26.1)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 68a16093..c7afffac 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1743,16 +1743,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "5.26.0",
+            "version": "5.26.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "004fa1aa67e1d04198458a2e5b34c75b40257519"
+                "reference": "8a38e7ad04499a0ccd2c506fd1da6fc01fff4547"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/004fa1aa67e1d04198458a2e5b34c75b40257519",
-                "reference": "004fa1aa67e1d04198458a2e5b34c75b40257519",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/8a38e7ad04499a0ccd2c506fd1da6fc01fff4547",
+                "reference": "8a38e7ad04499a0ccd2c506fd1da6fc01fff4547",
                 "shasum": ""
             },
             "require": {
@@ -1772,9 +1772,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/5.26.0"
+                "source": "https://github.com/psalm/phar/tree/5.26.1"
             },
-            "time": "2024-09-08T17:24:40+00:00"
+            "time": "2024-09-09T16:22:43+00:00"
         },
         {
             "name": "rector/rector",

From c56cef5686af09d28d5e3356a078ef79217b6f85 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 10 Sep 2024 08:17:54 +0000
Subject: [PATCH 061/129] Bump symfony/polyfill-php80 from 1.30.0 to 1.31.0

Bumps [symfony/polyfill-php80](https://github.com/symfony/polyfill-php80) from 1.30.0 to 1.31.0.
- [Commits](https://github.com/symfony/polyfill-php80/compare/v1.30.0...v1.31.0)

---
updated-dependencies:
- dependency-name: symfony/polyfill-php80
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index 68a16093..9c866ef6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -335,20 +335,20 @@
         },
         {
             "name": "symfony/polyfill-php80",
-            "version": "v1.30.0",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php80.git",
-                "reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
+                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
-                "reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.2"
             },
             "type": "library",
             "extra": {
@@ -395,7 +395,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0"
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -411,7 +411,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-31T15:07:36+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
             "name": "webmozart/assert",

From 19f833deec8342c09e49aa1d887371974f84271c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 12 Sep 2024 08:38:19 +0000
Subject: [PATCH 062/129] Bump phpstan/phpstan-webmozart-assert from 1.2.10 to
 1.2.11

Bumps [phpstan/phpstan-webmozart-assert](https://github.com/phpstan/phpstan-webmozart-assert) from 1.2.10 to 1.2.11.
- [Release notes](https://github.com/phpstan/phpstan-webmozart-assert/releases)
- [Commits](https://github.com/phpstan/phpstan-webmozart-assert/compare/1.2.10...1.2.11)

---
updated-dependencies:
- dependency-name: phpstan/phpstan-webmozart-assert
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/composer.lock b/composer.lock
index 7db82c88..a8ce61d0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1270,28 +1270,28 @@
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",
-            "version": "1.2.10",
+            "version": "1.2.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan-webmozart-assert.git",
-                "reference": "be3dcd883f52f1c7372519a3c019e54e847dbc17"
+                "reference": "960dd44e8466191590dd0d7940d3e9496eebebbd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/be3dcd883f52f1c7372519a3c019e54e847dbc17",
-                "reference": "be3dcd883f52f1c7372519a3c019e54e847dbc17",
+                "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/960dd44e8466191590dd0d7940d3e9496eebebbd",
+                "reference": "960dd44e8466191590dd0d7940d3e9496eebebbd",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2 || ^8.0",
-                "phpstan/phpstan": "^1.10"
+                "phpstan/phpstan": "^1.12"
             },
             "require-dev": {
                 "nikic/php-parser": "^4.13.0",
                 "php-parallel-lint/php-parallel-lint": "^1.2",
-                "phpstan/phpstan-deprecation-rules": "^1.1",
-                "phpstan/phpstan-phpunit": "^1.0",
-                "phpstan/phpstan-strict-rules": "^1.0",
+                "phpstan/phpstan-deprecation-rules": "^1.2",
+                "phpstan/phpstan-phpunit": "^1.4",
+                "phpstan/phpstan-strict-rules": "^1.6",
                 "phpunit/phpunit": "^9.5",
                 "webmozart/assert": "^1.11.0"
             },
@@ -1315,9 +1315,9 @@
             "description": "PHPStan webmozart/assert extension",
             "support": {
                 "issues": "https://github.com/phpstan/phpstan-webmozart-assert/issues",
-                "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.10"
+                "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.11"
             },
-            "time": "2024-08-19T12:57:18+00:00"
+            "time": "2024-09-11T15:48:08+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From b749295a1b3df1fecf89eca245c7e326082daa7b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 16 Sep 2024 08:44:53 +0000
Subject: [PATCH 063/129] Bump nikic/php-parser from 5.1.0 to 5.2.0

Bumps [nikic/php-parser](https://github.com/nikic/PHP-Parser) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/nikic/PHP-Parser/releases)
- [Changelog](https://github.com/nikic/PHP-Parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nikic/PHP-Parser/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: nikic/php-parser
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index a8ce61d0..ed54cf57 100644
--- a/composer.lock
+++ b/composer.lock
@@ -55,16 +55,16 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v5.1.0",
+            "version": "v5.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1"
+                "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1",
-                "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb",
+                "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb",
                 "shasum": ""
             },
             "require": {
@@ -107,9 +107,9 @@
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.2.0"
             },
-            "time": "2024-07-01T20:03:41+00:00"
+            "time": "2024-09-15T16:40:33+00:00"
         },
         {
             "name": "phpdocumentor/reflection-common",

From 93f04c012117033e05d029e13f17d5eff8165f8e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 19 Sep 2024 08:35:59 +0000
Subject: [PATCH 064/129] Bump squizlabs/php_codesniffer from 3.10.2 to 3.10.3

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.10.2 to 3.10.3.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.10.2...3.10.3)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index ed54cf57..6ce08ec8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2818,16 +2818,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.10.2",
+            "version": "3.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017"
+                "reference": "62d32998e820bddc40f99f8251958aed187a5c9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017",
-                "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c",
+                "reference": "62d32998e820bddc40f99f8251958aed187a5c9c",
                 "shasum": ""
             },
             "require": {
@@ -2894,7 +2894,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-07-21T23:26:44+00:00"
+            "time": "2024-09-18T10:38:58+00:00"
         },
         {
             "name": "theseer/tokenizer",

From dad94806fe1ca0135470c30b306df19ddabc8886 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 19 Sep 2024 08:36:04 +0000
Subject: [PATCH 065/129] Bump phpstan/phpstan from 1.12.3 to 1.12.4

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.12.3 to 1.12.4.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/2.0.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.12.3...1.12.4)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index ed54cf57..3f1801c2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.3",
+            "version": "1.12.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009"
+                "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009",
-                "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ffa517cb918591b93acc9b95c0bebdcd0e4538bd",
+                "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-09-09T08:10:35+00:00"
+            "time": "2024-09-19T07:58:01+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From ddc647e6560139a67348e2731b2eb4d7c18d0156 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 27 Sep 2024 08:29:18 +0000
Subject: [PATCH 066/129] Bump phpstan/phpstan from 1.12.4 to 1.12.5

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.12.4 to 1.12.5.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/2.0.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.12.4...1.12.5)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 06bba8b1..454b2613 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.4",
+            "version": "1.12.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd"
+                "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ffa517cb918591b93acc9b95c0bebdcd0e4538bd",
-                "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17",
+                "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-09-19T07:58:01+00:00"
+            "time": "2024-09-26T12:45:22+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 278f3f7ae9330a0c0b9017eeae53c397598f2f17 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 30 Sep 2024 08:03:29 +0000
Subject: [PATCH 067/129] Bump nikic/php-parser from 5.2.0 to 5.3.0

Bumps [nikic/php-parser](https://github.com/nikic/PHP-Parser) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/nikic/PHP-Parser/releases)
- [Changelog](https://github.com/nikic/PHP-Parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nikic/PHP-Parser/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: nikic/php-parser
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 454b2613..01c46402 100644
--- a/composer.lock
+++ b/composer.lock
@@ -55,16 +55,16 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v5.2.0",
+            "version": "v5.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb"
+                "reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb",
-                "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3abf7425cd284141dc5d8d14a9ee444de3345d1a",
+                "reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a",
                 "shasum": ""
             },
             "require": {
@@ -107,9 +107,9 @@
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.2.0"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.0"
             },
-            "time": "2024-09-15T16:40:33+00:00"
+            "time": "2024-09-29T13:56:26+00:00"
         },
         {
             "name": "phpdocumentor/reflection-common",

From 1f4e3ac037773d72f6c3fcf97b08e09f13fd666e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 4 Oct 2024 08:45:10 +0000
Subject: [PATCH 068/129] Bump rector/rector from 1.2.5 to 1.2.6

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index 01c46402..df56604e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1778,21 +1778,21 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.5",
+            "version": "1.2.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339"
+                "reference": "6ca85da28159dbd3bb36211c5104b7bc91278e99"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/e98aa793ca3fcd17e893cfaf9103ac049775d339",
-                "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/6ca85da28159dbd3bb36211c5104b7bc91278e99",
+                "reference": "6ca85da28159dbd3bb36211c5104b7bc91278e99",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2|^8.0",
-                "phpstan/phpstan": "^1.12.2"
+                "phpstan/phpstan": "^1.12.5"
             },
             "conflict": {
                 "rector/rector-doctrine": "*",
@@ -1825,7 +1825,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.5"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.6"
             },
             "funding": [
                 {
@@ -1833,7 +1833,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-09-08T17:43:24+00:00"
+            "time": "2024-10-03T08:56:44+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 1d23d44219c42d2940d9ff98db54de9e4ea5ea9e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 7 Oct 2024 08:30:18 +0000
Subject: [PATCH 069/129] Bump phpstan/phpstan from 1.12.5 to 1.12.6

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.12.5 to 1.12.6.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/2.0.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.12.5...1.12.6)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index df56604e..2981f877 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.5",
+            "version": "1.12.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17"
+                "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17",
-                "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc4d2f145a88ea7141ae698effd64d9df46527ae",
+                "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-09-26T12:45:22+00:00"
+            "time": "2024-10-06T15:03:59+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 445cb5b995f0d6d012d0f4393ff31eef06bc2ccb Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 9 Oct 2024 08:20:02 +0000
Subject: [PATCH 070/129] Bump nikic/php-parser from 5.3.0 to 5.3.1

Bumps [nikic/php-parser](https://github.com/nikic/PHP-Parser) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/nikic/PHP-Parser/releases)
- [Changelog](https://github.com/nikic/PHP-Parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nikic/PHP-Parser/compare/v5.3.0...v5.3.1)

---
updated-dependencies:
- dependency-name: nikic/php-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 2981f877..6e2c0b47 100644
--- a/composer.lock
+++ b/composer.lock
@@ -55,16 +55,16 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v5.3.0",
+            "version": "v5.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a"
+                "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3abf7425cd284141dc5d8d14a9ee444de3345d1a",
-                "reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b",
+                "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b",
                 "shasum": ""
             },
             "require": {
@@ -107,9 +107,9 @@
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.0"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1"
             },
-            "time": "2024-09-29T13:56:26+00:00"
+            "time": "2024-10-08T18:51:32+00:00"
         },
         {
             "name": "phpdocumentor/reflection-common",

From 2f3f41d608b13dcac8d5c517b116cb3f1e8d310e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 14 Oct 2024 08:36:07 +0000
Subject: [PATCH 071/129] Bump rector/rector from 1.2.6 to 1.2.7

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.6 to 1.2.7.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.6...1.2.7)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 6e2c0b47..56dc1d2d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1778,16 +1778,16 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.6",
+            "version": "1.2.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "6ca85da28159dbd3bb36211c5104b7bc91278e99"
+                "reference": "5b33bdd871895276e2c18e5410a4a57df9233ee0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/6ca85da28159dbd3bb36211c5104b7bc91278e99",
-                "reference": "6ca85da28159dbd3bb36211c5104b7bc91278e99",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/5b33bdd871895276e2c18e5410a4a57df9233ee0",
+                "reference": "5b33bdd871895276e2c18e5410a4a57df9233ee0",
                 "shasum": ""
             },
             "require": {
@@ -1825,7 +1825,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.6"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.7"
             },
             "funding": [
                 {
@@ -1833,7 +1833,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-10-03T08:56:44+00:00"
+            "time": "2024-10-12T11:12:46+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From fd6e0d15a6bca793b51dab74898633cc83492566 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 21 Oct 2024 08:41:26 +0000
Subject: [PATCH 072/129] Bump phpstan/phpstan from 1.12.6 to 1.12.7

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.12.6 to 1.12.7.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/2.0.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.12.6...1.12.7)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 56dc1d2d..921332a9 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.6",
+            "version": "1.12.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae"
+                "reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc4d2f145a88ea7141ae698effd64d9df46527ae",
-                "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc2b9976bd8b0f84ec9b0e50cc35378551de7af0",
+                "reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-10-06T15:03:59+00:00"
+            "time": "2024-10-18T11:12:07+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From 5e95bc3178b472681c9479115edecd32d61425f1 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 21 Oct 2024 08:41:37 +0000
Subject: [PATCH 073/129] Bump rector/rector from 1.2.7 to 1.2.8

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.7 to 1.2.8.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.7...1.2.8)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/composer.lock b/composer.lock
index 56dc1d2d..a3b94c4c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.6",
+            "version": "1.12.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae"
+                "reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc4d2f145a88ea7141ae698effd64d9df46527ae",
-                "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc2b9976bd8b0f84ec9b0e50cc35378551de7af0",
+                "reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-10-06T15:03:59+00:00"
+            "time": "2024-10-18T11:12:07+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",
@@ -1778,16 +1778,16 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.7",
+            "version": "1.2.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "5b33bdd871895276e2c18e5410a4a57df9233ee0"
+                "reference": "05755bf43617449c08ee8e50fb840c85ad3b1240"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/5b33bdd871895276e2c18e5410a4a57df9233ee0",
-                "reference": "5b33bdd871895276e2c18e5410a4a57df9233ee0",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/05755bf43617449c08ee8e50fb840c85ad3b1240",
+                "reference": "05755bf43617449c08ee8e50fb840c85ad3b1240",
                 "shasum": ""
             },
             "require": {
@@ -1825,7 +1825,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.7"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.8"
             },
             "funding": [
                 {
@@ -1833,7 +1833,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-10-12T11:12:46+00:00"
+            "time": "2024-10-18T11:54:27+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From f8fe03191d3314eedc77727cd790caabcfe665a2 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 4 Nov 2024 08:23:54 +0000
Subject: [PATCH 074/129] Bump phpDocumentor/.github from 0.7 to 0.8

Bumps [phpDocumentor/.github](https://github.com/phpdocumentor/.github) from 0.7 to 0.8.
- [Release notes](https://github.com/phpdocumentor/.github/releases)
- [Commits](https://github.com/phpdocumentor/.github/compare/v0.7...v0.8)

---
updated-dependencies:
- dependency-name: phpDocumentor/.github
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 .github/workflows/integrate.yaml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml
index 0cf5dde9..dade650d 100644
--- a/.github/workflows/integrate.yaml
+++ b/.github/workflows/integrate.yaml
@@ -13,7 +13,7 @@ on: # yamllint disable-line rule:truthy
 jobs:
   code-coverage:
     name: "Code Coverage"
-    uses: "phpDocumentor/.github/.github/workflows/code-coverage.yml@v0.7"
+    uses: "phpDocumentor/.github/.github/workflows/code-coverage.yml@v0.8"
     with:
       php-version: "8.2"
 
@@ -41,13 +41,13 @@ jobs:
 
   dependency-analysis:
     name: "Dependency analysis"
-    uses: "phpDocumentor/.github/.github/workflows/dependency-analysis.yml@v0.7"
+    uses: "phpDocumentor/.github/.github/workflows/dependency-analysis.yml@v0.8"
     with:
       php-version: "8.2"
 
   lint-root:
     name: "Lint root"
-    uses: "phpDocumentor/.github/.github/workflows/lint.yml@v0.7"
+    uses: "phpDocumentor/.github/.github/workflows/lint.yml@v0.8"
     with:
       php-version: "8.2"
       composer-options: "--no-check-publish --ansi"
@@ -61,11 +61,11 @@ jobs:
 
   unit-tests:
     name: "Unit test"
-    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.7"
+    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.8"
 
   integration-tests:
     name: "Integration test"
-    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.7"
+    uses: "phpDocumentor/.github/.github/workflows/continuous-integration.yml@v0.8"
     needs: "unit-tests"
     with:
       test-suite: "integration"

From 81fa2d7e1f642b1349be9bf807f8b76140467b12 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 4 Nov 2024 08:38:47 +0000
Subject: [PATCH 075/129] Bump phpdocumentor/type-resolver from 1.8.2 to 1.9.0

Bumps [phpdocumentor/type-resolver](https://github.com/phpDocumentor/TypeResolver) from 1.8.2 to 1.9.0.
- [Release notes](https://github.com/phpDocumentor/TypeResolver/releases)
- [Commits](https://github.com/phpDocumentor/TypeResolver/compare/1.8.2...1.9.0)

---
updated-dependencies:
- dependency-name: phpdocumentor/type-resolver
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/composer.lock b/composer.lock
index a3b94c4c..cad74587 100644
--- a/composer.lock
+++ b/composer.lock
@@ -230,23 +230,23 @@
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "1.8.2",
+            "version": "1.9.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "153ae662783729388a584b4361f2545e4d841e3c"
+                "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c",
-                "reference": "153ae662783729388a584b4361f2545e4d841e3c",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/1fb5ba8d045f5dd984ebded5b1cc66f29459422d",
+                "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d",
                 "shasum": ""
             },
             "require": {
                 "doctrine/deprecations": "^1.0",
                 "php": "^7.3 || ^8.0",
                 "phpdocumentor/reflection-common": "^2.0",
-                "phpstan/phpdoc-parser": "^1.13"
+                "phpstan/phpdoc-parser": "^1.18"
             },
             "require-dev": {
                 "ext-tokenizer": "*",
@@ -282,22 +282,22 @@
             "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
             "support": {
                 "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
-                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2"
+                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.9.0"
             },
-            "time": "2024-02-23T11:10:43+00:00"
+            "time": "2024-11-03T20:11:34+00:00"
         },
         {
             "name": "phpstan/phpdoc-parser",
-            "version": "1.29.0",
+            "version": "1.33.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpdoc-parser.git",
-                "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
+                "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
-                "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140",
+                "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140",
                 "shasum": ""
             },
             "require": {
@@ -329,9 +329,9 @@
             "description": "PHPDoc parser with support for nullable, intersection and generic types",
             "support": {
                 "issues": "https://github.com/phpstan/phpdoc-parser/issues",
-                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0"
             },
-            "time": "2024-05-06T12:04:23+00:00"
+            "time": "2024-10-13T11:25:22+00:00"
         },
         {
             "name": "symfony/polyfill-php80",

From 5dcbb8a83dc877a32449bbc33ab7df5f3f85e70a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 5 Nov 2024 08:40:00 +0000
Subject: [PATCH 076/129] Bump rector/rector from 1.2.8 to 1.2.9

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.8 to 1.2.9.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.8...1.2.9)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index cad74587..7c7adad6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1778,16 +1778,16 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.8",
+            "version": "1.2.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "05755bf43617449c08ee8e50fb840c85ad3b1240"
+                "reference": "7923bd5e48f8c26a922df91f7174f5bca2b3671d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/05755bf43617449c08ee8e50fb840c85ad3b1240",
-                "reference": "05755bf43617449c08ee8e50fb840c85ad3b1240",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/7923bd5e48f8c26a922df91f7174f5bca2b3671d",
+                "reference": "7923bd5e48f8c26a922df91f7174f5bca2b3671d",
                 "shasum": ""
             },
             "require": {
@@ -1825,7 +1825,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.8"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.9"
             },
             "funding": [
                 {
@@ -1833,7 +1833,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-10-18T11:54:27+00:00"
+            "time": "2024-11-04T18:26:57+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 0a8d381617c4bbd317ac9089993160698dbfa955 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 5 Nov 2024 08:40:05 +0000
Subject: [PATCH 077/129] Bump phpdocumentor/reflection-docblock from 5.4.1 to
 5.5.0

Bumps [phpdocumentor/reflection-docblock](https://github.com/phpDocumentor/ReflectionDocBlock) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/phpDocumentor/ReflectionDocBlock/releases)
- [Commits](https://github.com/phpDocumentor/ReflectionDocBlock/compare/5.4.1...5.5.0)

---
updated-dependencies:
- dependency-name: phpdocumentor/reflection-docblock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/composer.lock b/composer.lock
index cad74587..892f4a27 100644
--- a/composer.lock
+++ b/composer.lock
@@ -166,16 +166,16 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "5.4.1",
+            "version": "5.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c"
+                "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c",
-                "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/54e10d44fc1a84e2598d26f70d4f6f1f233e228a",
+                "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a",
                 "shasum": ""
             },
             "require": {
@@ -188,13 +188,13 @@
                 "webmozart/assert": "^1.9.1"
             },
             "require-dev": {
-                "mockery/mockery": "~1.3.5",
+                "mockery/mockery": "~1.3.5 || ~1.6.0",
                 "phpstan/extension-installer": "^1.1",
                 "phpstan/phpstan": "^1.8",
                 "phpstan/phpstan-mockery": "^1.1",
                 "phpstan/phpstan-webmozart-assert": "^1.2",
                 "phpunit/phpunit": "^9.5",
-                "vimeo/psalm": "^5.13"
+                "psalm/phar": "^5.26"
             },
             "type": "library",
             "extra": {
@@ -224,9 +224,9 @@
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
             "support": {
                 "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1"
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.5.0"
             },
-            "time": "2024-05-21T05:55:05+00:00"
+            "time": "2024-11-04T21:26:31+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",

From 053c709aba72eb6ea0844e590cfbf526fcd26dc3 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 7 Nov 2024 08:36:59 +0000
Subject: [PATCH 078/129] Bump phpdocumentor/reflection-docblock from 5.5.0 to
 5.5.1

Bumps [phpdocumentor/reflection-docblock](https://github.com/phpDocumentor/ReflectionDocBlock) from 5.5.0 to 5.5.1.
- [Release notes](https://github.com/phpDocumentor/ReflectionDocBlock/releases)
- [Commits](https://github.com/phpDocumentor/ReflectionDocBlock/compare/5.5.0...5.5.1)

---
updated-dependencies:
- dependency-name: phpdocumentor/reflection-docblock
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 2a75e246..a02f93ec 100644
--- a/composer.lock
+++ b/composer.lock
@@ -166,16 +166,16 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "5.5.0",
+            "version": "5.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a"
+                "reference": "0c70d2c566e899666f367ab7b80986beb3581e6f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/54e10d44fc1a84e2598d26f70d4f6f1f233e228a",
-                "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/0c70d2c566e899666f367ab7b80986beb3581e6f",
+                "reference": "0c70d2c566e899666f367ab7b80986beb3581e6f",
                 "shasum": ""
             },
             "require": {
@@ -224,9 +224,9 @@
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
             "support": {
                 "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.5.0"
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.5.1"
             },
-            "time": "2024-11-04T21:26:31+00:00"
+            "time": "2024-11-06T11:58:54+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",

From 07b748c6eebf738d5eebae85484a55aef7da6fda Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 7 Nov 2024 08:37:07 +0000
Subject: [PATCH 079/129] Bump phpstan/phpstan from 1.12.7 to 1.12.8

Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 1.12.7 to 1.12.8.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Changelog](https://github.com/phpstan/phpstan/blob/2.0.x/CHANGELOG.md)
- [Commits](https://github.com/phpstan/phpstan/compare/1.12.7...1.12.8)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 2a75e246..eb64f625 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.7",
+            "version": "1.12.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0"
+                "reference": "f6a60a4d66142b8156c9da923f1972657bc4748c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc2b9976bd8b0f84ec9b0e50cc35378551de7af0",
-                "reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f6a60a4d66142b8156c9da923f1972657bc4748c",
+                "reference": "f6a60a4d66142b8156c9da923f1972657bc4748c",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-10-18T11:12:07+00:00"
+            "time": "2024-11-06T19:06:49+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",

From a76f7d92a1fc1bbb4576a239227c3b762a192dd3 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Nov 2024 08:14:43 +0000
Subject: [PATCH 080/129] Bump rector/rector from 1.2.9 to 1.2.10

Bumps [rector/rector](https://github.com/rectorphp/rector) from 1.2.9 to 1.2.10.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/1.2.9...1.2.10)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/composer.lock b/composer.lock
index 1a778e87..4cfd275d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1212,16 +1212,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.8",
+            "version": "1.12.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "f6a60a4d66142b8156c9da923f1972657bc4748c"
+                "reference": "ceb937fb39a92deabc02d20709cf14b2c452502c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f6a60a4d66142b8156c9da923f1972657bc4748c",
-                "reference": "f6a60a4d66142b8156c9da923f1972657bc4748c",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ceb937fb39a92deabc02d20709cf14b2c452502c",
+                "reference": "ceb937fb39a92deabc02d20709cf14b2c452502c",
                 "shasum": ""
             },
             "require": {
@@ -1266,7 +1266,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-11-06T19:06:49+00:00"
+            "time": "2024-11-10T17:10:04+00:00"
         },
         {
             "name": "phpstan/phpstan-webmozart-assert",
@@ -1778,16 +1778,16 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.9",
+            "version": "1.2.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "7923bd5e48f8c26a922df91f7174f5bca2b3671d"
+                "reference": "40f9cf38c05296bd32f444121336a521a293fa61"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/7923bd5e48f8c26a922df91f7174f5bca2b3671d",
-                "reference": "7923bd5e48f8c26a922df91f7174f5bca2b3671d",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/40f9cf38c05296bd32f444121336a521a293fa61",
+                "reference": "40f9cf38c05296bd32f444121336a521a293fa61",
                 "shasum": ""
             },
             "require": {
@@ -1825,7 +1825,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.9"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.10"
             },
             "funding": [
                 {
@@ -1833,7 +1833,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-11-04T18:26:57+00:00"
+            "time": "2024-11-08T13:59:10+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From c7a483a2e26c66078287c00e8c0cd86a2e7bd067 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Nov 2024 08:14:49 +0000
Subject: [PATCH 081/129] Bump phpdocumentor/type-resolver from 1.9.0 to 1.10.0

Bumps [phpdocumentor/type-resolver](https://github.com/phpDocumentor/TypeResolver) from 1.9.0 to 1.10.0.
- [Release notes](https://github.com/phpDocumentor/TypeResolver/releases)
- [Commits](https://github.com/phpDocumentor/TypeResolver/compare/1.9.0...1.10.0)

---
updated-dependencies:
- dependency-name: phpdocumentor/type-resolver
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index 1a778e87..1f0585db 100644
--- a/composer.lock
+++ b/composer.lock
@@ -230,23 +230,23 @@
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "1.9.0",
+            "version": "1.10.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d"
+                "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/1fb5ba8d045f5dd984ebded5b1cc66f29459422d",
-                "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
+                "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
                 "shasum": ""
             },
             "require": {
                 "doctrine/deprecations": "^1.0",
                 "php": "^7.3 || ^8.0",
                 "phpdocumentor/reflection-common": "^2.0",
-                "phpstan/phpdoc-parser": "^1.18"
+                "phpstan/phpdoc-parser": "^1.18|^2.0"
             },
             "require-dev": {
                 "ext-tokenizer": "*",
@@ -282,9 +282,9 @@
             "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
             "support": {
                 "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
-                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.9.0"
+                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
             },
-            "time": "2024-11-03T20:11:34+00:00"
+            "time": "2024-11-09T15:12:26+00:00"
         },
         {
             "name": "phpstan/phpdoc-parser",

From 01bd135fad522f52410b2d7cd9a44ebf90d89b7f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 13 Nov 2024 08:02:29 +0000
Subject: [PATCH 082/129] Bump squizlabs/php_codesniffer from 3.10.3 to 3.11.0

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.10.3 to 3.11.0.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.10.3...3.11.0)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index b9db298f..c1ccd293 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2818,16 +2818,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.10.3",
+            "version": "3.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "62d32998e820bddc40f99f8251958aed187a5c9c"
+                "reference": "70c08f8d20c0eb4fe56f26644dd94dae76a7f450"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c",
-                "reference": "62d32998e820bddc40f99f8251958aed187a5c9c",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/70c08f8d20c0eb4fe56f26644dd94dae76a7f450",
+                "reference": "70c08f8d20c0eb4fe56f26644dd94dae76a7f450",
                 "shasum": ""
             },
             "require": {
@@ -2894,7 +2894,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-09-18T10:38:58+00:00"
+            "time": "2024-11-12T09:53:29+00:00"
         },
         {
             "name": "theseer/tokenizer",

From 12eda5fb45a26723ad02279aea8717f7fcf87d62 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 13 Nov 2024 08:02:35 +0000
Subject: [PATCH 083/129] Bump phpdocumentor/reflection-docblock from 5.5.1 to
 5.6.0

Bumps [phpdocumentor/reflection-docblock](https://github.com/phpDocumentor/ReflectionDocBlock) from 5.5.1 to 5.6.0.
- [Release notes](https://github.com/phpDocumentor/ReflectionDocBlock/releases)
- [Commits](https://github.com/phpDocumentor/ReflectionDocBlock/compare/5.5.1...5.6.0)

---
updated-dependencies:
- dependency-name: phpdocumentor/reflection-docblock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/composer.lock b/composer.lock
index b9db298f..c6f37492 100644
--- a/composer.lock
+++ b/composer.lock
@@ -166,16 +166,16 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "5.5.1",
+            "version": "5.6.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "0c70d2c566e899666f367ab7b80986beb3581e6f"
+                "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/0c70d2c566e899666f367ab7b80986beb3581e6f",
-                "reference": "0c70d2c566e899666f367ab7b80986beb3581e6f",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c",
+                "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c",
                 "shasum": ""
             },
             "require": {
@@ -184,7 +184,7 @@
                 "php": "^7.4 || ^8.0",
                 "phpdocumentor/reflection-common": "^2.2",
                 "phpdocumentor/type-resolver": "^1.7",
-                "phpstan/phpdoc-parser": "^1.7",
+                "phpstan/phpdoc-parser": "^1.7|^2.0",
                 "webmozart/assert": "^1.9.1"
             },
             "require-dev": {
@@ -224,9 +224,9 @@
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
             "support": {
                 "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.5.1"
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0"
             },
-            "time": "2024-11-06T11:58:54+00:00"
+            "time": "2024-11-12T11:25:25+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",

From ce69b7078a0a8d6b0d16c590fde92bac2ee0b9fc Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 18 Nov 2024 08:42:12 +0000
Subject: [PATCH 084/129] Bump squizlabs/php_codesniffer from 3.11.0 to 3.11.1

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.11.0 to 3.11.1.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.11.0...3.11.1)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 77926b7c..43818641 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2818,16 +2818,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.11.0",
+            "version": "3.11.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "70c08f8d20c0eb4fe56f26644dd94dae76a7f450"
+                "reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/70c08f8d20c0eb4fe56f26644dd94dae76a7f450",
-                "reference": "70c08f8d20c0eb4fe56f26644dd94dae76a7f450",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/19473c30efe4f7b3cd42522d0b2e6e7f243c6f87",
+                "reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87",
                 "shasum": ""
             },
             "require": {
@@ -2894,7 +2894,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-11-12T09:53:29+00:00"
+            "time": "2024-11-16T12:02:36+00:00"
         },
         {
             "name": "theseer/tokenizer",

From 74fcbb02409b22fe99110ece929cb5fa34f3206d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 20 Nov 2024 08:47:51 +0000
Subject: [PATCH 085/129] Bump phpspec/prophecy-phpunit from 2.2.0 to 2.3.0

Bumps [phpspec/prophecy-phpunit](https://github.com/phpspec/prophecy-phpunit) from 2.2.0 to 2.3.0.
- [Release notes](https://github.com/phpspec/prophecy-phpunit/releases)
- [Changelog](https://github.com/phpspec/prophecy-phpunit/blob/master/CHANGES.md)
- [Commits](https://github.com/phpspec/prophecy-phpunit/compare/v2.2.0...v2.3.0)

---
updated-dependencies:
- dependency-name: phpspec/prophecy-phpunit
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 138 ++++++++++++++++++++++++++------------------------
 1 file changed, 71 insertions(+), 67 deletions(-)

diff --git a/composer.lock b/composer.lock
index 43818641..c08c2b6d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -865,16 +865,16 @@
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.12.0",
+            "version": "1.12.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
+                "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
-                "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845",
+                "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845",
                 "shasum": ""
             },
             "require": {
@@ -913,7 +913,7 @@
             ],
             "support": {
                 "issues": "https://github.com/myclabs/DeepCopy/issues",
-                "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1"
             },
             "funding": [
                 {
@@ -921,7 +921,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-12T14:39:25+00:00"
+            "time": "2024-11-08T17:47:46+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -1043,26 +1043,27 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "v1.19.0",
+            "version": "v1.20.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87"
+                "reference": "a0165c648cab6a80311c74ffc708a07bb53ecc93"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/67a759e7d8746d501c41536ba40cd9c0a07d6a87",
-                "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/a0165c648cab6a80311c74ffc708a07bb53ecc93",
+                "reference": "a0165c648cab6a80311c74ffc708a07bb53ecc93",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.2 || ^2.0",
-                "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*",
+                "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.* || 8.4.*",
                 "phpdocumentor/reflection-docblock": "^5.2",
                 "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0",
                 "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0"
             },
             "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3.40",
                 "phpspec/phpspec": "^6.0 || ^7.0",
                 "phpstan/phpstan": "^1.9",
                 "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0"
@@ -1106,22 +1107,22 @@
             ],
             "support": {
                 "issues": "https://github.com/phpspec/prophecy/issues",
-                "source": "https://github.com/phpspec/prophecy/tree/v1.19.0"
+                "source": "https://github.com/phpspec/prophecy/tree/v1.20.0"
             },
-            "time": "2024-02-29T11:52:51+00:00"
+            "time": "2024-11-19T13:12:41+00:00"
         },
         {
             "name": "phpspec/prophecy-phpunit",
-            "version": "v2.2.0",
+            "version": "v2.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy-phpunit.git",
-                "reference": "16e1247e139434bce0bac09848bc5c8d882940fc"
+                "reference": "8819516c1b489ecee4c60db5f5432fac1ea8ac6f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/16e1247e139434bce0bac09848bc5c8d882940fc",
-                "reference": "16e1247e139434bce0bac09848bc5c8d882940fc",
+                "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/8819516c1b489ecee4c60db5f5432fac1ea8ac6f",
+                "reference": "8819516c1b489ecee4c60db5f5432fac1ea8ac6f",
                 "shasum": ""
             },
             "require": {
@@ -1129,6 +1130,9 @@
                 "phpspec/prophecy": "^1.18",
                 "phpunit/phpunit": "^9.1 || ^10.1 || ^11.0"
             },
+            "require-dev": {
+                "phpstan/phpstan": "^1.10"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -1158,9 +1162,9 @@
             ],
             "support": {
                 "issues": "https://github.com/phpspec/prophecy-phpunit/issues",
-                "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.2.0"
+                "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.3.0"
             },
-            "time": "2024-03-01T08:33:58+00:00"
+            "time": "2024-11-19T13:24:17+00:00"
         },
         {
             "name": "phpstan/extension-installer",
@@ -1321,32 +1325,32 @@
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "10.1.15",
+            "version": "10.1.16",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae"
+                "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
-                "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
+                "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-libxml": "*",
                 "ext-xmlwriter": "*",
-                "nikic/php-parser": "^4.18 || ^5.0",
+                "nikic/php-parser": "^4.19.1 || ^5.1.0",
                 "php": ">=8.1",
-                "phpunit/php-file-iterator": "^4.0",
-                "phpunit/php-text-template": "^3.0",
-                "sebastian/code-unit-reverse-lookup": "^3.0",
-                "sebastian/complexity": "^3.0",
-                "sebastian/environment": "^6.0",
-                "sebastian/lines-of-code": "^2.0",
-                "sebastian/version": "^4.0",
-                "theseer/tokenizer": "^1.2.0"
+                "phpunit/php-file-iterator": "^4.1.0",
+                "phpunit/php-text-template": "^3.0.1",
+                "sebastian/code-unit-reverse-lookup": "^3.0.0",
+                "sebastian/complexity": "^3.2.0",
+                "sebastian/environment": "^6.1.0",
+                "sebastian/lines-of-code": "^2.0.2",
+                "sebastian/version": "^4.0.1",
+                "theseer/tokenizer": "^1.2.3"
             },
             "require-dev": {
                 "phpunit/phpunit": "^10.1"
@@ -1358,7 +1362,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "10.1-dev"
+                    "dev-main": "10.1.x-dev"
                 }
             },
             "autoload": {
@@ -1387,7 +1391,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                 "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.15"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
             },
             "funding": [
                 {
@@ -1395,7 +1399,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-06-29T08:25:15+00:00"
+            "time": "2024-08-22T04:31:57+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -1642,16 +1646,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.26",
+            "version": "10.5.38",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "42e2f13ceaa2e34461bc89bea75407550b40b2aa"
+                "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/42e2f13ceaa2e34461bc89bea75407550b40b2aa",
-                "reference": "42e2f13ceaa2e34461bc89bea75407550b40b2aa",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a86773b9e887a67bc53efa9da9ad6e3f2498c132",
+                "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132",
                 "shasum": ""
             },
             "require": {
@@ -1661,26 +1665,26 @@
                 "ext-mbstring": "*",
                 "ext-xml": "*",
                 "ext-xmlwriter": "*",
-                "myclabs/deep-copy": "^1.10.1",
-                "phar-io/manifest": "^2.0.3",
-                "phar-io/version": "^3.0.2",
+                "myclabs/deep-copy": "^1.12.0",
+                "phar-io/manifest": "^2.0.4",
+                "phar-io/version": "^3.2.1",
                 "php": ">=8.1",
-                "phpunit/php-code-coverage": "^10.1.5",
-                "phpunit/php-file-iterator": "^4.0",
-                "phpunit/php-invoker": "^4.0",
-                "phpunit/php-text-template": "^3.0",
-                "phpunit/php-timer": "^6.0",
-                "sebastian/cli-parser": "^2.0",
-                "sebastian/code-unit": "^2.0",
-                "sebastian/comparator": "^5.0",
-                "sebastian/diff": "^5.0",
-                "sebastian/environment": "^6.0",
-                "sebastian/exporter": "^5.1",
-                "sebastian/global-state": "^6.0.1",
-                "sebastian/object-enumerator": "^5.0",
-                "sebastian/recursion-context": "^5.0",
-                "sebastian/type": "^4.0",
-                "sebastian/version": "^4.0"
+                "phpunit/php-code-coverage": "^10.1.16",
+                "phpunit/php-file-iterator": "^4.1.0",
+                "phpunit/php-invoker": "^4.0.0",
+                "phpunit/php-text-template": "^3.0.1",
+                "phpunit/php-timer": "^6.0.0",
+                "sebastian/cli-parser": "^2.0.1",
+                "sebastian/code-unit": "^2.0.0",
+                "sebastian/comparator": "^5.0.3",
+                "sebastian/diff": "^5.1.1",
+                "sebastian/environment": "^6.1.0",
+                "sebastian/exporter": "^5.1.2",
+                "sebastian/global-state": "^6.0.2",
+                "sebastian/object-enumerator": "^5.0.0",
+                "sebastian/recursion-context": "^5.0.0",
+                "sebastian/type": "^4.0.0",
+                "sebastian/version": "^4.0.1"
             },
             "suggest": {
                 "ext-soap": "To be able to generate mocks based on WSDL files"
@@ -1723,7 +1727,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.26"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.38"
             },
             "funding": [
                 {
@@ -1739,7 +1743,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-08T05:30:46+00:00"
+            "time": "2024-10-28T13:06:21+00:00"
         },
         {
             "name": "psalm/phar",
@@ -2005,16 +2009,16 @@
         },
         {
             "name": "sebastian/comparator",
-            "version": "5.0.1",
+            "version": "5.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
+                "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
-                "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
+                "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
                 "shasum": ""
             },
             "require": {
@@ -2025,7 +2029,7 @@
                 "sebastian/exporter": "^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^10.3"
+                "phpunit/phpunit": "^10.5"
             },
             "type": "library",
             "extra": {
@@ -2070,7 +2074,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/comparator/issues",
                 "security": "https://github.com/sebastianbergmann/comparator/security/policy",
-                "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
+                "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3"
             },
             "funding": [
                 {
@@ -2078,7 +2082,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2023-08-14T13:18:12+00:00"
+            "time": "2024-10-18T14:56:07+00:00"
         },
         {
             "name": "sebastian/complexity",

From b6cfdc03a731deeaea280f78c5d84bd7ed72a58b Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Fri, 22 Nov 2024 15:56:19 +0100
Subject: [PATCH 086/129] Enable php 8.4 to start building for 8.4

---
 composer.json | 2 +-
 composer.lock | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/composer.json b/composer.json
index dec67b54..528cf905 100644
--- a/composer.json
+++ b/composer.json
@@ -19,7 +19,7 @@
         }
     },
     "require": {
-        "php": "8.1.*|8.2.*|8.3.*",
+        "php": "8.1.*|8.2.*|8.3.*|8.4.*",
         "nikic/php-parser": "~4.18 || ^5.0",
         "phpdocumentor/reflection-common": "^2.1",
         "phpdocumentor/reflection-docblock": "^5",
diff --git a/composer.lock b/composer.lock
index c08c2b6d..790017e2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "279b483d5011c8c542bf1fbea5df1543",
+    "content-hash": "3548cba080496fb2a059993a8f3bcc0c",
     "packages": [
         {
             "name": "doctrine/deprecations",
@@ -2957,7 +2957,7 @@
     "prefer-stable": false,
     "prefer-lowest": false,
     "platform": {
-        "php": "8.1.*|8.2.*|8.3.*"
+        "php": "8.1.*|8.2.*|8.3.*|8.4.*"
     },
     "platform-dev": [],
     "platform-overrides": {

From d229e97d7b5aae5b6d2aa33890f938494b1b9c49 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 9 Dec 2024 08:29:45 +0000
Subject: [PATCH 087/129] Bump phpdocumentor/reflection-docblock from 5.6.0 to
 5.6.1

Bumps [phpdocumentor/reflection-docblock](https://github.com/phpDocumentor/ReflectionDocBlock) from 5.6.0 to 5.6.1.
- [Release notes](https://github.com/phpDocumentor/ReflectionDocBlock/releases)
- [Commits](https://github.com/phpDocumentor/ReflectionDocBlock/compare/5.6.0...5.6.1)

---
updated-dependencies:
- dependency-name: phpdocumentor/reflection-docblock
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 36 +++++++++++++++++-------------------
 1 file changed, 17 insertions(+), 19 deletions(-)

diff --git a/composer.lock b/composer.lock
index 790017e2..fc444ee2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -8,29 +8,27 @@
     "packages": [
         {
             "name": "doctrine/deprecations",
-            "version": "1.1.3",
+            "version": "1.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/deprecations.git",
-                "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
+                "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
-                "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
+                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
+                "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^9",
-                "phpstan/phpstan": "1.4.10 || 1.10.15",
-                "phpstan/phpstan-phpunit": "^1.0",
+                "doctrine/coding-standard": "^9 || ^12",
+                "phpstan/phpstan": "1.4.10 || 2.0.3",
+                "phpstan/phpstan-phpunit": "^1.0 || ^2",
                 "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-                "psalm/plugin-phpunit": "0.18.4",
-                "psr/log": "^1 || ^2 || ^3",
-                "vimeo/psalm": "4.30.0 || 5.12.0"
+                "psr/log": "^1 || ^2 || ^3"
             },
             "suggest": {
                 "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@@ -38,7 +36,7 @@
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+                    "Doctrine\\Deprecations\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -49,9 +47,9 @@
             "homepage": "https://www.doctrine-project.org/",
             "support": {
                 "issues": "https://github.com/doctrine/deprecations/issues",
-                "source": "https://github.com/doctrine/deprecations/tree/1.1.3"
+                "source": "https://github.com/doctrine/deprecations/tree/1.1.4"
             },
-            "time": "2024-01-30T19:34:25+00:00"
+            "time": "2024-12-07T21:18:45+00:00"
         },
         {
             "name": "nikic/php-parser",
@@ -166,16 +164,16 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "5.6.0",
+            "version": "5.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c"
+                "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c",
-                "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
+                "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
                 "shasum": ""
             },
             "require": {
@@ -224,9 +222,9 @@
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
             "support": {
                 "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0"
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1"
             },
-            "time": "2024-11-12T11:25:25+00:00"
+            "time": "2024-12-07T09:39:29+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",

From a2ecda03b4d639f4a4ed6dbc732b07e18a6018b4 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 12 Dec 2024 08:19:41 +0000
Subject: [PATCH 088/129] Bump squizlabs/php_codesniffer from 3.11.1 to 3.11.2

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.11.1 to 3.11.2.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.11.1...3.11.2)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index fc444ee2..1898df49 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2820,16 +2820,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.11.1",
+            "version": "3.11.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87"
+                "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/19473c30efe4f7b3cd42522d0b2e6e7f243c6f87",
-                "reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/1368f4a58c3c52114b86b1abe8f4098869cb0079",
+                "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079",
                 "shasum": ""
             },
             "require": {
@@ -2896,7 +2896,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-11-16T12:02:36+00:00"
+            "time": "2024-12-11T16:04:26+00:00"
         },
         {
             "name": "theseer/tokenizer",

From 800081060b2ffbd4e09026d8eda175c01b260b68 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 31 Dec 2024 08:39:27 +0000
Subject: [PATCH 089/129] Bump nikic/php-parser from 5.3.1 to 5.4.0

Bumps [nikic/php-parser](https://github.com/nikic/PHP-Parser) from 5.3.1 to 5.4.0.
- [Release notes](https://github.com/nikic/PHP-Parser/releases)
- [Changelog](https://github.com/nikic/PHP-Parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nikic/PHP-Parser/compare/v5.3.1...v5.4.0)

---
updated-dependencies:
- dependency-name: nikic/php-parser
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 1898df49..6094db71 100644
--- a/composer.lock
+++ b/composer.lock
@@ -53,16 +53,16 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v5.3.1",
+            "version": "v5.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b"
+                "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b",
-                "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
+                "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
                 "shasum": ""
             },
             "require": {
@@ -105,9 +105,9 @@
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
             },
-            "time": "2024-10-08T18:51:32+00:00"
+            "time": "2024-12-30T11:07:19+00:00"
         },
         {
             "name": "phpdocumentor/reflection-common",

From 92778738cfc51191b001229a3ba541029c39cb6b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 24 Jan 2025 08:53:35 +0000
Subject: [PATCH 090/129] Bump squizlabs/php_codesniffer from 3.11.2 to 3.11.3

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.11.2 to 3.11.3.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.11.2...3.11.3)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 6094db71..d31571c6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2820,16 +2820,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.11.2",
+            "version": "3.11.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079"
+                "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/1368f4a58c3c52114b86b1abe8f4098869cb0079",
-                "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10",
+                "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10",
                 "shasum": ""
             },
             "require": {
@@ -2894,9 +2894,13 @@
                 {
                     "url": "https://opencollective.com/php_codesniffer",
                     "type": "open_collective"
+                },
+                {
+                    "url": "https://thanks.dev/phpcsstandards",
+                    "type": "thanks_dev"
                 }
             ],
-            "time": "2024-12-11T16:04:26+00:00"
+            "time": "2025-01-23T17:04:15+00:00"
         },
         {
             "name": "theseer/tokenizer",
@@ -2961,5 +2965,5 @@
     "platform-overrides": {
         "php": "8.1.0"
     },
-    "plugin-api-version": "2.6.0"
+    "plugin-api-version": "2.3.0"
 }

From 4b3b395447fdc915e7066a9f298d511437183782 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 27 Jan 2025 08:07:33 +0000
Subject: [PATCH 091/129] Bump dependabot/fetch-metadata from 2.2.0 to 2.3.0

Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2.2.0 to 2.3.0.
- [Release notes](https://github.com/dependabot/fetch-metadata/releases)
- [Commits](https://github.com/dependabot/fetch-metadata/compare/v2.2.0...v2.3.0)

---
updated-dependencies:
- dependency-name: dependabot/fetch-metadata
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 .github/workflows/dependabot-auto-merge.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml
index a269727d..3f0244a5 100644
--- a/.github/workflows/dependabot-auto-merge.yml
+++ b/.github/workflows/dependabot-auto-merge.yml
@@ -13,7 +13,7 @@ jobs:
     steps:
       - name: "Dependabot metadata"
         id: "metadata"
-        uses: "dependabot/fetch-metadata@v2.2.0"
+        uses: "dependabot/fetch-metadata@v2.3.0"
         with:
           github-token: "${{ secrets.GITHUB_TOKEN }}"
       - name: "Enable auto-merge for Dependabot PRs"

From f0f51c0a9f2b74d974d5e521962d4f651aed9a33 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 27 Jan 2025 08:43:11 +0000
Subject: [PATCH 092/129] Bump psalm/phar from 5.26.1 to 6.0.0

Bumps [psalm/phar](https://github.com/psalm/phar) from 5.26.1 to 6.0.0.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/5.26.1...6.0.0)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.json |  2 +-
 composer.lock | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/composer.json b/composer.json
index 528cf905..9e0e682f 100644
--- a/composer.json
+++ b/composer.json
@@ -37,7 +37,7 @@
         "phpstan/phpstan": "^1.8",
         "phpstan/phpstan-webmozart-assert": "^1.2",
         "phpunit/phpunit": "^10.0",
-        "psalm/phar": "^5.24",
+        "psalm/phar": "^6.0",
         "rector/rector": "^1.0.0",
         "squizlabs/php_codesniffer": "^3.8"
     },
diff --git a/composer.lock b/composer.lock
index d31571c6..48629ed4 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "3548cba080496fb2a059993a8f3bcc0c",
+    "content-hash": "2c12fd8d161ad20658d45d572e246c72",
     "packages": [
         {
             "name": "doctrine/deprecations",
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "5.26.1",
+            "version": "6.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "8a38e7ad04499a0ccd2c506fd1da6fc01fff4547"
+                "reference": "859187f245d76b38d1b320bb9f976fb48bfe5213"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/8a38e7ad04499a0ccd2c506fd1da6fc01fff4547",
-                "reference": "8a38e7ad04499a0ccd2c506fd1da6fc01fff4547",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/859187f245d76b38d1b320bb9f976fb48bfe5213",
+                "reference": "859187f245d76b38d1b320bb9f976fb48bfe5213",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/5.26.1"
+                "source": "https://github.com/psalm/phar/tree/6.0.0"
             },
-            "time": "2024-09-09T16:22:43+00:00"
+            "time": "2025-01-26T12:07:59+00:00"
         },
         {
             "name": "rector/rector",

From 8cb4051d0d332f221d368f1cfe5ff64a91a9fe37 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 31 Jan 2025 08:05:43 +0000
Subject: [PATCH 093/129] Bump psalm/phar from 6.0.0 to 6.1.0

Bumps [psalm/phar](https://github.com/psalm/phar) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/6.0.0...6.1.0)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 48629ed4..38254488 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "6.0.0",
+            "version": "6.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "859187f245d76b38d1b320bb9f976fb48bfe5213"
+                "reference": "65011fc1453292b88c79dd09549d8d04c4e06c75"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/859187f245d76b38d1b320bb9f976fb48bfe5213",
-                "reference": "859187f245d76b38d1b320bb9f976fb48bfe5213",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/65011fc1453292b88c79dd09549d8d04c4e06c75",
+                "reference": "65011fc1453292b88c79dd09549d8d04c4e06c75",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/6.0.0"
+                "source": "https://github.com/psalm/phar/tree/6.1.0"
             },
-            "time": "2025-01-26T12:07:59+00:00"
+            "time": "2025-01-30T19:46:07+00:00"
         },
         {
             "name": "rector/rector",

From e0fae97e20f67c3265e5e48a145bf972d50f735d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 4 Feb 2025 08:46:59 +0000
Subject: [PATCH 094/129] Bump psalm/phar from 6.1.0 to 6.2.0

Bumps [psalm/phar](https://github.com/psalm/phar) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/6.1.0...6.2.0)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 38254488..ef205961 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "6.1.0",
+            "version": "6.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "65011fc1453292b88c79dd09549d8d04c4e06c75"
+                "reference": "42f1b116a4011f454275fa59e455de5b5aae3349"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/65011fc1453292b88c79dd09549d8d04c4e06c75",
-                "reference": "65011fc1453292b88c79dd09549d8d04c4e06c75",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/42f1b116a4011f454275fa59e455de5b5aae3349",
+                "reference": "42f1b116a4011f454275fa59e455de5b5aae3349",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/6.1.0"
+                "source": "https://github.com/psalm/phar/tree/6.2.0"
             },
-            "time": "2025-01-30T19:46:07+00:00"
+            "time": "2025-02-03T11:08:06+00:00"
         },
         {
             "name": "rector/rector",

From 80ccf1b93d1d2a2c03288cd5f5639447180178a6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 5 Feb 2025 08:27:51 +0000
Subject: [PATCH 095/129] Bump psalm/phar from 6.2.0 to 6.3.0

Bumps [psalm/phar](https://github.com/psalm/phar) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/6.2.0...6.3.0)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index ef205961..68c4579e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "6.2.0",
+            "version": "6.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "42f1b116a4011f454275fa59e455de5b5aae3349"
+                "reference": "5a7c1fb6660ee1313a109f6564df6e9223e3643a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/42f1b116a4011f454275fa59e455de5b5aae3349",
-                "reference": "42f1b116a4011f454275fa59e455de5b5aae3349",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/5a7c1fb6660ee1313a109f6564df6e9223e3643a",
+                "reference": "5a7c1fb6660ee1313a109f6564df6e9223e3643a",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/6.2.0"
+                "source": "https://github.com/psalm/phar/tree/6.3.0"
             },
-            "time": "2025-02-03T11:08:06+00:00"
+            "time": "2025-02-04T21:08:50+00:00"
         },
         {
             "name": "rector/rector",

From 635fe83e3ecdfd13cd5e804dd437542511a1f22d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 6 Feb 2025 08:30:58 +0000
Subject: [PATCH 096/129] Bump psalm/phar from 6.3.0 to 6.4.0

Bumps [psalm/phar](https://github.com/psalm/phar) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/6.3.0...6.4.0)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 68c4579e..025d2ebb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "6.3.0",
+            "version": "6.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "5a7c1fb6660ee1313a109f6564df6e9223e3643a"
+                "reference": "38771dadf1f2c64cadc3a81d12a73c23d040380f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/5a7c1fb6660ee1313a109f6564df6e9223e3643a",
-                "reference": "5a7c1fb6660ee1313a109f6564df6e9223e3643a",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/38771dadf1f2c64cadc3a81d12a73c23d040380f",
+                "reference": "38771dadf1f2c64cadc3a81d12a73c23d040380f",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/6.3.0"
+                "source": "https://github.com/psalm/phar/tree/6.4.0"
             },
-            "time": "2025-02-04T21:08:50+00:00"
+            "time": "2025-02-05T14:15:07+00:00"
         },
         {
             "name": "rector/rector",

From 6d33b38d90040fea011e758acfb16fa6a172e12e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 10 Feb 2025 08:51:10 +0000
Subject: [PATCH 097/129] Bump psalm/phar from 6.4.0 to 6.5.0

Bumps [psalm/phar](https://github.com/psalm/phar) from 6.4.0 to 6.5.0.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/6.4.0...6.5.0)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 025d2ebb..9d903ca6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "6.4.0",
+            "version": "6.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "38771dadf1f2c64cadc3a81d12a73c23d040380f"
+                "reference": "0d398e433a1016da46629053ef5d066618d3c34a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/38771dadf1f2c64cadc3a81d12a73c23d040380f",
-                "reference": "38771dadf1f2c64cadc3a81d12a73c23d040380f",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/0d398e433a1016da46629053ef5d066618d3c34a",
+                "reference": "0d398e433a1016da46629053ef5d066618d3c34a",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/6.4.0"
+                "source": "https://github.com/psalm/phar/tree/6.5.0"
             },
-            "time": "2025-02-05T14:15:07+00:00"
+            "time": "2025-02-07T21:08:20+00:00"
         },
         {
             "name": "rector/rector",

From e105785974641ae317a3f9c20ee937522de2fbed Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 11 Feb 2025 08:09:19 +0000
Subject: [PATCH 098/129] Bump psalm/phar from 6.5.0 to 6.5.1

Bumps [psalm/phar](https://github.com/psalm/phar) from 6.5.0 to 6.5.1.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/6.5.0...6.5.1)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 9d903ca6..1d0c457c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "6.5.0",
+            "version": "6.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "0d398e433a1016da46629053ef5d066618d3c34a"
+                "reference": "f7ecaf8740f32d58695cee5ac11663e02b44b223"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/0d398e433a1016da46629053ef5d066618d3c34a",
-                "reference": "0d398e433a1016da46629053ef5d066618d3c34a",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/f7ecaf8740f32d58695cee5ac11663e02b44b223",
+                "reference": "f7ecaf8740f32d58695cee5ac11663e02b44b223",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/6.5.0"
+                "source": "https://github.com/psalm/phar/tree/6.5.1"
             },
-            "time": "2025-02-07T21:08:20+00:00"
+            "time": "2025-02-10T10:05:10+00:00"
         },
         {
             "name": "rector/rector",

From 91aadc9ec383dfaf58ed5b6b6f9ac18dd0365f65 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 17 Feb 2025 08:32:52 +0000
Subject: [PATCH 099/129] Bump psalm/phar from 6.5.1 to 6.6.1

Bumps [psalm/phar](https://github.com/psalm/phar) from 6.5.1 to 6.6.1.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/6.5.1...6.6.1)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 1d0c457c..1f9625b2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "6.5.1",
+            "version": "6.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "f7ecaf8740f32d58695cee5ac11663e02b44b223"
+                "reference": "6bd3007a43c220e6fa7774f07784e849cef828e8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/f7ecaf8740f32d58695cee5ac11663e02b44b223",
-                "reference": "f7ecaf8740f32d58695cee5ac11663e02b44b223",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/6bd3007a43c220e6fa7774f07784e849cef828e8",
+                "reference": "6bd3007a43c220e6fa7774f07784e849cef828e8",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/6.5.1"
+                "source": "https://github.com/psalm/phar/tree/6.6.1"
             },
-            "time": "2025-02-10T10:05:10+00:00"
+            "time": "2025-02-16T17:19:57+00:00"
         },
         {
             "name": "rector/rector",

From 596dcf547de1add55fab3e6aca39a3fc5de92a9a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 18 Feb 2025 08:36:28 +0000
Subject: [PATCH 100/129] Bump psalm/phar from 6.6.1 to 6.7.1

Bumps [psalm/phar](https://github.com/psalm/phar) from 6.6.1 to 6.7.1.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/6.6.1...6.7.1)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 1f9625b2..3b938b85 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "6.6.1",
+            "version": "6.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "6bd3007a43c220e6fa7774f07784e849cef828e8"
+                "reference": "a7112d33cfd48d857c2eb730ea642046d21bbdf5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/6bd3007a43c220e6fa7774f07784e849cef828e8",
-                "reference": "6bd3007a43c220e6fa7774f07784e849cef828e8",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/a7112d33cfd48d857c2eb730ea642046d21bbdf5",
+                "reference": "a7112d33cfd48d857c2eb730ea642046d21bbdf5",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/6.6.1"
+                "source": "https://github.com/psalm/phar/tree/6.7.1"
             },
-            "time": "2025-02-16T17:19:57+00:00"
+            "time": "2025-02-17T10:54:35+00:00"
         },
         {
             "name": "rector/rector",

From 4c92f9dbd9b82c558ce04803c5df6c8c5fa18b2c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 20 Feb 2025 08:42:35 +0000
Subject: [PATCH 101/129] Bump psalm/phar from 6.7.1 to 6.8.2

Bumps [psalm/phar](https://github.com/psalm/phar) from 6.7.1 to 6.8.2.
- [Release notes](https://github.com/psalm/phar/releases)
- [Commits](https://github.com/psalm/phar/compare/6.7.1...6.8.2)

---
updated-dependencies:
- dependency-name: psalm/phar
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 3b938b85..fc5de75c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1745,16 +1745,16 @@
         },
         {
             "name": "psalm/phar",
-            "version": "6.7.1",
+            "version": "6.8.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/psalm/phar.git",
-                "reference": "a7112d33cfd48d857c2eb730ea642046d21bbdf5"
+                "reference": "333a7a0d7805b699860262e1b4ea8cf14e1cd118"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/psalm/phar/zipball/a7112d33cfd48d857c2eb730ea642046d21bbdf5",
-                "reference": "a7112d33cfd48d857c2eb730ea642046d21bbdf5",
+                "url": "https://api.github.com/repos/psalm/phar/zipball/333a7a0d7805b699860262e1b4ea8cf14e1cd118",
+                "reference": "333a7a0d7805b699860262e1b4ea8cf14e1cd118",
                 "shasum": ""
             },
             "require": {
@@ -1774,9 +1774,9 @@
             "description": "Composer-based Psalm Phar",
             "support": {
                 "issues": "https://github.com/psalm/phar/issues",
-                "source": "https://github.com/psalm/phar/tree/6.7.1"
+                "source": "https://github.com/psalm/phar/tree/6.8.2"
             },
-            "time": "2025-02-17T10:54:35+00:00"
+            "time": "2025-02-20T08:23:26+00:00"
         },
         {
             "name": "rector/rector",

From bf7c86f87fe3a2a32172e21bd5772981c03f04fd Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 18 Mar 2025 08:31:56 +0000
Subject: [PATCH 102/129] Bump squizlabs/php_codesniffer from 3.11.3 to 3.12.0

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.11.3 to 3.12.0.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.11.3...3.12.0)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index fc5de75c..a6d491bf 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2820,16 +2820,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.11.3",
+            "version": "3.12.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10"
+                "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10",
-                "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/2d1b63db139c3c6ea0c927698e5160f8b3b8d630",
+                "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630",
                 "shasum": ""
             },
             "require": {
@@ -2896,11 +2896,11 @@
                     "type": "open_collective"
                 },
                 {
-                    "url": "https://thanks.dev/phpcsstandards",
+                    "url": "https://thanks.dev/u/gh/phpcsstandards",
                     "type": "thanks_dev"
                 }
             ],
-            "time": "2025-01-23T17:04:15+00:00"
+            "time": "2025-03-18T05:04:51+00:00"
         },
         {
             "name": "theseer/tokenizer",

From 7add4472654d78f3b94fe405b3b310d8ba16cd46 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 24 Mar 2025 08:37:47 +0000
Subject: [PATCH 103/129] Bump doctrine/coding-standard from 12.0.0 to 13.0.0

Bumps [doctrine/coding-standard](https://github.com/doctrine/coding-standard) from 12.0.0 to 13.0.0.
- [Release notes](https://github.com/doctrine/coding-standard/releases)
- [Commits](https://github.com/doctrine/coding-standard/compare/12.0.0...13.0.0)

---
updated-dependencies:
- dependency-name: doctrine/coding-standard
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.json |  2 +-
 composer.lock | 74 +++++++++++++++++++++++++--------------------------
 2 files changed, 38 insertions(+), 38 deletions(-)

diff --git a/composer.json b/composer.json
index 9e0e682f..493298b6 100644
--- a/composer.json
+++ b/composer.json
@@ -29,7 +29,7 @@
     },
     "require-dev": {
         "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
-        "doctrine/coding-standard": "^12.0",
+        "doctrine/coding-standard": "^13.0",
         "mikey179/vfsstream": "~1.2",
         "mockery/mockery": "~1.6.0",
         "phpspec/prophecy-phpunit": "^2.0",
diff --git a/composer.lock b/composer.lock
index a6d491bf..5c13a3d2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "2c12fd8d161ad20658d45d572e246c72",
+    "content-hash": "5788cdf4f715f4cc6ba2fcd316591b63",
     "packages": [
         {
             "name": "doctrine/deprecations",
@@ -286,30 +286,30 @@
         },
         {
             "name": "phpstan/phpdoc-parser",
-            "version": "1.33.0",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpdoc-parser.git",
-                "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140"
+                "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140",
-                "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
+                "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2 || ^8.0"
+                "php": "^7.4 || ^8.0"
             },
             "require-dev": {
                 "doctrine/annotations": "^2.0",
-                "nikic/php-parser": "^4.15",
+                "nikic/php-parser": "^5.3.0",
                 "php-parallel-lint/php-parallel-lint": "^1.2",
                 "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^1.5",
-                "phpstan/phpstan-phpunit": "^1.1",
-                "phpstan/phpstan-strict-rules": "^1.0",
-                "phpunit/phpunit": "^9.5",
+                "phpstan/phpstan": "^2.0",
+                "phpstan/phpstan-phpunit": "^2.0",
+                "phpstan/phpstan-strict-rules": "^2.0",
+                "phpunit/phpunit": "^9.6",
                 "symfony/process": "^5.2"
             },
             "type": "library",
@@ -327,9 +327,9 @@
             "description": "PHPDoc parser with support for nullable, intersection and generic types",
             "support": {
                 "issues": "https://github.com/phpstan/phpdoc-parser/issues",
-                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0"
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0"
             },
-            "time": "2024-10-13T11:25:22+00:00"
+            "time": "2025-02-19T13:28:12+00:00"
         },
         {
             "name": "symfony/polyfill-php80",
@@ -551,22 +551,22 @@
         },
         {
             "name": "doctrine/coding-standard",
-            "version": "12.0.0",
+            "version": "13.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/coding-standard.git",
-                "reference": "1b2b7dc58c68833af481fb9325c25abd40681c79"
+                "reference": "8132673b9075d648c07f7f69cb3f4cc436709b77"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/1b2b7dc58c68833af481fb9325c25abd40681c79",
-                "reference": "1b2b7dc58c68833af481fb9325c25abd40681c79",
+                "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/8132673b9075d648c07f7f69cb3f4cc436709b77",
+                "reference": "8132673b9075d648c07f7f69cb3f4cc436709b77",
                 "shasum": ""
             },
             "require": {
                 "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0.0",
-                "php": "^7.2 || ^8.0",
-                "slevomat/coding-standard": "^8.11",
+                "php": "^7.4 || ^8.0",
+                "slevomat/coding-standard": "^8.16",
                 "squizlabs/php_codesniffer": "^3.7"
             },
             "type": "phpcodesniffer-standard",
@@ -601,9 +601,9 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/coding-standard/issues",
-                "source": "https://github.com/doctrine/coding-standard/tree/12.0.0"
+                "source": "https://github.com/doctrine/coding-standard/tree/13.0.0"
             },
-            "time": "2023-04-24T17:43:28+00:00"
+            "time": "2025-03-23T15:38:56+00:00"
         },
         {
             "name": "doctrine/instantiator",
@@ -2755,32 +2755,32 @@
         },
         {
             "name": "slevomat/coding-standard",
-            "version": "8.14.1",
+            "version": "8.16.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/slevomat/coding-standard.git",
-                "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926"
+                "reference": "490023f23813483b5f75381c4ee07d26d9edced1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/fea1fd6f137cc84f9cba0ae30d549615dbc6a926",
-                "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926",
+                "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/490023f23813483b5f75381c4ee07d26d9edced1",
+                "reference": "490023f23813483b5f75381c4ee07d26d9edced1",
                 "shasum": ""
             },
             "require": {
                 "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0",
-                "php": "^7.2 || ^8.0",
-                "phpstan/phpdoc-parser": "^1.23.1",
-                "squizlabs/php_codesniffer": "^3.7.1"
+                "php": "^7.4 || ^8.0",
+                "phpstan/phpdoc-parser": "^2.1.0",
+                "squizlabs/php_codesniffer": "^3.11.3"
             },
             "require-dev": {
-                "phing/phing": "2.17.4",
-                "php-parallel-lint/php-parallel-lint": "1.3.2",
-                "phpstan/phpstan": "1.10.37",
-                "phpstan/phpstan-deprecation-rules": "1.1.4",
-                "phpstan/phpstan-phpunit": "1.3.14",
-                "phpstan/phpstan-strict-rules": "1.5.1",
-                "phpunit/phpunit": "8.5.21|9.6.8|10.3.5"
+                "phing/phing": "3.0.1",
+                "php-parallel-lint/php-parallel-lint": "1.4.0",
+                "phpstan/phpstan": "2.1.6",
+                "phpstan/phpstan-deprecation-rules": "2.0.1",
+                "phpstan/phpstan-phpunit": "2.0.4",
+                "phpstan/phpstan-strict-rules": "2.0.3",
+                "phpunit/phpunit": "9.6.8|10.5.45|11.4.4|11.5.9|12.0.4"
             },
             "type": "phpcodesniffer-standard",
             "extra": {
@@ -2804,7 +2804,7 @@
             ],
             "support": {
                 "issues": "https://github.com/slevomat/coding-standard/issues",
-                "source": "https://github.com/slevomat/coding-standard/tree/8.14.1"
+                "source": "https://github.com/slevomat/coding-standard/tree/8.16.1"
             },
             "funding": [
                 {
@@ -2816,7 +2816,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2023-10-08T07:28:08+00:00"
+            "time": "2025-03-23T16:33:42+00:00"
         },
         {
             "name": "squizlabs/php_codesniffer",

From fdc29a4acb0176c14dec1bcb408d66865b6edca8 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 7 Apr 2025 08:54:47 +0000
Subject: [PATCH 104/129] Bump squizlabs/php_codesniffer from 3.12.0 to 3.12.1

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.12.0 to 3.12.1.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.12.0...3.12.1)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-version: 3.12.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 5c13a3d2..bd8b74ed 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2820,16 +2820,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.12.0",
+            "version": "3.12.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630"
+                "reference": "ea16a1f3719783345febd3aab41beb55c8c84bfd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/2d1b63db139c3c6ea0c927698e5160f8b3b8d630",
-                "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ea16a1f3719783345febd3aab41beb55c8c84bfd",
+                "reference": "ea16a1f3719783345febd3aab41beb55c8c84bfd",
                 "shasum": ""
             },
             "require": {
@@ -2900,7 +2900,7 @@
                     "type": "thanks_dev"
                 }
             ],
-            "time": "2025-03-18T05:04:51+00:00"
+            "time": "2025-04-04T12:57:55+00:00"
         },
         {
             "name": "theseer/tokenizer",

From 928f1d73a9ad66506abcaee80d3b32efc6cb520f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 14 Apr 2025 08:52:29 +0000
Subject: [PATCH 105/129] Bump squizlabs/php_codesniffer from 3.12.1 to 3.12.2

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.12.1 to 3.12.2.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.12.1...3.12.2)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-version: 3.12.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index bd8b74ed..21094803 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2820,16 +2820,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.12.1",
+            "version": "3.12.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "ea16a1f3719783345febd3aab41beb55c8c84bfd"
+                "reference": "6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ea16a1f3719783345febd3aab41beb55c8c84bfd",
-                "reference": "ea16a1f3719783345febd3aab41beb55c8c84bfd",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa",
+                "reference": "6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa",
                 "shasum": ""
             },
             "require": {
@@ -2900,7 +2900,7 @@
                     "type": "thanks_dev"
                 }
             ],
-            "time": "2025-04-04T12:57:55+00:00"
+            "time": "2025-04-13T04:10:18+00:00"
         },
         {
             "name": "theseer/tokenizer",

From ffc65163da81f4a31a92142e3847366c6ea6f058 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 14 Apr 2025 08:52:38 +0000
Subject: [PATCH 106/129] Bump phpdocumentor/reflection-docblock from 5.6.1 to
 5.6.2

Bumps [phpdocumentor/reflection-docblock](https://github.com/phpDocumentor/ReflectionDocBlock) from 5.6.1 to 5.6.2.
- [Release notes](https://github.com/phpDocumentor/ReflectionDocBlock/releases)
- [Commits](https://github.com/phpDocumentor/ReflectionDocBlock/compare/5.6.1...5.6.2)

---
updated-dependencies:
- dependency-name: phpdocumentor/reflection-docblock
  dependency-version: 5.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/composer.lock b/composer.lock
index bd8b74ed..3000fb36 100644
--- a/composer.lock
+++ b/composer.lock
@@ -8,26 +8,29 @@
     "packages": [
         {
             "name": "doctrine/deprecations",
-            "version": "1.1.4",
+            "version": "1.1.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/deprecations.git",
-                "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
+                "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
-                "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
+                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+                "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.1 || ^8.0"
             },
+            "conflict": {
+                "phpunit/phpunit": "<=7.5 || >=13"
+            },
             "require-dev": {
-                "doctrine/coding-standard": "^9 || ^12",
-                "phpstan/phpstan": "1.4.10 || 2.0.3",
+                "doctrine/coding-standard": "^9 || ^12 || ^13",
+                "phpstan/phpstan": "1.4.10 || 2.1.11",
                 "phpstan/phpstan-phpunit": "^1.0 || ^2",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
                 "psr/log": "^1 || ^2 || ^3"
             },
             "suggest": {
@@ -47,9 +50,9 @@
             "homepage": "https://www.doctrine-project.org/",
             "support": {
                 "issues": "https://github.com/doctrine/deprecations/issues",
-                "source": "https://github.com/doctrine/deprecations/tree/1.1.4"
+                "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
             },
-            "time": "2024-12-07T21:18:45+00:00"
+            "time": "2025-04-07T20:06:18+00:00"
         },
         {
             "name": "nikic/php-parser",
@@ -164,16 +167,16 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "5.6.1",
+            "version": "5.6.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8"
+                "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
-                "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62",
+                "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62",
                 "shasum": ""
             },
             "require": {
@@ -222,9 +225,9 @@
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
             "support": {
                 "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1"
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2"
             },
-            "time": "2024-12-07T09:39:29+00:00"
+            "time": "2025-04-13T19:20:35+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",

From b0dff81db4a6171e58a015d20ece115430dcb032 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Tue, 15 Apr 2025 21:49:10 +0200
Subject: [PATCH 107/129] Add async visibility support

The async visibility class reflects the async accessors on properties.
---
 composer.json                                 |  5 +-
 composer.lock                                 | 58 ++++++++++++++++++-
 phpunit.xml.dist                              |  3 +
 .../Reflection/Php/AsyncVisibility.php        | 25 ++++++++
 .../Reflection/Php/Factory/Property.php       | 29 ++++++++++
 .../Php/Factory/PropertyIterator.php          | 58 +++++++++++++++++++
 .../Reflection/Php/Visibility.php             |  2 +-
 tests/integration/AsyncAccessorTest.php       | 51 ++++++++++++++++
 .../integration/data/PHP84/AsyncAccessor.php  |  8 +++
 .../data/PHP84/AsyncPropertyPromotion.php     | 10 ++++
 10 files changed, 245 insertions(+), 4 deletions(-)
 create mode 100644 src/phpDocumentor/Reflection/Php/AsyncVisibility.php
 create mode 100644 tests/integration/AsyncAccessorTest.php
 create mode 100644 tests/integration/data/PHP84/AsyncAccessor.php
 create mode 100644 tests/integration/data/PHP84/AsyncPropertyPromotion.php

diff --git a/composer.json b/composer.json
index 493298b6..b1076390 100644
--- a/composer.json
+++ b/composer.json
@@ -12,9 +12,11 @@
     "autoload-dev": {
         "psr-4": {
             "phpDocumentor\\": [
-                "tests/integration/",
                 "tests/unit/phpDocumentor",
                 "tests/bench/"
+            ],
+            "phpDocumentor\\Reflection\\": [
+                "tests/integration"
             ]
         }
     },
@@ -30,6 +32,7 @@
     "require-dev": {
         "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
         "doctrine/coding-standard": "^13.0",
+        "eliashaeussler/phpunit-attributes": "^1.7",
         "mikey179/vfsstream": "~1.2",
         "mockery/mockery": "~1.6.0",
         "phpspec/prophecy-phpunit": "^2.0",
diff --git a/composer.lock b/composer.lock
index 495ea07d..ec986e6c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "5788cdf4f715f4cc6ba2fcd316591b63",
+    "content-hash": "cc50be668bb2fcb33acea0a0ea940702",
     "packages": [
         {
             "name": "doctrine/deprecations",
@@ -678,6 +678,60 @@
             ],
             "time": "2022-12-30T00:23:10+00:00"
         },
+        {
+            "name": "eliashaeussler/phpunit-attributes",
+            "version": "1.7.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/eliashaeussler/phpunit-attributes.git",
+                "reference": "4c0832e0c7577500bd00ce570b23812abbdf95c2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/eliashaeussler/phpunit-attributes/zipball/4c0832e0c7577500bd00ce570b23812abbdf95c2",
+                "reference": "4c0832e0c7577500bd00ce570b23812abbdf95c2",
+                "shasum": ""
+            },
+            "require": {
+                "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+                "phpunit/phpunit": "^10.5.35 || ^11.4 || ^12.0"
+            },
+            "require-dev": {
+                "armin/editorconfig-cli": "^1.8 || ^2.0",
+                "eliashaeussler/php-cs-fixer-config": "^2.0",
+                "eliashaeussler/phpstan-config": "^2.5.1",
+                "eliashaeussler/rector-config": "^3.0",
+                "ergebnis/composer-normalize": "^2.30",
+                "phpstan/extension-installer": "^1.2",
+                "phpstan/phpstan-phpunit": "^2.0",
+                "phpunit/phpcov": "^9.0 || ^10.0 || ^11.0",
+                "symfony/console": "^6.4 || ^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "EliasHaeussler\\PHPUnitAttributes\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "GPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Elias Häußler",
+                    "email": "elias@haeussler.dev",
+                    "homepage": "https://haeussler.dev",
+                    "role": "Maintainer"
+                }
+            ],
+            "description": "Provides additional attributes for tests with PHPUnit",
+            "support": {
+                "issues": "https://github.com/eliashaeussler/phpunit-attributes/issues",
+                "source": "https://github.com/eliashaeussler/phpunit-attributes/tree/1.7.0"
+            },
+            "time": "2025-03-07T22:01:25+00:00"
+        },
         {
             "name": "hamcrest/hamcrest-php",
             "version": "v2.0.1",
@@ -2968,5 +3022,5 @@
     "platform-overrides": {
         "php": "8.1.0"
     },
-    "plugin-api-version": "2.3.0"
+    "plugin-api-version": "2.6.0"
 }
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index a7903131..cbc56b39 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" colors="true" bootstrap="vendor/autoload.php" beStrictAboutOutputDuringTests="true" beStrictAboutChangesToGlobalState="true" cacheDirectory=".phpunit.cache" requireCoverageMetadata="true" beStrictAboutCoverageMetadata="false">
+  <extensions>
+    <bootstrap class="EliasHaeussler\PHPUnitAttributes\PHPUnitAttributesExtension" />
+  </extensions>
   <coverage>
     <report>
       <clover outputFile="build/logs/clover.xml"/>
diff --git a/src/phpDocumentor/Reflection/Php/AsyncVisibility.php b/src/phpDocumentor/Reflection/Php/AsyncVisibility.php
new file mode 100644
index 00000000..64cd3e6f
--- /dev/null
+++ b/src/phpDocumentor/Reflection/Php/AsyncVisibility.php
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace phpDocumentor\Reflection\Php;
+
+final class AsyncVisibility extends Visibility
+{
+    public function __construct(
+        private Visibility $readVisibility,
+        private Visibility $writeVisibility,
+    ) {
+        parent::__construct((string) $readVisibility);
+    }
+
+    public function getReadVisibility(): Visibility
+    {
+        return $this->readVisibility;
+    }
+
+    public function getWriteVisibility(): Visibility
+    {
+        return $this->writeVisibility;
+    }
+}
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Property.php b/src/phpDocumentor/Reflection/Php/Factory/Property.php
index bbc31312..9f1db228 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Property.php
@@ -15,6 +15,7 @@
 
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Location;
+use phpDocumentor\Reflection\Php\AsyncVisibility;
 use phpDocumentor\Reflection\Php\Class_;
 use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\Property as PropertyDescriptor;
@@ -107,6 +108,21 @@ protected function doCreate(
      * Converts the visibility of the property to a valid Visibility object.
      */
     private function buildVisibility(PropertyIterator $node): Visibility
+    {
+        if ($node->isAsync() === false) {
+            return $this->buildReadVisibility($node);
+        }
+
+        $readVisibility = $this->buildReadVisibility($node);
+        $writeVisibility = $this->buildWriteVisibility($node);
+
+        return new AsyncVisibility(
+            $readVisibility,
+            $writeVisibility,
+        );
+    }
+
+    private function buildReadVisibility(PropertyIterator $node): Visibility
     {
         if ($node->isPrivate()) {
             return new Visibility(Visibility::PRIVATE_);
@@ -118,4 +134,17 @@ private function buildVisibility(PropertyIterator $node): Visibility
 
         return new Visibility(Visibility::PUBLIC_);
     }
+
+    private function buildWriteVisibility(PropertyIterator $node): Visibility
+    {
+        if ($node->isPrivateSet()) {
+            return new Visibility(Visibility::PRIVATE_);
+        }
+
+        if ($node->isProtectedSet()) {
+            return new Visibility(Visibility::PROTECTED_);
+        }
+
+        return new Visibility(Visibility::PUBLIC_);
+    }
 }
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
index 45b86d82..efeadeb8 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
@@ -22,6 +22,8 @@
 use PhpParser\Node\Name;
 use PhpParser\Node\Stmt\Property as PropertyNode;
 
+use function method_exists;
+
 /**
  * This class acts like a combination of a PropertyNode and PropertyProperty to
  * be able to create property descriptors using a normal strategy.
@@ -48,6 +50,20 @@ public function isPublic(): bool
         return $this->property->isPublic();
     }
 
+    /**
+     * Returns async accessor value for current property.
+     *
+     * This method will return the same value as {@see self::isPublic()} when your phpparser version is < 5.2
+     */
+    public function isPublicSet(): bool
+    {
+        if ($this->isAsync() === false) {
+            return $this->isPublic();
+        }
+
+        return $this->property->isPublic();
+    }
+
     /**
      * returns true when the current property is protected.
      */
@@ -56,6 +72,20 @@ public function isProtected(): bool
         return $this->property->isProtected();
     }
 
+    /**
+     * Returns async accessor value for current property.
+     *
+     * This method will return the same value as {@see self::isProtected()} when your phpparser version is < 5.2
+     */
+    public function isProtectedSet(): bool
+    {
+        if ($this->isAsync() === false) {
+            return $this->isProtected();
+        }
+
+        return $this->property->isProtectedSet();
+    }
+
     /**
      * returns true when the current property is private.
      */
@@ -64,6 +94,34 @@ public function isPrivate(): bool
         return $this->property->isPrivate();
     }
 
+    /**
+     * Returns async accessor value for current property.
+     *
+     * This method will return the same value as {@see self::isPrivate()} when your phpparser version is < 5.2
+     */
+    public function isPrivateSet(): bool
+    {
+        if ($this->isAsync() === false) {
+            return $this->isPrivate();
+        }
+
+        return $this->property->isPrivateSet();
+    }
+
+    /**
+     * Returns true when current property has async accessors.
+     *
+     * This method will always return false when your phpparser version is < 5.2
+     */
+    public function isAsync(): bool
+    {
+        if (method_exists($this->property, 'isPrivateSet') === false) {
+            return false;
+        }
+
+        return $this->property->isPublicSet() || $this->property->isProtected() || $this->property->isPrivateSet();
+    }
+
     /**
      * returns true when the current property is static.
      */
diff --git a/src/phpDocumentor/Reflection/Php/Visibility.php b/src/phpDocumentor/Reflection/Php/Visibility.php
index 6b1e3e4b..9715c8af 100644
--- a/src/phpDocumentor/Reflection/Php/Visibility.php
+++ b/src/phpDocumentor/Reflection/Php/Visibility.php
@@ -22,7 +22,7 @@
 /**
  * Value object for visibility values of classes, properties, ect.
  */
-final class Visibility implements Stringable
+class Visibility implements Stringable
 {
     /**
      * constant for protected visibility
diff --git a/tests/integration/AsyncAccessorTest.php b/tests/integration/AsyncAccessorTest.php
new file mode 100644
index 00000000..1c67e009
--- /dev/null
+++ b/tests/integration/AsyncAccessorTest.php
@@ -0,0 +1,51 @@
+<?php
+
+declare(strict_types=1);
+
+namespace phpDocumentor\Reflection;
+
+use EliasHaeussler\PHPUnitAttributes\Attribute\RequiresPackage;
+use phpDocumentor\Reflection\File\LocalFile;
+use phpDocumentor\Reflection\Php\ProjectFactory;
+use PHPUnit\Framework\TestCase;
+
+/** @coversNothing */
+#[RequiresPackage('nikic/php-parser', '>= 5.2')]
+final class AsyncAccessorTest extends TestCase
+{
+    public function testAsyncAccessor(): void
+    {
+        $file = __DIR__ . '/data/PHP84/AsyncAccessor.php';
+        $projectFactory = ProjectFactory::createInstance();
+        $project = $projectFactory->create('My project', [new LocalFile($file)]);
+
+        $class = $project->getFiles()[$file]->getClasses()['\AsyncAccessor'];
+
+        self::assertEquals(
+            'public',
+            $class->getProperties()['\AsyncAccessor::$pizza']->getVisibility()->getReadVisibility(),
+        );
+        self::assertEquals(
+            'private',
+            $class->getProperties()['\AsyncAccessor::$pizza']->getVisibility()->getWriteVisibility(),
+        );
+    }
+
+    public function testAsyncPropertyPromotion(): void
+    {
+        $file = __DIR__ . '/data/PHP84/AsyncPropertyPromotion.php';
+        $projectFactory = ProjectFactory::createInstance();
+        $project = $projectFactory->create('My project', [new LocalFile($file)]);
+
+        $class = $project->getFiles()[$file]->getClasses()['\AsyncPropertyPromotion'];
+
+        self::assertEquals(
+            'public',
+            $class->getProperties()['\AsyncPropertyPromotion::$pizza']->getVisibility()->getReadVisibility(),
+        );
+        self::assertEquals(
+            'protected',
+            $class->getProperties()['\AsyncPropertyPromotion::$pizza']->getVisibility()->getWriteVisibility(),
+        );
+    }
+}
diff --git a/tests/integration/data/PHP84/AsyncAccessor.php b/tests/integration/data/PHP84/AsyncAccessor.php
new file mode 100644
index 00000000..7556d532
--- /dev/null
+++ b/tests/integration/data/PHP84/AsyncAccessor.php
@@ -0,0 +1,8 @@
+<?php
+
+declare(strict_types=1);
+
+class AsyncAccessor
+{
+    private(set) \Pizza $pizza;
+}
diff --git a/tests/integration/data/PHP84/AsyncPropertyPromotion.php b/tests/integration/data/PHP84/AsyncPropertyPromotion.php
new file mode 100644
index 00000000..01860592
--- /dev/null
+++ b/tests/integration/data/PHP84/AsyncPropertyPromotion.php
@@ -0,0 +1,10 @@
+<?php
+
+declare(strict_types=1);
+
+class AsyncPropertyPromotion
+{
+    public function __construct(
+        protected(set) Pizza $pizza,
+    ) {}
+}

From 5d16666d9fe6b23b5ce1b88f7ac6b83b6de18784 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Tue, 15 Apr 2025 22:26:57 +0200
Subject: [PATCH 108/129] Add support for async promoted properties

---
 composer.json                                 |  3 ++
 src/php-parser/Modifiers.php                  | 31 +++++++++++++++++
 .../Php/Factory/ConstructorPromotion.php      | 34 ++++++++++++++++---
 .../Types/NamespaceNodeToContext.php          |  2 +-
 .../Middleware/ChainFactoryTest.php           |  2 +-
 5 files changed, 66 insertions(+), 6 deletions(-)
 create mode 100644 src/php-parser/Modifiers.php

diff --git a/composer.json b/composer.json
index b1076390..d29a3676 100644
--- a/composer.json
+++ b/composer.json
@@ -5,6 +5,9 @@
     "homepage": "http://www.phpdoc.org",
     "license": "MIT",
     "autoload": {
+        "files": [
+            "src/php-parser/Modifiers.php"
+        ],
         "psr-4": {
             "phpDocumentor\\": "src/phpDocumentor"
         }
diff --git a/src/php-parser/Modifiers.php b/src/php-parser/Modifiers.php
new file mode 100644
index 00000000..f4e7f000
--- /dev/null
+++ b/src/php-parser/Modifiers.php
@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+
+namespace PhpParser;
+
+use Composer\InstalledVersions;
+
+use function strpos;
+
+if (strpos(InstalledVersions::getVersion('nikic/php-parser'), '4') === 0) {
+    /**
+     * Modifiers used (as a bit mask) by various flags subnodes, for example on classes, functions,
+     * properties and constants.
+     */
+    final class Modifiers
+    {
+        public const PUBLIC = 1;
+        public const PROTECTED = 2;
+        public const PRIVATE = 4;
+        public const STATIC = 8;
+        public const ABSTRACT = 16;
+        public const FINAL = 32;
+        public const READONLY = 64;
+        public const PUBLIC_SET = 128;
+        public const PROTECTED_SET = 256;
+        public const PRIVATE_SET = 512;
+
+        public const VISIBILITY_SET_MASK = self::PUBLIC_SET | self::PROTECTED_SET | self::PRIVATE_SET;
+    }
+}
diff --git a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
index 446122f8..e7d27fd2 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
@@ -8,15 +8,16 @@
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
+use phpDocumentor\Reflection\Php\AsyncVisibility;
 use phpDocumentor\Reflection\Php\Class_ as ClassElement;
 use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategy;
 use phpDocumentor\Reflection\Php\Property;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use phpDocumentor\Reflection\Php\Visibility;
+use PhpParser\Modifiers;
 use PhpParser\Node\Expr\Variable;
 use PhpParser\Node\Param;
-use PhpParser\Node\Stmt\Class_;
 use PhpParser\Node\Stmt\ClassMethod;
 use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
 use Webmozart\Assert\Assert;
@@ -91,11 +92,36 @@ private function promoteParameterToProperty(ContextStack $context, StrategyConta
 
     private function buildPropertyVisibilty(int $flags): Visibility
     {
-        if ((bool) ($flags & Class_::MODIFIER_PRIVATE) === true) {
+        if ((bool) ($flags & Modifiers::VISIBILITY_SET_MASK) !== false) {
+            return new AsyncVisibility(
+                $this->buildReadVisibility($flags),
+                $this->buildWriteVisibility($flags),
+            );
+        }
+
+        return $this->buildReadVisibility($flags);
+    }
+
+    private function buildReadVisibility(int $flags): Visibility
+    {
+        if ((bool) ($flags & Modifiers::PRIVATE) === true) {
+            return new Visibility(Visibility::PRIVATE_);
+        }
+
+        if ((bool) ($flags & Modifiers::PROTECTED) === true) {
+            return new Visibility(Visibility::PROTECTED_);
+        }
+
+        return new Visibility(Visibility::PUBLIC_);
+    }
+
+    private function buildWriteVisibility(int $flags): Visibility
+    {
+        if ((bool) ($flags & Modifiers::PRIVATE_SET) === true) {
             return new Visibility(Visibility::PRIVATE_);
         }
 
-        if ((bool) ($flags & Class_::MODIFIER_PROTECTED) === true) {
+        if ((bool) ($flags & Modifiers::PROTECTED_SET) === true) {
             return new Visibility(Visibility::PROTECTED_);
         }
 
@@ -104,6 +130,6 @@ private function buildPropertyVisibilty(int $flags): Visibility
 
     private function readOnly(int $flags): bool
     {
-        return (bool) ($flags & Class_::MODIFIER_READONLY) === true;
+        return (bool) ($flags & Modifiers::READONLY) === true;
     }
 }
diff --git a/src/phpDocumentor/Reflection/Types/NamespaceNodeToContext.php b/src/phpDocumentor/Reflection/Types/NamespaceNodeToContext.php
index 012e1fad..a79a6934 100644
--- a/src/phpDocumentor/Reflection/Types/NamespaceNodeToContext.php
+++ b/src/phpDocumentor/Reflection/Types/NamespaceNodeToContext.php
@@ -58,7 +58,7 @@ private function classAlikeUses(Namespace_ $namespace): array
             static fn (Node $node): bool => (
                     $node instanceof Use_
                     || $node instanceof GroupUse
-                ) && in_array($node->type, [Use_::TYPE_UNKNOWN, Use_::TYPE_NORMAL], true)
+                ) && in_array($node->type, [Use_::TYPE_UNKNOWN, Use_::TYPE_NORMAL], true),
         );
     }
 }
diff --git a/tests/unit/phpDocumentor/Reflection/Middleware/ChainFactoryTest.php b/tests/unit/phpDocumentor/Reflection/Middleware/ChainFactoryTest.php
index 6a071ff4..e5afad9c 100644
--- a/tests/unit/phpDocumentor/Reflection/Middleware/ChainFactoryTest.php
+++ b/tests/unit/phpDocumentor/Reflection/Middleware/ChainFactoryTest.php
@@ -53,7 +53,7 @@ public function testItThrowsAnExceptionIfAnythingOtherThanAMiddlewareIsPassed():
 
         ChainFactory::createExecutionChain(
             [$middleware],
-            static fn (): stdClass => new stdClass()
+            static fn (): stdClass => new stdClass(),
         );
     }
 

From 3c24e40d3b80fab4abee37637c1570d236190bf5 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Tue, 15 Apr 2025 23:07:10 +0200
Subject: [PATCH 109/129] Fix test assets autoloading

---
 tests/integration/{Reflection => }/Metadata/Hook.php         | 0
 tests/integration/{Reflection => }/Metadata/HookStrategy.php | 0
 tests/integration/{Reflection => }/Metadata/example.php      | 0
 tests/integration/MetadataTest.php                           | 2 +-
 4 files changed, 1 insertion(+), 1 deletion(-)
 rename tests/integration/{Reflection => }/Metadata/Hook.php (100%)
 rename tests/integration/{Reflection => }/Metadata/HookStrategy.php (100%)
 rename tests/integration/{Reflection => }/Metadata/example.php (100%)

diff --git a/tests/integration/Reflection/Metadata/Hook.php b/tests/integration/Metadata/Hook.php
similarity index 100%
rename from tests/integration/Reflection/Metadata/Hook.php
rename to tests/integration/Metadata/Hook.php
diff --git a/tests/integration/Reflection/Metadata/HookStrategy.php b/tests/integration/Metadata/HookStrategy.php
similarity index 100%
rename from tests/integration/Reflection/Metadata/HookStrategy.php
rename to tests/integration/Metadata/HookStrategy.php
diff --git a/tests/integration/Reflection/Metadata/example.php b/tests/integration/Metadata/example.php
similarity index 100%
rename from tests/integration/Reflection/Metadata/example.php
rename to tests/integration/Metadata/example.php
diff --git a/tests/integration/MetadataTest.php b/tests/integration/MetadataTest.php
index a15825b0..e9732105 100644
--- a/tests/integration/MetadataTest.php
+++ b/tests/integration/MetadataTest.php
@@ -15,7 +15,7 @@
  */
 final class MetadataTest extends TestCase
 {
-    const FILE = __DIR__ . '/Reflection/Metadata/example.php';
+    const FILE = __DIR__ . '/Metadata/example.php';
 
     public function testCustomMetadata(): void
     {

From 4f00d4ae00dac5aac6429956a8df311878e5e2f2 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Tue, 15 Apr 2025 23:15:15 +0200
Subject: [PATCH 110/129] Add dependency on composer runtime

---
 composer.json | 1 +
 composer.lock | 5 +++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/composer.json b/composer.json
index d29a3676..5240c509 100644
--- a/composer.json
+++ b/composer.json
@@ -25,6 +25,7 @@
     },
     "require": {
         "php": "8.1.*|8.2.*|8.3.*|8.4.*",
+        "composer-runtime-api": "^2",
         "nikic/php-parser": "~4.18 || ^5.0",
         "phpdocumentor/reflection-common": "^2.1",
         "phpdocumentor/reflection-docblock": "^5",
diff --git a/composer.lock b/composer.lock
index ec986e6c..6b2143c9 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "cc50be668bb2fcb33acea0a0ea940702",
+    "content-hash": "febb226458a175a8889e92fc89e662ce",
     "packages": [
         {
             "name": "doctrine/deprecations",
@@ -3016,7 +3016,8 @@
     "prefer-stable": false,
     "prefer-lowest": false,
     "platform": {
-        "php": "8.1.*|8.2.*|8.3.*|8.4.*"
+        "php": "8.1.*|8.2.*|8.3.*|8.4.*",
+        "composer-runtime-api": "^2"
     },
     "platform-dev": [],
     "platform-overrides": {

From df4b1b51b9f2bbb56521dd5f451fcf1d032370a8 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Tue, 15 Apr 2025 23:20:21 +0200
Subject: [PATCH 111/129] Fix static analisys

---
 phpstan.neon                                                    | 1 -
 src/php-parser/Modifiers.php                                    | 2 +-
 .../Reflection/NodeVisitor/ElementNameResolver.php              | 1 +
 3 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/phpstan.neon b/phpstan.neon
index 687d5bd5..71dffd7c 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -2,7 +2,6 @@ parameters:
     paths:
       - src
 
-    checkGenericClassInNonGenericObjectType: false
     level: max
     ignoreErrors:
 
diff --git a/src/php-parser/Modifiers.php b/src/php-parser/Modifiers.php
index f4e7f000..69ac740b 100644
--- a/src/php-parser/Modifiers.php
+++ b/src/php-parser/Modifiers.php
@@ -8,7 +8,7 @@
 
 use function strpos;
 
-if (strpos(InstalledVersions::getVersion('nikic/php-parser'), '4') === 0) {
+if (strpos(InstalledVersions::getVersion('nikic/php-parser') ?? '', '4') === 0) {
     /**
      * Modifiers used (as a bit mask) by various flags subnodes, for example on classes, functions,
      * properties and constants.
diff --git a/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php b/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php
index 9da5b4aa..c775233b 100644
--- a/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php
+++ b/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php
@@ -34,6 +34,7 @@
 
 final class ElementNameResolver extends NodeVisitorAbstract
 {
+    /** @var SplDoublyLinkedList<Node\Identifier|string|null> */
     private SplDoublyLinkedList $parts;
 
     public function __construct()

From 0e1af90db95e82ff3909ac34b3862c227518c575 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 5 May 2025 09:17:26 +0000
Subject: [PATCH 112/129] Bump symfony/polyfill-php80 from 1.31.0 to 1.32.0

Bumps [symfony/polyfill-php80](https://github.com/symfony/polyfill-php80) from 1.31.0 to 1.32.0.
- [Commits](https://github.com/symfony/polyfill-php80/compare/v1.31.0...v1.32.0)

---
updated-dependencies:
- dependency-name: symfony/polyfill-php80
  dependency-version: 1.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/composer.lock b/composer.lock
index 6b2143c9..3eb6738b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -336,16 +336,16 @@
         },
         {
             "name": "symfony/polyfill-php80",
-            "version": "v1.31.0",
+            "version": "v1.32.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php80.git",
-                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
+                "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
-                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+                "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
                 "shasum": ""
             },
             "require": {
@@ -354,8 +354,8 @@
             "type": "library",
             "extra": {
                 "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
@@ -396,7 +396,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
             },
             "funding": [
                 {
@@ -412,7 +412,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-09-09T11:45:10+00:00"
+            "time": "2025-01-02T08:10:11+00:00"
         },
         {
             "name": "webmozart/assert",
@@ -3023,5 +3023,5 @@
     "platform-overrides": {
         "php": "8.1.0"
     },
-    "plugin-api-version": "2.6.0"
+    "plugin-api-version": "2.3.0"
 }

From 6f70bb146093c294458025ee26cba2719e4ab24b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 12 May 2025 08:21:42 +0000
Subject: [PATCH 113/129] Bump dependabot/fetch-metadata from 2.3.0 to 2.4.0

Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2.3.0 to 2.4.0.
- [Release notes](https://github.com/dependabot/fetch-metadata/releases)
- [Commits](https://github.com/dependabot/fetch-metadata/compare/v2.3.0...v2.4.0)

---
updated-dependencies:
- dependency-name: dependabot/fetch-metadata
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 .github/workflows/dependabot-auto-merge.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml
index 3f0244a5..d0c1fb55 100644
--- a/.github/workflows/dependabot-auto-merge.yml
+++ b/.github/workflows/dependabot-auto-merge.yml
@@ -13,7 +13,7 @@ jobs:
     steps:
       - name: "Dependabot metadata"
         id: "metadata"
-        uses: "dependabot/fetch-metadata@v2.3.0"
+        uses: "dependabot/fetch-metadata@v2.4.0"
         with:
           github-token: "${{ secrets.GITHUB_TOKEN }}"
       - name: "Enable auto-merge for Dependabot PRs"

From c9a6db4dd0ba53328fcd5c83eaff77e16c5108c5 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 12 May 2025 08:41:48 +0000
Subject: [PATCH 114/129] Bump squizlabs/php_codesniffer from 3.12.2 to 3.13.0

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.12.2 to 3.13.0.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.12.2...3.13.0)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-version: 3.13.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 3eb6738b..13fed261 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2877,16 +2877,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.12.2",
+            "version": "3.13.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa"
+                "reference": "65ff2489553b83b4597e89c3b8b721487011d186"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa",
-                "reference": "6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/65ff2489553b83b4597e89c3b8b721487011d186",
+                "reference": "65ff2489553b83b4597e89c3b8b721487011d186",
                 "shasum": ""
             },
             "require": {
@@ -2957,7 +2957,7 @@
                     "type": "thanks_dev"
                 }
             ],
-            "time": "2025-04-13T04:10:18+00:00"
+            "time": "2025-05-11T03:36:00+00:00"
         },
         {
             "name": "theseer/tokenizer",

From 283247b68e208b28498decbe1feb3324ac9e9507 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Tue, 13 May 2025 22:24:34 +0200
Subject: [PATCH 115/129] Centralize property creation.

As property creation is getting more complex, move all complexity into
a sepatate builder class that handles everything.
---
 Makefile                                      |   6 +-
 .../Php/Factory/ConstructorPromotion.php      |  64 ++----
 .../Reflection/Php/Factory/Property.php       |  75 ++-----
 .../Php/Factory/PropertyBuilder.php           | 202 ++++++++++++++++++
 .../Php/Factory/PropertyIterator.php          |   2 +-
 .../PHP8/ConstructorPromotionTest.php         |  24 +--
 .../data/PHP8/ConstructorPromotion.php        |   4 +-
 7 files changed, 245 insertions(+), 132 deletions(-)
 create mode 100644 src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php

diff --git a/Makefile b/Makefile
index 5fd23d61..15c0e2d9 100644
--- a/Makefile
+++ b/Makefile
@@ -12,8 +12,8 @@ fix-code-style:
 
 .PHONY: static-code-analysis
 static-code-analysis: vendor ## Runs a static code analysis with phpstan/phpstan and vimeo/psalm
-	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.1-cli vendor/bin/phpstan --configuration=phpstan.neon
-	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.1-cli vendor/bin/psalm.phar
+	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.2-cli vendor/bin/phpstan --configuration=phpstan.neon
+	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.2-cli vendor/bin/psalm.phar
 
 .PHONY: test
 test: test-unit test-functional ## Runs all test suites with phpunit/phpunit
@@ -25,7 +25,7 @@ test-unit: ## Runs unit tests with phpunit/phpunit
 
 .PHONY: test-functional
 test-functional: ## Runs unit tests with phpunit/phpunit
-	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.1-cli vendor/bin/phpunit --testsuite=functional
+	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.1-cli vendor/bin/phpunit --testsuite=integration
 
 .PHONY: dependency-analysis
 dependency-analysis: vendor ## Runs a dependency analysis with maglnet/composer-require-checker
diff --git a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
index e7d27fd2..2c885957 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
@@ -8,13 +8,10 @@
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
-use phpDocumentor\Reflection\Php\AsyncVisibility;
 use phpDocumentor\Reflection\Php\Class_ as ClassElement;
 use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategy;
-use phpDocumentor\Reflection\Php\Property;
 use phpDocumentor\Reflection\Php\StrategyContainer;
-use phpDocumentor\Reflection\Php\Visibility;
 use PhpParser\Modifiers;
 use PhpParser\Node\Expr\Variable;
 use PhpParser\Node\Param;
@@ -67,17 +64,18 @@ private function promoteParameterToProperty(ContextStack $context, StrategyConta
         Assert::isInstanceOf($methodContainer, ClassElement::class);
         Assert::isInstanceOf($param->var, Variable::class);
 
-        $property = new Property(
-            new Fqsen($methodContainer->getFqsen() . '::$' . (string) $param->var->name),
-            $this->buildPropertyVisibilty($param->flags),
-            $this->createDocBlock($param->getDocComment(), $context->getTypeContext()),
-            $param->default !== null ? $this->valueConverter->prettyPrintExpr($param->default) : null,
-            false,
-            new Location($param->getLine()),
-            new Location($param->getEndLine()),
-            (new Type())->fromPhpParser($param->type),
-            $this->readOnly($param->flags),
-        );
+        $property = PropertyBuilder::create(
+            $this->valueConverter,
+        )->fqsen(new Fqsen($methodContainer->getFqsen() . '::$' . (string) $param->var->name))
+            ->visibility($param)
+            ->type($param->type)
+            ->docblock($this->createDocBlock($param->getDocComment(), $context->getTypeContext()))
+            ->default($param->default)
+            ->readOnly($this->readOnly($param->flags))
+            ->static(false)
+            ->startLocation(new Location($param->getLine(), $param->getStartFilePos()))
+            ->endLocation(new Location($param->getEndLine(), $param->getEndFilePos()))
+            ->build();
 
         foreach ($this->reducers as $reducer) {
             $property = $reducer->reduce($context, $param, $strategies, $property);
@@ -90,44 +88,6 @@ private function promoteParameterToProperty(ContextStack $context, StrategyConta
         $methodContainer->addProperty($property);
     }
 
-    private function buildPropertyVisibilty(int $flags): Visibility
-    {
-        if ((bool) ($flags & Modifiers::VISIBILITY_SET_MASK) !== false) {
-            return new AsyncVisibility(
-                $this->buildReadVisibility($flags),
-                $this->buildWriteVisibility($flags),
-            );
-        }
-
-        return $this->buildReadVisibility($flags);
-    }
-
-    private function buildReadVisibility(int $flags): Visibility
-    {
-        if ((bool) ($flags & Modifiers::PRIVATE) === true) {
-            return new Visibility(Visibility::PRIVATE_);
-        }
-
-        if ((bool) ($flags & Modifiers::PROTECTED) === true) {
-            return new Visibility(Visibility::PROTECTED_);
-        }
-
-        return new Visibility(Visibility::PUBLIC_);
-    }
-
-    private function buildWriteVisibility(int $flags): Visibility
-    {
-        if ((bool) ($flags & Modifiers::PRIVATE_SET) === true) {
-            return new Visibility(Visibility::PRIVATE_);
-        }
-
-        if ((bool) ($flags & Modifiers::PROTECTED_SET) === true) {
-            return new Visibility(Visibility::PROTECTED_);
-        }
-
-        return new Visibility(Visibility::PUBLIC_);
-    }
-
     private function readOnly(int $flags): bool
     {
         return (bool) ($flags & Modifiers::READONLY) === true;
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Property.php b/src/phpDocumentor/Reflection/Php/Factory/Property.php
index 9f1db228..8dc0b9cd 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Property.php
@@ -15,13 +15,11 @@
 
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Location;
-use phpDocumentor\Reflection\Php\AsyncVisibility;
 use phpDocumentor\Reflection\Php\Class_;
 use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\Property as PropertyDescriptor;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use phpDocumentor\Reflection\Php\Trait_;
-use phpDocumentor\Reflection\Php\Visibility;
 use PhpParser\Node\Stmt\Property as PropertyNode;
 use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
 use Webmozart\Assert\Assert;
@@ -73,22 +71,19 @@ protected function doCreate(
 
         $iterator = new PropertyIterator($object);
         foreach ($iterator as $stmt) {
-            $default = $iterator->getDefault();
-            if ($default !== null) {
-                $default = $this->valueConverter->prettyPrintExpr($default);
-            }
-
-            $property = new PropertyDescriptor(
-                $stmt->getFqsen(),
-                $this->buildVisibility($stmt),
-                $this->createDocBlock($stmt->getDocComment(), $context->getTypeContext()),
-                $default,
-                $stmt->isStatic(),
-                new Location($stmt->getLine()),
-                new Location($stmt->getEndLine()),
-                (new Type())->fromPhpParser($stmt->getType()),
-                $stmt->isReadonly(),
-            );
+            $property = PropertyBuilder::create(
+                $this->valueConverter,
+            )
+                ->fqsen($stmt->getFqsen())
+                ->visibility($stmt)
+                ->type($stmt->getType())
+                ->docblock($this->createDocBlock($stmt->getDocComment(), $context->getTypeContext()))
+                ->default($iterator->getDefault())
+                ->static($stmt->isStatic())
+                ->startLocation(new Location($stmt->getLine()))
+                ->endLocation(new Location($stmt->getEndLine()))
+                ->readOnly($stmt->isReadonly())
+                ->build();
 
             foreach ($this->reducers as $reducer) {
                 $property = $reducer->reduce($context, $object, $strategies, $property);
@@ -103,48 +98,4 @@ protected function doCreate(
 
         return null;
     }
-
-    /**
-     * Converts the visibility of the property to a valid Visibility object.
-     */
-    private function buildVisibility(PropertyIterator $node): Visibility
-    {
-        if ($node->isAsync() === false) {
-            return $this->buildReadVisibility($node);
-        }
-
-        $readVisibility = $this->buildReadVisibility($node);
-        $writeVisibility = $this->buildWriteVisibility($node);
-
-        return new AsyncVisibility(
-            $readVisibility,
-            $writeVisibility,
-        );
-    }
-
-    private function buildReadVisibility(PropertyIterator $node): Visibility
-    {
-        if ($node->isPrivate()) {
-            return new Visibility(Visibility::PRIVATE_);
-        }
-
-        if ($node->isProtected()) {
-            return new Visibility(Visibility::PROTECTED_);
-        }
-
-        return new Visibility(Visibility::PUBLIC_);
-    }
-
-    private function buildWriteVisibility(PropertyIterator $node): Visibility
-    {
-        if ($node->isPrivateSet()) {
-            return new Visibility(Visibility::PRIVATE_);
-        }
-
-        if ($node->isProtectedSet()) {
-            return new Visibility(Visibility::PROTECTED_);
-        }
-
-        return new Visibility(Visibility::PUBLIC_);
-    }
 }
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
new file mode 100644
index 00000000..87e1c732
--- /dev/null
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
@@ -0,0 +1,202 @@
+<?php
+
+declare(strict_types=1);
+
+namespace phpDocumentor\Reflection\Php\Factory;
+
+use phpDocumentor\Reflection\DocBlock;
+use phpDocumentor\Reflection\Fqsen;
+use phpDocumentor\Reflection\Location;
+use phpDocumentor\Reflection\Php\AsyncVisibility;
+use phpDocumentor\Reflection\Php\Property as PropertyElement;
+use phpDocumentor\Reflection\Php\Visibility;
+use PhpParser\Modifiers;
+use PhpParser\Node\ComplexType;
+use PhpParser\Node\Expr;
+use PhpParser\Node\Identifier;
+use PhpParser\Node\Name;
+use PhpParser\Node\Param;
+use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
+
+use function method_exists;
+
+/**
+ * This class is responsible for building a property element from a PhpParser node.
+ *
+ * @internal
+ */
+final class PropertyBuilder
+{
+    private Fqsen $fqsen;
+    private Visibility $visibility;
+    private bool $readOnly = false;
+    private Identifier|Name|ComplexType|null $type;
+    private DocBlock|null $docblock;
+    private PrettyPrinter $valueConverter;
+    private Expr|null $default;
+    private bool $static;
+    private Location $startLocation;
+    private Location $endLocation;
+
+    private function __construct()
+    {
+    }
+
+    public static function create(PrettyPrinter $valueConverter): self
+    {
+        $instance = new self();
+        $instance->valueConverter = $valueConverter;
+
+        return $instance;
+    }
+
+    public function fqsen(Fqsen $fqsen): self
+    {
+        $this->fqsen = $fqsen;
+
+        return $this;
+    }
+
+    public function visibility(Param|PropertyIterator $node): self
+    {
+        $this->visibility = $this->buildVisibility($node);
+
+        return $this;
+    }
+
+    public function type(Identifier|Name|ComplexType|null $type): self
+    {
+        $this->type = $type;
+
+        return $this;
+    }
+
+    public function readOnly(bool $readOnly): self
+    {
+        $this->readOnly = $readOnly;
+
+        return $this;
+    }
+
+    public function docblock(DocBlock|null $docblock): self
+    {
+        $this->docblock = $docblock;
+
+        return $this;
+    }
+
+    public function default(Expr|null $default): self
+    {
+        $this->default = $default;
+
+        return $this;
+    }
+
+    public function static(bool $static): self
+    {
+        $this->static = $static;
+
+        return $this;
+    }
+
+    public function startLocation(Location $startLocation): self
+    {
+        $this->startLocation = $startLocation;
+
+        return $this;
+    }
+
+    public function endLocation(Location $endLocation): self
+    {
+        $this->endLocation = $endLocation;
+
+        return $this;
+    }
+
+    public function build(): PropertyElement
+    {
+        return new PropertyElement(
+            $this->fqsen,
+            $this->visibility,
+            $this->docblock,
+            $this->default !== null ? $this->valueConverter->prettyPrintExpr($this->default) : null,
+            $this->static,
+            $this->startLocation,
+            $this->endLocation,
+            (new Type())->fromPhpParser($this->type),
+            $this->readOnly,
+        );
+    }
+
+    /**
+     * Returns true when current property has async accessors.
+     *
+     * This method will always return false when your phpparser version is < 5.2
+     */
+    private function isAsync(Param|PropertyIterator $node): bool
+    {
+        if (method_exists($node, 'isPrivateSet') === false) {
+            return false;
+        }
+
+        return $node->isPublicSet() || $node->isProtectedSet() || $node->isPrivateSet();
+    }
+
+    private function buildVisibility(Param|PropertyIterator $node): Visibility
+    {
+        if ($this->isAsync($node) === false) {
+            return $this->buildReadVisibility($node);
+        }
+
+        $readVisibility = $this->buildReadVisibility($node);
+        $writeVisibility = $this->buildWriteVisibility($node);
+
+        return new AsyncVisibility(
+            $readVisibility,
+            $writeVisibility,
+        );
+    }
+
+    private function buildReadVisibility(Param|PropertyIterator $node): Visibility
+    {
+        if ($node instanceof Param && method_exists($node, 'isPublic') === false) {
+            return $this->buildPromotedPropertyReadVisibility($node->flags);
+        }
+
+        if ($node->isPrivate()) {
+            return new Visibility(Visibility::PRIVATE_);
+        }
+
+        if ($node->isProtected()) {
+            return new Visibility(Visibility::PROTECTED_);
+        }
+
+        return new Visibility(Visibility::PUBLIC_);
+    }
+
+    private function buildPromotedPropertyReadVisibility(int $flags): Visibility
+    {
+        if ((bool) ($flags & Modifiers::PRIVATE) === true) {
+            return new Visibility(Visibility::PRIVATE_);
+        }
+
+        if ((bool) ($flags & Modifiers::PROTECTED) === true) {
+            return new Visibility(Visibility::PROTECTED_);
+        }
+
+        return new Visibility(Visibility::PUBLIC_);
+    }
+
+    private function buildWriteVisibility(Param|PropertyIterator $node): Visibility
+    {
+        if ($node->isPrivateSet()) {
+            return new Visibility(Visibility::PRIVATE_);
+        }
+
+        if ($node->isProtectedSet()) {
+            return new Visibility(Visibility::PROTECTED_);
+        }
+
+        return new Visibility(Visibility::PUBLIC_);
+    }
+}
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
index efeadeb8..79225e50 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
@@ -119,7 +119,7 @@ public function isAsync(): bool
             return false;
         }
 
-        return $this->property->isPublicSet() || $this->property->isProtected() || $this->property->isPrivateSet();
+        return $this->property->isPublicSet() || $this->property->isProtectedSet() || $this->property->isPrivateSet();
     }
 
     /**
diff --git a/tests/integration/PHP8/ConstructorPromotionTest.php b/tests/integration/PHP8/ConstructorPromotionTest.php
index d14b435a..46e3b84f 100644
--- a/tests/integration/PHP8/ConstructorPromotionTest.php
+++ b/tests/integration/PHP8/ConstructorPromotionTest.php
@@ -50,8 +50,8 @@ public function testPropertiesAreCreated() : void
         $class = $file->getClasses()['\\PHP8\\ConstructorPromotion'];
 
         $constructor = $this->expectedContructorMethod();
-        $constructor->addArgument(new Argument('name', new String_()));
-        $constructor->addArgument(new Argument('email', new String_(), '\'test@example.com\''));
+        $constructor->addArgument(new Argument('name', new String_(), "'default name'"));
+        $constructor->addArgument(new Argument('email', new Object_(new Fqsen('\\PHP8\\Email'))));
         $constructor->addArgument(new Argument('birth_date', new Object_(new Fqsen('\\' . \DateTimeImmutable::class))));
 
         self::assertEquals($constructor, $class->getMethods()['\PHP8\ConstructorPromotion::__construct()']);
@@ -87,7 +87,7 @@ private function expectedContructorMethod(): Method
             false,
             false,
             new Location(16, 218),
-            new Location(27, 522)
+            new Location(27, 517)
         );
         return $constructor;
     }
@@ -105,10 +105,10 @@ private function expectedNameProperty(): Property
                 ],
                 new Context('PHP8', ['DateTimeImmutable' => 'DateTimeImmutable'])
             ),
-            null,
+            "'default name'",
             false,
-            new Location(24),
-            new Location(24),
+            new Location(24, 393),
+            new Location(24, 428),
             new String_()
         );
         return $name;
@@ -120,11 +120,11 @@ private function expectedEmailProperty(): Property
             new Fqsen('\PHP8\ConstructorPromotion::$email'),
             new Visibility(Visibility::PROTECTED_),
             null,
-            '\'test@example.com\'',
+            null,
             false,
-            new Location(25),
-            new Location(25),
-            new String_()
+            new Location(25, 439),
+            new Location(25, 460),
+            new Object_(new Fqsen('\\PHP8\\Email'))
         );
         return $email;
     }
@@ -137,8 +137,8 @@ private function expectedBirthDateProperty(): Property
             null,
             null,
             false,
-            new Location(26),
-            new Location(26),
+            new Location(26, 471),
+            new Location(26, 507),
             new Object_(new Fqsen('\\' . \DateTimeImmutable::class))
         );
         return $birthDate;
diff --git a/tests/integration/data/PHP8/ConstructorPromotion.php b/tests/integration/data/PHP8/ConstructorPromotion.php
index cc1883c6..494ddbe0 100644
--- a/tests/integration/data/PHP8/ConstructorPromotion.php
+++ b/tests/integration/data/PHP8/ConstructorPromotion.php
@@ -21,8 +21,8 @@ public function __construct(
          *
          * @var string $name property description
          */
-        public string $name,
-        protected string $email = 'test@example.com',
+        public string $name = 'default name',
+        protected Email $email,
         private DateTimeImmutable $birth_date,
     ) {}
 }

From d1849f60a031b7a8fec5216530f96ce5908c361d Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Wed, 14 May 2025 00:17:24 +0200
Subject: [PATCH 116/129] First implementation of hooks

---
 .../Php/Factory/AbstractFactory.php           |  2 +-
 .../Php/Factory/ConstructorPromotion.php      |  8 +-
 .../Reflection/Php/Factory/ContextStack.php   | 11 ++-
 .../Reflection/Php/Factory/Property.php       |  8 +-
 .../Php/Factory/PropertyBuilder.php           | 98 +++++++++++++++----
 .../Php/Factory/PropertyIterator.php          | 12 +++
 .../Php/Factory/Reducer/Parameter.php         |  3 +-
 .../Reflection/Php/ProjectFactory.php         |  4 +-
 src/phpDocumentor/Reflection/Php/Property.php |  6 +-
 .../Reflection/Php/PropertyHook.php           | 94 ++++++++++++++++++
 tests/integration/PropertyHookTest.php        | 23 +++++
 tests/integration/data/PHP84/PropertyHook.php | 32 ++++++
 12 files changed, 269 insertions(+), 32 deletions(-)
 create mode 100644 src/phpDocumentor/Reflection/Php/PropertyHook.php
 create mode 100644 tests/integration/PropertyHookTest.php
 create mode 100644 tests/integration/data/PHP84/PropertyHook.php

diff --git a/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php b/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php
index 1384e5a7..6a6cdeed 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php
@@ -30,7 +30,7 @@ abstract class AbstractFactory implements ProjectFactoryStrategy
 {
     /** @param iterable<Reducer> $reducers */
     public function __construct(
-        private readonly DocBlockFactoryInterface $docBlockFactory,
+        protected readonly DocBlockFactoryInterface $docBlockFactory,
         protected readonly iterable $reducers = [],
     ) {
     }
diff --git a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
index 2c885957..c71e6b9f 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
@@ -66,16 +66,20 @@ private function promoteParameterToProperty(ContextStack $context, StrategyConta
 
         $property = PropertyBuilder::create(
             $this->valueConverter,
+            $this->docBlockFactory,
+            $strategies,
+            $this->reducers,
         )->fqsen(new Fqsen($methodContainer->getFqsen() . '::$' . (string) $param->var->name))
             ->visibility($param)
             ->type($param->type)
-            ->docblock($this->createDocBlock($param->getDocComment(), $context->getTypeContext()))
+            ->docblock($param->getDocComment())
             ->default($param->default)
             ->readOnly($this->readOnly($param->flags))
             ->static(false)
             ->startLocation(new Location($param->getLine(), $param->getStartFilePos()))
             ->endLocation(new Location($param->getEndLine(), $param->getEndFilePos()))
-            ->build();
+            ->hooks($param->hooks ?? [])
+            ->build($context);
 
         foreach ($this->reducers as $reducer) {
             $property = $reducer->reduce($context, $param, $strategies, $property);
diff --git a/src/phpDocumentor/Reflection/Php/Factory/ContextStack.php b/src/phpDocumentor/Reflection/Php/Factory/ContextStack.php
index d4c17af7..1d5878d4 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/ContextStack.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/ContextStack.php
@@ -8,6 +8,7 @@
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Php\File as FileElement;
 use phpDocumentor\Reflection\Php\Project;
+use phpDocumentor\Reflection\Php\PropertyHook;
 use phpDocumentor\Reflection\Types\Context as TypeContext;
 
 use function array_reverse;
@@ -15,14 +16,14 @@
 
 final class ContextStack
 {
-    /** @var (Element|FileElement)[] */
+    /** @var (Element|FileElement|PropertyHook)[] */
     private array $elements = [];
 
     public function __construct(private readonly Project $project, private readonly TypeContext|null $typeContext = null)
     {
     }
 
-    /** @param (Element|FileElement)[] $elements */
+    /** @param (Element|FileElement|PropertyHook)[] $elements */
     private static function createFromSelf(Project $project, TypeContext|null $typeContext, array $elements): self
     {
         $self = new self($project, $typeContext);
@@ -31,7 +32,7 @@ private static function createFromSelf(Project $project, TypeContext|null $typeC
         return $self;
     }
 
-    public function push(Element|FileElement $element): self
+    public function push(Element|FileElement|PropertyHook $element): self
     {
         $elements = $this->elements;
         $elements[] = $element;
@@ -54,7 +55,7 @@ public function getProject(): Project
         return $this->project;
     }
 
-    public function peek(): Element|FileElement
+    public function peek(): Element|FileElement|PropertyHook
     {
         $element = end($this->elements);
         if ($element === false) {
@@ -72,7 +73,7 @@ public function peek(): Element|FileElement
      *
      * @param class-string $type
      */
-    public function search(string $type): Element|FileElement|null
+    public function search(string $type): Element|FileElement|PropertyHook|null
     {
         $reverseElements = array_reverse($this->elements);
         foreach ($reverseElements as $element) {
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Property.php b/src/phpDocumentor/Reflection/Php/Factory/Property.php
index 8dc0b9cd..90470661 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Property.php
@@ -73,17 +73,21 @@ protected function doCreate(
         foreach ($iterator as $stmt) {
             $property = PropertyBuilder::create(
                 $this->valueConverter,
+                $this->docBlockFactory,
+                $strategies,
+                $this->reducers,
             )
                 ->fqsen($stmt->getFqsen())
                 ->visibility($stmt)
                 ->type($stmt->getType())
-                ->docblock($this->createDocBlock($stmt->getDocComment(), $context->getTypeContext()))
+                ->docblock($stmt->getDocComment())
                 ->default($iterator->getDefault())
                 ->static($stmt->isStatic())
                 ->startLocation(new Location($stmt->getLine()))
                 ->endLocation(new Location($stmt->getEndLine()))
                 ->readOnly($stmt->isReadonly())
-                ->build();
+                ->hooks($stmt->getHooks())
+                ->build($context);
 
             foreach ($this->reducers as $reducer) {
                 $property = $reducer->reduce($context, $object, $strategies, $property);
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
index 87e1c732..e41f89af 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
@@ -4,20 +4,27 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
-use phpDocumentor\Reflection\DocBlock;
+use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\AsyncVisibility;
+use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\Property as PropertyElement;
+use phpDocumentor\Reflection\Php\PropertyHook;
+use phpDocumentor\Reflection\Php\StrategyContainer;
 use phpDocumentor\Reflection\Php\Visibility;
+use PhpParser\Comment\Doc;
 use PhpParser\Modifiers;
 use PhpParser\Node\ComplexType;
 use PhpParser\Node\Expr;
 use PhpParser\Node\Identifier;
 use PhpParser\Node\Name;
 use PhpParser\Node\Param;
+use PhpParser\Node\PropertyHook as PropertyHookNode;
 use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
 
+use function array_filter;
+use function array_map;
 use function method_exists;
 
 /**
@@ -31,23 +38,36 @@ final class PropertyBuilder
     private Visibility $visibility;
     private bool $readOnly = false;
     private Identifier|Name|ComplexType|null $type;
-    private DocBlock|null $docblock;
-    private PrettyPrinter $valueConverter;
-    private Expr|null $default;
-    private bool $static;
+    private Doc|null $docblock = null;
+
+    private Expr|null $default = null;
+    private bool $static = false;
     private Location $startLocation;
     private Location $endLocation;
 
-    private function __construct()
-    {
+    /** @var PropertyHookNode[] */
+    private array $hooks = [];
+
+    /** @param iterable<Reducer> $reducers */
+    private function __construct(
+        private PrettyPrinter $valueConverter,
+        private DocBlockFactoryInterface $docBlockFactory,
+        private StrategyContainer $strategies,
+        private iterable $reducers,
+    ) {
+        $this->visibility = new Visibility(Visibility::PUBLIC_);
     }
 
-    public static function create(PrettyPrinter $valueConverter): self
-    {
-        $instance = new self();
-        $instance->valueConverter = $valueConverter;
-
-        return $instance;
+    /**
+     * @param iterable<Reducer> $reducers
+     */
+    public static function create(
+        PrettyPrinter $valueConverter,
+        DocBlockFactoryInterface $docBlockFactory,
+        StrategyContainer $strategies,
+        iterable $reducers,
+    ): self {
+        return new self($valueConverter, $docBlockFactory, $strategies, $reducers);
     }
 
     public function fqsen(Fqsen $fqsen): self
@@ -78,7 +98,7 @@ public function readOnly(bool $readOnly): self
         return $this;
     }
 
-    public function docblock(DocBlock|null $docblock): self
+    public function docblock(Doc|null $docblock): self
     {
         $this->docblock = $docblock;
 
@@ -113,18 +133,30 @@ public function endLocation(Location $endLocation): self
         return $this;
     }
 
-    public function build(): PropertyElement
+    /** @param PropertyHookNode[] $hooks */
+    public function hooks(array $hooks): self
+    {
+        $this->hooks = $hooks;
+
+        return $this;
+    }
+
+    public function build(ContextStack $context): PropertyElement
     {
         return new PropertyElement(
             $this->fqsen,
             $this->visibility,
-            $this->docblock,
+            $this->docblock !== null ? $this->docBlockFactory->create($this->docblock->getText(), $context->getTypeContext()) : null,
             $this->default !== null ? $this->valueConverter->prettyPrintExpr($this->default) : null,
             $this->static,
             $this->startLocation,
             $this->endLocation,
             (new Type())->fromPhpParser($this->type),
             $this->readOnly,
+            array_filter(array_map(
+                fn (PropertyHookNode $hook) => $this->buildHook($hook, $context),
+                $this->hooks,
+            )),
         );
     }
 
@@ -160,7 +192,7 @@ private function buildVisibility(Param|PropertyIterator $node): Visibility
     private function buildReadVisibility(Param|PropertyIterator $node): Visibility
     {
         if ($node instanceof Param && method_exists($node, 'isPublic') === false) {
-            return $this->buildPromotedPropertyReadVisibility($node->flags);
+            return $this->buildVisibilityFromFlags($node->flags);
         }
 
         if ($node->isPrivate()) {
@@ -174,7 +206,7 @@ private function buildReadVisibility(Param|PropertyIterator $node): Visibility
         return new Visibility(Visibility::PUBLIC_);
     }
 
-    private function buildPromotedPropertyReadVisibility(int $flags): Visibility
+    private function buildVisibilityFromFlags(int $flags): Visibility
     {
         if ((bool) ($flags & Modifiers::PRIVATE) === true) {
             return new Visibility(Visibility::PRIVATE_);
@@ -199,4 +231,34 @@ private function buildWriteVisibility(Param|PropertyIterator $node): Visibility
 
         return new Visibility(Visibility::PUBLIC_);
     }
+
+    private function buildHook(PropertyHookNode $hook, ContextStack $context): PropertyHook|null
+    {
+        $doc = $hook->getDocComment();
+
+        $result = new PropertyHook(
+            $hook->name->toString(),
+            $this->buildVisibilityFromFlags($hook->flags),
+            $doc !== null ? $this->docBlockFactory->create($doc->getText(), $context->getTypeContext()) : null,
+            $hook->isFinal(),
+            new Location($hook->getStartLine(), $hook->getStartFilePos()),
+            new Location($hook->getEndLine(), $hook->getEndFilePos()),
+        );
+
+        foreach ($this->reducers as $reducer) {
+            $result = $reducer->reduce($context, $hook, $this->strategies, $result);
+        }
+
+        if ($result === null) {
+            return $result;
+        }
+
+        $thisContext = $context->push($result);
+        foreach ($hook->getStmts() ?? [] as $stmt) {
+            $strategy = $this->strategies->findMatching($thisContext, $stmt);
+            $strategy->create($thisContext, $stmt, $this->strategies);
+        }
+
+        return $result;
+    }
 }
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
index 79225e50..a15cd9d2 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
@@ -20,9 +20,11 @@
 use PhpParser\Node\Expr;
 use PhpParser\Node\Identifier;
 use PhpParser\Node\Name;
+use PhpParser\Node\PropertyHook;
 use PhpParser\Node\Stmt\Property as PropertyNode;
 
 use function method_exists;
+use function property_exists;
 
 /**
  * This class acts like a combination of a PropertyNode and PropertyProperty to
@@ -201,6 +203,16 @@ public function getFqsen(): Fqsen
         return $this->property->props[$this->index]->getAttribute('fqsen');
     }
 
+    /** @return PropertyHook[] */
+    public function getHooks(): array
+    {
+        if (property_exists($this->property, 'hooks') === false) {
+            return [];
+        }
+
+        return $this->property->hooks;
+    }
+
     /** @link http://php.net/manual/en/iterator.current.php */
     public function current(): self
     {
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Reducer/Parameter.php b/src/phpDocumentor/Reflection/Php/Factory/Reducer/Parameter.php
index b9eb81a0..e17ab34e 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Reducer/Parameter.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Reducer/Parameter.php
@@ -9,6 +9,7 @@
 use phpDocumentor\Reflection\Php\Factory\Type;
 use phpDocumentor\Reflection\Php\Function_;
 use phpDocumentor\Reflection\Php\Method;
+use phpDocumentor\Reflection\Php\PropertyHook;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use PhpParser\Node\Expr\Variable;
 use PhpParser\Node\FunctionLike;
@@ -33,7 +34,7 @@ public function reduce(
             return $carry;
         }
 
-        if ($carry instanceof Method === false && $carry instanceof Function_ === false) {
+        if ($carry instanceof Method === false && $carry instanceof Function_ === false && $carry instanceof PropertyHook === false) {
             return null;
         }
 
diff --git a/src/phpDocumentor/Reflection/Php/ProjectFactory.php b/src/phpDocumentor/Reflection/Php/ProjectFactory.php
index 9c6c5d74..f4aa221f 100644
--- a/src/phpDocumentor/Reflection/Php/ProjectFactory.php
+++ b/src/phpDocumentor/Reflection/Php/ProjectFactory.php
@@ -85,7 +85,7 @@ public static function createInstance(): self
                 new Function_($docblockFactory, [$attributeReducer, $parameterReducer]),
                 new Interface_($docblockFactory, [$attributeReducer]),
                 $methodStrategy,
-                new Property($docblockFactory, new PrettyPrinter(), [$attributeReducer]),
+                new Property($docblockFactory, new PrettyPrinter(), [$attributeReducer, $parameterReducer]),
                 new Trait_($docblockFactory, [$attributeReducer]),
 
                 new IfStatement(),
@@ -94,7 +94,7 @@ public static function createInstance(): self
         );
 
         $strategies->addStrategy(
-            new ConstructorPromotion($methodStrategy, $docblockFactory, new PrettyPrinter(), [$attributeReducer]),
+            new ConstructorPromotion($methodStrategy, $docblockFactory, new PrettyPrinter(), [$attributeReducer, $parameterReducer]),
             1100,
         );
         $strategies->addStrategy(new Noop(), -PHP_INT_MAX);
diff --git a/src/phpDocumentor/Reflection/Php/Property.php b/src/phpDocumentor/Reflection/Php/Property.php
index 0013de93..0334a140 100644
--- a/src/phpDocumentor/Reflection/Php/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Property.php
@@ -37,7 +37,10 @@ final class Property implements Element, MetaDataContainerInterface, AttributeCo
 
     private readonly Location $endLocation;
 
-    /** @param Visibility|null $visibility when null is provided a default 'public' is set. */
+    /**
+     * @param Visibility|null $visibility when null is provided a default 'public' is set.
+     * @param PropertyHook[] $hooks
+     */
     public function __construct(
         private readonly Fqsen $fqsen,
         Visibility|null $visibility = null,
@@ -48,6 +51,7 @@ public function __construct(
         Location|null $endLocation = null,
         private readonly Type|null $type = null,
         private readonly bool $readOnly = false,
+        private readonly array $hooks = [],
     ) {
         $this->visibility = $visibility ?: new Visibility('public');
         $this->location = $location ?: new Location(-1);
diff --git a/src/phpDocumentor/Reflection/Php/PropertyHook.php b/src/phpDocumentor/Reflection/Php/PropertyHook.php
new file mode 100644
index 00000000..6009c620
--- /dev/null
+++ b/src/phpDocumentor/Reflection/Php/PropertyHook.php
@@ -0,0 +1,94 @@
+<?php
+
+declare(strict_types=1);
+
+namespace phpDocumentor\Reflection\Php;
+
+use phpDocumentor\Reflection\DocBlock;
+use phpDocumentor\Reflection\Location;
+use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
+
+final class PropertyHook implements AttributeContainer, MetaDataContainerInterface
+{
+    use MetadataContainer;
+    use HasAttributes;
+
+    /** @var Argument[] */
+    private array $arguments = [];
+
+    private readonly Location $location;
+
+    private readonly Location $endLocation;
+
+    public function __construct(
+        private readonly string $name,
+        private readonly Visibility $visibility,
+        private readonly DocBlock|null $docBlock = null,
+        private readonly bool $final = false,
+        Location|null $location = null,
+        Location|null $endLocation = null,
+    ) {
+        $this->location = $location ?? new Location(-1);
+        $this->endLocation = $endLocation ?? new Location(-1);
+    }
+
+    /**
+     * Returns true when this hook is final. Otherwise, returns false.
+     */
+    public function isFinal(): bool
+    {
+        return $this->final;
+    }
+
+    /**
+     * Returns the Visibility of this hook.
+     */
+    public function getVisibility(): Visibility|null
+    {
+        return $this->visibility;
+    }
+
+    /**
+     * Returns the arguments of this hook.
+     *
+     * @return Argument[]
+     */
+    public function getArguments(): array
+    {
+        return $this->arguments;
+    }
+
+    /**
+     * Add new argument to this hook.
+     */
+    public function addArgument(Argument $argument): void
+    {
+        $this->arguments[] = $argument;
+    }
+
+    /**
+     * Returns the name of this hook.
+     */
+    public function getName(): string
+    {
+        return $this->name;
+    }
+
+    /**
+     * Returns the DocBlock of this method if available.
+     */
+    public function getDocBlock(): DocBlock|null
+    {
+        return $this->docBlock;
+    }
+
+    public function getLocation(): Location
+    {
+        return $this->location;
+    }
+
+    public function getEndLocation(): Location
+    {
+        return $this->endLocation;
+    }
+}
diff --git a/tests/integration/PropertyHookTest.php b/tests/integration/PropertyHookTest.php
new file mode 100644
index 00000000..d1a5b018
--- /dev/null
+++ b/tests/integration/PropertyHookTest.php
@@ -0,0 +1,23 @@
+<?php
+
+declare(strict_types=1);
+
+namespace integration;
+
+use EliasHaeussler\PHPUnitAttributes\Attribute\RequiresPackage;
+use phpDocumentor\Reflection\File\LocalFile;
+use phpDocumentor\Reflection\Php\ProjectFactory;
+use PHPUnit\Framework\TestCase;
+
+#[RequiresPackage('nikic/php-parser', '>= 5.2')]
+final class PropertyHookTest extends TestCase
+{
+    public function testPropertyHook()
+    {
+        $file = __DIR__ . '/data/PHP84/PropertyHook.php';
+        $projectFactory = ProjectFactory::createInstance();
+        $project = $projectFactory->create('My project', [new LocalFile($file)]);
+
+        $class = $project->getFiles()[$file]->getClasses()['\PropertyHook'];
+    }
+}
diff --git a/tests/integration/data/PHP84/PropertyHook.php b/tests/integration/data/PHP84/PropertyHook.php
new file mode 100644
index 00000000..7c933750
--- /dev/null
+++ b/tests/integration/data/PHP84/PropertyHook.php
@@ -0,0 +1,32 @@
+<?php
+
+declare(strict_types=1);
+
+class PropertyHook
+{
+    private bool $modified = false;
+
+    /** @param string $example this is my property */
+    public function __construct(
+        /** @var string this is my property */
+        #[Property(new DateTimeImmutable())]
+        public string $example = 'default value' {
+            /** Not sure this works, but it gets */
+            #[Getter(new DateTimeImmutable())]
+            get {
+                if ($this->modified) {
+                    return $this->foo . ' (modified)';
+                }
+                return $this->foo;
+            }
+            /** Not sure this works, but it sets */
+            #[Setter(new DateTimeImmutable())]
+            set(string|int $value) {
+                $this->foo = strtolower($value);
+                $this->modified = true;
+            }
+        }
+    )
+    {
+    }
+}

From 0f6243f660d751510d2e8e80aa9bb7121f2d3cd8 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 15 May 2025 08:14:06 +0000
Subject: [PATCH 117/129] Bump doctrine/coding-standard from 13.0.0 to 13.0.1

Bumps [doctrine/coding-standard](https://github.com/doctrine/coding-standard) from 13.0.0 to 13.0.1.
- [Release notes](https://github.com/doctrine/coding-standard/releases)
- [Commits](https://github.com/doctrine/coding-standard/compare/13.0.0...13.0.1)

---
updated-dependencies:
- dependency-name: doctrine/coding-standard
  dependency-version: 13.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/composer.lock b/composer.lock
index 13fed261..959a2a0e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -554,16 +554,16 @@
         },
         {
             "name": "doctrine/coding-standard",
-            "version": "13.0.0",
+            "version": "13.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/coding-standard.git",
-                "reference": "8132673b9075d648c07f7f69cb3f4cc436709b77"
+                "reference": "0affd62169186f32de725ca612e6129e81186a21"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/8132673b9075d648c07f7f69cb3f4cc436709b77",
-                "reference": "8132673b9075d648c07f7f69cb3f4cc436709b77",
+                "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/0affd62169186f32de725ca612e6129e81186a21",
+                "reference": "0affd62169186f32de725ca612e6129e81186a21",
                 "shasum": ""
             },
             "require": {
@@ -604,9 +604,9 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/coding-standard/issues",
-                "source": "https://github.com/doctrine/coding-standard/tree/13.0.0"
+                "source": "https://github.com/doctrine/coding-standard/tree/13.0.1"
             },
-            "time": "2025-03-23T15:38:56+00:00"
+            "time": "2025-05-14T10:54:19+00:00"
         },
         {
             "name": "doctrine/instantiator",
@@ -2812,32 +2812,32 @@
         },
         {
             "name": "slevomat/coding-standard",
-            "version": "8.16.1",
+            "version": "8.18.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/slevomat/coding-standard.git",
-                "reference": "490023f23813483b5f75381c4ee07d26d9edced1"
+                "reference": "f3b23cb9b26301b8c3c7bb03035a1bee23974593"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/490023f23813483b5f75381c4ee07d26d9edced1",
-                "reference": "490023f23813483b5f75381c4ee07d26d9edced1",
+                "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/f3b23cb9b26301b8c3c7bb03035a1bee23974593",
+                "reference": "f3b23cb9b26301b8c3c7bb03035a1bee23974593",
                 "shasum": ""
             },
             "require": {
                 "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0",
                 "php": "^7.4 || ^8.0",
                 "phpstan/phpdoc-parser": "^2.1.0",
-                "squizlabs/php_codesniffer": "^3.11.3"
+                "squizlabs/php_codesniffer": "^3.12.2"
             },
             "require-dev": {
                 "phing/phing": "3.0.1",
                 "php-parallel-lint/php-parallel-lint": "1.4.0",
-                "phpstan/phpstan": "2.1.6",
-                "phpstan/phpstan-deprecation-rules": "2.0.1",
-                "phpstan/phpstan-phpunit": "2.0.4",
-                "phpstan/phpstan-strict-rules": "2.0.3",
-                "phpunit/phpunit": "9.6.8|10.5.45|11.4.4|11.5.9|12.0.4"
+                "phpstan/phpstan": "2.1.13",
+                "phpstan/phpstan-deprecation-rules": "2.0.2",
+                "phpstan/phpstan-phpunit": "2.0.6",
+                "phpstan/phpstan-strict-rules": "2.0.4",
+                "phpunit/phpunit": "9.6.8|10.5.45|11.4.4|11.5.17|12.1.3"
             },
             "type": "phpcodesniffer-standard",
             "extra": {
@@ -2861,7 +2861,7 @@
             ],
             "support": {
                 "issues": "https://github.com/slevomat/coding-standard/issues",
-                "source": "https://github.com/slevomat/coding-standard/tree/8.16.1"
+                "source": "https://github.com/slevomat/coding-standard/tree/8.18.0"
             },
             "funding": [
                 {
@@ -2873,7 +2873,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-03-23T16:33:42+00:00"
+            "time": "2025-05-01T09:40:50+00:00"
         },
         {
             "name": "squizlabs/php_codesniffer",

From a99d9cb7e4965fc02d0d7719ce1fde32c7f21637 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 22 May 2025 08:34:53 +0000
Subject: [PATCH 118/129] Bump phpspec/prophecy-phpunit from 2.3.0 to 2.4.0

Bumps [phpspec/prophecy-phpunit](https://github.com/phpspec/prophecy-phpunit) from 2.3.0 to 2.4.0.
- [Release notes](https://github.com/phpspec/prophecy-phpunit/releases)
- [Changelog](https://github.com/phpspec/prophecy-phpunit/blob/master/CHANGES.md)
- [Commits](https://github.com/phpspec/prophecy-phpunit/compare/v2.3.0...v2.4.0)

---
updated-dependencies:
- dependency-name: phpspec/prophecy-phpunit
  dependency-version: 2.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 68 ++++++++++++++++++++++++++++-----------------------
 1 file changed, 38 insertions(+), 30 deletions(-)

diff --git a/composer.lock b/composer.lock
index 959a2a0e..512a17ba 100644
--- a/composer.lock
+++ b/composer.lock
@@ -920,16 +920,16 @@
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.12.1",
+            "version": "1.13.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845"
+                "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845",
-                "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c",
+                "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c",
                 "shasum": ""
             },
             "require": {
@@ -968,7 +968,7 @@
             ],
             "support": {
                 "issues": "https://github.com/myclabs/DeepCopy/issues",
-                "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1"
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1"
             },
             "funding": [
                 {
@@ -976,7 +976,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-11-08T17:47:46+00:00"
+            "time": "2025-04-29T12:36:36+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -1098,29 +1098,29 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "a0165c648cab6a80311c74ffc708a07bb53ecc93"
+                "reference": "35f1adb388946d92e6edab2aa2cb2b60e132ebd5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/a0165c648cab6a80311c74ffc708a07bb53ecc93",
-                "reference": "a0165c648cab6a80311c74ffc708a07bb53ecc93",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/35f1adb388946d92e6edab2aa2cb2b60e132ebd5",
+                "reference": "35f1adb388946d92e6edab2aa2cb2b60e132ebd5",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.2 || ^2.0",
-                "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.* || 8.4.*",
+                "php": "^7.4 || 8.0.* || 8.1.* || 8.2.* || 8.3.* || 8.4.*",
                 "phpdocumentor/reflection-docblock": "^5.2",
-                "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0",
-                "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0"
+                "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
+                "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0"
             },
             "require-dev": {
                 "friendsofphp/php-cs-fixer": "^3.40",
                 "phpspec/phpspec": "^6.0 || ^7.0",
-                "phpstan/phpstan": "^1.9",
+                "phpstan/phpstan": "^2.1.13",
                 "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0"
             },
             "type": "library",
@@ -1162,28 +1162,28 @@
             ],
             "support": {
                 "issues": "https://github.com/phpspec/prophecy/issues",
-                "source": "https://github.com/phpspec/prophecy/tree/v1.20.0"
+                "source": "https://github.com/phpspec/prophecy/tree/v1.22.0"
             },
-            "time": "2024-11-19T13:12:41+00:00"
+            "time": "2025-04-29T14:58:06+00:00"
         },
         {
             "name": "phpspec/prophecy-phpunit",
-            "version": "v2.3.0",
+            "version": "v2.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy-phpunit.git",
-                "reference": "8819516c1b489ecee4c60db5f5432fac1ea8ac6f"
+                "reference": "d3c28041d9390c9bca325a08c5b2993ac855bded"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/8819516c1b489ecee4c60db5f5432fac1ea8ac6f",
-                "reference": "8819516c1b489ecee4c60db5f5432fac1ea8ac6f",
+                "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/d3c28041d9390c9bca325a08c5b2993ac855bded",
+                "reference": "d3c28041d9390c9bca325a08c5b2993ac855bded",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.3 || ^8",
                 "phpspec/prophecy": "^1.18",
-                "phpunit/phpunit": "^9.1 || ^10.1 || ^11.0"
+                "phpunit/phpunit": "^9.1 || ^10.1 || ^11.0 || ^12.0"
             },
             "require-dev": {
                 "phpstan/phpstan": "^1.10"
@@ -1217,9 +1217,9 @@
             ],
             "support": {
                 "issues": "https://github.com/phpspec/prophecy-phpunit/issues",
-                "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.3.0"
+                "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.4.0"
             },
-            "time": "2024-11-19T13:24:17+00:00"
+            "time": "2025-05-13T13:52:32+00:00"
         },
         {
             "name": "phpstan/extension-installer",
@@ -1701,16 +1701,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.38",
+            "version": "10.5.46",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132"
+                "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a86773b9e887a67bc53efa9da9ad6e3f2498c132",
-                "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8080be387a5be380dda48c6f41cee4a13aadab3d",
+                "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d",
                 "shasum": ""
             },
             "require": {
@@ -1720,7 +1720,7 @@
                 "ext-mbstring": "*",
                 "ext-xml": "*",
                 "ext-xmlwriter": "*",
-                "myclabs/deep-copy": "^1.12.0",
+                "myclabs/deep-copy": "^1.13.1",
                 "phar-io/manifest": "^2.0.4",
                 "phar-io/version": "^3.2.1",
                 "php": ">=8.1",
@@ -1782,7 +1782,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.38"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.46"
             },
             "funding": [
                 {
@@ -1793,12 +1793,20 @@
                     "url": "https://github.com/sebastianbergmann",
                     "type": "github"
                 },
+                {
+                    "url": "https://liberapay.com/sebastianbergmann",
+                    "type": "liberapay"
+                },
+                {
+                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
+                    "type": "thanks_dev"
+                },
                 {
                     "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-10-28T13:06:21+00:00"
+            "time": "2025-05-02T06:46:24+00:00"
         },
         {
             "name": "psalm/phar",

From fd8f4a342cffb6941abc94a358199ba1e4d5f6bb Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Fri, 30 May 2025 16:24:14 +0200
Subject: [PATCH 119/129] Add tests for hook variants

---
 .../Php/Factory/PropertyBuilder.php           | 31 ++++++--
 src/phpDocumentor/Reflection/Php/Property.php |  6 ++
 tests/integration/PropertyHookTest.php        | 73 ++++++++++++++++++-
 tests/integration/data/PHP84/PropertyHook.php | 35 ++++-----
 .../data/PHP84/PropertyHookAsync.php          | 23 ++++++
 .../data/PHP84/PropertyHookPromotion.php      | 32 ++++++++
 .../Php/Factory/PropertyBuilderTest.php       | 62 ++++++++++++++++
 7 files changed, 233 insertions(+), 29 deletions(-)
 create mode 100644 tests/integration/data/PHP84/PropertyHookAsync.php
 create mode 100644 tests/integration/data/PHP84/PropertyHookPromotion.php
 create mode 100644 tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyBuilderTest.php

diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
index e41f89af..794c2129 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
@@ -58,9 +58,7 @@ private function __construct(
         $this->visibility = new Visibility(Visibility::PUBLIC_);
     }
 
-    /**
-     * @param iterable<Reducer> $reducers
-     */
+    /** @param iterable<Reducer> $reducers */
     public static function create(
         PrettyPrinter $valueConverter,
         DocBlockFactoryInterface $docBlockFactory,
@@ -154,7 +152,7 @@ public function build(ContextStack $context): PropertyElement
             (new Type())->fromPhpParser($this->type),
             $this->readOnly,
             array_filter(array_map(
-                fn (PropertyHookNode $hook) => $this->buildHook($hook, $context),
+                fn (PropertyHookNode $hook) => $this->buildHook($hook, $context, $this->visibility),
                 $this->hooks,
             )),
         );
@@ -183,6 +181,10 @@ private function buildVisibility(Param|PropertyIterator $node): Visibility
         $readVisibility = $this->buildReadVisibility($node);
         $writeVisibility = $this->buildWriteVisibility($node);
 
+        if ((string) $writeVisibility === (string) $readVisibility) {
+            return $readVisibility;
+        }
+
         return new AsyncVisibility(
             $readVisibility,
             $writeVisibility,
@@ -232,17 +234,17 @@ private function buildWriteVisibility(Param|PropertyIterator $node): Visibility
         return new Visibility(Visibility::PUBLIC_);
     }
 
-    private function buildHook(PropertyHookNode $hook, ContextStack $context): PropertyHook|null
+    private function buildHook(PropertyHookNode $hook, ContextStack $context, Visibility $propertyVisibility): PropertyHook|null
     {
         $doc = $hook->getDocComment();
 
         $result = new PropertyHook(
             $hook->name->toString(),
-            $this->buildVisibilityFromFlags($hook->flags),
+            $this->buildHookVisibility($hook->name->toString(), $propertyVisibility),
             $doc !== null ? $this->docBlockFactory->create($doc->getText(), $context->getTypeContext()) : null,
             $hook->isFinal(),
-            new Location($hook->getStartLine(), $hook->getStartFilePos()),
-            new Location($hook->getEndLine(), $hook->getEndFilePos()),
+            new Location($hook->getStartLine()),
+            new Location($hook->getEndLine()),
         );
 
         foreach ($this->reducers as $reducer) {
@@ -261,4 +263,17 @@ private function buildHook(PropertyHookNode $hook, ContextStack $context): Prope
 
         return $result;
     }
+
+    private function buildHookVisibility(string $hookName, Visibility $propertyVisibility): Visibility
+    {
+        if ($propertyVisibility instanceof AsyncVisibility === false) {
+            return $propertyVisibility;
+        }
+
+        return match ($hookName) {
+            'get' => $propertyVisibility->getReadVisibility(),
+            'set' => $propertyVisibility->getWriteVisibility(),
+            default => $propertyVisibility,
+        };
+    }
 }
diff --git a/src/phpDocumentor/Reflection/Php/Property.php b/src/phpDocumentor/Reflection/Php/Property.php
index 0334a140..9ffe2e99 100644
--- a/src/phpDocumentor/Reflection/Php/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Property.php
@@ -143,4 +143,10 @@ public function isReadOnly(): bool
     {
         return $this->readOnly;
     }
+
+    /** @return PropertyHook[] */
+    public function getHooks(): array
+    {
+        return $this->hooks;
+    }
 }
diff --git a/tests/integration/PropertyHookTest.php b/tests/integration/PropertyHookTest.php
index d1a5b018..00416ea5 100644
--- a/tests/integration/PropertyHookTest.php
+++ b/tests/integration/PropertyHookTest.php
@@ -5,19 +5,90 @@
 namespace integration;
 
 use EliasHaeussler\PHPUnitAttributes\Attribute\RequiresPackage;
+use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\File\LocalFile;
+use phpDocumentor\Reflection\Location;
+use phpDocumentor\Reflection\Php\Argument;
+use phpDocumentor\Reflection\Php\AsyncVisibility;
+use phpDocumentor\Reflection\Php\Attribute;
 use phpDocumentor\Reflection\Php\ProjectFactory;
+use phpDocumentor\Reflection\Php\PropertyHook;
+use phpDocumentor\Reflection\Php\Visibility;
+use phpDocumentor\Reflection\Types\Compound;
+use phpDocumentor\Reflection\Types\Integer;
+use phpDocumentor\Reflection\Types\String_;
+use PHPUnit\Framework\Attributes\CoversNothing;
 use PHPUnit\Framework\TestCase;
 
 #[RequiresPackage('nikic/php-parser', '>= 5.2')]
+#[CoversNothing]
 final class PropertyHookTest extends TestCase
 {
-    public function testPropertyHook()
+    public function testPropertyHookWithDocblocks()
     {
         $file = __DIR__ . '/data/PHP84/PropertyHook.php';
         $projectFactory = ProjectFactory::createInstance();
         $project = $projectFactory->create('My project', [new LocalFile($file)]);
 
         $class = $project->getFiles()[$file]->getClasses()['\PropertyHook'];
+        $hooks = $class->getProperties()['\PropertyHook::$example']->getHooks();
+
+        $this->assertCount(2, $hooks);
+        $this->assertEquals('get', $hooks[0]->getName());
+        $this->assertEquals(new Visibility(Visibility::PUBLIC_), $hooks[0]->getVisibility());
+        $this->assertCount(1, $hooks[0]->getAttributes());
+        $this->assertCount(0, $hooks[0]->getArguments());
+        $this->assertSame('Not sure this works, but it gets', $hooks[0]->getDocBlock()->getSummary());
+
+        $this->assertEquals('set', $hooks[1]->getName());
+        $this->assertEquals(new Visibility(Visibility::PUBLIC_), $hooks[1]->getVisibility());
+        $this->assertCount(1, $hooks[1]->getAttributes());
+        $this->assertCount(1, $hooks[1]->getArguments());
+        $this->assertEquals(new Argument(
+            'value',
+            new Compound(
+                [
+                    new String_(),
+                    new Integer()
+                ]
+            ),
+        ), $hooks[1]->getArguments()[0]);
+        $this->assertSame('Not sure this works, but it gets', $hooks[0]->getDocBlock()->getSummary());
+    }
+
+    public function testPropertyHookAsync()
+    {
+        $file = __DIR__ . '/data/PHP84/PropertyHookAsync.php';
+        $projectFactory = ProjectFactory::createInstance();
+        $project = $projectFactory->create('My project', [new LocalFile($file)]);
+
+        $class = $project->getFiles()[$file]->getClasses()['\PropertyHook'];
+        $hooks = $class->getProperties()['\PropertyHook::$example']->getHooks();
+
+
+        $this->assertEquals(
+            new AsyncVisibility(
+                new Visibility(Visibility::PUBLIC_),
+                new Visibility(Visibility::PRIVATE_)
+            ),
+            $class->getProperties()['\PropertyHook::$example']->getVisibility()
+        );
+        $this->assertCount(2, $hooks);
+        $this->assertEquals('get', $hooks[0]->getName());
+        $this->assertEquals(new Visibility(Visibility::PUBLIC_), $hooks[0]->getVisibility());
+        $this->assertCount(0, $hooks[0]->getArguments());
+
+        $this->assertEquals('set', $hooks[1]->getName());
+        $this->assertEquals(new Visibility(Visibility::PRIVATE_), $hooks[1]->getVisibility());
+        $this->assertCount(1, $hooks[1]->getArguments());
+        $this->assertEquals(new Argument(
+            'value',
+            new Compound(
+                [
+                    new String_(),
+                    new Integer()
+                ]
+            ),
+        ), $hooks[1]->getArguments()[0]);
     }
 }
diff --git a/tests/integration/data/PHP84/PropertyHook.php b/tests/integration/data/PHP84/PropertyHook.php
index 7c933750..a83ff756 100644
--- a/tests/integration/data/PHP84/PropertyHook.php
+++ b/tests/integration/data/PHP84/PropertyHook.php
@@ -6,27 +6,22 @@ class PropertyHook
 {
     private bool $modified = false;
 
-    /** @param string $example this is my property */
-    public function __construct(
-        /** @var string this is my property */
-        #[Property(new DateTimeImmutable())]
-        public string $example = 'default value' {
-            /** Not sure this works, but it gets */
-            #[Getter(new DateTimeImmutable())]
-            get {
-                if ($this->modified) {
-                    return $this->foo . ' (modified)';
-                }
-                return $this->foo;
-            }
-            /** Not sure this works, but it sets */
-            #[Setter(new DateTimeImmutable())]
-            set(string|int $value) {
-                $this->foo = strtolower($value);
-                $this->modified = true;
+    /** @var string this is my property */
+    #[Property(new DateTimeImmutable())]
+    public string $example = 'default value' {
+        /** Not sure this works, but it gets */
+        #[Getter(new DateTimeImmutable())]
+        get {
+            if ($this->modified) {
+                return $this->foo . ' (modified)';
             }
+            return $this->foo;
+        }
+        /** Not sure this works, but it sets */
+        #[Setter(new DateTimeImmutable())]
+        set(string|int $value) {
+            $this->foo = strtolower($value);
+            $this->modified = true;
         }
-    )
-    {
     }
 }
diff --git a/tests/integration/data/PHP84/PropertyHookAsync.php b/tests/integration/data/PHP84/PropertyHookAsync.php
new file mode 100644
index 00000000..85253613
--- /dev/null
+++ b/tests/integration/data/PHP84/PropertyHookAsync.php
@@ -0,0 +1,23 @@
+<?php
+
+declare(strict_types=1);
+
+class PropertyHook
+{
+    private bool $modified = false;
+
+    /** @var string this is my property */
+    #[Property(new DateTimeImmutable())]
+    public private(set) string $example = 'default value' {
+        get {
+            if ($this->modified) {
+                return $this->foo . ' (modified)';
+            }
+            return $this->foo;
+        }
+        set(string|int $value) {
+            $this->foo = strtolower($value);
+            $this->modified = true;
+        }
+    }
+}
diff --git a/tests/integration/data/PHP84/PropertyHookPromotion.php b/tests/integration/data/PHP84/PropertyHookPromotion.php
new file mode 100644
index 00000000..7c933750
--- /dev/null
+++ b/tests/integration/data/PHP84/PropertyHookPromotion.php
@@ -0,0 +1,32 @@
+<?php
+
+declare(strict_types=1);
+
+class PropertyHook
+{
+    private bool $modified = false;
+
+    /** @param string $example this is my property */
+    public function __construct(
+        /** @var string this is my property */
+        #[Property(new DateTimeImmutable())]
+        public string $example = 'default value' {
+            /** Not sure this works, but it gets */
+            #[Getter(new DateTimeImmutable())]
+            get {
+                if ($this->modified) {
+                    return $this->foo . ' (modified)';
+                }
+                return $this->foo;
+            }
+            /** Not sure this works, but it sets */
+            #[Setter(new DateTimeImmutable())]
+            set(string|int $value) {
+                $this->foo = strtolower($value);
+                $this->modified = true;
+            }
+        }
+    )
+    {
+    }
+}
diff --git a/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyBuilderTest.php b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyBuilderTest.php
new file mode 100644
index 00000000..297734a1
--- /dev/null
+++ b/tests/unit/phpDocumentor/Reflection/Php/Factory/PropertyBuilderTest.php
@@ -0,0 +1,62 @@
+<?php
+
+declare(strict_types=1);
+
+namespace phpDocumentor\Reflection\Php\Factory;
+
+use phpDocumentor\Reflection\DocBlockFactoryInterface;
+use phpDocumentor\Reflection\Fqsen;
+use phpDocumentor\Reflection\Location;
+use phpDocumentor\Reflection\Php\StrategyContainer;
+use phpDocumentor\Reflection\Php\Visibility;
+use PhpParser\Node\Stmt\Property as PropertyNode;
+use PhpParser\Node\Stmt\PropertyProperty;
+use PhpParser\PrettyPrinter;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\TestCase;
+
+#[CoversClass(PropertyBuilder::class)]
+class PropertyBuilderTest extends TestCase
+{
+    public function testBuildsPropertyElementWithCorrectAttributes(): void
+    {
+        $fqsen = new Fqsen('\MyClass::$property');
+        $visibility = new Visibility(Visibility::PUBLIC_);
+        $startLocation = new Location(10);
+        $endLocation = new Location(20);
+
+        $docBlockFactory = $this->createMock(DocBlockFactoryInterface::class);
+        $valueConverter = $this->createMock(PrettyPrinter\Standard::class);
+        $strategies = $this->createMock(StrategyContainer::class);
+        $reducers = [];
+
+        $prop1 = new PropertyProperty('prop1');
+        $propertyNode = new PropertyNode(1, [$prop1]);
+        $properties = new PropertyIterator($propertyNode);
+
+        $builder = PropertyBuilder::create($valueConverter, $docBlockFactory, $strategies, $reducers);
+        $builder->fqsen($fqsen)
+            ->visibility($properties)
+            ->docblock($properties->getDocComment())
+            ->default($properties->getDefault())
+            ->static(true)
+            ->startLocation($startLocation)
+            ->endLocation($endLocation)
+            ->type($properties->getType())
+            ->readOnly(true)
+            ->hooks($properties->getHooks());
+
+        $context = \phpDocumentor\Reflection\Php\Factory\TestCase::createContext();
+        $property = $builder->build($context);
+
+        $this->assertSame($fqsen, $property->getFqsen());
+        $this->assertEquals($visibility, $property->getVisibility());
+        $this->assertNull($property->getDocBlock());
+        $this->assertNull($property->getDefault());
+        $this->assertTrue($property->isStatic());
+        $this->assertSame($startLocation, $property->getLocation());
+        $this->assertSame($endLocation, $property->getEndLocation());
+        $this->assertNull($property->getType());
+        $this->assertTrue($property->isReadOnly());
+    }
+}

From 8b400782eb158516eefbeff04075730f7a70e191 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Fri, 30 May 2025 17:01:10 +0200
Subject: [PATCH 120/129] Fix psalm errors

---
 phpcs.xml.dist                                |  17 ++
 psalm-baseline.xml                            | 277 +++++++++++-------
 src/phpDocumentor/Reflection/Exception.php    |   2 +
 .../Reflection/File/LocalFile.php             |   4 +
 .../NodeVisitor/ElementNameResolver.php       |   4 +
 src/phpDocumentor/Reflection/Php/Argument.php |   2 +
 .../Reflection/Php/AsyncVisibility.php        |   1 +
 .../Reflection/Php/Attribute.php              |   4 +
 .../Reflection/Php/CallArgument.php           |   5 +
 src/phpDocumentor/Reflection/Php/Class_.php   |   5 +
 src/phpDocumentor/Reflection/Php/Constant.php |   5 +
 src/phpDocumentor/Reflection/Php/EnumCase.php |   8 +
 src/phpDocumentor/Reflection/Php/Enum_.php    |   8 +
 .../Php/Factory/AbstractFactory.php           |   3 +
 .../Reflection/Php/Factory/ClassConstant.php  |   3 +
 .../Php/Factory/ClassConstantIterator.php     |   6 +
 .../Reflection/Php/Factory/Class_.php         |   3 +
 .../Php/Factory/ConstructorPromotion.php      |   3 +
 .../Reflection/Php/Factory/Define.php         |   3 +
 .../Reflection/Php/Factory/EnumCase.php       |   3 +
 .../Reflection/Php/Factory/Enum_.php          |   3 +
 .../Reflection/Php/Factory/File.php           |   3 +
 .../Reflection/Php/Factory/Function_.php      |   3 +
 .../Reflection/Php/Factory/GlobalConstant.php |   3 +
 .../Php/Factory/GlobalConstantIterator.php    |   6 +
 .../Reflection/Php/Factory/IfStatement.php    |   3 +
 .../Reflection/Php/Factory/Interface_.php     |   3 +
 .../Reflection/Php/Factory/Method.php         |   3 +
 .../Reflection/Php/Factory/Namespace_.php     |   3 +
 .../Reflection/Php/Factory/Noop.php           |   3 +
 .../Reflection/Php/Factory/Property.php       |   3 +
 .../Php/Factory/PropertyIterator.php          |   6 +
 .../Php/Factory/Reducer/Attribute.php         |   2 +
 .../Php/Factory/Reducer/Parameter.php         |   2 +
 .../Reflection/Php/Factory/TraitUse.php       |   3 +
 .../Reflection/Php/Factory/Trait_.php         |   3 +
 src/phpDocumentor/Reflection/Php/File.php     |   2 +
 .../Reflection/Php/Function_.php              |   5 +
 .../Reflection/Php/Interface_.php             |   5 +
 src/phpDocumentor/Reflection/Php/Method.php   |   5 +
 .../Reflection/Php/Namespace_.php             |   4 +
 src/phpDocumentor/Reflection/Php/Project.php  |   4 +
 .../Reflection/Php/ProjectFactory.php         |   2 +
 .../Php/ProjectFactoryStrategies.php          |   2 +
 src/phpDocumentor/Reflection/Php/Property.php |   5 +
 .../Reflection/Php/PropertyHook.php           |   1 +
 src/phpDocumentor/Reflection/Php/Trait_.php   |   5 +
 .../Reflection/Php/Visibility.php             |   4 +
 48 files changed, 360 insertions(+), 102 deletions(-)

diff --git a/phpcs.xml.dist b/phpcs.xml.dist
index ba5c120c..99089501 100644
--- a/phpcs.xml.dist
+++ b/phpcs.xml.dist
@@ -18,10 +18,27 @@
         <exclude name="SlevomatCodingStandard.Classes.SuperfluousAbstractClassNaming.SuperfluousPrefix"/>
         <exclude name="SlevomatCodingStandard.Classes.SuperfluousExceptionNaming.SuperfluousSuffix"/>
         <exclude name="SlevomatCodingStandard.Classes.SuperfluousInterfaceNaming.SuperfluousSuffix"/>
+        <exclude name="SlevomatCodingStandard.Commenting.ForbiddenAnnotations"/>
 
         <exclude name="Squiz.Commenting.FunctionComment"/>
     </rule>
 
+    <rule ref="SlevomatCodingStandard.Commenting.ForbiddenAnnotations">
+        <properties>
+            <property name="forbiddenAnnotations" type="array">
+                <element value="@author"/>
+                <element value="@category"/>
+                <element value="@copyright"/>
+                <element value="@created"/>
+                <element value="@license"/>
+                <element value="@package"/>
+                <element value="@since"/>
+                <element value="@subpackage"/>
+                <element value="@version"/>
+            </property>
+        </properties>
+    </rule>
+
     <rule ref="Generic.Formatting.SpaceAfterNot">
         <properties>
             <property name="spacing" value="0"/>
diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index 0f5ee145..2ec6bdbc 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -1,163 +1,236 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<files psalm-version="4.26.0@6998fabb2bf528b65777bf9941920888d23c03ac">
+<files psalm-version="6.8.2@720ed6b578ac24f9543c65c3d4cecea0ff348ccd">
+  <file src="src/phpDocumentor/Reflection/File/LocalFile.php">
+    <FalsableReturnStatement>
+      <code><![CDATA[md5_file($this->path)]]></code>
+    </FalsableReturnStatement>
+    <InvalidFalsableReturnType>
+      <code><![CDATA[string]]></code>
+    </InvalidFalsableReturnType>
+    <UnusedClass>
+      <code><![CDATA[LocalFile]]></code>
+    </UnusedClass>
+  </file>
+  <file src="src/phpDocumentor/Reflection/Metadata/MetaDataContainer.php">
+    <PossiblyUnusedMethod>
+      <code><![CDATA[addMetadata]]></code>
+      <code><![CDATA[getMetadata]]></code>
+    </PossiblyUnusedMethod>
+  </file>
   <file src="src/phpDocumentor/Reflection/Middleware/ChainFactory.php">
-    <DocblockTypeContradiction occurrences="1">
-      <code>gettype($middleware)</code>
-    </DocblockTypeContradiction>
-    <MissingClosureParamType occurrences="1">
-      <code>$command</code>
+    <MissingClosureParamType>
+      <code><![CDATA[$command]]></code>
     </MissingClosureParamType>
-    <MixedArgument occurrences="1">
-      <code>$command</code>
+    <MixedArgument>
+      <code><![CDATA[$command]]></code>
     </MixedArgument>
-    <MixedArgumentTypeCoercion occurrences="1">
-      <code>$lastCallable</code>
+    <MixedArgumentTypeCoercion>
+      <code><![CDATA[$lastCallable]]></code>
     </MixedArgumentTypeCoercion>
-    <RedundantConditionGivenDocblockType occurrences="1">
-      <code>is_object($middleware)</code>
-    </RedundantConditionGivenDocblockType>
   </file>
   <file src="src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php">
-    <NoInterfaceProperties occurrences="1">
-      <code>$node-&gt;fqsen</code>
-    </NoInterfaceProperties>
-    <MixedAssignment occurrences="1">
-      <code>$part</code>
-    </MixedAssignment>
-    <MixedOperand occurrences="1">
-      <code>$part</code>
-    </MixedOperand>
+    <ImplicitToStringCast>
+      <code><![CDATA[$node->name]]></code>
+      <code><![CDATA[$node->name]]></code>
+      <code><![CDATA[$node->name]]></code>
+      <code><![CDATA[$node->name]]></code>
+      <code><![CDATA[$node->name]]></code>
+      <code><![CDATA[$part]]></code>
+    </ImplicitToStringCast>
+    <MixedPropertyTypeCoercion>
+      <code><![CDATA[new SplDoublyLinkedList()]]></code>
+    </MixedPropertyTypeCoercion>
+    <PossiblyNullOperand>
+      <code><![CDATA[$part]]></code>
+    </PossiblyNullOperand>
   </file>
-  <file src="src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php">
-    <RedundantCondition occurrences="1">
-      <code>is_object($object)</code>
-    </RedundantCondition>
-    <TypeDoesNotContainType occurrences="1">
-      <code>gettype($object)</code>
-    </TypeDoesNotContainType>
-  </file>
-  <file src="src/phpDocumentor/Reflection/Php/Factory/Argument.php">
-    <PossiblyInvalidCast occurrences="1">
-      <code>$object-&gt;var-&gt;name</code>
-    </PossiblyInvalidCast>
-    <RedundantConditionGivenDocblockType occurrences="1">
-      <code>isInstanceOf</code>
-    </RedundantConditionGivenDocblockType>
-    <UndefinedMethod occurrences="1">
-      <code>addArgument</code>
-    </UndefinedMethod>
+  <file src="src/phpDocumentor/Reflection/Php/AttributeContainer.php">
+    <PossiblyUnusedMethod>
+      <code><![CDATA[getAttributes]]></code>
+    </PossiblyUnusedMethod>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/ClassConstant.php">
-    <PossiblyUndefinedMethod occurrences="1">
-      <code>addConstant</code>
+    <PossiblyUndefinedMethod>
+      <code><![CDATA[addConstant]]></code>
     </PossiblyUndefinedMethod>
-    <RedundantCondition occurrences="1">
-      <code>$const-&gt;getValue() !== null</code>
+    <RedundantCondition>
+      <code><![CDATA[$const->getValue() !== null]]></code>
     </RedundantCondition>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/ClassConstantIterator.php">
-    <MixedInferredReturnType occurrences="1">
-      <code>Fqsen</code>
-    </MixedInferredReturnType>
-    <MixedReturnStatement occurrences="1"/>
+    <MixedReturnStatement>
+      <code><![CDATA[$this->classConstants->consts[$this->index]->getAttribute('fqsen')]]></code>
+    </MixedReturnStatement>
+    <PossiblyUnusedMethod>
+      <code><![CDATA[getName]]></code>
+      <code><![CDATA[isPublic]]></code>
+    </PossiblyUnusedMethod>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/Class_.php">
-    <MixedArgument occurrences="1"/>
+    <ImplicitToStringCast>
+      <code><![CDATA[$object->extends]]></code>
+    </ImplicitToStringCast>
+    <MixedArgument>
+      <code><![CDATA[$object->getAttribute('fqsen')]]></code>
+    </MixedArgument>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php">
-    <PossiblyInvalidCast occurrences="1">
-      <code>$param-&gt;var-&gt;name</code>
+    <ImplicitToStringCast>
+      <code><![CDATA[$methodContainer->getFqsen()]]></code>
+    </ImplicitToStringCast>
+    <PossiblyInvalidCast>
+      <code><![CDATA[$param->var->name]]></code>
     </PossiblyInvalidCast>
+    <RedundantCondition>
+      <code><![CDATA[$param->hooks]]></code>
+    </RedundantCondition>
+    <TypeDoesNotContainType>
+      <code><![CDATA[[]]]></code>
+    </TypeDoesNotContainType>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/EnumCase.php">
-    <MixedArgument occurrences="1"/>
+    <MixedArgument>
+      <code><![CDATA[$object->getAttribute('fqsen')]]></code>
+    </MixedArgument>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/Enum_.php">
-    <MixedArgument occurrences="1"/>
+    <MixedArgument>
+      <code><![CDATA[$object->getAttribute('fqsen')]]></code>
+    </MixedArgument>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/File.php">
-    <MissingClosureParamType occurrences="1">
-      <code>$command</code>
+    <MissingClosureParamType>
+      <code><![CDATA[$command]]></code>
     </MissingClosureParamType>
-    <MixedArgument occurrences="2">
-      <code>$command</code>
-      <code>$file</code>
+    <MixedArgument>
+      <code><![CDATA[$command]]></code>
+      <code><![CDATA[$file]]></code>
     </MixedArgument>
-    <MixedAssignment occurrences="1">
-      <code>$file</code>
+    <MixedAssignment>
+      <code><![CDATA[$file]]></code>
     </MixedAssignment>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/Function_.php">
-    <DocblockTypeContradiction occurrences="1">
-      <code>is_array($object-&gt;stmts)</code>
-    </DocblockTypeContradiction>
-    <MixedArgument occurrences="1"/>
+    <MixedArgument>
+      <code><![CDATA[$object->getAttribute('fqsen')]]></code>
+    </MixedArgument>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/GlobalConstant.php">
-    <RedundantCondition occurrences="1">
-      <code>$const-&gt;getValue() !== null</code>
+    <RedundantCondition>
+      <code><![CDATA[$const->getValue() !== null]]></code>
     </RedundantCondition>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/GlobalConstantIterator.php">
-    <MixedInferredReturnType occurrences="1">
-      <code>Fqsen</code>
-    </MixedInferredReturnType>
-    <MixedReturnStatement occurrences="1"/>
+    <MixedReturnStatement>
+      <code><![CDATA[$this->constant->consts[$this->index]->getAttribute('fqsen')]]></code>
+    </MixedReturnStatement>
+    <PossiblyUnusedMethod>
+      <code><![CDATA[getName]]></code>
+    </PossiblyUnusedMethod>
+  </file>
+  <file src="src/phpDocumentor/Reflection/Php/Factory/IfStatement.php">
+    <ClassMustBeFinal>
+      <code><![CDATA[IfStatement]]></code>
+    </ClassMustBeFinal>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/Interface_.php">
-    <MixedArgument occurrences="1"/>
+    <MixedArgument>
+      <code><![CDATA[$object->getAttribute('fqsen')]]></code>
+    </MixedArgument>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/Method.php">
-    <MixedArgument occurrences="1"/>
-    <UndefinedMethod occurrences="1">
-      <code>addMethod</code>
+    <MixedArgument>
+      <code><![CDATA[$object->getAttribute('fqsen')]]></code>
+    </MixedArgument>
+    <UndefinedMethod>
+      <code><![CDATA[addMethod]]></code>
     </UndefinedMethod>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/Namespace_.php">
-    <DocblockTypeContradiction occurrences="1">
-      <code>gettype($object)</code>
-    </DocblockTypeContradiction>
-    <MixedArgument occurrences="1"/>
-    <RedundantConditionGivenDocblockType occurrences="1">
-      <code>is_object($object)</code>
-    </RedundantConditionGivenDocblockType>
+    <ClassMustBeFinal>
+      <code><![CDATA[Namespace_]]></code>
+    </ClassMustBeFinal>
+    <MixedArgument>
+      <code><![CDATA[$object->getAttribute('fqsen') ?? new Fqsen('\\')]]></code>
+    </MixedArgument>
+  </file>
+  <file src="src/phpDocumentor/Reflection/Php/Factory/Noop.php">
+    <ClassMustBeFinal>
+      <code><![CDATA[Noop]]></code>
+    </ClassMustBeFinal>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/Property.php">
-    <PossiblyInvalidArgument occurrences="1">
-      <code>$iterator-&gt;getDefault()</code>
-    </PossiblyInvalidArgument>
-    <UndefinedMethod occurrences="1">
-      <code>addProperty</code>
+    <UndefinedMethod>
+      <code><![CDATA[addProperty]]></code>
     </UndefinedMethod>
   </file>
+  <file src="src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php">
+    <PropertyNotSetInConstructor>
+      <code><![CDATA[$endLocation]]></code>
+      <code><![CDATA[$fqsen]]></code>
+      <code><![CDATA[$startLocation]]></code>
+      <code><![CDATA[$type]]></code>
+    </PropertyNotSetInConstructor>
+  </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php">
-    <MixedInferredReturnType occurrences="1">
-      <code>Fqsen</code>
-    </MixedInferredReturnType>
-    <MixedReturnStatement occurrences="1"/>
+    <MixedReturnStatement>
+      <code><![CDATA[$this->property->props[$this->index]->getAttribute('fqsen')]]></code>
+    </MixedReturnStatement>
+    <PossiblyUnusedMethod>
+      <code><![CDATA[getName]]></code>
+    </PossiblyUnusedMethod>
+  </file>
+  <file src="src/phpDocumentor/Reflection/Php/Factory/Reducer/Parameter.php">
+    <ClassMustBeFinal>
+      <code><![CDATA[Parameter]]></code>
+    </ClassMustBeFinal>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/Factory/Trait_.php">
-    <MixedArgument occurrences="1"/>
+    <MixedArgument>
+      <code><![CDATA[$object->getAttribute('fqsen')]]></code>
+    </MixedArgument>
+  </file>
+  <file src="src/phpDocumentor/Reflection/Php/NodesFactory.php">
+    <ClassMustBeFinal>
+      <code><![CDATA[NodesFactory]]></code>
+    </ClassMustBeFinal>
+    <PossiblyUnusedParam>
+      <code><![CDATA[$kind]]></code>
+    </PossiblyUnusedParam>
+  </file>
+  <file src="src/phpDocumentor/Reflection/Php/ProjectFactory.php">
+    <ImplicitToStringCast>
+      <code><![CDATA[$namespace->getFqsen()]]></code>
+      <code><![CDATA[$namespace->getFqsen()]]></code>
+      <code><![CDATA[$namespace->getFqsen()]]></code>
+      <code><![CDATA[$namespace->getFqsen()]]></code>
+      <code><![CDATA[$namespace->getFqsen()]]></code>
+      <code><![CDATA[$namespace->getFqsen()]]></code>
+    </ImplicitToStringCast>
+    <PossiblyUnusedMethod>
+      <code><![CDATA[addStrategy]]></code>
+      <code><![CDATA[createInstance]]></code>
+    </PossiblyUnusedMethod>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/ProjectFactoryStrategies.php">
-    <MixedArgument occurrences="1">
-      <code>$object</code>
+    <MixedArgument>
+      <code><![CDATA[$object]]></code>
     </MixedArgument>
-    <MixedPropertyTypeCoercion occurrences="1">
-      <code>new SplPriorityQueue()</code>
+    <MixedPropertyTypeCoercion>
+      <code><![CDATA[new SplPriorityQueue()]]></code>
     </MixedPropertyTypeCoercion>
   </file>
   <file src="src/phpDocumentor/Reflection/Php/ValueEvaluator/ConstantEvaluator.php">
-    <MixedInferredReturnType occurrences="1">
-      <code>string</code>
-    </MixedInferredReturnType>
-    <MixedReturnStatement occurrences="1">
-      <code>$evaluator-&gt;evaluateSilently($expr)</code>
+    <MixedReturnStatement>
+      <code><![CDATA[$evaluator->evaluateSilently($expr)]]></code>
     </MixedReturnStatement>
   </file>
   <file src="src/phpDocumentor/Reflection/Types/NamespaceNodeToContext.php">
-    <MixedArgumentTypeCoercion occurrences="1">
-      <code>$this-&gt;aliasesToFullyQualifiedNames($namespace)</code>
+    <ClassMustBeFinal>
+      <code><![CDATA[NamespaceNodeToContext]]></code>
+    </ClassMustBeFinal>
+    <MixedArgumentTypeCoercion>
+      <code><![CDATA[$this->aliasesToFullyQualifiedNames($namespace)]]></code>
     </MixedArgumentTypeCoercion>
   </file>
 </files>
diff --git a/src/phpDocumentor/Reflection/Exception.php b/src/phpDocumentor/Reflection/Exception.php
index bd1ccddb..6ef2403a 100644
--- a/src/phpDocumentor/Reflection/Exception.php
+++ b/src/phpDocumentor/Reflection/Exception.php
@@ -17,6 +17,8 @@
  * An exception specifically originating from the Reflection component.
  *
  * @link    http://phpdoc.org
+ *
+ * @api
  */
 class Exception extends \Exception
 {
diff --git a/src/phpDocumentor/Reflection/File/LocalFile.php b/src/phpDocumentor/Reflection/File/LocalFile.php
index cf8e58ab..7ac4b743 100644
--- a/src/phpDocumentor/Reflection/File/LocalFile.php
+++ b/src/phpDocumentor/Reflection/File/LocalFile.php
@@ -14,6 +14,7 @@
 namespace phpDocumentor\Reflection\File;
 
 use InvalidArgumentException;
+use Override;
 use phpDocumentor\Reflection\File;
 
 use function file_exists;
@@ -43,6 +44,7 @@ public function __construct(string $path)
     /**
      * Returns the content of the file as a string.
      */
+    #[Override]
     public function getContents(): string
     {
         return (string) file_get_contents($this->path);
@@ -51,6 +53,7 @@ public function getContents(): string
     /**
      * Returns md5 hash of the file.
      */
+    #[Override]
     public function md5(): string
     {
         return md5_file($this->path);
@@ -59,6 +62,7 @@ public function md5(): string
     /**
      * Returns a relative path to the file.
      */
+    #[Override]
     public function path(): string
     {
         return $this->path;
diff --git a/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php b/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php
index c775233b..730acfd9 100644
--- a/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php
+++ b/src/phpDocumentor/Reflection/NodeVisitor/ElementNameResolver.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\NodeVisitor;
 
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use PhpParser\Node;
 use PhpParser\Node\Const_;
@@ -47,6 +48,7 @@ public function __construct()
      *
      * @inheritDoc
      */
+    #[Override]
     public function beforeTraverse(array $nodes)
     {
         $this->resetState('\\');
@@ -59,6 +61,7 @@ public function beforeTraverse(array $nodes)
      *
      * @inheritDoc
      */
+    #[Override]
     public function leaveNode(Node $node)
     {
         switch ($node::class) {
@@ -87,6 +90,7 @@ public function leaveNode(Node $node)
     /**
      * Adds fqsen property to a node when applicable.
      */
+    #[Override]
     public function enterNode(Node $node): int|null
     {
         switch ($node::class) {
diff --git a/src/phpDocumentor/Reflection/Php/Argument.php b/src/phpDocumentor/Reflection/Php/Argument.php
index 4706d240..25fb6010 100644
--- a/src/phpDocumentor/Reflection/Php/Argument.php
+++ b/src/phpDocumentor/Reflection/Php/Argument.php
@@ -18,6 +18,8 @@
 
 /**
  * Descriptor representing a single Argument of a method or function.
+ *
+ * @api
  */
 final class Argument
 {
diff --git a/src/phpDocumentor/Reflection/Php/AsyncVisibility.php b/src/phpDocumentor/Reflection/Php/AsyncVisibility.php
index 64cd3e6f..a2bdb6f4 100644
--- a/src/phpDocumentor/Reflection/Php/AsyncVisibility.php
+++ b/src/phpDocumentor/Reflection/Php/AsyncVisibility.php
@@ -4,6 +4,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+/** @api */
 final class AsyncVisibility extends Visibility
 {
     public function __construct(
diff --git a/src/phpDocumentor/Reflection/Php/Attribute.php b/src/phpDocumentor/Reflection/Php/Attribute.php
index 26ccf7e8..19071316 100644
--- a/src/phpDocumentor/Reflection/Php/Attribute.php
+++ b/src/phpDocumentor/Reflection/Php/Attribute.php
@@ -4,9 +4,11 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
 
+/** @api */
 final class Attribute implements Element
 {
     /** @param CallArgument[] $arguments */
@@ -14,6 +16,7 @@ public function __construct(private readonly Fqsen $fqsen, private readonly arra
     {
     }
 
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
@@ -25,6 +28,7 @@ public function getArguments(): array
         return $this->arguments;
     }
 
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/CallArgument.php b/src/phpDocumentor/Reflection/Php/CallArgument.php
index e619d052..38570690 100644
--- a/src/phpDocumentor/Reflection/Php/CallArgument.php
+++ b/src/phpDocumentor/Reflection/Php/CallArgument.php
@@ -4,6 +4,11 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+/**
+ * Represents an argument in a function or method call.
+ *
+ * @api
+ */
 final class CallArgument
 {
     public function __construct(private readonly string $value, private readonly string|null $name = null)
diff --git a/src/phpDocumentor/Reflection/Php/Class_.php b/src/phpDocumentor/Reflection/Php/Class_.php
index e6b44a1b..654b050e 100644
--- a/src/phpDocumentor/Reflection/Php/Class_.php
+++ b/src/phpDocumentor/Reflection/Php/Class_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
@@ -21,6 +22,8 @@
 
 /**
  * Descriptor representing a Class.
+ *
+ * @api
  */
 // @codingStandardsIgnoreStart
 final class Class_ implements Element, MetaDataContainerInterface, AttributeContainer
@@ -202,6 +205,7 @@ public function addUsedTrait(Fqsen $fqsen): void
     /**
      * Returns the Fqsen of the element.
      */
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
@@ -210,6 +214,7 @@ public function getFqsen(): Fqsen
     /**
      * Returns the name of the element.
      */
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/Constant.php b/src/phpDocumentor/Reflection/Php/Constant.php
index 861957da..3d9bf700 100644
--- a/src/phpDocumentor/Reflection/Php/Constant.php
+++ b/src/phpDocumentor/Reflection/Php/Constant.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
@@ -21,6 +22,8 @@
 
 /**
  * Descriptor representing a constant
+ *
+ * @api
  */
 final class Constant implements Element, MetaDataContainerInterface, AttributeContainer
 {
@@ -61,6 +64,7 @@ public function getValue(): string|null
     /**
      * Returns the Fqsen of the element.
      */
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
@@ -69,6 +73,7 @@ public function getFqsen(): Fqsen
     /**
      * Returns the name of the element.
      */
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/EnumCase.php b/src/phpDocumentor/Reflection/Php/EnumCase.php
index 63393a80..1d30fc36 100644
--- a/src/phpDocumentor/Reflection/Php/EnumCase.php
+++ b/src/phpDocumentor/Reflection/Php/EnumCase.php
@@ -4,12 +4,18 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
 
+/**
+ * Represents a case in an Enum.
+ *
+ * @api
+ */
 final class EnumCase implements Element, MetaDataContainerInterface, AttributeContainer
 {
     use MetadataContainer;
@@ -38,11 +44,13 @@ public function __construct(
         $this->endLocation = $endLocation;
     }
 
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
     }
 
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/Enum_.php b/src/phpDocumentor/Reflection/Php/Enum_.php
index 30abc5da..511cdc16 100644
--- a/src/phpDocumentor/Reflection/Php/Enum_.php
+++ b/src/phpDocumentor/Reflection/Php/Enum_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
@@ -20,6 +21,11 @@
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
 use phpDocumentor\Reflection\Type;
 
+/**
+ * Descriptor representing an Enum.
+ *
+ * @api
+ */
 final class Enum_ implements Element, MetaDataContainerInterface, AttributeContainer
 {
     use MetadataContainer;
@@ -64,11 +70,13 @@ public function __construct(
         $this->endLocation = $endLocation;
     }
 
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
     }
 
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php b/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php
index 6a6cdeed..95b1a7bd 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/AbstractFactory.php
@@ -14,6 +14,7 @@
 namespace phpDocumentor\Reflection\Php\Factory;
 
 use InvalidArgumentException;
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
@@ -40,8 +41,10 @@ public function __construct(
      *
      * @param object $object object to check.
      */
+    #[Override]
     abstract public function matches(ContextStack $context, object $object): bool;
 
+    #[Override]
     public function create(ContextStack $context, object $object, StrategyContainer $strategies): void
     {
         if (!$this->matches($context, $object)) {
diff --git a/src/phpDocumentor/Reflection/Php/Factory/ClassConstant.php b/src/phpDocumentor/Reflection/Php/Factory/ClassConstant.php
index a3c714a3..9c594109 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/ClassConstant.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/ClassConstant.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Class_;
@@ -44,6 +45,7 @@ public function __construct(
         parent::__construct($blockFactory, $reducers);
     }
 
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof ClassConst;
@@ -59,6 +61,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param ClassConst $object object to convert to an Element
      * @param StrategyContainer $strategies used to convert nested objects.
      */
+    #[Override]
     protected function doCreate(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/ClassConstantIterator.php b/src/phpDocumentor/Reflection/Php/Factory/ClassConstantIterator.php
index d365230b..93e1f23c 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/ClassConstantIterator.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/ClassConstantIterator.php
@@ -14,6 +14,7 @@
 namespace phpDocumentor\Reflection\Php\Factory;
 
 use Iterator;
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use PhpParser\Comment\Doc;
 use PhpParser\Node\Expr;
@@ -123,30 +124,35 @@ public function isFinal(): bool
     }
 
     /** @link http://php.net/manual/en/iterator.current.php */
+    #[Override]
     public function current(): self
     {
         return $this;
     }
 
     /** @link http://php.net/manual/en/iterator.next.php */
+    #[Override]
     public function next(): void
     {
         ++$this->index;
     }
 
     /** @link http://php.net/manual/en/iterator.key.php */
+    #[Override]
     public function key(): int|null
     {
         return $this->index;
     }
 
     /** @link http://php.net/manual/en/iterator.valid.php */
+    #[Override]
     public function valid(): bool
     {
         return isset($this->classConstants->consts[$this->index]);
     }
 
     /** @link http://php.net/manual/en/iterator.rewind.php */
+    #[Override]
     public function rewind(): void
     {
         $this->index = 0;
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Class_.php b/src/phpDocumentor/Reflection/Php/Factory/Class_.php
index a18c4741..9c0f825e 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Class_.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Class_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Class_ as ClassElement;
@@ -27,6 +28,7 @@
  */
 final class Class_ extends AbstractFactory
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof ClassNode;
@@ -41,6 +43,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param ContextStack $context of the created object
      * @param ClassNode $object
      */
+    #[Override]
     protected function doCreate(ContextStack $context, object $object, StrategyContainer $strategies): object|null
     {
         $docBlock = $this->createDocBlock($object->getDocComment(), $context->getTypeContext());
diff --git a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
index c71e6b9f..ef8754e8 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/ConstructorPromotion.php
@@ -5,6 +5,7 @@
 namespace phpDocumentor\Reflection\Php\Factory;
 
 use OutOfBoundsException;
+use Override;
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
@@ -31,6 +32,7 @@ public function __construct(
         parent::__construct($docBlockFactory, $reducers);
     }
 
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         try {
@@ -43,6 +45,7 @@ public function matches(ContextStack $context, object $object): bool
     }
 
     /** @param ClassMethod $object */
+    #[Override]
     protected function doCreate(ContextStack $context, object $object, StrategyContainer $strategies): object|null
     {
         $this->methodStrategy->create($context, $object, $strategies);
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Define.php b/src/phpDocumentor/Reflection/Php/Factory/Define.php
index 1d8b8692..28a4fe36 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Define.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Define.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
@@ -52,6 +53,7 @@ public function __construct(
         parent::__construct($docBlockFactory);
     }
 
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         if (!$object instanceof Expression) {
@@ -79,6 +81,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param Expression $object object to convert to an Element
      * @param StrategyContainer $strategies used to convert nested objects.
      */
+    #[Override]
     protected function doCreate(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/EnumCase.php b/src/phpDocumentor/Reflection/Php/Factory/EnumCase.php
index f81532d5..14338d94 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/EnumCase.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/EnumCase.php
@@ -4,6 +4,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Enum_ as EnumElement;
@@ -26,12 +27,14 @@ public function __construct(
         parent::__construct($docBlockFactory, $reducers);
     }
 
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof EnumCaseNode;
     }
 
     /** @param EnumCaseNode $object */
+    #[Override]
     protected function doCreate(ContextStack $context, object $object, StrategyContainer $strategies): object|null
     {
         $docBlock = $this->createDocBlock($object->getDocComment(), $context->getTypeContext());
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Enum_.php b/src/phpDocumentor/Reflection/Php/Factory/Enum_.php
index 9abccfa7..4a8d7b46 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Enum_.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Enum_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\File as FileElement;
@@ -23,12 +24,14 @@
 
 final class Enum_ extends AbstractFactory
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof EnumNode;
     }
 
     /** @param EnumNode $object */
+    #[Override]
     protected function doCreate(ContextStack $context, object $object, StrategyContainer $strategies): object|null
     {
         $docBlock = $this->createDocBlock($object->getDocComment(), $context->getTypeContext());
diff --git a/src/phpDocumentor/Reflection/Php/Factory/File.php b/src/phpDocumentor/Reflection/Php/Factory/File.php
index f7d4d8fa..46fba96d 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/File.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/File.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock as DocBlockInstance;
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\File as FileSystemFile;
@@ -67,6 +68,7 @@ public function __construct(
         $this->middlewareChain = ChainFactory::createExecutionChain($middleware, $lastCallable);
     }
 
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof FileSystemFile;
@@ -82,6 +84,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param FileSystemFile $object path to the file to convert to an File object.
      * @param StrategyContainer $strategies used to convert nested objects.
      */
+    #[Override]
     protected function doCreate(ContextStack $context, object $object, StrategyContainer $strategies): object|null
     {
         $command = new CreateCommand($context, $object, $strategies);
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Function_.php b/src/phpDocumentor/Reflection/Php/Factory/Function_.php
index 8fc04ddf..fc771552 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Function_.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Function_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\File as FileElement;
 use phpDocumentor\Reflection\Php\Function_ as FunctionDescriptor;
@@ -29,6 +30,7 @@
  */
 final class Function_ extends AbstractFactory implements ProjectFactoryStrategy
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof FunctionNode && $context->peek() instanceof FileElement;
@@ -40,6 +42,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param ContextStack $context of the created object
      * @param FunctionNode $object
      */
+    #[Override]
     protected function doCreate(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/GlobalConstant.php b/src/phpDocumentor/Reflection/Php/Factory/GlobalConstant.php
index ae352e11..fc1e04ac 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/GlobalConstant.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/GlobalConstant.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Constant as ConstantElement;
@@ -38,6 +39,7 @@ public function __construct(DocBlockFactoryInterface $docBlockFactory, private r
         parent::__construct($docBlockFactory);
     }
 
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof Const_;
@@ -53,6 +55,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param Const_ $object object to convert to an Element
      * @param StrategyContainer $strategies used to convert nested objects.
      */
+    #[Override]
     protected function doCreate(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/GlobalConstantIterator.php b/src/phpDocumentor/Reflection/Php/Factory/GlobalConstantIterator.php
index 11f5a6db..ccbf11c8 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/GlobalConstantIterator.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/GlobalConstantIterator.php
@@ -14,6 +14,7 @@
 namespace phpDocumentor\Reflection\Php\Factory;
 
 use Iterator;
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use PhpParser\Comment\Doc;
 use PhpParser\Node\Expr;
@@ -89,30 +90,35 @@ public function getValue(): Expr
     }
 
     /** @link http://php.net/manual/en/iterator.current.php */
+    #[Override]
     public function current(): self
     {
         return $this;
     }
 
     /** @link http://php.net/manual/en/iterator.next.php */
+    #[Override]
     public function next(): void
     {
         ++$this->index;
     }
 
     /** @link http://php.net/manual/en/iterator.key.php */
+    #[Override]
     public function key(): int|null
     {
         return $this->index;
     }
 
     /** @link http://php.net/manual/en/iterator.valid.php */
+    #[Override]
     public function valid(): bool
     {
         return isset($this->constant->consts[$this->index]);
     }
 
     /** @link http://php.net/manual/en/iterator.rewind.php */
+    #[Override]
     public function rewind(): void
     {
         $this->index = 0;
diff --git a/src/phpDocumentor/Reflection/Php/Factory/IfStatement.php b/src/phpDocumentor/Reflection/Php/Factory/IfStatement.php
index c108cc08..1ce43476 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/IfStatement.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/IfStatement.php
@@ -4,6 +4,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategy;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 use PhpParser\Node\Stmt\Else_;
@@ -11,12 +12,14 @@
 
 class IfStatement implements ProjectFactoryStrategy
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof If_;
     }
 
     /** @param If_ $object */
+    #[Override]
     public function create(ContextStack $context, object $object, StrategyContainer $strategies): void
     {
         foreach ($object->stmts as $stmt) {
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Interface_.php b/src/phpDocumentor/Reflection/Php/Factory/Interface_.php
index 352b552a..bc4fbc0a 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Interface_.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Interface_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\File as FileElement;
@@ -27,6 +28,7 @@
  */
 final class Interface_ extends AbstractFactory implements ProjectFactoryStrategy
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof InterfaceNode;
@@ -42,6 +44,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param InterfaceNode     $object     object to convert to an Element
      * @param StrategyContainer $strategies used to convert nested objects.
      */
+    #[Override]
     protected function doCreate(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Method.php b/src/phpDocumentor/Reflection/Php/Factory/Method.php
index fbef4c70..2ffe0a8b 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Method.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Method.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Class_;
 use phpDocumentor\Reflection\Php\Enum_;
@@ -31,6 +32,7 @@
  */
 final class Method extends AbstractFactory
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof ClassMethod;
@@ -42,6 +44,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param ClassMethod $object object to convert to an MethodDescriptor
      * @param ContextStack $context of the created object
      */
+    #[Override]
     protected function doCreate(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Namespace_.php b/src/phpDocumentor/Reflection/Php/Factory/Namespace_.php
index 7a15d4c5..788b5b42 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Namespace_.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Namespace_.php
@@ -5,6 +5,7 @@
 namespace phpDocumentor\Reflection\Php\Factory;
 
 use InvalidArgumentException;
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Php\File as FileElement;
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategy;
@@ -18,12 +19,14 @@
 
 class Namespace_ implements ProjectFactoryStrategy
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof NamespaceNode;
     }
 
     /** @param NamespaceNode $object */
+    #[Override]
     public function create(ContextStack $context, object $object, StrategyContainer $strategies): void
     {
         if (!$this->matches($context, $object)) {
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Noop.php b/src/phpDocumentor/Reflection/Php/Factory/Noop.php
index bbe4f98e..c59d2cb6 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Noop.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Noop.php
@@ -4,16 +4,19 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\Php\ProjectFactoryStrategy;
 use phpDocumentor\Reflection\Php\StrategyContainer;
 
 class Noop implements ProjectFactoryStrategy
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return true;
     }
 
+    #[Override]
     public function create(ContextStack $context, object $object, StrategyContainer $strategies): void
     {
     }
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Property.php b/src/phpDocumentor/Reflection/Php/Factory/Property.php
index 90470661..4c146677 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Property.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Class_;
@@ -41,6 +42,7 @@ public function __construct(
         parent::__construct($docBlockFactory, $reducers);
     }
 
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof PropertyNode;
@@ -55,6 +57,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param ContextStack $context used to convert nested objects.
      * @param PropertyNode $object
      */
+    #[Override]
     protected function doCreate(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
index a15cd9d2..b00cc4f9 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
@@ -14,6 +14,7 @@
 namespace phpDocumentor\Reflection\Php\Factory;
 
 use Iterator;
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use PhpParser\Comment\Doc;
 use PhpParser\Node\ComplexType;
@@ -214,30 +215,35 @@ public function getHooks(): array
     }
 
     /** @link http://php.net/manual/en/iterator.current.php */
+    #[Override]
     public function current(): self
     {
         return $this;
     }
 
     /** @link http://php.net/manual/en/iterator.next.php */
+    #[Override]
     public function next(): void
     {
         ++$this->index;
     }
 
     /** @link http://php.net/manual/en/iterator.key.php */
+    #[Override]
     public function key(): int|null
     {
         return $this->index;
     }
 
     /** @link http://php.net/manual/en/iterator.valid.php */
+    #[Override]
     public function valid(): bool
     {
         return isset($this->property->props[$this->index]);
     }
 
     /** @link http://php.net/manual/en/iterator.rewind.php */
+    #[Override]
     public function rewind(): void
     {
         $this->index = 0;
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Reducer/Attribute.php b/src/phpDocumentor/Reflection/Php/Factory/Reducer/Attribute.php
index 41984f0a..ed448610 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Reducer/Attribute.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Reducer/Attribute.php
@@ -5,6 +5,7 @@
 namespace phpDocumentor\Reflection\Php\Factory\Reducer;
 
 use InvalidArgumentException;
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Php\AttributeContainer;
 use phpDocumentor\Reflection\Php\CallArgument;
@@ -28,6 +29,7 @@ public function __construct()
         $this->printer = new Standard();
     }
 
+    #[Override]
     public function reduce(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Reducer/Parameter.php b/src/phpDocumentor/Reflection/Php/Factory/Reducer/Parameter.php
index e17ab34e..074defc1 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Reducer/Parameter.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Reducer/Parameter.php
@@ -4,6 +4,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory\Reducer;
 
+use Override;
 use phpDocumentor\Reflection\Php\Argument as ArgumentDescriptor;
 use phpDocumentor\Reflection\Php\Factory\ContextStack;
 use phpDocumentor\Reflection\Php\Factory\Type;
@@ -24,6 +25,7 @@ public function __construct(private readonly PrettyPrinter $valueConverter)
     {
     }
 
+    #[Override]
     public function reduce(
         ContextStack $context,
         object $object,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/TraitUse.php b/src/phpDocumentor/Reflection/Php/Factory/TraitUse.php
index 9881d286..6ac062e9 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/TraitUse.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/TraitUse.php
@@ -5,6 +5,7 @@
 namespace phpDocumentor\Reflection\Php\Factory;
 
 use InvalidArgumentException;
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Php\Class_;
 use phpDocumentor\Reflection\Php\Enum_;
@@ -15,6 +16,7 @@
 
 final class TraitUse implements ProjectFactoryStrategy
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof TraitUseNode;
@@ -24,6 +26,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param ContextStack $context of the created object
      * @param TraitUseNode $object
      */
+    #[Override]
     public function create(ContextStack $context, object $object, StrategyContainer $strategies): void
     {
         if ($this->matches($context, $object) === false) {
diff --git a/src/phpDocumentor/Reflection/Php/Factory/Trait_.php b/src/phpDocumentor/Reflection/Php/Factory/Trait_.php
index 74624327..41245877 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/Trait_.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/Trait_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php\Factory;
 
+use Override;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\File as FileElement;
 use phpDocumentor\Reflection\Php\StrategyContainer;
@@ -22,6 +23,7 @@
 
 final class Trait_ extends AbstractFactory
 {
+    #[Override]
     public function matches(ContextStack $context, object $object): bool
     {
         return $object instanceof TraitNode;
@@ -36,6 +38,7 @@ public function matches(ContextStack $context, object $object): bool
      * @param ContextStack $context used to convert nested objects.
      * @param TraitNode $object
      */
+    #[Override]
     protected function doCreate(ContextStack $context, object $object, StrategyContainer $strategies): object|null
     {
         $trait = new TraitElement(
diff --git a/src/phpDocumentor/Reflection/Php/File.php b/src/phpDocumentor/Reflection/Php/File.php
index 9ef2702c..bd9cc2ae 100644
--- a/src/phpDocumentor/Reflection/Php/File.php
+++ b/src/phpDocumentor/Reflection/Php/File.php
@@ -21,6 +21,8 @@
 
 /**
  * Represents a file in the project.
+ *
+ * @api
  */
 final class File implements MetaDataContainerInterface
 {
diff --git a/src/phpDocumentor/Reflection/Php/Function_.php b/src/phpDocumentor/Reflection/Php/Function_.php
index 21bca78d..5b5034ea 100644
--- a/src/phpDocumentor/Reflection/Php/Function_.php
+++ b/src/phpDocumentor/Reflection/Php/Function_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
@@ -23,6 +24,8 @@
 
 /**
  * Descriptor representing a function
+ *
+ * @api
  */
 // @codingStandardsIgnoreStart
 final class Function_ implements Element, MetaDataContainerInterface, AttributeContainer
@@ -90,6 +93,7 @@ public function addArgument(Argument $argument): void
     /**
      * Returns the Fqsen of the element.
      */
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
@@ -98,6 +102,7 @@ public function getFqsen(): Fqsen
     /**
      * Returns the name of the element.
      */
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/Interface_.php b/src/phpDocumentor/Reflection/Php/Interface_.php
index f05f8ab8..a38ca067 100644
--- a/src/phpDocumentor/Reflection/Php/Interface_.php
+++ b/src/phpDocumentor/Reflection/Php/Interface_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
@@ -22,6 +23,8 @@
 
 /**
  * Descriptor representing an Interface.
+ *
+ * @api
  */
 final class Interface_ implements Element, MetaDataContainerInterface, AttributeContainer
 {
@@ -95,6 +98,7 @@ public function addMethod(Method $method): void
     /**
      * Returns the Fqsen of the element.
      */
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
@@ -103,6 +107,7 @@ public function getFqsen(): Fqsen
     /**
      * Returns the name of the element.
      */
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/Method.php b/src/phpDocumentor/Reflection/Php/Method.php
index be206c1e..d0b2774a 100644
--- a/src/phpDocumentor/Reflection/Php/Method.php
+++ b/src/phpDocumentor/Reflection/Php/Method.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
@@ -23,6 +24,8 @@
 
 /**
  * Descriptor representing a Method in a Class, Interface or Trait.
+ *
+ * @api
  */
 final class Method implements Element, MetaDataContainerInterface, AttributeContainer
 {
@@ -131,6 +134,7 @@ public function addArgument(Argument $argument): void
     /**
      * Returns the Fqsen of the element.
      */
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
@@ -139,6 +143,7 @@ public function getFqsen(): Fqsen
     /**
      * Returns the name of the element.
      */
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/Namespace_.php b/src/phpDocumentor/Reflection/Php/Namespace_.php
index 97f048e9..0e8900c8 100644
--- a/src/phpDocumentor/Reflection/Php/Namespace_.php
+++ b/src/phpDocumentor/Reflection/Php/Namespace_.php
@@ -19,6 +19,8 @@
 
 /**
  * Represents a namespace and its children for a project.
+ *
+ * @api
  */
 // @codingStandardsIgnoreStart
 final class Namespace_ implements Element, MetaDataContainerInterface
@@ -156,6 +158,7 @@ public function addTrait(Fqsen $trait): void
     /**
      * Returns the Fqsen of the element.
      */
+    #[\Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
@@ -164,6 +167,7 @@ public function getFqsen(): Fqsen
     /**
      * Returns the name of the element.
      */
+    #[\Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/Project.php b/src/phpDocumentor/Reflection/Php/Project.php
index 9a3bc48b..10041035 100644
--- a/src/phpDocumentor/Reflection/Php/Project.php
+++ b/src/phpDocumentor/Reflection/Php/Project.php
@@ -13,11 +13,14 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Project as ProjectInterface;
 
 /**
  * Represents the entire project with its files, namespaces and indexes.
+ *
+ * @api
  */
 final class Project implements ProjectInterface
 {
@@ -45,6 +48,7 @@ public function __construct(private readonly string $name, private Namespace_|nu
     /**
      * Returns the name of this project.
      */
+    #[Override]
     public function getName(): string
     {
         return $this->name;
diff --git a/src/phpDocumentor/Reflection/Php/ProjectFactory.php b/src/phpDocumentor/Reflection/Php/ProjectFactory.php
index f4aa221f..dd461b76 100644
--- a/src/phpDocumentor/Reflection/Php/ProjectFactory.php
+++ b/src/phpDocumentor/Reflection/Php/ProjectFactory.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlockFactory;
 use phpDocumentor\Reflection\Exception;
 use phpDocumentor\Reflection\File as SourceFile;
@@ -116,6 +117,7 @@ public function addStrategy(
      *
      * @throws Exception When no matching strategy was found.
      */
+    #[Override]
     public function create(string $name, array $files): ProjectInterface
     {
         $contextStack = new ContextStack(new Project($name), null);
diff --git a/src/phpDocumentor/Reflection/Php/ProjectFactoryStrategies.php b/src/phpDocumentor/Reflection/Php/ProjectFactoryStrategies.php
index a434e3a3..00c3af7c 100644
--- a/src/phpDocumentor/Reflection/Php/ProjectFactoryStrategies.php
+++ b/src/phpDocumentor/Reflection/Php/ProjectFactoryStrategies.php
@@ -14,6 +14,7 @@
 namespace phpDocumentor\Reflection\Php;
 
 use OutOfBoundsException;
+use Override;
 use phpDocumentor\Reflection\Php\Factory\ContextStack;
 use SplPriorityQueue;
 
@@ -45,6 +46,7 @@ public function __construct(array $strategies)
      *
      * @throws OutOfBoundsException When no matching strategy was found.
      */
+    #[Override]
     public function findMatching(ContextStack $context, mixed $object): ProjectFactoryStrategy
     {
         foreach (clone $this->strategies as $strategy) {
diff --git a/src/phpDocumentor/Reflection/Php/Property.php b/src/phpDocumentor/Reflection/Php/Property.php
index 9ffe2e99..d5d7193a 100644
--- a/src/phpDocumentor/Reflection/Php/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Property.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
@@ -22,6 +23,8 @@
 
 /**
  * Descriptor representing a property.
+ *
+ * @api
  */
 final class Property implements Element, MetaDataContainerInterface, AttributeContainer
 {
@@ -103,6 +106,7 @@ public function getVisibility(): Visibility|null
     /**
      * Returns the Fqsen of the element.
      */
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
@@ -111,6 +115,7 @@ public function getFqsen(): Fqsen
     /**
      * Returns the name of the element.
      */
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/PropertyHook.php b/src/phpDocumentor/Reflection/Php/PropertyHook.php
index 6009c620..9def360b 100644
--- a/src/phpDocumentor/Reflection/Php/PropertyHook.php
+++ b/src/phpDocumentor/Reflection/Php/PropertyHook.php
@@ -8,6 +8,7 @@
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Metadata\MetaDataContainer as MetaDataContainerInterface;
 
+/** @api */
 final class PropertyHook implements AttributeContainer, MetaDataContainerInterface
 {
     use MetadataContainer;
diff --git a/src/phpDocumentor/Reflection/Php/Trait_.php b/src/phpDocumentor/Reflection/Php/Trait_.php
index 91fe3747..0e4d80f9 100644
--- a/src/phpDocumentor/Reflection/Php/Trait_.php
+++ b/src/phpDocumentor/Reflection/Php/Trait_.php
@@ -13,6 +13,7 @@
 
 namespace phpDocumentor\Reflection\Php;
 
+use Override;
 use phpDocumentor\Reflection\DocBlock;
 use phpDocumentor\Reflection\Element;
 use phpDocumentor\Reflection\Fqsen;
@@ -21,6 +22,8 @@
 
 /**
  * Descriptor representing a Trait.
+ *
+ * @api
  */
 final class Trait_ implements Element, MetaDataContainerInterface, AttributeContainer
 {
@@ -104,6 +107,7 @@ public function addProperty(Property $property): void
     /**
      * Returns the Fqsen of the element.
      */
+    #[Override]
     public function getFqsen(): Fqsen
     {
         return $this->fqsen;
@@ -112,6 +116,7 @@ public function getFqsen(): Fqsen
     /**
      * Returns the name of the element.
      */
+    #[Override]
     public function getName(): string
     {
         return $this->fqsen->getName();
diff --git a/src/phpDocumentor/Reflection/Php/Visibility.php b/src/phpDocumentor/Reflection/Php/Visibility.php
index 9715c8af..59d7c523 100644
--- a/src/phpDocumentor/Reflection/Php/Visibility.php
+++ b/src/phpDocumentor/Reflection/Php/Visibility.php
@@ -14,6 +14,7 @@
 namespace phpDocumentor\Reflection\Php;
 
 use InvalidArgumentException;
+use Override;
 use Stringable;
 
 use function sprintf;
@@ -21,6 +22,8 @@
 
 /**
  * Value object for visibility values of classes, properties, ect.
+ *
+ * @api
  */
 class Visibility implements Stringable
 {
@@ -63,6 +66,7 @@ public function __construct(string $visibility)
     /**
      * Will return a string representation of visibility.
      */
+    #[Override]
     public function __toString(): string
     {
         return $this->visibility;

From cd6e3756ff7a049ebae73856ac4f035c17b79d81 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Fri, 30 May 2025 20:39:35 +0200
Subject: [PATCH 121/129] Rename Async to Asymmetric

Async is the wrong term. This should have been Asymmetric from the start.
---
 ...isibility.php => AsymmetricVisibility.php} |  2 +-
 .../Php/Factory/PropertyBuilder.php           | 12 +++++------
 .../Php/Factory/PropertyIterator.php          | 16 +++++++-------
 ...sorTest.php => AsymmetricAccessorTest.php} | 21 ++++++++++---------
 tests/integration/PropertyHookTest.php        | 10 ++++-----
 ...yncAccessor.php => AsymmetricAccessor.php} |  2 +-
 ...on.php => AsymmetricPropertyPromotion.php} |  2 +-
 ...okAsync.php => PropertyHookAsymmetric.php} |  0
 8 files changed, 33 insertions(+), 32 deletions(-)
 rename src/phpDocumentor/Reflection/Php/{AsyncVisibility.php => AsymmetricVisibility.php} (90%)
 rename tests/integration/{AsyncAccessorTest.php => AsymmetricAccessorTest.php} (59%)
 rename tests/integration/data/PHP84/{AsyncAccessor.php => AsymmetricAccessor.php} (73%)
 rename tests/integration/data/PHP84/{AsyncPropertyPromotion.php => AsymmetricPropertyPromotion.php} (77%)
 rename tests/integration/data/PHP84/{PropertyHookAsync.php => PropertyHookAsymmetric.php} (100%)

diff --git a/src/phpDocumentor/Reflection/Php/AsyncVisibility.php b/src/phpDocumentor/Reflection/Php/AsymmetricVisibility.php
similarity index 90%
rename from src/phpDocumentor/Reflection/Php/AsyncVisibility.php
rename to src/phpDocumentor/Reflection/Php/AsymmetricVisibility.php
index a2bdb6f4..1877f398 100644
--- a/src/phpDocumentor/Reflection/Php/AsyncVisibility.php
+++ b/src/phpDocumentor/Reflection/Php/AsymmetricVisibility.php
@@ -5,7 +5,7 @@
 namespace phpDocumentor\Reflection\Php;
 
 /** @api */
-final class AsyncVisibility extends Visibility
+final class AsymmetricVisibility extends Visibility
 {
     public function __construct(
         private Visibility $readVisibility,
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
index 794c2129..850bac5e 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
@@ -7,7 +7,7 @@
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
-use phpDocumentor\Reflection\Php\AsyncVisibility;
+use phpDocumentor\Reflection\Php\AsymmetricVisibility;
 use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\Property as PropertyElement;
 use phpDocumentor\Reflection\Php\PropertyHook;
@@ -159,11 +159,11 @@ public function build(ContextStack $context): PropertyElement
     }
 
     /**
-     * Returns true when current property has async accessors.
+     * Returns true when current property has asymmetric accessors.
      *
      * This method will always return false when your phpparser version is < 5.2
      */
-    private function isAsync(Param|PropertyIterator $node): bool
+    private function isAsymmetric(Param|PropertyIterator $node): bool
     {
         if (method_exists($node, 'isPrivateSet') === false) {
             return false;
@@ -174,7 +174,7 @@ private function isAsync(Param|PropertyIterator $node): bool
 
     private function buildVisibility(Param|PropertyIterator $node): Visibility
     {
-        if ($this->isAsync($node) === false) {
+        if ($this->isAsymmetric($node) === false) {
             return $this->buildReadVisibility($node);
         }
 
@@ -185,7 +185,7 @@ private function buildVisibility(Param|PropertyIterator $node): Visibility
             return $readVisibility;
         }
 
-        return new AsyncVisibility(
+        return new AsymmetricVisibility(
             $readVisibility,
             $writeVisibility,
         );
@@ -266,7 +266,7 @@ private function buildHook(PropertyHookNode $hook, ContextStack $context, Visibi
 
     private function buildHookVisibility(string $hookName, Visibility $propertyVisibility): Visibility
     {
-        if ($propertyVisibility instanceof AsyncVisibility === false) {
+        if ($propertyVisibility instanceof AsymmetricVisibility === false) {
             return $propertyVisibility;
         }
 
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
index b00cc4f9..ea0c5cac 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyIterator.php
@@ -54,13 +54,13 @@ public function isPublic(): bool
     }
 
     /**
-     * Returns async accessor value for current property.
+     * Returns asymmetric accessor value for current property.
      *
      * This method will return the same value as {@see self::isPublic()} when your phpparser version is < 5.2
      */
     public function isPublicSet(): bool
     {
-        if ($this->isAsync() === false) {
+        if ($this->isAsymmetric() === false) {
             return $this->isPublic();
         }
 
@@ -76,13 +76,13 @@ public function isProtected(): bool
     }
 
     /**
-     * Returns async accessor value for current property.
+     * Returns asymetric accessor value for current property.
      *
      * This method will return the same value as {@see self::isProtected()} when your phpparser version is < 5.2
      */
     public function isProtectedSet(): bool
     {
-        if ($this->isAsync() === false) {
+        if ($this->isAsymmetric() === false) {
             return $this->isProtected();
         }
 
@@ -98,13 +98,13 @@ public function isPrivate(): bool
     }
 
     /**
-     * Returns async accessor value for current property.
+     * Returns asymetric accessor value for current property.
      *
      * This method will return the same value as {@see self::isPrivate()} when your phpparser version is < 5.2
      */
     public function isPrivateSet(): bool
     {
-        if ($this->isAsync() === false) {
+        if ($this->isAsymmetric() === false) {
             return $this->isPrivate();
         }
 
@@ -112,11 +112,11 @@ public function isPrivateSet(): bool
     }
 
     /**
-     * Returns true when current property has async accessors.
+     * Returns true when current property has asymetric accessors.
      *
      * This method will always return false when your phpparser version is < 5.2
      */
-    public function isAsync(): bool
+    public function isAsymmetric(): bool
     {
         if (method_exists($this->property, 'isPrivateSet') === false) {
             return false;
diff --git a/tests/integration/AsyncAccessorTest.php b/tests/integration/AsymmetricAccessorTest.php
similarity index 59%
rename from tests/integration/AsyncAccessorTest.php
rename to tests/integration/AsymmetricAccessorTest.php
index 1c67e009..ee6dfc4f 100644
--- a/tests/integration/AsyncAccessorTest.php
+++ b/tests/integration/AsymmetricAccessorTest.php
@@ -11,41 +11,42 @@
 
 /** @coversNothing */
 #[RequiresPackage('nikic/php-parser', '>= 5.2')]
-final class AsyncAccessorTest extends TestCase
+final class AsymmetricAccessorTest extends TestCase
 {
-    public function testAsyncAccessor(): void
+    public function testAsymmetricAccessor(): void
     {
-        $file = __DIR__ . '/data/PHP84/AsyncAccessor.php';
+        $file = __DIR__ . '/data/PHP84/AsymmetricAccessor.php';
         $projectFactory = ProjectFactory::createInstance();
         $project = $projectFactory->create('My project', [new LocalFile($file)]);
 
-        $class = $project->getFiles()[$file]->getClasses()['\AsyncAccessor'];
+        $class = $project->getFiles()[$file]->getClasses()['\AsymmetricAccessor'];
 
         self::assertEquals(
             'public',
-            $class->getProperties()['\AsyncAccessor::$pizza']->getVisibility()->getReadVisibility(),
+            $class->getProperties()['\AsymmetricAccessor::$pizza']->getVisibility()->getReadVisibility(),
         );
         self::assertEquals(
             'private',
-            $class->getProperties()['\AsyncAccessor::$pizza']->getVisibility()->getWriteVisibility(),
+            $class->getProperties()['\AsymmetricAccessor::$pizza']->getVisibility()->getWriteVisibility(),
         );
     }
 
     public function testAsyncPropertyPromotion(): void
     {
-        $file = __DIR__ . '/data/PHP84/AsyncPropertyPromotion.php';
+        $file = __DIR__ . '/data/PHP84/AsymmetricPropertyPromotion.php';
         $projectFactory = ProjectFactory::createInstance();
         $project = $projectFactory->create('My project', [new LocalFile($file)]);
 
-        $class = $project->getFiles()[$file]->getClasses()['\AsyncPropertyPromotion'];
+
+        $class = $project->getFiles()[$file]->getClasses()['\AsymmetricPropertyPromotion'];
 
         self::assertEquals(
             'public',
-            $class->getProperties()['\AsyncPropertyPromotion::$pizza']->getVisibility()->getReadVisibility(),
+            $class->getProperties()['\AsymmetricPropertyPromotion::$pizza']->getVisibility()->getReadVisibility(),
         );
         self::assertEquals(
             'protected',
-            $class->getProperties()['\AsyncPropertyPromotion::$pizza']->getVisibility()->getWriteVisibility(),
+            $class->getProperties()['\AsymmetricPropertyPromotion::$pizza']->getVisibility()->getWriteVisibility(),
         );
     }
 }
diff --git a/tests/integration/PropertyHookTest.php b/tests/integration/PropertyHookTest.php
index 00416ea5..be04b3fe 100644
--- a/tests/integration/PropertyHookTest.php
+++ b/tests/integration/PropertyHookTest.php
@@ -9,7 +9,7 @@
 use phpDocumentor\Reflection\File\LocalFile;
 use phpDocumentor\Reflection\Location;
 use phpDocumentor\Reflection\Php\Argument;
-use phpDocumentor\Reflection\Php\AsyncVisibility;
+use phpDocumentor\Reflection\Php\AsymmetricVisibility;
 use phpDocumentor\Reflection\Php\Attribute;
 use phpDocumentor\Reflection\Php\ProjectFactory;
 use phpDocumentor\Reflection\Php\PropertyHook;
@@ -24,7 +24,7 @@
 #[CoversNothing]
 final class PropertyHookTest extends TestCase
 {
-    public function testPropertyHookWithDocblocks()
+    public function testPropertyHookWithDocblocks(): void
     {
         $file = __DIR__ . '/data/PHP84/PropertyHook.php';
         $projectFactory = ProjectFactory::createInstance();
@@ -56,9 +56,9 @@ public function testPropertyHookWithDocblocks()
         $this->assertSame('Not sure this works, but it gets', $hooks[0]->getDocBlock()->getSummary());
     }
 
-    public function testPropertyHookAsync()
+    public function testPropertyHookAsymmetric(): void
     {
-        $file = __DIR__ . '/data/PHP84/PropertyHookAsync.php';
+        $file = __DIR__ . '/data/PHP84/PropertyHookAsymmetric.php';
         $projectFactory = ProjectFactory::createInstance();
         $project = $projectFactory->create('My project', [new LocalFile($file)]);
 
@@ -67,7 +67,7 @@ public function testPropertyHookAsync()
 
 
         $this->assertEquals(
-            new AsyncVisibility(
+            new AsymmetricVisibility(
                 new Visibility(Visibility::PUBLIC_),
                 new Visibility(Visibility::PRIVATE_)
             ),
diff --git a/tests/integration/data/PHP84/AsyncAccessor.php b/tests/integration/data/PHP84/AsymmetricAccessor.php
similarity index 73%
rename from tests/integration/data/PHP84/AsyncAccessor.php
rename to tests/integration/data/PHP84/AsymmetricAccessor.php
index 7556d532..992145e2 100644
--- a/tests/integration/data/PHP84/AsyncAccessor.php
+++ b/tests/integration/data/PHP84/AsymmetricAccessor.php
@@ -2,7 +2,7 @@
 
 declare(strict_types=1);
 
-class AsyncAccessor
+class AsymmetricAccessor
 {
     private(set) \Pizza $pizza;
 }
diff --git a/tests/integration/data/PHP84/AsyncPropertyPromotion.php b/tests/integration/data/PHP84/AsymmetricPropertyPromotion.php
similarity index 77%
rename from tests/integration/data/PHP84/AsyncPropertyPromotion.php
rename to tests/integration/data/PHP84/AsymmetricPropertyPromotion.php
index 01860592..0a501d5a 100644
--- a/tests/integration/data/PHP84/AsyncPropertyPromotion.php
+++ b/tests/integration/data/PHP84/AsymmetricPropertyPromotion.php
@@ -2,7 +2,7 @@
 
 declare(strict_types=1);
 
-class AsyncPropertyPromotion
+class AsymmetricPropertyPromotion
 {
     public function __construct(
         protected(set) Pizza $pizza,
diff --git a/tests/integration/data/PHP84/PropertyHookAsync.php b/tests/integration/data/PHP84/PropertyHookAsymmetric.php
similarity index 100%
rename from tests/integration/data/PHP84/PropertyHookAsync.php
rename to tests/integration/data/PHP84/PropertyHookAsymmetric.php

From aa24249ef50f07ce55092130239eace87b9ccb2a Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Fri, 30 May 2025 21:48:45 +0200
Subject: [PATCH 122/129] Add rendered documentation for website

---
 .github/workflows/documentation.yaml      | 61 +++++++++++++++++++++++
 .gitignore                                |  2 +
 .phpdoc/template/base.html.twig           | 15 ++++++
 Makefile                                  |  8 ++-
 README.md                                 |  2 +-
 docs/extending/index.rst                  | 34 +++++++++++++
 docs/{ => extending}/meta-data.rst        |  0
 docs/filtering.rst                        |  4 --
 docs/getting-started.rst                  | 49 ++++++++++++++++++
 docs/incremental-updates.rst              |  4 --
 docs/index.rst                            | 23 ++++++++-
 docs/inspecting.rst                       |  4 --
 docs/integrating-with-silex-and-cilex.rst |  4 --
 docs/reflection-structure.rst             | 20 ++++++++
 docs/usage.rst                            |  4 --
 phpdoc.dist.xml                           | 45 +++++++++++++++++
 16 files changed, 255 insertions(+), 24 deletions(-)
 create mode 100644 .github/workflows/documentation.yaml
 create mode 100644 .phpdoc/template/base.html.twig
 create mode 100644 docs/extending/index.rst
 rename docs/{ => extending}/meta-data.rst (100%)
 delete mode 100644 docs/filtering.rst
 create mode 100644 docs/getting-started.rst
 delete mode 100644 docs/incremental-updates.rst
 delete mode 100644 docs/inspecting.rst
 delete mode 100644 docs/integrating-with-silex-and-cilex.rst
 create mode 100644 docs/reflection-structure.rst
 delete mode 100644 docs/usage.rst
 create mode 100644 phpdoc.dist.xml

diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml
new file mode 100644
index 00000000..02ba2c24
--- /dev/null
+++ b/.github/workflows/documentation.yaml
@@ -0,0 +1,61 @@
+name: "Documentation"
+
+on: # yamllint disable-line rule:truthy
+  push:
+    branches:
+      - "6.x"
+  pull_request: null
+
+jobs:
+  documentation:
+    name: "Documentation"
+    runs-on: "ubuntu-latest"
+    steps:
+      - name: "Checkout"
+        uses: "actions/checkout@v4"
+
+      - name: "Build"
+        uses: "phpDocumentor/phpDocumentor@master"
+
+      - name: "Deploy"
+        if: "${{ github.event_name == 'push' && github.ref == 'refs/heads/6.x' }}"
+        uses: "actions/upload-artifact@v4"
+        with:
+          name: "documentation"
+          path: "build/docs"
+          retention-days: 1
+
+  deploy:
+    name: "Deploy"
+    if: "${{ github.event_name == 'push' && github.ref == 'refs/heads/6.x' }}"
+    runs-on: "ubuntu-latest"
+    needs: "documentation"
+    steps:
+      - name: "Checkout"
+        uses: "actions/checkout@v4"
+        with:
+          repository: "phpDocumentor/docs"
+          token: "${{ secrets.BOT_TOKEN }}"
+          path: "docs"
+
+      - name: "Download"
+        uses: "actions/download-artifact@v4"
+        with:
+          name: "documentation"
+          path: "build/docs"
+
+      - name: "Copy files"
+        run: "rsync -r --delete build/docs/* docs/docs/components/reflection"
+
+      - name: "Commit"
+        uses: "stefanzweifel/git-auto-commit-action@v5"
+        with:
+          repository: "docs"
+          commit_message: "Update reflection documentation"
+
+      - name: "Push"
+        uses: "ad-m/github-push-action@master"
+        with:
+          directory: "docs"
+          github_token: "${{ secrets.BOT_TOKEN }}"
+          repository: "phpDocumentor/docs"
diff --git a/.gitignore b/.gitignore
index 9e57f05f..9e915a18 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,5 @@ vendor/
 phpunit.xml
 .phpunit.result.cache
 .phpunit.cache
+
+.phpdoc/cache
diff --git a/.phpdoc/template/base.html.twig b/.phpdoc/template/base.html.twig
new file mode 100644
index 00000000..194b2192
--- /dev/null
+++ b/.phpdoc/template/base.html.twig
@@ -0,0 +1,15 @@
+{% extends 'layout.html.twig' %}
+
+{% set topMenu = {
+    "menu": [
+        { "name": "About", "url": "https://phpdoc.org/"},
+        { "name": "Components", "url": "https://phpdoc.org/components.html"},
+        { "name": "Documentation", "url": "https://docs.phpdoc.org/"},
+    ],
+    "social": [
+        { "iconClass": "fab fa-mastodon", "url": "https://phpc.social/@phpdoc"},
+        { "iconClass": "fab fa-github", "url": "https://github.com/phpdocumentor/typeresolver"},
+        { "iconClass": "fas fa-envelope-open-text", "url": "https://github.com/orgs/phpDocumentor/discussions"}
+    ]
+}
+%}
diff --git a/Makefile b/Makefile
index 15c0e2d9..272b3d6c 100644
--- a/Makefile
+++ b/Makefile
@@ -11,9 +11,9 @@ fix-code-style:
 	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.1-cli vendor/bin/phpcbf
 
 .PHONY: static-code-analysis
-static-code-analysis: vendor ## Runs a static code analysis with phpstan/phpstan and vimeo/psalm
+static-code-analysis: #vendor ## Runs a static code analysis with phpstan/phpstan and vimeo/psalm
 	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.2-cli vendor/bin/phpstan --configuration=phpstan.neon
-	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.2-cli vendor/bin/psalm.phar
+	docker run -it --rm -v${PWD}:/opt/project -w /opt/project php:8.2-cli vendor/bin/psalm.phar --show-info=true --threads=4
 
 .PHONY: test
 test: test-unit test-functional ## Runs all test suites with phpunit/phpunit
@@ -45,3 +45,7 @@ rector: ## Refactor code using rector
 
 .PHONY: pre-commit-test
 pre-commit-test: fix-code-style test code-style static-code-analysis
+
+.PHONY: docs
+docs: ## Generate documentation
+	docker run -it --rm -v${PWD}:/opt/project -w /opt/project phpdoc/phpdoc:3-unstable
diff --git a/README.md b/README.md
index 2405f0de..ef4113d3 100644
--- a/README.md
+++ b/README.md
@@ -37,7 +37,7 @@ are however several advantages to using this library:
 In order to inspect a codebase you need to tell composer to include the `phpdocumentor/reflection` package. This
 can easily be done using the following command in your command line terminal:
 
-    composer require phpdocumentor/reflection:~5.0
+    composer require phpdocumentor/reflection:~6.0
 
 After the installation is complete no further configuration is necessary and you can immediately start using it.
 
diff --git a/docs/extending/index.rst b/docs/extending/index.rst
new file mode 100644
index 00000000..3ad13ccf
--- /dev/null
+++ b/docs/extending/index.rst
@@ -0,0 +1,34 @@
+.. _extending:
+
+Extend the library
+==================
+
+The model exposed by this library is closed for inheritance. We did this to ensure the model is stable and does not
+change via external factors. The complexity of this project makes it hard to keep all the internal classes stable.
+The model is designed to be cached and constructed very carefully to ensure performance and memory usage are optimal.
+
+Metadata
+--------
+
+Metadata is a way to extend the model with additional information. We call this metadata, as all first class
+elements in the reflected codebase are part of the model. Extra data can be added to these elements using metadata.
+
+Elements supporting metadata are:
+
+.. phpdoc:class-list:: [?(@.interfaces contains "\phpDocumentor\Reflection\Metadata\MetaDataContainer")]
+
+   .. phpdoc:name::
+
+.. warning::
+
+    Adding metadata might break the posibilty to cache the model. Be carefull with circular references and large
+    objects. We do recommend to keep the metadata small and simple.
+
+Continue reading :doc:`Creating your first metadata <meta-data>`_ to learn how to create your own metadata.
+
+.. toctree::
+   :maxdepth: 1
+   :titlesonly:
+   :hidden:
+
+   meta-data
diff --git a/docs/meta-data.rst b/docs/extending/meta-data.rst
similarity index 100%
rename from docs/meta-data.rst
rename to docs/extending/meta-data.rst
diff --git a/docs/filtering.rst b/docs/filtering.rst
deleted file mode 100644
index e8425d00..00000000
--- a/docs/filtering.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Filtering
-=========
-
-.. info:: The contents for this page are planned but need to be written, please come back later to check for this
\ No newline at end of file
diff --git a/docs/getting-started.rst b/docs/getting-started.rst
new file mode 100644
index 00000000..447f37ad
--- /dev/null
+++ b/docs/getting-started.rst
@@ -0,0 +1,49 @@
+Getting started
+===============
+
+This page will give you a quick introduction to the `phpdocumentor/reflection` package and how to get started with it.
+
+Installation
+------------
+
+In order to inspect a codebase you need to tell composer to include the `phpdocumentor/reflection` package. This
+can easily be done using the following command in your command line terminal:
+
+.. code-block:: bash
+
+    composer require phpdocumentor/reflection:~6.0
+
+In order to use the library you need to include the autoloader of composer in your code.
+ This can be done by adding the following line to your code:
+
+.. code-block:: php
+
+    <?php
+    require_once 'vendor/autoload.php';
+
+After the installation is complete no further configuration is necessary and you can immediately start using it.
+
+Basic usage
+------------
+
+The :php:class:`\phpDocumentor\Reflection\Php\ProjectFactory` class is the entry point to the library and is used to create a new
+project object that contains all the information about your codebase. It is configured with sensible defaults. And for most
+usecases you can just use it as is.
+
+.. code-block:: php
+
+    $projectFactory = \phpDocumentor\Reflection\Php\ProjectFactory::createInstance();
+
+At this point we are ready to analyze your complete project or just one file at the time. Just pass an array of file paths to the `create` method of the project factory.
+
+.. code-block:: php
+
+    $projectFiles = [new \phpDocumentor\Reflection\File\LocalFile('tests/example.file.php')];
+    $project = $projectFactory->create('My Project', $projectFiles);
+
+When the process is ready a new object of type :php:class:`phpDocumentor\Reflection\Php\Project` will be returned that
+contains a complete hierarchy of all files with their classes, traits and interfaces (and everything in there), but also
+all namespaces and packages as a hierarchical tree.
+This library does not provide a way to access the structure of the codebase in a searchable way.
+This is up to the consumer of the library to implement.
+
diff --git a/docs/incremental-updates.rst b/docs/incremental-updates.rst
deleted file mode 100644
index 8f83164b..00000000
--- a/docs/incremental-updates.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Incremental updates
-===================
-
-.. info:: The contents for this page are planned but need to be written, please come back later to check for this
\ No newline at end of file
diff --git a/docs/index.rst b/docs/index.rst
index d4f2f984..52b3506e 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,7 +1,28 @@
 Reflection
 ==========
 
+Using this library it is possible to statically reflect one or more files and create an object graph representing
+your application's structure, including accompanying in-source documentation using DocBlocks.
+
+The information that this library provides is similar to what the (built-in) Reflection extension of PHP provides; there
+are however several advantages to using this library:
+
+- Due to its Static nature it does not execute procedural code in your reflected files where Dynamic Reflection does.
+- Because the none of the code is interpreted by PHP (and executed) Static Reflection uses less memory.
+- Can reflect complete files
+- Can reflect a whole project by reflecting multiple files.
+- Reflects the contents of a DocBlock instead of just mentioning there is one.
+- Is capable of analyzing code written for any PHP version (starting at 5.2) up to the lastest version, even if your installed
+    PHP version is lower than the code you are reflecting.
+
+.. note::
+    As this library focuses on reflecting the structure of the codebase, it does not provide any options to manipulate
+    the output. If you want to collect more information from the codebase you can read about :ref:`extending the library <extending>`.
+
 .. toctree::
    :hidden:
+   :maxdepth: 2
 
-   meta-data
+   getting-started
+   reflection-structure
+   extending/index
diff --git a/docs/inspecting.rst b/docs/inspecting.rst
deleted file mode 100644
index 660040f2..00000000
--- a/docs/inspecting.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Inspecting
-==========
-
-.. info:: The contents for this page are planned but need to be written, please come back later to check for this
\ No newline at end of file
diff --git a/docs/integrating-with-silex-and-cilex.rst b/docs/integrating-with-silex-and-cilex.rst
deleted file mode 100644
index 4b80a411..00000000
--- a/docs/integrating-with-silex-and-cilex.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Integrating with Silex and Cilex
-================================
-
-.. info:: The contents for this page are planned but need to be written, please come back later to check for this
\ No newline at end of file
diff --git a/docs/reflection-structure.rst b/docs/reflection-structure.rst
new file mode 100644
index 00000000..55fb23d6
--- /dev/null
+++ b/docs/reflection-structure.rst
@@ -0,0 +1,20 @@
+Reflection structure
+====================
+
+The project created by the :php:class:`\phpDocumentor\Reflection\Php\ProjectFactory` class contains a hierarchy of objects
+that represent the structure of your codebase. This hierarchy includes:
+
+Files
+  Each file is represented by an object of type :php:class:`\phpDocumentor\Reflection\Php\File` which contains
+  information about the file such as its name, path, and contents. But also the elements that are defined in the file.
+  Files can be accessed through the :php:method:`\phpDocumentor\Reflection\Php\Project::getFiles()` method of the project object.
+  Files are a flat list of all files that were analyzed, regardless of their location in the directory structure.
+
+Namespaces
+  Namespaces are represented by objects of type :php:class:`\phpDocumentor\Reflection\Php\Namespace_`. Each namespace
+  contains a list of classes, interfaces, traits, and functions that are defined within it. Namespaces can be accessed
+  through the :php:method:`\phpDocumentor\Reflection\Php\Project::getNamespaces()` method of the project object.
+  Namespaces are hierarchical and can contain sub-namespaces.
+
+Both namespaces and files do contain the other structural elements that are defined in them, such as classes, interfaces, traits, and functions.
+This library does not provide a way to access the structure of the codebase in a searchable way. This is up to the consumer of the library to implement.
diff --git a/docs/usage.rst b/docs/usage.rst
deleted file mode 100644
index 35474b2a..00000000
--- a/docs/usage.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Usage
-=====
-
-.. info:: The contents for this page are planned but need to be written, please come back later to check for this
\ No newline at end of file
diff --git a/phpdoc.dist.xml b/phpdoc.dist.xml
new file mode 100644
index 00000000..8c277c77
--- /dev/null
+++ b/phpdoc.dist.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<phpdocumentor
+        configVersion="3"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns="https://www.phpdoc.org"
+        xsi:noNamespaceSchemaLocation="data/xsd/phpdoc.xsd"
+>
+    <title>Guides</title>
+    <paths>
+        <output>build/docs</output>
+    </paths>
+    <version number="6.2.0">
+        <folder>latest</folder>
+        <api>
+            <source dsn=".">
+                <path>src/phpDocumentor</path>
+            </source>
+            <output>api</output>
+            <ignore hidden="true" symlinks="true">
+                <path>tests/**/*</path>
+                <path>build/**/*</path>
+                <path>var/**/*</path>
+                <path>vendor/**/*</path>
+            </ignore>
+            <extensions>
+                <extension>php</extension>
+            </extensions>
+            <ignore-tags>
+                <ignore-tag>template</ignore-tag>
+                <ignore-tag>template-extends</ignore-tag>
+                <ignore-tag>template-implements</ignore-tag>
+                <ignore-tag>extends</ignore-tag>
+                <ignore-tag>implements</ignore-tag>
+            </ignore-tags>
+            <default-package-name>phpDocumentor</default-package-name>
+        </api>
+        <guide>
+            <source dsn=".">
+                <path>docs</path>
+            </source>
+            <output>guides</output>
+        </guide>
+    </version>
+    <template name="default" />
+</phpdocumentor>

From 75cbf09e79ac9dbb01f3dec84da99b518498783a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 2 Jun 2025 09:09:52 +0000
Subject: [PATCH 123/129] Bump nikic/php-parser from 5.4.0 to 5.5.0

Bumps [nikic/php-parser](https://github.com/nikic/PHP-Parser) from 5.4.0 to 5.5.0.
- [Release notes](https://github.com/nikic/PHP-Parser/releases)
- [Changelog](https://github.com/nikic/PHP-Parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nikic/PHP-Parser/compare/v5.4.0...v5.5.0)

---
updated-dependencies:
- dependency-name: nikic/php-parser
  dependency-version: 5.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index 512a17ba..542bf776 100644
--- a/composer.lock
+++ b/composer.lock
@@ -56,16 +56,16 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v5.4.0",
+            "version": "v5.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
+                "reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
-                "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
+                "reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
                 "shasum": ""
             },
             "require": {
@@ -108,9 +108,9 @@
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
             },
-            "time": "2024-12-30T11:07:19+00:00"
+            "time": "2025-05-31T08:24:38+00:00"
         },
         {
             "name": "phpdocumentor/reflection-common",

From a6fff8f9277715fd4db9007904ed0c2775083230 Mon Sep 17 00:00:00 2001
From: Jaapio <jaap@ijaap.nl>
Date: Fri, 6 Jun 2025 15:35:48 +0200
Subject: [PATCH 124/129] Find references to property if virtual

Properties not referencing themself in a hook are called virtual.
This is now reflected by the property.
---
 .../Reflection/NodeVisitor/FindingVisitor.php | 17 +++++
 .../Php/Factory/PropertyBuilder.php           | 73 ++++++++++++++++++-
 src/phpDocumentor/Reflection/Php/Property.php | 11 +++
 tests/integration/PropertyHookTest.php        | 37 ++++++++++
 .../data/PHP84/PropertyHookVirtual.php        | 60 +++++++++++++++
 5 files changed, 194 insertions(+), 4 deletions(-)
 create mode 100644 src/phpDocumentor/Reflection/NodeVisitor/FindingVisitor.php
 create mode 100644 tests/integration/data/PHP84/PropertyHookVirtual.php

diff --git a/src/phpDocumentor/Reflection/NodeVisitor/FindingVisitor.php b/src/phpDocumentor/Reflection/NodeVisitor/FindingVisitor.php
new file mode 100644
index 00000000..9bc17ab1
--- /dev/null
+++ b/src/phpDocumentor/Reflection/NodeVisitor/FindingVisitor.php
@@ -0,0 +1,17 @@
+<?php
+
+declare(strict_types=1);
+
+namespace phpDocumentor\Reflection\NodeVisitor;
+
+use PhpParser\NodeVisitor\FirstFindingVisitor as BaseFindingVisitor;
+
+final class FindingVisitor extends BaseFindingVisitor
+{
+    public function __construct(callable $filterCallback)
+    {
+        parent::__construct($filterCallback);
+
+        $this->foundNode = null;
+    }
+}
diff --git a/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
index 850bac5e..db1a2776 100644
--- a/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
+++ b/src/phpDocumentor/Reflection/Php/Factory/PropertyBuilder.php
@@ -7,6 +7,7 @@
 use phpDocumentor\Reflection\DocBlockFactoryInterface;
 use phpDocumentor\Reflection\Fqsen;
 use phpDocumentor\Reflection\Location;
+use phpDocumentor\Reflection\NodeVisitor\FindingVisitor;
 use phpDocumentor\Reflection\Php\AsymmetricVisibility;
 use phpDocumentor\Reflection\Php\Factory\Reducer\Reducer;
 use phpDocumentor\Reflection\Php\Property as PropertyElement;
@@ -15,16 +16,21 @@
 use phpDocumentor\Reflection\Php\Visibility;
 use PhpParser\Comment\Doc;
 use PhpParser\Modifiers;
+use PhpParser\Node;
 use PhpParser\Node\ComplexType;
 use PhpParser\Node\Expr;
+use PhpParser\Node\Expr\PropertyFetch;
+use PhpParser\Node\Expr\Variable;
 use PhpParser\Node\Identifier;
 use PhpParser\Node\Name;
 use PhpParser\Node\Param;
 use PhpParser\Node\PropertyHook as PropertyHookNode;
+use PhpParser\NodeTraverser;
 use PhpParser\PrettyPrinter\Standard as PrettyPrinter;
 
 use function array_filter;
 use function array_map;
+use function count;
 use function method_exists;
 
 /**
@@ -141,6 +147,14 @@ public function hooks(array $hooks): self
 
     public function build(ContextStack $context): PropertyElement
     {
+        $hooks = array_filter(array_map(
+            fn (PropertyHookNode $hook) => $this->buildHook($hook, $context, $this->visibility),
+            $this->hooks,
+        ));
+
+        // Check if this is a virtual property by examining all hooks
+        $isVirtual = $this->isVirtualProperty($this->hooks, $this->fqsen->getName());
+
         return new PropertyElement(
             $this->fqsen,
             $this->visibility,
@@ -151,10 +165,8 @@ public function build(ContextStack $context): PropertyElement
             $this->endLocation,
             (new Type())->fromPhpParser($this->type),
             $this->readOnly,
-            array_filter(array_map(
-                fn (PropertyHookNode $hook) => $this->buildHook($hook, $context, $this->visibility),
-                $this->hooks,
-            )),
+            $hooks,
+            $isVirtual,
         );
     }
 
@@ -264,6 +276,59 @@ private function buildHook(PropertyHookNode $hook, ContextStack $context, Visibi
         return $result;
     }
 
+    /**
+     * Detects if a property is virtual by checking if any of its hooks reference the property itself.
+     *
+     * A virtual property is one where no defined hook references the property itself.
+     * For example, in the 'get' hook, it doesn't use $this->propertyName.
+     *
+     * @param PropertyHookNode[] $hooks The property hooks to check
+     * @param string $propertyName The name of the property
+     *
+     * @return bool True if the property is virtual, false otherwise
+     */
+    private function isVirtualProperty(array $hooks, string $propertyName): bool
+    {
+        if (empty($hooks)) {
+            return false;
+        }
+
+        foreach ($hooks as $hook) {
+            $stmts = $hook->getStmts();
+
+            if ($stmts === null || count($stmts) === 0) {
+                continue;
+            }
+
+            $finder = new FindingVisitor(
+                static function (Node $node) use ($propertyName) {
+                    // Check if the node is a property fetch that references the property
+                    return $node instanceof PropertyFetch && $node->name instanceof Identifier &&
+                        $node->name->toString() === $propertyName &&
+                        $node->var instanceof Variable &&
+                        $node->var->name === 'this';
+                },
+            );
+
+            $traverser = new NodeTraverser($finder);
+            $traverser->traverse($stmts);
+
+            if ($finder->getFoundNode() !== null) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Builds the hook visibility based on the hook name and property visibility.
+     *
+     * @param string $hookName The name of the hook ('get' or 'set')
+     * @param Visibility $propertyVisibility The visibility of the property
+     *
+     * @return Visibility The appropriate visibility for the hook
+     */
     private function buildHookVisibility(string $hookName, Visibility $propertyVisibility): Visibility
     {
         if ($propertyVisibility instanceof AsymmetricVisibility === false) {
diff --git a/src/phpDocumentor/Reflection/Php/Property.php b/src/phpDocumentor/Reflection/Php/Property.php
index d5d7193a..2f72d5f0 100644
--- a/src/phpDocumentor/Reflection/Php/Property.php
+++ b/src/phpDocumentor/Reflection/Php/Property.php
@@ -55,6 +55,7 @@ public function __construct(
         private readonly Type|null $type = null,
         private readonly bool $readOnly = false,
         private readonly array $hooks = [],
+        private readonly bool $virtual = false,
     ) {
         $this->visibility = $visibility ?: new Visibility('public');
         $this->location = $location ?: new Location(-1);
@@ -154,4 +155,14 @@ public function getHooks(): array
     {
         return $this->hooks;
     }
+
+    /**
+     * Returns true when this property is virtual (not explicitly backed).
+     *
+     * A virtual property is one where no defined hook references the property itself.
+     */
+    public function isVirtual(): bool
+    {
+        return $this->virtual;
+    }
 }
diff --git a/tests/integration/PropertyHookTest.php b/tests/integration/PropertyHookTest.php
index be04b3fe..2691595d 100644
--- a/tests/integration/PropertyHookTest.php
+++ b/tests/integration/PropertyHookTest.php
@@ -33,6 +33,7 @@ public function testPropertyHookWithDocblocks(): void
         $class = $project->getFiles()[$file]->getClasses()['\PropertyHook'];
         $hooks = $class->getProperties()['\PropertyHook::$example']->getHooks();
 
+        $this->assertTrue($class->getProperties()['\PropertyHook::$example']->isVirtual());
         $this->assertCount(2, $hooks);
         $this->assertEquals('get', $hooks[0]->getName());
         $this->assertEquals(new Visibility(Visibility::PUBLIC_), $hooks[0]->getVisibility());
@@ -73,6 +74,7 @@ public function testPropertyHookAsymmetric(): void
             ),
             $class->getProperties()['\PropertyHook::$example']->getVisibility()
         );
+        $this->assertTrue($class->getProperties()['\PropertyHook::$example']->isVirtual());
         $this->assertCount(2, $hooks);
         $this->assertEquals('get', $hooks[0]->getName());
         $this->assertEquals(new Visibility(Visibility::PUBLIC_), $hooks[0]->getVisibility());
@@ -91,4 +93,39 @@ public function testPropertyHookAsymmetric(): void
             ),
         ), $hooks[1]->getArguments()[0]);
     }
+
+    public function testVirtualProperty(): void
+    {
+        $file = __DIR__ . '/data/PHP84/PropertyHookVirtual.php';
+        $projectFactory = ProjectFactory::createInstance();
+        $project = $projectFactory->create('My project', [new LocalFile($file)]);
+
+        $class = $project->getFiles()[$file]->getClasses()['\PropertyHookVirtual'];
+
+        // Test get-only virtual property
+        $fullNameProperty = $class->getProperties()['\PropertyHookVirtual::$fullName'];
+        $this->assertTrue($fullNameProperty->isVirtual(), 'Property with getter that doesn\'t reference itself should be virtual');
+        $this->assertCount(1, $fullNameProperty->getHooks());
+        $this->assertEquals('get', $fullNameProperty->getHooks()[0]->getName());
+
+        // Test set-only virtual property
+        $compositeNameProperty = $class->getProperties()['\PropertyHookVirtual::$compositeName'];
+        $this->assertTrue($compositeNameProperty->isVirtual(), 'Property with setter that doesn\'t reference itself should be virtual');
+        $this->assertCount(1, $compositeNameProperty->getHooks());
+        $this->assertEquals('set', $compositeNameProperty->getHooks()[0]->getName());
+
+        // Test property with both get and set hooks that doesn't reference itself
+        $completeFullNameProperty = $class->getProperties()['\PropertyHookVirtual::$completeFullName'];
+        $this->assertTrue($completeFullNameProperty->isVirtual(), 'Property with getter and setter that don\'t reference itself should be virtual');
+        $this->assertCount(2, $completeFullNameProperty->getHooks());
+
+        $nonVirtualPropertyWithoutHooks = $class->getProperties()['\PropertyHookVirtual::$firstName'];
+        $this->assertFalse($nonVirtualPropertyWithoutHooks->isVirtual(), 'Property without hooks should not be virtual');
+        $this->assertCount(0, $nonVirtualPropertyWithoutHooks->getHooks());
+
+        // Test non-virtual property that references itself
+        $nonVirtualNameProperty = $class->getProperties()['\PropertyHookVirtual::$nonVirtualName'];
+        $this->assertFalse($nonVirtualNameProperty->isVirtual(), 'Property with hooks that reference itself should not be virtual');
+        $this->assertCount(2, $nonVirtualNameProperty->getHooks());
+    }
 }
diff --git a/tests/integration/data/PHP84/PropertyHookVirtual.php b/tests/integration/data/PHP84/PropertyHookVirtual.php
new file mode 100644
index 00000000..7e6f5ec3
--- /dev/null
+++ b/tests/integration/data/PHP84/PropertyHookVirtual.php
@@ -0,0 +1,60 @@
+<?php
+
+declare(strict_types=1);
+
+class PropertyHookVirtual
+{
+    /**
+     * A virtual property that composes a full name from first and last name
+     */
+    public string $fullName {
+        // This is a virtual property with a getter
+        // It doesn't reference $this->fullName
+        get {
+            return $this->firstName . ' ' . $this->lastName;
+        }
+    }
+
+    /**
+     * A virtual property that decomposes a full name into first and last name
+     */
+    public string $compositeName {
+        // This is a virtual property with a setter
+        // It doesn't reference $this->compositeName
+        set(string $value) {
+            [$this->firstName, $this->lastName] = explode(' ', $value, 2);
+        }
+    }
+
+    /**
+     * A virtual property with both getter and setter
+     */
+    public string $completeFullName {
+        // Getter doesn't reference $this->completeFullName
+        get {
+            return $this->firstName . ' ' . $this->lastName;
+        }
+        // Setter doesn't reference $this->completeFullName
+        set(string $value) {
+            [$this->firstName, $this->lastName] = explode(' ', $value, 2);
+        }
+    }
+
+    /**
+     * A non-virtual property that references itself in its hook
+     */
+    public string $nonVirtualName {
+        get {
+            return $this->nonVirtualName ?? $this->firstName;
+        }
+        set(string $value) {
+            $this->nonVirtualName = $value;
+        }
+    }
+
+    public function __construct(
+        private string $firstName = 'John',
+        private string $lastName = 'Doe'
+    ) {
+    }
+}

From 17f90b47ab90be12f6eeb30fc594937c17cee3f1 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 13 Jun 2025 08:22:41 +0000
Subject: [PATCH 125/129] Bump squizlabs/php_codesniffer from 3.13.0 to 3.13.1

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.13.0 to 3.13.1.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.13.0...3.13.1)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-version: 3.13.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 542bf776..8bc333e6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2885,16 +2885,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.13.0",
+            "version": "3.13.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "65ff2489553b83b4597e89c3b8b721487011d186"
+                "reference": "1b71b4dd7e7ef651ac749cea67e513c0c832f4bd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/65ff2489553b83b4597e89c3b8b721487011d186",
-                "reference": "65ff2489553b83b4597e89c3b8b721487011d186",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/1b71b4dd7e7ef651ac749cea67e513c0c832f4bd",
+                "reference": "1b71b4dd7e7ef651ac749cea67e513c0c832f4bd",
                 "shasum": ""
             },
             "require": {
@@ -2965,7 +2965,7 @@
                     "type": "thanks_dev"
                 }
             ],
-            "time": "2025-05-11T03:36:00+00:00"
+            "time": "2025-06-12T15:04:34+00:00"
         },
         {
             "name": "theseer/tokenizer",

From ba4b83a52e09b38e678cddb4b472bb7b70f1d0d0 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 16 Jun 2025 09:21:25 +0000
Subject: [PATCH 126/129] Bump stefanzweifel/git-auto-commit-action from 5 to 6

Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 5 to 6.
- [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases)
- [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: stefanzweifel/git-auto-commit-action
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 .github/workflows/documentation.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml
index 02ba2c24..2d960e2a 100644
--- a/.github/workflows/documentation.yaml
+++ b/.github/workflows/documentation.yaml
@@ -48,7 +48,7 @@ jobs:
         run: "rsync -r --delete build/docs/* docs/docs/components/reflection"
 
       - name: "Commit"
-        uses: "stefanzweifel/git-auto-commit-action@v5"
+        uses: "stefanzweifel/git-auto-commit-action@v6"
         with:
           repository: "docs"
           commit_message: "Update reflection documentation"

From 01d3c74ac867120a1bdd8ee359e044092e3b1d9b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 18 Jun 2025 08:38:24 +0000
Subject: [PATCH 127/129] Bump squizlabs/php_codesniffer from 3.13.1 to 3.13.2

Bumps [squizlabs/php_codesniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer) from 3.13.1 to 3.13.2.
- [Release notes](https://github.com/PHPCSStandards/PHP_CodeSniffer/releases)
- [Changelog](https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/PHP_CodeSniffer/compare/3.13.1...3.13.2)

---
updated-dependencies:
- dependency-name: squizlabs/php_codesniffer
  dependency-version: 3.13.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/composer.lock b/composer.lock
index 8bc333e6..a23f058b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2885,16 +2885,16 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "3.13.1",
+            "version": "3.13.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
-                "reference": "1b71b4dd7e7ef651ac749cea67e513c0c832f4bd"
+                "reference": "5b5e3821314f947dd040c70f7992a64eac89025c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/1b71b4dd7e7ef651ac749cea67e513c0c832f4bd",
-                "reference": "1b71b4dd7e7ef651ac749cea67e513c0c832f4bd",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5b5e3821314f947dd040c70f7992a64eac89025c",
+                "reference": "5b5e3821314f947dd040c70f7992a64eac89025c",
                 "shasum": ""
             },
             "require": {
@@ -2965,7 +2965,7 @@
                     "type": "thanks_dev"
                 }
             ],
-            "time": "2025-06-12T15:04:34+00:00"
+            "time": "2025-06-17T22:17:01+00:00"
         },
         {
             "name": "theseer/tokenizer",

From c51d0db82a492c393df4efc737293f365cbaa9bd Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 25 Jun 2025 08:20:00 +0000
Subject: [PATCH 128/129] Bump dealerdirect/phpcodesniffer-composer-installer
 from 1.0.0 to 1.1.0

Bumps [dealerdirect/phpcodesniffer-composer-installer](https://github.com/PHPCSStandards/composer-installer) from 1.0.0 to 1.1.0.
- [Release notes](https://github.com/PHPCSStandards/composer-installer/releases)
- [Changelog](https://github.com/PHPCSStandards/composer-installer/blob/main/.github_changelog_generator)
- [Commits](https://github.com/PHPCSStandards/composer-installer/compare/v1.0.0...v1.1.0)

---
updated-dependencies:
- dependency-name: dealerdirect/phpcodesniffer-composer-installer
  dependency-version: 1.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 40 +++++++++++++++++++++++++++++-----------
 1 file changed, 29 insertions(+), 11 deletions(-)

diff --git a/composer.lock b/composer.lock
index a23f058b..eee5ac38 100644
--- a/composer.lock
+++ b/composer.lock
@@ -476,25 +476,25 @@
     "packages-dev": [
         {
             "name": "dealerdirect/phpcodesniffer-composer-installer",
-            "version": "v1.0.0",
+            "version": "v1.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/composer-installer.git",
-                "reference": "4be43904336affa5c2f70744a348312336afd0da"
+                "reference": "18a95476797ed480b3f2598984bc6f7e1eecc9a8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da",
-                "reference": "4be43904336affa5c2f70744a348312336afd0da",
+                "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/18a95476797ed480b3f2598984bc6f7e1eecc9a8",
+                "reference": "18a95476797ed480b3f2598984bc6f7e1eecc9a8",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0 || ^2.0",
+                "composer-plugin-api": "^2.2",
                 "php": ">=5.4",
                 "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
             },
             "require-dev": {
-                "composer/composer": "*",
+                "composer/composer": "^2.2",
                 "ext-json": "*",
                 "ext-zip": "*",
                 "php-parallel-lint/php-parallel-lint": "^1.3.1",
@@ -517,9 +517,9 @@
             "authors": [
                 {
                     "name": "Franck Nijhof",
-                    "email": "franck.nijhof@dealerdirect.com",
-                    "homepage": "http://www.frenck.nl",
-                    "role": "Developer / IT Manager"
+                    "email": "opensource@frenck.dev",
+                    "homepage": "https://frenck.dev",
+                    "role": "Open source developer"
                 },
                 {
                     "name": "Contributors",
@@ -527,7 +527,6 @@
                 }
             ],
             "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
-            "homepage": "http://www.dealerdirect.com",
             "keywords": [
                 "PHPCodeSniffer",
                 "PHP_CodeSniffer",
@@ -548,9 +547,28 @@
             ],
             "support": {
                 "issues": "https://github.com/PHPCSStandards/composer-installer/issues",
+                "security": "https://github.com/PHPCSStandards/composer-installer/security/policy",
                 "source": "https://github.com/PHPCSStandards/composer-installer"
             },
-            "time": "2023-01-05T11:28:13+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/PHPCSStandards",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/jrfnl",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/php_codesniffer",
+                    "type": "open_collective"
+                },
+                {
+                    "url": "https://thanks.dev/u/gh/phpcsstandards",
+                    "type": "thanks_dev"
+                }
+            ],
+            "time": "2025-05-28T16:05:48+00:00"
         },
         {
             "name": "doctrine/coding-standard",

From a7f5c34c48bdfa97523f7f2495f72edf327e0174 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 30 Jun 2025 11:13:45 +0000
Subject: [PATCH 129/129] Bump dealerdirect/phpcodesniffer-composer-installer
 from 1.1.0 to 1.1.1

Bumps [dealerdirect/phpcodesniffer-composer-installer](https://github.com/PHPCSStandards/composer-installer) from 1.1.0 to 1.1.1.
- [Release notes](https://github.com/PHPCSStandards/composer-installer/releases)
- [Changelog](https://github.com/PHPCSStandards/composer-installer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PHPCSStandards/composer-installer/compare/v1.1.0...v1.1.1)

---
updated-dependencies:
- dependency-name: dealerdirect/phpcodesniffer-composer-installer
  dependency-version: 1.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
---
 composer.lock | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index eee5ac38..5374ce23 100644
--- a/composer.lock
+++ b/composer.lock
@@ -476,16 +476,16 @@
     "packages-dev": [
         {
             "name": "dealerdirect/phpcodesniffer-composer-installer",
-            "version": "v1.1.0",
+            "version": "v1.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPCSStandards/composer-installer.git",
-                "reference": "18a95476797ed480b3f2598984bc6f7e1eecc9a8"
+                "reference": "6e0fa428497bf560152ee73ffbb8af5c6a56b0dd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/18a95476797ed480b3f2598984bc6f7e1eecc9a8",
-                "reference": "18a95476797ed480b3f2598984bc6f7e1eecc9a8",
+                "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/6e0fa428497bf560152ee73ffbb8af5c6a56b0dd",
+                "reference": "6e0fa428497bf560152ee73ffbb8af5c6a56b0dd",
                 "shasum": ""
             },
             "require": {
@@ -497,7 +497,7 @@
                 "composer/composer": "^2.2",
                 "ext-json": "*",
                 "ext-zip": "*",
-                "php-parallel-lint/php-parallel-lint": "^1.3.1",
+                "php-parallel-lint/php-parallel-lint": "^1.4.0",
                 "phpcompatibility/php-compatibility": "^9.0",
                 "yoast/phpunit-polyfills": "^1.0"
             },
@@ -568,7 +568,7 @@
                     "type": "thanks_dev"
                 }
             ],
-            "time": "2025-05-28T16:05:48+00:00"
+            "time": "2025-06-27T17:24:01+00:00"
         },
         {
             "name": "doctrine/coding-standard",