From 44ca68ad9e3601251ed621203cb614d5631e1424 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Fri, 17 Apr 2026 12:04:42 +0200 Subject: [PATCH 1/3] NarrowPublicClassMethodParamTypeRule: Fix generic-object false-positive --- .../Fixture/Generics/SkipSameGeneric.php | 19 ++++++++++++++ ...rrowPublicClassMethodParamTypeRuleTest.php | 8 ++++++ .../Source/SkipSameGeneric/MyGroup.php | 10 +++++++ .../Source/SkipSameGeneric/MyIterator.php | 12 +++++++++ .../Source/SkipSameGeneric/MyService.php | 26 +++++++++++++++++++ 5 files changed, 75 insertions(+) create mode 100644 tests/Rules/NarrowPublicClassMethodParamTypeRule/Fixture/Generics/SkipSameGeneric.php create mode 100644 tests/Rules/NarrowPublicClassMethodParamTypeRule/Source/SkipSameGeneric/MyGroup.php create mode 100644 tests/Rules/NarrowPublicClassMethodParamTypeRule/Source/SkipSameGeneric/MyIterator.php create mode 100644 tests/Rules/NarrowPublicClassMethodParamTypeRule/Source/SkipSameGeneric/MyService.php diff --git a/tests/Rules/NarrowPublicClassMethodParamTypeRule/Fixture/Generics/SkipSameGeneric.php b/tests/Rules/NarrowPublicClassMethodParamTypeRule/Fixture/Generics/SkipSameGeneric.php new file mode 100644 index 00000000..160755ec --- /dev/null +++ b/tests/Rules/NarrowPublicClassMethodParamTypeRule/Fixture/Generics/SkipSameGeneric.php @@ -0,0 +1,19 @@ + $_werbemasse + */ + public function setWerbemasse($_werbemasse): void + { + $this->_werbemasse = $_werbemasse; + } +} + + diff --git a/tests/Rules/NarrowPublicClassMethodParamTypeRule/NarrowPublicClassMethodParamTypeRuleTest.php b/tests/Rules/NarrowPublicClassMethodParamTypeRule/NarrowPublicClassMethodParamTypeRuleTest.php index ff2044be..182582ca 100644 --- a/tests/Rules/NarrowPublicClassMethodParamTypeRule/NarrowPublicClassMethodParamTypeRuleTest.php +++ b/tests/Rules/NarrowPublicClassMethodParamTypeRule/NarrowPublicClassMethodParamTypeRuleTest.php @@ -160,6 +160,14 @@ public static function provideData(): Iterator $argErrorMessage = sprintf(NarrowPublicClassMethodParamTypeRule::ERROR_MESSAGE, 'bool'); yield [[__DIR__ . '/Fixture/ExplicitlyNullableParams.php'], [[$argErrorMessage, 9]]]; + + // skip generics + yield [[ + __DIR__ . '/Fixture/Generics/SkipSameGeneric.php', + __DIR__ . '/Source/SkipSameGeneric/MyGroup.php', + __DIR__ . '/Source/SkipSameGeneric/MyIterator.php', + __DIR__ . '/Source/SkipSameGeneric/MyService.php', + ], []]; } /** diff --git a/tests/Rules/NarrowPublicClassMethodParamTypeRule/Source/SkipSameGeneric/MyGroup.php b/tests/Rules/NarrowPublicClassMethodParamTypeRule/Source/SkipSameGeneric/MyGroup.php new file mode 100644 index 00000000..e0e02d70 --- /dev/null +++ b/tests/Rules/NarrowPublicClassMethodParamTypeRule/Source/SkipSameGeneric/MyGroup.php @@ -0,0 +1,10 @@ +articleModel->setWerbemasse($this->fetchCustomizationPositionsByArtidAndSprache()); + } + + /** + * @return MyIterator + */ + public function fetchCustomizationPositionsByArtidAndSprache(int $artid, int $spracheid): MyIterator + { + } + +} From f45a68cba95772e59b59606873babef45160ef06 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Fri, 17 Apr 2026 12:12:02 +0200 Subject: [PATCH 2/3] Update CollectorMetadataPrinter.php --- src/Printer/CollectorMetadataPrinter.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Printer/CollectorMetadataPrinter.php b/src/Printer/CollectorMetadataPrinter.php index 8233b7d0..da0268e2 100644 --- a/src/Printer/CollectorMetadataPrinter.php +++ b/src/Printer/CollectorMetadataPrinter.php @@ -25,6 +25,7 @@ use PHPStan\Type\ObjectType; use PHPStan\Type\ThisType; use PHPStan\Type\Type; +use PHPStan\Type\Generic\GenericObjectType; use PHPStan\Type\TypeCombinator; use PHPStan\Type\UnionType as PHPStanUnionType; use PHPStan\Type\VerbosityLevel; @@ -65,6 +66,10 @@ public function printArgTypesAsString( return ResolvedTypes::UNKNOWN_TYPES; } + if ($argType instanceof GenericObjectType) { + return ResolvedTypes::UNKNOWN_TYPES; + } + if ($argType instanceof PHPStanUnionType) { return ResolvedTypes::UNKNOWN_TYPES; } From 637bf65f94b5268c16297bb459a5fc00230b2819 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Fri, 17 Apr 2026 12:12:20 +0200 Subject: [PATCH 3/3] Update CollectorMetadataPrinter.php --- src/Printer/CollectorMetadataPrinter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Printer/CollectorMetadataPrinter.php b/src/Printer/CollectorMetadataPrinter.php index da0268e2..26a1e732 100644 --- a/src/Printer/CollectorMetadataPrinter.php +++ b/src/Printer/CollectorMetadataPrinter.php @@ -19,13 +19,13 @@ use PHPStan\Reflection\ExtendedMethodReflection; use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Type\ClosureType; +use PHPStan\Type\Generic\GenericObjectType; use PHPStan\Type\IntegerRangeType; use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; use PHPStan\Type\ObjectType; use PHPStan\Type\ThisType; use PHPStan\Type\Type; -use PHPStan\Type\Generic\GenericObjectType; use PHPStan\Type\TypeCombinator; use PHPStan\Type\UnionType as PHPStanUnionType; use PHPStan\Type\VerbosityLevel;