Thanks, Erik. Interesting read. FlexJS uses a lot of interfaces so we'll have to find a reasonable solution for this. We've managed to avoid the situation in JavaScript but it is coming up quickly.
--peter On 10/30/13 3:10 PM, "Erik de Bruin" <e...@ixsoftware.nl> wrote: >Some guidance can be found here [1] and here [2]. > >EdB > >1: >http://blogs.adobe.com/bparadie/2011/11/26/classes-inheritance-interfaces- >packages-and-namespaces/ >2: >https://cwiki.apache.org/confluence/display/FLEX/Simulating+AS3+language+f >eatures+in+JavaScript+using+AMD+and+ES5 > > > >On Wed, Oct 30, 2013 at 8:07 PM, Erik de Bruin <e...@ixsoftware.nl> wrote: >> "instanceof" doesn't check if an interface is implemented, neither in >> Flex nor using Closure inheritance in JavaScript. What we need for >> runtime checking of interface implementation is an global "is" >> function... I think I taught FalconJx to translate "ClassA is ClassB" >> as "is(ClassA, ClassB)". All we need to do now is to implement a >> global "is()" function and somehow teach the compiler to keep track of >> which classes implement which interfaces - all the way up the chain >> and sideways (interfaces can implement interfaces). >> >> EdB >> >> >> >> On Wed, Oct 30, 2013 at 6:34 PM, Alex Harui <aha...@adobe.com> wrote: >>> Reviving this thread... >>> >>> Peter says he wants to test to see if an object implements an >>>interface at >>> runtime. What mechanism do we want to use? >>> >>> I don't think we need to make instanceof work, just have some test to >>>call. >>> >>> -Alex >>> >>> On 7/30/13 12:46 AM, "Erik de Bruin" <e...@ixsoftware.nl> wrote: >>> >>>>When using interfaces for type checking, there are two 'kinds': at >>>>compilation and at runtime. >>>> >>>>The @interface and @implements annotations are for compile time >>>>checking. >>>> >>>>For runtime checking comes in two flavours: 'instanceof' and 'is'. >>>> >>>>Our method of setting up inheritance (goog.inherits) maintains the >>>>inheritance chain, so 'instanceof' works out of the box. >>>> >>>>The work starts with 'is'. We want to story the 'extends' and >>>>'implements' metadata from AS in the JS classes and create a method to >>>>test against that metadata set. I have a pretty good idea on how to >>>>implement such a beast, but it will require some (ha!) tinkering with >>>>the FlexJS JS framework and FalconJx. That will take some time... >>>> >>>>EdB >>>> >>>> >>>> >>>>On Mon, Jul 29, 2013 at 9:17 PM, OmPrakash Muppirala >>>><bigosma...@gmail.com> wrote: >>>>> On Mon, Jul 29, 2013 at 11:20 AM, Alex Harui <aha...@adobe.com> >>>>>wrote: >>>>> >>>>>> I think FalconJS was going to generate something like: >>>>>> >>>>>> if (child != undefined && >>>>>> child.$implements["org.apache.flex.core.IChrome"]) >>>>>> >>>>>> Not sure what it was going to do for classes, maybe chase the >>>>>>prototype >>>>>> chain? >>>>>> >>>>>> The other thing that occurred to me about $implements or >>>>>>child.is(IChrome) >>>>>> is that all objects must then have these properties or functions >>>>>>where >>>>>>the >>>>>> global function could work out of a central database that doesn't >>>>>>decorate >>>>>> the classes. >>>>>> >>>>>> I don't have a strong opinion either way right now. >>>>>> >>>>>> -Alex >>>>>> >>>>> >>>>> From all my research on Closure's @implements handling, it seems like >>>>>there >>>>> should be at least one method/member in the @interface. So how will >>>>>it >>>>> handle 'Marker Interfaces', i.e. interfaces which have no methods. >>>>> >>>>> IChrome - which we have been discussing in the other thread is this >>>>>kind of >>>>> an interface. It is used to just mark an object so it can be used >>>>>for >>>>>type >>>>> checking. >>>>> >>>>> Is this possible with Closure? Sorry, I have not set up to Closure >>>>> properly on my machine. Can one of you try this out to see if it is >>>>> possible? >>>>> >>>>> Thanks, >>>>> Om >>>>> >>>>> >>>>>> >>>>>> On 7/29/13 10:49 AM, "Kessler CTR Mark J" >>>>>><mark.kessler....@usmc.mil> >>>>>> wrote: >>>>>> >>>>>> >Looking on it a second time, I guess you have to test it exists in >>>>>>there >>>>>> >for both, so maybe it's a moot issue. >>>>>> > >>>>>> >-Mark >>>>>> > >>>>>> >-----Original Message----- >>>>>> >From: Kessler CTR Mark J [mailto:mark.kessler....@usmc.mil] >>>>>> >Sent: Monday, July 29, 2013 1:43 PM >>>>>> >To: dev@flex.apache.org >>>>>> >Subject: RE: [FlexJS] Handling chrome elements >>>>>> > >>>>>> > I've gotten used to being able to do Type checks with "is". It >>>>>>also >>>>>> >stands out as a different format visually. I think the only >>>>>>problem >>>>>> >with that change is, the child couldn't be null/undefined. It >>>>>>would >>>>>>have >>>>>> >to be able to run that method. Whereas the current "is" can >>>>>>compare >>>>>>the >>>>>> >datatype with it being null/undefined. >>>>>> > >>>>>> > >>>>>> >-Mark >>>>>> > >>>>>> >-----Original Message----- >>>>>> >From: Erik de Bruin [mailto:e...@ixsoftware.nl] >>>>>> >Sent: Monday, July 29, 2013 12:59 PM >>>>>> >To: dev@flex.apache.org >>>>>> >Subject: Re: [FlexJS] Handling chrome elements >>>>>> > >>>>>> >Ah, the "is" issue. >>>>>> > >>>>>> >We don't seem to be able to get out from under a 'helper' method >>>>>>(or >>>>>> >whatever the term-du-jour is for that thing) and a 'storage' >>>>>>property. >>>>>> > >>>>>> >Personally I like to go from this AS: >>>>>> > >>>>>> >if (child is IChrome) >>>>>> > >>>>>> >to this JS: >>>>>> > >>>>>> >if (child.is(IChrome)) >>>>>> > >>>>>> >That would make it relatively easy to work with it in the cross >>>>>> >compiler. Another possibility is to have a global function, but I >>>>>> >don't like that very much. >>>>>> > >>>>>> >Thoughts? >>>>>> > >>>>>> >EdB >>>>>> > >>>>>> > >>>>>> > >>>>>> >On Mon, Jul 29, 2013 at 4:23 PM, Alex Harui <aha...@adobe.com> >>>>>>wrote: >>>>>> >> Thanks for that. I'm more interested in the runtime use of >>>>>>interfaces. >>>>>> >> What is the JS output for this AS? >>>>>> >> >>>>>> >> if (child is IChrome) >>>>>> >> >>>>>> >> It looked like FalconJS was going to create a $implements object >>>>>>on >>>>>>each >>>>>> >> class and "is" code would test against that. What should we do >>>>>>for >>>>>> >> FalconJX? >>>>>> >> >>>>>> >> Thanks, >>>>>> >> -Alex >>>>>> >> >>>>>> >> >>>>>> >> On 7/28/13 11:50 PM, "Erik de Bruin" <e...@ixsoftware.nl> wrote: >>>>>> >> >>>>>> >>>More on how to write the JS side: >>>>>> >>> >>>>>> >>> >>>>>> >>>>>>https://developers.google.com/closure/compiler/docs/js-for-compiler#t >>>>>>ags >>>>>> >>> >>>>>> >>>Search for '@implements'. It has a short but sweet example. >>>>>> >>> >>>>>> >>>EdB >>>>>> >>> >>>>>> >>> >>>>>> >>> >>>>>> >>>On Mon, Jul 29, 2013 at 8:43 AM, Erik de Bruin >>>>>><e...@ixsoftware.nl> >>>>>> >>>wrote: >>>>>> >>>>>> >Also IChrome (looks like a Marker Interface) could lead to a >>>>>>subtle >>>>>> >>>>>> >problem >>>>>> >>>>>> >on the JS side. I have not been following the conversation >>>>>>on >>>>>>how >>>>>> >>>>>>to deal >>>>>> >>>>>> >with Interfaces on the JS side. If we are planning on using >>>>>>'duck >>>>>> >>>>>> >typing', >>>>>> >>>>>> >then we could run into issues with empty interfaces. Or am >>>>>>I >>>>>> >>>>>>missing >>>>>> >>>>>> >something here? >>>>>> >>>>>> I'm not sure what we'll end up doing for interfaces on JS. >>>>>>It >>>>>>looks >>>>>> >>>>>>like >>>>>> >>>>>> some compiler code expects to list interfaces in an >>>>>>$implements >>>>>> >>>>>>property >>>>>> >>>>>> object. >>>>>> >>>>>> >>>>>> >>>>> >>>>>> >>>>> Can someone shine some light on this? Erik, Michael? >>>>>> >>>> >>>>>> >>>> Interfaces on the JS side are implemented for the Closure >>>>>>Compiler >>>>>> >>>> using the @interface for declaration and the @implements JSDoc >>>>>> >>>> annotation. FalconJx knows about this, so - with caution and >>>>>>testing - >>>>>> >>>> you should be able to approach interfaces the same in JS as in >>>>>>AS. >>>>>> >>>> >>>>>> >>>> Let me know if I can help out with some example code or >>>>>>something. >>>>>> >>>> Also, if you run into problems, I can alway crack open FalconJx >>>>>>and >>>>>> >>>> create the solution you would like to see. >>>>>> >>>> >>>>>> >>>> EdB >>>>>> >>>> >>>>>> >>>> >>>>>> >>>> >>>>>> >>>> -- >>>>>> >>>> Ix Multimedia Software >>>>>> >>>> >>>>>> >>>> Jan Luykenstraat 27 >>>>>> >>>> 3521 VB Utrecht >>>>>> >>>> >>>>>> >>>> T. 06-51952295 >>>>>> >>>> I. www.ixsoftware.nl >>>>>> >>> >>>>>> >>> >>>>>> >>> >>>>>> >>>-- >>>>>> >>>Ix Multimedia Software >>>>>> >>> >>>>>> >>>Jan Luykenstraat 27 >>>>>> >>>3521 VB Utrecht >>>>>> >>> >>>>>> >>>T. 06-51952295 >>>>>> >>>I. www.ixsoftware.nl >>>>>> >> >>>>>> > >>>>>> > >>>>>> > >>>>>> >-- >>>>>> >Ix Multimedia Software >>>>>> > >>>>>> >Jan Luykenstraat 27 >>>>>> >3521 VB Utrecht >>>>>> > >>>>>> >T. 06-51952295 >>>>>> >I. www.ixsoftware.nl >>>>>> >>>>>> >>>> >>>> >>>> >>>>-- >>>>Ix Multimedia Software >>>> >>>>Jan Luykenstraat 27 >>>>3521 VB Utrecht >>>> >>>>T. 06-51952295 >>>>I. www.ixsoftware.nl >>> >> >> >> >> -- >> Ix Multimedia Software >> >> Jan Luykenstraat 27 >> 3521 VB Utrecht >> >> T. 06-51952295 >> I. www.ixsoftware.nl > > > >-- >Ix Multimedia Software > >Jan Luykenstraat 27 >3521 VB Utrecht > >T. 06-51952295 >I. www.ixsoftware.nl