Skip to content

Commit

Permalink
[Naming] Skip change duplicate type on RenamePropertyToMatchTypeRector (
Browse files Browse the repository at this point in the history
  • Loading branch information
samsonasik committed Jun 6, 2021
1 parent 6f59563 commit 84c80e4
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace Rector\Tests\Naming\Rector\Class_\RenamePropertyToMatchTypeRector\Fixture;

use Rector\Tests\Naming\Rector\Class_\RenamePropertyToMatchTypeRector\Source\EliteManager;

class SomeClass
{
/**
* @var EliteManager
*/
private $eventManager1;

/**
* @var EliteManager
*/
private $eventManager2;

public function __construct(EliteManager $eventManager1, EliteManager $eventManager2)
{
$this->eventManager1 = $eventManager1;
$this->eventManager2 = $eventManager2;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace Rector\Tests\Naming\Rector\Class_\RenamePropertyToMatchTypeRector\FixturePhp74;

use Rector\Tests\Naming\Rector\Class_\RenamePropertyToMatchTypeRector\Source\EliteManager;

class SomeClass
{
/**
* @var EliteManager
*/
private $eventManager1;

/**
* @var EliteManager
*/
private $eventManager2;

public function __construct(EliteManager $eventManager1, EliteManager $eventManager2)
{
$this->eventManager1 = $eventManager1;
$this->eventManager2 = $eventManager2;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace Rector\Tests\Naming\Rector\Class_\RenamePropertyToMatchTypeRector\FixturePhp80;

use PhpParser\Node;
use PhpParser\Node\Identifier;
use PhpParser\Node\Name;

final class NameAndParent
{
/**
* @param Name|Identifier $nameNode
*/
public function __construct(
private Node $nameNode,
private Node $parentNode
) {
}

/**
* @return Name|Identifier
*/
public function getNameNode(): Node
{
return $this->nameNode;
}

public function getParentNode(): Node
{
return $this->parentNode;
}
}
30 changes: 26 additions & 4 deletions rules/Naming/Rector/Class_/RenamePropertyToMatchTypeRector.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Rector\Naming\Rector\Class_;

use PhpParser\Node;
use PhpParser\Node\Param;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\Node\Stmt\ClassMethod;
Expand Down Expand Up @@ -134,7 +135,8 @@ private function renamePropertyPromotion(ClassLike $classLike): void
return;
}

foreach ($constructClassMethod->params as $param) {
$desiredPropertyNames = [];
foreach ($constructClassMethod->params as $key => $param) {
if ($param->flags === 0) {
continue;
}
Expand All @@ -145,10 +147,30 @@ private function renamePropertyPromotion(ClassLike $classLike): void
continue;
}

$currentName = $this->getName($param);
$this->propertyFetchRenamer->renamePropertyFetchesInClass($classLike, $currentName, $desiredPropertyName);
if (in_array($desiredPropertyName, $desiredPropertyNames, true)) {
return;
}

$desiredPropertyNames[$key] = $desiredPropertyName;
}

$this->renameParamVarName($classLike, $constructClassMethod->params, $desiredPropertyNames);
}

$param->var->name = $desiredPropertyName;
/**
* @param Param[] $params
* @param string[] $desiredPropertyNames
*/
private function renameParamVarName(ClassLike $classLike, array $params, array $desiredPropertyNames): void
{
$keys = array_keys($desiredPropertyNames);
foreach ($params as $key => $param) {
if (in_array($key, $keys, true)) {
$currentName = $this->getName($param);
$desiredPropertyName = $desiredPropertyNames[$key];
$this->propertyFetchRenamer->renamePropertyFetchesInClass($classLike, $currentName, $desiredPropertyName);
$param->var->name = $desiredPropertyName;
}
}
}
}

0 comments on commit 84c80e4

Please sign in to comment.