diff --git a/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php b/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php index 6388e660440..00c6e8ca0ae 100644 --- a/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php +++ b/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php @@ -3,17 +3,16 @@ declare (strict_types=1); namespace Rector\DeadCode\NodeAnalyzer; -use PHPStan\Type\ObjectType; use PhpParser\Node; use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; use PhpParser\Node\Expr\BinaryOp\BooleanOr; +use PhpParser\Node\Expr\Instanceof_; use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticPropertyFetch; use PhpParser\Node\Expr\Variable; use PHPStan\Reflection\ClassReflection; use Rector\NodeAnalyzer\ExprAnalyzer; -use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Reflection\ReflectionResolver; final class SafeLeftTypeBooleanAndOrAnalyzer @@ -33,17 +32,11 @@ final class SafeLeftTypeBooleanAndOrAnalyzer * @var \Rector\Reflection\ReflectionResolver */ private $reflectionResolver; - /** - * @readonly - * @var \Rector\NodeTypeResolver\NodeTypeResolver - */ - private $nodeTypeResolver; - public function __construct(BetterNodeFinder $betterNodeFinder, ExprAnalyzer $exprAnalyzer, ReflectionResolver $reflectionResolver, NodeTypeResolver $nodeTypeResolver) + public function __construct(BetterNodeFinder $betterNodeFinder, ExprAnalyzer $exprAnalyzer, ReflectionResolver $reflectionResolver) { $this->betterNodeFinder = $betterNodeFinder; $this->exprAnalyzer = $exprAnalyzer; $this->reflectionResolver = $reflectionResolver; - $this->nodeTypeResolver = $nodeTypeResolver; } /** * @param \PhpParser\Node\Expr\BinaryOp\BooleanAnd|\PhpParser\Node\Expr\BinaryOp\BooleanOr $booleanAnd @@ -66,8 +59,8 @@ final class SafeLeftTypeBooleanAndOrAnalyzer // skip trait this $classReflection = $this->reflectionResolver->resolveClassReflection($booleanAnd); if ($classReflection instanceof ClassReflection && $classReflection->isTrait()) { - return !(bool) $this->betterNodeFinder->findFirst($booleanAnd->left, function (Node $node) : bool { - return $this->nodeTypeResolver->getType($node) instanceof ObjectType; + return !(bool) $this->betterNodeFinder->findFirst($booleanAnd->left, static function (Node $node) : bool { + return $node instanceof Instanceof_; }); } return \true; diff --git a/rules/DeadCode/Rector/If_/RemoveDeadInstanceOfRector.php b/rules/DeadCode/Rector/If_/RemoveDeadInstanceOfRector.php index 4571c9e043b..61d0dce578f 100644 --- a/rules/DeadCode/Rector/If_/RemoveDeadInstanceOfRector.php +++ b/rules/DeadCode/Rector/If_/RemoveDeadInstanceOfRector.php @@ -3,6 +3,7 @@ declare (strict_types=1); namespace Rector\DeadCode\Rector\If_; +use PHPStan\Reflection\ClassReflection; use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\Assign; @@ -20,6 +21,7 @@ use PhpParser\NodeTraverser; use PHPStan\Type\MixedType; use Rector\NodeManipulator\IfManipulator; use Rector\Rector\AbstractRector; +use Rector\Reflection\ReflectionResolver; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -32,9 +34,15 @@ final class RemoveDeadInstanceOfRector extends AbstractRector * @var \Rector\NodeManipulator\IfManipulator */ private $ifManipulator; - public function __construct(IfManipulator $ifManipulator) + /** + * @readonly + * @var \Rector\Reflection\ReflectionResolver + */ + private $reflectionResolver; + public function __construct(IfManipulator $ifManipulator, ReflectionResolver $reflectionResolver) { $this->ifManipulator = $ifManipulator; + $this->reflectionResolver = $reflectionResolver; } public function getRuleDefinition() : RuleDefinition { @@ -128,6 +136,10 @@ CODE_SAMPLE if ($this->isPropertyFetch($instanceof->expr) || $instanceof->expr instanceof CallLike) { return null; } + $classReflection = $this->reflectionResolver->resolveClassReflection($instanceof); + if ($classReflection instanceof ClassReflection && $classReflection->isTrait()) { + return null; + } $classType = $this->nodeTypeResolver->getType($instanceof->class); $exprType = $this->nodeTypeResolver->getNativeType($instanceof->expr); if ($classType->equals($exprType)) { diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index a6d9fc7b155..3fb279b27c1 100644 --- a/src/Application/VersionResolver.php +++ b/src/Application/VersionResolver.php @@ -19,12 +19,12 @@ final class VersionResolver * @api * @var string */ - public const PACKAGE_VERSION = '7d69fc226cab739ec6c47b09bfdd784a24445fe1'; + public const PACKAGE_VERSION = 'ec59456217e4e2c212c0486cd0ee33221e5ab86c'; /** * @api * @var string */ - public const RELEASE_DATE = '2024-04-12 16:17:16'; + public const RELEASE_DATE = '2024-04-12 16:45:31'; /** * @var int */