<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:"Courier New";
mso-fareast-language:EN-GB;}
span.comment
{mso-style-name:comment;}
span.st0
{mso-style-name:st0;}
span.st1
{mso-style-name:st1;}
span.literal
{mso-style-name:literal;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang="en-CZ" link="#0563C1" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Sure no, problem :)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">Brian Goetz <brian.goetz@oracle.com><br>
<b>Date: </b>Tuesday, 7 March 2023 15:42<br>
<b>To: </b>Adam Sotona <adam.sotona@oracle.com>, classfile-api-dev@openjdk.org <classfile-api-dev@openjdk.org>, Paul Sandoz <paul.sandoz@oracle.com><br>
<b>Subject: </b>Re: Classfile API CodeBuilder::transforming clarification</span><span style="font-size:12.0pt;color:black;mso-fareast-language:EN-GB"><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:13.5pt;font-family:"Courier New"">I'd like some time to think about this; this was one of the trickiest corners of the API to design. Its quite possible there's an inconsistency or vestige,
but also possible something subtle is going on. <br>
<br>
Can we put this on the RFE list as well?</span></p>
<div>
<p class="MsoNormal">On 3/7/2023 5:09 AM, Adam Sotona wrote:</p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span lang="EN-US">Hi,</span></p>
<p class="MsoNormal"><span lang="EN-US">During the Classfile API reviews there have been raised concerns about `CodeBuilder::transforming` method, for details see:</span></p>
<p class="MsoNormal"><a href="https://github.com/openjdk/jdk/pull/10982/files/074dd30401a68638a24c157595caeb96b3511614#r1123858513">https://github.com/openjdk/jdk/pull/10982/files/074dd30401a68638a24c157595caeb96b3511614#r1123858513</a></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><span lang="EN-US">I would like to (re-)open this discussion here to find the best suitable form of the following method:</span></p>
<pre style="background:white"><span style="color:black"> </span><span class="comment"><span style="color:#969696">/**</span></span></pre>
<pre style="background:white"><span class="comment"><span style="color:#969696"> * </span></span><span class="st0"><b><span style="color:#969696">Apply</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">a</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">transform</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">to</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">the</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">code</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">built</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">by</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">a</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">handler, directing</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">results</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">to</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">this</span></b></span><span style="color:black"> </span><span class="st0"><b><span style="color:#969696">builder.</span></b></span></pre>
<pre style="background:white"><span class="comment"><span style="color:#969696"> *</span></span></pre>
<pre style="background:white"><span class="comment"><span style="color:#969696"> * </span></span><span class="st0"><b><span style="color:#969696">@param</span></b></span><span style="color:black"> transform </span><span class="comment"><span style="color:#969696">the</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">transform</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">to</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">apply</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">to</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">the</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">code</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">built</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">by</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">the</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">handler</span></span></pre>
<pre style="background:white"><span class="comment"><span style="color:#969696"> * </span></span><span class="st0"><b><span style="color:#969696">@param</span></b></span><span style="color:black"> handler </span><span class="comment"><span style="color:#969696">the</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">handler</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">that</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">receives</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">a {</span></span><span class="st0"><b><span style="color:#969696">@linkplain</span></b></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">CodeBuilder} to</span></span></pre>
<pre style="background:white"><span class="comment"><span style="color:#969696"> * build</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">the</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">code.</span></span></pre>
<pre style="background:white"><span class="comment"><span style="color:#969696"> * </span></span><span class="st0"><b><span style="color:#969696">@return</span></b></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">this</span></span><span style="color:black"> </span><span class="comment"><span style="color:#969696">builder</span></span></pre>
<pre style="background:white"><span style="color:black"> </span><span class="comment"><span style="color:#969696">*/</span></span></pre>
<pre style="background:white"><span style="color:black"> </span><span class="literal"><span style="color:#336BDD">default</span></span><span style="color:black"> CodeBuilder <span class="st1"><b>transforming</b></span>(CodeTransform transform, Consumer<CodeBuilder> handler)</span></pre>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">My proposal is to align it more with `CodeBuilder::block` method and emphasize more the bytecode block than the transformation itself.</span></p>
<p class="MsoNormal"><span lang="EN-US">I propose to change the method name and arguments to:</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> /**</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> *
<b>Add</b> <b>a</b> <b>transformed</b> <b>lexical</b> <b>block</b> <b>to</b> <b>the</b>
<b>method</b> <b>being</b> <b>built.</b></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> *
<b><p></b></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> * Within this block, the {<b>@link</b> #startLabel()} and {<b>@link</b> #endLabel()} correspond</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> * to the start and end of the block, and the {<b>@link</b> BlockCodeBuilder#breakLabel()}</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> * also corresponds to the end of the block.</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> *</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> *
<b>@param</b> handler handler that receives a {<b>@linkplain</b> BlockCodeBuilder} to</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> * generate the body of the lexical block.</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> *
<b>@param</b> transform the transform to apply to the lexical block generated by handler</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> *
<b>@return</b> this builder</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> */</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> default CodeBuilder
<b>transformedBlock</b>(<i>Consumer</i><<i>BlockCodeBuilder</i>> handler, <i>CodeTransform</i> transform</span><span lang="EN-US" style="font-size:10.0pt;color:black">)</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">Or alternatively:</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> default CodeBuilder
<b>transformBlock</b>(<i>Consumer</i><<i>BlockCodeBuilder</i>> handler, <i>CodeTransform</i> transform</span><span lang="EN-US" style="font-size:10.0pt;color:black">)</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">or:</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> default CodeBuilder
<b>transform</b></span><b><span lang="EN-US" style="font-size:10.0pt;color:black">ing</span></b><b><span style="font-size:10.0pt;color:black">Block</span></b><span style="font-size:10.0pt;color:black">(<i>Consumer</i><<i>BlockCodeBuilder</i>> handler,
<i>CodeTransform</i> transform)</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">or just simple:</span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:10.0pt;color:black"> default CodeBuilder
</span><b><span lang="EN-US" style="font-size:10.0pt;color:black">b</span></b><b><span style="font-size:10.0pt;color:black">lock</span></b><span style="font-size:10.0pt;color:black">(<i>Consumer</i><<i>BlockCodeBuilder</i>> handler,
<i>CodeTransform</i> transform)</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">Please let me know which version do you prefer or propose alternatives.</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">Thanks,</span></p>
<p class="MsoNormal"><span lang="EN-US">Adam</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"> </p>
</blockquote>
<p class="MsoNormal"><span style="mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
</div>
</body>
</html>