Repository: flex-falcon
Updated Branches:
  refs/heads/develop 04d28a8a8 -> 50626db13


generate toString() for certain cases in variable initializers


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

Branch: refs/heads/develop
Commit: 50626db13a9f444aba158ac434034580e337ac5a
Parents: 04d28a8
Author: Alex Harui <[email protected]>
Authored: Thu Aug 4 13:24:16 2016 -0700
Committer: Alex Harui <[email protected]>
Committed: Thu Aug 4 13:24:25 2016 -0700

----------------------------------------------------------------------
 .../codegen/js/jx/VarDeclarationEmitter.java    | 14 ++++++++++---
 .../js/flexjs/TestFlexJSFieldMembers.java       |  8 +++++++
 .../js/flexjs/TestFlexJSGlobalClasses.java      | 22 +++++++++++++++++++-
 3 files changed, 40 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/50626db1/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
 
b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
index 911a280..c9311fd 100644
--- 
a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
@@ -21,11 +21,14 @@ package org.apache.flex.compiler.internal.codegen.js.jx;
 
 import org.apache.flex.compiler.codegen.ISubEmitter;
 import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.constants.IASLanguageConstants;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
+import org.apache.flex.compiler.internal.tree.as.IdentifierNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IEmbedNode;
 import org.apache.flex.compiler.tree.as.IExpressionNode;
@@ -72,14 +75,14 @@ public class VarDeclarationEmitter extends JSSubEmitter 
implements
                     nameExpressionNode.getColumn() + 
nameExpressionNode.getAbsoluteEnd() - nameExpressionNode.getAbsoluteStart());
         }
         IExpressionNode avnode = node.getAssignedValueNode();
+        IDefinition avdef = null;
         if (avnode != null)
         {
-            IDefinition def = avnode.resolveType(getWalker().getProject());
-
+               avdef = avnode.resolveType(getWalker().getProject());
             String opcode = avnode.getNodeID().getParaphrase();
             if (opcode != "AnonymousFunction")
             {
-                fjs.getDocEmitter().emitVarDoc(node, def, 
getWalker().getProject());
+                fjs.getDocEmitter().emitVarDoc(node, avdef, 
getWalker().getProject());
             }
         }
         else
@@ -108,6 +111,11 @@ public class VarDeclarationEmitter extends JSSubEmitter 
implements
             writeToken(ASEmitterTokens.EQUAL);
             endMapping(node);
             fjs.emitAssignedValue(avnode);
+            if (variableTypeNode.getNodeID() == ASTNodeID.IdentifierID &&
+               
((IdentifierNode)variableTypeNode).getName().equals(IASLanguageConstants.String)
 &&
+               (avdef == null || 
(!avdef.getQualifiedName().equals(IASLanguageConstants.String) &&
+                                           
!avdef.getQualifiedName().equals(IASLanguageConstants.Null))))
+               write(".toString()");
         }
 
         if (!(node instanceof ChainedVariableNode))

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/50626db1/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java
----------------------------------------------------------------------
diff --git 
a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java
 
b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java
index 0859a7b..151c628 100644
--- 
a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java
+++ 
b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java
@@ -47,6 +47,14 @@ public class TestFlexJSFieldMembers extends 
TestGoogFieldMembers
         assertOut("/**\n * @export\n * @type {*}\n 
*/\nFalconTest_A.prototype.foo");
     }
 
+    @Test
+    public void testField_withStringSetToNull()
+    {
+        IVariableNode node = getField("var foo:String = null;");
+        asBlockWalker.visitVariable(node);
+        assertOut("/**\n * @export\n * @type {string}\n 
*/\nFalconTest_A.prototype.foo = null");
+    }
+
     @Override
     @Test
     public void testField_withType()

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/50626db1/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 3da2876..e2a4e71 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
@@ -480,7 +480,7 @@ public class TestFlexJSGlobalClasses extends 
TestGoogGlobalClasses
         IASNode parentNode = node.getParent();
         node = (IVariableNode) parentNode.getChild(1);
         asBlockWalker.visitVariable(node);
-        assertOut("var /** @type {string} */ b = a.name()");
+        assertOut("var /** @type {string} */ b = a.name().toString()");
     }
     
     @Test
@@ -514,6 +514,26 @@ public class TestFlexJSGlobalClasses extends 
TestGoogGlobalClasses
     }
     
     @Test
+    public void testXMLAttributeToString()
+    {
+        IVariableNode node = getVariable("var a:XML = new XML(\"<top 
attr1='cat'><child attr2='dog'><grandchild 
attr3='fish'>text</grandchild></child></top>\");var b:String = a.@attr1;");
+        IASNode parentNode = node.getParent();
+        node = (IVariableNode) parentNode.getChild(1);
+        asBlockWalker.visitVariable(node);
+        assertOut("var /** @type {string} */ b = 
a.attribute('attr1').toString()");
+    }
+    
+    @Test
+    public void testStringSetToNull()
+    {
+        IVariableNode node = getVariable("var a:XML = new XML(\"<top 
attr1='cat'><child attr2='dog'><grandchild 
attr3='fish'>text</grandchild></child></top>\");var b:String = null;");
+        IASNode parentNode = node.getParent();
+        node = (IVariableNode) parentNode.getChild(1);
+        asBlockWalker.visitVariable(node);
+        assertOut("var /** @type {string} */ b = null");
+    }
+    
+    @Test
     public void testXMLFilter()
     {
         IVariableNode node = getVariable("var a:XML = new XML(\"<top 
attr1='cat'><child attr2='dog'><grandchild 
attr3='fish'>text</grandchild></child></top>\");var b:XMLList = 
a..grandchild.(@attr2 == 'fish');");

Reply via email to