public function getNextDefinition(input\parameter\values\Arguments $values) : ?input\Argument
    {
        $nextIndex = $values->count();

        // We are using an associative array internally but we need to match by a numeric index
        // in this case, maybe even twice, so let's only grab the values once for that.
        /* @var input\Argument[] $items */
        $items = array_values($this->items);

        // $items is now 0-indexed, while $nextIndex is a count of all values already set,
        // meaning it's 1-indexed.
        if (isset($items[$nextIndex])) {
            return $items[$nextIndex];
        }

        // At this point, there was no further Argument definition present. However, maybe the previous
        // Argument accepts multiple values and we are actually supposed to add a value to it?
        if (isset($items[$nextIndex - 1]) && $items[$nextIndex - 1]->getValue() instanceof input\values\Multiple) {
            return $items[$nextIndex - 1];
        }

        return null;
    }