diff --git a/src/main/java/com/hubspot/jinjava/tree/ExpressionNode.java b/src/main/java/com/hubspot/jinjava/tree/ExpressionNode.java index f1d6467d1..5693a2baf 100644 --- a/src/main/java/com/hubspot/jinjava/tree/ExpressionNode.java +++ b/src/main/java/com/hubspot/jinjava/tree/ExpressionNode.java @@ -43,7 +43,7 @@ public ExpressionNode(ExpressionStrategy expressionStrategy, ExpressionToken tok @Override public OutputNode render(JinjavaInterpreter interpreter) { - interpreter.getContext().setCurrentNode(this); + preProcess(interpreter); try { return expressionStrategy.interpretOutput(master, interpreter); } catch (DeferredValueException e) { diff --git a/src/main/java/com/hubspot/jinjava/tree/Node.java b/src/main/java/com/hubspot/jinjava/tree/Node.java index d97561b73..f05f50f50 100644 --- a/src/main/java/com/hubspot/jinjava/tree/Node.java +++ b/src/main/java/com/hubspot/jinjava/tree/Node.java @@ -15,6 +15,7 @@ **********************************************************************/ package com.hubspot.jinjava.tree; +import com.hubspot.jinjava.interpret.InterpretException; import com.hubspot.jinjava.interpret.JinjavaInterpreter; import com.hubspot.jinjava.tree.output.OutputNode; import com.hubspot.jinjava.tree.parse.Token; @@ -97,4 +98,19 @@ public String toTreeString(int level) { return t.toString(); } + + public void preProcess(JinjavaInterpreter interpreter) { + interpreter.getContext().setCurrentNode(this); + checkForInterrupt(); + } + + public final void checkForInterrupt() { + if (Thread.interrupted()) { + throw new InterpretException( + "Interrupt rendering " + getClass(), + master.getLineNumber(), + master.getStartPosition() + ); + } + } } diff --git a/src/main/java/com/hubspot/jinjava/tree/TagNode.java b/src/main/java/com/hubspot/jinjava/tree/TagNode.java index ca79672b3..1218631d2 100644 --- a/src/main/java/com/hubspot/jinjava/tree/TagNode.java +++ b/src/main/java/com/hubspot/jinjava/tree/TagNode.java @@ -44,13 +44,12 @@ public TagNode(Tag tag, TagToken token, TokenScannerSymbols symbols) { @Override public OutputNode render(JinjavaInterpreter interpreter) { - interpreter.getContext().setCurrentNode(this); + preProcess(interpreter); if ( interpreter.getContext().isValidationMode() && !tag.isRenderedInValidationMode() ) { return new RenderedOutputNode(""); } - try { if (interpreter.getConfig().getExecutionMode().useEagerParser()) { interpreter.getContext().checkNumberOfDeferredTokens(); diff --git a/src/main/java/com/hubspot/jinjava/tree/TextNode.java b/src/main/java/com/hubspot/jinjava/tree/TextNode.java index a67bd5cc1..4dee39892 100644 --- a/src/main/java/com/hubspot/jinjava/tree/TextNode.java +++ b/src/main/java/com/hubspot/jinjava/tree/TextNode.java @@ -32,7 +32,7 @@ public TextNode(TextToken token) { @Override public OutputNode render(JinjavaInterpreter interpreter) { - interpreter.getContext().setCurrentNode(this); + preProcess(interpreter); return new RenderedOutputNode( interpreter.getContext().isValidationMode() ? "" : master.output() );