The problem is that the emitting code doesn't see accessors as
functions, so it doesn't assign a null function to the member. I'm
working on a fix.

EdB



On Thu, Dec 5, 2013 at 8:45 PM, Alex Harui <aha...@adobe.com> wrote:
> IMO, there are hand-coded interfaces and cross-compiled interfaces.  It
> isn't clear that cross-compiled interfaces need their insides since they
> are guaranteed to be equivalent, but I do agree that hand-coded ones
> should so they can be checked by the JS tool chain.
>
> Or am I missing something?
>
> I don't think I'm as familiar with dealing with these closure compiler
> warnings as you are.  If you have the cycles to cross-compile the
> interface I posted you can undo the one change I made and see the results
> yourself and fix or advise on a fix, that would help a lot.
>
> Thanks,
> -Alex
>
> On 12/5/13 11:37 AM, "Erik de Bruin" <e...@ixsoftware.nl> wrote:
>
>>If we aim to make both sides of the equation equal (AS framework API
>>matches JS framework API) we can assume a lot more than that:
>>basically, all type checking would already have been done by the AS
>>compiler.
>>
>>But, as you have indicated repeatedly, this equality will never
>>happen. So, given that the APIs cannot be assumed to be equal, I think
>>we should use all the help we can get from the JS compiler to catch
>>errors and incorrect assumptions.
>>
>>Most of the warnings the JS compiler threw before we got rid of them
>>seemed 'ignorable' at first glance, but it turned out they were a
>>symptom of something deeper: the deps calculation wasn't working
>>properly. This makes me think that the 'unused getprop' either is the
>>result of a very simple oversight (type check missing, or some such),
>>or that it indicates something wrong with one of the frameworks. Maybe
>>killing the proximate reason for the warning won't fix the ultimate
>>problem...
>>
>>EdB
>>
>>
>>
>>On Thu, Dec 5, 2013 at 7:48 PM, Alex Harui <aha...@adobe.com> wrote:
>>> Something about "unused getprop" or something like that?
>>>
>>> Wondering though: Are you sure we need the compiler to do this check?
>>> Can't we assume the AS compiler has already done this sort of check?
>>> Would we save a few bytes by not actually generating the insides of
>>> cross-compiled interfaces?
>>>
>>> -Alex
>>>
>>> On 12/5/13 10:12 AM, "Erik de Bruin" <e...@ixsoftware.nl> wrote:
>>>
>>>>Which warning did you get from the compiler?
>>>>
>>>>EdB
>>>>
>>>>
>>>>
>>>>On Thu, Dec 5, 2013 at 6:36 PM, Alex Harui <aha...@adobe.com> wrote:
>>>>> OK, can you give more details on what it is checking for?
>>>>>
>>>>> For the AS interface:
>>>>>
>>>>> public interface IDataProviderItemRendererMapper extends IBead
>>>>>         {
>>>>>         function get itemRendererFactory():IItemRendererClassFactory;
>>>>>         function set
>>>>>itemRendererFactory(value:IItemRendererClassFactory):void;
>>>>>         }
>>>>>
>>>>> What should the output JS be?  What it was doing (from emitInterface
>>>>>in
>>>>> JSGoogEmitter.java) was resulting in warnings from the closure
>>>>>compiler.
>>>>> The output was the following and the itemRendererFactory line
>>>>>resulting
>>>>>in
>>>>> a warning.
>>>>>
>>>>> /**
>>>>>  *
>>>>>
>>>>>org.apache.flex.html.customControls.beads.IDataProviderItemRendererMapp
>>>>>er
>>>>>  *
>>>>>  * @fileoverview
>>>>>  *
>>>>>  * @suppress {checkTypes}
>>>>>  */
>>>>>
>>>>>
>>>>>goog.provide('org.apache.flex.html.customControls.beads.IDataProviderIt
>>>>>em
>>>>>Re
>>>>> ndererMapper');
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> /**
>>>>>  * @interface
>>>>>  * @extends {org.apache.flex.core.IBead}
>>>>>  */
>>>>>
>>>>>org.apache.flex.html.customControls.beads.IDataProviderItemRendererMapp
>>>>>er
>>>>> = function() {
>>>>> };
>>>>>
>>>>>org.apache.flex.html.customControls.beads.prototype.itemRendererFactory
>>>>>;
>>>>>
>>>>>
>>>>> /**
>>>>>  * Metadata
>>>>>  *
>>>>>  * @type {Object.<string, Array.<Object>>}
>>>>>  */
>>>>>
>>>>>org.apache.flex.html.customControls.beads.IDataProviderItemRendererMapp
>>>>>er
>>>>>.p
>>>>> rototype.FLEXJS_CLASS_INFO = { names: [{ name:
>>>>> 'IDataProviderItemRendererMapper', qName:
>>>>>
>>>>>'org.apache.flex.html.customControls.beads.IDataProviderItemRendererMap
>>>>>pe
>>>>>r'
>>>>> }], interfaces: [org.apache.flex.core.IBead] };
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On 12/4/13 11:55 PM, "Erik de Bruin" <e...@ixsoftware.nl> wrote:
>>>>>
>>>>>>The Closure Compiler uses the members of an interface to check if the
>>>>>>interface is properly implemented. So, yes, I'd say we need the
>>>>>>members emitted...
>>>>>>
>>>>>>EdB
>>>>>>
>>>>>>
>>>>>>
>>>>>>On Thu, Dec 5, 2013 at 7:12 AM,  <aha...@apache.org> wrote:
>>>>>>> Don't bother emitting interface members.  The way they were being
>>>>>>>emitted were causing warnings from the closure compiler
>>>>>>>
>>>>>>>
>>>>>>> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
>>>>>>> Commit:
>>>>>>>http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/70683e5d
>>>>>>> Tree:
>>>>>>>http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/70683e5d
>>>>>>> Diff:
>>>>>>>http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/70683e5d
>>>>>>>
>>>>>>> Branch: refs/heads/develop
>>>>>>> Commit: 70683e5d223538713c02eb02029f4e67686c0c7a
>>>>>>> Parents: 30fd603
>>>>>>> Author: Alex Harui <aha...@apache.org>
>>>>>>> Authored: Wed Dec 4 22:11:39 2013 -0800
>>>>>>> Committer: Alex Harui <aha...@apache.org>
>>>>>>> Committed: Wed Dec 4 22:11:39 2013 -0800
>>>>>>>
>>>>>>>
>>>>>>>---------------------------------------------------------------------
>>>>>>>-
>>>>>>>  .../codegen/js/flexjs/JSFlexJSEmitter.java      | 65
>>>>>>>++++++++++++++++++++
>>>>>>>  1 file changed, 65 insertions(+)
>>>>>>>
>>>>>>>---------------------------------------------------------------------
>>>>>>>-
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/70683e5d/comp
>>>>>>>il
>>>>>>>er
>>>>>>>.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSE
>>>>>>>mi
>>>>>>>tt
>>>>>>>er.java
>>>>>>>
>>>>>>>---------------------------------------------------------------------
>>>>>>>-
>>>>>>> diff --git
>>>>>>>a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs
>>>>>>>/J
>>>>>>>SF
>>>>>>>lexJSEmitter.java
>>>>>>>b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs
>>>>>>>/J
>>>>>>>SF
>>>>>>>lexJSEmitter.java
>>>>>>> index a65335d..cd67c00 100644
>>>>>>> ---
>>>>>>>a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs
>>>>>>>/J
>>>>>>>SF
>>>>>>>lexJSEmitter.java
>>>>>>> +++
>>>>>>>b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs
>>>>>>>/J
>>>>>>>SF
>>>>>>>lexJSEmitter.java
>>>>>>> @@ -197,6 +197,71 @@ public class JSFlexJSEmitter extends
>>>>>>>JSGoogEmitter
>>>>>>>implements IJSFlexJSEmitter
>>>>>>>      }
>>>>>>>
>>>>>>>      @Override
>>>>>>> +    public void emitInterface(IInterfaceNode node)
>>>>>>> +    {
>>>>>>> +        ICompilerProject project = getWalker().getProject();
>>>>>>> +
>>>>>>> +        getDoc().emitInterfaceDoc(node, project);
>>>>>>> +
>>>>>>> +        String qname = node.getQualifiedName();
>>>>>>> +        if (qname != null && !qname.equals(""))
>>>>>>> +        {
>>>>>>> +            write(qname);
>>>>>>> +            write(ASEmitterTokens.SPACE);
>>>>>>> +            writeToken(ASEmitterTokens.EQUAL);
>>>>>>> +            write(ASEmitterTokens.FUNCTION);
>>>>>>> +            write(ASEmitterTokens.PAREN_OPEN);
>>>>>>> +            write(ASEmitterTokens.PAREN_CLOSE);
>>>>>>> +            write(ASEmitterTokens.SPACE);
>>>>>>> +            write(ASEmitterTokens.BLOCK_OPEN);
>>>>>>> +            writeNewline();
>>>>>>> +            write(ASEmitterTokens.BLOCK_CLOSE);
>>>>>>> +            write(ASEmitterTokens.SEMICOLON);
>>>>>>> +        }
>>>>>>> +
>>>>>>> +
>>>>>>> +        /* (aharui): is there any reason to emit members at all?
>>>>>>> +        final IDefinitionNode[] members =
>>>>>>>node.getAllMemberDefinitionNodes();
>>>>>>> +        for (IDefinitionNode mnode : members)
>>>>>>> +        {
>>>>>>> +            boolean isAccessor = mnode.getNodeID() ==
>>>>>>>ASTNodeID.GetterID
>>>>>>> +                    || mnode.getNodeID() == ASTNodeID.SetterID;
>>>>>>> +
>>>>>>> +            if (!isAccessor || !propertyNames.contains(qname))
>>>>>>> +            {
>>>>>>> +                writeNewline();
>>>>>>> +
>>>>>>> +                write(qname);
>>>>>>> +                write(ASEmitterTokens.MEMBER_ACCESS);
>>>>>>> +                write(JSEmitterTokens.PROTOTYPE);
>>>>>>> +                write(ASEmitterTokens.MEMBER_ACCESS);
>>>>>>> +                write(mnode.getQualifiedName());
>>>>>>> +
>>>>>>> +                if (isAccessor && !propertyNames.contains(qname))
>>>>>>> +                {
>>>>>>> +                    propertyNames.add(qname);
>>>>>>> +                }
>>>>>>> +                else
>>>>>>> +                {
>>>>>>> +                    write(ASEmitterTokens.SPACE);
>>>>>>> +                    writeToken(ASEmitterTokens.EQUAL);
>>>>>>> +                    write(ASEmitterTokens.FUNCTION);
>>>>>>> +
>>>>>>> +                    emitParameters(((IFunctionNode)
>>>>>>>mnode).getParameterNodes());
>>>>>>> +
>>>>>>> +                    write(ASEmitterTokens.SPACE);
>>>>>>> +                    write(ASEmitterTokens.BLOCK_OPEN);
>>>>>>> +                    writeNewline();
>>>>>>> +                    write(ASEmitterTokens.BLOCK_CLOSE);
>>>>>>> +                }
>>>>>>> +
>>>>>>> +                write(ASEmitterTokens.SEMICOLON);
>>>>>>> +            }
>>>>>>> +        }
>>>>>>> +        */
>>>>>>> +    }
>>>>>>> +
>>>>>>> +    @Override
>>>>>>>      public void emitField(IVariableNode node)
>>>>>>>      {
>>>>>>>          IDefinition definition = getClassDefinition(node);
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>--
>>>>>>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