code: @NotNull
    List<RuleMatch> getFilteredExtensionMatches(List<RuleMatch> matches, List<RemoteRuleMatch> extensionMatches) {
      List<RuleMatch> filteredExtMatches = new ArrayList<>();
      for (RemoteRuleMatch extensionMatch : extensionMatches) {
        if (!extensionMatch.isTouchedByOneOf(matches)) {
          AnalyzedSentence sentence = new AnalyzedSentence(new AnalyzedTokenReadings[]{});
          HiddenRule hiddenRule = new HiddenRule(extensionMatch.getLocQualityIssueType().orElse(null), extensionMatch.estimatedContextForSureMatch());
          RuleMatch hiddenRuleMatch = new RuleMatch(hiddenRule, sentence, extensionMatch.getErrorOffset(),
                  extensionMatch.getErrorOffset()+extensionMatch.getErrorLength(), "(hidden message)");
          filteredExtMatches.add(hiddenRuleMatch);
        }
      }
      return filteredExtMatches;
    }
docs: Filter {@code extensionMatches} so that only those matches are left that don't cover or touch one of the {@code matches}.