protected function getCallbackReflection($callback) {
		if (is_string($callback) && strpos($callback, '::') !== false) {
			$callback = explode('::', $callback, 2);
		}
		switch (true) {
			case is_string($callback) && function_exists($callback):
			case $callback instanceof \Closure:
				$reflection_method = new \ReflectionFunction($callback);
				break;
			case is_object($callback) && method_exists($callback, '__invoke'):
				$callback = array($callback, '__invoke');
			case is_array($callback):
				$reflection_method = new \ReflectionMethod($callback[0], $callback[1]);
				break;
		// @codeCoverageIgnoreStart
			default:
				throw new \LogicException('Found something callable that we can\'t reflect');

		}
		// @codeCoverageIgnoreEnd
		return $reflection_method;
	}