code: protected function updateItem($name, $item)
      {
          if ($name !== $item->name) {
              if (isset($this->items[$item->name])) {
                  throw new InvalidArgumentException("Unable to change the item name. The name '{$item->name}' is already used by another item.");
              }
  
              // Remove old item in case of renaming
              unset($this->items[$name]);
  
              if (isset($this->children[$name])) {
                  $this->children[$item->name] = $this->children[$name];
                  unset($this->children[$name]);
              }
              foreach ($this->children as &$children) {
                  if (isset($children[$name])) {
                      $children[$item->name] = $children[$name];
                      unset($children[$name]);
                  }
              }
              foreach ($this->assignments as &$assignments) {
                  if (isset($assignments[$name])) {
                      $assignments[$item->name] = $assignments[$name];
                      $assignments[$item->name]->roleName = $item->name;
                      unset($assignments[$name]);
                  }
              }
              $this->saveAssignments();
          }
  
          $this->items[$item->name] = $item;
  
          $this->saveItems();
          return true;
      }
docs: {@inheritdoc}