diff --git a/rules-tests/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector/Fixture/Ternary_/is_object_to_direct.php.inc b/rules-tests/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector/Fixture/Ternary_/is_object_to_direct.php.inc index 0f8ec3bf..960bce10 100644 --- a/rules-tests/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector/Fixture/Ternary_/is_object_to_direct.php.inc +++ b/rules-tests/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector/Fixture/Ternary_/is_object_to_direct.php.inc @@ -1,6 +1,6 @@ items) ? 1 : 2; + } +} diff --git a/rules/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector.php b/rules/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector.php index 1d353f33..4f1dc9c6 100644 --- a/rules/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector.php +++ b/rules/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector.php @@ -182,11 +182,7 @@ private function refactorTernary(Ternary $ternary): ?Expr $condition = $ternary->cond; } - if (! $condition instanceof FuncCall) { - return null; - } - - if ($this->isName($condition, 'is_object')) { + if ($this->isIsObjectFuncCallOnCollection($condition)) { return $ternary->if; } @@ -201,4 +197,23 @@ private function isInstanceofCollectionType(Expr $expr): bool return $this->collectionTypeDetector->isCollectionType($expr->expr); } + + private function isIsObjectFuncCallOnCollection(Expr $expr): bool + { + if (! $expr instanceof FuncCall) { + return false; + } + + if ($expr->isFirstClassCallable()) { + return false; + } + + if (! $this->isName($expr->name, 'is_object')) { + return false; + } + + $firstArg = $expr->getArgs()[0]; + + return $this->collectionTypeDetector->isCollectionType($firstArg->value); + } }