getPhpDocNode(); foreach ($phpDocNode->children as $key => $phpDocChildNode) { if (!$phpDocChildNode instanceof \PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode) { continue; } if ($this->areAnnotationNamesEqual($name, $phpDocChildNode->name)) { unset($phpDocNode->children[$key]); $phpDocInfo->markAsChanged(); } if ($phpDocChildNode->value instanceof \Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode) { $doctrineAnnotationTagValueNode = $phpDocChildNode->value; if ($doctrineAnnotationTagValueNode->hasClassName($name)) { unset($phpDocNode->children[$key]); $phpDocInfo->markAsChanged(); } } } } public function removeTagValueFromNode(\Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo $phpDocInfo, \PHPStan\PhpDocParser\Ast\Node $desiredNode) : void { $phpDocNode = $phpDocInfo->getPhpDocNode(); $phpDocNodeTraverser = new \RectorPrefix20210808\Symplify\SimplePhpDocParser\PhpDocNodeTraverser(); $phpDocNodeTraverser->traverseWithCallable($phpDocNode, '', function ($node) use($desiredNode, $phpDocInfo) : ?int { if ($node instanceof \PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode && $node->value === $desiredNode) { $phpDocInfo->markAsChanged(); return \RectorPrefix20210808\Symplify\SimplePhpDocParser\PhpDocNodeTraverser::NODE_REMOVE; } if ($node !== $desiredNode) { return null; } $phpDocInfo->markAsChanged(); return \RectorPrefix20210808\Symplify\SimplePhpDocParser\PhpDocNodeTraverser::NODE_REMOVE; }); } private function areAnnotationNamesEqual(string $firstAnnotationName, string $secondAnnotationName) : bool { $firstAnnotationName = \trim($firstAnnotationName, '@'); $secondAnnotationName = \trim($secondAnnotationName, '@'); return $firstAnnotationName === $secondAnnotationName; } }