Sounds good.


Will you be addressing code-hinting issues?



From: Alex Harui<mailto:aha...@adobe.com>
Sent: Monday, December 5, 2016 8:50 PM
To: dev@flex.apache.org<mailto:dev@flex.apache.org>
Subject: [FALCONJX][FLEXJS} SWF Subclass (and other) Overrides



Hi,

I just pushed changes to allow certain kinds of overrides in SWF that
normally aren't possible.  The reasoning behind doing this is to allow us
to have a library that extends SWF classes like Sprite but hide the flash
APIs.

For example, in Sprite, the parent property is defined as a
flash.display.DisplayObjectContainer.  In FlexJS, we would much rather use
a non-Flash API like org.apache.flex.core.IParent, so a parent can be
platform-agnostic.  Similarly, the dispatchEvent API takes a
flash.events.Event and it would be better to have it take an
org.apache.flex.events.Event, or maybe an
org.apache.flex.events.IFlexJSEvent.

So, in our base classes, we would want to write:

   override public function get parent():IParent

And

   override public function
dispatchEvent(event:org.apache.flex.events.Event):Boolean

But not only would the SWF compiler not allow that, the Flash runtime
checks the type of any override at runtime and reports an error if there
isn't a match (and such an issue would not be caught by the JS runtime).

So to get this all to work, the compiler needs to know that certain
type-mismatches are allowed, and also to restore the type to the original
type in the SWF.  To do so, I taught the compiler to look for a
SWFOverride metadata that provides the original types for parameters or
return values.  When the compiler sees a mismatch, it checks for metadata
allowing the mismatch.  And when writing out the SWF, it also checks for
the metadata and replaces the types in the ABC traits.  So far, in minimal
testing, it seems to work.

Next up, after fixing a bunch of bugs in the queue, is to work on having
the compiler generate both SWF and JS output in a single run.  Then with
proper overriding of various Flash APIs, we should be able to provide a
more efficient way for FlexJS developers to see any conflicts with
underlying platform implementations without having to wrap every
implementation.

Later,
-Alex

Reply via email to