in src/Fixers/ClientUpgradeFixer/RpcMethod.php [44:88]
private function getSettersFromTokens(
Tokens $tokens,
int $startIndex,
int $argIndex,
array $argumentTokens
): array {
if ($rpcParameter = $this->getParameterAtIndex($argIndex)) {
// handle array of optional args!
if ($rpcParameter->isOptionalArgs()) {
$argumentStart = $tokens->getNextMeaningfulToken($startIndex);
if ($tokens[$argumentStart]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)
|| $tokens[$argumentStart]->isGivenKind(T_ARRAY)) {
// If the array is being passed directly to the RPC method
return $this->settersFromArgumentArray($tokens, $argumentStart);
}
if ($tokens[$argumentStart]->isGivenKind(T_VARIABLE)) {
// if a variable is being passed in, find where the variable is defined
$optionalArgsVar = $tokens[$argumentStart]->getContent();
for ($index = $argumentStart - 1; $index > 0; $index--) {
$token = $tokens[$index];
// Find where the optionalArgs variable is defined
if ($token->isGivenKind(T_VARIABLE) && $token->getContent() == $optionalArgsVar) {
$nextIndex = $tokens->getNextMeaningfulToken($index);
if ($tokens[$nextIndex]->getContent() == '=') {
$argumentStart = $tokens->getNextMeaningfulToken($nextIndex);
return $this->settersFromOptionalArgsVar($tokens, $argumentStart, $optionalArgsVar);
}
}
}
}
} else {
// Just place the argument tokens in a setter
$setterName = $rpcParameter->getSetter();
// Remove leading whitespace
for ($i = 0; $argumentTokens[$i]->isGivenKind(T_WHITESPACE); $i++) {
unset($argumentTokens[$i]);
}
return [[$setterName, $argumentTokens]];
}
} else {
// Could not find the argument for $clientFullName and $rpcName at index $argIndex
}
return [];
}