<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body dir="auto">
Thank you for reporting. I’ll check into this. 
<div><br>
</div>
<div>Cheers,</div>
<div><br>
</div>
<div>— Jim</div>
<div><br>
<br>
<div dir="ltr">📱</div>
<div dir="ltr"><br>
<blockquote type="cite">On Sep 20, 2022, at 10:58 PM, Nathan Walker <nathan.h.walker@gmail.com> wrote:<br>
<br>
</blockquote>
</div>
<blockquote type="cite">
<div dir="ltr">
<div dir="ltr"><font face="monospace">Hey folks,</font>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">I was poking around at the source in the templated-string branch and saw something that seemed odd.</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">In the TemplatedString.TemplateBuilder.build() method there is:</font></div>
<div><font face="monospace"><br>
</font></div>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace">/**</font></div>
<div><font face="monospace"> * Returns a {@link TemplatedString} based on the current state of the</font></div>
<div><font face="monospace"> * {@link TemplateBuilder Builder's} fragments and values.</font></div>
<div><font face="monospace"> *</font></div>
<div><font face="monospace"> * @return a new TemplatedString</font></div>
<div><font face="monospace"> */</font></div>
<div><font face="monospace">public TemplatedString build() {</font></div>
</blockquote>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace">return new SimpleTemplatedString(Collections.unmodifiableList(fragments), </font><span style="font-family:monospace">Collections.unmodifiableList(values));</span></div>
</blockquote>
</blockquote>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace">}</font></div>
</blockquote>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">And SimpleTemplatedString is just:</font></div>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">record SimpleTemplatedString(List<String> fragments, List<Object> values</font><font face="monospace">) implements TemplatedString {}</font></div>
</blockquote>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">There doesn't seem to be any defensive copying of the fragments and values lists, just wrapping in the unmodifiableList() call.  So it is unmodifiable but if a builder is reused I then I believe those lists could change.</font></div>
<div><font face="monospace"><br>
</font></div>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace">var builder = TemplatedString.builder();<br>
</font></div>
<div><font face="monospace">TemplatedString ts = builder</font></div>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace">.fragment("a:").value(1)</font></div>
</blockquote>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace">.fragment(", b:").value(2)</font></div>
</blockquote>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace">.build();</font></div>
</blockquote>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace"><br>
</font></div>
</blockquote>
<font face="monospace">String result = STR.apply(ts); // result = "a:1, b:2"</font></blockquote>
<font face="monospace"><br>
</font>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="monospace">builder.fragment(", c:").value(3);</font></div>
<div>
<div>
<div><font face="monospace">result = STR.apply(ts); // result = "a:1, b:2, c:3" - same TempaltedString, very different result</font></div>
</div>
</div>
<div><font face="monospace"><br>
</font></div>
</blockquote>
<font face="monospace">Is this behavior intended? Based on the documentation on TemplatedString I wouldn't have thought so, but perhaps I am missing something.</font>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">Thanks for your time.</font></div>
</div>
</div>
</blockquote>
</div>
</body>
</html>