private function replaceNameOccurrences(Tokens $tokens, $namespace, $name, $startIndex, $endIndex)
    {
        $tokensAnalyzer = new TokensAnalyzer($tokens);
        $insideMethodSignatureUntil = null;

        for ($i = $startIndex; $i < $endIndex; ++$i) {
            if ($i === $insideMethodSignatureUntil) {
                $insideMethodSignatureUntil = null;
            }

            $token = $tokens[$i];

            // skip anonymous classes
            if ($token->isGivenKind(T_CLASS) && $tokensAnalyzer->isAnonymousClass($i)) {
                $i = $tokens->getNextTokenOfKind($i, ['{']);
                $i = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $i);

                continue;
            }

            if ($token->isGivenKind(T_FUNCTION)) {
                $i = $tokens->getNextTokenOfKind($i, ['(']);
                $insideMethodSignatureUntil = $tokens->getNextTokenOfKind($i, ['{', ';']);

                continue;
            }

            if (!$token->equals([T_STRING, $name], false)) {
                continue;
            }

            $nextToken = $tokens[$tokens->getNextMeaningfulToken($i)];
            if ($nextToken->isGivenKind(T_NS_SEPARATOR)) {
                continue;
            }

            $classStartIndex = $i;
            $prevToken = $tokens[$tokens->getPrevMeaningfulToken($i)];
            if ($prevToken->isGivenKind(T_NS_SEPARATOR)) {
                $classStartIndex = $this->getClassStart($tokens, $i, $namespace);
                if (null === $classStartIndex) {
                    continue;
                }
                $prevToken = $tokens[$tokens->getPrevMeaningfulToken($classStartIndex)];
            }
            if ($prevToken->isGivenKind([T_OBJECT_OPERATOR, T_STRING])) {
                continue;
            }

            if (
                $prevToken->isGivenKind([T_INSTANCEOF, T_NEW])
                || $nextToken->isGivenKind(T_PAAMAYIM_NEKUDOTAYIM)
                || (
                    null !== $insideMethodSignatureUntil
                    && $i < $insideMethodSignatureUntil
                    && $prevToken->equalsAny(['(', ',', [CT::T_TYPE_COLON], [CT::T_NULLABLE_TYPE]])
                )
            ) {
                for ($j = $classStartIndex; $j < $i; ++$j) {
                    $tokens->clearTokenAndMergeSurroundingWhitespace($j);
                }
                $tokens[$i] = new Token([T_STRING, 'self']);
            }
        }
    }
private function replaceNameOccurrences(Tokens $tokens, $namespace, $name, $startIndex, $endIndex)
    {
        $tokensAnalyzer = new TokensAnalyzer($tokens);
        $insideMethodSignatureUntil = null;

        for ($i = $startIndex; $i < $endIndex; ++$i) {
            if ($i === $insideMethodSignatureUntil) {
                $insideMethodSignatureUntil = null;
            }

            $token = $tokens[$i];

            
            if ($token->isGivenKind(T_CLASS) && $tokensAnalyzer->isAnonymousClass($i)) {
                $i = $tokens->getNextTokenOfKind($i, ['{']);
                $i = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $i);

                continue;
            }

            if ($token->isGivenKind(T_FUNCTION)) {
                $i = $tokens->getNextTokenOfKind($i, ['(']);
                $insideMethodSignatureUntil = $tokens->getNextTokenOfKind($i, ['{', ';']);

                continue;
            }

            if (!$token->equals([T_STRING, $name], false)) {
                continue;
            }

            $nextToken = $tokens[$tokens->getNextMeaningfulToken($i)];
            if ($nextToken->isGivenKind(T_NS_SEPARATOR)) {
                continue;
            }

            $classStartIndex = $i;
            $prevToken = $tokens[$tokens->getPrevMeaningfulToken($i)];
            if ($prevToken->isGivenKind(T_NS_SEPARATOR)) {
                $classStartIndex = $this->getClassStart($tokens, $i, $namespace);
                if (null === $classStartIndex) {
                    continue;
                }
                $prevToken = $tokens[$tokens->getPrevMeaningfulToken($classStartIndex)];
            }
            if ($prevToken->isGivenKind([T_OBJECT_OPERATOR, T_STRING])) {
                continue;
            }

            if (
                $prevToken->isGivenKind([T_INSTANCEOF, T_NEW])
                || $nextToken->isGivenKind(T_PAAMAYIM_NEKUDOTAYIM)
                || (
                    null !== $insideMethodSignatureUntil
                    && $i < $insideMethodSignatureUntil
                    && $prevToken->equalsAny(['(', ',', [CT::T_TYPE_COLON], [CT::T_NULLABLE_TYPE]])
                )
            ) {
                for ($j = $classStartIndex; $j < $i; ++$j) {
                    $tokens->clearTokenAndMergeSurroundingWhitespace($j);
                }
                $tokens[$i] = new Token([T_STRING, 'self']);
            }
        }
    }
private function replaceNameOccurrences ( Tokens $ tokens , $ namespace , $ name , $ startIndex , $ endIndex ) { $ tokensAnalyzer = new TokensAnalyzer ( $ tokens ) ; $ insideMethodSignatureUntil = null ; for ( $ i = $ startIndex ; $ i < $ endIndex ; ++ $ i ) { if ( $ i === $ insideMethodSignatureUntil ) { $ insideMethodSignatureUntil = null ; } $ token = $ tokens [ $ i ] ; // skip anonymous classes if ( $ token -> isGivenKind ( T_CLASS ) && $ tokensAnalyzer -> isAnonymousClass ( $ i ) ) { $ i = $ tokens -> getNextTokenOfKind ( $ i , [ '{' ] ) ; $ i = $ tokens -> findBlockEnd ( Tokens :: BLOCK_TYPE_CURLY_BRACE , $ i ) ; continue ; } if ( $ token -> isGivenKind ( T_FUNCTION ) ) { $ i = $ tokens -> getNextTokenOfKind ( $ i , [ '(' ] ) ; $ insideMethodSignatureUntil = $ tokens -> getNextTokenOfKind ( $ i , [ '{' , ';' ] ) ; continue ; } if ( ! $ token -> equals ( [ T_STRING , $ name ] , false ) ) { continue ; } $ nextToken = $ tokens [ $ tokens -> getNextMeaningfulToken ( $ i ) ] ; if ( $ nextToken -> isGivenKind ( T_NS_SEPARATOR ) ) { continue ; } $ classStartIndex = $ i ; $ prevToken = $ tokens [ $ tokens -> getPrevMeaningfulToken ( $ i ) ] ; if ( $ prevToken -> isGivenKind ( T_NS_SEPARATOR ) ) { $ classStartIndex = $ this -> getClassStart ( $ tokens , $ i , $ namespace ) ; if ( null === $ classStartIndex ) { continue ; } $ prevToken = $ tokens [ $ tokens -> getPrevMeaningfulToken ( $ classStartIndex ) ] ; } if ( $ prevToken -> isGivenKind ( [ T_OBJECT_OPERATOR , T_STRING ] ) ) { continue ; } if ( $ prevToken -> isGivenKind ( [ T_INSTANCEOF , T_NEW ] ) || $ nextToken -> isGivenKind ( T_PAAMAYIM_NEKUDOTAYIM ) || ( null !== $ insideMethodSignatureUntil && $ i < $ insideMethodSignatureUntil && $ prevToken -> equalsAny ( [ '(' , ',' , [ CT :: T_TYPE_COLON ] , [ CT :: T_NULLABLE_TYPE ] ] ) ) ) { for ( $ j = $ classStartIndex ; $ j < $ i ; ++ $ j ) { $ tokens -> clearTokenAndMergeSurroundingWhitespace ( $ j ) ; } $ tokens [ $ i ] = new Token ( [ T_STRING , 'self' ] ) ; } } }
Replace occurrences of the name of the classy element by "self" (if possible).

@param Tokens $tokens
@param string $namespace
@param string $name
@param int    $startIndex
@param int    $endIndex
Replace occurrences of the name of the classy element by self ( if possible ) .