5 * Contains \Drupal\drupalmoduleupgrader\Converter\Routing\LinkIndex.
8 namespace Drupal\drupalmoduleupgrader\Routing;
10 use Doctrine\Common\Collections\ArrayCollection;
11 use Drupal\drupalmoduleupgrader\Routing\LinkBinding\LinkBinding;
14 * Represents a set of link bindings of a single type (i.e., menu links, local tasks, etc.)
16 class LinkIndex extends ArrayCollection {
19 * Tracks link IDs to prevent collisions.
23 protected $idiotBox = [];
26 * Adds a binding to this index.
28 * @param \Drupal\drupalmoduleupgrader\Routing\LinkBinding\LinkBinding $binding
30 public function addBinding(LinkBinding $binding) {
31 $id = $binding->getIdentifier();
33 if (isset($this->idiotBox[$id])) {
34 $id .= '_' . $this->idiotBox[$id]++;
37 $this->idiotBox[$id] = 0;
40 $this->set($binding->getSource()->getPath()->__toString(), $binding);
41 $binding->onIndexed($id, $this);
45 * Builds all the links in this index and returns them as an array of arrays,
50 public function build() {
53 foreach ($this as $binding) {
54 $build[ $binding->getIdentifier() ] = $binding->build();