From aa7da3d94b6db22be8d75833cc0f735d50e316d2 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Wed, 17 Apr 2024 13:21:10 +0200 Subject: [PATCH 1/5] Synchronize with doctrine --- stubs/Collections/Collection.stub | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/Collections/Collection.stub b/stubs/Collections/Collection.stub index 455733c8..be162ef6 100644 --- a/stubs/Collections/Collection.stub +++ b/stubs/Collections/Collection.stub @@ -21,7 +21,7 @@ interface Collection extends Countable, IteratorAggregate, ArrayAccess, Readable * * @param T $element * - * @return true + * @return void */ public function add($element) {} From 3d6353beacfaeccc9b020ee5d009808561a2814e Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Wed, 17 Apr 2024 15:43:29 +0200 Subject: [PATCH 2/5] Use conditional loading --- extension.neon | 1 - .../Doctrine/StubFilesExtensionLoader.php | 9 ++++ stubs/Collections/Collection.stub | 2 +- stubs/Collections/Collection1.stub | 46 +++++++++++++++++++ 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 stubs/Collections/Collection1.stub diff --git a/extension.neon b/extension.neon index 01b69199..0c798f8f 100644 --- a/extension.neon +++ b/extension.neon @@ -38,7 +38,6 @@ parameters: - stubs/Persistence/ObjectRepository.stub - stubs/RepositoryFactory.stub - stubs/Collections/ArrayCollection.stub - - stubs/Collections/Collection.stub - stubs/Collections/ReadableCollection.stub - stubs/Collections/Selectable.stub - stubs/ORM/AbstractQuery.stub diff --git a/src/Stubs/Doctrine/StubFilesExtensionLoader.php b/src/Stubs/Doctrine/StubFilesExtensionLoader.php index 422f71da..68aa0d6c 100644 --- a/src/Stubs/Doctrine/StubFilesExtensionLoader.php +++ b/src/Stubs/Doctrine/StubFilesExtensionLoader.php @@ -2,10 +2,12 @@ namespace PHPStan\Stubs\Doctrine; +use Composer\InstalledVersions; use PHPStan\BetterReflection\Reflector\Exception\IdentifierNotFound; use PHPStan\BetterReflection\Reflector\Reflector; use PHPStan\PhpDoc\StubFilesExtension; use function dirname; +use function strpos; class StubFilesExtensionLoader implements StubFilesExtension { @@ -59,6 +61,13 @@ public function getFiles(): array $files[] = $stubsDir . '/ServiceEntityRepository.stub'; } + $collectionVersion = InstalledVersions::getVersion('doctrine/dbal'); + if ($collectionVersion !== null && strpos($collectionVersion, '1.') === 0) { + $files[] = $stubsDir . '/Collections/Collection1.stub'; + } else { + $files[] = $stubsDir . '/Collections/Collection.stub'; + } + return $files; } diff --git a/stubs/Collections/Collection.stub b/stubs/Collections/Collection.stub index be162ef6..455733c8 100644 --- a/stubs/Collections/Collection.stub +++ b/stubs/Collections/Collection.stub @@ -21,7 +21,7 @@ interface Collection extends Countable, IteratorAggregate, ArrayAccess, Readable * * @param T $element * - * @return void + * @return true */ public function add($element) {} diff --git a/stubs/Collections/Collection1.stub b/stubs/Collections/Collection1.stub new file mode 100644 index 00000000..be162ef6 --- /dev/null +++ b/stubs/Collections/Collection1.stub @@ -0,0 +1,46 @@ + + * @extends ArrayAccess + * @extends ReadableCollection + */ +interface Collection extends Countable, IteratorAggregate, ArrayAccess, ReadableCollection +{ + + /** + * @phpstan-impure + * + * @param T $element + * + * @return void + */ + public function add($element) {} + + /** + * @phpstan-impure + * + * @param TKey $key + * + * @return T|null + */ + public function remove($key) {} + + /** + * @phpstan-impure + * + * @param T $element + * + * @return bool + */ + public function removeElement($element) {} + +} From cb1c2df60f86d690247b9f74a537638cf9ac6330 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Wed, 17 Apr 2024 15:54:18 +0200 Subject: [PATCH 3/5] Fix --- stubs/Collections/Collection.stub | 2 +- stubs/Collections/Collection1.stub | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stubs/Collections/Collection.stub b/stubs/Collections/Collection.stub index 455733c8..be162ef6 100644 --- a/stubs/Collections/Collection.stub +++ b/stubs/Collections/Collection.stub @@ -21,7 +21,7 @@ interface Collection extends Countable, IteratorAggregate, ArrayAccess, Readable * * @param T $element * - * @return true + * @return void */ public function add($element) {} diff --git a/stubs/Collections/Collection1.stub b/stubs/Collections/Collection1.stub index be162ef6..455733c8 100644 --- a/stubs/Collections/Collection1.stub +++ b/stubs/Collections/Collection1.stub @@ -21,7 +21,7 @@ interface Collection extends Countable, IteratorAggregate, ArrayAccess, Readable * * @param T $element * - * @return void + * @return true */ public function add($element) {} From 6da1a659b039824374c71a1a081e8e0cf84c10d9 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Wed, 17 Apr 2024 17:19:57 +0200 Subject: [PATCH 4/5] Fix --- src/Stubs/Doctrine/StubFilesExtensionLoader.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Stubs/Doctrine/StubFilesExtensionLoader.php b/src/Stubs/Doctrine/StubFilesExtensionLoader.php index 68aa0d6c..ed5d1590 100644 --- a/src/Stubs/Doctrine/StubFilesExtensionLoader.php +++ b/src/Stubs/Doctrine/StubFilesExtensionLoader.php @@ -61,7 +61,9 @@ public function getFiles(): array $files[] = $stubsDir . '/ServiceEntityRepository.stub'; } - $collectionVersion = InstalledVersions::getVersion('doctrine/dbal'); + $collectionVersion = class_exists(InstalledVersions::class) + ? InstalledVersions::getVersion('doctrine/collections') + : null; if ($collectionVersion !== null && strpos($collectionVersion, '1.') === 0) { $files[] = $stubsDir . '/Collections/Collection1.stub'; } else { From a419021ef5d2fd4846d3245bda12d01312ec7a9d Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Wed, 17 Apr 2024 17:21:09 +0200 Subject: [PATCH 5/5] Add try catch --- src/Stubs/Doctrine/StubFilesExtensionLoader.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Stubs/Doctrine/StubFilesExtensionLoader.php b/src/Stubs/Doctrine/StubFilesExtensionLoader.php index ed5d1590..f53ef16a 100644 --- a/src/Stubs/Doctrine/StubFilesExtensionLoader.php +++ b/src/Stubs/Doctrine/StubFilesExtensionLoader.php @@ -3,9 +3,11 @@ namespace PHPStan\Stubs\Doctrine; use Composer\InstalledVersions; +use OutOfBoundsException; use PHPStan\BetterReflection\Reflector\Exception\IdentifierNotFound; use PHPStan\BetterReflection\Reflector\Reflector; use PHPStan\PhpDoc\StubFilesExtension; +use function class_exists; use function dirname; use function strpos; @@ -61,9 +63,13 @@ public function getFiles(): array $files[] = $stubsDir . '/ServiceEntityRepository.stub'; } - $collectionVersion = class_exists(InstalledVersions::class) - ? InstalledVersions::getVersion('doctrine/collections') - : null; + try { + $collectionVersion = class_exists(InstalledVersions::class) + ? InstalledVersions::getVersion('doctrine/collections') + : null; + } catch (OutOfBoundsException $e) { + $collectionVersion = null; + } if ($collectionVersion !== null && strpos($collectionVersion, '1.') === 0) { $files[] = $stubsDir . '/Collections/Collection1.stub'; } else {