/**
* Returns a new instance which will include the passed parameter. If a parameter with that key already exist, it
* WILL NOT be overridden.
*
* @param Parameter $parameter
*
* @return self
*/
public function with(Parameter $parameter) : self
{
$key = $parameter->getKey();
$clone = clone $this;
if (false === $clone->has($key)) {
$clone->parameters[$key] = $parameter->getValue();
}
return $clone;
}