diff --git a/rules-tests/CodeQuality/Rector/ClassConstFetch/VariableConstFetchToClassConstFetchRector/Fixture/some_class.php.inc b/rules-tests/CodeQuality/Rector/ClassConstFetch/VariableConstFetchToClassConstFetchRector/Fixture/allow_final_class_constant.php.inc similarity index 53% rename from rules-tests/CodeQuality/Rector/ClassConstFetch/VariableConstFetchToClassConstFetchRector/Fixture/some_class.php.inc rename to rules-tests/CodeQuality/Rector/ClassConstFetch/VariableConstFetchToClassConstFetchRector/Fixture/allow_final_class_constant.php.inc index 574237ae62f..72074123515 100644 --- a/rules-tests/CodeQuality/Rector/ClassConstFetch/VariableConstFetchToClassConstFetchRector/Fixture/some_class.php.inc +++ b/rules-tests/CodeQuality/Rector/ClassConstFetch/VariableConstFetchToClassConstFetchRector/Fixture/allow_final_class_constant.php.inc @@ -4,13 +4,13 @@ declare(strict_types=1); namespace Rector\Tests\CodeQuality\Rector\ClassConstFetch\VariableConstFetchToClassConstFetchRector\Fixture; -use Rector\Tests\CodeQuality\Rector\ClassConstFetch\VariableConstFetchToClassConstFetchRector\Source\ClassWithConstants; +use Rector\Tests\CodeQuality\Rector\ClassConstFetch\VariableConstFetchToClassConstFetchRector\Source\ClassWithFinalConstant; -final class SomeClass +final class AllowFinalClassConstant { - public function run(ClassWithConstants $classWithConstants) + public function run(ClassWithFinalConstant $classWithFinalConstant) { - return $classWithConstants::NAME; + return $classWithFinalConstant::NAME; } } @@ -22,13 +22,13 @@ declare(strict_types=1); namespace Rector\Tests\CodeQuality\Rector\ClassConstFetch\VariableConstFetchToClassConstFetchRector\Fixture; -use Rector\Tests\CodeQuality\Rector\ClassConstFetch\VariableConstFetchToClassConstFetchRector\Source\ClassWithConstants; +use Rector\Tests\CodeQuality\Rector\ClassConstFetch\VariableConstFetchToClassConstFetchRector\Source\ClassWithFinalConstant; -final class SomeClass +final class AllowFinalClassConstant { - public function run(ClassWithConstants $classWithConstants) + public function run(ClassWithFinalConstant $classWithFinalConstant) { - return \Rector\Tests\CodeQuality\Rector\ClassConstFetch\VariableConstFetchToClassConstFetchRector\Source\ClassWithConstants::NAME; + return \Rector\Tests\CodeQuality\Rector\ClassConstFetch\VariableConstFetchToClassConstFetchRector\Source\ClassWithFinalConstant::NAME; } } diff --git a/rules-tests/CodeQuality/Rector/ClassConstFetch/VariableConstFetchToClassConstFetchRector/Fixture/skip_class_constant_from_non_final_class.php.inc b/rules-tests/CodeQuality/Rector/ClassConstFetch/VariableConstFetchToClassConstFetchRector/Fixture/skip_class_constant_from_non_final_class.php.inc new file mode 100644 index 00000000000..39379be4d16 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/ClassConstFetch/VariableConstFetchToClassConstFetchRector/Fixture/skip_class_constant_from_non_final_class.php.inc @@ -0,0 +1,15 @@ +reflectionProvider->hasClass($classObjectType->getClassName())) { + return null; + } + + $classReflection = $this->reflectionProvider->getClass($classObjectType->getClassName()); + if (! $classReflection->isFinalByKeyword()) { + if (! $classReflection->hasConstant($constantName)) { + return null; + } + + $constant = $classReflection->getConstant($constantName); + if (! $constant->isFinal()) { + return null; + } + } + $node->class = new FullyQualified($classObjectType->getClassName()); return $node;