You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flex.apache.org by Erik de Bruin <er...@ixsoftware.nl> on 2013/03/28 00:14:33 UTC

Re: git commit: FlexJS application now shows in browser

Forgot to mention this in the commit message: this goes only for the
'js-debug' code. The 'js-release' code has some more issues that
currently prevent it from showing the view in the browser.

EdB



On Thu, Mar 28, 2013 at 12:07 AM,  <er...@apache.org> wrote:
> Updated Branches:
>   refs/heads/develop d8bb65f1e -> 112d8ca7f
>
>
> FlexJS application now shows in browser
>
> Fixed various issues related to JS errors that prevented the FlexJS application from showing it's view in the browser. Note: although the view components are displayed as expected, none of the functionality is working.
>
> Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
>
>
> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
> Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/112d8ca7
> Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/112d8ca7
> Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/112d8ca7
>
> Branch: refs/heads/develop
> Commit: 112d8ca7ff1e218404e964f9242a104acee20311
> Parents: d8bb65f
> Author: Erik de Bruin <er...@ixsoftware.nl>
> Authored: Thu Mar 28 00:07:11 2013 +0100
> Committer: Erik de Bruin <er...@ixsoftware.nl>
> Committed: Thu Mar 28 00:07:11 2013 +0100
>
> ----------------------------------------------------------------------
>  .../codegen/js/flexjs/TestFlexJSAccessors.java     |   12 +++---
>  .../codegen/js/flexjs/TestFlexJSClass.java         |    9 ++++
>  .../codegen/js/flexjs/TestFlexJSExpressions.java   |   33 ++++++++++++++
>  .../codegen/js/flexjs/TestFlexJSMethodMembers.java |   34 +++++++++++++++
>  .../codegen/js/flexjs/JSFlexJSEmitter.java         |   18 +++++++-
>  .../codegen/mxml/flexjs/MXMLFlexJSPublisher.java   |    8 +++-
>  6 files changed, 106 insertions(+), 8 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
> ----------------------------------------------------------------------
> diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
> index cee5079..6e3e842 100644
> --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
> +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
> @@ -46,10 +46,10 @@ public class TestFlexJSAccessors extends ASTestBase
>      public void testSetAccessorWithMemberAccessOnLeftSide()
>      {
>          IClassNode node = (IClassNode) getNode(
> -                "public function A() {}; public function doStuff():void {this.label = label + 'bye'; var theLabel:String = label;}; private var _label:String; public function get label():String {return _label}; public function set label(value:String):void {_label = value}; ",
> -                IClassNode.class, WRAP_LEVEL_CLASS);
> +                "public class B { public function B() {}; public function doStuff():void {this.label = label + 'bye'; var theLabel:String = label;}; private var _label:String; public function get label():String {return _label}; public function set label(value:String):void {_label = value};}",
> +                IClassNode.class, WRAP_LEVEL_PACKAGE);
>          asBlockWalker.visitClass(node);
> -        String expected = "/**\n * @constructor\n */\nA = function() {\n};\n\n/**\n * @this {A}\n */\nA.prototype.doStuff = function() {\n\tvar self = this;\n\tthis.set_label(get_label() + 'bye');\n\tvar /** @type {string} */ theLabel = get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nA.prototype._label;\n\nA.prototype.get_label = function() {\n\tvar self = this;\n\treturn _label;\n};\n\nA.prototype.set_label = function(value) {\n\tvar self = this;\n\t_label = value;\n};";
> +        String expected = "/**\n * @constructor\n */\nB = function() {\n};\n\n/**\n * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar self = this;\n\tself.set_label(self.get_label() + 'bye');\n\tvar /** @type {string} */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\nB.prototype.get_label = function() {\n\tvar self = this;\n\treturn self._label;\n};\n\nB.prototype.set_label = function(value) {\n\tvar self = this;\n\tself._label = value;\n};";
>          assertOut(expected);
>      }
>
> @@ -68,10 +68,10 @@ public class TestFlexJSAccessors extends ASTestBase
>      public void testSetAccessorWithMemberAccessOnRightSide()
>      {
>          IClassNode node = (IClassNode) getNode(
> -                "public function A() {}; public function doStuff():void {label = this.label; var theLabel:String = label;}; private var _label:String; public function get label():String {return _label}; public function set label(value:String):void {_label = value}; ",
> -                IClassNode.class, WRAP_LEVEL_CLASS);
> +                "public class B { public function B() {}; public function doStuff():void {label = this.label; var theLabel:String = label;}; private var _label:String; public function get label():String {return _label}; public function set label(value:String):void {_label = value};}",
> +                IClassNode.class, WRAP_LEVEL_PACKAGE);
>          asBlockWalker.visitClass(node);
> -        String expected = "/**\n * @constructor\n */\nA = function() {\n};\n\n/**\n * @this {A}\n */\nA.prototype.doStuff = function() {\n\tvar self = this;\n\tset_label(this.get_label());\n\tvar /** @type {string} */ theLabel = get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nA.prototype._label;\n\nA.prototype.get_label = function() {\n\tvar self = this;\n\treturn _label;\n};\n\nA.prototype.set_label = function(value) {\n\tvar self = this;\n\t_label = value;\n};";
> +        String expected = "/**\n * @constructor\n */\nB = function() {\n};\n\n/**\n * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar self = this;\n\tself.set_label(self.get_label());\n\tvar /** @type {string} */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\nB.prototype.get_label = function() {\n\tvar self = this;\n\treturn self._label;\n};\n\nB.prototype.set_label = function(value) {\n\tvar self = this;\n\tself._label = value;\n};";
>          assertOut(expected);
>      }
>
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
> ----------------------------------------------------------------------
> diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
> index a1a759a..7aed95a 100644
> --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
> +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
> @@ -31,6 +31,15 @@ import org.junit.Test;
>  public class TestFlexJSClass extends TestGoogClass
>  {
>
> +    @Test
> +    public void testConstructor_withArgumentNameMatchingMemberName()
> +    {
> +        IClassNode node = getClassNode("public class B {public function B(arg1:String) {this.arg1 = arg1}; public var arg1:String;}");
> +        asBlockWalker.visitClass(node);
> +        String expected = "/**\n * @constructor\n * @param {string} arg1\n */\norg.apache.flex.B = function(arg1) {\n\tvar self = this;\n\tself.arg1 = arg1;\n};\n\n/**\n * @type {string}\n */\norg.apache.flex.B.prototype.arg1;";
> +        assertOut(expected);
> +    }
> +
>      @Override
>      @Test
>      public void testAccessors()
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
> ----------------------------------------------------------------------
> diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
> index c96bf60..6968c38 100644
> --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
> +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
> @@ -24,6 +24,7 @@ import org.apache.flex.compiler.internal.codegen.js.goog.TestGoogExpressions;
>  import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
>  import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
>  import org.apache.flex.compiler.tree.as.IFunctionNode;
> +import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
>  import org.junit.Test;
>
>  /**
> @@ -34,6 +35,38 @@ public class TestFlexJSExpressions extends TestGoogExpressions
>
>      @Override
>      @Test
> +    public void testVisitLanguageIdentifierNode_This()
> +    {
> +        IMemberAccessExpressionNode node = (IMemberAccessExpressionNode) getNode(
> +                "if (a) this.a;", IMemberAccessExpressionNode.class);
> +        asBlockWalker.visitMemberAccessExpression(node);
> +        assertOut("a");
> +    }
> +
> +    @Override
> +    @Test
> +    public void testVisitLanguageIdentifierNode_This1()
> +    {
> +        IMemberAccessExpressionNode node = (IMemberAccessExpressionNode) getNode(
> +                "if (a) this.a;", IMemberAccessExpressionNode.class);
> +
> +        asBlockWalker.visitMemberAccessExpression(node);
> +        assertOut("a");
> +    }
> +
> +    @Override
> +    @Test
> +    public void testVisitLanguageIdentifierNode_This2()
> +    {
> +        IMemberAccessExpressionNode node = (IMemberAccessExpressionNode) getNode(
> +                "if (a) this.a;", IMemberAccessExpressionNode.class);
> +
> +        asBlockWalker.visitMemberAccessExpression(node);
> +        assertOut("a");
> +    }
> +
> +    @Override
> +    @Test
>      public void testVisitLanguageIdentifierNode_SuperMethod_1()
>      {
>          IFunctionNode node = getMethod("function foo(){if (a) super.foo();}");
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
> ----------------------------------------------------------------------
> diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
> index 15310f7..1df4b71 100644
> --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
> +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
> @@ -22,6 +22,8 @@ package org.apache.flex.compiler.internal.codegen.js.flexjs;
>  import org.apache.flex.compiler.driver.IBackend;
>  import org.apache.flex.compiler.internal.codegen.js.goog.TestGoogMethodMembers;
>  import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
> +import org.apache.flex.compiler.tree.as.IFunctionNode;
> +import org.junit.Test;
>
>  /**
>   * @author Erik de Bruin
> @@ -29,6 +31,38 @@ import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
>  public class TestFlexJSMethodMembers extends TestGoogMethodMembers
>  {
>
> +    //--------------------------------------------------------------------------
> +    // Doc Specific Tests
> +    //--------------------------------------------------------------------------
> +
> +    @Override
> +    @Test
> +    public void testConstructor_withThisInBody()
> +    {
> +        IFunctionNode node = getMethod("public function A(){this.foo;};");
> +        asBlockWalker.visitFunction(node);
> +        assertOut("/**\n * @constructor\n */\nA = function() {\n\tvar self = this;\n\tfoo;\n}");
> +    }
> +
> +    @Override
> +    @Test
> +    public void testMethod_withThisInBody()
> +    {
> +        IFunctionNode node = getMethod("function foo(){this.foo;}");
> +        asBlockWalker.visitFunction(node);
> +        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function() {\n\tvar self = this;\n\tfoo;\n}");
> +    }
> +
> +    @Override
> +    @Test
> +    public void testMethod_withThisInBodyComplex()
> +    {
> +        IFunctionNode node = getMethod("function foo(){if(true){while(i){this.bar(42);}}}");
> +        asBlockWalker.visitFunction(node);
> +        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function() {\n\tvar self = this;\n\tif (true) "
> +                + "{\n\t\twhile (i) {\n\t\t\tbar(42);\n\t\t}\n\t}\n}");
> +    }
> +
>      @Override
>      protected IBackend createBackend()
>      {
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
> ----------------------------------------------------------------------
> diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
> index dd4d137..4f58975 100644
> --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
> +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
> @@ -32,6 +32,7 @@ import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
>  import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
>  import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
>  import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
> +import org.apache.flex.compiler.internal.definitions.ParameterDefinition;
>  import org.apache.flex.compiler.internal.tree.as.BinaryOperatorAssignmentNode;
>  import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
>  import org.apache.flex.compiler.internal.tree.as.FunctionNode;
> @@ -47,6 +48,7 @@ import org.apache.flex.compiler.tree.as.IFunctionCallNode;
>  import org.apache.flex.compiler.tree.as.IFunctionNode;
>  import org.apache.flex.compiler.tree.as.IGetterNode;
>  import org.apache.flex.compiler.tree.as.IIdentifierNode;
> +import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
>  import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
>  import org.apache.flex.compiler.tree.as.ISetterNode;
>  import org.apache.flex.compiler.utils.ASNodeUtils;
> @@ -94,7 +96,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
>          ASTNodeID inode = pnode.getNodeID();
>
>          boolean writeSelf = false;
> -        if (cnode != null)
> +        if (cnode != null && !(def instanceof ParameterDefinition))
>          {
>              IDefinitionNode[] members = cnode.getAllMemberNodes();
>              for (IDefinitionNode mnode : members)
> @@ -335,6 +337,20 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
>      }
>
>      @Override
> +    public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
> +    {
> +        IASNode leftNode = node.getLeftOperandNode();
> +
> +        if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
> +                .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
> +        {
> +            getWalker().walk(node.getLeftOperandNode());
> +            write(node.getOperator().getOperatorText());
> +        }
> +        getWalker().walk(node.getRightOperandNode());
> +    }
> +
> +    @Override
>      protected void emitObjectDefineProperty(IAccessorNode node)
>      {
>          /*
>
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> ----------------------------------------------------------------------
> diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> index 49832a3..430ec4b 100644
> --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> @@ -191,9 +191,15 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements
>          htmlFile.append("</head>\n");
>          htmlFile.append("<body>\n");
>          htmlFile.append("\t<script type=\"text/javascript\">\n");
> +
> +        // TODO (erikdebruin) the utility methods should have their own place...
> +        htmlFile.append("\t\tfunction is(object, type) {return object;};\n");
> +        htmlFile.append("\t\t\n");
> +
>          htmlFile.append("\t\tnew ");
>          htmlFile.append(projectName);
> -        htmlFile.append("();\n");
> +        htmlFile.append("()");
> +        htmlFile.append(".start()\n");
>          htmlFile.append("\t</script>\n");
>          htmlFile.append("</body>\n");
>          htmlFile.append("</html>");
>



-- 
Ix Multimedia Software

Jan Luykenstraat 27
3521 VB Utrecht

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

Re: git commit: FlexJS application now shows in browser

Posted by Erik de Bruin <er...@ixsoftware.nl>.
Sure, since FalconJx can now output the demo app properly, here it is:

http://people.apache.org/~erikdebruin/flexjs/

EdB



On Thu, Mar 28, 2013 at 12:21 AM, Om <bi...@gmail.com> wrote:
> Awesome!  Any chance you can put up the working demo onto your people.a.o
> site?  Makes it easier for folks to see what's happening.
>
> Thanks,
> Om
> On Mar 27, 2013 4:15 PM, "Erik de Bruin" <er...@ixsoftware.nl> wrote:
>
>> Forgot to mention this in the commit message: this goes only for the
>> 'js-debug' code. The 'js-release' code has some more issues that
>> currently prevent it from showing the view in the browser.
>>
>> EdB
>>
>>
>>
>> On Thu, Mar 28, 2013 at 12:07 AM,  <er...@apache.org> wrote:
>> > Updated Branches:
>> >   refs/heads/develop d8bb65f1e -> 112d8ca7f
>> >
>> >
>> > FlexJS application now shows in browser
>> >
>> > Fixed various issues related to JS errors that prevented the FlexJS
>> application from showing it's view in the browser. Note: although the view
>> components are displayed as expected, none of the functionality is working.
>> >
>> > Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
>> >
>> >
>> > Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
>> > Commit:
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/112d8ca7
>> > Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/112d8ca7
>> > Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/112d8ca7
>> >
>> > Branch: refs/heads/develop
>> > Commit: 112d8ca7ff1e218404e964f9242a104acee20311
>> > Parents: d8bb65f
>> > Author: Erik de Bruin <er...@ixsoftware.nl>
>> > Authored: Thu Mar 28 00:07:11 2013 +0100
>> > Committer: Erik de Bruin <er...@ixsoftware.nl>
>> > Committed: Thu Mar 28 00:07:11 2013 +0100
>> >
>> > ----------------------------------------------------------------------
>> >  .../codegen/js/flexjs/TestFlexJSAccessors.java     |   12 +++---
>> >  .../codegen/js/flexjs/TestFlexJSClass.java         |    9 ++++
>> >  .../codegen/js/flexjs/TestFlexJSExpressions.java   |   33 ++++++++++++++
>> >  .../codegen/js/flexjs/TestFlexJSMethodMembers.java |   34
>> +++++++++++++++
>> >  .../codegen/js/flexjs/JSFlexJSEmitter.java         |   18 +++++++-
>> >  .../codegen/mxml/flexjs/MXMLFlexJSPublisher.java   |    8 +++-
>> >  6 files changed, 106 insertions(+), 8 deletions(-)
>> > ----------------------------------------------------------------------
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
>> > index cee5079..6e3e842 100644
>> > ---
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
>> > +++
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
>> > @@ -46,10 +46,10 @@ public class TestFlexJSAccessors extends ASTestBase
>> >      public void testSetAccessorWithMemberAccessOnLeftSide()
>> >      {
>> >          IClassNode node = (IClassNode) getNode(
>> > -                "public function A() {}; public function doStuff():void
>> {this.label = label + 'bye'; var theLabel:String = label;}; private var
>> _label:String; public function get label():String {return _label}; public
>> function set label(value:String):void {_label = value}; ",
>> > -                IClassNode.class, WRAP_LEVEL_CLASS);
>> > +                "public class B { public function B() {}; public
>> function doStuff():void {this.label = label + 'bye'; var theLabel:String =
>> label;}; private var _label:String; public function get label():String
>> {return _label}; public function set label(value:String):void {_label =
>> value};}",
>> > +                IClassNode.class, WRAP_LEVEL_PACKAGE);
>> >          asBlockWalker.visitClass(node);
>> > -        String expected = "/**\n * @constructor\n */\nA = function()
>> {\n};\n\n/**\n * @this {A}\n */\nA.prototype.doStuff = function() {\n\tvar
>> self = this;\n\tthis.set_label(get_label() + 'bye');\n\tvar /** @type
>> {string} */ theLabel = get_label();\n};\n\n/**\n * @private\n * @type
>> {string}\n */\nA.prototype._label;\n\nA.prototype.get_label = function()
>> {\n\tvar self = this;\n\treturn _label;\n};\n\nA.prototype.set_label =
>> function(value) {\n\tvar self = this;\n\t_label = value;\n};";
>> > +        String expected = "/**\n * @constructor\n */\nB = function()
>> {\n};\n\n/**\n * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar
>> self = this;\n\tself.set_label(self.get_label() + 'bye');\n\tvar /** @type
>> {string} */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type
>> {string}\n */\nB.prototype._label;\n\nB.prototype.get_label = function()
>> {\n\tvar self = this;\n\treturn self._label;\n};\n\nB.prototype.set_label =
>> function(value) {\n\tvar self = this;\n\tself._label = value;\n};";
>> >          assertOut(expected);
>> >      }
>> >
>> > @@ -68,10 +68,10 @@ public class TestFlexJSAccessors extends ASTestBase
>> >      public void testSetAccessorWithMemberAccessOnRightSide()
>> >      {
>> >          IClassNode node = (IClassNode) getNode(
>> > -                "public function A() {}; public function doStuff():void
>> {label = this.label; var theLabel:String = label;}; private var
>> _label:String; public function get label():String {return _label}; public
>> function set label(value:String):void {_label = value}; ",
>> > -                IClassNode.class, WRAP_LEVEL_CLASS);
>> > +                "public class B { public function B() {}; public
>> function doStuff():void {label = this.label; var theLabel:String = label;};
>> private var _label:String; public function get label():String {return
>> _label}; public function set label(value:String):void {_label = value};}",
>> > +                IClassNode.class, WRAP_LEVEL_PACKAGE);
>> >          asBlockWalker.visitClass(node);
>> > -        String expected = "/**\n * @constructor\n */\nA = function()
>> {\n};\n\n/**\n * @this {A}\n */\nA.prototype.doStuff = function() {\n\tvar
>> self = this;\n\tset_label(this.get_label());\n\tvar /** @type {string} */
>> theLabel = get_label();\n};\n\n/**\n * @private\n * @type {string}\n
>> */\nA.prototype._label;\n\nA.prototype.get_label = function() {\n\tvar self
>> = this;\n\treturn _label;\n};\n\nA.prototype.set_label = function(value)
>> {\n\tvar self = this;\n\t_label = value;\n};";
>> > +        String expected = "/**\n * @constructor\n */\nB = function()
>> {\n};\n\n/**\n * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar
>> self = this;\n\tself.set_label(self.get_label());\n\tvar /** @type {string}
>> */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type
>> {string}\n */\nB.prototype._label;\n\nB.prototype.get_label = function()
>> {\n\tvar self = this;\n\treturn self._label;\n};\n\nB.prototype.set_label =
>> function(value) {\n\tvar self = this;\n\tself._label = value;\n};";
>> >          assertOut(expected);
>> >      }
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
>> > index a1a759a..7aed95a 100644
>> > ---
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
>> > +++
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
>> > @@ -31,6 +31,15 @@ import org.junit.Test;
>> >  public class TestFlexJSClass extends TestGoogClass
>> >  {
>> >
>> > +    @Test
>> > +    public void testConstructor_withArgumentNameMatchingMemberName()
>> > +    {
>> > +        IClassNode node = getClassNode("public class B {public function
>> B(arg1:String) {this.arg1 = arg1}; public var arg1:String;}");
>> > +        asBlockWalker.visitClass(node);
>> > +        String expected = "/**\n * @constructor\n * @param {string}
>> arg1\n */\norg.apache.flex.B = function(arg1) {\n\tvar self =
>> this;\n\tself.arg1 = arg1;\n};\n\n/**\n * @type {string}\n
>> */\norg.apache.flex.B.prototype.arg1;";
>> > +        assertOut(expected);
>> > +    }
>> > +
>> >      @Override
>> >      @Test
>> >      public void testAccessors()
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
>> > index c96bf60..6968c38 100644
>> > ---
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
>> > +++
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
>> > @@ -24,6 +24,7 @@ import
>> org.apache.flex.compiler.internal.codegen.js.goog.TestGoogExpressions;
>> >  import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
>> >  import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
>> >  import org.apache.flex.compiler.tree.as.IFunctionNode;
>> > +import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
>> >  import org.junit.Test;
>> >
>> >  /**
>> > @@ -34,6 +35,38 @@ public class TestFlexJSExpressions extends
>> TestGoogExpressions
>> >
>> >      @Override
>> >      @Test
>> > +    public void testVisitLanguageIdentifierNode_This()
>> > +    {
>> > +        IMemberAccessExpressionNode node =
>> (IMemberAccessExpressionNode) getNode(
>> > +                "if (a) this.a;", IMemberAccessExpressionNode.class);
>> > +        asBlockWalker.visitMemberAccessExpression(node);
>> > +        assertOut("a");
>> > +    }
>> > +
>> > +    @Override
>> > +    @Test
>> > +    public void testVisitLanguageIdentifierNode_This1()
>> > +    {
>> > +        IMemberAccessExpressionNode node =
>> (IMemberAccessExpressionNode) getNode(
>> > +                "if (a) this.a;", IMemberAccessExpressionNode.class);
>> > +
>> > +        asBlockWalker.visitMemberAccessExpression(node);
>> > +        assertOut("a");
>> > +    }
>> > +
>> > +    @Override
>> > +    @Test
>> > +    public void testVisitLanguageIdentifierNode_This2()
>> > +    {
>> > +        IMemberAccessExpressionNode node =
>> (IMemberAccessExpressionNode) getNode(
>> > +                "if (a) this.a;", IMemberAccessExpressionNode.class);
>> > +
>> > +        asBlockWalker.visitMemberAccessExpression(node);
>> > +        assertOut("a");
>> > +    }
>> > +
>> > +    @Override
>> > +    @Test
>> >      public void testVisitLanguageIdentifierNode_SuperMethod_1()
>> >      {
>> >          IFunctionNode node = getMethod("function foo(){if (a)
>> super.foo();}");
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
>> > index 15310f7..1df4b71 100644
>> > ---
>> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
>> > +++
>> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
>> > @@ -22,6 +22,8 @@ package
>> org.apache.flex.compiler.internal.codegen.js.flexjs;
>> >  import org.apache.flex.compiler.driver.IBackend;
>> >  import
>> org.apache.flex.compiler.internal.codegen.js.goog.TestGoogMethodMembers;
>> >  import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
>> > +import org.apache.flex.compiler.tree.as.IFunctionNode;
>> > +import org.junit.Test;
>> >
>> >  /**
>> >   * @author Erik de Bruin
>> > @@ -29,6 +31,38 @@ import
>> org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
>> >  public class TestFlexJSMethodMembers extends TestGoogMethodMembers
>> >  {
>> >
>> > +
>>  //--------------------------------------------------------------------------
>> > +    // Doc Specific Tests
>> > +
>>  //--------------------------------------------------------------------------
>> > +
>> > +    @Override
>> > +    @Test
>> > +    public void testConstructor_withThisInBody()
>> > +    {
>> > +        IFunctionNode node = getMethod("public function
>> A(){this.foo;};");
>> > +        asBlockWalker.visitFunction(node);
>> > +        assertOut("/**\n * @constructor\n */\nA = function() {\n\tvar
>> self = this;\n\tfoo;\n}");
>> > +    }
>> > +
>> > +    @Override
>> > +    @Test
>> > +    public void testMethod_withThisInBody()
>> > +    {
>> > +        IFunctionNode node = getMethod("function foo(){this.foo;}");
>> > +        asBlockWalker.visitFunction(node);
>> > +        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function()
>> {\n\tvar self = this;\n\tfoo;\n}");
>> > +    }
>> > +
>> > +    @Override
>> > +    @Test
>> > +    public void testMethod_withThisInBodyComplex()
>> > +    {
>> > +        IFunctionNode node = getMethod("function
>> foo(){if(true){while(i){this.bar(42);}}}");
>> > +        asBlockWalker.visitFunction(node);
>> > +        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function()
>> {\n\tvar self = this;\n\tif (true) "
>> > +                + "{\n\t\twhile (i) {\n\t\t\tbar(42);\n\t\t}\n\t}\n}");
>> > +    }
>> > +
>> >      @Override
>> >      protected IBackend createBackend()
>> >      {
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
>> > index dd4d137..4f58975 100644
>> > ---
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
>> > +++
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
>> > @@ -32,6 +32,7 @@ import
>> org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
>> >  import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
>> >  import
>> org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
>> >  import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
>> > +import
>> org.apache.flex.compiler.internal.definitions.ParameterDefinition;
>> >  import
>> org.apache.flex.compiler.internal.tree.as.BinaryOperatorAssignmentNode;
>> >  import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
>> >  import org.apache.flex.compiler.internal.tree.as.FunctionNode;
>> > @@ -47,6 +48,7 @@ import
>> org.apache.flex.compiler.tree.as.IFunctionCallNode;
>> >  import org.apache.flex.compiler.tree.as.IFunctionNode;
>> >  import org.apache.flex.compiler.tree.as.IGetterNode;
>> >  import org.apache.flex.compiler.tree.as.IIdentifierNode;
>> > +import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
>> >  import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
>> >  import org.apache.flex.compiler.tree.as.ISetterNode;
>> >  import org.apache.flex.compiler.utils.ASNodeUtils;
>> > @@ -94,7 +96,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter
>> implements IJSFlexJSEmitter
>> >          ASTNodeID inode = pnode.getNodeID();
>> >
>> >          boolean writeSelf = false;
>> > -        if (cnode != null)
>> > +        if (cnode != null && !(def instanceof ParameterDefinition))
>> >          {
>> >              IDefinitionNode[] members = cnode.getAllMemberNodes();
>> >              for (IDefinitionNode mnode : members)
>> > @@ -335,6 +337,20 @@ public class JSFlexJSEmitter extends JSGoogEmitter
>> implements IJSFlexJSEmitter
>> >      }
>> >
>> >      @Override
>> > +    public void emitMemberAccessExpression(IMemberAccessExpressionNode
>> node)
>> > +    {
>> > +        IASNode leftNode = node.getLeftOperandNode();
>> > +
>> > +        if (!(leftNode instanceof ILanguageIdentifierNode &&
>> ((ILanguageIdentifierNode) leftNode)
>> > +                .getKind() ==
>> ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
>> > +        {
>> > +            getWalker().walk(node.getLeftOperandNode());
>> > +            write(node.getOperator().getOperatorText());
>> > +        }
>> > +        getWalker().walk(node.getRightOperandNode());
>> > +    }
>> > +
>> > +    @Override
>> >      protected void emitObjectDefineProperty(IAccessorNode node)
>> >      {
>> >          /*
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > index 49832a3..430ec4b 100644
>> > ---
>> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > +++
>> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
>> > @@ -191,9 +191,15 @@ public class MXMLFlexJSPublisher extends
>> JSGoogPublisher implements
>> >          htmlFile.append("</head>\n");
>> >          htmlFile.append("<body>\n");
>> >          htmlFile.append("\t<script type=\"text/javascript\">\n");
>> > +
>> > +        // TODO (erikdebruin) the utility methods should have their own
>> place...
>> > +        htmlFile.append("\t\tfunction is(object, type) {return
>> object;};\n");
>> > +        htmlFile.append("\t\t\n");
>> > +
>> >          htmlFile.append("\t\tnew ");
>> >          htmlFile.append(projectName);
>> > -        htmlFile.append("();\n");
>> > +        htmlFile.append("()");
>> > +        htmlFile.append(".start()\n");
>> >          htmlFile.append("\t</script>\n");
>> >          htmlFile.append("</body>\n");
>> >          htmlFile.append("</html>");
>> >
>>
>>
>>
>> --
>> 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

Re: git commit: FlexJS application now shows in browser

Posted by Om <bi...@gmail.com>.
Awesome!  Any chance you can put up the working demo onto your people.a.o
site?  Makes it easier for folks to see what's happening.

Thanks,
Om
On Mar 27, 2013 4:15 PM, "Erik de Bruin" <er...@ixsoftware.nl> wrote:

> Forgot to mention this in the commit message: this goes only for the
> 'js-debug' code. The 'js-release' code has some more issues that
> currently prevent it from showing the view in the browser.
>
> EdB
>
>
>
> On Thu, Mar 28, 2013 at 12:07 AM,  <er...@apache.org> wrote:
> > Updated Branches:
> >   refs/heads/develop d8bb65f1e -> 112d8ca7f
> >
> >
> > FlexJS application now shows in browser
> >
> > Fixed various issues related to JS errors that prevented the FlexJS
> application from showing it's view in the browser. Note: although the view
> components are displayed as expected, none of the functionality is working.
> >
> > Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
> > Commit:
> http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/112d8ca7
> > Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/112d8ca7
> > Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/112d8ca7
> >
> > Branch: refs/heads/develop
> > Commit: 112d8ca7ff1e218404e964f9242a104acee20311
> > Parents: d8bb65f
> > Author: Erik de Bruin <er...@ixsoftware.nl>
> > Authored: Thu Mar 28 00:07:11 2013 +0100
> > Committer: Erik de Bruin <er...@ixsoftware.nl>
> > Committed: Thu Mar 28 00:07:11 2013 +0100
> >
> > ----------------------------------------------------------------------
> >  .../codegen/js/flexjs/TestFlexJSAccessors.java     |   12 +++---
> >  .../codegen/js/flexjs/TestFlexJSClass.java         |    9 ++++
> >  .../codegen/js/flexjs/TestFlexJSExpressions.java   |   33 ++++++++++++++
> >  .../codegen/js/flexjs/TestFlexJSMethodMembers.java |   34
> +++++++++++++++
> >  .../codegen/js/flexjs/JSFlexJSEmitter.java         |   18 +++++++-
> >  .../codegen/mxml/flexjs/MXMLFlexJSPublisher.java   |    8 +++-
> >  6 files changed, 106 insertions(+), 8 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
> > ----------------------------------------------------------------------
> > diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
> > index cee5079..6e3e842 100644
> > ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
> > +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
> > @@ -46,10 +46,10 @@ public class TestFlexJSAccessors extends ASTestBase
> >      public void testSetAccessorWithMemberAccessOnLeftSide()
> >      {
> >          IClassNode node = (IClassNode) getNode(
> > -                "public function A() {}; public function doStuff():void
> {this.label = label + 'bye'; var theLabel:String = label;}; private var
> _label:String; public function get label():String {return _label}; public
> function set label(value:String):void {_label = value}; ",
> > -                IClassNode.class, WRAP_LEVEL_CLASS);
> > +                "public class B { public function B() {}; public
> function doStuff():void {this.label = label + 'bye'; var theLabel:String =
> label;}; private var _label:String; public function get label():String
> {return _label}; public function set label(value:String):void {_label =
> value};}",
> > +                IClassNode.class, WRAP_LEVEL_PACKAGE);
> >          asBlockWalker.visitClass(node);
> > -        String expected = "/**\n * @constructor\n */\nA = function()
> {\n};\n\n/**\n * @this {A}\n */\nA.prototype.doStuff = function() {\n\tvar
> self = this;\n\tthis.set_label(get_label() + 'bye');\n\tvar /** @type
> {string} */ theLabel = get_label();\n};\n\n/**\n * @private\n * @type
> {string}\n */\nA.prototype._label;\n\nA.prototype.get_label = function()
> {\n\tvar self = this;\n\treturn _label;\n};\n\nA.prototype.set_label =
> function(value) {\n\tvar self = this;\n\t_label = value;\n};";
> > +        String expected = "/**\n * @constructor\n */\nB = function()
> {\n};\n\n/**\n * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar
> self = this;\n\tself.set_label(self.get_label() + 'bye');\n\tvar /** @type
> {string} */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type
> {string}\n */\nB.prototype._label;\n\nB.prototype.get_label = function()
> {\n\tvar self = this;\n\treturn self._label;\n};\n\nB.prototype.set_label =
> function(value) {\n\tvar self = this;\n\tself._label = value;\n};";
> >          assertOut(expected);
> >      }
> >
> > @@ -68,10 +68,10 @@ public class TestFlexJSAccessors extends ASTestBase
> >      public void testSetAccessorWithMemberAccessOnRightSide()
> >      {
> >          IClassNode node = (IClassNode) getNode(
> > -                "public function A() {}; public function doStuff():void
> {label = this.label; var theLabel:String = label;}; private var
> _label:String; public function get label():String {return _label}; public
> function set label(value:String):void {_label = value}; ",
> > -                IClassNode.class, WRAP_LEVEL_CLASS);
> > +                "public class B { public function B() {}; public
> function doStuff():void {label = this.label; var theLabel:String = label;};
> private var _label:String; public function get label():String {return
> _label}; public function set label(value:String):void {_label = value};}",
> > +                IClassNode.class, WRAP_LEVEL_PACKAGE);
> >          asBlockWalker.visitClass(node);
> > -        String expected = "/**\n * @constructor\n */\nA = function()
> {\n};\n\n/**\n * @this {A}\n */\nA.prototype.doStuff = function() {\n\tvar
> self = this;\n\tset_label(this.get_label());\n\tvar /** @type {string} */
> theLabel = get_label();\n};\n\n/**\n * @private\n * @type {string}\n
> */\nA.prototype._label;\n\nA.prototype.get_label = function() {\n\tvar self
> = this;\n\treturn _label;\n};\n\nA.prototype.set_label = function(value)
> {\n\tvar self = this;\n\t_label = value;\n};";
> > +        String expected = "/**\n * @constructor\n */\nB = function()
> {\n};\n\n/**\n * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar
> self = this;\n\tself.set_label(self.get_label());\n\tvar /** @type {string}
> */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type
> {string}\n */\nB.prototype._label;\n\nB.prototype.get_label = function()
> {\n\tvar self = this;\n\treturn self._label;\n};\n\nB.prototype.set_label =
> function(value) {\n\tvar self = this;\n\tself._label = value;\n};";
> >          assertOut(expected);
> >      }
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
> > ----------------------------------------------------------------------
> > diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
> > index a1a759a..7aed95a 100644
> > ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
> > +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
> > @@ -31,6 +31,15 @@ import org.junit.Test;
> >  public class TestFlexJSClass extends TestGoogClass
> >  {
> >
> > +    @Test
> > +    public void testConstructor_withArgumentNameMatchingMemberName()
> > +    {
> > +        IClassNode node = getClassNode("public class B {public function
> B(arg1:String) {this.arg1 = arg1}; public var arg1:String;}");
> > +        asBlockWalker.visitClass(node);
> > +        String expected = "/**\n * @constructor\n * @param {string}
> arg1\n */\norg.apache.flex.B = function(arg1) {\n\tvar self =
> this;\n\tself.arg1 = arg1;\n};\n\n/**\n * @type {string}\n
> */\norg.apache.flex.B.prototype.arg1;";
> > +        assertOut(expected);
> > +    }
> > +
> >      @Override
> >      @Test
> >      public void testAccessors()
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
> > ----------------------------------------------------------------------
> > diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
> > index c96bf60..6968c38 100644
> > ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
> > +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
> > @@ -24,6 +24,7 @@ import
> org.apache.flex.compiler.internal.codegen.js.goog.TestGoogExpressions;
> >  import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
> >  import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
> >  import org.apache.flex.compiler.tree.as.IFunctionNode;
> > +import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
> >  import org.junit.Test;
> >
> >  /**
> > @@ -34,6 +35,38 @@ public class TestFlexJSExpressions extends
> TestGoogExpressions
> >
> >      @Override
> >      @Test
> > +    public void testVisitLanguageIdentifierNode_This()
> > +    {
> > +        IMemberAccessExpressionNode node =
> (IMemberAccessExpressionNode) getNode(
> > +                "if (a) this.a;", IMemberAccessExpressionNode.class);
> > +        asBlockWalker.visitMemberAccessExpression(node);
> > +        assertOut("a");
> > +    }
> > +
> > +    @Override
> > +    @Test
> > +    public void testVisitLanguageIdentifierNode_This1()
> > +    {
> > +        IMemberAccessExpressionNode node =
> (IMemberAccessExpressionNode) getNode(
> > +                "if (a) this.a;", IMemberAccessExpressionNode.class);
> > +
> > +        asBlockWalker.visitMemberAccessExpression(node);
> > +        assertOut("a");
> > +    }
> > +
> > +    @Override
> > +    @Test
> > +    public void testVisitLanguageIdentifierNode_This2()
> > +    {
> > +        IMemberAccessExpressionNode node =
> (IMemberAccessExpressionNode) getNode(
> > +                "if (a) this.a;", IMemberAccessExpressionNode.class);
> > +
> > +        asBlockWalker.visitMemberAccessExpression(node);
> > +        assertOut("a");
> > +    }
> > +
> > +    @Override
> > +    @Test
> >      public void testVisitLanguageIdentifierNode_SuperMethod_1()
> >      {
> >          IFunctionNode node = getMethod("function foo(){if (a)
> super.foo();}");
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
> > ----------------------------------------------------------------------
> > diff --git
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
> > index 15310f7..1df4b71 100644
> > ---
> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
> > +++
> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
> > @@ -22,6 +22,8 @@ package
> org.apache.flex.compiler.internal.codegen.js.flexjs;
> >  import org.apache.flex.compiler.driver.IBackend;
> >  import
> org.apache.flex.compiler.internal.codegen.js.goog.TestGoogMethodMembers;
> >  import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
> > +import org.apache.flex.compiler.tree.as.IFunctionNode;
> > +import org.junit.Test;
> >
> >  /**
> >   * @author Erik de Bruin
> > @@ -29,6 +31,38 @@ import
> org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
> >  public class TestFlexJSMethodMembers extends TestGoogMethodMembers
> >  {
> >
> > +
>  //--------------------------------------------------------------------------
> > +    // Doc Specific Tests
> > +
>  //--------------------------------------------------------------------------
> > +
> > +    @Override
> > +    @Test
> > +    public void testConstructor_withThisInBody()
> > +    {
> > +        IFunctionNode node = getMethod("public function
> A(){this.foo;};");
> > +        asBlockWalker.visitFunction(node);
> > +        assertOut("/**\n * @constructor\n */\nA = function() {\n\tvar
> self = this;\n\tfoo;\n}");
> > +    }
> > +
> > +    @Override
> > +    @Test
> > +    public void testMethod_withThisInBody()
> > +    {
> > +        IFunctionNode node = getMethod("function foo(){this.foo;}");
> > +        asBlockWalker.visitFunction(node);
> > +        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function()
> {\n\tvar self = this;\n\tfoo;\n}");
> > +    }
> > +
> > +    @Override
> > +    @Test
> > +    public void testMethod_withThisInBodyComplex()
> > +    {
> > +        IFunctionNode node = getMethod("function
> foo(){if(true){while(i){this.bar(42);}}}");
> > +        asBlockWalker.visitFunction(node);
> > +        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function()
> {\n\tvar self = this;\n\tif (true) "
> > +                + "{\n\t\twhile (i) {\n\t\t\tbar(42);\n\t\t}\n\t}\n}");
> > +    }
> > +
> >      @Override
> >      protected IBackend createBackend()
> >      {
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
> > ----------------------------------------------------------------------
> > diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
> > index dd4d137..4f58975 100644
> > ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
> > +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
> > @@ -32,6 +32,7 @@ import
> org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
> >  import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
> >  import
> org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
> >  import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
> > +import
> org.apache.flex.compiler.internal.definitions.ParameterDefinition;
> >  import
> org.apache.flex.compiler.internal.tree.as.BinaryOperatorAssignmentNode;
> >  import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
> >  import org.apache.flex.compiler.internal.tree.as.FunctionNode;
> > @@ -47,6 +48,7 @@ import
> org.apache.flex.compiler.tree.as.IFunctionCallNode;
> >  import org.apache.flex.compiler.tree.as.IFunctionNode;
> >  import org.apache.flex.compiler.tree.as.IGetterNode;
> >  import org.apache.flex.compiler.tree.as.IIdentifierNode;
> > +import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
> >  import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
> >  import org.apache.flex.compiler.tree.as.ISetterNode;
> >  import org.apache.flex.compiler.utils.ASNodeUtils;
> > @@ -94,7 +96,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter
> implements IJSFlexJSEmitter
> >          ASTNodeID inode = pnode.getNodeID();
> >
> >          boolean writeSelf = false;
> > -        if (cnode != null)
> > +        if (cnode != null && !(def instanceof ParameterDefinition))
> >          {
> >              IDefinitionNode[] members = cnode.getAllMemberNodes();
> >              for (IDefinitionNode mnode : members)
> > @@ -335,6 +337,20 @@ public class JSFlexJSEmitter extends JSGoogEmitter
> implements IJSFlexJSEmitter
> >      }
> >
> >      @Override
> > +    public void emitMemberAccessExpression(IMemberAccessExpressionNode
> node)
> > +    {
> > +        IASNode leftNode = node.getLeftOperandNode();
> > +
> > +        if (!(leftNode instanceof ILanguageIdentifierNode &&
> ((ILanguageIdentifierNode) leftNode)
> > +                .getKind() ==
> ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
> > +        {
> > +            getWalker().walk(node.getLeftOperandNode());
> > +            write(node.getOperator().getOperatorText());
> > +        }
> > +        getWalker().walk(node.getRightOperandNode());
> > +    }
> > +
> > +    @Override
> >      protected void emitObjectDefineProperty(IAccessorNode node)
> >      {
> >          /*
> >
> >
> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/112d8ca7/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> > ----------------------------------------------------------------------
> > diff --git
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> > index 49832a3..430ec4b 100644
> > ---
> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> > +++
> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
> > @@ -191,9 +191,15 @@ public class MXMLFlexJSPublisher extends
> JSGoogPublisher implements
> >          htmlFile.append("</head>\n");
> >          htmlFile.append("<body>\n");
> >          htmlFile.append("\t<script type=\"text/javascript\">\n");
> > +
> > +        // TODO (erikdebruin) the utility methods should have their own
> place...
> > +        htmlFile.append("\t\tfunction is(object, type) {return
> object;};\n");
> > +        htmlFile.append("\t\t\n");
> > +
> >          htmlFile.append("\t\tnew ");
> >          htmlFile.append(projectName);
> > -        htmlFile.append("();\n");
> > +        htmlFile.append("()");
> > +        htmlFile.append(".start()\n");
> >          htmlFile.append("\t</script>\n");
> >          htmlFile.append("</body>\n");
> >          htmlFile.append("</html>");
> >
>
>
>
> --
> Ix Multimedia Software
>
> Jan Luykenstraat 27
> 3521 VB Utrecht
>
> T. 06-51952295
> I. www.ixsoftware.nl
>