From 68596bff067b54059d43adc863d93604123ca4f7 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 30 Jan 2026 22:32:29 +0700 Subject: [PATCH 1/3] [Php83] Handle parent class consume trait on AddOverrideAttributeToOverriddenMethodsRector --- .../extends_parent_consume_trait.php.inc | 32 +++++++++++++++++++ .../Source/ParentConsumeTrait.php | 8 +++++ ...rideAttributeToOverriddenMethodsRector.php | 24 ++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Fixture/extends_parent_consume_trait.php.inc create mode 100644 rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Source/ParentConsumeTrait.php diff --git a/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Fixture/extends_parent_consume_trait.php.inc b/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Fixture/extends_parent_consume_trait.php.inc new file mode 100644 index 00000000000..1b066a10590 --- /dev/null +++ b/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Fixture/extends_parent_consume_trait.php.inc @@ -0,0 +1,32 @@ + +----- + diff --git a/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Source/ParentConsumeTrait.php b/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Source/ParentConsumeTrait.php new file mode 100644 index 00000000000..1b94228128c --- /dev/null +++ b/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Source/ParentConsumeTrait.php @@ -0,0 +1,8 @@ +getMethod($classMethod->name->toString()); + if (! $parentClassMethod instanceof ClassMethod) { + $parentClassMethod = $this->resolveClassMethodFromTraitUse($parentClass, $classMethod->name->toString()); + } + if (! $parentClassMethod instanceof ClassMethod) { return true; } @@ -298,6 +303,25 @@ private function shouldSkipParentClassMethod(ClassReflection $parentClassReflect return false; } + private function resolveClassMethodFromTraitUse(ClassLike $classLike, string $methodName): ?ClassMethod + { + foreach ($classLike->getTraitUses() as $traitUse) { + foreach ($traitUse->traits as $traitName) { + $traitClass = $this->astResolver->resolveClassFromName($traitName->__toString()); + if (! $traitClass instanceof Trait_) { + continue; + } + + $traitClassMethod = $traitClass->getMethod($methodName); + if ($traitClassMethod instanceof ClassMethod) { + return $traitClassMethod; + } + } + } + + return null; + } + private function implementsStringable(Class_ $class): bool { foreach ($class->implements as $implement) { From 2e8fc243b21d8b0d493dcb69bc46a84e2a35bffd Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 30 Jan 2026 22:33:10 +0700 Subject: [PATCH 2/3] eol --- .../Source/ParentConsumeTrait.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Source/ParentConsumeTrait.php b/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Source/ParentConsumeTrait.php index 1b94228128c..d00165a85b8 100644 --- a/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Source/ParentConsumeTrait.php +++ b/rules-tests/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector/Source/ParentConsumeTrait.php @@ -5,4 +5,4 @@ abstract class ParentConsumeTrait { use ExampleFromTrait; -} \ No newline at end of file +} From b88b582d8a5641d4c28b7e7540c2b68ccc47c43d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 30 Jan 2026 15:38:30 +0000 Subject: [PATCH 3/3] [ci-review] Rector Rectify --- rules/Php83/Rector/BooleanAnd/JsonValidateRector.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rules/Php83/Rector/BooleanAnd/JsonValidateRector.php b/rules/Php83/Rector/BooleanAnd/JsonValidateRector.php index ea98802f0d4..6ae82d93bff 100644 --- a/rules/Php83/Rector/BooleanAnd/JsonValidateRector.php +++ b/rules/Php83/Rector/BooleanAnd/JsonValidateRector.php @@ -4,6 +4,7 @@ namespace Rector\Php83\Rector\BooleanAnd; +use PhpParser\Node\Identifier; use PhpParser\Node; use PhpParser\Node\Arg; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; @@ -98,8 +99,8 @@ public function refactor(Node $node): ?Node // Remove associative argument (position 1 or named) - json_validate does not have this param foreach ($args as $index => $arg) { if ($arg instanceof Arg && ( - ($arg->name !== null && $arg->name->toString() === 'associative') || - ($arg->name === null && $index === 1) + ($arg->name instanceof Identifier && $arg->name->toString() === 'associative') || + (!$arg->name instanceof Identifier && $index === 1) )) { unset($funcCall->args[$index]); break;