/**
  * @param ResourceContract $resource
  * @param $resourceDefinition
  * @param EntityFactoryContract $factory
  * @param mixed|null $entity
  * @param ContextContract $context
  * @return mixed $entity
  */
 public function toEntity(ResourceContract $resource, $resourceDefinition, EntityFactoryContract $factory, Context $context, $entity = null)
 {
     $resourceDefinition = ResourceDefinitionLibrary::make($resourceDefinition);
     if ($entity === null) {
         $entity = $factory->createEntity($resourceDefinition->getEntityClassName(), $context);
     }
     $this->parents->push($entity);
     $values = $resource->getProperties()->getValues();
     foreach ($values as $property) {
         $property->toEntity($entity, $this, $this->propertyResolver, $this->propertySetter, $factory, $context);
     }
     $this->parents->pop();
     return $entity;
 }