diff --git a/Parser/JmsMetadataParser.php b/Parser/JmsMetadataParser.php index c9fef78..a8009dc 100644 --- a/Parser/JmsMetadataParser.php +++ b/Parser/JmsMetadataParser.php @@ -30,6 +30,8 @@ class JmsMetadataParser implements ParserInterface */ private $commentExtractor; + private $parsedClasses = array(); + /** * Constructor, requires JMS Metadata factory */ @@ -82,12 +84,19 @@ class JmsMetadataParser implements ParserInterface 'readonly' => $item->readOnly ); + // if class already parsed, continue, to avoid infinite recursion + if (in_array($dataType['class'], $this->parsedClasses)) { + continue; + } + //check for nested classes with JMS metadata if ($dataType['class'] && null !== $this->factory->getMetadataForClass($dataType['class'])) { + $this->parsedClasses[] = $dataType['class']; $params[$name]['children'] = $this->parse($dataType['class']); } } } + $this->parsedClasses = array(); return $params; }