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;
}