/**
  * @throws UnableToBuild when the source provides something
  * else than an object.
  * @return mixed builder object
  */
 private function getBuilderBasedOn(BuilderObjectProductBuildPlan $p)
 {
     $builderSource = $p->getBuilderSource();
     $builder = $this->objectResolver->resolveValueFrom($builderSource);
     if (!is_object($builder)) {
         throw new UnableToBuild();
     }
     return $builder;
 }
 public function mapToObject(array $previouslyMappedObject)
 {
     $plan = new BuilderObjectProductBuildPlan();
     $plan->setBuilderSource($this->objectSourceMapper->mapToObject($previouslyMappedObject[0]));
     foreach ($previouslyMappedObject[1] as $settingMethodData) {
         $plan->addSettingMethodCall($this->methodCallMapper->mapToObject($settingMethodData));
     }
     $plan->setBuildMethodCall($this->methodCallMapper->mapToObject($previouslyMappedObject[2]));
     return $plan;
 }