You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/11/22 01:31:57 UTC

[3/7] git commit: [flex-falcon] [refs/heads/develop] - fix binding destination functions

fix binding destination functions


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/0d2c3f30
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/0d2c3f30
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/0d2c3f30

Branch: refs/heads/develop
Commit: 0d2c3f305891586de3bbebb30495e1e56c2360fb
Parents: 75b555a
Author: Alex Harui <ah...@apache.org>
Authored: Mon Nov 17 17:08:31 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Nov 21 14:58:15 2014 -0800

----------------------------------------------------------------------
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  | 31 ++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0d2c3f30/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index 7c59b1d..08b113e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -489,7 +489,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
             if (destNode != null)
             {
                 StringBuilder sb = new StringBuilder();
-                sb.append(asEmitter.stringifyNode(destNode));
+                sb.append(generateSetterFunction(destNode));
                 writeNewline(sb.toString() + ASEmitterTokens.COMMA.getToken());
             }
             else
@@ -531,7 +531,34 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         writeNewline("null" + ASEmitterTokens.SQUARE_CLOSE.getToken() + ASEmitterTokens.SEMICOLON.getToken());
     }
 
-    private void encodeWatcher(WatcherInfoBase watcherInfoBase)
+    private String generateSetterFunction(IExpressionNode destNode) {
+        IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
+        	.getASEmitter();
+		String body = asEmitter.stringifyNode(destNode);
+        
+		StringBuilder sb = new StringBuilder();
+		sb.append("function (value) { ");
+		int lastGet = body.lastIndexOf("get_");
+		int lastDot = body.lastIndexOf(".");
+		if (lastDot == lastGet - 1)
+		{
+			String object = body.substring(0, lastDot);
+			String getter = body.substring(lastDot);
+			String setter = getter.replace("get_", "set_");
+			setter = setter.replace("()", "(value)");
+			body = object + setter;
+			sb.append(body);
+		}
+		else
+		{
+			sb.append(body);
+			sb.append(" = value;");
+		}
+		sb.append(";}");
+		return sb.toString();
+	}
+
+	private void encodeWatcher(WatcherInfoBase watcherInfoBase)
     {
         IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
         .getASEmitter();