Skip to content

Commit e81b4bf

Browse files
committed
skip is_object() on anything
1 parent aeb1421 commit e81b4bf

3 files changed

Lines changed: 43 additions & 7 deletions

File tree

rules-tests/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector/Fixture/Ternary_/is_object_to_direct.php.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Rector\Doctrine\Tests\TypedCollections\Rector\If_\RemoveIfInstanceofCollectionRector\Fixture\Ternary;
3+
namespace Rector\Doctrine\Tests\TypedCollections\Rector\If_\RemoveIfInstanceofCollectionRector\Fixture\Ternary_;
44

55
use Doctrine\Common\Collections\Collection;
66

@@ -18,7 +18,7 @@ final class IsObjectToDirect
1818
-----
1919
<?php
2020

21-
namespace Rector\Doctrine\Tests\TypedCollections\Rector\If_\RemoveIfInstanceofCollectionRector\Fixture\Ternary;
21+
namespace Rector\Doctrine\Tests\TypedCollections\Rector\If_\RemoveIfInstanceofCollectionRector\Fixture\Ternary_;
2222

2323
use Doctrine\Common\Collections\Collection;
2424

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace Rector\Doctrine\Tests\TypedCollections\Rector\If_\RemoveIfInstanceofCollectionRector\Fixture\Ternary_;
4+
5+
final class SkipIsObjectOnAnything
6+
{
7+
public $items;
8+
9+
public function someMethod()
10+
{
11+
return is_object($this->items) ? 1 : 2;
12+
}
13+
}

rules/TypedCollections/Rector/If_/RemoveIfInstanceofCollectionRector.php

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -182,14 +182,18 @@ private function refactorTernary(Ternary $ternary): ?Expr
182182
$condition = $ternary->cond;
183183
}
184184

185-
if (! $condition instanceof FuncCall) {
186-
return null;
187-
}
188-
189-
if ($this->isName($condition, 'is_object')) {
185+
if ($this->isIsObjectFuncCallOnCollection($condition)) {
190186
return $ternary->if;
191187
}
192188

189+
// if (! $condition instanceof FuncCall) {
190+
// return null;
191+
// }
192+
193+
// if ($this->isName($condition, 'is_object') && $this->isInstanceofCollectionType($condition->args[0]->value)) {
194+
// return $ternary->if;
195+
// }
196+
193197
return null;
194198
}
195199

@@ -201,4 +205,23 @@ private function isInstanceofCollectionType(Expr $expr): bool
201205

202206
return $this->collectionTypeDetector->isCollectionType($expr->expr);
203207
}
208+
209+
private function isIsObjectFuncCallOnCollection(Expr $expr): bool
210+
{
211+
if (! $expr instanceof FuncCall) {
212+
return false;
213+
}
214+
215+
if ($expr->isFirstClassCallable()) {
216+
return false;
217+
}
218+
219+
if (! $this->isName($expr->name, 'is_object')) {
220+
return false;
221+
}
222+
223+
$firstArg = $expr->getArgs()[0];
224+
225+
return $this->collectionTypeDetector->isCollectionType($firstArg->value);
226+
}
204227
}

0 commit comments

Comments
 (0)