{"record":{"id":"f35dd983cba4422f","repo":"languagetool-org/languagetool","slug":"minoccurrence-must-maxoccurrence-minoccurrence","errorCode":null,"errorMessage":"minOccurrence must <= maxOccurrence: minOccurrence ${minOccurrence}, maxOccurrence ${maxOccurrence}","messagePattern":"minOccurrence must <= maxOccurrence: minOccurrence (.+?), maxOccurrence (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"languagetool-core/src/main/java/org/languagetool/rules/patterns/PatternTokenBuilder.java","lineNumber":163,"sourceCode":"   * given token actually is a baseform.\n   * @since 3.8 \n   */\n  public PatternTokenBuilder matchInflectedForms() {\n    matchInflectedForms = true;\n    return this;\n  }\n  \n  public PatternToken build() {\n    PatternToken patternToken;\n    patternToken = new PatternToken(token, caseSensitive, regexp, matchInflectedForms);\n    if (posTag != null) {\n      patternToken.setPosToken(new PatternToken.PosToken(posTag, regexp, false));\n    }\n    if (isWhiteSpaceSet) {\n      patternToken.setWhitespaceBefore(isWhiteSpaceBefore);\n    }\n    if (maxOccurrence < minOccurrence) {\n      throw new IllegalArgumentException(\"minOccurrence must <= maxOccurrence: minOccurrence \" + minOccurrence + \", maxOccurrence \" + maxOccurrence);\n    }\n    if (tokenException != null) {\n      patternToken.setStringPosException(tokenException, true, false, false, false, false, null, false, false, false);\n    }\n    patternToken.setMinOccurrence(minOccurrence);\n    patternToken.setMaxOccurrence(maxOccurrence);\n    patternToken.setNegation(negation);\n    patternToken.setSkipNext(skip);\n    patternToken.setInsideMarker(marker);\n    return patternToken;\n  }\n}\n","sourceCodeStart":145,"sourceCodeEnd":176,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-core/src/main/java/org/languagetool/rules/patterns/PatternTokenBuilder.java#L145-L176","documentation":"Builder consistency check fired when PatternTokenBuilder.build() assembles the PatternToken: the previously set minOccurrence exceeds maxOccurrence, which is impossible for a range quantifier. It means the chain of builder calls (e.g. minOccurrence(n) followed by maxOccurrence(m) with m < n) requested an empty occurrence range.","triggerScenarios":"Thrown at languagetool-core/src/main/java/org/languagetool/rules/patterns/PatternTokenBuilder.java:163 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set maxOccurrence to a value greater than or equal to minOccurrence before calling build()","Review the order of minOccurrence()/maxOccurrence() calls in the builder chain to make sure the last call does not shrink the range below the minimum","If the token is meant to be optional, use minOccurrence(0) with a suitable maxOccurrence instead of lowering maxOccurrence"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}