Skip to content

Commit b2e9fb2

Browse files
committed
Fix PrefixToPreserveState creation by operating against
DeferredLazyReference and not LazyReference. This was the intended functionality to make sure that the order of reconstructed values was such that {% set foo = [] %}{% set bar = foo %}, rather than {% set bar = foo %}{% set foo = [] %} would happen
1 parent 7486760 commit b2e9fb2

File tree

6 files changed

+27
-5
lines changed

6 files changed

+27
-5
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import static com.hubspot.jinjava.util.EagerReconstructionUtils.buildSetTag;
44

55
import com.google.common.annotations.Beta;
6+
import com.hubspot.jinjava.interpret.DeferredLazyReference;
67
import com.hubspot.jinjava.interpret.DeferredLazyReferenceSource;
78
import com.hubspot.jinjava.interpret.DeferredValueShadow;
89
import com.hubspot.jinjava.interpret.JinjavaInterpreter;
9-
import com.hubspot.jinjava.interpret.LazyReference;
1010
import com.hubspot.jinjava.objects.serialization.PyishObjectMapper;
1111
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult;
1212
import com.hubspot.jinjava.util.EagerReconstructionUtils;
@@ -65,7 +65,7 @@ public PrefixToPreserveState getPrefixToPreserveState() {
6565
.collect(Collectors.toList());
6666
filteredEntries
6767
.stream()
68-
.filter(entry -> !(entry.getValue() instanceof LazyReference))
68+
.filter(entry -> !(entry.getValue() instanceof DeferredLazyReference))
6969
.forEach(entry ->
7070
EagerReconstructionUtils.hydrateBlockOrInlineSetTagRecursively(
7171
prefixToPreserveState,
@@ -76,11 +76,13 @@ public PrefixToPreserveState getPrefixToPreserveState() {
7676
);
7777
filteredEntries
7878
.stream()
79-
.filter(entry -> (entry.getValue() instanceof LazyReference))
79+
.filter(entry -> (entry.getValue() instanceof DeferredLazyReference))
8080
.map(entry ->
8181
new AbstractMap.SimpleImmutableEntry<>(
8282
entry.getKey(),
83-
PyishObjectMapper.getAsPyishString(entry.getValue())
83+
PyishObjectMapper.getAsPyishString(
84+
((DeferredLazyReference) entry.getValue()).getOriginalValue()
85+
)
8486
)
8587
)
8688
.sorted((a, b) ->

src/test/java/com/hubspot/jinjava/EagerTest.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1158,7 +1158,14 @@ public void itDefersCallTagWithDeferredArgumentSecondPass() {
11581158
@Test
11591159
public void itHandlesDuplicateVariableReferenceModification() {
11601160
expectedTemplateInterpreter.assertExpectedOutputNonIdempotent(
1161-
"handles-duplicate-variable-reference-modification"
1161+
"handles-duplicate-variable-reference-modification/test"
1162+
);
1163+
}
1164+
1165+
@Test
1166+
public void itHandlesDuplicateVariableReferenceModification2() {
1167+
expectedTemplateInterpreter.assertExpectedOutputNonIdempotent(
1168+
"handles-duplicate-variable-reference-modification-2/test"
11621169
);
11631170
}
11641171

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{% set foo = ['a', 1] %}{% set bar = foo %}{% if deferred %}
2+
{% do bar.append(2) %}
3+
{% endif %}
4+
{% do bar.append(3) %}
5+
{{ foo ~ 'and' ~ bar }}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{% set foo = ['a'] -%}
2+
{%- set bar = foo -%}
3+
{% do bar.append(1) %}
4+
{% if deferred %}
5+
{% do bar.append(2) %}
6+
{% endif %}
7+
{% do bar.append(3) %}
8+
{{ foo ~ 'and' ~ bar }}

src/test/resources/eager/handles-duplicate-variable-reference-modification.expected.jinja renamed to src/test/resources/eager/handles-duplicate-variable-reference-modification/test.expected.jinja

File renamed without changes.

src/test/resources/eager/handles-duplicate-variable-reference-modification.jinja renamed to src/test/resources/eager/handles-duplicate-variable-reference-modification/test.jinja

File renamed without changes.

0 commit comments

Comments
 (0)