From 6fdf08ab3cc24d27ac25608218506cc85f02b9b4 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Tue, 9 Jul 2019 17:24:58 +0200 Subject: [PATCH] [SOLID] Fix PrivatizeLocalClassConstantRector for used constant from single class [closes #1634] --- .../Fixture/skip_used_in_another_class.php.inc | 13 +++++++++++++ .../PrivatizeLocalClassConstantRectorTest.php | 1 + src/NodeContainer/ParsedNodesByType.php | 6 ++++++ 3 files changed, 20 insertions(+) create mode 100644 packages/SOLID/tests/Rector/ClassConst/PrivatizeLocalClassConstantRector/Fixture/skip_used_in_another_class.php.inc diff --git a/packages/SOLID/tests/Rector/ClassConst/PrivatizeLocalClassConstantRector/Fixture/skip_used_in_another_class.php.inc b/packages/SOLID/tests/Rector/ClassConst/PrivatizeLocalClassConstantRector/Fixture/skip_used_in_another_class.php.inc new file mode 100644 index 00000000000..e341915fecf --- /dev/null +++ b/packages/SOLID/tests/Rector/ClassConst/PrivatizeLocalClassConstantRector/Fixture/skip_used_in_another_class.php.inc @@ -0,0 +1,13 @@ +nameResolver->resolve($classConstFetch->name); + if ($constantName === 'class' || $constantName === null) { // this is not a manual constant return; @@ -485,6 +486,7 @@ final class ParsedNodesByType } else { $resolvedClassTypes = $this->nodeTypeResolver->resolve($classConstFetch->class); $className = $this->matchClassTypeThatContainsConstant($resolvedClassTypes, $constantName); + if ($className === null) { return; } @@ -517,6 +519,10 @@ final class ParsedNodesByType */ private function matchClassTypeThatContainsConstant(array $resolvedClassTypes, string $constant): ?string { + if (count($resolvedClassTypes) === 1) { + return $resolvedClassTypes[0]; + } + foreach ($resolvedClassTypes as $resolvedClassType) { $classOrInterface = $this->findClassOrInterface($resolvedClassType); if ($classOrInterface === null) {