{"record":{"id":"7e08d1b2af710bc2","repo":"languagetool-org/languagetool","slug":"language-7e08d1","errorCode":null,"errorMessage":"Language ","messagePattern":"Language ","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"languagetool-dev/src/main/java/org/languagetool/dev/bigdata/ProhibitedCompoundRuleEvaluator.java","lineNumber":70,"sourceCode":" * @since 4.3\n * @author Fabian Richter\n */\nclass ProhibitedCompoundRuleEvaluator {\n  // TODO maybe remove\n  private static final List<Long> EVAL_FACTORS = Arrays.asList(10L);//, 100L, 1_000L, 10_000L, 100_000L, 1_000_000L, 10_000_000L);\n  private static final int MAX_SENTENCES = 10;//00;\n\n  private final Language language;\n  private final ProhibitedCompoundRule rule;\n  private final Map<Long, RuleEvalValues> evalValues = new HashMap<>();\n  private boolean verbose = true;\n\n  ProhibitedCompoundRuleEvaluator(Language language, LanguageModel languageModel) {\n    this.language = language;\n    try {\n      List<Rule> rules = language.getRelevantLanguageModelRules(JLanguageTool.getMessageBundle(), languageModel, null);\n      if (rules == null) {\n        throw new RuntimeException(\"Language \" + language + \" doesn't seem to support a language model\");\n      }\n      ProhibitedCompoundRule foundRule = null;\n      for (Rule rule : rules) {\n        if (rule.getId().equals(ProhibitedCompoundRule.RULE_ID)) {\n          foundRule = (ProhibitedCompoundRule) rule;\n          break;\n        }\n      }\n      if (foundRule == null) {\n        throw new RuntimeException(\"Language \" + language + \" has no language model rule with id \" + ProhibitedCompoundRule.RULE_ID);\n      } else {\n        this.rule = foundRule;\n      }\n    } catch (IOException e) {\n      throw new RuntimeException(e);\n    }\n  }\n","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-dev/src/main/java/org/languagetool/dev/bigdata/ProhibitedCompoundRuleEvaluator.java#L52-L88","documentation":"ProhibitedCompoundRuleEvaluator's constructor loads the language's language-model rules and throws when getRelevantLanguageModelRules returns null, meaning the language has no rules backed by an n-gram language model. Evaluating prohibited-compound rules for that language is impossible without model-backed rules.","triggerScenarios":"Constructing the evaluator with a language whose getRelevantLanguageModelRules returns null (no language-model rules registered), typically because no languageModel support is defined for that language.","commonSituations":"Running the evaluator for a language that hasn't implemented language-model rules; using a plain Language variant instead of one configured for n-gram rules.","solutions":["Choose a language that supports language-model rules (e.g. German) when running this evaluator","Implement/enable getRelevantLanguageModelRules for the target language","Skip evaluation for languages without language model support in your batch script"],"exampleFix":"// before\nnew ProhibitedCompoundRuleEvaluator(new English(), languageModel); // no LM rules -> throws\n// after\nnew ProhibitedCompoundRuleEvaluator(new German(), languageModel); // German has LM rules","handlingStrategy":"validation","validationCode":"List<Rule> rules = language.getRelevantLanguageModelRules(JLanguageTool.getMessageBundle(), languageModel, null);\nif (rules == null || rules.isEmpty()) {\n  throw new IllegalStateException(\"Language \" + language + \" has no language-model rules\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  new ProhibitedCompoundRuleEvaluator(language, languageModel);\n} catch (RuntimeException e) {\n  if (e.getMessage().contains(\"doesn't seem to support a language model\")) {\n    System.err.println(\"Skipping \" + language + \": no LM support\");\n  }\n}","preventionTips":["Only run the evaluator for languages documented to support language models","Check getRelevantLanguageModelRules != null before constructing","Filter target-language lists before batch evaluation"],"tags":["language-model","unsupported","configuration"],"backgroundTag":"unsupported-operation","analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}