From d88b568cae5759e56cdc1c21433f002db07aefaf Mon Sep 17 00:00:00 2001 From: Ondrej Mirtes Date: Tue, 27 Jul 2021 16:59:30 +0200 Subject: [PATCH] Result cache - notice change in class constant PHPDoc --- .../ExportedClassConstantNode.php | 24 ++++++++++++++++--- src/Dependency/ExportedNodeResolver.php | 15 +++++++++++- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/Dependency/ExportedNode/ExportedClassConstantNode.php b/src/Dependency/ExportedNode/ExportedClassConstantNode.php index 4e75697de7..16e5a29848 100644 --- a/src/Dependency/ExportedNode/ExportedClassConstantNode.php +++ b/src/Dependency/ExportedNode/ExportedClassConstantNode.php @@ -16,12 +16,15 @@ class ExportedClassConstantNode implements ExportedNode, JsonSerializable private bool $private; - public function __construct(string $name, string $value, bool $public, bool $private) + private ?ExportedPhpDocNode $phpDoc; + + public function __construct(string $name, string $value, bool $public, bool $private, ?ExportedPhpDocNode $phpDoc) { $this->name = $name; $this->value = $value; $this->public = $public; $this->private = $private; + $this->phpDoc = $phpDoc; } public function equals(ExportedNode $node): bool @@ -30,6 +33,18 @@ public function equals(ExportedNode $node): bool return false; } + if ($this->phpDoc === null) { + if ($node->phpDoc !== null) { + return false; + } + } elseif ($node->phpDoc !== null) { + if (!$this->phpDoc->equals($node->phpDoc)) { + return false; + } + } else { + return false; + } + return $this->name === $node->name && $this->value === $node->value && $this->public === $node->public @@ -46,7 +61,8 @@ public static function __set_state(array $properties): ExportedNode $properties['name'], $properties['value'], $properties['public'], - $properties['private'] + $properties['private'], + $properties['phpDoc'] ); } @@ -60,7 +76,8 @@ public static function decode(array $data): ExportedNode $data['name'], $data['value'], $data['public'], - $data['private'] + $data['private'], + $data['phpDoc'], ); } @@ -76,6 +93,7 @@ public function jsonSerialize() 'value' => $this->value, 'public' => $this->public, 'private' => $this->private, + 'phpDoc' => $this->phpDoc, ], ]; } diff --git a/src/Dependency/ExportedNodeResolver.php b/src/Dependency/ExportedNodeResolver.php index 0b3981c736..baaa367c79 100644 --- a/src/Dependency/ExportedNodeResolver.php +++ b/src/Dependency/ExportedNodeResolver.php @@ -194,11 +194,24 @@ public function resolve(string $fileName, \PhpParser\Node $node): ?ExportedNode return null; } + $classNode = $parentNode->getAttribute('parent'); + if (!$classNode instanceof Class_ || !isset($classNode->namespacedName)) { + return null; + } + + $docComment = $parentNode->getDocComment(); + return new ExportedClassConstantNode( $node->name->toString(), $this->printer->prettyPrintExpr($node->value), $parentNode->isPublic(), - $parentNode->isPrivate() + $parentNode->isPrivate(), + $this->exportPhpDocNode( + $fileName, + $classNode->namespacedName->toString(), + null, + $docComment !== null ? $docComment->getText() : null + ), ); }