protected function getParameterValueForCommand($command, ArrayAccess $source,
		ReflectionParameter $parameter, array $extras = array())
	{
		if (array_key_exists($parameter->name, $extras))
		{
			return $extras[$parameter->name];
		}

		if (isset($source[$parameter->name]))
		{
			return $source[$parameter->name];
		}

		if ($parameter->isDefaultValueAvailable())
		{
			return $parameter->getDefaultValue();
		}

		MarshalException::whileMapping($command, $parameter);
	}