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

Reply via email to