Repository: flex-falcon Updated Branches: refs/heads/develop 3a67410b6 -> 4ff47a036
FLEX-35070 handle more XML in for each Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/4ff47a03 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/4ff47a03 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/4ff47a03 Branch: refs/heads/develop Commit: 4ff47a0366b731c7649eb204bc572893fd9e2325 Parents: 3a67410 Author: Alex Harui <[email protected]> Authored: Sat Nov 19 23:08:31 2016 -0800 Committer: Alex Harui <[email protected]> Committed: Sat Nov 19 23:08:31 2016 -0800 ---------------------------------------------------------------------- .../internal/codegen/js/jx/ForEachEmitter.java | 29 ++++++++++++++++++++ compiler-jx/src/test/build.xml | 1 + .../js/flexjs/TestFlexJSGlobalClasses.java | 26 ++++++++++++++++++ 3 files changed, 56 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ff47a03/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java index 78d0b40..f3651f7 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java @@ -21,9 +21,11 @@ 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.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.FunctionCallNode; import org.apache.flex.compiler.internal.tree.as.IdentifierNode; import org.apache.flex.compiler.internal.tree.as.LabeledStatementNode; import org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode; @@ -128,6 +130,33 @@ public class ForEachEmitter extends JSSubEmitter implements isXML = true; } } + else if (obj.getNodeID() == ASTNodeID.Op_AsID) + { + IASNode asChild = obj.getChild(1); + if (asChild.getNodeID() == ASTNodeID.IdentifierID) + { + String asName = ((IdentifierNode)asChild).getName(); + if (asName.equals(IASLanguageConstants.XML) || asName.equals(IASLanguageConstants.XMLList)) + { + write(".elementNames()"); + isXML = true; + } + } + } + else if (obj.getNodeID() == ASTNodeID.FunctionCallID) + { + FunctionCallNode func = (FunctionCallNode)obj; + IExpressionNode funcName = func.getNameNode(); + if (funcName.getNodeID() == ASTNodeID.IdentifierID) + { + String asName = ((IdentifierNode)funcName).getName(); + if (asName.equals(IASLanguageConstants.XML) || asName.equals(IASLanguageConstants.XMLList)) + { + write(".elementNames()"); + isXML = true; + } + } + } endMapping(rnode); startMapping(node, cnode); writeToken(ASEmitterTokens.PAREN_CLOSE); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ff47a03/compiler-jx/src/test/build.xml ---------------------------------------------------------------------- diff --git a/compiler-jx/src/test/build.xml b/compiler-jx/src/test/build.xml index d1d6a4a..9f8a196 100644 --- a/compiler-jx/src/test/build.xml +++ b/compiler-jx/src/test/build.xml @@ -53,6 +53,7 @@ <target name="unit.tests" depends="download, compile.unit.tests"> <mkdir dir="${compiler}/target/junit-results"/> + <delete dir="${compiler}/target/junit-temp"/> <mkdir dir="${compiler}/target/junit-temp"/> <junit dir="${compiler.tests}" fork="yes" forkMode="perBatch" maxmemory="${maxmem}m" timeout="${test.timeout}" http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ff47a03/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 f18f332..acfd22e 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 @@ -603,6 +603,16 @@ public class TestFlexJSGlobalClasses extends TestGoogGlobalClasses assertOut("var /** @type {XMLList} */ b = a.descendants('child')"); } + @Ignore + public void testXMLDoubleDotLiteral() + { + IVariableNode node = getVariable("var xml:XML; var a:XML = xml..('http://ns.adobe.com/mxml/2009')::catalog_item[0];"); + IASNode parentNode = node.getParent(); + node = (IVariableNode) parentNode.getChild(1); + asBlockWalker.visitVariable(node); + assertOut("var /** @type {XML} */ a = xml.descendants('http://ns.adobe.com/mxml/2009::catalog_item')[0];"); + } + @Test public void testXMLAttribute() { @@ -770,6 +780,22 @@ public class TestFlexJSGlobalClasses extends TestGoogGlobalClasses } @Test + public void testXMLForEachLoopAs() + { + IForLoopNode node = getForLoopNode("var a:*;for each (var p:XML in (a as XMLList)) var i:int = p.length();"); + asBlockWalker.visitForLoop(node); + assertOut("var foreachiter0_target = org.apache.flex.utils.Language.as(a, XMLList);\nfor (var foreachiter0 in foreachiter0_target.elementNames()) \n{\nvar p = foreachiter0_target.child(foreachiter0);\n\n var /** @type {number} */ i = p.length();}\n"); + } + + @Test + public void testXMLForEachLoopCast() + { + IForLoopNode node = getForLoopNode("var a:*;for each (var p:XML in XMLList(a)) var i:int = p.length();"); + asBlockWalker.visitForLoop(node); + assertOut("var foreachiter0_target = XMLList(a);\nfor (var foreachiter0 in foreachiter0_target.elementNames()) \n{\nvar p = foreachiter0_target.child(foreachiter0);\n\n var /** @type {number} */ i = p.length();}\n"); + } + + @Test public void testNamespaceNoArg() { IVariableNode node = getVariable("var a:Namespace = new Namespace();");
