[Solid] Skip ChangeReadOnlyVariableWithDefaultValueToConstantRector on byRef parameter (#4964)

* [Solid] Fixes #4959 skip ChangeReadOnlyVariableWithDefaultValueToConstantRector on byRef parameter

* better check

* [ci-review] Rector Rectify

Co-authored-by: rector-bot <tomas@getrector.org>
This commit is contained in:
Abdul Malik Ikhsan 2020-12-23 23:55:35 +07:00 committed by GitHub
parent c11a506b2b
commit 2b001a542e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 1 deletions

View File

@ -137,10 +137,13 @@ CODE_SAMPLE
$readOnlyVariables = [];
foreach ($class->getMethods() as $classMethod) {
if ($this->isFoundByRefParam($classMethod)) {
return [];
}
$readOnlyVariableAssignScalarVariables = $this->classMethodAssignManipulator->collectReadyOnlyAssignScalarVariables(
$classMethod
);
$readOnlyVariables = array_merge($readOnlyVariables, $readOnlyVariableAssignScalarVariables);
}
@ -202,6 +205,18 @@ CODE_SAMPLE
}
}
private function isFoundByRefParam(ClassMethod $classMethod): bool
{
$params = $classMethod->getParams();
foreach ($params as $param) {
if ($param->byRef) {
return true;
}
}
return false;
}
private function createPrivateClassConst(Variable $variable, Expr $expr): ClassConst
{
$constantName = $this->createConstantNameFromVariable($variable);

View File

@ -0,0 +1,18 @@
<?php
namespace Rector\SOLID\Tests\Rector\Class_\ChangeReadOnlyVariableWithDefaultValueToConstantRector\Fixture;
class SkipByRefParam
{
public function run()
{
$toInsert = [];
$this->byRef($toInsert);
}
public function byRef(array & $data)
{
}
}
?>