Skip to content

Commit fa073c9

Browse files
committed
Use commitSpeculativeBindings method everywhere for consistency
1 parent b3f32eb commit fa073c9

6 files changed

Lines changed: 26 additions & 6 deletions

File tree

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ private String eagerResolveExpression(
5656
) {
5757
prefixToPreserveState.putAll(eagerExecutionResult.getPrefixToPreserveState());
5858
} else {
59-
interpreter.getContext().putAll(eagerExecutionResult.getSpeculativeBindings());
59+
EagerReconstructionUtils.commitSpeculativeBindings(
60+
interpreter,
61+
eagerExecutionResult
62+
);
6063
}
6164
if (eagerExecutionResult.getResult().isFullyResolved()) {
6265
String result = eagerExecutionResult.getResult().toString(true);

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,10 @@ public String eagerInterpret(
7474
) {
7575
prefixToPreserveState.putAll(eagerExecutionResult.getPrefixToPreserveState());
7676
} else {
77-
interpreter.getContext().putAll(eagerExecutionResult.getSpeculativeBindings());
77+
EagerReconstructionUtils.commitSpeculativeBindings(
78+
interpreter,
79+
eagerExecutionResult
80+
);
7881
}
7982
if (eagerExecutionResult.getResult().isFullyResolved()) {
8083
// Possible macro/set tag in front of this one.

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ public String getEagerTagImage(TagToken tagToken, JinjavaInterpreter interpreter
6464
) {
6565
prefixToPreserveState.putAll(eagerExecutionResult.getPrefixToPreserveState());
6666
} else {
67-
interpreter.getContext().putAll(eagerExecutionResult.getSpeculativeBindings());
67+
EagerReconstructionUtils.commitSpeculativeBindings(
68+
interpreter,
69+
eagerExecutionResult
70+
);
6871
}
6972
String resolvedExpression;
7073
List<String> resolvedValues; // can only be retrieved if the EagerExpressionResult are fully resolved.

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,10 @@ public static String interpretExpression(
7171
) {
7272
prefixToPreserveState.putAll(eagerExecutionResult.getPrefixToPreserveState());
7373
} else {
74-
interpreter.getContext().putAll(eagerExecutionResult.getSpeculativeBindings());
74+
EagerReconstructionUtils.commitSpeculativeBindings(
75+
interpreter,
76+
eagerExecutionResult
77+
);
7578
}
7679
if (eagerExecutionResult.getResult().isFullyResolved()) {
7780
// Possible macro/set tag in front of this one.

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ public String run(TagNode tagNode, JinjavaInterpreter interpreter) {
5454
eagerExecutionResult.getResult().isFullyResolved() &&
5555
!interpreter.getContext().isDeferredExecutionMode()
5656
) {
57-
interpreter.getContext().putAll(eagerExecutionResult.getSpeculativeBindings());
57+
EagerReconstructionUtils.commitSpeculativeBindings(
58+
interpreter,
59+
eagerExecutionResult
60+
);
5861
Optional<String> maybeResolved = resolveSet(
5962
tagNode,
6063
variables,
@@ -128,7 +131,10 @@ protected PrefixToPreserveState getPrefixToPreserveState(
128131
) {
129132
prefixToPreserveState.putAll(eagerExecutionResult.getPrefixToPreserveState());
130133
} else {
131-
interpreter.getContext().putAll(eagerExecutionResult.getSpeculativeBindings());
134+
EagerReconstructionUtils.commitSpeculativeBindings(
135+
interpreter,
136+
eagerExecutionResult
137+
);
132138
}
133139
prefixToPreserveState.putAll(
134140
EagerReconstructionUtils.reconstructFromContextBeforeDeferringAsMap(

src/main/java/com/hubspot/jinjava/util/EagerReconstructionUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,8 @@ public static void commitSpeculativeBindings(
782782
.getSpeculativeBindings()
783783
.entrySet()
784784
.stream()
785+
// Filter DeferredValueShadow because these are just used to mark that a value became deferred within this scope
786+
// The original key will be a DeferredValueImpl already on its original scope
785787
.filter(entry -> !(entry.getValue() instanceof DeferredValueShadow))
786788
.forEach(entry -> interpreter.getContext().put(entry.getKey(), entry.getValue()));
787789
}

0 commit comments

Comments
 (0)