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; "

Reply via email to