<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <font size="4"><font face="monospace">This looks like some nice
        progress.  <br>
        <br>
        I would really like it if we had some warnings to detect more of
        the cases where `this` might escape construction, such as
        passing `this` explicitly to a method, invoking a non-final
        instance method, or invoking an instance method whose
        implementation is in a superclass.  (Same for use of `this` in
        init blocks.)  <br>
        <br>
        I think the "try" part is likely to be off the table; too
        intrusive for too little value.  <br>
        <br>
        Have you looked at the spec to see what would need to be
        adjusted?  <br>
      </font></font><br>
    <br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 10/31/2022 3:18 PM, Archie Cobbs
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:CANSoFxuww_e0rg5aE=bij5DVHPjtx6J6nDKi3Yc1gvXLb9teXA@mail.gmail.com">
      
      <div dir="ltr">
        <div dir="ltr">
          <div>This is an old thread which I've been looking at again
            lately.</div>
          <div><br>
          </div>
          <div>To summarize, the idea is to relax the JLS rules about
            code prior to super()/this() invocation to more closely
            match what the JVM allows, which is field assignments and
            any code that doesn't reference 'this'. Relevant issues are
            <a href="https://bugs.openjdk.org/browse/JDK-8194743" target="_blank" moz-do-not-send="true">JDK-8194743</a> and
            <a href="https://bugs.openjdk.org/browse/JDK-8193760" target="_blank" moz-do-not-send="true">JDK-8193760</a>.<br>
          </div>
          <div><br>
          </div>
          <div>In order to make this idea less theoretical, I've
            prototyped all the required compiler changes. There is also
            a <a href="https://urldefense.com/v3/__https://github.com/archiecobbs/jdk/blob/JDK-8193760/README-JDK-8193760.md__;!!ACWV5N9M2RV99hQ!IFOxLGBuSAtoSNYjvgWAbvbnDuMuHauJA4BIffX89H5Q_c0wG__CXaZEcL6ZG7_e_uQ6KhbytfzaMQ_YMAOcpvY$" target="_blank" moz-do-not-send="true">write-up describing
              them</a>.<br>
          </div>
          <div><br>
          </div>
          <div>There are a few interesting subtleties, e.g. relating to
            initialization blocks, and there is also a sub-question,
            which is whether to allow invoking super()/this() within a
            try block (this would have to be under the restriction that
            any catch or finally clause must not return normally).
            Currently that's not possible without a small JVM change,
            which I also think might be worth considering to really
            round out this new feature. See the writeup for details.</div>
          <div><br>
          </div>
          <div>To see some examples of what would be allowed, see <a href="https://urldefense.com/v3/__https://github.com/archiecobbs/jdk/blob/JDK-8193760/test/langtools/tools/javac/superInit/SuperInitGood.java__;!!ACWV5N9M2RV99hQ!IFOxLGBuSAtoSNYjvgWAbvbnDuMuHauJA4BIffX89H5Q_c0wG__CXaZEcL6ZG7_e_uQ6KhbytfzaMQ_YIuRHaaQ$" target="_blank" moz-do-not-send="true">this unit test</a>.
            The compiler changes are <a href="https://urldefense.com/v3/__https://github.com/openjdk/jdk/compare/master...archiecobbs:jdk:JDK-8193760__;!!ACWV5N9M2RV99hQ!IFOxLGBuSAtoSNYjvgWAbvbnDuMuHauJA4BIffX89H5Q_c0wG__CXaZEcL6ZG7_e_uQ6KhbytfzaMQ_Y-maJVCk$" target="_blank" moz-do-not-send="true">here</a>.</div>
          <br>
          <div>Thoughts?<br>
          </div>
          <div><br>
          </div>
          <div>-Archie<br>
          </div>
          <div><br>
          </div>
        </div>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Thu, Jan 17, 2019 at 8:42
            AM Brian Goetz <<a href="mailto:brian.goetz@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">brian.goetz@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">Some things have improved
            for this feature since we last talked; several verifier
            issues that this would have pushed on have been resolved. 
            So it’s moved from the “way too expensive for the benefit”
            category into the “there are lots of things we can do, is
            this really what we want to spend our effort and complexity
            budget on” category.  <br>
            <br>
            My view on this is that while there’s nothing wrong with it,
            it’s also a pretty minor wart.  If this fell out of a bigger
            feature, I’d certainly not object, but I’d rather spend the
            effort and complexity budget on things that have broader
            benefit.<br>
            <br>
            > On Jan 16, 2019, at 5:48 PM, Archie Cobbs <<a href="mailto:archie.cobbs@gmail.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">archie.cobbs@gmail.com</a>>
            wrote:<br>
            > <br>
            > I'm curious what are people's current thoughts on
            loosening the<br>
            > requirements for super() invocation in the context of
            Amber, e.g.:<br>
            > <br>
            >    public class MyInputStream extends FilterInputStream
            {<br>
            >        public MyInputStream(InputStream in) {<br>
            >            if (in == null)<br>
            >                throw new IllegalArgumentException("null
            input");<br>
            >            super(in);      // look ma!<br>
            >        }<br>
            >    }<br>
            ><br clear="all">
          </blockquote>
        </div>
        <br>
        -- <br>
        <div dir="ltr">Archie L. Cobbs<br>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>