That looks very promising! Some tweaking is needed, and some of the
output (the bottom part mostly, I guess that is for some kind of
introspection that is in my template provided by other methods) isn't
needed, at least not from what I understand.

I'll look into the details of the new output tomorrow and indicate if
and what changes would be nice ;-)

EdB


On Thu, Dec 6, 2012 at 7:01 PM, Michael Schmalle
<apa...@teotigraphix.com> wrote:
> Hi,
>
> Right now after about 5 hours of researching and messing around I can get
> the following using the closure compiler flag;
>
> //=================================================================
> AS CODE
>
>
> package com.example.components
> {
>
> import flash.display.Sprite;
>
> public class MyTextButton extends Sprite
> {
>     public function MyTextButton()
>
>     {
>         super();
>      }
>
>     private var _privateVar:String = "do ";
>
>     public var publicProperty:Number = 100;
>
>     public function myFunction(value: String): String
>     {
>         return "Don't " + _privateVar + value;
>     }
> }
> }
>
>
> //=================================================================
> JS CODE
>
> /** @preserve CROSS-COMPILED BY MXMLJSC (329449.1) ON 2012-12-06 12:55:52
>  */
> /**
>  * CROSS-COMPILED BY MXMLJSC (329449.1) ON 2012-12-06 12:52:19
>  *
>  * Class: com.example.components.MyTextButton
>  * @constructor
>  * @extends flash.display.Sprite
>  */
>
> // Constructor
>
>
> /**
>  * Constructor: com.example.components.MyTextButton()
>  * @constructor
>  * @this {com.example.components}
>  */
> com.example.components.MyTextButton = function()
> {
>         var self = this;
>                 self.publicProperty /* : Number */ = 100;
>                 goog.base(this);
>                 return self;
> }
>
>
> goog.inherits(com.example.components.MyTextButton, flash.display.Sprite);
>
> /**
>  * Member: com.example.components.MyTextButton.prototype._CLASS
>  * @const
>  * @type {com.example.components.MyTextButton}
>  */
> com.example.components.MyTextButton.prototype._CLASS =
> com.example.components.MyTextButton;
> ;
>
> /**
>  * Member: com.example.components.MyTextButton._privateVar
>
>  * @private
>  * @type {string}
>  */
> com.example.components.MyTextButton.prototype._privateVar /* : String */ =
> "do ";
> ;
>
> /**
>  * Member: com.example.components.MyTextButton.publicProperty
>  * @type {number}
>  */
> com.example.components.MyTextButton.prototype.publicProperty /* : Number */
> = 100;
> ;
>
>
> /**
>  * Method: com.example.components.MyTextButton.myFunction()
>  * @this {com.example.components.MyTextButton}
>  * @param {string} value
>  * @return {string}
>  */
> com.example.components.MyTextButton.prototype.myFunction = function(value /*
> : String */) /* : String */
> {
>                 /** @type {com.example.components.MyTextButton} */
>                 var self = this;
>                 return (("Don't " + self._privateVar) + value);
> }
>
> /**
>  * Member: com.example.components.MyTextButton._PACKAGE
>  * @const
>  * @type {com.example.components}
>  */
> com.example.components.MyTextButton._PACKAGE = com.example.components;
>
>
> /**
>  * Member: com.example.components.MyTextButton._NAME
>  * @const
>  * @type {string}
>  */
> com.example.components.MyTextButton._NAME = "MyTextButton";
>
> /**
>  * Member: com.example.components.MyTextButton._FULLNAME
>  * @const
>  * @type {string}
>  */
> com.example.components.MyTextButton._FULLNAME =
> "com.example.components.MyTextButton";
>
> /**
>  * Member: com.example.components.MyTextButton._SUPER
>  * @const
>  * @type {flash.display.Sprite}
>  */
> com.example.components.MyTextButton._SUPER = flash.display.Sprite;
>
> /**
>  * Member: com.example.components.MyTextButton._NAMESPACES
>  * @const
>  * @type {Object}
>  */
> com.example.components.MyTextButton._NAMESPACES = {
>         "_privateVar::7:com.example.components.MyTextButton" : true,
>         "publicProperty::2" : true,
>         "myFunction::2" : true
> }
>
> adobe.classes["com.example.components.MyTextButton"]  =
> com.example.components.MyTextButton;
>
> /CODE
> //=================================================================
>
>
> Is this a base we can work off of Erik?
>
> Let me know what you would want changed within that scope.
>
> I know how I can get the imports (IE require()) in. There is some funky
> business going on with the constructor that will need to be sorted out.
>
> JSDoc comments are not hard to add/remove either with tags etc..
>
>
> Mike
>
>
>
>
>
>
> Quoting Erik de Bruin <e...@ixsoftware.nl>:
>
>> Correct.
>>
>> I have created 'tests' directories on both the AS and JS frameworks,
>> and plan to use FlexUnit for AS and Jasmine for JS unit testing. That
>> covers the frameworks. I imagine we build pre- and postcompile tests
>> for the project code as well.
>>
>> And leaving out the intermediate step (i.e. have FalconJS directly
>> output minified JS, or have FalconJS call the Closure Compiler
>> directly as a post compile step) will only increase the difficulty in
>> testing for and more importantly, debugging any issues in the output
>> JS.
>>
>> Finally, not having intermediate (annotated) JS files will make it
>> impossible to let the Closure Builder do it's magic. That magic is an
>> important part of having a highly optimised final output. The Builder
>> calculates the dependencies between the project code, the FlexJS JS
>> framework and the Closure Library, allowing it to remove unused code
>> (no penalty for using a large library of which you only use one
>> method) and to minify all internal references, while the annotation
>> prevents the renaming or even deletion of public interfaces.
>>
>> All in all, the "intermediate" step, at least for the first few
>> versions looks to me like a valuable tool and a way to allow for
>> speedy development of both projects as well as the frameworks.
>>
>> EdB
>>
>>
>>
>> On Thu, Dec 6, 2012 at 4:56 PM, Michael Schmalle
>> <apa...@teotigraphix.com> wrote:
>>>
>>>
>>> Quoting Carol Frampton <cfram...@adobe.com>:
>>>
>>>>
>>>>
>>>> On 12/6/12 7 :49AM, "Erik de Bruin" <e...@ixsoftware.nl> wrote:
>>>>
>>>>> Mike,
>>>>>
>>>>> After I'm done fixing the mess I made in SVN, I'll start work on the
>>>>> 'template', but here is the basic idea to get you started: I would
>>>>> like the compiler to output "intermediate" JS, by which I mean "human
>>>>> readable". My Publisher then takes this intermediate code and puts it
>>>>> through the Google Closure Builder, which optimises and minifies it.
>>>>> The advantage of having the "intermediate" step is that it makes
>>>>> debugging much (MUCH) easier. It will allow us to write tests,
>>>>> something that minified code won't. And it will let us run the code in
>>>>> the various browser based tooling and have the output make sense.
>>>>
>>>>
>>>>
>>>> If you use an intermediate form to test how to you know there aren't
>>>> bugs
>>>> introduced by the publishing process?
>>>>
>>>> Carol
>>>
>>>
>>>
>>> Isn't the publishing process the closure compiler which google has tests
>>> for
>>> when it compiles out the minified optimized js?
>>>
>>> I probably have more time into investigating the corss compile code In
>>> FalconJS and I have to say as it stands we don't even know if our
>>> compiler
>>> is creating bugs in the output js. It seems Adobe was unit testing the js
>>> but we don't have any of those tests.
>>>
>>> So its reasonable to think we need to have tests for js that is compiled
>>> by
>>> FalconJS in the intermediate stage.
>>>
>>>
>>>
>>>
>>> Mike
>>>
>>> --
>>> Michael Schmalle - Teoti Graphix, LLC
>>> http://www.teotigraphix.com
>>> http://blog.teotigraphix.com
>>>
>>
>>
>>
>> --
>> Ix Multimedia Software
>>
>> Jan Luykenstraat 27
>> 3521 VB Utrecht
>>
>> T. 06-51952295
>> I. www.ixsoftware.nl
>>
>
> --
> Michael Schmalle - Teoti Graphix, LLC
> http://www.teotigraphix.com
> http://blog.teotigraphix.com
>



-- 
Ix Multimedia Software

Jan Luykenstraat 27
3521 VB Utrecht

T. 06-51952295
I. www.ixsoftware.nl

Reply via email to