Thanks for the explanation!
I guess I missed the distinction with the accessors, but I had remembered
the 'solution' and just assumed it was appropriate when it 'worked' for
static variables and methods (not realizing the other consequences).

In any case it appears that @export does not prevent renaming on the static
members, but it seems it currently does on instance members.
If you find a solution for statics while I'm away that would be great.
--generate_exports
sounds like a possible option (for reflection and/or bindable needs) if it
works.

Otherwise I am happy to dig in when I'm back.


On Sat, Oct 1, 2016 at 8:07 AM, Alex Harui <aha...@adobe.com> wrote:

> IMO, there are two separate issues.
>
> I think Josh found that static accessors couldn't be accessed via normal
> code "ClassName.propertyName".  I ran into this for instance accessors as
> well.  The instance accessors are defined in a Object.defineProperty call
> separate from the usual ClassName.prototype.propertyName syntax.  GCC
> should be able to rename propertyName to "a" as long as it renames the
> accessor name to "a" as well, but GCC was being fooled since the accessor
> doesn't follow the standard pattern and would choose "b" instead.  I will
> have to investigate to see how I fixed this for instance accessors and see
> if similar approaches will work for static accessors.  IOW, we need to
> sync up the renaming between the accessors and the rest of the class.
>
> Reflection, IMO, is a separate issue.  I think Binding has similar issues.
>  There, we might be using dot-path string expressions and trying to find
> them, but they’ve been renamed.  SO this is either syncing up strings to
> the rename, or preventing the rename in the first place.  What we want to
> allow is for projects that don't use Reflection (and Binding) to get the
> benefits of renaming to shorter names.  Then Reflection and Binding may
> require that you make your app fatter by preventing certain renames or
> maybe we'll find a way to figure out what the rename was and change the
> string used for lookup.
>
> Hard to say what the answer will be right now.  My first move is to revert
> each change from @expose back to @export and see what breaks and if one of
> those changes makes all of those warnings go away.  Then look into new
> solutions.  See mention of the --generate_exports in [2].  It looks like
> we aren't using it, and we might make that option required for Reflection,
> although it could seriously bloat the output.
>
> -Alex
>
> [2]
> https://github.com/google/closure-compiler/wiki/
> Annotating-JavaScript-for-t
> he-Closure-Compiler
>
> On 9/30/16, 11:37 AM, "Greg Dove" <greg.d...@gmail.com> wrote:
>
> >I read that link, it's very helpful. It seems that this is going to be a
> >challenge. I suggest you revert that as you suggested.
> >
> >Josh discovered this originally for static accessors I think (the fact
> >that
> >@export does not prevent renaming on statics and @expose was the only
> >other
> >option that seemed to work). I 'rediscovered' it when I was working on
> >static bindables. Then it became obvious it also affected static variables
> >and methods when I tested for reflection.
> >
> >The advice in that note is similar to what I think you were mentioning
> >elsewhere about string access.
> >
> >"If you want a property not to be obfuscated, access it as
> >this['sample']instead of this.sample (you'll also need to fix all
> >references)." (instead of using @expose)
> >
> >Go ahead and revert that change and I can see what (if anything) I can do
> >with the above when I'm back.
> >
> >
> >
> >
> >On Sat, Oct 1, 2016 at 6:53 AM, Greg Dove <greg.d...@gmail.com> wrote:
> >
> >> Alex, @export did not work for me on any static members. You cannot
> >> reflect into the field names unless you use @expose.
> >>
> >> You can double check this via generictests reflection tests.
> >>
> >> -Greg
> >> [sent from my phone]
> >>
> >> On 1/10/2016 5:21 AM, "Alex Harui" <aha...@adobe.com> wrote:
> >>
> >>>
> >>>
> >>> On 9/29/16, 11:36 PM, "Alex Harui" <aha...@adobe.com> wrote:
> >>> >
> >>> >Now that I got rid of the circularity in Ibead/Istrand I am also
> >>>getting
> >>> a
> >>> >ton of warnings that say:
> >>> >
> >>> >  WARNING - incomplete alias created for namespace goog
> >>>
> >>> I think is is being caused by the change from @export to @expose [1]
> >>>
> >>> What was the scenario where @export wasn't working?  I'm going to
> >>>switch
> >>> things back to @export
> >>>
> >>> -Alex
> >>>
> >>> [1] https://developers.google.com/closure/compiler/docs/error-ref
> >>>
> >>>
>
>

Reply via email to