SlevomatCodingStandard\Helpers\ReferencedNameHelper::createAllReferencedNames PHP Method

createAllReferencedNames() private static method

private static createAllReferencedNames ( PHP_CodeSniffer_File $phpcsFile, integer $openTagPointer ) : ReferencedName[]
$phpcsFile PHP_CodeSniffer_File
$openTagPointer integer
return ReferencedName[] referenced names
    private static function createAllReferencedNames(PHP_CodeSniffer_File $phpcsFile, $openTagPointer)
    {
        $beginSearchAtPointer = $openTagPointer + 1;
        $tokens = $phpcsFile->getTokens();
        $searchTypes = array_merge([T_RETURN_TYPE], TokenHelper::$nameTokenCodes);
        $types = [];
        while (true) {
            $nameStartPointer = $phpcsFile->findNext($searchTypes, $beginSearchAtPointer);
            if ($nameStartPointer === false) {
                break;
            }
            $nameStartToken = $tokens[$nameStartPointer];
            $nameEndPointer = self::findReferencedNameEndPointer($phpcsFile, $nameStartPointer);
            if ($nameEndPointer === null) {
                $beginSearchAtPointer = TokenHelper::findNextExcluding($phpcsFile, array_merge([T_WHITESPACE, T_RETURN_TYPE], TokenHelper::$nameTokenCodes), $nameStartPointer);
                continue;
            }
            $nextTokenAfterEndPointer = TokenHelper::findNextEffective($phpcsFile, $nameEndPointer);
            $previousTokenBeforeStartPointer = TokenHelper::findPreviousEffective($phpcsFile, $nameStartPointer - 1);
            $type = ReferencedName::TYPE_DEFAULT;
            if ($nextTokenAfterEndPointer !== null && $previousTokenBeforeStartPointer !== null) {
                if ($tokens[$nextTokenAfterEndPointer]['code'] === T_OPEN_PARENTHESIS) {
                    if ($tokens[$previousTokenBeforeStartPointer]['code'] !== T_NEW) {
                        $type = ReferencedName::TYPE_FUNCTION;
                    }
                } elseif ($tokens[$nextTokenAfterEndPointer]['code'] !== T_VARIABLE) {
                    if (!in_array($tokens[$previousTokenBeforeStartPointer]['code'], [T_EXTENDS, T_IMPLEMENTS, T_INSTANCEOF, T_USE, T_NEW, T_COLON], true) && !in_array($tokens[$nextTokenAfterEndPointer]['code'], [T_DOUBLE_COLON], true)) {
                        if ($tokens[$previousTokenBeforeStartPointer]['code'] === T_COMMA) {
                            $precedingTokenPointer = TokenHelper::findPreviousExcluding($phpcsFile, array_merge([T_COMMA], TokenHelper::$nameTokenCodes, TokenHelper::$ineffectiveTokenCodes), $previousTokenBeforeStartPointer - 1);
                            if (!in_array($tokens[$precedingTokenPointer]['code'], [T_IMPLEMENTS, T_EXTENDS, T_USE])) {
                                $type = ReferencedName::TYPE_CONSTANT;
                            }
                        } elseif (PHP_VERSION_ID >= 70100 && ($tokens[$previousTokenBeforeStartPointer]['code'] === T_BITWISE_OR || $tokens[$previousTokenBeforeStartPointer]['code'] === T_OPEN_PARENTHESIS)) {
                            $exclude = [T_BITWISE_OR, T_OPEN_PARENTHESIS];
                            $catchPointer = TokenHelper::findPreviousExcluding($phpcsFile, array_merge($exclude, TokenHelper::$nameTokenCodes, TokenHelper::$ineffectiveTokenCodes), $previousTokenBeforeStartPointer - 1);
                            $exclude = [T_BITWISE_OR];
                            $openParenthesisPointer = TokenHelper::findPreviousExcluding($phpcsFile, array_merge($exclude, TokenHelper::$nameTokenCodes, TokenHelper::$ineffectiveTokenCodes), $previousTokenBeforeStartPointer);
                            if ($tokens[$catchPointer]['code'] !== T_CATCH || $tokens[$openParenthesisPointer]['code'] !== T_OPEN_PARENTHESIS) {
                                $type = ReferencedName::TYPE_CONSTANT;
                            }
                        } else {
                            $type = ReferencedName::TYPE_CONSTANT;
                        }
                    }
                }
            }
            $types[] = new ReferencedName(TokenHelper::getContent($phpcsFile, $nameStartPointer, $nameEndPointer), $nameStartPointer, $type);
            $beginSearchAtPointer = $nameEndPointer + 1;
        }
        return $types;
    }