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