<!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>