class MultiThreadedJLanguageToolLo extends MultiThreadedJLanguageTool {

    public MultiThreadedJLanguageToolLo(Language language, Language motherTongue, UserConfig userConfig) {
      super(language, motherTongue, userConfig);
    }

    public List<RuleMatch> check(String text, ParagraphHandling paraMode, Mode mode, 
        int nFPara, SingleDocument document, SwJLanguageTool lt, @NotNull Set<ToneTag> toneTags) throws IOException {

      List<AnalyzedSentence> analyzedSentences;
      List<String> sentences;
      if (nFPara < 0) {
        analyzedSentences = this.analyzeText(text);
        sentences = new ArrayList<>();
        for (AnalyzedSentence analyzedSentence : analyzedSentences) {
          sentences.add(analyzedSentence.getText());
        }
      } else {
        AnalysedText analysedText = document.getDocumentCache().getOrCreateAnalyzedParagraph(nFPara, lt);
        analyzedSentences = analysedText.analyzedSentences;
        sentences = analysedText.sentences;
        text = analysedText.text;
      }
      return checkInternal(new AnnotatedTextBuilder().addText(text).build(), paraMode, null, mode, 
          Level.PICKY, toneTags, null, sentences, analyzedSentences).getRuleMatches();
    }

    public List<RuleMatch> check(TextParagraph from, TextParagraph to, ParagraphHandling paraMode, Mode mode, 
        SingleDocument document, SwJLanguageTool lt, @NotNull Set<ToneTag> toneTags) throws IOException {<FILL_FUNCTION_BODY>}

  }

      AnalysedText analysedText = document.getDocumentCache().getAnalyzedParagraphs(from, to, lt);
      if (analysedText == null) {
        return null;
      }
      List<AnalyzedSentence> analyzedSentences = analysedText.analyzedSentences;
      List<String> sentences = analysedText.sentences;
      String text = analysedText.text;
      return checkInternal(new AnnotatedTextBuilder().addText(text).build(), paraMode, null, mode, 
          Level.PICKY, toneTags, null, sentences, analyzedSentences).getRuleMatches();
    
<no_super_class>