private function getSettersFromTokens()

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