<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    A version of javac that translates source files into class files
    that don't match the original source sounds very suspect to me.<br>
    <br>
    -- Jon<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 12/21/2015 03:47 PM, Jesse Wilson
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAME=j1=PtdkmsHuBZ20O-04Pf5OWAdVc3wFRoQUXWMSgDErn8Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div style="" class="markdown-here-wrapper">
          <p style="margin:0px 0px 1.2em!important">I’m using javac to
            build libraries that target both Android and desktop Java.
            Android is particularly sensitive to the size of the
            compiled classes. But smaller classes improves performance
            everywhere.</p>
          <p style="margin:0px 0px 1.2em!important">I’ve noticed that
            javac likes to synthesize additional members to build
            visibility trampolines for nested classes. In the compiled
            code for <a moz-do-not-send="true"
              href="https://github.com/square/okhttp/">OkHttp</a>,
            nearly 10% of the method references are synthetic!</p>
          <p style="margin:0px 0px 1.2em!important">I’m tempted to
            create a classfile rewriter to remove these synthetic
            members. It’d have to promote some <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">private</code>
            things to <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">package-private</code>
            to make the synthetic things unnecessary.</p>
          <p style="margin:0px 0px 1.2em!important">One alternative to
            classfile magic would be a new javac flag like <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">--avoid-synthetic-members</code>.
            Such a flag would change <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">private</code>
            members to <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">package-private</code>
            when those members were accessed by nested classes. The
            compiled code would be smaller, run faster, and have less
            weird garbage in the stack traces.</p>
          <p style="margin:0px 0px 1.2em!important">Are javac
            maintainers receptive to a patch that adds such a flag?
            What’s the process of turning this proposal into a feature?</p>
          <p style="margin:0px 0px 1.2em!important">Thanks.<br>
            Jesse Wilson</p>
          <div
title="MDH:PGRpdj5J4oCZbSB1c2luZyBqYXZhYyB0byBidWlsZCBsaWJyYXJpZXMgdGhhdCB0YXJnZXQgYm90aCBBbmRyb2lkIGFuZCBkZXNrdG9wIEphdmEuIEFuZHJvaWQgaXMgcGFydGljdWxhcmx5IHNlbnNp
dGl2ZSB0byB0aGUgc2l6ZSBvZiB0aGUgY29tcGlsZWQgY2xhc3Nlcy4gQnV0IHNtYWxsZXIgY2xh
c3NlcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBldmVyeXdoZXJlLjxicj48YnI+PC9kaXY+PGRpdj5J
4oCZdmUgbm90aWNlZCB0aGF0IGphdmFjIGxpa2VzIHRvIHN5bnRoZXNpemUgYWRkaXRpb25hbCBt
ZW1iZXJzIHRvIGJ1aWxkIHZpc2liaWxpdHkgdHJhbXBvbGluZXMgZm9yIG5lc3RlZCBjbGFzc2Vz
LiBJbiB0aGUgY29tcGlsZWQgY29kZSBmb3IgW09rSHR0cF0oaHR0cHM6Ly9naXRodWIuY29tL3Nx
dWFyZS9va2h0dHAvKSwgbmVhcmx5IDEwJSBvZiB0aGUgbWV0aG9kIHJlZmVyZW5jZXMgYXJlIHN5
bnRoZXRpYyE8YnI+PGJyPjwvZGl2PjxkaXY+SeKAmW0gdGVtcHRlZCB0byBjcmVhdGUgYSBjbGFz
c2ZpbGUgcmV3cml0ZXIgdG8gcmVtb3ZlIHRoZXNlIHN5bnRoZXRpYyBtZW1iZXJzLiBJdOKAmWQg
aGF2ZSB0byBwcm9tb3RlIHNvbWUgYHByaXZhdGVgIHRoaW5ncyB0byBgcGFja2FnZS1wcml2YXRl
YCB0byBtYWtlIHRoZSBzeW50aGV0aWMgdGhpbmdzIHVubmVjZXNzYXJ5Ljxicj48YnI+PC9kaXY+
PGRpdj5PbmUgYWx0ZXJuYXRpdmUgdG8gY2xhc3NmaWxlIG1hZ2ljIHdvdWxkIGJlIGEgbmV3IGph
dmFjIGZsYWcgbGlrZSBgLS1hdm9pZC1zeW50aGV0aWMtbWVtYmVyc2AuIFN1Y2ggYSBmbGFnIHdv
dWxkIGNoYW5nZSBgcHJpdmF0ZWAgbWVtYmVycyB0byBgcGFja2FnZS1wcml2YXRlYCB3aGVuIHRo
b3NlIG1lbWJlcnMgd2VyZSBhY2Nlc3NlZCBieSBuZXN0ZWQgY2xhc3Nlcy4gVGhlIGNvbXBpbGVk
IGNvZGUgd291bGQgYmUgc21hbGxlciwgcnVuIGZhc3RlciwgYW5kIGhhdmUgbGVzcyB3ZWlyZCBn
YXJiYWdlIGluIHRoZSBzdGFjayB0cmFjZXMuPGJyPjxicj48L2Rpdj48ZGl2PkFyZSBqYXZhYyBt
YWludGFpbmVycyByZWNlcHRpdmUgdG8gYSBwYXRjaCB0aGF0IGFkZHMgc3VjaCBhIGZsYWc/IFdo
YXTigJlzIHRoZSBwcm9jZXNzIG9mIHR1cm5pbmcgdGhpcyBwcm9wb3NhbCBpbnRvIGEgZmVhdHVy
ZT88YnI+PGJyPjwvZGl2PjxkaXY+VGhhbmtzLjxicj48L2Rpdj48ZGl2Pkplc3NlIFdpbHNvbjxi
            cj48YnI+PC9kaXY+"
style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>