diff --git a/src/Rules/Classes/ExistingClassInInstanceOfRule.php b/src/Rules/Classes/ExistingClassInInstanceOfRule.php index c04a3d4b11..293dd6285d 100644 --- a/src/Rules/Classes/ExistingClassInInstanceOfRule.php +++ b/src/Rules/Classes/ExistingClassInInstanceOfRule.php @@ -77,9 +77,10 @@ public function processNode(Node $node, Scope $scope): array } $classReflection = $this->reflectionProvider->getClass($name); - $expressionType = $scope->getType($node->expr); if ($classReflection->isTrait()) { + $expressionType = $scope->getType($node->expr); + $errors[] = RuleErrorBuilder::message(sprintf( 'Instanceof between %s and trait %s will always evaluate to false.', $expressionType->describe(VerbosityLevel::typeOnly()), diff --git a/src/Rules/Classes/ImpossibleInstanceOfRule.php b/src/Rules/Classes/ImpossibleInstanceOfRule.php index 5558b8fba5..21dd144a91 100644 --- a/src/Rules/Classes/ImpossibleInstanceOfRule.php +++ b/src/Rules/Classes/ImpossibleInstanceOfRule.php @@ -34,9 +34,6 @@ public function getNodeType(): string public function processNode(Node $node, Scope $scope): array { - $instanceofType = $scope->getType($node); - $expressionType = $scope->getType($node->expr); - if ($node->class instanceof Node\Name) { $className = $scope->resolveName($node->class); $classType = new ObjectType($className); @@ -50,13 +47,14 @@ public function processNode(Node $node, Scope $scope): array return [ RuleErrorBuilder::message(sprintf( 'Instanceof between %s and %s results in an error.', - $expressionType->describe(VerbosityLevel::typeOnly()), + $scope->getType($node->expr)->describe(VerbosityLevel::typeOnly()), $classType->describe(VerbosityLevel::typeOnly()), ))->build(), ]; } } + $instanceofType = $scope->getType($node); if (!$instanceofType instanceof ConstantBooleanType) { return []; } @@ -78,7 +76,7 @@ public function processNode(Node $node, Scope $scope): array return [ $addTip(RuleErrorBuilder::message(sprintf( 'Instanceof between %s and %s will always evaluate to false.', - $expressionType->describe(VerbosityLevel::typeOnly()), + $scope->getType($node->expr)->describe(VerbosityLevel::typeOnly()), $classType->describe(VerbosityLevel::getRecommendedLevelByType($classType)), )))->build(), ]; @@ -86,7 +84,7 @@ public function processNode(Node $node, Scope $scope): array return [ $addTip(RuleErrorBuilder::message(sprintf( 'Instanceof between %s and %s will always evaluate to true.', - $expressionType->describe(VerbosityLevel::typeOnly()), + $scope->getType($node->expr)->describe(VerbosityLevel::typeOnly()), $classType->describe(VerbosityLevel::getRecommendedLevelByType($classType)), )))->build(), ];