@@ -107,13 +107,15 @@ public static EagerExecutionResult executeInChildContext(
107107 * Reconstruct the macro functions and variables from the context before they
108108 * get deferred.
109109 * Those macro functions and variables found within {@code deferredWords} are
110- * reconstructed with {@link MacroTag}(s) and a {@link SetTag}, respectively to
110+ * reconstructed with {@link MacroTag}(s) and {@link SetTag}(s) , respectively to
111111 * preserve the context within the Jinjava template itself.
112112 * @param deferredWords set of words that will need to be deferred based on the
113113 * previously performed operation.
114114 * @param interpreter the Jinjava interpreter.
115- * @return a Jinjava-syntax string of 0 or more macro tags and 0 or 1 set tags.
115+ * @return a Jinjava-syntax string of 0 or more macro tags and 0 or more set tags.
116+ * @deprecated use {@link #hydrateReconstructionFromContextBeforeDeferring(PrefixToPreserveState, Set, JinjavaInterpreter)}
116117 */
118+ @ Deprecated
117119 public static String reconstructFromContextBeforeDeferring (
118120 Set <String > deferredWords ,
119121 JinjavaInterpreter interpreter
@@ -124,12 +126,25 @@ public static String reconstructFromContextBeforeDeferring(
124126 );
125127 }
126128
127- public static Map <String , String > reconstructFromContextBeforeDeferringAsMap (
129+ /**
130+ * Reconstruct the macro functions and variables from the context before they
131+ * get deferred.
132+ * Those macro functions and variables found within {@code deferredWords} are
133+ * reconstructed with {@link MacroTag}(s) and {@link SetTag}(s), respectively to
134+ * preserve the context within the Jinjava template itself.
135+ * @param deferredWords set of words that will need to be deferred based on the
136+ * previously performed operation.
137+ * @param interpreter the Jinjava interpreter.
138+ * @return a PrefixToPreserveState map of 0 or more macro tags and 0 or more set tags.
139+ * @deprecated use {@link #hydrateReconstructionFromContextBeforeDeferring(PrefixToPreserveState, Set, JinjavaInterpreter)}
140+ */
141+ @ Deprecated
142+ public static PrefixToPreserveState reconstructFromContextBeforeDeferringAsMap (
128143 Set <String > deferredWords ,
129144 JinjavaInterpreter interpreter
130145 ) {
131146 PrefixToPreserveState prefixToPreserveState = new PrefixToPreserveState ();
132- reconstructFromContextBeforeDeferringAsMap (
147+ hydrateReconstructionFromContextBeforeDeferring (
133148 prefixToPreserveState ,
134149 deferredWords ,
135150 interpreter ,
@@ -138,14 +153,38 @@ public static Map<String, String> reconstructFromContextBeforeDeferringAsMap(
138153 return prefixToPreserveState ;
139154 }
140155
141- private static void reconstructFromContextBeforeDeferringAsMap (
156+ /**
157+ * Reconstruct the macro functions and variables from the context before they
158+ * get deferred.
159+ * Those macro functions and variables found within {@code deferredWords} are
160+ * reconstructed with {@link MacroTag}(s) and {@link SetTag}(s), respectively to
161+ * preserve the context within the Jinjava template itself.
162+ * @param prefixToPreserveState This PrefixToPreserveState will be hydrated with the Macro tag images and set tag images
163+ * @param deferredWords set of words that will need to be deferred based on the
164+ * previously performed operation.
165+ * @param interpreter the Jinjava interpreter.
166+ */
167+ public static void hydrateReconstructionFromContextBeforeDeferring (
168+ PrefixToPreserveState prefixToPreserveState ,
169+ Set <String > deferredWords ,
170+ JinjavaInterpreter interpreter
171+ ) {
172+ hydrateReconstructionFromContextBeforeDeferring (
173+ prefixToPreserveState ,
174+ deferredWords ,
175+ interpreter ,
176+ 0
177+ );
178+ }
179+
180+ private static void hydrateReconstructionFromContextBeforeDeferring (
142181 PrefixToPreserveState prefixToPreserveState ,
143182 Set <String > deferredWords ,
144183 JinjavaInterpreter interpreter ,
145184 int depth
146185 ) {
147186 if (depth <= interpreter .getConfig ().getMaxRenderDepth ()) {
148- reconstructMacroFunctionsBeforeDeferring (
187+ hydrateReconstructionOfMacroFunctionsBeforeDeferring (
149188 prefixToPreserveState ,
150189 deferredWords ,
151190 interpreter
@@ -155,7 +194,7 @@ private static void reconstructFromContextBeforeDeferringAsMap(
155194 return ;
156195 }
157196
158- reconstructSetVariablesBeforeDeferring (
197+ hydrateReconstructionOfVariablesBeforeDeferring (
159198 prefixToPreserveState ,
160199 deferredWordBases ,
161200 interpreter ,
@@ -202,13 +241,12 @@ private static Set<String> filterToRelevantBases(
202241 * and remove those macro functions from the deferredWords set.
203242 * These macro functions are either global or local macro functions, with local
204243 * meaning they've been imported under an alias such as "simple.multiply()".
244+ * @param prefixToPreserveState This PrefixToPreserveState will be hydrated with the Macro tag images
205245 * @param deferredWords Set of words that were encountered and their evaluation has
206246 * to be deferred for a later render.
207247 * @param interpreter The Jinjava interpreter.
208- * @return A jinjava-syntax string that is the images of any macro functions that must
209- * be evaluated at a later time.
210248 */
211- private static void reconstructMacroFunctionsBeforeDeferring (
249+ private static void hydrateReconstructionOfMacroFunctionsBeforeDeferring (
212250 PrefixToPreserveState prefixToPreserveState ,
213251 Set <String > deferredWords ,
214252 JinjavaInterpreter interpreter
@@ -261,7 +299,7 @@ private static void reconstructMacroFunctionsBeforeDeferring(
261299 deferredWords .removeAll (toRemove );
262300 }
263301
264- private static void reconstructSetVariablesBeforeDeferring (
302+ private static void hydrateReconstructionOfVariablesBeforeDeferring (
265303 PrefixToPreserveState prefixToPreserveState ,
266304 Set <String > deferredWords ,
267305 JinjavaInterpreter interpreter ,
@@ -281,7 +319,7 @@ private static void reconstructSetVariablesBeforeDeferring(
281319 )
282320 .forEach (
283321 entry ->
284- buildBlockOrInlineSetTagRecursively (
322+ hydrateBlockOrInlineSetTagRecursively (
285323 prefixToPreserveState ,
286324 entry .getKey (),
287325 entry .getValue (),
@@ -307,24 +345,49 @@ public static String buildBlockOrInlineSetTagAndRegisterDeferredToken(
307345 return buildBlockOrInlineSetTag (name , value , interpreter , true );
308346 }
309347
310- private static void buildBlockOrInlineSetTagRecursively (
348+ public static void hydrateBlockOrInlineSetTagRecursively (
349+ PrefixToPreserveState prefixToPreserveState ,
350+ String name ,
351+ Object value ,
352+ JinjavaInterpreter interpreter
353+ ) {
354+ hydrateBlockOrInlineSetTagRecursively (
355+ prefixToPreserveState ,
356+ name ,
357+ value ,
358+ interpreter ,
359+ 0
360+ );
361+ }
362+
363+ private static void hydrateBlockOrInlineSetTagRecursively (
311364 PrefixToPreserveState prefixToPreserveState ,
312365 String name ,
313366 Object value ,
314367 JinjavaInterpreter interpreter ,
315368 int depth
316369 ) {
317- if (value instanceof DeferredValue || value instanceof PyishBlockSetSerializable ) {
370+ if (
371+ value instanceof DeferredValue &&
372+ !(value instanceof PyishBlockSetSerializable || value instanceof PyishSerializable )
373+ ) {
374+ value = ((DeferredValue ) value ).getOriginalValue ();
375+ }
376+ if (value instanceof PyishBlockSetSerializable ) {
318377 prefixToPreserveState .put (
319378 name ,
320- buildBlockOrInlineSetTag (name , value , interpreter , false )
379+ buildBlockSetTag (
380+ name ,
381+ ((PyishBlockSetSerializable ) value ).getBlockSetBody (),
382+ interpreter ,
383+ false
384+ )
321385 );
322386 return ;
323387 }
324388 String pyishStringRepresentation = PyishObjectMapper .getAsPyishString (value );
325389
326390 if (
327- depth > 0 &&
328391 depth < interpreter .getConfig ().getMaxRenderDepth () &&
329392 interpreter .getConfig ().isNestedInterpretationEnabled ()
330393 ) {
@@ -333,7 +396,7 @@ private static void buildBlockOrInlineSetTagRecursively(
333396 interpreter
334397 );
335398 if (!dependentWords .isEmpty ()) {
336- reconstructFromContextBeforeDeferringAsMap (
399+ hydrateReconstructionFromContextBeforeDeferring (
337400 prefixToPreserveState ,
338401 dependentWords ,
339402 interpreter ,
0 commit comments