protected function parseMethod(
        ClassName $className,
        array $token,
        array &$tokens,
        AccessModifier $accessModifier,
        $isStatic,
        $isAbstract,
        $source,
        $lineNumber
    ) {
        $this->typeCheck->parseMethod(func_get_args());

        do {
            $token = $this->normalizeToken(next($tokens));
            $source .= $token[1];
        } while (T_WHITESPACE === $token[0]);

        $name = $token[1];

        $bracketDepth = 0;
        while ($token = next($tokens)) {
            $token = $this->normalizeToken($token);
            $source .= $token[1];

            if ('{' === $token[0]) {
                $bracketDepth ++;
            } elseif ('}' === $token[0]) {
                $bracketDepth --;

                if ($bracketDepth < 1) {
                    break;
                }
            } elseif (';' === $token[0]) {
                if ($bracketDepth < 1) {
                    break;
                }
            }
        }

        return new MethodDefinition(
            $className,
            $name,
            $isStatic,
            $isAbstract,
            $accessModifier,
            $lineNumber,
            $source
        );
    }
protected function parseMethod(
        ClassName $className,
        array $token,
        array &$tokens,
        AccessModifier $accessModifier,
        $isStatic,
        $isAbstract,
        $source,
        $lineNumber
    ) {
        $this->typeCheck->parseMethod(func_get_args());

        do {
            $token = $this->normalizeToken(next($tokens));
            $source .= $token[1];
        } while (T_WHITESPACE === $token[0]);

        $name = $token[1];

        $bracketDepth = 0;
        while ($token = next($tokens)) {
            $token = $this->normalizeToken($token);
            $source .= $token[1];

            if ('{' === $token[0]) {
                $bracketDepth ++;
            } elseif ('}' === $token[0]) {
                $bracketDepth --;

                if ($bracketDepth < 1) {
                    break;
                }
            } elseif (';' === $token[0]) {
                if ($bracketDepth < 1) {
                    break;
                }
            }
        }

        return new MethodDefinition(
            $className,
            $name,
            $isStatic,
            $isAbstract,
            $accessModifier,
            $lineNumber,
            $source
        );
    }
@param ClassName                     $className
@param tuple<integer,string,integer> $token
@param array<string|array>           &$tokens
@param AccessModifier                $accessModifier
@param boolean                       $isStatic
@param boolean                       $isAbstract
@param string                        $source
@param integer                       $lineNumber

@return MethodDefinition