<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Hi Remi,<br>
    <br>
    <blockquote type="cite" cite="mid:706701775.34009775.1698178842416.JavaMail.zimbra@univ-eiffel.fr">
      <div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000">
        <div data-marker="__QUOTED_TEXT__">
          <div>Hello Vincente,<br data-mce-bogus="1">
          </div>
          <div>thanks for fixing that issue, for the anecdote, this
            issue was found doing mob programming [1] with my students.<br data-mce-bogus="1">
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    interesting :)<br>
    <br>
    <blockquote type="cite" cite="mid:706701775.34009775.1698178842416.JavaMail.zimbra@univ-eiffel.fr">
      <div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000">
        <div data-marker="__QUOTED_TEXT__">
          <div>I think next week, we will study how the regression was
            introduced and and how you and Maurizio fix it :)<br data-mce-bogus="1">
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    :) this could be considered as software archeology<br>
    <br>
    <blockquote type="cite" cite="mid:706701775.34009775.1698178842416.JavaMail.zimbra@univ-eiffel.fr">
      <div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000">
        <div data-marker="__QUOTED_TEXT__">
          <div><br data-mce-bogus="1">
          </div>
          <div>Rémi<br data-mce-bogus="1">
          </div>
          <div>[1] <a href="https://urldefense.com/v3/__https://en.wikipedia.org/wiki/Team_programming*Mob_programming__;Iw!!ACWV5N9M2RV99hQ!IqPY8L_FXrpGemBiKCbKjreCUO-icqhonFtyho2_ZUbn2rwFvsK3tI_OePWXLwuRJkV5mOxpJJsji1wXT0y1Ww$" moz-do-not-send="true">https://en.wikipedia.org/wiki/Team_programming#Mob_programming</a><br data-mce-bogus="1">
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Say hello to your students :),<br>
    Vicente<br>
    <br>
    <blockquote type="cite" cite="mid:706701775.34009775.1698178842416.JavaMail.zimbra@univ-eiffel.fr">
      <div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000">
        <div data-marker="__QUOTED_TEXT__">
          <div><br data-mce-bogus="1">
          </div>
          <blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><br>
            <br>
            <div class="moz-cite-prefix">On 10/16/23 11:46, Vicente
              Romero wrote:<br>
            </div>
            <blockquote cite="mid:a4a85d7f-e8df-4f3b-8a3e-b9f0bbe714d3@oracle.com">
              Thanks for the report, we have created [1]. I'm taking a
              look at it,<br>
              <br>
              Vicente<br>
              <br>
              [1] <span style="font-family:"Aptos",sans-serif"><a href="https://bugs.openjdk.org/browse/JDK-8318160" class="moz-txt-link-freetext" target="_blank" moz-do-not-send="true">https://bugs.openjdk.org/browse/JDK-8318160</a></span><br>
              <br>
              <div class="moz-cite-prefix">On 10/16/23 07:15, Maurizio
                Cimadamore wrote:<br>
              </div>
              <blockquote cite="mid:c1fbee53-765a-441e-92b3-d39b5709cb06@oracle.com">
                <p>I recall fixing this a long time ago:</p>
                <p><br>
                </p>
                <p><a class="moz-txt-link-freetext" href="https://bugs.openjdk.org/browse/JDK-6711619" target="_blank" moz-do-not-send="true">https://bugs.openjdk.org/browse/JDK-6711619</a><br data-mce-bogus="1">
                </p>
                <p><br>
                </p>
                <p>Now, the test case mentioned in that bug is still
                  correctly rejected by javac. Furhermore, a similar
                  test:</p>
                <p><br>
                  ```<br>
                  class X<E extends X<E>> {<br>
                               private static int m() { return 1; }<br>
                               int f() {<br>
                                       return E.m();<br>
                               }<br>
                      }<br>
                  ```<br>
                </p>
                <p><br>
                </p>
                <p>Also fails to compile with 21/22.</p>
                <p><br>
                </p>
                ```<br>
                Test.java:5: error: m() has private access in X<br>
                                     return E.m();<br>
                                             ^<br>
                1 error<br>
                <p>```</p>
                <p><br>
                </p>
                <p>Trying to manipulate Remi's example, it seems the
                  regression only has to do with method refreences whose
                  receiver is a type variable.<br>
                </p>
                <p><br>
                </p>
                <p>Here's a minimal reproducer:</p>
                <p><br>
                </p>
                <p>```<br>
                  import java.util.function.*;<br>
                  <br>
                  class Test {<br>
                    private String asString() {<br>
                      return "bar";<br>
                    }<br>
                  <br>
                    static <T extends Test> Function<T,
                  String> foo() {<br>
                      return T::asString;<br>
                    }<br>
                  }<br>
                  ```</p>
                <p>I filed a bug:</p>
                <p><br>
                </p>
                <p><a class="moz-txt-link-freetext" href="https://bugs.openjdk.org/browse/JDK-6711619" target="_blank" moz-do-not-send="true">https://bugs.openjdk.org/browse/JDK-6711619</a><br data-mce-bogus="1">
                </p>
                <p><br>
                </p>
                <p>Thanks<br>
                  Maurizio<br>
                </p>
                <p><br>
                </p>
                <div class="moz-cite-prefix">On 16/10/2023 10:40,
                  Sundararajan Athijegannathan wrote:<br>
                </div>
                <blockquote cite="mid:DM6PR10MB29541241C314FCEEA2C7B32FEAD7A@DM6PR10MB2954.namprd10.prod.outlook.com">
                  <div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof"> fwiw, this compile from at
                    least JDK 11 onwards:</div>
                  <div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof"> <br>
                  </div>
                  <div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0"> import
                    java.util.*;
                    <div class="ContentPasted0">import
                      java.util.stream.*;</div>
                    <div><br class="ContentPasted0">
                    </div>
                    <div class="ContentPasted0">public class
                      TDotToString {</div>
                    <div class="ContentPasted0">  class Bar {</div>
                    <div class="ContentPasted0">    private String
                      asString() {</div>
                    <div class="ContentPasted0">      return "bar";</div>
                    <div class="ContentPasted0">    }</div>
                    <div class="ContentPasted0">  }</div>
                    <div><br class="ContentPasted0">
                    </div>
                    <div class="ContentPasted0">  static <T extends
                      Bar> String foo(List<T> list) {</div>
                    <div class="ContentPasted0">    return
                      list.stream().map(T::asString).collect(Collectors.joining());</div>
                    <div class="ContentPasted0">  }</div>
                    }<br>
                  </div>
                  <div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0"> <br>
                  </div>
                  <div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0"> javac from
                    1.8.0 does issue error as mentioned by Remi.</div>
                  <div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0"> <br>
                  </div>
                  <div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0"> <br>
                  </div>
                  <div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0"> -Sundar</div>
                  <hr style="display:inline-block;width:98%">
                  <div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>From:</b> compiler-dev <a class="moz-txt-link-rfc2396E" href="mailto:compiler-dev-retn@openjdk.org" target="_blank" moz-do-not-send="true"><compiler-dev-retn@openjdk.org></a>
                      on behalf of Remi Forax <a class="moz-txt-link-rfc2396E" href="mailto:forax@univ-mlv.fr" target="_blank" moz-do-not-send="true"><forax@univ-mlv.fr></a><br>
                      <b>Sent:</b> 16 October 2023 13:57<br>
                      <b>To:</b> compiler-dev <a class="moz-txt-link-rfc2396E" href="mailto:compiler-dev@openjdk.org" target="_blank" moz-do-not-send="true"><compiler-dev@openjdk.org></a><br>
                      <b>Subject:</b> Regression: accessing a private
                      method through a type variable</font>
                    <div> </div>
                  </div>
                  <div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
                        <div class="PlainText">Hello,<br>
                          There is a regression in recent versions of
                          javac.<br>
                          javac 21 allows to access a private method
                          through a type variable, here T::asString.<br>
                          <br>
                          public class TDotToString {<br>
                            class Bar() {<br>
                              private String asString() {<br>
                                return "bar";<br>
                              }<br>
                            }<br>
                          <br>
                            static <T extends Bar> String
                          foo(List<T> list) {<br>
                              return
                          list.stream().map(T::asString).collect(Collectors.joining());<br>
                            }<br>
                          }<br>
                          <br>
                          Both IntelliJ and Eclipse emit an error in
                          this case.<br>
                          <br>
                          And javac 8 emits<br>
                            TDotToString.java:12: error: invalid method
                          reference<br>
                              return
                          list.stream().map(T::asString).collect(Collectors.joining());<br>
                                                       ^<br>
                            cannot find symbol<br>
                              symbol:   method asString()<br>
                              location: bound of type variable T<br>
                            where T is a type-variable:<br>
                              T extends TDotToString.Bar declared in
                          method <T>foo(List<T>)<br>
                          1 error<br>
                          <br>
                          regards,<br>
                          Rémi<br>
                        </div>
                      </span></font></div>
                </blockquote>
              </blockquote>
              <br>
            </blockquote>
            <br>
            <br>
          </blockquote>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>