languagetool-org/languagetool · error
Language
Error message
Language
What it means
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.
Source
Thrown at languagetool-dev/src/main/java/org/languagetool/dev/bigdata/ProhibitedCompoundRuleEvaluator.java:70
* @since 4.3
* @author Fabian Richter
*/
class ProhibitedCompoundRuleEvaluator {
// TODO maybe remove
private static final List<Long> EVAL_FACTORS = Arrays.asList(10L);//, 100L, 1_000L, 10_000L, 100_000L, 1_000_000L, 10_000_000L);
private static final int MAX_SENTENCES = 10;//00;
private final Language language;
private final ProhibitedCompoundRule rule;
private final Map<Long, RuleEvalValues> evalValues = new HashMap<>();
private boolean verbose = true;
ProhibitedCompoundRuleEvaluator(Language language, LanguageModel languageModel) {
this.language = language;
try {
List<Rule> rules = language.getRelevantLanguageModelRules(JLanguageTool.getMessageBundle(), languageModel, null);
if (rules == null) {
throw new RuntimeException("Language " + language + " doesn't seem to support a language model");
}
ProhibitedCompoundRule foundRule = null;
for (Rule rule : rules) {
if (rule.getId().equals(ProhibitedCompoundRule.RULE_ID)) {
foundRule = (ProhibitedCompoundRule) rule;
break;
}
}
if (foundRule == null) {
throw new RuntimeException("Language " + language + " has no language model rule with id " + ProhibitedCompoundRule.RULE_ID);
} else {
this.rule = foundRule;
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
View on GitHub (pinned to 2e990059ce)
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
Example fix
// before new ProhibitedCompoundRuleEvaluator(new English(), languageModel); // no LM rules -> throws // after new ProhibitedCompoundRuleEvaluator(new German(), languageModel); // German has LM rules
Defensive patterns
Strategy: validation
Validate before calling
List<Rule> rules = language.getRelevantLanguageModelRules(JLanguageTool.getMessageBundle(), languageModel, null);
if (rules == null || rules.isEmpty()) {
throw new IllegalStateException("Language " + language + " has no language-model rules");
} Try / catch
try {
new ProhibitedCompoundRuleEvaluator(language, languageModel);
} catch (RuntimeException e) {
if (e.getMessage().contains("doesn't seem to support a language model")) {
System.err.println("Skipping " + language + ": no LM support");
}
} Prevention
- Only run the evaluator for languages documented to support language models
- Check getRelevantLanguageModelRules != null before constructing
- Filter target-language lists before batch evaluation
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- List of language models is empty
- Language
- No rules are active. Please make sure your rule ids (<option
- Could not load language model capable rules.
- suppressMisspelledMatch must be a valid regex
AI-assisted analysis of languagetool-org/languagetool@2e990059ce (2026-09-06).
Data as JSON: /api/errors/7e08d1b2af710bc2.
Report an issue: GitHub.