@Override
  void checkSwitchLabelValues(@NotNull Consumer<? super HighlightInfo.Builder> errorSink) {
    PsiCodeBlock body = myBlock.getBody();
    if (body == null) return;
    MultiMap<Object, PsiElement> elementsToCheckDuplicates = new MultiMap<>();
    List<List<PsiSwitchLabelStatementBase>> elementsToCheckFallThroughLegality = new SmartList<>();
    List<PsiElement> elementsToCheckDominance = new ArrayList<>();
    List<PsiCaseLabelElement> elementsToCheckCompleteness = new ArrayList<>();
    int switchBlockGroupCounter = 0;
    boolean reported = false;
    for (PsiStatement st : body.getStatements()) {
      if (!(st instanceof PsiSwitchLabelStatementBase labelStatement)) continue;
      fillElementsToCheckFallThroughLegality(elementsToCheckFallThroughLegality, labelStatement, switchBlockGroupCounter);
      if (!(PsiTreeUtil.skipWhitespacesAndCommentsForward(labelStatement) instanceof PsiSwitchLabelStatement)) {
        switchBlockGroupCounter++;
      }
      if (labelStatement.isDefaultCase()) {
        PsiElement defaultKeyword = Objects.requireNonNull(labelStatement.getFirstChild());
        elementsToCheckDuplicates.putValue(myDefaultValue, defaultKeyword);
        elementsToCheckDominance.add(defaultKeyword);
        continue;
      }
      PsiCaseLabelElementList labelElementList = labelStatement.getCaseLabelElementList();
      if (labelElementList == null) continue;
      for (PsiCaseLabelElement labelElement : labelElementList.getElements()) {
        if (checkLabelAndSelectorCompatibility(labelElement, errorSink)) {
          reported = true;
          continue;
        }
        fillElementsToCheckDuplicates(elementsToCheckDuplicates, labelElement);
        fillElementsToCheckDominance(elementsToCheckDominance, labelElement);
        elementsToCheckCompleteness.add(labelElement);
      }
    }

    if (checkDuplicates(elementsToCheckDuplicates, errorSink)) {
      return;
    }
    if (reported) {
      return;
    }
    Set<PsiElement> alreadyFallThroughElements = new HashSet<>();
    reported = checkFallThroughFromPatternWithSeveralLabels(elementsToCheckFallThroughLegality, alreadyFallThroughElements, errorSink);
    reported |= checkFallThroughToPatternPrecedingCompleteNormally(elementsToCheckFallThroughLegality, alreadyFallThroughElements, errorSink);
    if (reported) {
      return;
    }

    if (checkDominance(elementsToCheckDominance, errorSink)) {
      return;
    }

    if (needToCheckCompleteness(elementsToCheckCompleteness)) {
      checkCompleteness(elementsToCheckCompleteness, true, errorSink);
    }
  }
@Override
  void checkSwitchLabelValues(@NotNull Consumer<? super HighlightInfo.Builder> errorSink)