FLEX-35131 try to fix xml literals with expressions

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

Branch: refs/heads/develop
Commit: c26bafd60afdd829bcfd0e84678cba1bc31478d4
Parents: 3ef1ef5
Author: Alex Harui <aha...@apache.org>
Authored: Tue Sep 13 21:38:37 2016 -0700
Committer: Alex Harui <aha...@apache.org>
Committed: Tue Sep 13 21:41:07 2016 -0700

----------------------------------------------------------------------
 .../internal/codegen/js/jx/LiteralEmitter.java      | 16 ++++++++++++++--
 .../codegen/js/flexjs/TestFlexJSGlobalClasses.java  | 15 ++++++++++++++-
 2 files changed, 28 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c26bafd6/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
 
b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
index 6b7cfb8..1a6c154 100644
--- 
a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
@@ -30,6 +30,7 @@ import 
org.apache.flex.compiler.internal.tree.as.XMLLiteralNode;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
+import org.apache.flex.utils.StringUtils;
 
 public class LiteralEmitter extends JSSubEmitter implements
         ISubEmitter<ILiteralNode>
@@ -64,6 +65,7 @@ public class LiteralEmitter extends JSSubEmitter implements
                {
                                StringBuilder sb = new StringBuilder();
                        // probably contains {initializers}
+                               boolean inAttribute = false;
                        int n = xmlNode.getContentsNode().getChildCount();
                        for (int i = 0; i < n; i++)
                        {
@@ -78,11 +80,21 @@ public class LiteralEmitter extends JSSubEmitter implements
                                else
                                        sb.append("'" + s + "'");
                                }
-                               else if (child instanceof IdentifierNode)
+                               else
                                {
                                        s = getEmitter().stringifyNode(child);
-                                       sb.append(s);
+                                       if (inAttribute)
+                                       {
+                                               sb.append("'\"' + ");
+
+                                               sb.append(s);
+                                               
+                                               sb.append(" + '\"'");
+                                       }
+                                       else
+                                               sb.append(s);
                                }
+                                       inAttribute = s.equals("=");
                        }
                        s = sb.toString();
                }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c26bafd6/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
----------------------------------------------------------------------
diff --git 
a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
 
b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
index fa17867..291368d 100644
--- 
a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
+++ 
b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
@@ -351,7 +351,20 @@ public class TestFlexJSGlobalClasses extends 
TestGoogGlobalClasses
                                                                 "private 
function test() { var a:XML = <{tagname} 
{attributename}={attributevalue}>{content}</{tagname}>;}",
                                                                 
VariableNode.class, WRAP_LEVEL_CLASS);
         asBlockWalker.visitVariable(node);
-        assertOut("var /** @type {XML} */ a = new XML( '<' + this.tagname + ' 
' + this.attributename + '=' + this.attributevalue + '>' + this.content + '</' 
+ this.tagname + '>')");
+        assertOut("var /** @type {XML} */ a = new XML( '<' + this.tagname + ' 
' + this.attributename + '=' + '\"' + this.attributevalue + '\"' + '>' + 
this.content + '</' + this.tagname + '>')");
+    }
+    
+    @Test
+    public void testXMLLiteralWithTemplateExpression()
+    {
+        VariableNode node = (VariableNode)getNode("private function get 
tagname():String { return 'name'; };\n" +
+                                                                "private 
function get attributename():String { return 'id'; };\n" +
+                                                                "private 
function get attributevalue():Number { return 5; };\n" +
+                                                                "private 
function get content():String { return 'Fred'; };\n" +
+                                                                "private 
function test() { var a:XML = <{tagname} {attributename}={attributevalue + \" 
\" + attributevalue}>{content}</{tagname}>;}",
+                                                                
VariableNode.class, WRAP_LEVEL_CLASS);
+        asBlockWalker.visitVariable(node);
+        assertOut("var /** @type {XML} */ a = new XML( '<' + this.tagname + ' 
' + this.attributename + '=' + '\"' + this.attributevalue + \" \" + 
this.attributevalue + '\"' + '>' + this.content + '</' + this.tagname + '>')");
     }
     
     @Test

Reply via email to