HubSpot / jinjava

Jinja template engine for Java
Apache License 2.0
700 stars 169 forks source link

IncludeTag does not respect "ignore missing" #833

Open aabeling opened 2 years ago

aabeling commented 2 years ago

Please see my pull request #832.

someth2say commented 1 year ago

Just in case it can help anyone, I workaround this limitation by registering a new include tag that ignores the exception:

    private static class IncludeTag extends com.hubspot.jinjava.lib.tag.IncludeTag implements Tag {

        @Override
        public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) {
            try {
                return super.interpret(tagNode,interpreter);
            } catch (InterpretException e) {
                if ( ignoreMissing(tagNode) && e.getCause() instanceof com.hubspot.jinjava.loader.ResourceNotFoundException) {
                    return "";
                }
                throw e;
            }
        }

        private boolean ignoreMissing(TagNode tagNode) {
            HelperStringTokenizer helper = new HelperStringTokenizer(tagNode.getHelpers());
            List<String> all = helper.allTokens();
            return (all.contains("ignore") && all.indexOf("missing") == all.indexOf("ignore") + 1);
        }
    }