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