Neos.Neos/Classes/Domain/Service/NodeShortcutResolver.php
public function resolveShortcutTarget(NodeInterface $node)
    {
        $infiniteLoopPrevention = 0;
        while ($node->getNodeType()->isOfType('Neos.Neos:Shortcut') && $infiniteLoopPrevention < 50) {
            $infiniteLoopPrevention++;
            switch ($node->getProperty('targetMode')) {
                case 'selectedTarget':
                    $target = $node->getProperty('target');
                    if ($this->linkingService->hasSupportedScheme($target)) {
                        $targetObject = $this->linkingService->convertUriToObject($target, $node);
                        if ($targetObject instanceof NodeInterface) {
                            $node = $targetObject;
                        } elseif ($targetObject instanceof AssetInterface) {
                            return $this->linkingService->resolveAssetUri($target);
                        }
                    } else {
                        return $target;
                    }
                    break;
                case 'parentNode':
                    $node = $node->getParent();
                    break;
                case 'firstChildNode':
                default:
                    $childNodes = $node->getChildNodes('Neos.Neos:Document');
                    if ($childNodes !== []) {
                        $node = reset($childNodes);
                    } else {
                        return null;
                    }
            }
        }

        return $node;
    }
public function resolveShortcutTarget(NodeInterface $node)
    {
        $infiniteLoopPrevention = 0;
        while ($node->getNodeType()->isOfType('Neos.Neos:Shortcut') && $infiniteLoopPrevention < 50) {
            $infiniteLoopPrevention++;
            switch ($node->getProperty('targetMode')) {
                case 'selectedTarget':
                    $target = $node->getProperty('target');
                    if ($this->linkingService->hasSupportedScheme($target)) {
                        $targetObject = $this->linkingService->convertUriToObject($target, $node);
                        if ($targetObject instanceof NodeInterface) {
                            $node = $targetObject;
                        } elseif ($targetObject instanceof AssetInterface) {
                            return $this->linkingService->resolveAssetUri($target);
                        }
                    } else {
                        return $target;
                    }
                    break;
                case 'parentNode':
                    $node = $node->getParent();
                    break;
                case 'firstChildNode':
                default:
                    $childNodes = $node->getChildNodes('Neos.Neos:Document');
                    if ($childNodes !== []) {
                        $node = reset($childNodes);
                    } else {
                        return null;
                    }
            }
        }

        return $node;
    }
public function resolveShortcutTarget ( NodeInterface $ node ) { $ infiniteLoopPrevention = 0 ; while ( $ node -> getNodeType ( ) -> isOfType ( 'Neos.Neos:Shortcut' ) && $ infiniteLoopPrevention < 50 ) { $ infiniteLoopPrevention ++ ; switch ( $ node -> getProperty ( 'targetMode' ) ) { case 'selectedTarget' : $ target = $ node -> getProperty ( 'target' ) ; if ( $ this -> linkingService -> hasSupportedScheme ( $ target ) ) { $ targetObject = $ this -> linkingService -> convertUriToObject ( $ target , $ node ) ; if ( $ targetObject instanceof NodeInterface ) { $ node = $ targetObject ; } elseif ( $ targetObject instanceof AssetInterface ) { return $ this -> linkingService -> resolveAssetUri ( $ target ) ; } } else { return $ target ; } break ; case 'parentNode' : $ node = $ node -> getParent ( ) ; break ; case 'firstChildNode' : default : $ childNodes = $ node -> getChildNodes ( 'Neos.Neos:Document' ) ; if ( $ childNodes !== [ ] ) { $ node = reset ( $ childNodes ) ; } else { return null ; } } } return $ node ; }
Resolves a shortcut node to the target. The return value can be

* a NodeInterface instance if the target is a node or a node:// URI
* a string (in case the target is a plain text URI or an asset:// URI)
* NULL in case the shortcut cannot be resolved

@param NodeInterface $node
@return NodeInterface|string|NULL
Resolves a shortcut node to the target . The return value can be