original_string: protected function hydrateComponents($collection)
      {
          $componentsLocated = array();
  
          foreach ($this->components as $model => $components) {
              foreach ($this->locators as $locator) {
                  if ($locator->supports($model)) {
                      $locator->locate($model, $components);
  
                      foreach ($components as $key => $component) {
                          $componentsLocated[$key] = $component;
                      }
  
                      break;
                  }
              }
          }
  
          foreach ($collection as $key => $action) {
              if ($action instanceof TimelineInterface) {
                  $action = $action->getAction();
              }
  
              foreach ($action->getActionComponents() as $actionComponent) {
                  $component = $actionComponent->getComponent();
                  if (!$actionComponent->isText() && is_object($component) && null === $component->getData()) {
                      $hash = $component->getHash();
  
                      if (array_key_exists($hash, $componentsLocated) && !empty($componentsLocated[$hash]) && null !== $componentsLocated[$hash]->getData()) {
                          $actionComponent->setComponent($componentsLocated[$hash]);
                      } else {
                          if ($this->filterUnresolved) {
                              if ($collection instanceof PagerInterface) {
                                  $items = iterator_to_array($collection->getIterator());
                                  unset($items[$key]);
                                  $collection->setItems($items);
                              } elseif (is_array($collection)) {
                                  unset($collection[$key]);
                              } else {
                                  throw new \Exception('Collection must be an array or a PagerInterface');
                              }
                              break;
                          }
                      }
                  }
              }
          }
  
          return $collection;
      }
code: protected function hydrateComponents($collection)
      {
          $componentsLocated = array();
  
          foreach ($this->components as $model => $components) {
              foreach ($this->locators as $locator) {
                  if ($locator->supports($model)) {
                      $locator->locate($model, $components);
  
                      foreach ($components as $key => $component) {
                          $componentsLocated[$key] = $component;
                      }
  
                      break;
                  }
              }
          }
  
          foreach ($collection as $key => $action) {
              if ($action instanceof TimelineInterface) {
                  $action = $action->getAction();
              }
  
              foreach ($action->getActionComponents() as $actionComponent) {
                  $component = $actionComponent->getComponent();
                  if (!$actionComponent->isText() && is_object($component) && null === $component->getData()) {
                      $hash = $component->getHash();
  
                      if (array_key_exists($hash, $componentsLocated) && !empty($componentsLocated[$hash]) && null !== $componentsLocated[$hash]->getData()) {
                          $actionComponent->setComponent($componentsLocated[$hash]);
                      } else {
                          if ($this->filterUnresolved) {
                              if ($collection instanceof PagerInterface) {
                                  $items = iterator_to_array($collection->getIterator());
                                  unset($items[$key]);
                                  $collection->setItems($items);
                              } elseif (is_array($collection)) {
                                  unset($collection[$key]);
                              } else {
                                  throw new \Exception('Collection must be an array or a PagerInterface');
                              }
                              break;
                          }
                      }
                  }
              }
          }
  
          return $collection;
      }
code_tokens: protected function hydrateComponents ( $ collection ) { $ componentsLocated = array ( ) ; foreach ( $ this -> components as $ model => $ components ) { foreach ( $ this -> locators as $ locator ) { if ( $ locator -> supports ( $ model ) ) { $ locator -> locate ( $ model , $ components ) ; foreach ( $ components as $ key => $ component ) { $ componentsLocated [ $ key ] = $ component ; } break ; } } } foreach ( $ collection as $ key => $ action ) { if ( $ action instanceof TimelineInterface ) { $ action = $ action -> getAction ( ) ; } foreach ( $ action -> getActionComponents ( ) as $ actionComponent ) { $ component = $ actionComponent -> getComponent ( ) ; if ( ! $ actionComponent -> isText ( ) && is_object ( $ component ) && null === $ component -> getData ( ) ) { $ hash = $ component -> getHash ( ) ; if ( array_key_exists ( $ hash , $ componentsLocated ) && ! empty ( $ componentsLocated [ $ hash ] ) && null !== $ componentsLocated [ $ hash ] -> getData ( ) ) { $ actionComponent -> setComponent ( $ componentsLocated [ $ hash ] ) ; } else { if ( $ this -> filterUnresolved ) { if ( $ collection instanceof PagerInterface ) { $ items = iterator_to_array ( $ collection -> getIterator ( ) ) ; unset ( $ items [ $ key ] ) ; $ collection -> setItems ( $ items ) ; } elseif ( is_array ( $ collection ) ) { unset ( $ collection [ $ key ] ) ; } else { throw new \ Exception ( 'Collection must be an array or a PagerInterface' ) ; } break ; } } } } } return $ collection ; }
docstring: Use locators to hydrate components.
  
  @param mixed $collection collection
  
  @throws \Exception
  @return mixed
docstring_tokens: Use locators to hydrate components .