code: 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
          );
      }
docs: @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