diff --git a/packages/better-php-doc-parser/src/PhpDocNode/AbstractTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/AbstractTagValueNode.php index 96886fc39a08..7ee6e094622f 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/AbstractTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/AbstractTagValueNode.php @@ -18,14 +18,9 @@ abstract class AbstractTagValueNode implements AttributeAwareNodeInterface, PhpD use PrintTagValueNodeTrait; /** - * @var string + * @var mixed[] */ - protected const PRINT_TYPE_ATTRIBUTE = 'print_attribute'; - - /** - * @var string - */ - protected const PRINT_TYPE_ANNOTATION = 'print_annotation'; + protected $items = []; /** * @var bool @@ -72,6 +67,16 @@ abstract class AbstractTagValueNode implements AttributeAwareNodeInterface, PhpD */ private $keysByQuotedStatus = []; + /** + * Generic fallback + */ + public function __toString(): string + { + $items = $this->completeItemsQuotes($this->items); + $items = $this->makeKeysExplicit($items); + return $this->printContentItems($items); + } + /** * @param mixed[] $item */ diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/EmbeddableTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/EmbeddableTagValueNode.php index da18b9769d58..acdcd47a9053 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/EmbeddableTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/EmbeddableTagValueNode.php @@ -4,20 +4,17 @@ namespace Rector\BetterPhpDocParser\PhpDocNode\Doctrine\Class_; +use Doctrine\ORM\Mapping\Embeddable; use Rector\BetterPhpDocParser\PhpDocNode\Doctrine\AbstractDoctrineTagValueNode; final class EmbeddableTagValueNode extends AbstractDoctrineTagValueNode { - public function __construct(string $originalContent) + public function __construct(Embeddable $embeddable, string $originalContent) { + $this->items = get_object_vars($embeddable); $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - return $this->originalContent; - } - public function getShortName(): string { return '@ORM\Embeddable'; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/EntityTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/EntityTagValueNode.php index 4298a2d4a197..fed6bf96fb4e 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/EntityTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/EntityTagValueNode.php @@ -13,11 +13,6 @@ final class EntityTagValueNode extends AbstractDoctrineTagValueNode implements P { use PhpAttributePhpDocNodePrintTrait; - /** - * @var mixed[] - */ - private $items = []; - public function __construct(?Entity $entity = null, ?string $originalContent = null) { if ($entity !== null) { @@ -27,14 +22,6 @@ public function __construct(?Entity $entity = null, ?string $originalContent = n $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public function removeRepositoryClass(): void { $this->items['repositoryClass'] = null; @@ -47,7 +34,7 @@ public function getShortName(): string public function toAttributeString(): string { - $items = $this->createItems(self::PRINT_TYPE_ATTRIBUTE); + $items = $this->createAttributeItems(); $items = $this->filterOutMissingItems($items); $content = $this->printPhpAttributeItems($items); @@ -55,18 +42,16 @@ public function toAttributeString(): string return $this->printAttributeContent($content); } - private function createItems(string $printType = self::PRINT_TYPE_ANNOTATION): array + private function createAttributeItems(): array { $items = $this->items; - if ($printType === self::PRINT_TYPE_ATTRIBUTE) { - if ($items['repositoryClass'] !== null) { - $items['repositoryClass'] .= '::class'; - } + if ($items['repositoryClass'] !== null) { + $items['repositoryClass'] .= '::class'; + } - if ($items['readOnly'] !== null) { - $items['readOnly'] = $items['readOnly'] ? 'ORM\Entity::READ_ONLY' : ''; - } + if ($items['readOnly'] !== null) { + $items['readOnly'] = $items['readOnly'] ? 'ORM\Entity::READ_ONLY' : ''; } return $items; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/IndexTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/IndexTagValueNode.php index 110621b6e51f..6f3e79c735ea 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/IndexTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/IndexTagValueNode.php @@ -15,11 +15,6 @@ final class IndexTagValueNode extends AbstractDoctrineTagValueNode implements Ta */ private $tag; - /** - * @var mixed[] - */ - private $items = []; - public function __construct(Index $index, ?string $originalContent = null, ?string $originalTag = null) { $this->items = get_object_vars($index); @@ -28,13 +23,6 @@ public function __construct(Index $index, ?string $originalContent = null, ?stri $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - return $this->printContentItems($items); - } - public function getTag(): ?string { return $this->tag ?: $this->getShortName(); diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/InheritanceTypeTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/InheritanceTypeTagValueNode.php index e4fe5a813def..5c362d2be657 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/InheritanceTypeTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/InheritanceTypeTagValueNode.php @@ -9,11 +9,6 @@ final class InheritanceTypeTagValueNode extends AbstractDoctrineTagValueNode { - /** - * @var mixed[] - */ - private $items = []; - public function __construct(InheritanceType $inheritanceType, ?string $originalContent) { $this->items = get_object_vars($inheritanceType); @@ -21,14 +16,6 @@ public function __construct(InheritanceType $inheritanceType, ?string $originalC $this->resolveOriginalContentSpacingAndOrder($originalContent, 'value'); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public function getShortName(): string { return '@ORM\InheritanceType'; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/UniqueConstraintTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/UniqueConstraintTagValueNode.php index 9defca509192..19dfe654ea29 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/UniqueConstraintTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Class_/UniqueConstraintTagValueNode.php @@ -15,11 +15,6 @@ final class UniqueConstraintTagValueNode extends AbstractDoctrineTagValueNode im */ private $tag; - /** - * @var mixed[] - */ - private $items = []; - public function __construct( UniqueConstraint $uniqueConstraint, ?string $originalContent = null, @@ -31,14 +26,6 @@ public function __construct( $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public function getTag(): ?string { return $this->tag ?: $this->getShortName(); diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ColumnTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ColumnTagValueNode.php index d30d05f8aad4..15ad431e0a9a 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ColumnTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ColumnTagValueNode.php @@ -13,29 +13,15 @@ final class ColumnTagValueNode extends AbstractDoctrineTagValueNode implements P { use PhpAttributePhpDocNodePrintTrait; - /** - * @var mixed[] - */ - private $items = []; - public function __construct($items, ?string $originalContent = null) { $this->items = $items; $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public static function fromColumnAndOriginalContent(Column $column, string $originalContent): self { $items = get_object_vars($column); - return new self($items, $originalContent); } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/CustomIdGeneratorTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/CustomIdGeneratorTagValueNode.php index 5b270a77c316..f73c8d9db634 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/CustomIdGeneratorTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/CustomIdGeneratorTagValueNode.php @@ -9,25 +9,12 @@ final class CustomIdGeneratorTagValueNode extends AbstractDoctrineTagValueNode { - /** - * @var mixed[] - */ - private $items = []; - public function __construct(CustomIdGenerator $customIdGenerator, ?string $originalContent = null) { $this->items = get_object_vars($customIdGenerator); $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public function getShortName(): string { return '@ORM\CustomIdGenerator'; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/GeneratedValueTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/GeneratedValueTagValueNode.php index bb1479f5bcd8..cbcc0d4c8e4c 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/GeneratedValueTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/GeneratedValueTagValueNode.php @@ -16,31 +16,17 @@ final class GeneratedValueTagValueNode extends AbstractDoctrineTagValueNode impl { use PhpAttributePhpDocNodePrintTrait; - /** - * @var mixed[] - */ - private $items = []; - public function __construct(array $items, ?string $annotationContent = null) { $this->items = $items; $this->resolveOriginalContentSpacingAndOrder($annotationContent, 'strategy'); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - - public static function createFromAnnotationAndAnnotationContent( + public static function createFromAnnotationAndContent( GeneratedValue $generatedValue, string $annotationContent ): self { $items = get_object_vars($generatedValue); - return new self($items, $annotationContent); } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/IdTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/IdTagValueNode.php index baf148ead827..6b182501602c 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/IdTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/IdTagValueNode.php @@ -17,21 +17,6 @@ public function __construct(?string $annotationContent = null) $this->resolveOriginalContentSpacingAndOrder($annotationContent); } - public function __toString(): string - { - $content = ''; - - if ($this->hasOpeningBracket) { - $content .= '('; - } - - if ($this->hasClosingBracket) { - $content .= ')'; - } - - return $content; - } - public function getShortName(): string { return '@ORM\Id'; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/JoinColumnTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/JoinColumnTagValueNode.php index 6b136fe96200..9ea23314d9ed 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/JoinColumnTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/JoinColumnTagValueNode.php @@ -14,20 +14,15 @@ final class JoinColumnTagValueNode extends AbstractDoctrineTagValueNode implemen { use PhpAttributePhpDocNodePrintTrait; - /** - * @var string|null - */ - private $tag; - /** * @var string */ private $shortName = '@ORM\JoinColumn'; /** - * @var mixed[] + * @var string|null */ - private $items = []; + private $tag; public function __construct(array $items, ?string $originalContent = null, ?string $originalTag = null) { @@ -37,14 +32,6 @@ public function __construct(array $items, ?string $originalContent = null, ?stri $this->tag = $originalTag; } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public static function createFromAnnotationAndOriginalContent( JoinColumn $joinColumn, string $originalContent, diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ManyToManyTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ManyToManyTagValueNode.php index 4c7bac74f938..a516cba0d363 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ManyToManyTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ManyToManyTagValueNode.php @@ -21,11 +21,6 @@ final class ManyToManyTagValueNode extends AbstractDoctrineTagValueNode implemen */ private $fullyQualifiedTargetEntity; - /** - * @var mixed[] - */ - private $items = []; - public function __construct( array $items, ?string $originalContent = null, @@ -36,14 +31,6 @@ public function __construct( $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public static function createFromAnnotationAndOriginalContent( ManyToMany $manyToMany, string $originalContent, @@ -96,19 +83,17 @@ public function getShortName(): string public function toAttributeString(): string { - $items = $this->createItems(self::PRINT_TYPE_ATTRIBUTE); + $items = $this->createAttributeItems(); $items = $this->filterOutMissingItems($items); $content = $this->printPhpAttributeItems($items); return $this->printAttributeContent($content); } - private function createItems(string $printType = self::PRINT_TYPE_ANNOTATION): array + private function createAttributeItems(): array { $items = $this->items; - if ($printType === self::PRINT_TYPE_ATTRIBUTE) { - $items['targetEntity'] .= '::class'; - } + $items['targetEntity'] .= '::class'; return $items; } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ManyToOneTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ManyToOneTagValueNode.php index fba32cac2d83..6b82ab7c7688 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ManyToOneTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/ManyToOneTagValueNode.php @@ -16,11 +16,6 @@ final class ManyToOneTagValueNode extends AbstractDoctrineTagValueNode implement */ private $fullyQualifiedTargetEntity; - /** - * @var mixed[] - */ - private $items = []; - public function __construct(array $items, ?string $originalContent, string $fullyQualifiedTargetEntity) { $this->items = $items; @@ -28,14 +23,6 @@ public function __construct(array $items, ?string $originalContent, string $full $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public static function createFromAnnotationAndOriginalContent( ManyToOne $manyToOne, string $originalContent, diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/OneToManyTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/OneToManyTagValueNode.php index 1dc713a99f26..b149c59c2270 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/OneToManyTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/OneToManyTagValueNode.php @@ -17,11 +17,6 @@ final class OneToManyTagValueNode extends AbstractDoctrineTagValueNode implement */ private $fullyQualifiedTargetEntity; - /** - * @var mixed[] - */ - private $items = []; - public function __construct( array $items, ?string $originalContent = null, @@ -32,14 +27,6 @@ public function __construct( $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public static function createFromAnnotationAndContent( OneToMany $oneToMany, string $originalContent, diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/OneToOneTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/OneToOneTagValueNode.php index 3d4f5b6d263e..893dc06f4f3f 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/OneToOneTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Doctrine/Property_/OneToOneTagValueNode.php @@ -17,11 +17,6 @@ final class OneToOneTagValueNode extends AbstractDoctrineTagValueNode implements */ private $fullyQualifiedTargetEntity; - /** - * @var mixed[] - */ - private $items = []; - public function __construct( array $items, ?string $originalContent = null, @@ -33,14 +28,6 @@ public function __construct( $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public static function createFromAnnotationAndOriginalContent( OneToOne $oneToOne, string $originalContent, diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/BlameableTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/BlameableTagValueNode.php index 48800434c6d5..f520abe5740a 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/BlameableTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/BlameableTagValueNode.php @@ -4,55 +4,15 @@ namespace Rector\BetterPhpDocParser\PhpDocNode\Gedmo; +use Gedmo\Mapping\Annotation\Blameable; use Rector\BetterPhpDocParser\Contract\PhpDocNode\ShortNameAwareTagInterface; use Rector\BetterPhpDocParser\PhpDocNode\AbstractTagValueNode; final class BlameableTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - /** - * @var string|null - */ - private $on; - - /** - * @var mixed|null - */ - private $value; - - /** - * @var string|string[] - */ - private $field; - - /** - * @param string|string[] $field - * @param mixed|null $value - */ - public function __construct(?string $on, $field, $value) - { - $this->on = $on; - $this->field = $field; - $this->value = $value; - } - - public function __toString(): string + public function __construct(Blameable $blameable) { - $contentItems = []; - - if ($this->on !== null) { - $contentItems['on'] = sprintf('on="%s"', $this->on); - } - - if ($this->field) { - $contentItems['field'] = is_array($this->field) ? - $this->printArrayItem($this->field, 'field') : $this->field; - } - - if ($this->value !== null) { - $contentItems['value'] = $this->value; - } - - return $this->printContentItems($contentItems); + $this->items = get_object_vars($blameable); } public function getShortName(): string diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/LocaleTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/LocaleTagValueNode.php index dd2219e58c4c..9919640b9fb4 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/LocaleTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/LocaleTagValueNode.php @@ -8,8 +8,4 @@ final class LocaleTagValueNode extends AbstractTagValueNode { - public function __toString(): string - { - return ''; - } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/LoggableTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/LoggableTagValueNode.php index 81b824c8dcec..9cb63c15f06e 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/LoggableTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/LoggableTagValueNode.php @@ -4,30 +4,15 @@ namespace Rector\BetterPhpDocParser\PhpDocNode\Gedmo; +use Gedmo\Mapping\Annotation\Loggable; use Rector\BetterPhpDocParser\Contract\PhpDocNode\ShortNameAwareTagInterface; use Rector\BetterPhpDocParser\PhpDocNode\AbstractTagValueNode; final class LoggableTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - /** - * @var string|null - */ - private $logEntryClass; - - public function __construct(?string $logEntryClass) - { - $this->logEntryClass = $logEntryClass; - } - - public function __toString(): string + public function __construct(Loggable $loggable) { - $contentItems = []; - - if ($this->logEntryClass !== null) { - $contentItems['logEntryClass'] = $this->logEntryClass; - } - - return $this->printContentItems($contentItems); + $this->items = get_object_vars($loggable); } public function getShortName(): string diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/SlugTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/SlugTagValueNode.php index f208c66ff4dd..c9baef9c1bb7 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/SlugTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/SlugTagValueNode.php @@ -10,26 +10,12 @@ final class SlugTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - /** - * @var mixed[] - */ - private $items = []; - public function __construct(Slug $slug, ?string $originalContent = null) { $this->items = get_object_vars($slug); - $this->resolveOriginalContentSpacingAndOrder($originalContent, 'fields'); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public function getFields(): array { return $this->items['fields']; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/SoftDeleteableTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/SoftDeleteableTagValueNode.php index 23bcf41d6c54..936d4a1f87e6 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/SoftDeleteableTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/SoftDeleteableTagValueNode.php @@ -4,55 +4,20 @@ namespace Rector\BetterPhpDocParser\PhpDocNode\Gedmo; +use Gedmo\Mapping\Annotation\SoftDeleteable; use Rector\BetterPhpDocParser\Contract\PhpDocNode\ShortNameAwareTagInterface; use Rector\BetterPhpDocParser\PhpDocNode\AbstractTagValueNode; final class SoftDeleteableTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - /** - * @var string - */ - private $fieldName; - - /** - * @var bool - */ - private $timeAware = false; - - /** - * @var bool - */ - private $hardDelete = false; - - public function __construct(string $fieldName, bool $timeAware, bool $hardDelete) - { - $this->fieldName = $fieldName; - $this->timeAware = $timeAware; - $this->hardDelete = $hardDelete; - } - - public function __toString(): string + public function __construct(SoftDeleteable $softDeleteable) { - $contentItems = []; - - if ($this->fieldName !== 'deletedAt') { - $contentItems['fieldName'] = $this->fieldName; - } - - if ($this->timeAware) { - $contentItems['timeAware'] = sprintf('strict=%s', $this->timeAware ? 'true' : 'false'); - } - - if ($this->hardDelete) { - $contentItems['hardDelete'] = sprintf('strict=%s', $this->hardDelete ? 'true' : 'false'); - } - - return $this->printContentItems($contentItems); + $this->items = get_object_vars($softDeleteable); } public function getFieldName(): string { - return $this->fieldName; + return $this->items['fieldName']; } public function getShortName(): string diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TranslatableTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TranslatableTagValueNode.php index 862c575700b6..ba1603f33a20 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TranslatableTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TranslatableTagValueNode.php @@ -8,8 +8,4 @@ final class TranslatableTagValueNode extends AbstractTagValueNode { - public function __toString(): string - { - return ''; - } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeLeftTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeLeftTagValueNode.php index 865436175b62..57f4f0d6f3e2 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeLeftTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeLeftTagValueNode.php @@ -8,8 +8,4 @@ final class TreeLeftTagValueNode extends AbstractTagValueNode { - public function __toString(): string - { - return ''; - } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeLevelTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeLevelTagValueNode.php index 95771da53de2..da35b566d85d 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeLevelTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeLevelTagValueNode.php @@ -8,8 +8,4 @@ final class TreeLevelTagValueNode extends AbstractTagValueNode { - public function __toString(): string - { - return ''; - } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeParentTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeParentTagValueNode.php index d432691e7bcd..02d390eb890b 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeParentTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeParentTagValueNode.php @@ -8,8 +8,4 @@ final class TreeParentTagValueNode extends AbstractTagValueNode { - public function __toString(): string - { - return ''; - } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeRightTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeRightTagValueNode.php index 076216ccaeaf..d4fe1ec39b1e 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeRightTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeRightTagValueNode.php @@ -8,8 +8,4 @@ final class TreeRightTagValueNode extends AbstractTagValueNode { - public function __toString(): string - { - return ''; - } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeRootTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeRootTagValueNode.php index 0d71e8b7e1ff..d46fa449cd8a 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeRootTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeRootTagValueNode.php @@ -8,8 +8,4 @@ final class TreeRootTagValueNode extends AbstractTagValueNode { - public function __toString(): string - { - return ''; - } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeTagValueNode.php index d6b80ccd22cb..8c005374779d 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/TreeTagValueNode.php @@ -4,22 +4,13 @@ namespace Rector\BetterPhpDocParser\PhpDocNode\Gedmo; +use Gedmo\Mapping\Annotation\Tree; use Rector\BetterPhpDocParser\PhpDocNode\AbstractTagValueNode; final class TreeTagValueNode extends AbstractTagValueNode { - /** - * @var string - */ - private $type; - - public function __construct(string $type) - { - $this->type = $type; - } - - public function __toString(): string + public function __construct(Tree $tree) { - return sprintf('(type="%s")', $this->type); + $this->items = get_object_vars($tree); } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/VersionedTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/VersionedTagValueNode.php index 5d687203f9b8..eef57b75d434 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/VersionedTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Gedmo/VersionedTagValueNode.php @@ -9,11 +9,6 @@ final class VersionedTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - public function __toString(): string - { - return ''; - } - public function getShortName(): string { return '@Gedmo\Versioned'; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/JMS/JMSInjectParamsTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/JMS/JMSInjectParamsTagValueNode.php index 1b98b8eaa0c3..2f4a25bb7236 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/JMS/JMSInjectParamsTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/JMS/JMSInjectParamsTagValueNode.php @@ -4,21 +4,18 @@ namespace Rector\BetterPhpDocParser\PhpDocNode\JMS; +use JMS\DiExtraBundle\Annotation\InjectParams; use Rector\BetterPhpDocParser\Contract\PhpDocNode\ShortNameAwareTagInterface; use Rector\BetterPhpDocParser\PhpDocNode\AbstractTagValueNode; final class JMSInjectParamsTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - public function __construct(string $originalContent) + public function __construct(InjectParams $injectParams, string $originalContent) { + $this->items = get_object_vars($injectParams); $this->originalContent = $originalContent; } - public function __toString(): string - { - return $this->originalContent; - } - public function getShortName(): string { return '@DI\InjectParams'; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/JMS/JMSInjectTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/JMS/JMSInjectTagValueNode.php index b13ae321fede..b9606d68e6ea 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/JMS/JMSInjectTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/JMS/JMSInjectTagValueNode.php @@ -4,6 +4,7 @@ namespace Rector\BetterPhpDocParser\PhpDocNode\JMS; +use JMS\DiExtraBundle\Annotation\Inject; use Rector\BetterPhpDocParser\Contract\PhpDocNode\ShortNameAwareTagInterface; use Rector\BetterPhpDocParser\PhpDocNode\AbstractTagValueNode; @@ -14,45 +15,12 @@ final class JMSInjectTagValueNode extends AbstractTagValueNode implements ShortN */ private $serviceName; - /** - * @var bool|null - */ - private $required; - - /** - * @var bool - */ - private $strict = false; - - public function __construct(?string $serviceName, ?bool $required, bool $strict) + public function __construct(Inject $inject, ?string $serviceName, ?string $annotationContent) { + $this->items = get_object_vars($inject); $this->serviceName = $serviceName; - $this->required = $required; - $this->strict = $strict; - } - - public function __toString(): string - { - $itemContents = []; - - if ($this->serviceName) { - $itemContents[] = '"' . $this->serviceName . '"'; - } - - if ($this->required !== null) { - $itemContents[] = sprintf('required=%s', $this->required ? 'true' : 'false'); - } - - // skip default - if (! $this->strict) { - $itemContents[] = sprintf('strict=%s', $this->strict ? 'true' : 'false'); - } - - if ($itemContents === []) { - return ''; - } - return $this->printContentItems($itemContents); + $this->resolveOriginalContentSpacingAndOrder($annotationContent, 'value'); } public function getServiceName(): ?string diff --git a/packages/better-php-doc-parser/src/PhpDocNode/JMS/SerializerTypeTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/JMS/SerializerTypeTagValueNode.php index 1b246c4f932c..f86b50b45fb0 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/JMS/SerializerTypeTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/JMS/SerializerTypeTagValueNode.php @@ -4,6 +4,7 @@ namespace Rector\BetterPhpDocParser\PhpDocNode\JMS; +use JMS\Serializer\Annotation\Type; use Nette\Utils\Strings; use Rector\BetterPhpDocParser\Contract\PhpDocNode\ShortNameAwareTagInterface; use Rector\BetterPhpDocParser\Contract\PhpDocNode\TypeAwareTagValueNodeInterface; @@ -11,47 +12,37 @@ final class SerializerTypeTagValueNode extends AbstractTagValueNode implements TypeAwareTagValueNodeInterface, ShortNameAwareTagInterface { - /** - * @var string - */ - private $name; - - public function __construct(string $name, ?string $annotationContent) + public function __construct(Type $type, ?string $annotationContent) { - $this->name = $name; - $this->resolveOriginalContentSpacingAndOrder($annotationContent); + $this->items = get_object_vars($type); + $this->resolveOriginalContentSpacingAndOrder($annotationContent, 'name'); } - public function __toString(): string + public function getShortName(): string { - return sprintf('("%s")', $this->name); + return '@Serializer\Type'; } public function changeName(string $newName): void { - $this->name = $newName; + $this->items['name'] = $newName; } public function getName(): string { - return $this->name; + return $this->items['name']; } public function replaceName(string $oldName, string $newName): bool { $oldNamePattern = '#\b' . preg_quote($oldName, '#') . '\b#'; - $newNameValue = Strings::replace($this->name, $oldNamePattern, $newName); - if ($newNameValue !== $this->name) { - $this->name = $newNameValue; + $newNameValue = Strings::replace($this->items['name'], $oldNamePattern, $newName); + if ($newNameValue !== $this->items['name']) { + $this->changeName($newNameValue); return true; } return false; } - - public function getShortName(): string - { - return '@Serializer\Type'; - } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/PHPDI/PHPDIInjectTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/PHPDI/PHPDIInjectTagValueNode.php index cc5604246c57..e8d9a9a57676 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/PHPDI/PHPDIInjectTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/PHPDI/PHPDIInjectTagValueNode.php @@ -4,28 +4,15 @@ namespace Rector\BetterPhpDocParser\PhpDocNode\PHPDI; +use DI\Annotation\Inject; use Rector\BetterPhpDocParser\Contract\PhpDocNode\ShortNameAwareTagInterface; use Rector\BetterPhpDocParser\PhpDocNode\AbstractTagValueNode; final class PHPDIInjectTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - /** - * @var string|null - */ - private $value; - - public function __construct(?string $value) + public function __construct(Inject $inject) { - $this->value = $value; - } - - public function __toString(): string - { - if ($this->value === null) { - return ''; - } - - return '(' . $this->value . ')'; + $this->items = get_object_vars($inject); } public function getShortName(): string diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Sensio/SensioMethodTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Sensio/SensioMethodTagValueNode.php index 30f6c226d638..160a178970ba 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Sensio/SensioMethodTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Sensio/SensioMethodTagValueNode.php @@ -6,25 +6,14 @@ use Rector\BetterPhpDocParser\Contract\PhpDocNode\ShortNameAwareTagInterface; use Rector\BetterPhpDocParser\PhpDocNode\AbstractTagValueNode; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; final class SensioMethodTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - /** - * @var string[] - */ - private $methods = []; - - /** - * @param string[] $methods - */ - public function __construct(array $methods = []) - { - $this->methods = $methods; - } - - public function __toString(): string + public function __construct(Method $method, string $content) { - return '(' . $this->printArrayItem($this->methods) . ')'; + $this->items = get_object_vars($method); + $this->resolveOriginalContentSpacingAndOrder($content, 'methods'); } /** @@ -32,7 +21,7 @@ public function __toString(): string */ public function getMethods(): array { - return $this->methods; + return $this->items['methods']; } public function getShortName(): string diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Sensio/SensioTemplateTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Sensio/SensioTemplateTagValueNode.php index be355ec23e78..8bf70f6f8ecc 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Sensio/SensioTemplateTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Sensio/SensioTemplateTagValueNode.php @@ -6,68 +6,23 @@ use Rector\BetterPhpDocParser\Contract\PhpDocNode\ShortNameAwareTagInterface; use Rector\BetterPhpDocParser\PhpDocNode\AbstractTagValueNode; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; final class SensioTemplateTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - /** - * @var string|null - */ - private $template; - - /** - * @var mixed[]|null - */ - private $owner; - - /** - * @var mixed[]|null - */ - private $vars; - - /** - * @param mixed[]|null $owner - * @param mixed[]|null $vars - */ - public function __construct(?string $template, ?array $owner = null, ?array $vars = null) + public function __construct(Template $template, string $content) { - $this->template = $template; - $this->owner = $owner; - $this->vars = $vars; - } - - public function __toString(): string - { - $items = $this->crateItems(); - - return $this->printContentItems($items); + $this->items = get_object_vars($template); + $this->resolveOriginalContentSpacingAndOrder($content, 'template'); } public function getTemplate(): ?string { - return $this->template; + return $this->items['template']; } public function getShortName(): string { return '@Template'; } - - private function crateItems(): array - { - $items = []; - - if ($this->template) { - $items['template'] = sprintf('"%s"', $this->template); - } - - if ($this->owner) { - $items['owner'] = $this->owner; - } - - if ($this->vars) { - $items['vars'] = $this->vars; - } - - return $items; - } } diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/SymfonyRouteTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/SymfonyRouteTagValueNode.php index 4f09d7240786..40338f4e3b2b 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/SymfonyRouteTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/SymfonyRouteTagValueNode.php @@ -18,11 +18,6 @@ final class SymfonyRouteTagValueNode extends AbstractTagValueNode implements Sho */ public const CLASS_NAME = Route::class; - /** - * @var mixed[] - */ - private $items = []; - public function __construct(array $items, ?string $originalContent = null) { $this->items = $items; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertChoiceTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertChoiceTagValueNode.php index bd6536e2a26c..65793914454f 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertChoiceTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertChoiceTagValueNode.php @@ -14,11 +14,6 @@ */ final class AssertChoiceTagValueNode extends AbstractTagValueNode implements TypeAwareTagValueNodeInterface, ShortNameAwareTagInterface { - /** - * @var mixed[] - */ - private $items = []; - public function __construct(Choice $choice, ?string $originalContent) { $this->items = get_object_vars($choice); @@ -26,14 +21,6 @@ public function __construct(Choice $choice, ?string $originalContent) $this->resolveOriginalContentSpacingAndOrder($originalContent, 'choices'); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public function isCallbackClass(string $class): bool { return $class === ($this->items['callback'][0] ?? null); diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertEmailTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertEmailTagValueNode.php index 673797904fd1..c673edd06e01 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertEmailTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertEmailTagValueNode.php @@ -18,24 +18,12 @@ final class AssertEmailTagValueNode extends AbstractTagValueNode implements Type { use PhpAttributePhpDocNodePrintTrait; - /** - * @var mixed[] - */ - private $items = []; - public function __construct(Email $email, ?string $originalContent = null) { $this->items = get_object_vars($email); $this->resolveOriginalContentSpacingAndOrder($originalContent, 'choices'); } - public function __toString(): string - { - $contentItemsWithExplicitKeys = $this->makeKeysExplicit($this->items); - - return $this->printContentItems($contentItemsWithExplicitKeys); - } - public function getShortName(): string { return '@Assert\Email'; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertRangeTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertRangeTagValueNode.php index 300d5a4c2859..9a3d4936892b 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertRangeTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertRangeTagValueNode.php @@ -15,11 +15,6 @@ final class AssertRangeTagValueNode extends AbstractTagValueNode implements Type { use PhpAttributePhpDocNodePrintTrait; - /** - * @var mixed[] - */ - private $items = []; - public function __construct(Range $range, string $originalContent) { $this->items = get_object_vars($range); @@ -27,13 +22,6 @@ public function __construct(Range $range, string $originalContent) $this->resolveOriginalContentSpacingAndOrder($originalContent); } - public function __toString(): string - { - $contentItemsWithExplicitKeys = $this->makeKeysExplicit($this->items); - - return $this->printContentItems($contentItemsWithExplicitKeys); - } - public function getShortName(): string { return '@Assert\Range'; diff --git a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertTypeTagValueNode.php b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertTypeTagValueNode.php index 384919a1acd4..6a4de53033af 100644 --- a/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertTypeTagValueNode.php +++ b/packages/better-php-doc-parser/src/PhpDocNode/Symfony/Validator/Constraints/AssertTypeTagValueNode.php @@ -15,11 +15,6 @@ */ final class AssertTypeTagValueNode extends AbstractTagValueNode implements ShortNameAwareTagInterface { - /** - * @var mixed[] - */ - private $items = []; - public function __construct(Type $type, ?string $originalContent = null) { $this->items = get_object_vars($type); @@ -27,14 +22,6 @@ public function __construct(Type $type, ?string $originalContent = null) $this->resolveOriginalContentSpacingAndOrder($originalContent, 'type'); } - public function __toString(): string - { - $items = $this->completeItemsQuotes($this->items); - $items = $this->makeKeysExplicit($items); - - return $this->printContentItems($items); - } - public function getShortName(): string { return '@Assert\Type'; diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Doctrine/Class_/EmbeddablePhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Doctrine/Class_/EmbeddablePhpDocNodeFactory.php index 693bc13254ed..7860a916da35 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Doctrine/Class_/EmbeddablePhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Doctrine/Class_/EmbeddablePhpDocNodeFactory.php @@ -26,14 +26,14 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator throw new ShouldNotHappenException(); } - /** @var Embeddable|null $entity */ - $entity = $this->nodeAnnotationReader->readClassAnnotation($node, $this->getClass()); - if ($entity === null) { + /** @var Embeddable|null $embeddable */ + $embeddable = $this->nodeAnnotationReader->readClassAnnotation($node, $this->getClass()); + if ($embeddable === null) { return null; } $annotationContent = $this->resolveContentFromTokenIterator($tokenIterator); - return new EmbeddableTagValueNode($annotationContent); + return new EmbeddableTagValueNode($embeddable, $annotationContent); } } diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Doctrine/Property_/GeneratedValuePhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Doctrine/Property_/GeneratedValuePhpDocNodeFactory.php index 9ad01c12eeab..e9d04144b296 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Doctrine/Property_/GeneratedValuePhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Doctrine/Property_/GeneratedValuePhpDocNodeFactory.php @@ -35,9 +35,6 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator // skip tokens for this annotation $annotationContent = $this->resolveContentFromTokenIterator($tokenIterator); - return GeneratedValueTagValueNode::createFromAnnotationAndAnnotationContent( - $generatedValue, - $annotationContent - ); + return GeneratedValueTagValueNode::createFromAnnotationAndContent($generatedValue, $annotationContent); } } diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/BlameablePhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/BlameablePhpDocNodeFactory.php index 2a5341b9ff85..a930879f80a6 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/BlameablePhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/BlameablePhpDocNodeFactory.php @@ -34,7 +34,7 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator return null; } - return new BlameableTagValueNode($blameable->on, $blameable->field, $blameable->value); + return new BlameableTagValueNode($blameable); } protected function getTagValueNodeClass(): string diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/LoggablePhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/LoggablePhpDocNodeFactory.php index df249ac20df0..5dc38bb2819a 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/LoggablePhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/LoggablePhpDocNodeFactory.php @@ -34,6 +34,6 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator return null; } - return new LoggableTagValueNode($loggable->logEntryClass); + return new LoggableTagValueNode($loggable); } } diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/SoftDeleteablePhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/SoftDeleteablePhpDocNodeFactory.php index 47692fca2604..003a98fda7bd 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/SoftDeleteablePhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/SoftDeleteablePhpDocNodeFactory.php @@ -34,11 +34,7 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator return null; } - return new SoftDeleteableTagValueNode( - $softDeletable->fieldName, - $softDeletable->timeAware, - $softDeletable->hardDelete - ); + return new SoftDeleteableTagValueNode($softDeletable); } protected function getTagValueNodeClass(): string diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/TreePhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/TreePhpDocNodeFactory.php index 56e6bba40c2c..fef73ba01c10 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/TreePhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Gedmo/TreePhpDocNodeFactory.php @@ -34,6 +34,6 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator return null; } - return new TreeTagValueNode($tree->type); + return new TreeTagValueNode($tree); } } diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/JMSInjectParamsPhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/JMSInjectParamsPhpDocNodeFactory.php index 265c0e0f67ef..c242c2697c0b 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/JMSInjectParamsPhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/JMSInjectParamsPhpDocNodeFactory.php @@ -36,6 +36,6 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator $annotationContent = $this->resolveContentFromTokenIterator($tokenIterator); - return new JMSInjectParamsTagValueNode($annotationContent); + return new JMSInjectParamsTagValueNode($injectParams, $annotationContent); } } diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/JMSInjectPhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/JMSInjectPhpDocNodeFactory.php index ecbadd364e76..6724e064de65 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/JMSInjectPhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/JMSInjectPhpDocNodeFactory.php @@ -48,8 +48,8 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator $serviceName = $inject->value === null ? $this->nodeNameResolver->getName($node) : $inject->value; // needed for proper doc block formatting - $this->resolveContentFromTokenIterator($tokenIterator); + $annotationContent = $this->resolveContentFromTokenIterator($tokenIterator); - return new JMSInjectTagValueNode($serviceName, $inject->required, $inject->strict); + return new JMSInjectTagValueNode($inject, $serviceName, $annotationContent); } } diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/SerializerTypePhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/SerializerTypePhpDocNodeFactory.php index 2aafcd837203..12bb65d5ee54 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/SerializerTypePhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/JMS/SerializerTypePhpDocNodeFactory.php @@ -23,13 +23,14 @@ public function getClass(): string public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator): ?PhpDocTagValueNode { + /** @var Type|null $type */ $type = $this->resolveTypeAnnotation($node); if ($type === null) { return null; } $annotationContent = $this->resolveContentFromTokenIterator($tokenIterator); - return new SerializerTypeTagValueNode($type->name, $annotationContent); + return new SerializerTypeTagValueNode($type, $annotationContent); } /** diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/PHPDI/PHPDIInjectPhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/PHPDI/PHPDIInjectPhpDocNodeFactory.php index 5573e07ee74e..6857b9377379 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/PHPDI/PHPDIInjectPhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/PHPDI/PHPDIInjectPhpDocNodeFactory.php @@ -37,6 +37,6 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator // needed for proper doc block formatting $this->resolveContentFromTokenIterator($tokenIterator); - return new PHPDIInjectTagValueNode($inject->getName()); + return new PHPDIInjectTagValueNode($inject); } } diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Sensio/SensioMethodPhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Sensio/SensioMethodPhpDocNodeFactory.php index 90a7c0a85a30..96d83f6ff0cc 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Sensio/SensioMethodPhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Sensio/SensioMethodPhpDocNodeFactory.php @@ -35,8 +35,8 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator } // to skip tokens for this node - $this->resolveContentFromTokenIterator($tokenIterator); + $content = $this->resolveContentFromTokenIterator($tokenIterator); - return new SensioMethodTagValueNode($method->getMethods()); + return new SensioMethodTagValueNode($method, $content); } } diff --git a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Sensio/SensioTemplatePhpDocNodeFactory.php b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Sensio/SensioTemplatePhpDocNodeFactory.php index fbb4eeedfcf6..3baf7fa07ebb 100644 --- a/packages/better-php-doc-parser/src/PhpDocNodeFactory/Sensio/SensioTemplatePhpDocNodeFactory.php +++ b/packages/better-php-doc-parser/src/PhpDocNodeFactory/Sensio/SensioTemplatePhpDocNodeFactory.php @@ -35,12 +35,7 @@ public function createFromNodeAndTokens(Node $node, TokenIterator $tokenIterator } // to skip tokens for this node - $this->resolveContentFromTokenIterator($tokenIterator); - - return new SensioTemplateTagValueNode( - $template->getTemplate(), - $template->getOwner(), - $template->getVars() - ); + $content = $this->resolveContentFromTokenIterator($tokenIterator); + return new SensioTemplateTagValueNode($template, $content); } } diff --git a/packages/better-php-doc-parser/src/PhpDocParser/BetterPhpDocParser.php b/packages/better-php-doc-parser/src/PhpDocParser/BetterPhpDocParser.php index 2efd9692d512..ba091a226eb7 100644 --- a/packages/better-php-doc-parser/src/PhpDocParser/BetterPhpDocParser.php +++ b/packages/better-php-doc-parser/src/PhpDocParser/BetterPhpDocParser.php @@ -176,6 +176,11 @@ public function parseTagValue(TokenIterator $tokenIterator, string $tag): PhpDoc // needed for reference support in params, see https://github.com/rectorphp/rector/issues/1734 $tagValueNode = null; + $currentPhpNode = $this->currentNodeProvider->getNode(); + if ($currentPhpNode === null) { + throw new ShouldNotHappenException(); + } + foreach ($this->phpDocNodeFactories as $phpDocNodeFactory) { // to prevent circular reference of this service if ($phpDocNodeFactory instanceof PhpDocParserAwareInterface) { @@ -183,11 +188,6 @@ public function parseTagValue(TokenIterator $tokenIterator, string $tag): PhpDoc } // compare regardless sensitivity - $currentPhpNode = $this->currentNodeProvider->getNode(); - if ($currentPhpNode === null) { - continue; - } - if (! $this->isTagMatchingPhpDocNodeFactory($tag, $phpDocNodeFactory, $currentPhpNode)) { continue; } diff --git a/packages/better-php-doc-parser/src/PhpDocParser/ClassAnnotationMatcher.php b/packages/better-php-doc-parser/src/PhpDocParser/ClassAnnotationMatcher.php index 1f3800bc56cb..a7da21b85ecb 100644 --- a/packages/better-php-doc-parser/src/PhpDocParser/ClassAnnotationMatcher.php +++ b/packages/better-php-doc-parser/src/PhpDocParser/ClassAnnotationMatcher.php @@ -16,21 +16,33 @@ final class ClassAnnotationMatcher { public function isTagMatchToNodeAndClass(string $tag, Node $node, string $matchingClass): bool + { + $fullyQualifiedAnnotationClass = $this->resolveTagFullyQualifiedName($tag, $node); + + return Strings::lower($fullyQualifiedAnnotationClass) === Strings::lower($matchingClass); + } + + private function resolveTagFullyQualifiedName(string $tag, Node $node): string { $tag = ltrim($tag, '@'); + /** @var Use_[]|null $useNodes */ $useNodes = $node->getAttribute(AttributeKey::USE_NODES); if ($useNodes === null) { - return $matchingClass === $tag; - } + /** @var string|null $namespace */ + $namespace = $node->getAttribute(AttributeKey::NAMESPACE_NAME); + if ($namespace !== null) { + $namespacedTag = $namespace . '\\' . $tag; + if (class_exists($namespacedTag)) { + return $namespacedTag; + } + } - $fullyQualifiedClassNode = $this->matchFullAnnotationClassWithUses($tag, $useNodes); - if ($fullyQualifiedClassNode === null) { - return false; + return $tag; } - return Strings::lower($fullyQualifiedClassNode) === Strings::lower($matchingClass); + return $this->matchFullAnnotationClassWithUses($tag, $useNodes) ?? $tag; } /** diff --git a/src/Rector/Property/InjectAnnotationClassRector.php b/src/Rector/Property/InjectAnnotationClassRector.php index 5a2c0c9d69ec..0caca82debfa 100644 --- a/src/Rector/Property/InjectAnnotationClassRector.php +++ b/src/Rector/Property/InjectAnnotationClassRector.php @@ -173,6 +173,7 @@ private function isParameterInject(PhpDocTagValueNode $phpDocTagValueNode): bool } $serviceName = $phpDocTagValueNode->getServiceName(); + if ($serviceName === null) { return false; } diff --git a/stubs/Sensio/Bundle/FrameworkExtraBundle/Configuration/Method.php b/stubs/Sensio/Bundle/FrameworkExtraBundle/Configuration/Method.php index 21c181f74204..7c7da830c8d9 100644 --- a/stubs/Sensio/Bundle/FrameworkExtraBundle/Configuration/Method.php +++ b/stubs/Sensio/Bundle/FrameworkExtraBundle/Configuration/Method.php @@ -18,7 +18,7 @@ class Method extends ConfigurationAnnotation * * @var array */ - private $methods = []; + public $methods = []; /** * Returns the array of HTTP methods. * diff --git a/stubs/Sensio/Bundle/FrameworkExtraBundle/Configuration/Template.php b/stubs/Sensio/Bundle/FrameworkExtraBundle/Configuration/Template.php index cf12245a55f1..35d072d9ae4f 100644 --- a/stubs/Sensio/Bundle/FrameworkExtraBundle/Configuration/Template.php +++ b/stubs/Sensio/Bundle/FrameworkExtraBundle/Configuration/Template.php @@ -23,28 +23,28 @@ class Template extends ConfigurationAnnotation * * @var string */ - protected $template; + public $template; /** * The associative array of template variables. * * @var array */ - private $vars = []; + public $vars = []; /** * Should the template be streamed? * * @var bool */ - private $streamable = false; + public $streamable = false; /** * The controller (+action) this annotation is set to. * * @var array */ - private $owner = []; + public $owner = []; /** * Returns the array of templates variables.