Skip to content

Commit c39abaf

Browse files
committed
Resolve the templateFile before the include tag is interpreted in case
the variable changes/becomes deferred
1 parent 6c62e7e commit c39abaf

2 files changed

Lines changed: 26 additions & 29 deletions

File tree

src/main/java/com/hubspot/jinjava/lib/tag/IncludeTag.java

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,25 +60,7 @@ public class IncludeTag implements Tag {
6060

6161
@Override
6262
public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) {
63-
HelperStringTokenizer helper = new HelperStringTokenizer(tagNode.getHelpers());
64-
if (!helper.hasNext()) {
65-
throw new TemplateSyntaxException(
66-
tagNode.getMaster().getImage(),
67-
"Tag 'include' expects template path",
68-
tagNode.getLineNumber(),
69-
tagNode.getStartPosition()
70-
);
71-
}
72-
73-
String path = StringUtils.trimToEmpty(helper.next());
74-
String templateFile = interpreter.resolveString(
75-
path,
76-
tagNode.getLineNumber(),
77-
tagNode.getStartPosition()
78-
);
79-
templateFile = interpreter.resolveResourceLocation(templateFile);
80-
81-
final String finalTemplateFile = templateFile;
63+
final String finalTemplateFile = resolveTemplateFile(tagNode, interpreter);
8264
final TagNode finalTagNode = tagNode;
8365
try (
8466
AutoCloseableImpl<Result<String, TagCycleException>> includeStackWrapper =
@@ -165,6 +147,30 @@ public String interpret(TagNode tagNode, JinjavaInterpreter interpreter) {
165147
}
166148
}
167149

150+
public static String resolveTemplateFile(
151+
TagNode tagNode,
152+
JinjavaInterpreter interpreter
153+
) {
154+
HelperStringTokenizer helper = new HelperStringTokenizer(tagNode.getHelpers());
155+
if (!helper.hasNext()) {
156+
throw new TemplateSyntaxException(
157+
tagNode.getMaster().getImage(),
158+
"Tag 'include' expects template path",
159+
tagNode.getLineNumber(),
160+
tagNode.getStartPosition()
161+
);
162+
}
163+
164+
String path = StringUtils.trimToEmpty(helper.next());
165+
String templateFile = interpreter.resolveString(
166+
path,
167+
tagNode.getLineNumber(),
168+
tagNode.getStartPosition()
169+
);
170+
templateFile = interpreter.resolveResourceLocation(templateFile);
171+
return templateFile;
172+
}
173+
168174
@Override
169175
public String getEndTagName() {
170176
return null;

src/main/java/com/hubspot/jinjava/lib/tag/eager/EagerIncludeTag.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import com.hubspot.jinjava.lib.tag.IncludeTag;
66
import com.hubspot.jinjava.tree.TagNode;
77
import com.hubspot.jinjava.util.EagerReconstructionUtils;
8-
import com.hubspot.jinjava.util.HelperStringTokenizer;
9-
import org.apache.commons.lang3.StringUtils;
108

119
@Beta
1210
public class EagerIncludeTag extends EagerTagDecorator<IncludeTag> {
@@ -17,17 +15,10 @@ public EagerIncludeTag(IncludeTag tag) {
1715

1816
@Override
1917
public String innerInterpret(TagNode tagNode, JinjavaInterpreter interpreter) {
18+
String templateFile = IncludeTag.resolveTemplateFile(tagNode, interpreter);
2019
int numDeferredTokensStart = interpreter.getContext().getDeferredTokens().size();
2120
String output = super.innerInterpret(tagNode, interpreter);
2221
if (interpreter.getContext().getDeferredTokens().size() > numDeferredTokensStart) {
23-
HelperStringTokenizer helper = new HelperStringTokenizer(tagNode.getHelpers());
24-
String path = StringUtils.trimToEmpty(helper.next());
25-
String templateFile = interpreter.resolveString(
26-
path,
27-
tagNode.getLineNumber(),
28-
tagNode.getStartPosition()
29-
);
30-
templateFile = interpreter.resolveResourceLocation(templateFile);
3122
return EagerReconstructionUtils.wrapPathAroundText(
3223
output,
3324
templateFile,

0 commit comments

Comments
 (0)