code: public function getAnnotationEnd($index)
      {
          $currentIndex = null;
  
          if (isset($this[$index + 2])) {
              if ($this[$index + 2]->isType(DocLexer::T_OPEN_PARENTHESIS)) {
                  $currentIndex = $index + 2;
              } elseif (
                  isset($this[$index + 3])
                  && $this[$index + 2]->isType(DocLexer::T_NONE)
                  && $this[$index + 3]->isType(DocLexer::T_OPEN_PARENTHESIS)
                  && Preg::match('/^(\R\s*\*\s*)*\s*$/', $this[$index + 2]->getContent())
              ) {
                  $currentIndex = $index + 3;
              }
          }
  
          if (null !== $currentIndex) {
              $level = 0;
              for ($max = \count($this); $currentIndex < $max; ++$currentIndex) {
                  if ($this[$currentIndex]->isType(DocLexer::T_OPEN_PARENTHESIS)) {
                      ++$level;
                  } elseif ($this[$currentIndex]->isType(DocLexer::T_CLOSE_PARENTHESIS)) {
                      --$level;
                  }
  
                  if (0 === $level) {
                      return $currentIndex;
                  }
              }
  
              return null;
          }
  
          return $index + 1;
      }
docs: Returns the index of the last token that is part of the annotation at the given index.
  
  @param int $index
  
  @return null|int