From d129db9a53cbfa1358205a778303cc135e9ef355 Mon Sep 17 00:00:00 2001 From: Klein Florian Date: Wed, 24 Oct 2012 15:09:36 +0200 Subject: [PATCH 1/2] add virtual property support for jms parser --- Parser/JmsMetadataParser.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Parser/JmsMetadataParser.php b/Parser/JmsMetadataParser.php index c9fef78..b8a7f58 100644 --- a/Parser/JmsMetadataParser.php +++ b/Parser/JmsMetadataParser.php @@ -13,6 +13,8 @@ namespace Nelmio\ApiDocBundle\Parser; use Metadata\MetadataFactoryInterface; use Nelmio\ApiDocBundle\Util\DocCommentExtractor; +use JMS\SerializerBundle\Metadata\PropertyMetadata; +use JMS\SerializerBundle\Metadata\VirtualPropertyMetadata; /** * Uses the JMS metadata factory to extract input/output model information @@ -78,7 +80,7 @@ class JmsMetadataParser implements ParserInterface $params[$name] = array( 'dataType' => $dataType['normalized'], 'required' => false, //TODO: can't think of a good way to specify this one, JMS doesn't have a setting for this - 'description' => $this->getDescription($input, $item->name), + 'description' => $this->getDescription($input, $item), 'readonly' => $item->readOnly ); @@ -158,10 +160,15 @@ class JmsMetadataParser implements ParserInterface return null; } - protected function getDescription($className, $propertyName) + protected function getDescription($className, PropertyMetadata $item) { $ref = new \ReflectionClass($className); - $extracted = $this->commentExtractor->getDocCommentText($ref->getProperty($propertyName)); + if ($item instanceof VirtualPropertyMetadata) { + $extracted = $this->commentExtractor->getDocCommentText($ref->getMethod($item->getter)); + } + else { + $extracted = $this->commentExtractor->getDocCommentText($ref->getProperty($item->name)); + } return !empty($extracted) ? $extracted : "No description."; } From 197cdfc989daef3c033b187c834662e6b1a9e065 Mon Sep 17 00:00:00 2001 From: Klein Florian Date: Wed, 24 Oct 2012 15:36:21 +0200 Subject: [PATCH 2/2] fix cs --- Parser/JmsMetadataParser.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Parser/JmsMetadataParser.php b/Parser/JmsMetadataParser.php index b8a7f58..0d42e31 100644 --- a/Parser/JmsMetadataParser.php +++ b/Parser/JmsMetadataParser.php @@ -165,8 +165,7 @@ class JmsMetadataParser implements ParserInterface $ref = new \ReflectionClass($className); if ($item instanceof VirtualPropertyMetadata) { $extracted = $this->commentExtractor->getDocCommentText($ref->getMethod($item->getter)); - } - else { + } else { $extracted = $this->commentExtractor->getDocCommentText($ref->getProperty($item->name)); }