From f9b64d234c541c2a58bf7fb9d533cd26d1682695 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Sun, 25 May 2025 22:30:50 +0200 Subject: [PATCH 1/4] fix: RenameMethodRector does not rename trait methods --- ..._trait_method_which_is_overwritten.php.inc | 33 +++++++++++++++++++ .../RenameMethodRector/Source/SomeTrait.php | 12 +++++++ .../config/configured_rule.php | 4 +++ src/NodeTypeResolver/NodeTypeResolver.php | 4 +++ 4 files changed, 53 insertions(+) create mode 100644 rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_trait_method_which_is_overwritten.php.inc create mode 100644 rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Source/SomeTrait.php diff --git a/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_trait_method_which_is_overwritten.php.inc b/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_trait_method_which_is_overwritten.php.inc new file mode 100644 index 00000000000..c75b59dbb16 --- /dev/null +++ b/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_trait_method_which_is_overwritten.php.inc @@ -0,0 +1,33 @@ + +----- + diff --git a/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Source/SomeTrait.php b/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Source/SomeTrait.php new file mode 100644 index 00000000000..a057645cfd8 --- /dev/null +++ b/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Source/SomeTrait.php @@ -0,0 +1,12 @@ +ruleWithConfiguration(RenameMethodRector::class, [ @@ -39,5 +40,8 @@ // enum method new MethodCallRename(SomeEnumWithMethod::class, 'oldEnumMethod', 'newEnumMethod'), + + // trait method + new MethodCallRename(SomeTrait::class, '_test', 'test'), ]); }; diff --git a/src/NodeTypeResolver/NodeTypeResolver.php b/src/NodeTypeResolver/NodeTypeResolver.php index bad85418a8b..ed809b4c138 100644 --- a/src/NodeTypeResolver/NodeTypeResolver.php +++ b/src/NodeTypeResolver/NodeTypeResolver.php @@ -337,6 +337,10 @@ public function isMethodStaticCallOrClassMethodObjectType(Node $node, ObjectType return true; } + if ($classReflection->hasTraitUse($objectType->getClassName())) { + return true; + } + return $classReflection->is($objectType->getClassName()); } From 50b38a849a9d57733d78b40d9defcac9796b9e35 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Mon, 26 May 2025 13:58:51 +0200 Subject: [PATCH 2/4] adjust order of if condition --- src/NodeTypeResolver/NodeTypeResolver.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NodeTypeResolver/NodeTypeResolver.php b/src/NodeTypeResolver/NodeTypeResolver.php index ed809b4c138..e1782713cb7 100644 --- a/src/NodeTypeResolver/NodeTypeResolver.php +++ b/src/NodeTypeResolver/NodeTypeResolver.php @@ -337,11 +337,11 @@ public function isMethodStaticCallOrClassMethodObjectType(Node $node, ObjectType return true; } - if ($classReflection->hasTraitUse($objectType->getClassName())) { + if ($classReflection->is($objectType->getClassName())) { return true; } - return $classReflection->is($objectType->getClassName()); + return $classReflection->hasTraitUse($objectType->getClassName()); } /** From d86719629061276cfcb09b2e14192ef7a561aaa0 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Mon, 26 May 2025 15:58:24 +0200 Subject: [PATCH 3/4] add more tests --- ...ename_method_which_is_not_in_trait.php.inc | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_method_which_is_not_in_trait.php.inc diff --git a/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_method_which_is_not_in_trait.php.inc b/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_method_which_is_not_in_trait.php.inc new file mode 100644 index 00000000000..111413d8fc5 --- /dev/null +++ b/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_method_which_is_not_in_trait.php.inc @@ -0,0 +1,33 @@ + +----- + From 90e04242d8a37f4a971493ef15b66136e6fb79b9 Mon Sep 17 00:00:00 2001 From: Kevin Pfeifer Date: Tue, 27 May 2025 09:10:04 +0200 Subject: [PATCH 4/4] more tests adjustments --- ...ename_method_which_is_not_in_trait.php.inc | 33 ------------------- ...ename_method_which_is_not_in_trait.php.inc | 14 ++++++++ 2 files changed, 14 insertions(+), 33 deletions(-) delete mode 100644 rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_method_which_is_not_in_trait.php.inc create mode 100644 rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/skip_rename_method_which_is_not_in_trait.php.inc diff --git a/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_method_which_is_not_in_trait.php.inc b/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_method_which_is_not_in_trait.php.inc deleted file mode 100644 index 111413d8fc5..00000000000 --- a/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/rename_method_which_is_not_in_trait.php.inc +++ /dev/null @@ -1,33 +0,0 @@ - ------ - diff --git a/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/skip_rename_method_which_is_not_in_trait.php.inc b/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/skip_rename_method_which_is_not_in_trait.php.inc new file mode 100644 index 00000000000..3747d9ef8dc --- /dev/null +++ b/rules-tests/Renaming/Rector/MethodCall/RenameMethodRector/Fixture/skip_rename_method_which_is_not_in_trait.php.inc @@ -0,0 +1,14 @@ +