/** * @param EntitiesDescriptor|EntityDescriptor $item * @return $this|EntitiesDescriptor * @throws \InvalidArgumentException */ public function addItem($item) { if (!$item instanceof EntitiesDescriptor && !$item instanceof EntityDescriptor) { throw new \InvalidArgumentException('Expected EntitiesDescriptor or EntityDescriptor'); } if ($item === $this) { throw new \InvalidArgumentException('Circular reference detected'); } if ($item instanceof EntitiesDescriptor) { if ($item->containsItem($this)) { throw new \InvalidArgumentException('Circular reference detected'); } } $this->items[] = $item; return $this; }