private function settersFromArgumentArray()

in src/Fixers/ClientUpgradeFixer/RpcMethod.php [147:184]


    private function settersFromArgumentArray(Tokens $tokens, int $index): array
    {
        $setters = [];
        $legacyArraySyntax = $tokens[$index]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN);
        $closeIndex = $legacyArraySyntax
            ? $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $index)
            : $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, ++$index);

        $arrayEntryIndices = $this->getSetterIndiciesFromInlineArray($tokens, $index, $closeIndex, $legacyArraySyntax);

        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(), '"\''));
            $tokens->removeLeadingWhitespace($doubleArrowIndex + 1);
            $valueEnd = isset($arrayEntryIndices[$i + 1])
                ? $tokens->getPrevTokenOfKind($arrayEntryIndices[$i + 1], [new Token(',')])
                : $closeIndex;
            $varTokens = array_slice($tokens->toArray(), $doubleArrowIndex + 1, $valueEnd - $doubleArrowIndex - 1);
            // Remove trailing whitespace
            for ($i = count($varTokens) - 1; $varTokens[$i]->isGivenKind(T_WHITESPACE); $i--) {
                unset($varTokens[$i]);
            }
            // Remove trailing commas
            for ($i = count($varTokens) - 1; $varTokens[$i]->getContent() === ','; $i--) {
                unset($varTokens[$i]);
            }
            // Remove leading whitespace
            for ($i = 0; $varTokens[$i]->isGivenKind(T_WHITESPACE); $i++) {
                unset($varTokens[$i]);
            }
            $setters[] = [$setterName, $varTokens];
            $index = $valueEnd;
        }
        return $setters;
    }