{"record":{"id":"8010e8e9fbda7b96","repo":"languagetool-org/languagetool","slug":"filter-class-classname-must-implement-interfa","errorCode":null,"errorMessage":"Filter class '${className}' must implement interface ${RegexRuleFilter.class.getSimpleName()}","messagePattern":"Filter class '(.+?)' must implement interface (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"languagetool-core/src/main/java/org/languagetool/rules/patterns/RegexRuleFilterCreator.java","lineNumber":51,"sourceCode":"   */\n  public RegexRuleFilter getFilter(String className) {\n    try {\n      Class<?> aClass = JLanguageTool.getClassBroker().forName(className);\n      Constructor<?>[] constructors = aClass.getConstructors();\n      if (constructors.length != 1) {\n        throw new RuntimeException(\"Constructor of filter class '\"\n                + className + \"' must have exactly one constructor, but it has \" + constructors.length);\n      }\n      Constructor<?> constructor = constructors[0];\n      try {\n        if (constructor.getParameterTypes().length != 0) {\n          throw new RuntimeException(\"Constructor of filter class '\" + className + \"' must not have arguments: \" + constructor);\n        }\n        Object filter = constructor.newInstance();\n        if (filter instanceof RegexRuleFilter) {\n          return (RegexRuleFilter) filter;\n        } else {\n          throw new RuntimeException(\"Filter class '\" + className + \"' must implement interface \" + RegexRuleFilter.class.getSimpleName());\n        }\n      } catch (Exception e) {\n        throw new RuntimeException(\"Could not create filter class using constructor \" + constructor, e);\n      }\n    } catch (ClassNotFoundException e) {\n      throw new RuntimeException(\"Could not find filter class: '\"\n              + className + \"' - make sure to use a fully qualified class name like 'org.languagetool.rules.MyFilter'\");\n    }\n  }\n \n}\n","sourceCodeStart":33,"sourceCodeEnd":63,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-core/src/main/java/org/languagetool/rules/patterns/RegexRuleFilterCreator.java#L33-L63","documentation":"Type check in RegexRuleFilterCreator.getFilter: the class named in the rule's <filter> element instantiated successfully, but the resulting object does not implement RegexRuleFilter, so it cannot be used as a rule filter. The input at fault is the class name given in the filter attribute.","triggerScenarios":"Thrown at languagetool-core/src/main/java/org/languagetool/rules/patterns/RegexRuleFilterCreator.java:51 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Make the class implement org.languagetool.rules.patterns.RegexRuleFilter and override acceptRuleMatch","Point the <filter class=\"...\"> attribute at an existing class that already implements RegexRuleFilter"],"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"}