code: private function parseDeclaration(Tokens $tokens, $startIndex, $endIndex)
      {
          $fullName = $shortName = '';
          $aliased = false;
  
          $type = NamespaceUseAnalysis::TYPE_CLASS;
          for ($i = $startIndex; $i <= $endIndex; ++$i) {
              $token = $tokens[$i];
              if ($token->equals(',') || $token->isGivenKind(CT::T_GROUP_IMPORT_BRACE_CLOSE)) {
                  // do not touch group use declarations until the logic of this is added (for example: `use some\a\{ClassD};`)
                  // ignore multiple use statements that should be split into few separate statements (for example: `use BarB, BarC as C;`)
                  return null;
              }
  
              if ($token->isGivenKind(CT::T_FUNCTION_IMPORT)) {
                  $type = NamespaceUseAnalysis::TYPE_FUNCTION;
              } elseif ($token->isGivenKind(CT::T_CONST_IMPORT)) {
                  $type = NamespaceUseAnalysis::TYPE_CONSTANT;
              }
  
              if ($token->isWhitespace() || $token->isComment() || $token->isGivenKind(T_USE)) {
                  continue;
              }
  
              if ($token->isGivenKind(T_STRING)) {
                  $shortName = $token->getContent();
                  if (!$aliased) {
                      $fullName .= $shortName;
                  }
              } elseif ($token->isGivenKind(T_NS_SEPARATOR)) {
                  $fullName .= $token->getContent();
              } elseif ($token->isGivenKind(T_AS)) {
                  $aliased = true;
              }
          }
  
          return new NamespaceUseAnalysis(
              trim($fullName),
              $shortName,
              $aliased,
              $startIndex,
              $endIndex,
              $type
          );
      }
docs: @param Tokens $tokens
  @param int    $startIndex
  @param int    $endIndex
  
  @return null|NamespaceUseAnalysis