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

Reply via email to