{"record":{"id":"7edc8b322169f9ea","repo":"elastic/elasticsearch","slug":"token-filter-filtername-refers-to-itself-eith","errorCode":null,"errorMessage":"Token filter [{filterName}] refers to itself, either directly or via a cycle of filters {expansionPath}","messagePattern":"Token filter \\[(.+?)\\] refers to itself, either directly or via a cycle of filters (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/ReferringFilterResolver.java","lineNumber":56,"sourceCode":"    public TokenFilterFactory apply(String name) {\n        return delegate.apply(name);\n    }\n\n    /**\n     * Records that the referring filter {@code filterName} is about to expand the filters it refers\n     * to, returning a resolver to use for that expansion. Throws {@link IllegalArgumentException} if\n     * {@code filterName} is already being expanded higher up the chain, which indicates a reference\n     * cycle.\n     *\n     * @param filterName the name of the referring token filter (e.g. a {@code multiplexer} or\n     *                   {@code condition} filter) that is about to rewrite its referenced filters\n     * @param allFilters the {@code allFilters} lookup received by the referring filter, which may\n     *                   itself be a {@link ReferringFilterResolver} created by an ancestor\n     */\n    static ReferringFilterResolver enter(String filterName, Function<String, TokenFilterFactory> allFilters) {\n        if (allFilters instanceof ReferringFilterResolver resolver) {\n            if (resolver.expansionPath.contains(filterName)) {\n                throw new IllegalArgumentException(\n                    \"Token filter [\"\n                        + filterName\n                        + \"] refers to itself, either directly or via a cycle of filters \"\n                        + resolver.expansionPath\n                );\n            }\n            Set<String> nextPath = new LinkedHashSet<>(resolver.expansionPath);\n            nextPath.add(filterName);\n            return new ReferringFilterResolver(resolver.delegate, nextPath);\n        }\n        Set<String> path = new LinkedHashSet<>();\n        path.add(filterName);\n        return new ReferringFilterResolver(allFilters, path);\n    }\n}\n","sourceCodeStart":38,"sourceCodeEnd":72,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/ReferringFilterResolver.java#L38-L72","documentation":"Error \"Token filter [{filterName}] refers to itself, either directly or via a cycle of filters {expansionPath}\" thrown in elastic/elasticsearch.","triggerScenarios":"Thrown at modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/ReferringFilterResolver.java:56 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-12T12:31:55.035Z"}