Skip to content

Commit 63faa33

Browse files
authored
Merge pull request #1088 from HubSpot/reconstruct-nested-in-string-representation
Reconstruct nested interpretation variables in string representation
2 parents ad68c0f + 8d879ea commit 63faa33

19 files changed

Lines changed: 272 additions & 103 deletions

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,10 @@ private String eagerResolveExpression(
6767
prefixToPreserveState.toString() + postProcessResult(master, result, interpreter)
6868
);
6969
}
70-
prefixToPreserveState.putAll(
71-
EagerReconstructionUtils.reconstructFromContextBeforeDeferringAsMap(
72-
eagerExecutionResult.getResult().getDeferredWords(),
73-
interpreter
74-
)
70+
EagerReconstructionUtils.hydrateReconstructionFromContextBeforeDeferring(
71+
prefixToPreserveState,
72+
eagerExecutionResult.getResult().getDeferredWords(),
73+
interpreter
7574
);
7675
String deferredExpressionImage = wrapInExpression(
7776
eagerExecutionResult.getResult().toString(),

src/main/java/com/hubspot/jinjava/lib/fn/eager/EagerMacroFunction.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,7 @@ public String reconstructImage(String fullName) {
233233
EagerReconstructionUtils.buildBlockOrInlineSetTag(
234234
Context.DEFERRED_IMPORT_RESOURCE_PATH_KEY,
235235
importFile.get(),
236-
interpreter,
237-
false
236+
interpreter
238237
);
239238
interpreter
240239
.getContext()
@@ -243,8 +242,7 @@ public String reconstructImage(String fullName) {
243242
EagerReconstructionUtils.buildBlockOrInlineSetTag(
244243
Context.DEFERRED_IMPORT_RESOURCE_PATH_KEY,
245244
currentDeferredImportResource,
246-
interpreter,
247-
false
245+
interpreter
248246
);
249247
}
250248

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ private static CallStack acquireMacroStack() {
250250
.orElse(null);
251251
}
252252

253-
private static Set<String> getBases(Set<String> original) {
253+
public static Set<String> getBases(Set<String> original) {
254254
return original
255255
.stream()
256256
.map(prop -> prop.split("\\.", 2)[0])

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,10 @@ public String eagerInterpret(
9696
);
9797
}
9898
caller.setDeferred(true);
99-
prefixToPreserveState.putAll(
100-
EagerReconstructionUtils.reconstructFromContextBeforeDeferringAsMap(
101-
eagerExecutionResult.getResult().getDeferredWords(),
102-
interpreter
103-
)
99+
EagerReconstructionUtils.hydrateReconstructionFromContextBeforeDeferring(
100+
prefixToPreserveState,
101+
eagerExecutionResult.getResult().getDeferredWords(),
102+
interpreter
104103
);
105104

106105
LengthLimitingStringJoiner joiner = new LengthLimitingStringJoiner(

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,10 @@ public String getEagerTagImage(TagToken tagToken, JinjavaInterpreter interpreter
8686
if (!eagerExecutionResult.getResult().isFullyResolved()) {
8787
resolvedValues =
8888
new HelperStringTokenizer(resolvedExpression).splitComma(true).allTokens();
89-
prefixToPreserveState.putAll(
90-
EagerReconstructionUtils.reconstructFromContextBeforeDeferringAsMap(
91-
eagerExecutionResult.getResult().getDeferredWords(),
92-
interpreter
93-
)
89+
EagerReconstructionUtils.hydrateReconstructionFromContextBeforeDeferring(
90+
prefixToPreserveState,
91+
eagerExecutionResult.getResult().getDeferredWords(),
92+
interpreter
9493
);
9594
} else {
9695
List<?> objects = eagerExecutionResult.getResult().toList();

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.hubspot.jinjava.lib.tag.eager;
22

3-
import static com.hubspot.jinjava.util.EagerReconstructionUtils.buildBlockOrInlineSetTag;
43
import static com.hubspot.jinjava.util.EagerReconstructionUtils.buildSetTag;
54

65
import com.google.common.annotations.Beta;
@@ -10,6 +9,7 @@
109
import com.hubspot.jinjava.interpret.LazyReference;
1110
import com.hubspot.jinjava.objects.serialization.PyishObjectMapper;
1211
import com.hubspot.jinjava.util.EagerExpressionResolver.EagerExpressionResult;
12+
import com.hubspot.jinjava.util.EagerReconstructionUtils;
1313
import com.hubspot.jinjava.util.PrefixToPreserveState;
1414
import java.util.AbstractMap;
1515
import java.util.Collection;
@@ -69,9 +69,11 @@ public PrefixToPreserveState getPrefixToPreserveState() {
6969
.filter(entry -> !(entry.getValue() instanceof LazyReference))
7070
.forEach(
7171
entry ->
72-
prefixToPreserveState.put(
72+
EagerReconstructionUtils.hydrateBlockOrInlineSetTagRecursively(
73+
prefixToPreserveState,
7374
entry.getKey(),
74-
buildBlockOrInlineSetTag(entry.getKey(), entry.getValue(), interpreter, false)
75+
entry.getValue(),
76+
interpreter
7577
)
7678
);
7779
filteredEntries

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,13 +234,13 @@ public String getEagerTagImage(TagToken tagToken, JinjavaInterpreter interpreter
234234
.add("in")
235235
.add(eagerExpressionResult.toString())
236236
.add(tagToken.getSymbols().getExpressionEndWithTag());
237-
PrefixToPreserveState prefixToPreserveState = new PrefixToPreserveState(
238-
EagerReconstructionUtils.reconstructFromContextBeforeDeferringAsMap(
237+
PrefixToPreserveState prefixToPreserveState = EagerReconstructionUtils
238+
.hydrateReconstructionFromContextBeforeDeferring(
239+
new PrefixToPreserveState(),
239240
eagerExpressionResult.getDeferredWords(),
240241
interpreter
241242
)
242-
)
243-
.withAllInFront(
243+
.withAllInFront(
244244
EagerReconstructionUtils.handleDeferredTokenAndReconstructReferences(
245245
interpreter,
246246
new DeferredToken(

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ public String getEagerTagImage(TagToken tagToken, JinjavaInterpreter interpreter
6060
EagerReconstructionUtils.buildBlockOrInlineSetTag(
6161
RelativePathResolver.CURRENT_PATH_CONTEXT_KEY,
6262
interpreter.getContext().get(RelativePathResolver.CURRENT_PATH_CONTEXT_KEY),
63-
interpreter,
64-
false
63+
interpreter
6564
) +
6665
tagToken.getImage()
6766
);

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,10 @@ private String getFinalOutputWithAlias(
190190
) {
191191
return (
192192
newPathSetter +
193-
EagerReconstructionUtils.buildBlockOrInlineSetTag(
193+
EagerReconstructionUtils.buildBlockOrInlineSetTagAndRegisterDeferredToken(
194194
currentImportAlias,
195195
Collections.emptyMap(),
196-
interpreter,
197-
true
196+
interpreter
198197
) +
199198
wrapInChildScope(
200199
interpreter,
@@ -259,11 +258,10 @@ private String getSetTagForDeferredChildBindings(
259258
.filter(entry -> !entry.getKey().equals(currentImportAlias))
260259
.map(
261260
entry ->
262-
EagerReconstructionUtils.buildBlockOrInlineSetTag(
261+
EagerReconstructionUtils.buildBlockOrInlineSetTag( // don't register deferred token so that we don't defer them on higher context scopes; they only exist in the child scope
263262
entry.getKey(),
264263
((DeferredValue) entry.getValue()).getOriginalValue(),
265-
interpreter,
266-
false // false so that we don't defer them on higher context scopes; they only exist in the child scope
264+
interpreter
267265
)
268266
)
269267
.collect(Collectors.joining());
@@ -282,8 +280,7 @@ public static String getSetTagForCurrentPath(JinjavaInterpreter interpreter) {
282280
.getContext()
283281
.getOrDefault(RelativePathResolver.CURRENT_PATH_CONTEXT_KEY, "")
284282
),
285-
interpreter,
286-
false
283+
interpreter
287284
);
288285
}
289286

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ public String innerInterpret(TagNode tagNode, JinjavaInterpreter interpreter) {
3535
final String newPathSetter = EagerReconstructionUtils.buildBlockOrInlineSetTag(
3636
RelativePathResolver.CURRENT_PATH_CONTEXT_KEY,
3737
templateFile,
38-
interpreter,
39-
false
38+
interpreter
4039
);
4140
return newPathSetter + output + initialPathSetter;
4241
}

0 commit comments

Comments
 (0)