code: private function sortElements(array $elements)
      {
          static $phpunitPositions = [
              'setupbeforeclass' => 1,
              'teardownafterclass' => 2,
              'setup' => 3,
              'teardown' => 4,
          ];
  
          foreach ($elements as &$element) {
              $type = $element['type'];
  
              if (\array_key_exists($type, self::$specialTypes)) {
                  if (isset($this->typePosition[$type])) {
                      $element['position'] = $this->typePosition[$type];
                      if ('phpunit' === $type) {
                          $element['position'] += $phpunitPositions[$element['name']];
                      }
  
                      continue;
                  }
  
                  $type = 'method';
              }
  
              if (\in_array($type, ['constant', 'property', 'method'], true)) {
                  $type .= '_'.$element['visibility'];
                  if ($element['static']) {
                      $type .= '_static';
                  }
              }
  
              $element['position'] = $this->typePosition[$type];
          }
          unset($element);
  
          usort($elements, function (array $a, array $b) {
              if ($a['position'] === $b['position']) {
                  return $this->sortGroupElements($a, $b);
              }
  
              return $a['position'] > $b['position'] ? 1 : -1;
          });
  
          return $elements;
      }
docs: @param array[] $elements
  
  @return array[]