From ee14bf965413c6c238b3b12df7e7b527d2f1445a Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Fri, 8 Sep 2017 01:33:12 +0200 Subject: [PATCH] DocBlockAnalyzer: add getAnnotationFromNode --- src/NodeAnalyzer/DocBlockAnalyzer.php | 22 +++++++++++++++++++ .../Contrib/Nette/InjectPropertyRector.php | 5 +---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/NodeAnalyzer/DocBlockAnalyzer.php b/src/NodeAnalyzer/DocBlockAnalyzer.php index 6c4f21c5717..ee268c7ea93 100644 --- a/src/NodeAnalyzer/DocBlockAnalyzer.php +++ b/src/NodeAnalyzer/DocBlockAnalyzer.php @@ -5,6 +5,7 @@ namespace Rector\NodeAnalyzer; use PhpCsFixer\DocBlock\DocBlock; use PhpParser\Comment\Doc; use PhpParser\Node; +use Rector\Exception\NotImplementedException; final class DocBlockAnalyzer { @@ -27,6 +28,27 @@ final class DocBlockAnalyzer $node->setDocComment(new Doc($docBlock->getContent())); } + public function getAnnotationFromNode(Node $node, string $annotation): string + { + $docBlock = new DocBlock($node->getDocComment()); + + $annotationTags = $docBlock->getAnnotationsOfType($annotation); + if (count($annotationTags) === 0) { + return ''; + } + + if (count($annotationTags) === 1 && $annotationTags[0]->getTag()->getName() === 'var') { + return implode('|' , $annotationTags[0]->getTypes()); + } + + throw new NotImplementedException(sprintf( + 'Not implemented yet. Go to "%s::%s()" and add check for "%s" annotation.', + __CLASS__, + __METHOD__, + $annotation + )); + } + private function createDocBlockFromNode(Node $node): DocBlock { return new DocBlock($node->getDocComment()); diff --git a/src/Rector/Contrib/Nette/InjectPropertyRector.php b/src/Rector/Contrib/Nette/InjectPropertyRector.php index 82dfc6f2f4c..43ad5f98cbb 100644 --- a/src/Rector/Contrib/Nette/InjectPropertyRector.php +++ b/src/Rector/Contrib/Nette/InjectPropertyRector.php @@ -69,10 +69,7 @@ final class InjectPropertyRector extends AbstractRector private function addPropertyToCollector(Property $propertyNode): void { - $propertyDocBlock = new DocBlock($propertyNode->getDocComment()); - - $propertyType = $propertyDocBlock->getAnnotationsOfType('var')[0] - ->getTypes()[0]; + $propertyType = $this->docBlockAnalyzer->getAnnotationFromNode($propertyNode, 'var'); $propertyName = (string) $propertyNode->props[0]->name;