visibilityManipulator = $visibilityManipulator; } public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Remove final from Doctrine entities', [new CodeSample(<<<'CODE_SAMPLE' use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity */ final class SomeClass { } CODE_SAMPLE , <<<'CODE_SAMPLE' use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity */ class SomeClass { } CODE_SAMPLE )]); } /** * @return array> */ public function getNodeTypes() : array { return [Class_::class]; } /** * @param Class_ $node */ public function refactor(Node $node) : ?Node { $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($node); if (!$phpDocInfo->hasByAnnotationClasses(['Doctrine\\ORM\\Mapping\\Entity', 'Doctrine\\ORM\\Mapping\\Embeddable'])) { return null; } if (!$node->isFinal()) { return null; } $this->visibilityManipulator->removeFinal($node); return $node; } }