private function settersFromOptionalArgsVar()

in src/Fixers/ClientUpgradeFixer/RpcMethod.php [186:220]


    private function settersFromOptionalArgsVar(Tokens $tokens, int $index, string $optionalArgsVar): array
    {
        $setters = [];
        if (!$tokens[$index]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)
            && !$tokens[$index]->isGivenKind(T_ARRAY)) {
            return $setters;
        }

        $closeIndex = $tokens[$index]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)
            ? $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $index)
            : $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index + 1);
        $arrayEntryIndices = $this->getSetterIndiciesFromInlineArray($tokens, $index, $closeIndex);

        foreach ($arrayEntryIndices as $i => $doubleArrowIndex) {
            $keyIndex = $tokens->getNextMeaningfulToken($index);
            if (!$tokens[$keyIndex]->isGivenKind(T_CONSTANT_ENCAPSED_STRING)) {
                continue;
            }

            $setterName = 'set' . ucfirst(trim($tokens[$keyIndex]->getContent(), '"\''));
            $varTokens = [
                new Token([T_VARIABLE, $optionalArgsVar]),
                new Token([CT::T_ARRAY_SQUARE_BRACE_OPEN, '[']),
                clone $tokens[$keyIndex],
                new Token([CT::T_ARRAY_SQUARE_BRACE_CLOSE, ']']),
            ];
            $setters[] = [$setterName, $varTokens];
            $valueEnd = isset($arrayEntryIndices[$i + 1])
                ? $tokens->getPrevTokenOfKind($arrayEntryIndices[$i + 1], [new Token(',')])
                : $closeIndex;
            $index = $valueEnd;
        }

        return $setters;
    }