languagetool-org/languagetool · error · RuntimeException

Filter class '${className}' must implement interface ${Regex

Error message

Filter class '${className}' must implement interface ${RegexRuleFilter.class.getSimpleName()}

What it means

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.

Source

Thrown at languagetool-core/src/main/java/org/languagetool/rules/patterns/RegexRuleFilterCreator.java:51

   */
  public RegexRuleFilter getFilter(String className) {
    try {
      Class<?> aClass = JLanguageTool.getClassBroker().forName(className);
      Constructor<?>[] constructors = aClass.getConstructors();
      if (constructors.length != 1) {
        throw new RuntimeException("Constructor of filter class '"
                + className + "' must have exactly one constructor, but it has " + constructors.length);
      }
      Constructor<?> constructor = constructors[0];
      try {
        if (constructor.getParameterTypes().length != 0) {
          throw new RuntimeException("Constructor of filter class '" + className + "' must not have arguments: " + constructor);
        }
        Object filter = constructor.newInstance();
        if (filter instanceof RegexRuleFilter) {
          return (RegexRuleFilter) filter;
        } else {
          throw new RuntimeException("Filter class '" + className + "' must implement interface " + RegexRuleFilter.class.getSimpleName());
        }
      } catch (Exception e) {
        throw new RuntimeException("Could not create filter class using constructor " + constructor, e);
      }
    } catch (ClassNotFoundException e) {
      throw new RuntimeException("Could not find filter class: '"
              + className + "' - make sure to use a fully qualified class name like 'org.languagetool.rules.MyFilter'");
    }
  }
 
}

View on GitHub (pinned to 2e990059ce)

Solutions

  1. Make the class implement org.languagetool.rules.patterns.RegexRuleFilter and override acceptRuleMatch
  2. Point the <filter class="..."> attribute at an existing class that already implements RegexRuleFilter
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at languagetool-core/src/main/java/org/languagetool/rules/patterns/RegexRuleFilterCreator.java:51 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of languagetool-org/languagetool@2e990059ce (2026-09-06). Data as JSON: /api/errors/8010e8e9fbda7b96. Report an issue: GitHub.