Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\Serializer\Mapping; Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: * Chris@0: * @author Kévin Dunglas Chris@0: */ Chris@0: class ClassMetadata implements ClassMetadataInterface Chris@0: { Chris@0: /** Chris@0: * @internal This property is public in order to reduce the size of the Chris@0: * class' serialized representation. Do not access it. Use Chris@0: * {@link getName()} instead. Chris@0: */ Chris@0: public $name; Chris@0: Chris@0: /** Chris@0: * @var AttributeMetadataInterface[] Chris@0: * Chris@0: * @internal This property is public in order to reduce the size of the Chris@0: * class' serialized representation. Do not access it. Use Chris@0: * {@link getAttributesMetadata()} instead. Chris@0: */ Chris@17: public $attributesMetadata = []; Chris@0: Chris@0: /** Chris@0: * @var \ReflectionClass Chris@0: */ Chris@0: private $reflClass; Chris@0: Chris@0: /** Chris@0: * Constructs a metadata for the given class. Chris@0: * Chris@0: * @param string $class Chris@0: */ Chris@0: public function __construct($class) Chris@0: { Chris@0: $this->name = $class; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getName() Chris@0: { Chris@0: return $this->name; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function addAttributeMetadata(AttributeMetadataInterface $attributeMetadata) Chris@0: { Chris@0: $this->attributesMetadata[$attributeMetadata->getName()] = $attributeMetadata; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getAttributesMetadata() Chris@0: { Chris@0: return $this->attributesMetadata; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function merge(ClassMetadataInterface $classMetadata) Chris@0: { Chris@0: foreach ($classMetadata->getAttributesMetadata() as $attributeMetadata) { Chris@0: if (isset($this->attributesMetadata[$attributeMetadata->getName()])) { Chris@0: $this->attributesMetadata[$attributeMetadata->getName()]->merge($attributeMetadata); Chris@0: } else { Chris@0: $this->addAttributeMetadata($attributeMetadata); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getReflectionClass() Chris@0: { Chris@0: if (!$this->reflClass) { Chris@0: $this->reflClass = new \ReflectionClass($this->getName()); Chris@0: } Chris@0: Chris@0: return $this->reflClass; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the names of the properties that should be serialized. Chris@0: * Chris@0: * @return string[] Chris@0: */ Chris@0: public function __sleep() Chris@0: { Chris@17: return [ Chris@0: 'name', Chris@0: 'attributesMetadata', Chris@17: ]; Chris@0: } Chris@0: }