protected function initializeViewHelperAndAddItToStack(ParsingState $state, $namespaceIdentifier, $methodIdentifier, $argumentsObjectTree)
    {
        if ($this->isNamespaceValid($namespaceIdentifier, $methodIdentifier) === false) {
            return false;
        }
        $resolvedViewHelperClassName = $this->resolveViewHelperName($namespaceIdentifier, $methodIdentifier);
        $actualViewHelperClassName = $this->objectManager->getCaseSensitiveObjectName($resolvedViewHelperClassName);
        if ($actualViewHelperClassName === false) {
            throw new Exception(sprintf(
                'The ViewHelper "<%s:%s>" could not be resolved.' . chr(10) .
                'Based on your spelling, the system would load the class "%s", however this class does not exist.',
                $namespaceIdentifier, $methodIdentifier, $resolvedViewHelperClassName), 1407060572);
        } elseif ($actualViewHelperClassName !== $resolvedViewHelperClassName) {
            throw new Exception(sprintf(
                'The ViewHelper "<%s:%s>" inside your template is not written correctly upper/lowercased.' . chr(10) .
                'Based on your spelling, the system would load the (non-existant) class "%s", however the real class name is "%s".' . chr(10) .
                'This error can be fixed by making sure the ViewHelper is written in the correct upper/lowercase form.',
                $namespaceIdentifier, $methodIdentifier, $resolvedViewHelperClassName, $actualViewHelperClassName), 1407060573);
        }
        $viewHelper = $this->objectManager->get($actualViewHelperClassName);

        // The following three checks are only done *in an uncached template*, and not needed anymore in the cached version
        $expectedViewHelperArguments = $viewHelper->prepareArguments();
        $this->abortIfUnregisteredArgumentsExist($expectedViewHelperArguments, $argumentsObjectTree);
        $this->abortIfRequiredArgumentsAreMissing($expectedViewHelperArguments, $argumentsObjectTree);
        $this->rewriteBooleanNodesInArgumentsObjectTree($expectedViewHelperArguments, $argumentsObjectTree);

        /** @var $currentViewHelperNode ViewHelperNode */
        $currentViewHelperNode = $this->objectManager->get(\TYPO3\Fluid\Core\Parser\SyntaxTree\ViewHelperNode::class, $viewHelper, $argumentsObjectTree);
        $this->callInterceptor($currentViewHelperNode, InterceptorInterface::INTERCEPT_OPENING_VIEWHELPER, $state);

        if ($viewHelper instanceof ChildNodeAccessInterface && !($viewHelper instanceof CompilableInterface)) {
            $state->setCompilable(false);
        }

        // PostParse Facet
        if ($viewHelper instanceof PostParseInterface) {
            // Don't just use $viewHelper::postParseEvent(...),
            // as this will break with PHP < 5.3.
            call_user_func(array($viewHelper, 'postParseEvent'), $currentViewHelperNode, $argumentsObjectTree, $state->getVariableContainer());
        }


        $state->pushNodeToStack($currentViewHelperNode);

        return true;
    }