Skip to content

Commit 860e92f

Browse files
committed
Refactor executeInChildContext related logic to separate class
1 parent 7d52488 commit 860e92f

13 files changed

Lines changed: 558 additions & 470 deletions

src/main/java/com/hubspot/jinjava/lib/expression/EagerExpressionStrategy.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
import com.hubspot.jinjava.lib.tag.eager.EagerExecutionResult;
1111
import com.hubspot.jinjava.tree.output.RenderedOutputNode;
1212
import com.hubspot.jinjava.tree.parse.ExpressionToken;
13+
import com.hubspot.jinjava.util.EagerContextWatcher;
1314
import com.hubspot.jinjava.util.EagerExpressionResolver;
1415
import com.hubspot.jinjava.util.EagerReconstructionUtils;
15-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1616
import com.hubspot.jinjava.util.Logging;
1717
import java.util.Objects;
1818
import java.util.stream.Collectors;
@@ -34,12 +34,12 @@ private String eagerResolveExpression(
3434
JinjavaInterpreter interpreter
3535
) {
3636
interpreter.getContext().checkNumberOfDeferredTokens();
37-
EagerExecutionResult eagerExecutionResult = EagerReconstructionUtils.executeInChildContext(
37+
EagerExecutionResult eagerExecutionResult = EagerContextWatcher.executeInChildContext(
3838
eagerInterpreter ->
3939
EagerExpressionResolver.resolveExpression(master.getExpr(), interpreter),
4040
interpreter,
41-
EagerChildContextConfig
42-
.newBuilder()
41+
EagerContextWatcher
42+
.EagerChildContextConfig.newBuilder()
4343
.withTakeNewValue(true)
4444
.withPartialMacroEvaluation(
4545
interpreter.getConfig().isNestedInterpretationEnabled()

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
import com.hubspot.jinjava.tree.Node;
88
import com.hubspot.jinjava.tree.TagNode;
99
import com.hubspot.jinjava.tree.parse.TagToken;
10+
import com.hubspot.jinjava.util.EagerContextWatcher;
1011
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult;
1112
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult.ResolutionState;
1213
import com.hubspot.jinjava.util.EagerReconstructionUtils;
13-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1414
import com.hubspot.jinjava.util.LengthLimitingStringJoiner;
1515
import java.util.Collections;
1616
import java.util.Optional;
@@ -31,7 +31,7 @@ protected EagerExecutionResult getEagerExecutionResult(
3131
String expression,
3232
JinjavaInterpreter interpreter
3333
) {
34-
EagerExecutionResult result = EagerReconstructionUtils.executeInChildContext(
34+
EagerExecutionResult result = EagerContextWatcher.executeInChildContext(
3535
eagerInterpreter ->
3636
EagerExpressionResult.fromSupplier(
3737
() -> {
@@ -44,7 +44,10 @@ protected EagerExecutionResult getEagerExecutionResult(
4444
eagerInterpreter
4545
),
4646
interpreter,
47-
EagerChildContextConfig.newBuilder().withTakeNewValue(true).build()
47+
EagerContextWatcher
48+
.EagerChildContextConfig.newBuilder()
49+
.withTakeNewValue(true)
50+
.build()
4851
);
4952
if (result.getResult().getResolutionState() == ResolutionState.NONE) {
5053
throw new DeferredValueException(result.getResult().toString());

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
import com.hubspot.jinjava.tree.TagNode;
1313
import com.hubspot.jinjava.tree.parse.ExpressionToken;
1414
import com.hubspot.jinjava.tree.parse.TagToken;
15+
import com.hubspot.jinjava.util.EagerContextWatcher;
1516
import com.hubspot.jinjava.util.EagerExpressionResolver;
1617
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult;
1718
import com.hubspot.jinjava.util.EagerReconstructionUtils;
18-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1919
import com.hubspot.jinjava.util.LengthLimitingStringJoiner;
2020
import java.util.LinkedHashMap;
2121
import java.util.stream.Collectors;
@@ -49,15 +49,15 @@ public String eagerInterpret(
4949
interpreter.getPosition()
5050
);
5151
interpreter.getContext().addGlobalMacro(caller);
52-
EagerExecutionResult eagerExecutionResult = EagerReconstructionUtils.executeInChildContext(
52+
EagerExecutionResult eagerExecutionResult = EagerContextWatcher.executeInChildContext(
5353
eagerInterpreter ->
5454
EagerExpressionResolver.resolveExpression(
5555
tagNode.getHelpers().trim(),
5656
interpreter
5757
),
5858
interpreter,
59-
EagerChildContextConfig
60-
.newBuilder()
59+
EagerContextWatcher
60+
.EagerChildContextConfig.newBuilder()
6161
.withTakeNewValue(true)
6262
.withPartialMacroEvaluation(
6363
interpreter.getConfig().isNestedInterpretationEnabled()
@@ -130,15 +130,15 @@ public String eagerInterpret(
130130
interpreter.getContext().setDynamicVariableResolver(s -> DeferredValue.instance());
131131
if (!tagNode.getChildren().isEmpty()) {
132132
result.append(
133-
EagerReconstructionUtils
133+
EagerContextWatcher
134134
.executeInChildContext(
135135
eagerInterpreter ->
136136
EagerExpressionResult.fromString(
137137
renderChildren(tagNode, eagerInterpreter)
138138
),
139139
interpreter,
140-
EagerChildContextConfig
141-
.newBuilder()
140+
EagerContextWatcher
141+
.EagerChildContextConfig.newBuilder()
142142
.withForceDeferredExecutionMode(true)
143143
.build()
144144
)

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import com.hubspot.jinjava.interpret.TemplateSyntaxException;
77
import com.hubspot.jinjava.lib.tag.CycleTag;
88
import com.hubspot.jinjava.tree.parse.TagToken;
9+
import com.hubspot.jinjava.util.EagerContextWatcher;
910
import com.hubspot.jinjava.util.EagerExpressionResolver;
1011
import com.hubspot.jinjava.util.EagerReconstructionUtils;
11-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1212
import com.hubspot.jinjava.util.HelperStringTokenizer;
1313
import com.hubspot.jinjava.util.WhitespaceUtils;
1414
import java.util.ArrayList;
@@ -44,11 +44,14 @@ public String getEagerTagImage(TagToken tagToken, JinjavaInterpreter interpreter
4444
helper.add(sb.toString());
4545
}
4646
String expression = '[' + helper.get(0) + ']';
47-
EagerExecutionResult eagerExecutionResult = EagerReconstructionUtils.executeInChildContext(
47+
EagerExecutionResult eagerExecutionResult = EagerContextWatcher.executeInChildContext(
4848
eagerInterpreter ->
4949
EagerExpressionResolver.resolveExpression(expression, interpreter),
5050
interpreter,
51-
EagerChildContextConfig.newBuilder().withTakeNewValue(true).build()
51+
EagerContextWatcher
52+
.EagerChildContextConfig.newBuilder()
53+
.withTakeNewValue(true)
54+
.build()
5255
);
5356

5457
StringBuilder prefixToPreserveState = new StringBuilder();

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
import com.hubspot.jinjava.lib.tag.ForTag;
1010
import com.hubspot.jinjava.tree.TagNode;
1111
import com.hubspot.jinjava.tree.parse.TagToken;
12+
import com.hubspot.jinjava.util.EagerContextWatcher;
1213
import com.hubspot.jinjava.util.EagerExpressionResolver;
1314
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult;
1415
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult.ResolutionState;
1516
import com.hubspot.jinjava.util.EagerReconstructionUtils;
16-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1717
import com.hubspot.jinjava.util.LengthLimitingStringBuilder;
1818
import com.hubspot.jinjava.util.LengthLimitingStringJoiner;
1919
import java.util.HashSet;
@@ -35,7 +35,7 @@ public EagerForTag(ForTag forTag) {
3535
@Override
3636
public String innerInterpret(TagNode tagNode, JinjavaInterpreter interpreter) {
3737
Set<DeferredToken> addedTokens = new HashSet<>();
38-
EagerExecutionResult result = EagerReconstructionUtils.executeInChildContext(
38+
EagerExecutionResult result = EagerContextWatcher.executeInChildContext(
3939
eagerInterpreter -> {
4040
EagerExpressionResult expressionResult = EagerExpressionResult.fromSupplier(
4141
() -> getTag().interpretUnchecked(tagNode, eagerInterpreter),
@@ -45,7 +45,10 @@ public String innerInterpret(TagNode tagNode, JinjavaInterpreter interpreter) {
4545
return expressionResult;
4646
},
4747
interpreter,
48-
EagerChildContextConfig.newBuilder().withCheckForContextChanges(true).build()
48+
EagerContextWatcher
49+
.EagerChildContextConfig.newBuilder()
50+
.withCheckForContextChanges(!interpreter.getContext().isDeferredExecutionMode())
51+
.build()
4952
);
5053
if (
5154
result.getResult().getResolutionState() == ResolutionState.NONE ||
@@ -80,7 +83,7 @@ public String eagerInterpret(
8083
) {
8184
if (
8285
e instanceof DeferredValueException &&
83-
e.getMessage().startsWith(EagerReconstructionUtils.CANNOT_RECONSTRUCT_MESSAGE)
86+
e.getMessage().startsWith(EagerContextWatcher.CANNOT_RECONSTRUCT_MESSAGE)
8487
) {
8588
throw e;
8689
}
@@ -100,7 +103,7 @@ public String eagerInterpret(
100103
// separate getEagerImage from renderChildren because the token gets evaluated once
101104
// while the children are evaluated 0...n times.
102105
result.append(
103-
EagerReconstructionUtils
106+
EagerContextWatcher
104107
.executeInChildContext(
105108
eagerInterpreter ->
106109
EagerExpressionResult.fromString(
@@ -115,7 +118,7 @@ public String eagerInterpret(
115118
)
116119
),
117120
interpreter,
118-
EagerChildContextConfig.newBuilder().build()
121+
EagerContextWatcher.EagerChildContextConfig.newBuilder().build()
119122
)
120123
.asTemplateString()
121124
);
@@ -150,7 +153,7 @@ private EagerExecutionResult runLoopOnce(
150153
TagNode tagNode,
151154
JinjavaInterpreter interpreter
152155
) {
153-
return EagerReconstructionUtils.executeInChildContext(
156+
return EagerContextWatcher.executeInChildContext(
154157
eagerInterpreter -> {
155158
if (!(eagerInterpreter.getContext().get("loop") instanceof DeferredValue)) {
156159
eagerInterpreter.getContext().put("loop", DeferredValue.instance());
@@ -160,7 +163,10 @@ private EagerExecutionResult runLoopOnce(
160163
);
161164
},
162165
interpreter,
163-
EagerChildContextConfig.newBuilder().withForceDeferredExecutionMode(true).build()
166+
EagerContextWatcher
167+
.EagerChildContextConfig.newBuilder()
168+
.withForceDeferredExecutionMode(true)
169+
.build()
164170
);
165171
}
166172

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
import com.hubspot.jinjava.tree.Node;
1212
import com.hubspot.jinjava.tree.TagNode;
1313
import com.hubspot.jinjava.tree.parse.NoteToken;
14+
import com.hubspot.jinjava.util.EagerContextWatcher;
1415
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult;
1516
import com.hubspot.jinjava.util.EagerReconstructionUtils;
16-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1717
import com.hubspot.jinjava.util.LengthLimitingStringBuilder;
1818
import java.util.HashSet;
1919
import java.util.Set;
@@ -54,15 +54,15 @@ public String eagerInterpret(
5454
);
5555

5656
result.append(
57-
EagerReconstructionUtils
57+
EagerContextWatcher
5858
.executeInChildContext(
5959
eagerInterpreter ->
6060
EagerExpressionResult.fromString(
6161
eagerRenderBranches(tagNode, eagerInterpreter, e)
6262
),
6363
interpreter,
64-
EagerChildContextConfig
65-
.newBuilder()
64+
EagerContextWatcher
65+
.EagerChildContextConfig.newBuilder()
6666
.withForceDeferredExecutionMode(true)
6767
.build()
6868
)
@@ -108,14 +108,14 @@ public String eagerRenderBranches(
108108
int branchEnd = findNextElseToken(tagNode, branchStart);
109109
if (!definitelyDrop) {
110110
int finalBranchStart = branchStart;
111-
EagerExecutionResult result = EagerReconstructionUtils.executeInChildContext(
111+
EagerExecutionResult result = EagerContextWatcher.executeInChildContext(
112112
eagerInterpreter ->
113113
EagerExpressionResult.fromString(
114114
evaluateBranch(tagNode, finalBranchStart, branchEnd, interpreter)
115115
),
116116
interpreter,
117-
EagerChildContextConfig
118-
.newBuilder()
117+
EagerContextWatcher
118+
.EagerChildContextConfig.newBuilder()
119119
.withForceDeferredExecutionMode(true)
120120
.build()
121121
);

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import com.hubspot.jinjava.lib.tag.SetTag;
77
import com.hubspot.jinjava.tree.TagNode;
88
import com.hubspot.jinjava.tree.parse.TagToken;
9+
import com.hubspot.jinjava.util.EagerContextWatcher;
910
import com.hubspot.jinjava.util.EagerExpressionResolver;
1011
import com.hubspot.jinjava.util.EagerReconstructionUtils;
11-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1212
import com.hubspot.jinjava.util.LengthLimitingStringJoiner;
1313
import com.hubspot.jinjava.util.WhitespaceUtils;
1414
import java.util.Arrays;
@@ -31,11 +31,14 @@ public EagerExecutionResult getEagerExecutionResult(
3131
String expression,
3232
JinjavaInterpreter interpreter
3333
) {
34-
return EagerReconstructionUtils.executeInChildContext(
34+
return EagerContextWatcher.executeInChildContext(
3535
eagerInterpreter ->
3636
EagerExpressionResolver.resolveExpression('[' + expression + ']', interpreter),
3737
interpreter,
38-
EagerChildContextConfig.newBuilder().withTakeNewValue(true).build()
38+
EagerContextWatcher
39+
.EagerChildContextConfig.newBuilder()
40+
.withTakeNewValue(true)
41+
.build()
3942
);
4043
}
4144

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import com.hubspot.jinjava.interpret.TemplateSyntaxException;
66
import com.hubspot.jinjava.lib.tag.PrintTag;
77
import com.hubspot.jinjava.tree.parse.TagToken;
8+
import com.hubspot.jinjava.util.EagerContextWatcher;
89
import com.hubspot.jinjava.util.EagerExpressionResolver;
910
import com.hubspot.jinjava.util.EagerReconstructionUtils;
10-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1111
import com.hubspot.jinjava.util.LengthLimitingStringJoiner;
1212
import java.util.stream.Collectors;
1313
import org.apache.commons.lang3.StringUtils;
@@ -53,10 +53,13 @@ public static String interpretExpression(
5353
JinjavaInterpreter interpreter,
5454
boolean includeExpressionResult
5555
) {
56-
EagerExecutionResult eagerExecutionResult = EagerReconstructionUtils.executeInChildContext(
56+
EagerExecutionResult eagerExecutionResult = EagerContextWatcher.executeInChildContext(
5757
eagerInterpreter -> EagerExpressionResolver.resolveExpression(expr, interpreter),
5858
interpreter,
59-
EagerChildContextConfig.newBuilder().withTakeNewValue(true).build()
59+
EagerContextWatcher
60+
.EagerChildContextConfig.newBuilder()
61+
.withTakeNewValue(true)
62+
.build()
6063
);
6164
StringBuilder prefixToPreserveState = new StringBuilder();
6265
if (interpreter.getContext().isDeferredExecutionMode()) {

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import com.hubspot.jinjava.lib.tag.Tag;
77
import com.hubspot.jinjava.tree.TagNode;
88
import com.hubspot.jinjava.tree.parse.TagToken;
9+
import com.hubspot.jinjava.util.EagerContextWatcher;
910
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult;
1011
import com.hubspot.jinjava.util.EagerReconstructionUtils;
11-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1212
import org.apache.commons.lang3.StringUtils;
1313

1414
public class EagerStateChangingTag<T extends Tag> extends EagerTagDecorator<T> {
@@ -37,13 +37,13 @@ public String eagerInterpret(
3737

3838
if (!tagNode.getChildren().isEmpty()) {
3939
result.append(
40-
EagerReconstructionUtils
40+
EagerContextWatcher
4141
.executeInChildContext(
4242
eagerInterpreter ->
4343
EagerExpressionResult.fromString(renderChildren(tagNode, eagerInterpreter)),
4444
interpreter,
45-
EagerChildContextConfig
46-
.newBuilder()
45+
EagerContextWatcher
46+
.EagerChildContextConfig.newBuilder()
4747
.withForceDeferredExecutionMode(true)
4848
.build()
4949
)

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
import com.hubspot.jinjava.tree.TagNode;
1313
import com.hubspot.jinjava.tree.parse.TagToken;
1414
import com.hubspot.jinjava.tree.parse.Token;
15+
import com.hubspot.jinjava.util.EagerContextWatcher;
1516
import com.hubspot.jinjava.util.EagerExpressionResolver;
1617
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult;
1718
import com.hubspot.jinjava.util.EagerReconstructionUtils;
18-
import com.hubspot.jinjava.util.EagerReconstructionUtils.EagerChildContextConfig;
1919
import com.hubspot.jinjava.util.LengthLimitingStringBuilder;
2020
import com.hubspot.jinjava.util.LengthLimitingStringJoiner;
2121
import java.util.stream.Collectors;
@@ -95,7 +95,7 @@ public String eagerInterpret(
9595
interpreter.getConfig().getMaxOutputSize()
9696
);
9797
result.append(
98-
EagerReconstructionUtils
98+
EagerContextWatcher
9999
.executeInChildContext(
100100
eagerInterpreter ->
101101
EagerExpressionResult.fromString(
@@ -111,8 +111,8 @@ public String eagerInterpret(
111111
renderChildren(tagNode, eagerInterpreter)
112112
),
113113
interpreter,
114-
EagerChildContextConfig
115-
.newBuilder()
114+
EagerContextWatcher
115+
.EagerChildContextConfig.newBuilder()
116116
.withForceDeferredExecutionMode(true)
117117
.build()
118118
)

0 commit comments

Comments
 (0)