Skip to content

Commit 025ae5e

Browse files
hs-lsongclaude
andcommitted
Remove hasUnknownFilter fallback, handle unknown filters inline
Unknown filters are now handled the same as disabled filters in AstFilterChain: set value to null and continue. This matches the non-chained behavior where null propagates through subsequent filters. The parse-time hasUnknownFilter check and buildUnoptimizedFromSpecs fallback are no longer needed and are removed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 42825ee commit 025ae5e

2 files changed

Lines changed: 2 additions & 54 deletions

File tree

src/main/java/com/hubspot/jinjava/el/ext/AstFilterChain.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,19 +89,8 @@ public Object eval(Bindings bindings, ELContext context) {
8989
continue;
9090
}
9191
if (filter == null) {
92-
interpreter.addError(
93-
new TemplateError(
94-
ErrorType.WARNING,
95-
ErrorReason.UNKNOWN,
96-
ErrorItem.FILTER,
97-
String.format("Unknown filter: %s", spec.getName()),
98-
spec.getName(),
99-
interpreter.getLineNumber(),
100-
-1,
101-
null
102-
)
103-
);
104-
return null;
92+
value = null;
93+
continue;
10594
}
10695

10796
Object[] args = evaluateFilterArgs(spec, bindings, context);

src/main/java/com/hubspot/jinjava/el/ext/ExtendedParser.java

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.google.common.collect.Sets;
2525
import com.hubspot.jinjava.JinjavaConfig;
2626
import com.hubspot.jinjava.LegacyOverrides;
27-
import com.hubspot.jinjava.interpret.DisabledException;
2827
import com.hubspot.jinjava.interpret.JinjavaInterpreter;
2928
import de.odysseus.el.tree.impl.Builder;
3029
import de.odysseus.el.tree.impl.Builder.Feature;
@@ -582,49 +581,9 @@ private AstNode parseFiltersAsChain(AstNode left) throws ScanException, ParseExc
582581
filterSpecs.add(new FilterSpec(filterName, filterParams));
583582
} while ("|".equals(getToken().getImage()));
584583

585-
if (hasUnknownFilter(filterSpecs)) {
586-
return buildUnoptimizedFromSpecs(left, filterSpecs);
587-
}
588584
return createAstFilterChain(left, filterSpecs);
589585
}
590586

591-
private boolean hasUnknownFilter(List<FilterSpec> filterSpecs) {
592-
return JinjavaInterpreter
593-
.getCurrentMaybe()
594-
.map(interp -> {
595-
for (FilterSpec spec : filterSpecs) {
596-
try {
597-
if (interp.getContext().getFilter(spec.getName()) == null) {
598-
return true;
599-
}
600-
} catch (DisabledException e) {
601-
return false;
602-
}
603-
}
604-
return false;
605-
})
606-
.orElse(false);
607-
}
608-
609-
private AstNode buildUnoptimizedFromSpecs(AstNode input, List<FilterSpec> filterSpecs) {
610-
AstNode v = input;
611-
for (FilterSpec spec : filterSpecs) {
612-
List<AstNode> filterParams = Lists.newArrayList(v, interpreter());
613-
if (spec.hasParams()) {
614-
for (int i = 0; i < spec.getParams().getCardinality(); i++) {
615-
filterParams.add(spec.getParams().getChild(i));
616-
}
617-
}
618-
AstProperty filterProperty = createAstDot(
619-
identifier(FILTER_PREFIX + spec.getName()),
620-
"filter",
621-
true
622-
);
623-
v = createAstMethod(filterProperty, createAstParameters(filterParams));
624-
}
625-
return v;
626-
}
627-
628587
protected AstNode parseFiltersAsNestedMethods(AstNode left)
629588
throws ScanException, ParseException {
630589
AstNode v = left;

0 commit comments

Comments
 (0)