fix initializing complex values in [Bindable]
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/5e482df9 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/5e482df9 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/5e482df9 Branch: refs/heads/master Commit: 5e482df9d9812e06aec19ae3b5f2fe22574a1314 Parents: a6c4530 Author: Alex Harui <[email protected]> Authored: Fri Jan 13 13:13:01 2017 -0800 Committer: Alex Harui <[email protected]> Committed: Fri Jan 13 13:13:01 2017 -0800 ---------------------------------------------------------------------- .../internal/codegen/js/jx/ClassEmitter.java | 6 +- .../codegen/js/flexjs/TestFlexJSClass.java | 90 ++++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5e482df9/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java index 1717a64..573ff54 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java @@ -213,7 +213,7 @@ public class ClassEmitter extends JSSubEmitter implements IDefinitionNode[] dnodes = node.getAllMemberNodes(); for (IDefinitionNode dnode : dnodes) { - if (dnode.getNodeID() == ASTNodeID.VariableID) + if (dnode.getNodeID() == ASTNodeID.VariableID || dnode.getNodeID() == ASTNodeID.BindableVariableID) { IVariableNode varnode = ((IVariableNode)dnode); IExpressionNode vnode = varnode.getAssignedValueNode(); @@ -223,6 +223,10 @@ public class ClassEmitter extends JSSubEmitter implements write(ASEmitterTokens.THIS); write(ASEmitterTokens.MEMBER_ACCESS); write(dnode.getName()); + if (dnode.getNodeID() == ASTNodeID.BindableVariableID) + { + write("_"); + } write(ASEmitterTokens.SPACE); writeToken(ASEmitterTokens.EQUAL); getEmitter().getWalker().walk(vnode); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5e482df9/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java index bb03418..07c8000 100644 --- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java +++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java @@ -311,6 +311,96 @@ public class TestFlexJSClass extends TestGoogClass } @Test + public void testBindableFieldsWithInitialComplexValue() + { + IClassNode node = getClassNode("public class A {[Bindable] public var a:Object = { foo: 1 };[Bindable] protected var b:String; " + + "[Bindable] private var c:int; internal var d:uint; var e:Number}"); + asBlockWalker.visitClass(node); + assertOut("/**\n * @constructor\n" + + " */\norg.apache.flex.A = function() {\n\n" + + "this.a_ = {foo:1};\n" + + "};\n\n\n" + + "/**\n" + + " * @export\n" + + " * @type {Object}\n" + + " */\n" + + "org.apache.flex.A.prototype.a_;\n\n\n" + + "/**\n" + + " * @protected\n" + + " * @type {string}\n" + + " */\n" + + "org.apache.flex.A.prototype.b_;\n\n\n" + + "/**\n" + + " * @private\n" + + " * @type {number}\n" + + " */\n" + + "org.apache.flex.A.prototype.c_ = 0;\n\n\n" + + "/**\n" + + " * @export\n" + + " * @type {number}\n" + + " */\n" + + "org.apache.flex.A.prototype.d = 0;\n\n\n" + + "/**\n" + + " * @export\n" + + " * @type {number}\n" + + " */\n" + + "org.apache.flex.A.prototype.e;Object.defineProperties(org.apache.flex.A.prototype, /** @lends {org.apache.flex.A.prototype} */ {\n" + + "/** @export\n" + + " * @type {Object} */\n" + + "a: {\n" + + "/** @this {org.apache.flex.A} */\n" + + " get: function() {\n" + + " return this.a_;\n" + + " },\n" + + "\n" + + "/** @this {org.apache.flex.A} */\n" + + "set: function(value) {\n" + + "if (value != this.a_) {\n" + + " var oldValue = this.a_;\n" + + " this.a_ = value;\n" + + " this.dispatchEvent(org.apache.flex.events.ValueChangeEvent.createUpdateEvent(\n" + + " this, \"a\", oldValue, value));\n" + + "}\n" + + "}}," + + "/** @export\n" + + " * @private\n" + + " * @type {string} */\n" + + "b: {\n" + + "/** @this {org.apache.flex.A} */\n" + + " get: function() {\n" + + " return this.b_;\n" + + " },\n" + + "\n" + + "/** @this {org.apache.flex.A} */\n" + + "set: function(value) {\n" + + "if (value != this.b_) {\n" + + " var oldValue = this.b_;\n" + + " this.b_ = value;\n" + + " this.dispatchEvent(org.apache.flex.events.ValueChangeEvent.createUpdateEvent(\n" + + " this, \"b\", oldValue, value));\n" + + "}\n" + + "}},/** @export\n" + + " * @private\n" + + " * @type {number} */\n" + + "c: {\n" + + "/** @this {org.apache.flex.A} */\n" + + " get: function() {\n" + + " return this.c_;\n" + + " },\n" + + "\n" + + "/** @this {org.apache.flex.A} */\n" + + "set: function(value) {\n" + + "if (value != this.c_) {\n" + + " var oldValue = this.c_;\n" + + " this.c_ = value;\n" + + " this.dispatchEvent(org.apache.flex.events.ValueChangeEvent.createUpdateEvent(\n" + + " this, \"c\", oldValue, value));\n" + + "}\n" + + "}}}\n" + + ");"); + } + + @Test public void testBindableClass() { IClassNode node = getClassNode("[Bindable] public class A {public var a:Object;protected var b:String; "
