<!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="">
<p style="margin: 0px 0px 1.2em !important;">Hi Archie,<br>
looks very good. Only one comment. Here:</p>
<pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><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;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">// Check for a possible "dummy variable" declaration
if (tree.sym.pos >= startPos &&
(tree.sym.owner.kind == MTH || tree.sym.owner.kind == VAR) &&
tree.init instanceof JCIdent)
dummyVariables.put(tree.sym, new DummyVariable(tree.pos(), tree.sym));
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">I think we have to
check whether the symbol under tree.init is that of a local
variable. E.g. we don’t want the finder to pick up stuff like:</p>
<pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><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;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">String a = b
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">Where <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;">b</code>
is a field in the current class.</p>
<p style="margin: 0px 0px 1.2em !important;">Maurizio</p>
<p style="margin: 0px 0px 1.2em !important;">On 16/10/2024 21:44,
Archie Cobbs wrote:</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote type="cite" cite="mid:CANSoFxs5byTO=zEFWJceXxjmsHdTVsy5XbLmT=L8gSPVqOPkfg@mail.gmail.com">
<div dir="ltr">
<div>Hi Maurizio,</div>
<div><br>
</div>
<div>Please see <a href="https://urldefense.com/v3/__https://github.com/openjdk/jdk/compare/master...archiecobbs:jdk:dummy-variable-detector?expand=1__;!!ACWV5N9M2RV99hQ!PvoKchzkcMwwmqdsV9XWt5JA-wk3qU-XscUSdoueEGvgGTk7vKFqEU1JV0jYo3wMu-GvkpqF9U3pblph5Zn2BnccfYMOdQ$" moz-do-not-send="true">https://github.com/openjdk/jdk/compare/master...archiecobbs:jdk:dummy-variable-detector?expand=1</a></div>
<div><br>
</div>
<div>I made it a note instead of a warning so that builds
would not be artificially halted.</div>
<div><br>
</div>
<div>Here's an example:</div>
<div><br>
</div>
<div style="margin-left:40px"><span style="font-family:monospace">$ cat Test.java<br>
</span></div>
<div style="margin-left:40px"><span style="font-family:monospace">class Test {<br>
{<br>
for (int i = 1; i <= 3; i++) {<br>
int i2 = i;<br>
Runnable r = () ->
System.out.println(i2);<br>
}<br>
}<br>
}</span></div>
<div style="margin-left:40px"><span style="font-family:monospace">$ javac Test.java</span></div>
<div style="margin-left:40px"><span style="font-family:monospace">flex-test/Test.java:4:
Note: detected effectively final "dummy variable" i2<br>
int i2 = i;<br>
^</span></div>
<div>I *think* the logic is accurate but it could probably
use a quick review.<br>
</div>
<div><br>
</div>
<div>-Archie<br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Wed, Oct 16, 2024 at
9:11 AM Archie Cobbs <<a href="mailto:archie.cobbs@gmail.com" moz-do-not-send="true" class="moz-txt-link-freetext">archie.cobbs@gmail.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 dir="ltr">
<div>Hi Maurizio,<br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Wed, Oct 16, 2024
at 8:56 AM Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" target="_blank" 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>
<div>
<p style="margin:0px 0px 1.2em">Could you come
up with a javac patch that detects such
“dummy” variable declarations and prints a
note/warning in the compiler output?</p>
</div>
</div>
</blockquote>
<div>Excellent idea - I agree this is something worth
further exploration to better understand.<br>
</div>
<div><br>
</div>
<div>I will work on it and report back.<br>
</div>
<div><br>
</div>
<div>-Archie<br>
</div>
<div><br>
</div>
</div>
<span class="gmail_signature_prefix">-- </span><br>
<div dir="ltr" class="gmail_signature">Archie L. Cobbs<br>
</div>
</div>
</blockquote>
</div>
<br clear="all">
<br>
<span class="gmail_signature_prefix">-- </span><br>
<div dir="ltr" class="gmail_signature">Archie L. Cobbs<br>
</div>
</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div title="MDH:PHA+SGkgQXJjaGllLDxicj5sb29rcyB2ZXJ5IGdvb2QuIE9ubHkgb25lIGNvbW1lbnQuIEhlcmU6
PGJyPjxicj5gYGA8YnI+Ly8gQ2hlY2sgZm9yIGEgcG9zc2libGUgImR1bW15IHZhcmlhYmxlIiBk
ZWNsYXJhdGlvbjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKHRyZWUu
c3ltLnBvcyAmZ3Q7PSBzdGFydFBvcyAmYW1wOyZhbXA7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyAodHJlZS5zeW0ub3duZXIua2luZCA9PSBNVEggfHwgdHJlZS5zeW0ub3duZXIua2luZCA9
PSBWQVIpICZhbXA7JmFtcDs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRyZWUuaW5pdCBp
bnN0YW5jZW9mIEpDSWRlbnQpPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBkdW1teVZhcmlhYmxlcy5wdXQodHJlZS5zeW0sIG5ldyBE
dW1teVZhcmlhYmxlKHRyZWUucG9zKCksIHRyZWUuc3ltKSk7PGJyPmBgYDwvcD48cD5JIHRoaW5r
IHdlIGhhdmUgdG8gY2hlY2sgd2hldGhlciB0aGUgc3ltYm9sIHVuZGVyIHRyZWUuaW5pdCBpcyB0
aGF0IG9mIGEgbG9jYWwgdmFyaWFibGUuIEUuZy4gd2UgZG9uJ3Qgd2FudCB0aGUgZmluZGVyIHRv
IHBpY2sgdXAgc3R1ZmYgbGlrZTo8L3A+PHA+YGBgPGJyPlN0cmluZyBhID0gYjxicj5gYGA8YnI+
PC9wPjxwPldoZXJlIGBiYCBpcyBhIGZpZWxkIGluIHRoZSBjdXJyZW50IGNsYXNzLjwvcD48cD5N
YXVyaXppbzxicj48L3A+PGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAxNi8xMC8yMDI0
IDIxOjQ0LCBBcmNoaWUgQ29iYnMgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIHR5cGU9ImNp
dGUiIGNpdGU9Im1pZDpDQU5Tb0Z4czVieVRPPXpFRldKY2VYeGptc0hkVFZzeTVYYkxtVD1MOGdT
UFZxT1BrZmdAbWFpbC5nbWFpbC5jb20iPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyAiPjxkaXYgZGlyPSJsdHIiPjxkaXY+SGkgTWF1cml6aW8sPC9k
aXY+PGRpdj48YnI+PC9kaXY+PGRpdj5QbGVhc2Ugc2VlIDxhIGhyZWY9Imh0dHBzOi8vdXJsZGVm
ZW5zZS5jb20vdjMvX19odHRwczovL2dpdGh1Yi5jb20vb3Blbmpkay9qZGsvY29tcGFyZS9tYXN0
ZXIuLi5hcmNoaWVjb2JiczpqZGs6ZHVtbXktdmFyaWFibGUtZGV0ZWN0b3I/ZXhwYW5kPTFfXzsh
IUFDV1Y1TjlNMlJWOTloUSFQdm9LY2h6a2NNd3dtcWRzVjlYV3Q1SkEtd2szcVUtWHNjVVNkb3Vl
RUd2Z0dUazd2S0ZxRVUxSlYwallvM3dNdS1HdmtwcUY5VTNwYmxwaDVabjJCbmNjZllNT2RRJCIg
bW96LWRvLW5vdC1zZW5kPSJ0cnVlIj5odHRwczovL2dpdGh1Yi5jb20vb3Blbmpkay9qZGsvY29t
cGFyZS9tYXN0ZXIuLi5hcmNoaWVjb2JiczpqZGs6ZHVtbXktdmFyaWFibGUtZGV0ZWN0b3I/ZXhw
YW5kPTE8L2E+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JIG1hZGUgaXQgYSBub3RlIGluc3Rl
YWQgb2YgYSB3YXJuaW5nIHNvIHRoYXQgYnVpbGRzIHdvdWxkIG5vdCBiZSBhcnRpZmljaWFsbHkg
aGFsdGVkLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SGVyZSdzIGFuIGV4YW1wbGU6PC9kaXY+
PGRpdj48YnI+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6NDBweCI+PHNwYW4gc3R5bGU9
ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+JCBjYXQgVGVzdC5qYXZhPGJyPjwvc3Bhbj48L2Rpdj48
ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDo0MHB4Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9u
b3NwYWNlIj5jbGFzcyBUZXN0IHs8YnI+Jm5ic3A7ICZuYnNwOyB7PGJyPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyBmb3IgKGludCBpID0gMTsgaSAmbHQ7PSAzOyBpKyspIHs8YnI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgaW50IGkyID0gaTs8YnI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgUnVubmFibGUgciA9ICgpIC0mZ3Q7
IFN5c3RlbS5vdXQucHJpbnRsbihpMik7PGJyPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB9
PGJyPiZuYnNwOyAmbmJzcDsgfTxicj59PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbi1s
ZWZ0OjQwcHgiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPiQgamF2YWMgVGVz
dC5qYXZhPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OjQwcHgiPjxzcGFuIHN0
eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPmZsZXgtdGVzdC9UZXN0LmphdmE6NDogTm90ZTog
ZGV0ZWN0ZWQgZWZmZWN0aXZlbHkgZmluYWwgImR1bW15IHZhcmlhYmxlIiBpMjxicj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBpbnQgaTIgPSBpOzxicj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IF48L3NwYW4+
PC9kaXY+PGRpdj5JICp0aGluayogdGhlIGxvZ2ljIGlzIGFjY3VyYXRlIGJ1dCBpdCBjb3VsZCBw
cm9iYWJseSB1c2UgYSBxdWljayByZXZpZXcuPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+
LUFyY2hpZTxicj48L2Rpdj48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYg
ZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj5PbiBXZWQsIE9jdCAxNiwgMjAyNCBhdCA5OjEx
4oCvQU0gQXJjaGllIENvYmJzICZsdDs8YSBocmVmPSJtYWlsdG86YXJjaGllLmNvYmJzQGdtYWls
LmNvbSIgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIj5hcmNoaWUuY29iYnNAZ21haWwuY29tPC9hPiZn
dDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9
Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwy
MDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2IGRpcj0ibHRyIj48ZGl2PkhpIE1hdXJpemlv
LDxicj48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiIGNs
YXNzPSJnbWFpbF9hdHRyIj5PbiBXZWQsIE9jdCAxNiwgMjAyNCBhdCA4OjU24oCvQU0gTWF1cml6
aW8gQ2ltYWRhbW9yZSAmbHQ7PGEgaHJlZj0ibWFpbHRvOm1hdXJpemlvLmNpbWFkYW1vcmVAb3Jh
Y2xlLmNvbSIgdGFyZ2V0PSJfYmxhbmsiIG1vei1kby1ub3Qtc2VuZD0idHJ1ZSI+bWF1cml6aW8u
Y2ltYWRhbW9yZUBvcmFjbGUuY29tPC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3Rl
IGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3Jk
ZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij4KCiAg
CiAgPGRpdj4KICAgIDxkaXY+PHAgc3R5bGU9Im1hcmdpbjowcHggMHB4IDEuMmVtIj5Db3VsZCB5
b3UgY29tZSB1cAogICAgICAgIHdpdGggYSBqYXZhYyBwYXRjaCB0aGF0IGRldGVjdHMgc3VjaCDi
gJxkdW1teeKAnSB2YXJpYWJsZQogICAgICAgIGRlY2xhcmF0aW9ucyBhbmQgcHJpbnRzIGEgbm90
ZS93YXJuaW5nIGluIHRoZSBjb21waWxlciBvdXRwdXQ/PC9wPjwvZGl2PjwvZGl2PjwvYmxvY2tx
dW90ZT48ZGl2PkV4Y2VsbGVudCBpZGVhIC0gSSBhZ3JlZSB0aGlzIGlzIHNvbWV0aGluZyB3b3J0
aCBmdXJ0aGVyIGV4cGxvcmF0aW9uIHRvIGJldHRlciB1bmRlcnN0YW5kLjxicj48L2Rpdj48ZGl2
Pjxicj48L2Rpdj48ZGl2Pkkgd2lsbCB3b3JrIG9uIGl0IGFuZCByZXBvcnQgYmFjay48YnI+PC9k
aXY+PGRpdj48YnI+PC9kaXY+PGRpdj4tQXJjaGllPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2Pjwv
ZGl2PjxzcGFuIGNsYXNzPSJnbWFpbF9zaWduYXR1cmVfcHJlZml4Ij4tLSA8L3NwYW4+PGJyPjxk
aXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9zaWduYXR1cmUiPkFyY2hpZSBMLiBDb2Jiczxicj48
L2Rpdj48L2Rpdj4KPC9ibG9ja3F1b3RlPjwvZGl2PjxiciBjbGVhcj0iYWxsIj48YnI+PHNwYW4g
Y2xhc3M9ImdtYWlsX3NpZ25hdHVyZV9wcmVmaXgiPi0tIDwvc3Bhbj48YnI+PGRpdiBkaXI9Imx0
ciIgY2xhc3M9ImdtYWlsX3NpZ25hdHVyZSI+QXJjaGllIEwuIENvYmJzPGJyPjwvZGl2PgoKPC9i
bG9ja3F1b3RlPg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;"></div>
</div>
</body>
</html>