Off the top of my head, [Frame] and [SWF] are also used to change compiler
output. I can see how it's a little weird that some metadata is used at
compile-time and some at runtime, but as a developer, I think it's really
useful.

Anyway, if it's an asdoc tag that FalconJX will preserve to configure the
Closure compiler, it seems like a reasonable approach to me.

- Josh

On Mon, Dec 12, 2016 at 9:39 AM, Alex Harui <aha...@adobe.com> wrote:

>
>
> On 12/12/16, 9:13 AM, "Josh Tynjala" <joshtynj...@gmail.com> wrote:
>
> >Yeah, if we could make it work without creating a SWC, I think that would
> >be ideal. The fewer steps it takes to add third-party libraries to a
> >project, the better.
> >
> >I notice that you seem to have a preference for custom ASDoc tags, like
> >@externs or @flexjsignorecoercion for changing the compiler's behavior.
> >Why
> >not metadata, like [Extern] or [IgnoreCoercion], instead? Personally,
> >using
> >ASDoc tags for something other than documentation doesn't feel quite right
> >to me. Metadata has long been used to pass extra information to the
> >compiler, though. Plus, if something needs more complex configuration,
> >metadata is more like setting properties on an object:
> >[Metadata(option1="true",option2="hello world")]. I've been meaning to
> ask
> >you about this for a while, but I kept forgetting.
>
> I tend to offer up custom ASDoc tags as compiler directives because Google
> Closure Compiler uses a similar JSDoc tag set in a similar way.  It
> controls the output and doesn't always need to be kept around after the
> compile.
>
> IIRC, the compiler and runtime teams thought Metadata was an overused
> mess.  It has several inconsistent uses.  I think only [Bindable] actually
> is a compiler directive that alters the compiler output.  Other metadata
> is used by MXML and IDEs to declare events and styles but doesn't alter
> the byte code of the class it annotates other than being stored in the SWC
> and deleted from the final SWF.  All other metadata, including Bindable,
> are annotations stored in the code for use by the code, where it is
> hard.slow to access in Flash.
>
> @externs could be [Externs] since it is needed after compile time, but I
> can't think of a good reason to store it in the byte code.  It isn't
> needed by MXML, IDEs, or at runtime, and has to appear in the JSDoc output
> so the Google Closure Compiler can use it.
>
> Of course, I could be convinced otherwise...
> -Alex
>
>

Reply via email to