reader = $reader; } public function loadMetadataForClass(\ReflectionClass $class) { $classMetadata = new ClassMetadata($name = $class->getName()); foreach ($this->reader->getClassAnnotations($class) as $annot) { if ($annot instanceof ExclusionPolicy) { $classMetadata->setExclusionPolicy($annot->getStrategy()); } } foreach ($class->getProperties() as $property) { if ($property->getDeclaringClass()->getName() !== $name) { continue; } $propertyMetadata = new PropertyMetadata($name, $property->getName()); foreach ($this->reader->getPropertyAnnotations($property) as $annot) { if ($annot instanceof Since) { $propertyMetadata->setSinceVersion($annot->getVersion()); } else if ($annot instanceof Until) { $propertyMetadata->setUntilVersion($annot->getVersion()); } else if ($annot instanceof SerializedName) { $propertyMetadata->setSerializedName($annot->getName()); } else if ($annot instanceof Expose) { $propertyMetadata->setExposed(true); } else if ($annot instanceof Exclude) { $propertyMetadata->setExcluded(true); } else if ($annot instanceof Type) { $propertyMetadata->setType($annot->getName()); } } $classMetadata->addPropertyMetadata($propertyMetadata); } return $classMetadata; } }