2020-01-13 00:06:46 +01:00
|
|
|
<?php
|
|
|
|
|
2021-05-09 20:15:43 +00:00
|
|
|
declare (strict_types=1);
|
2021-01-30 20:56:32 +01:00
|
|
|
namespace Rector\DeadCode;
|
2020-01-13 00:06:46 +01:00
|
|
|
|
|
|
|
use PhpParser\Node\Expr\BinaryOp\Equal;
|
|
|
|
use PhpParser\Node\Expr\BinaryOp\Identical;
|
|
|
|
use PhpParser\Node\Expr\BinaryOp\NotEqual;
|
|
|
|
use PhpParser\Node\Expr\BinaryOp\NotIdentical;
|
2020-02-06 22:48:18 +01:00
|
|
|
use Rector\Core\Exception\ShouldNotHappenException;
|
2021-01-30 20:56:32 +01:00
|
|
|
use Rector\DeadCode\Contract\ConditionInterface;
|
|
|
|
use Rector\DeadCode\ValueObject\BinaryToVersionCompareCondition;
|
|
|
|
use Rector\DeadCode\ValueObject\VersionCompareCondition;
|
2020-01-13 00:06:46 +01:00
|
|
|
final class ConditionEvaluator
|
|
|
|
{
|
|
|
|
/**
|
2020-08-29 11:03:40 +02:00
|
|
|
* @return bool|int|null
|
2020-01-13 00:06:46 +01:00
|
|
|
*/
|
2021-05-10 22:23:08 +00:00
|
|
|
public function evaluate(\Rector\DeadCode\Contract\ConditionInterface $condition)
|
2020-01-13 00:06:46 +01:00
|
|
|
{
|
2021-05-10 22:23:08 +00:00
|
|
|
if ($condition instanceof \Rector\DeadCode\ValueObject\VersionCompareCondition) {
|
2020-01-13 00:06:46 +01:00
|
|
|
return $this->evaluateVersionCompareCondition($condition);
|
|
|
|
}
|
2021-05-10 22:23:08 +00:00
|
|
|
if ($condition instanceof \Rector\DeadCode\ValueObject\BinaryToVersionCompareCondition) {
|
2020-01-13 00:06:46 +01:00
|
|
|
return $this->evaluateBinaryToVersionCompareCondition($condition);
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
2020-07-27 08:56:25 +02:00
|
|
|
/**
|
|
|
|
* @return bool|int
|
|
|
|
*/
|
2021-05-10 22:23:08 +00:00
|
|
|
private function evaluateVersionCompareCondition(\Rector\DeadCode\ValueObject\VersionCompareCondition $versionCompareCondition)
|
2020-01-13 00:06:46 +01:00
|
|
|
{
|
|
|
|
$compareSign = $versionCompareCondition->getCompareSign();
|
|
|
|
if ($compareSign !== null) {
|
2021-05-09 20:15:43 +00:00
|
|
|
return \version_compare((string) $versionCompareCondition->getFirstVersion(), (string) $versionCompareCondition->getSecondVersion(), $compareSign);
|
2020-01-13 00:06:46 +01:00
|
|
|
}
|
2021-05-09 20:15:43 +00:00
|
|
|
return \version_compare((string) $versionCompareCondition->getFirstVersion(), (string) $versionCompareCondition->getSecondVersion());
|
2020-01-13 00:06:46 +01:00
|
|
|
}
|
2021-05-10 22:23:08 +00:00
|
|
|
private function evaluateBinaryToVersionCompareCondition(\Rector\DeadCode\ValueObject\BinaryToVersionCompareCondition $binaryToVersionCompareCondition) : bool
|
2021-05-09 20:15:43 +00:00
|
|
|
{
|
|
|
|
$versionCompareResult = $this->evaluateVersionCompareCondition($binaryToVersionCompareCondition->getVersionCompareCondition());
|
2021-05-10 22:23:08 +00:00
|
|
|
if ($binaryToVersionCompareCondition->getBinaryClass() === \PhpParser\Node\Expr\BinaryOp\Identical::class) {
|
2020-01-13 00:06:46 +01:00
|
|
|
return $binaryToVersionCompareCondition->getExpectedValue() === $versionCompareResult;
|
|
|
|
}
|
2021-05-10 22:23:08 +00:00
|
|
|
if ($binaryToVersionCompareCondition->getBinaryClass() === \PhpParser\Node\Expr\BinaryOp\NotIdentical::class) {
|
2020-01-13 00:06:46 +01:00
|
|
|
return $binaryToVersionCompareCondition->getExpectedValue() !== $versionCompareResult;
|
|
|
|
}
|
2021-05-10 22:23:08 +00:00
|
|
|
if ($binaryToVersionCompareCondition->getBinaryClass() === \PhpParser\Node\Expr\BinaryOp\Equal::class) {
|
2020-07-16 13:55:21 +02:00
|
|
|
// weak comparison on purpose
|
2021-01-30 20:56:32 +01:00
|
|
|
return $binaryToVersionCompareCondition->getExpectedValue() === $versionCompareResult;
|
2020-01-13 00:06:46 +01:00
|
|
|
}
|
2021-05-10 22:23:08 +00:00
|
|
|
if ($binaryToVersionCompareCondition->getBinaryClass() === \PhpParser\Node\Expr\BinaryOp\NotEqual::class) {
|
2020-07-16 13:55:21 +02:00
|
|
|
// weak comparison on purpose
|
2021-01-30 20:56:32 +01:00
|
|
|
return $binaryToVersionCompareCondition->getExpectedValue() !== $versionCompareResult;
|
2020-01-13 00:06:46 +01:00
|
|
|
}
|
2021-05-10 22:23:08 +00:00
|
|
|
throw new \Rector\Core\Exception\ShouldNotHappenException();
|
2020-01-13 00:06:46 +01:00
|
|
|
}
|
|
|
|
}
|