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