<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true">
<p style="margin: 0px 0px 1.2em !important;">This is great info!
Thanks.</p>
Funny to see the FOREACHLOOP popping out. This code is (at least)
from 17 years ago (!!) and predates any form of effectively final
analysis - back then even for-each required to hoist the variable
in a separate <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">final</code>
one :-)</div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true"><br>
</div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true">While looking at the
results I realized we have another issue in the analysis. Look at
this:</div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true"><br>
<a class="moz-txt-link-freetext" href="https://github.com/openjdk/jdk/blob/master/src/java.xml/share/classes/javax/xml/datatype/FactoryFinder.java#L177">https://github.com/openjdk/jdk/blob/master/src/java.xml/share/classes/javax/xml/datatype/FactoryFinder.java#L177</a></div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true"><br>
</div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true">In this case the
dummy variable is reported inside the TRY, which is obviously
correct. But, I realize, the important info is not where the dummy
variable is declared. It's the declaration of the variable it
points to in the initializer that matters!</div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true"><br>
</div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true">In this case, while
the dummy variable does appear inside a TRY block, the variable it
snapshots is a method parameter, so this should probably say
METHODDEF, not TRY.</div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true"><br>
</div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true">This
misclassification might lead to underestimating buckets. For
instance, if you have a `for` loop, and inside the for loop you
have an `if`, and inside the `if` we declare a dummy variable that
captures a variable in the enclosing loop, this will show up as
`IF` in the current code.<br>
</div>
<div class="markdown-here-wrapper" data-md-url="" style="" markdown-here-wrapper-content-modified="true"><br>
<p style="margin: 0px 0px 1.2em !important;">Cheers<br>
Maurizio</p>
<p style="margin: 0px 0px 1.2em !important;">On 17/10/2024 00:11,
Archie Cobbs wrote:</p>
<div class="markdown-here-exclude">
<blockquote type="cite" cite="mid:CANSoFxvuMdRfm8xj2=8Lcgs_eNEofiq4utT8g+1OniGvNawCSg@mail.gmail.com">
<div dir="ltr">
<div dir="ltr">Hi Maurizio,<br>
</div>
<div><br>
</div>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Wed, Oct 16, 2024 at
4:37 PM Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>Instead, it would be better if you just created a
new visitor in Flow whose only responsibility is
that of populating the DummyVariable map you already
have.</p>
<p>This new visitor might keep track of the innermost
"interesting" enclosing context, and when you create
the dummy variable, you note that context down.</p>
</div>
</blockquote>
<div>Nice idea... see <span style="font-family:monospace"><a href="https://urldefense.com/v3/__https://github.com/openjdk/jdk/compare/master...archiecobbs:jdk:dummy-variable-detector?expand=1__;!!ACWV5N9M2RV99hQ!OJ_q0-1gIl1E9FlfmaDgk_N-b8wcVW0lavO2dpthLq2Pb_REl0rByaXcH1e7xTsJkQrFA0mPjW97QvvVgHkkv236SiTqyw$" moz-do-not-send="true">08c8b1f3c64</a></span> for a
stab at it.</div>
<div>
<div><br>
</div>
<div>I added special logic to include pseudo-tags for <span style="font-family:monospace">STATIC_INITIALIZER</span>
and <span style="font-family:monospace">INSTANCE_INITIALIZER</span>.<br>
</div>
<div><br>
</div>
</div>
<div>There are surely some trade-offs regarding what types
are "interesting", might be worth tweaking.</div>
<div><br>
</div>
<div>Here are the stats from the JDK:<br>
</div>
<div><br>
</div>
<div><span style="font-family:monospace"> 42 METHODDEF<br>
32 IF<br>
21 TRY<br>
10 FORLOOP<br>
3 DOLOOP<br>
2 WHILELOOP<br>
2 CASE<br>
1 FOREACHLOOP</span></div>
<div><br>
</div>
<div>-Archie<br>
</div>
</div>
<br>
<span class="gmail_signature_prefix">-- </span><br>
<div dir="ltr" class="gmail_signature">Archie L. Cobbs<br>
</div>
</div>
</blockquote>
</div>
<div title="MDH:PHA+VGhpcyBpcyBncmVhdCBpbmZvISBUaGFua3MuPC9wPjxwPk1pZ2h0IGJlIHdvcnRoIGFkZGlu
ZyBhbm90aGVyIHBzZXVkbyB0YWcgZm9yIGUuZy4gRk9STE9PUF9IRUFERVIgKGUuZy4gbWVhbmlu
ZyB0aGUgdmFyaWFibGUgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGUgbG9vcCBib2R5LCBidXQgYnkg
dGhlIGZvciBsb29wIGl0c2VsZiwgd2hpY2ggaXMga2luZCBvZiB3aGF0IHdlJ3JlIGFmdGVyIGhl
cmUpLiBBbHRob3VnaCwgSSBjaGVja2VkIHRoZSB2YXJpb3VzIG1hdGNoZXMgaW4gdGhlIEpESywg
YW5kIHRoZSBvbmVzIHlvdSBnb3QgZm9yIEZPUkxPT1AgYXJlIGFsbCByZWxhdGVkIHRvIGluZHVj
dGlvbiB2YXJpYWJsZXMsIHNvIG1heWJlIHRoYXQncyBub3QgbmVlZGVkLjwvcD48cD5GdW5ueSB0
byBzZWUgdGhlIEZPUkVBQ0hMT09QIHBvcHBpbmcgb3V0LiBUaGlzIGNvZGUgaXMgKGF0IGxlYXN0
KSBmcm9tIDE3IHllYXJzIGFnbyAoISEpIGFuZCBwcmVkYXRlcyBhbnkgZm9ybSBvZiBlZmZlY3Rp
dmVseSBmaW5hbCBhbmFseXNpcyAtIGJhY2sgdGhlbiBldmVuIGZvci1lYWNoIHJlcXVpcmVkIHRv
IGhvaXN0IHRoZSB2YXJpYWJsZSBpbiBhIHNlcGFyYXRlIGBmaW5hbGAgb25lIDotKTwvcD48cD5D
aGVlcnM8YnI+TWF1cml6aW88YnI+PC9wPjxwPjxicj48L3A+PGRpdiBjbGFzcz0ibW96LWNpdGUt
cHJlZml4Ij5PbiAxNy8xMC8yMDI0IDAwOjExLCBBcmNoaWUgQ29iYnMgd3JvdGU6PGJyPjwvZGl2
PjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDpDQU5Tb0Z4dnVNZFJmbTh4ajI9OExj
Z3NfZU5Fb2ZpcTR1dFQ4ZysxT25pR3ZOYXdDU2dAbWFpbC5nbWFpbC5jb20iPjxtZXRhIGh0dHAt
ZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyAiPjxkaXYgZGlyPSJsdHIi
PjxkaXYgZGlyPSJsdHIiPkhpIE1hdXJpemlvLDxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9xdW90ZSI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX2F0dHIiPk9u
IFdlZCwgT2N0IDE2LCAyMDI0IGF0IDQ6MzfigK9QTSBNYXVyaXppbyBDaW1hZGFtb3JlICZsdDs8
YSBocmVmPSJtYWlsdG86bWF1cml6aW8uY2ltYWRhbW9yZUBvcmFjbGUuY29tIiBtb3otZG8tbm90
LXNlbmQ9InRydWUiIGNsYXNzPSJtb3otdHh0LWxpbmstZnJlZXRleHQiPm1hdXJpemlvLmNpbWFk
YW1vcmVAb3JhY2xlLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90ZSBjbGFz
cz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxl
ZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+CgogIAogIDxk
aXY+PHA+SW5zdGVhZCwgaXQgd291bGQgYmUgYmV0dGVyIGlmIHlvdSBqdXN0IGNyZWF0ZWQgYSBu
ZXcgdmlzaXRvciBpbgogICAgICBGbG93IHdob3NlIG9ubHkgcmVzcG9uc2liaWxpdHkgaXMgdGhh
dCBvZiBwb3B1bGF0aW5nIHRoZQogICAgICBEdW1teVZhcmlhYmxlIG1hcCB5b3UgYWxyZWFkeSBo
YXZlLjwvcD4KICAgIDxwPlRoaXMgbmV3IHZpc2l0b3IgbWlnaHQga2VlcCB0cmFjayBvZiB0aGUg
aW5uZXJtb3N0ICJpbnRlcmVzdGluZyIKICAgICAgZW5jbG9zaW5nIGNvbnRleHQsIGFuZCB3aGVu
IHlvdSBjcmVhdGUgdGhlIGR1bW15IHZhcmlhYmxlLCB5b3UKICAgICAgbm90ZSB0aGF0IGNvbnRl
eHQgZG93bi48L3A+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+TmljZSBpZGVhLi4uIHNlZSA8c3Bh
biBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48YSBocmVmPSJodHRwczovL3VybGRlZmVu
c2UuY29tL3YzL19faHR0cHM6Ly9naXRodWIuY29tL29wZW5qZGsvamRrL2NvbXBhcmUvbWFzdGVy
Li4uYXJjaGllY29iYnM6amRrOmR1bW15LXZhcmlhYmxlLWRldGVjdG9yP2V4cGFuZD0xX187ISFB
Q1dWNU45TTJSVjk5aFEhT0pfcTAtMWdJbDFFOUZsZm1hRGdrX04tYjh3Y1ZXMGxhdk8yZHB0aExx
MlBiX1JFbDByQnlhWGNIMWU3eFRzSmtRckZBMG1Qalc5N1F2dlZnSGtrdjIzNlNpVHF5dyQiIG1v
ei1kby1ub3Qtc2VuZD0idHJ1ZSI+MDhjOGIxZjNjNjQ8L2E+PC9zcGFuPiBmb3IgYSBzdGFiIGF0
IGl0LjwvZGl2PjxkaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JIGFkZGVkIHNwZWNpYWwgbG9naWMg
dG8gaW5jbHVkZSBwc2V1ZG8tdGFncyBmb3IgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9z
cGFjZSI+U1RBVElDX0lOSVRJQUxJWkVSPC9zcGFuPiBhbmQgPHNwYW4gc3R5bGU9ImZvbnQtZmFt
aWx5Om1vbm9zcGFjZSI+SU5TVEFOQ0VfSU5JVElBTElaRVI8L3NwYW4+Ljxicj48L2Rpdj48ZGl2
Pjxicj48L2Rpdj48L2Rpdj48ZGl2PlRoZXJlIGFyZSBzdXJlbHkgc29tZSB0cmFkZS1vZmZzIHJl
Z2FyZGluZyB3aGF0IHR5cGVzIGFyZSAiaW50ZXJlc3RpbmciLCBtaWdodCBiZSB3b3J0aCB0d2Vh
a2luZy48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkhlcmUgYXJlIHRoZSBzdGF0cyBmcm9tIHRo
ZSBKREs6PGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtZmFt
aWx5Om1vbm9zcGFjZSI+Jm5ic3A7IDQyIE1FVEhPRERFRjxicj4mbmJzcDsgMzIgSUY8YnI+Jm5i
c3A7IDIxIFRSWTxicj4mbmJzcDsgMTAgRk9STE9PUDxicj4mbmJzcDsgJm5ic3A7MyBET0xPT1A8
YnI+Jm5ic3A7ICZuYnNwOzIgV0hJTEVMT09QPGJyPiZuYnNwOyAmbmJzcDsyIENBU0U8YnI+Jm5i
c3A7ICZuYnNwOzEgRk9SRUFDSExPT1A8L3NwYW4+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4t
QXJjaGllPGJyPjwvZGl2PjwvZGl2Pjxicj48c3BhbiBjbGFzcz0iZ21haWxfc2lnbmF0dXJlX3By
ZWZpeCI+LS0gPC9zcGFuPjxicj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0iZ21haWxfc2lnbmF0dXJl
Ij5BcmNoaWUgTC4gQ29iYnM8YnI+PC9kaXY+PC9kaXY+Cgo8L2Jsb2NrcXVvdGU+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;"></div>
</div>
</body>
</html>