I've seen GCC not track renames before.  The Object.defineProperty is just
a data structure and doesn't add to the set of APIs for a class definition.

I just realized that the class names are used by SimpleCSSValuesImpl to
determine the type selectors.  So if you rename those strings you will
have to change your CSS.

Also, I have not removed the exportSymbol calls on each class yet.  I will
try that as well.

-Alex


On 8/9/17, 2:11 PM, "Harbs" <harbs.li...@gmail.com> wrote:

>
>> On Aug 9, 2017, at 11:56 PM, Alex Harui <aha...@adobe.com.INVALID>
>>wrote:
>> 
>> The change I just made should only be for MXML.  But I think I saw that
>>I
>> never did remove the @export for getters and setters in AS.  However,
>> doing so would probably break MXML setting of those properties.
>> 
>> I don't think you can tell when compiling a SWC which properties someone
>> is going to use from MXML, so I'm not sure passing through @export or
>> somehow marking certain APIs as "don't rename" is going to be useful.
>
>It would be useful for client code because I do know which properties my
>MXML will use.
>
>> On
>> the other hand, MXML does know every property that you accessed from
>>MXML
>> so maybe that's what I'll try next.  I think I see an API in GCC where
>>you
>> can tell it things that shouldn't be renamed.
>
>That sounds interesting.
>
>> IMO, this is a bug or missing capability in GCC.  They don't see
>> Object.defineProperties as part of the class definition so they don't
>> track the renames properly.  So, removing @exports from getters in AS
>>may
>> also just fail in calls from other AS classes.
>
>I lost you. Where did you see that GCC doesn’t track the definitions?
>
>> Regarding obfuscation, if we have to export getters, is that really
>> exposing important secrets?
>
>Not sure, but I’d like to keep the code as difficult to follow as
>possible.
>
>> The actual code for a getter/setter is
>> elsewhere in the output file.  It might be possible to do string
>> replacement on the exported names after the minification.
>
>String replacement is definitely an option if it comes to that. I’m
>probably going to do that for class names and paths as I don’t really see
>that we currently have a solution for that.
>
>> Thoughts?
>> -Alex
>> 
>> On 8/9/17, 1:24 PM, "Harbs" <harbs.li...@gmail.com> wrote:
>> 
>>> I just compiled with the new option and it appears to work. Yay. On the
>>> other hand, only functions and variables are being minified. getters
>>>and
>>> setters (which is a very large percentage of the signature of my code)
>>>is
>>> not.
>>> 
>>> It looks like that adds the @exports for non-mxml files as well. Can we
>>> output the @exports for only MXML declared variables?
>>> 
>>> If a comment with @export is added in AS code, will that be passed
>>> through to the JS output?
>>> 
>>> If yes, I think @exporting ids declared in MXML should be the only case
>>> we need. I can probably handle any specific cases where that might
>>>break
>>> output code by manually inserting @export statements.
>>> 
>>>> On Aug 9, 2017, at 10:20 PM, Alex Harui <aha...@adobe.com.INVALID>
>>>> wrote:
>>>> 
>>>> Hmm.  I thought GCC didn't rename those.  Anyway, I added back the
>>>> @export.  See if that works for you and then see if you think there is
>>>> enough obfuscation.
>>>> 
>>>> Thanks,
>>>> -Alex
>>>> 
>>>> On 8/9/17, 12:45 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>> 
>>>>> The problem is as follows:
>>>>> 
>>>>> Taking textInput as an example, the MXML gets compiled into the
>>>>> following:
>>>>> textInput: {
>>>>>  /** @this {com.printui.view.components.PaletteSlider} */
>>>>>  get: function() {
>>>>>    return this.textInput_;
>>>>>  },
>>>>>  /** @this {com.printui.view.components.PaletteSlider} */
>>>>>  set: function(value) {
>>>>>    if (value != this.textInput_) {
>>>>>      this.textInput_ = value;
>>>>> 
>>>>> 
>>>>> 
>>>>>this.dispatchEvent(org.apache.flex.events.ValueChangeEvent.createUpdat
>>>>>eE
>>>>> ve
>>>>> nt(this, 'textInput', null, value));
>>>>>    }
>>>>>  }
>>>>> },
>>>>> 
>>>>> which gets minified to this:
>>>>> 
>>>>> 
>>>>> 
>>>>>yw:{get:r('Nja'),set:function(a){a!=this.Nja&&(this.Nja=a,this.dispatc
>>>>>hE
>>>>> ve
>>>>> nt(yR(this,iI,null,a)))}}
>>>>> 
>>>>> goog has no way of knowing that the original textInput property name
>>>>>is
>>>>> used anywhere so all references to textInput are changed to yw.
>>>>> 
>>>>> I think the solution to this is to add @export tags to the
>>>>> Object.defineProperty specification for any property that’s declared
>>>>>or
>>>>> used in the MXML.
>>>>> 
>>>>> If localId is used, there might be another option which would be to
>>>>> rename the id to some value that’s one or two characters long. I’m
>>>>> pretty
>>>>> sure that goog will not rename really short property names like that.
>>>>> (We
>>>>> can’t do that for id because it might be used by CSS.)
>>>>> 
>>>>> Harbs
>>>>> 
>>>>>> On Aug 9, 2017, at 10:25 AM, Harbs <harbs.li...@gmail.com> wrote:
>>>>>> 
>>>>>> Here’s a problem I ran into:
>>>>>> 
>>>>>> I have a component which has the following:
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpast
>>>>>>e.
>>>>>> ap
>>>>>> 
>>>>>> 
>>>>>>ache.org%2FcN1T&data=02%7C01%7C%7C5b5c51c82fc94c95d9d408d4defa99bb%7C
>>>>>>fa
>>>>>> 7b
>>>>>> 
>>>>>> 
>>>>>>1b5a7b34438794aed2c178decee1%7C0%7C0%7C636378615292281524&sdata=FPaam
>>>>>>WR
>>>>>> Ac
>>>>>> t5HAYakAZnFzT8biHOT%2F%2F0%2BCFlY32%2BvZtg%3D&reserved=0
>>>>>> 
>>>>>> 
>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpas
>>>>>>te
>>>>>> .a
>>>>>> 
>>>>>> 
>>>>>>pache.org%2FcN1T&data=02%7C01%7C%7C5b5c51c82fc94c95d9d408d4defa99bb%7
>>>>>>Cf
>>>>>> a7
>>>>>> 
>>>>>> 
>>>>>>b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636378615292281524&sdata=FPaa
>>>>>>mW
>>>>>> RA
>>>>>> ct5HAYakAZnFzT8biHOT%2F%2F0%2BCFlY32%2BvZtg%3D&reserved=0>
>>>>>> 
>>>>>> In the script block I have references to disableBead, textInput,
>>>>>>etc.
>>>>>> 
>>>>>> The instance correctly has properties of disableBead, textInput,
>>>>>>etc.,
>>>>>> but every reference to these properties is renamed.
>>>>>> 
>>>>>> textInput.addEventListener
>>>>>> becomes:
>>>>>> this.yw.addEventListener
>>>>>> 
>>>>>> disableBead.disabled
>>>>>> becomes
>>>>>> this.Jm.disabled
>>>>>> 
>>>>>> etc.
>>>>>> 
>>>>>> this.yw and this.Jm are both undefined
>>>>>> 
>>>>>>> On Aug 9, 2017, at 9:10 AM, Harbs <harbs.li...@gmail.com
>>>>>>> <mailto:harbs.li...@gmail.com>> wrote:
>>>>>>> 
>>>>>>> I’ll give it a go and see.
>>>>>>> 
>>>>>>>> On Aug 9, 2017, at 8:31 AM, Alex Harui <aha...@adobe.com.INVALID
>>>>>>>> <mailto:aha...@adobe.com.INVALID>> wrote:
>>>>>>>> 
>>>>>>>> I don't think getters and setters get renamed because they are
>>>>>>>>keys
>>>>>>>> in the
>>>>>>>> Object.defineProperties data structure.  I'm wondering if that
>>>>>>>>will
>>>>>>>> be
>>>>>>>> enough obfuscation for you or not.
>>>>>>>> 
>>>>>>>> -Alex
>>>>>>>> 
>>>>>>>> On 8/8/17, 10:22 PM, "Harbs" <harbs.li...@gmail.com
>>>>>>>> <mailto:harbs.li...@gmail.com>> wrote:
>>>>>>>> 
>>>>>>>>> I have a custom component “A” which implements a DisabledBead in
>>>>>>>>> ActionScript. It has a getter called “enabled”.
>>>>>>>>> 
>>>>>>>>> I have another MXML file “B” which uses the component and
>>>>>>>>>specifies
>>>>>>>>> enabled=“false”.
>>>>>>>>> 
>>>>>>>>> I’m assuming the “enabled” property in “A” will be renamed
>>>>>>>>>without
>>>>>>>>> an
>>>>>>>>> @export.
>>>>>>>>> 
>>>>>>>>> The mxml in “B” will still be using a string for the property
>>>>>>>>>name
>>>>>>>>> which
>>>>>>>>> will be “enabled” that will be undefined.
>>>>>>>>> 
>>>>>>>>>> On Aug 9, 2017, at 7:55 AM, Alex Harui <aha...@adobe.com.INVALID
>>>>>>>>>> <mailto:aha...@adobe.com.INVALID>> wrote:
>>>>>>>>>> 
>>>>>>>>>> I just tried DataBindingExample.  MyInitialView is essentially a
>>>>>>>>>> custom
>>>>>>>>>> component.  What are you thinking won't work?
>>>>>>>>>> 
>>>>>>>>>> -Alex
>>>>>>>>>> 
>>>>>>>>>> On 8/8/17, 2:30 PM, "Harbs" <harbs.li...@gmail.com
>>>>>>>>>> <mailto:harbs.li...@gmail.com>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Did you try MXML with custom components? I’m not sure I
>>>>>>>>>>> understand
>>>>>>>>>>> how
>>>>>>>>>>> that would work.
>>>>>>>>>>> 
>>>>>>>>>>>> On Aug 9, 2017, at 12:01 AM, Alex Harui
>>>>>>>>>>>> <aha...@adobe.com.INVALID
>>>>>>>>>>>> <mailto:aha...@adobe.com.INVALID>>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> Some things I found were that MXML isn't a problem because the
>>>>>>>>>>>> id
>>>>>>>>>>>> maps
>>>>>>>>>>>> to
>>>>>>>>>>>> a getter/setter which maps to Object.DefineProperty which
>>>>>>>>>>>>takes
>>>>>>>>>>>> an
>>>>>>>>>>>> object
>>>>>>>>>>>> structure where the ids are keys so they don't get renamed.
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>

Reply via email to