visibilityManipulator = $visibilityManipulator;
}
public function getRuleDefinition() : RuleDefinition
{
return new RuleDefinition('Change visibility of constant from parent class.', [new ConfiguredCodeSample(<<<'CODE_SAMPLE'
class FrameworkClass
{
protected const SOME_CONSTANT = 1;
}
class MyClass extends FrameworkClass
{
public const SOME_CONSTANT = 1;
}
CODE_SAMPLE
, <<<'CODE_SAMPLE'
class FrameworkClass
{
protected const SOME_CONSTANT = 1;
}
class MyClass extends FrameworkClass
{
protected const SOME_CONSTANT = 1;
}
CODE_SAMPLE
, [new ChangeConstantVisibility('ParentObject', 'SOME_CONSTANT', Visibility::PROTECTED)])]);
}
/**
* @return array>
*/
public function getNodeTypes() : array
{
return [Class_::class, Interface_::class];
}
/**
* @param Class_|Interface_ $node
*/
public function refactor(Node $node) : ?Node
{
$hasChanged = \false;
foreach ($this->classConstantVisibilityChanges as $classConstantVisibilityChange) {
if (!$this->isObjectType($node, $classConstantVisibilityChange->getObjectType())) {
continue;
}
foreach ($node->getConstants() as $classConst) {
if (!$this->isName($classConst, $classConstantVisibilityChange->getConstant())) {
continue;
}
$this->visibilityManipulator->changeNodeVisibility($classConst, $classConstantVisibilityChange->getVisibility());
$hasChanged = \true;
}
}
if ($hasChanged) {
return $node;
}
return null;
}
/**
* @param mixed[] $configuration
*/
public function configure(array $configuration) : void
{
Assert::allIsAOf($configuration, ChangeConstantVisibility::class);
$this->classConstantVisibilityChanges = $configuration;
}
}