{"record":{"id":"0261ad620faafc11","repo":"languagetool-org/languagetool","slug":"could-not-find-month-monthstr","errorCode":null,"errorMessage":"Could not find month '\" + monthStr + \"'","messagePattern":"Could not find month '\" \\+ monthStr \\+ \"'","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"languagetool-language-modules/eo/src/main/java/org/languagetool/rules/eo/DateCheckFilter.java","lineNumber":121,"sourceCode":"  }\n\n  @SuppressWarnings({\"ControlFlowStatementWithoutBraces\", \"MagicNumber\"})\n  @Override\n  protected int getMonth(String monthStr) {\n    String mon = monthStr.toLowerCase();\n    if (mon.startsWith(\"jan\")) return 1;\n    if (mon.startsWith(\"feb\")) return 2;\n    if (mon.startsWith(\"mar\")) return 3;\n    if (mon.startsWith(\"apr\")) return 4;\n    if (mon.startsWith(\"maj\")) return 5;\n    if (mon.startsWith(\"jun\")) return 6;\n    if (mon.startsWith(\"jul\")) return 7;\n    if (mon.startsWith(\"aŭg\")) return 8;\n    if (mon.startsWith(\"sep\")) return 9;\n    if (mon.startsWith(\"okt\")) return 10;\n    if (mon.startsWith(\"nov\")) return 11;\n    if (mon.startsWith(\"dec\")) return 12;\n    throw new RuntimeException(\"Could not find month '\" + monthStr + \"'\");\n  }\n}\n","sourceCodeStart":103,"sourceCodeEnd":124,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-language-modules/eo/src/main/java/org/languagetool/rules/eo/DateCheckFilter.java#L103-L124","documentation":"The Esperanto DateCheckFilter maps Esperanto month-name prefixes ('jan'..'dec', including x- and h-transliterations) to month numbers. getMonth throws a RuntimeException when the month string does not start with any recognized Esperanto month prefix.","triggerScenarios":"A date-check rule passes a 'month' token whose lowercase text does not begin with a recognized Esperanto month prefix (jan, feb, mar, maj, jun, jul, aŭg/aug/jul variants, sep, okt, nov, dec).","commonSituations":"Rule patterns that capture non-month tokens; misspelled months; transliteration variants (aug/agŭ, dec) not covered; tests exercising unknown month strings.","solutions":["Check the month string for typos and ensure it is a real Esperanto month name.","If a valid spelling variant is missing, extend getMonth with the corresponding startsWith case.","Constrain the rule pattern so only month tokens are passed to the filter."],"exampleFix":"// before\ngetMonth(\"januaro\"); // works, prefix 'jan'\ngetMonth(\"Mero\"); // throws\n// after\ngetMonth(\"mar\"); // returns 3","handlingStrategy":"validation","validationCode":"List<String> prefixes = List.of(\"jan\",\"feb\",\"mar\",\"apr\",\"maj\",\"jun\",\"jul\",\"aŭg\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\");\nString mon = monthStr.toLowerCase();\nif (prefixes.stream().noneMatch(mon::startsWith)) throw new IllegalArgumentException(\"Not an Esperanto month: \" + monthStr);","typeGuard":null,"tryCatchPattern":"try {\n  int month = filter.getMonth(monthStr);\n} catch (RuntimeException e) {\n  if (e.getMessage().startsWith(\"Could not find month\")) { /* skip or log invalid month token */ }\n}","preventionTips":["Constrain date-rule patterns to real Esperanto month names","Normalize case and diacritics/transliterations before calling getMonth","Unit-test month mapping for all 12 months including variants"],"tags":["languagetool","esperanto","date-filter","unrecognized-input"],"backgroundTag":"invalid-enum-value","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"}