From f2cac5e2a091d5a50195680897c4f7829f88b80c Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 12 Apr 2024 09:19:41 +0000 Subject: [PATCH] Updated Rector to commit 7d69fc226cab739ec6c47b09bfdd784a24445fe1 https://github.com/rectorphp/rector-src/commit/7d69fc226cab739ec6c47b09bfdd784a24445fe1 [DeadCode] Skip $this instanceof in Trait on RemoveAlwaysTrueIfConditionRector (#5817) --- .../SafeLeftTypeBooleanAndOrAnalyzer.php | 33 +++++++++++++++++-- src/Application/VersionResolver.php | 4 +-- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php b/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php index 7672fef75bd..6388e660440 100644 --- a/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php +++ b/rules/DeadCode/NodeAnalyzer/SafeLeftTypeBooleanAndOrAnalyzer.php @@ -3,6 +3,7 @@ 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; @@ -10,8 +11,11 @@ use PhpParser\Node\Expr\BinaryOp\BooleanOr; 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 { /** @@ -24,10 +28,22 @@ final class SafeLeftTypeBooleanAndOrAnalyzer * @var \Rector\NodeAnalyzer\ExprAnalyzer */ private $exprAnalyzer; - public function __construct(BetterNodeFinder $betterNodeFinder, ExprAnalyzer $exprAnalyzer) + /** + * @readonly + * @var \Rector\Reflection\ReflectionResolver + */ + private $reflectionResolver; + /** + * @readonly + * @var \Rector\NodeTypeResolver\NodeTypeResolver + */ + private $nodeTypeResolver; + public function __construct(BetterNodeFinder $betterNodeFinder, ExprAnalyzer $exprAnalyzer, ReflectionResolver $reflectionResolver, NodeTypeResolver $nodeTypeResolver) { $this->betterNodeFinder = $betterNodeFinder; $this->exprAnalyzer = $exprAnalyzer; + $this->reflectionResolver = $reflectionResolver; + $this->nodeTypeResolver = $nodeTypeResolver; } /** * @param \PhpParser\Node\Expr\BinaryOp\BooleanAnd|\PhpParser\Node\Expr\BinaryOp\BooleanOr $booleanAnd @@ -40,9 +56,20 @@ final class SafeLeftTypeBooleanAndOrAnalyzer if ($hasNonTypedFromParam) { return \false; } - // get type from Property and ArrayDimFetch is unreliable - return !(bool) $this->betterNodeFinder->findFirst($booleanAnd->left, static function (Node $node) : bool { + $hasPropertyFetchOrArrayDimFetch = (bool) $this->betterNodeFinder->findFirst($booleanAnd->left, static function (Node $node) : bool { return $node instanceof PropertyFetch || $node instanceof StaticPropertyFetch || $node instanceof ArrayDimFetch; }); + // get type from Property and ArrayDimFetch is unreliable + if ($hasPropertyFetchOrArrayDimFetch) { + return \false; + } + // 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 \true; } } diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index b5d38bc489a..a6d9fc7b155 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 = '879a36b44d6b43e4c4d268a3d7e96e0830cac478'; + public const PACKAGE_VERSION = '7d69fc226cab739ec6c47b09bfdd784a24445fe1'; /** * @api * @var string */ - public const RELEASE_DATE = '2024-04-12 03:53:43'; + public const RELEASE_DATE = '2024-04-12 16:17:16'; /** * @var int */