diff --git a/src/Mutator/Arithmetic/Multiplication.php b/src/Mutator/Arithmetic/Multiplication.php index b3f65eec8..d787964ee 100644 --- a/src/Mutator/Arithmetic/Multiplication.php +++ b/src/Mutator/Arithmetic/Multiplication.php @@ -39,6 +39,9 @@ use Infection\Mutator\GetMutatorName; use Infection\Mutator\Mutator; use Infection\Mutator\MutatorCategory; +use Infection\PhpParser\Visitor\ParentConnector; +use Infection\PhpParser\Visitor\ReflectionVisitor; +use function is_string; use PhpParser\Node; /** @@ -94,7 +97,25 @@ public function canMutate(Node $node): bool return false; } - return true; + $functionScope = $node->getAttribute(ReflectionVisitor::FUNCTION_SCOPE_KEY); + + if (!$functionScope instanceof Node\Stmt\ClassMethod) { + return true; + } + + $parentNode = ParentConnector::getParent($node); + + if (!$parentNode instanceof Node\Stmt\Return_) { + return true; + } + + $returnType = $functionScope->getReturnType(); + + if ($returnType instanceof Node\Identifier) { + $returnType = $returnType->name; + } + + return !(is_string($returnType) && $returnType === 'int'); } private function isNumericOne(Node $node): bool diff --git a/tests/phpunit/Mutator/Arithmetic/MultiplicationTest.php b/tests/phpunit/Mutator/Arithmetic/MultiplicationTest.php index 4aa62f2dc..04b65db6a 100644 --- a/tests/phpunit/Mutator/Arithmetic/MultiplicationTest.php +++ b/tests/phpunit/Mutator/Arithmetic/MultiplicationTest.php @@ -135,6 +135,48 @@ public function mutationsProvider(): iterable [ + <<<'PHP' + [ + <<<'PHP' +