On 10/5/16, 10:43 AM, "Harbs" <harbs.li...@gmail.com> wrote:

>I have not been following this discussion very well, so I’m not sure I
>got the issue, but will this prevent optimization of minimized code which
>accesses static properties?

I think I have discovered that static getters/setters were never getting
renamed anyway.  That's because if you have:

  public class Foo {
    public static function get bar():String

It becomes:

  Object.defineProperty(Foo, { bar : function ... }

And thus "bar" is a key in an Object and GCC doesn't try to rename those.

Josh tried using @expose, which also prevented renaming as well, but we
want to avoid using deprecated jsdoc tags.

So, I think the final minified code in js-release is the same whether we
are using @expose or this proposed change, but if you work with the
js-debug code you will see:

  Foo["bar"]

instead of

  Foo.bar

FWIW, with just plain @export, the problem is that when setting up the
renamed list for a class, GCC seems to only look at the code that looks
like:

  /**
   * @type {string}
   */
  Foo.someOtherStaticProperty;

and doesn't understand the Object.defineProperty call, so it doesn't think
there is a "bar" property on Foo at all.  So then, it optimizes

  Foo.bar

to just a global like:

  xx

HTH,
-Alex

Reply via email to