From 878e4054e1c0cee0d5a1c6cd2d3cfb7dd6c9fbb2 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 9 Jul 2019 21:33:25 +0200 Subject: [PATCH] [DeadCode] Add static, self and FQN type to RemoveUnusedPrivateMethodRector --- .../Fixture/skip_array_callables_fqn.php.inc | 20 ++++++++++ .../Fixture/skip_array_callables_self.php.inc | 20 ++++++++++ .../skip_array_callables_static.php.inc | 20 ++++++++++ .../Fixture/skip_array_callables_this.php.inc | 20 ++++++++++ .../RemoveUnusedPrivateMethodRectorTest.php | 6 ++- src/NodeContainer/ParsedNodesByType.php | 37 ++++++++++++++++--- 6 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_fqn.php.inc create mode 100644 packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_self.php.inc create mode 100644 packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_static.php.inc create mode 100644 packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_this.php.inc diff --git a/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_fqn.php.inc b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_fqn.php.inc new file mode 100644 index 000000000000..24b9c451ce26 --- /dev/null +++ b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_fqn.php.inc @@ -0,0 +1,20 @@ + $b; + } +} diff --git a/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_self.php.inc b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_self.php.inc new file mode 100644 index 000000000000..a14ff2db2b4d --- /dev/null +++ b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_self.php.inc @@ -0,0 +1,20 @@ + $b; + } +} diff --git a/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_static.php.inc b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_static.php.inc new file mode 100644 index 000000000000..c6cd3617e5ea --- /dev/null +++ b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_static.php.inc @@ -0,0 +1,20 @@ + $b; + } +} diff --git a/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_this.php.inc b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_this.php.inc new file mode 100644 index 000000000000..6cd0a8b1ec23 --- /dev/null +++ b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/Fixture/skip_array_callables_this.php.inc @@ -0,0 +1,20 @@ + $b; + } +} diff --git a/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/RemoveUnusedPrivateMethodRectorTest.php b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/RemoveUnusedPrivateMethodRectorTest.php index 279c23e565be..8cd71b80df6e 100644 --- a/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/RemoveUnusedPrivateMethodRectorTest.php +++ b/packages/DeadCode/tests/Rector/ClassMethod/RemoveUnusedPrivateMethodRector/RemoveUnusedPrivateMethodRectorTest.php @@ -20,7 +20,11 @@ public function test(): void __DIR__ . '/Fixture/keep_used_method.php.inc', __DIR__ . '/Fixture/keep_used_method_static.php.inc', __DIR__ . '/Fixture/skip_anonymous_class.php.inc', - __DIR__ . '/Fixture/skip_array_callables.php.inc', + + __DIR__ . '/Fixture/skip_array_callables_this.php.inc', + __DIR__ . '/Fixture/skip_array_callables_self.php.inc', + __DIR__ . '/Fixture/skip_array_callables_static.php.inc', + __DIR__ . '/Fixture/skip_array_callables_fqn.php.inc', ]); } diff --git a/src/NodeContainer/ParsedNodesByType.php b/src/NodeContainer/ParsedNodesByType.php index ee762c4590c6..90541572a807 100644 --- a/src/NodeContainer/ParsedNodesByType.php +++ b/src/NodeContainer/ParsedNodesByType.php @@ -615,11 +615,8 @@ private function matchArrayCallableClassAndMethod(Array_ $array): ?array return null; } - if (! $array->items[0]->value instanceof Variable) { - return null; - } - - if (! $this->nameResolver->isName($array->items[0]->value, 'this')) { + // $this, self, static, FQN + if (! $this->isThisVariable($array->items[0]->value)) { return null; } @@ -637,6 +634,36 @@ private function matchArrayCallableClassAndMethod(Array_ $array): ?array $methodName = $string->value; $className = $array->getAttribute(AttributeKey::CLASS_NAME); + if ($className === null) { + return null; + } + return [$className, $methodName]; } + + private function isThisVariable(Node $node): bool + { + // $this + if ($node instanceof Variable && $this->nameResolver->isName($node, 'this')) { + return true; + } + + if ($node instanceof ClassConstFetch) { + if (! $this->nameResolver->isName($node->name, 'class')) { + return false; + } + + // self::class, static::class + if ($this->nameResolver->isNames($node->class, ['self', 'static'])) { + return true; + } + + /** @var string $className */ + $className = $node->getAttribute(AttributeKey::CLASS_NAME); + + return $this->nameResolver->isName($node->class, $className); + } + + return false; + } }