public static function createName($className, array $args = [], array $callChain = [])
    {
        $chain = '';

        if (!empty($callChain)) {
            foreach ($callChain as $method => $methodArgs) {
                if (!is_array($methodArgs)) {
                    throw new ArgumentTypeException('callChain', 'array');
                }

                $chain .= '->' . $method . '(' . static::convertArgsToString($methodArgs) . ')';
            }
        }

        return '\\' . $className . '::agent(' . static::convertArgsToString($args) . ')' . $chain . ';';
    }