Skip to content

Commit 4011ed1

Browse files
committed
Updated Rector to commit c38a215175cabfa31a6f4614916dd5ed05954b3f
rectorphp/rector-src@c38a215 [DeadCode] Skip on clone on object with __clone() method on RemoveDeadStmtRector (#8084)
1 parent ca75b78 commit 4011ed1

2 files changed

Lines changed: 26 additions & 3 deletions

File tree

rules/DeadCode/NodeManipulator/LivingCodeManipulator.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,24 @@
2929
use PhpParser\Node\Expr\UnaryPlus;
3030
use PhpParser\Node\Expr\Variable;
3131
use PhpParser\Node\Scalar;
32+
use PHPStan\Reflection\ReflectionProvider;
3233
use PHPStan\Type\ObjectType;
3334
use Rector\NodeTypeResolver\NodeTypeResolver;
35+
use Rector\ValueObject\MethodName;
3436
final class LivingCodeManipulator
3537
{
3638
/**
3739
* @readonly
3840
*/
3941
private NodeTypeResolver $nodeTypeResolver;
40-
public function __construct(NodeTypeResolver $nodeTypeResolver)
42+
/**
43+
* @readonly
44+
*/
45+
private ReflectionProvider $reflectionProvider;
46+
public function __construct(NodeTypeResolver $nodeTypeResolver, ReflectionProvider $reflectionProvider)
4147
{
4248
$this->nodeTypeResolver = $nodeTypeResolver;
49+
$this->reflectionProvider = $reflectionProvider;
4350
}
4451
/**
4552
* @return Expr[]|mixed[]
@@ -53,6 +60,9 @@ public function keepLivingCodeFromExpr($expr): array
5360
if ($expr instanceof Closure || $expr instanceof Scalar || $expr instanceof ConstFetch) {
5461
return [];
5562
}
63+
if ($expr instanceof Clone_ && $this->hasCloneMagicMethod($expr)) {
64+
return [$expr];
65+
}
5666
if ($this->isNestedExpr($expr)) {
5767
return $this->keepLivingCodeFromExpr($expr->expr);
5868
}
@@ -92,6 +102,19 @@ private function isNestedExpr(Expr $expr): bool
92102
{
93103
return $expr instanceof Cast || $expr instanceof Empty_ || $expr instanceof UnaryMinus || $expr instanceof UnaryPlus || $expr instanceof BitwiseNot || $expr instanceof BooleanNot || $expr instanceof Clone_;
94104
}
105+
private function hasCloneMagicMethod(Clone_ $clone): bool
106+
{
107+
$cloneObjectType = $this->nodeTypeResolver->getType($clone->expr);
108+
foreach ($cloneObjectType->getObjectClassNames() as $className) {
109+
if (!$this->reflectionProvider->hasClass($className)) {
110+
continue;
111+
}
112+
if ($this->reflectionProvider->getClass($className)->hasNativeMethod(MethodName::CLONE)) {
113+
return \true;
114+
}
115+
}
116+
return \false;
117+
}
95118
private function isBinaryOpWithoutChange(Expr $expr): bool
96119
{
97120
if (!$expr instanceof BinaryOp) {

src/Application/VersionResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ final class VersionResolver
1919
* @api
2020
* @var string
2121
*/
22-
public const PACKAGE_VERSION = '18bab9477823651f02ad3895a93a54ae418564ec';
22+
public const PACKAGE_VERSION = 'c38a215175cabfa31a6f4614916dd5ed05954b3f';
2323
/**
2424
* @api
2525
* @var string
2626
*/
27-
public const RELEASE_DATE = '2026-06-24 17:01:41';
27+
public const RELEASE_DATE = '2026-06-25 10:33:44';
2828
/**
2929
* @var int
3030
*/

0 commit comments

Comments
 (0)