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 <bigosma...@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" <e...@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, <erikdebr...@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 <e...@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 <e...@ixsoftware.nl> >> > Authored: Thu Mar 28 00:07:11 2013 +0100 >> > Committer: Erik de Bruin <e...@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