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 > >