Hi

Not sure that I fully understand this but would a valid compromise be something 
where the field name isn't renamed at all automatically, but we just change it 
in the JS generation code to be "i" rather than "interfaces", and update the 
Language is/as functions to work with this property name? Not sure whether it 
would work and I don't know whether the Reflection stuff would then need to 
change too, but if this is all in the generated outputs and/or the framework's 
own code then it shouldn't be something that the end user would bother about..

thanks

   Andrew


-----Original Message-----
From: Alex Harui [mailto:aha...@adobe.com.INVALID] 
Sent: 11 December 2018 08:32
To: dev@royale.apache.org
Subject: [EXTERNAL] ROYALE_CLASS_INFO, renaming, modules, Objects

I spent some time today trying to get Tour De Flex to run in production mode 
with the main app and modules being separately minified.

I've fixed a few things here and there, but an interesting issue I ran into has 
to do with the plain object we use in ROYALE_CLASS_INFO (and will apply to 
other objects).

The ROYALE_CLASS_INFO is generated on each class and has a "names" property and 
an optional "interfaces" property.  An example is:

org.apache.royale.html.beads.models.PanelModel.prototype.ROYALE_CLASS_INFO = { 
names: [{ name: 'PanelModel', qName: 
'org.apache.royale.html.beads.models.PanelModel', kind: 'class' }], interfaces: 
[org.apache.royale.core.IBead, org.apache.royale.core.IPanelModel] };

Because the field names are not quoted, then in most output, the field name 
"interfaces" is renamed and all code referencing this field is renamed as well. 
 This is good because it means that you don't have to download the word 
"interfaces" once per-class. Instead of 10 characters, it is usually one or 
two.  100 classes saves you about 900 bytes.

However, it turns out that in Tour De Flex, the main app uses Reflection and 
Reflection uses a quoted 'interfaces' string and thus, the field name 
'interfaces' in ROYALE_CLASS_INFO isn't renamed, but in most modules 
"interfaces" is renamed since no other code in the module has a quoted string 
for 'interfaces'.  But that means that when a module loads, the Language.is/as 
won't work since classes in the main app are using "interfaces" but the classes 
in the module are using some short name.

One solution is to always quote that field in the compiler output and Language 
is/as so it doesn't get renamed, but that means that field will never get 
renamed and you lose saving those bytes.

Another is let folks figure out their own workarounds, by adding some code that 
will prevent the renaming in the modules.

Other ideas are welcome.  I'm done for tonight.

Thoughts?
-Alex

Reply via email to