merge develop, added insertArgumentBefore(), insertArgumentAfter(), and 
insertArgumentAt() in EmitterUtils to allow function call arguments to be 
expanded


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

Branch: refs/heads/develop
Commit: 2e464eef22c9824b6b6abb80f861fa26cc27696f
Parents: c381df3 bf746d0
Author: Josh Tynjala <[email protected]>
Authored: Fri Apr 1 13:10:22 2016 -0700
Committer: Josh Tynjala <[email protected]>
Committed: Fri Apr 1 13:10:22 2016 -0700

----------------------------------------------------------------------
 ApproveFalcon.xml                               |   9 +-
 .../codegen/externals/ExternalsTestUtils.java   |   3 +
 .../codegen/externals/TestExternJQuery.java     |   4 +-
 .../externals/TestExternalsJSCompile.java       |  16 +-
 .../js/flexjs/TestFlexJSFieldMembers.java       |   9 +
 .../js/flexjs/TestFlexJSGlobalClasses.java      |  18 ++
 .../codegen/js/flexjs/TestFlexJSProject.java    |  73 ++++++-
 .../codegen/js/goog/TestGoogProject.java        |   4 +-
 .../codegen/js/vf2js/TestVF2JSFile.java         |  14 +-
 .../mxml/flexjs/TestFlexJSMXMLApplication.java  | 204 ++++++++++++++++++-
 .../mxml/vf2js/TestVF2JSMXMLApplication.java    |   8 +-
 .../compiler/internal/test/FlexJSTestBase.java  |   6 +-
 .../flex/compiler/internal/test/TestBase.java   |  15 +-
 .../compiler/internal/test/VF2JSTestBase.java   |   8 +-
 .../flexjs/projects/bad_overrides/Test.as       |  43 ++++
 .../projects/bad_overrides/Test_result.js       |  94 +++++++++
 .../flexjs/projects/bad_overrides/classes/A.as  |  41 ++++
 .../projects/bad_overrides/classes/A_result.js  |  92 +++++++++
 .../flexjs/projects/bad_overrides/classes/B.as  |  25 +++
 .../projects/bad_overrides/classes/B_result.js  |  69 +++++++
 .../flexjs/projects/bad_overrides/classes/C.as  |  25 +++
 .../projects/bad_overrides/classes/C_result.js  |  69 +++++++
 .../projects/bad_overrides/interfaces/IA.as     |  28 +++
 .../bad_overrides/interfaces/IA_result.js       |  69 +++++++
 .../projects/bad_overrides/interfaces/IB.as     |  22 ++
 .../bad_overrides/interfaces/IB_result.js       |  62 ++++++
 .../projects/bad_overrides/interfaces/IC.as     |  22 ++
 .../bad_overrides/interfaces/IC_result.js       |  62 ++++++
 .../flexjs/projects/overrides/Test.as           |  43 ++++
 .../flexjs/projects/overrides/Test_result.js    |  94 +++++++++
 .../flexjs/projects/overrides/classes/A.as      |  41 ++++
 .../projects/overrides/classes/A_result.js      |  92 +++++++++
 .../flexjs/projects/overrides/classes/B.as      |  25 +++
 .../projects/overrides/classes/B_result.js      |  69 +++++++
 .../flexjs/projects/overrides/classes/C.as      |  25 +++
 .../projects/overrides/classes/C_result.js      |  74 +++++++
 .../flexjs/projects/overrides/interfaces/IA.as  |  28 +++
 .../projects/overrides/interfaces/IA_result.js  |  69 +++++++
 .../flexjs/projects/overrides/interfaces/IB.as  |  22 ++
 .../projects/overrides/interfaces/IB_result.js  |  62 ++++++
 .../flexjs/projects/overrides/interfaces/IC.as  |  22 ++
 .../projects/overrides/interfaces/IC_result.js  |  65 ++++++
 .../apache/flex/compiler/clients/COMPJSC.java   |   4 +-
 .../apache/flex/compiler/clients/EXTERNC.java   |  27 ++-
 .../flex/compiler/clients/FlexJSToolGroup.java  |   1 +
 .../internal/codegen/js/amd/JSAMDEmitter.java   |  18 +-
 .../codegen/js/flexjs/JSFlexJSEmitter.java      |  48 +----
 .../codegen/js/jx/FunctionCallEmitter.java      |  22 ++
 .../codegen/js/jx/MemberAccessEmitter.java      |   2 +-
 .../internal/codegen/js/utils/EmitterUtils.java |  80 ++++++++
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  |  38 +++-
 .../internal/projects/FlexJSProject.java        |   1 -
 compiler.tests/downloads.xml                    |  35 +++-
 .../org/apache/flex/utils/AntTestAdapter.java   |   2 +-
 .../org/apache/flex/utils/MavenTestAdapter.java |  80 +++++++-
 .../compiler/internal/mxml/MXMLDataTests.java   |   9 +-
 .../org/apache/flex/compiler/clients/ASC.java   |   9 +-
 .../flex/compiler/config/Configuration.java     |  18 ++
 .../codegen/UnknownTreePatternInputOutput.java  |   2 +-
 .../internal/config/TargetSettings.java         |   6 +
 .../definitions/FunctionDefinition.java         |   2 +-
 .../internal/projects/CompilerProject.java      |   5 +
 .../compiler/internal/projects/FlexProject.java |  13 ++
 .../compiler/projects/ICompilerProject.java     |   7 +
 .../flex/compiler/targets/ITargetSettings.java  |   6 +
 env-template.properties                         |   4 +
 externs/js/missing.js                           |  24 ++-
 67 files changed, 2179 insertions(+), 129 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2e464eef/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
----------------------------------------------------------------------
diff --cc 
compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
index 27f1079,3f77efc..fd19e42
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
@@@ -41,12 -41,9 +41,11 @@@ import org.apache.flex.compiler.definit
  import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
  import org.apache.flex.compiler.internal.codegen.js.JSEmitter;
  import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
++import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
  import org.apache.flex.compiler.internal.definitions.ClassTraitsDefinition;
- import org.apache.flex.compiler.internal.tree.as.ContainerNode;
  import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
  import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 +import org.apache.flex.compiler.internal.tree.as.IdentifierNode;
- import org.apache.flex.compiler.internal.tree.as.NodeBase;
  import org.apache.flex.compiler.problems.ICompilerProblem;
  import org.apache.flex.compiler.projects.ICompilerProject;
  import org.apache.flex.compiler.scopes.IASScope;
@@@ -784,32 -783,28 +783,21 @@@ public class JSAMDEmitter extends JSEmi
      }
  
      @Override
 -    public void walkArguments(IExpressionNode[] nodes)
 -    {
 -    }
 -
 -    protected void walkArguments(IFunctionCallNode node)
 +    public void emitArguments(IContainerNode node)
      {
 -        FunctionCallNode fnode = (FunctionCallNode) node;
 -        IExpressionNode[] nodes = node.getArgumentNodes();
 -        int len = nodes.length;
 +        IContainerNode newNode = node;
 +        FunctionCallNode fnode = (FunctionCallNode) node.getParent();
-         int len = node.getChildCount();
          if (TempTools.injectThisArgument(fnode, false))
          {
-             ContainerNode newArgs = new ContainerNode(len + 1);
-             newArgs.setSourcePath(node.getSourcePath());
-             newArgs.span(node);
-             newArgs.setParent((NodeBase) node.getParent());
 -            write("this");
 -            if (len > 0)
 -            {
 -                write(",");
 -                write(" ");
 -            }
 +            IdentifierNode thisNode = new IdentifierNode("this");
-             thisNode.setSourcePath(node.getSourcePath());
-             newArgs.addItem(thisNode);
-             for (int i = 0; i < len; i++)
-             {
-                 newArgs.addItem((NodeBase) node.getChild(i));
-             }
-             newNode = newArgs;
++            newNode = EmitterUtils.insertArgumentsBefore(node, thisNode);
          }
  
-         len = newNode.getChildCount();
++        int len = newNode.getChildCount();
 +        write(ASEmitterTokens.PAREN_OPEN);
          for (int i = 0; i < len; i++)
          {
 -            IExpressionNode inode = nodes[i];
 +            IExpressionNode inode = (IExpressionNode) newNode.getChild(i);
              if (inode.getNodeID() == ASTNodeID.IdentifierID)
              {
                  emitArgumentIdentifier((IIdentifierNode) inode);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2e464eef/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --cc 
compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 0eaf7c9,92a722a..c45a01c
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@@ -53,6 -53,6 +53,7 @@@ import org.apache.flex.compiler.interna
  import org.apache.flex.compiler.internal.codegen.js.jx.SelfReferenceEmitter;
  import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
  import org.apache.flex.compiler.internal.codegen.js.jx.VarDeclarationEmitter;
++import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
  import 
org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSEmitter;
  import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
  import org.apache.flex.compiler.internal.projects.FlexJSProject;
@@@ -549,14 -531,12 +550,14 @@@ public class JSFlexJSEmitter extends JS
      }
  
      @Override
 -    public void walkArguments(IExpressionNode[] nodes)
 +    public void emitArguments(IContainerNode node)
      {
-         ContainerNode newArgs = null;
 -      if (nodes.length == 2)
++        IContainerNode newNode = node;
 +        int len = node.getChildCount();
 +      if (len == 2)
        {
              ICompilerProject project = getWalker().getProject();;
 -              IFunctionCallNode fcNode = 
(IFunctionCallNode)(nodes[0].getParent().getParent());
 +              IFunctionCallNode fcNode = (IFunctionCallNode) node.getParent();
                IExpressionNode nameNode = fcNode.getNameNode();
              IDefinition def = nameNode.resolve(project);
                if (def != null && def.getBaseName().equals("insertAt"))
@@@ -566,76 -546,45 +567,41 @@@
                        {
                        if (nameNode instanceof MemberAccessExpressionNode)
                        {
-                         newArgs = new ContainerNode(len + 1);
-                         newArgs.setSourcePath(node.getSourcePath());
-                         newArgs.span(node);
-                         newArgs.setParent((NodeBase) node.getParent());
-                         newArgs.addItem((NodeBase) node.getChild(0));
-                         NumericLiteralNode extraNode = new 
NumericLiteralNode("0");
-                         extraNode.setSourcePath(node.getSourcePath());
-                         newArgs.addItem(extraNode);
-                         newArgs.addItem((NodeBase) node.getChild(1));
 -                              IExpressionNode[] newArgs = new 
IExpressionNode[3];
 -                              newArgs[0] = nodes[0];
 -                              newArgs[2] = nodes[1];
 -                              newArgs[1] = new NumericLiteralNode("0");
 -                              nodes = newArgs;
++                        newNode = EmitterUtils.insertArgumentsAt(node, 1, new 
NumericLiteralNode("0"));
                        }
                        }
                }
        }
 -      super.walkArguments(nodes);
 -      if (nodes.length == 1)
 -      {
 +        if (len == 1)
 +        {
              ICompilerProject project = getWalker().getProject();;
 -              IFunctionCallNode fcNode = 
(IFunctionCallNode)(nodes[0].getParent().getParent());
 -              IExpressionNode nameNode = fcNode.getNameNode();
 +            IFunctionCallNode fcNode = (IFunctionCallNode) node.getParent();
 +            IExpressionNode nameNode = fcNode.getNameNode();
              IDefinition def = nameNode.resolve(project);
 -              if (def != null && def.getBaseName().equals("removeAt"))
 -              {
 -                      if (def.getParent() != null &&
 -                      def.getParent().getQualifiedName().equals("Array"))
 -                      {
 -                      if (nameNode instanceof MemberAccessExpressionNode)
 -                      {
 -                              write(", 1");
 -                      }
 -                      }
 -              }
 -              else if (def != null && def.getBaseName().equals("parseInt"))
 -              {
 -                      IDefinition parentDef = def.getParent();
 -                      if (parentDef == null)
 -                      {
 -                      if (nameNode instanceof IdentifierNode)
 -                      {
 -                              write(", 10");
 -                      }
 -                      }
 -              }
 -      }
 +            if (def != null && def.getBaseName().equals("removeAt"))
 +            {
 +                if (def.getParent() != null &&
 +                        def.getParent().getQualifiedName().equals("Array"))
 +                {
 +                    if (nameNode instanceof MemberAccessExpressionNode)
 +                    {
-                         newArgs = new ContainerNode(len + 1);
-                         newArgs.setSourcePath(node.getSourcePath());
-                         newArgs.span(node);
-                         newArgs.setParent((NodeBase) node.getParent());
-                         for (int i = 0; i < len; i++)
-                         {
-                             newArgs.addItem((NodeBase) node.getChild(i));
-                         }
-                         NumericLiteralNode extraNode = new 
NumericLiteralNode("1");
-                         extraNode.setSourcePath(node.getSourcePath());
-                         newArgs.addItem(extraNode);
++                        newNode = EmitterUtils.insertArgumentsAfter(node, new 
NumericLiteralNode("1"));
 +                    }
 +                }
 +            }
 +            else if (def != null && def.getBaseName().equals("parseInt"))
 +            {
 +                IDefinition parentDef = def.getParent();
 +                if (parentDef == null)
 +                {
 +                    if (nameNode instanceof IdentifierNode)
 +                    {
-                         newArgs = new ContainerNode(len + 1);
-                         newArgs.setSourcePath(node.getSourcePath());
-                         newArgs.span(node);
-                         newArgs.setParent((NodeBase) node.getParent());
-                         for (int i = 0; i < len; i++)
-                         {
-                             newArgs.addItem((NodeBase) node.getChild(i));
-                         }
-                         NumericLiteralNode extraNode = new 
NumericLiteralNode("10");
-                         extraNode.setSourcePath(node.getSourcePath());
-                         newArgs.addItem(extraNode);
++                        newNode = EmitterUtils.insertArgumentsAfter(node, new 
NumericLiteralNode("10"));
 +                    }
 +                }
 +            }
 +        }
-         if (newArgs != null)
-         {
-             super.emitArguments(newArgs);
-         }
-         else
-         {
-             super.emitArguments(node);
-         }
++        super.emitArguments(newNode);
      }
  
      @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2e464eef/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
----------------------------------------------------------------------
diff --cc 
compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
index 0b8df4e,475541e..ed55481
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
@@@ -28,6 -28,6 +28,7 @@@ import org.apache.flex.compiler.interna
  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.codegen.js.flexjs.JSFlexJSEmitterTokens;
++import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
  import org.apache.flex.compiler.internal.definitions.AppliedVectorDefinition;
  import org.apache.flex.compiler.internal.definitions.ClassDefinition;
  import org.apache.flex.compiler.internal.definitions.InterfaceDefinition;
@@@ -37,6 -40,6 +41,7 @@@ import org.apache.flex.compiler.interna
  import org.apache.flex.compiler.projects.ICompilerProject;
  import org.apache.flex.compiler.tree.ASTNodeID;
  import org.apache.flex.compiler.tree.as.IASNode;
++import org.apache.flex.compiler.tree.as.IContainerNode;
  import org.apache.flex.compiler.tree.as.IExpressionNode;
  import org.apache.flex.compiler.tree.as.IFunctionCallNode;
  import org.apache.flex.compiler.utils.NativeUtils;
@@@ -144,21 -141,30 +149,38 @@@ public class FunctionCallEmitter extend
                          write(ASEmitterTokens.MEMBER_ACCESS);
                          if (isInt)
                              write(JSFlexJSEmitterTokens.UNDERSCORE);
 +                        getEmitter().endMapping(node.getNameNode());
                      }
+                     else if (def != null && 
def.getBaseName().equals("sortOn"))
+                       {
+                               if (def.getParent() != null &&
+                               
def.getParent().getQualifiedName().equals("Array"))
+                               {
+                             ICompilerProject project = this.getProject();
+                             if (project instanceof FlexJSProject)
+                                 ((FlexJSProject) project).needLanguage = true;
+                             write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+                             write(ASEmitterTokens.MEMBER_ACCESS);
+                             write("sortOn");
 -                            write(ASEmitterTokens.PAREN_OPEN);
 -                            write(((IdentifierNode)cnode).getName());  // 
will this always be an indentifer node
 -                            writeToken(ASEmitterTokens.COMMA);
 -                            fjs.walkArguments(node.getArgumentNodes());
 -                            write(ASEmitterTokens.PAREN_CLOSE);
++                            IContainerNode newArgs = 
EmitterUtils.insertArgumentsBefore(node.getArgumentsNode(), cnode);
++                            fjs.emitArguments(newArgs);
+                             return;
+                               }
+                       }
+ 
                      else if (def instanceof AppliedVectorDefinition)
                      {
 -                        fjs.walkArguments(node.getArgumentNodes());
 +                        IExpressionNode[] argumentNodes = 
node.getArgumentNodes();
 +                        int len = argumentNodes.length;
 +                        for (int i = 0; i < len; i++)
 +                        {
 +                            IExpressionNode argumentNode = argumentNodes[i];
 +                            getWalker().walk(argumentNode);
 +                            if(i < len - 1)
 +                            {
 +                                write(", ");
 +                            }
 +                        }
                          write(".slice()");
                          return;
                      }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2e464eef/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2e464eef/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --cc 
compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 471e5b7,471e5b7..3e59a8d
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@@ -44,11 -44,11 +44,15 @@@ import org.apache.flex.compiler.interna
  import org.apache.flex.compiler.internal.definitions.VariableDefinition;
  import org.apache.flex.compiler.internal.projects.CompilerProject;
  import org.apache.flex.compiler.internal.scopes.TypeScope;
++import org.apache.flex.compiler.internal.tree.as.ContainerNode;
++import org.apache.flex.compiler.internal.tree.as.IdentifierNode;
++import org.apache.flex.compiler.internal.tree.as.NodeBase;
  import org.apache.flex.compiler.internal.tree.as.ParameterNode;
  import org.apache.flex.compiler.projects.ICompilerProject;
  import org.apache.flex.compiler.tree.ASTNodeID;
  import org.apache.flex.compiler.tree.as.IASNode;
  import org.apache.flex.compiler.tree.as.IClassNode;
++import org.apache.flex.compiler.tree.as.IContainerNode;
  import org.apache.flex.compiler.tree.as.IDefinitionNode;
  import org.apache.flex.compiler.tree.as.IExpressionNode;
  import org.apache.flex.compiler.tree.as.IFunctionNode;
@@@ -425,4 -425,4 +429,80 @@@ public class EmitterUtil
          return false;
      }
  
++    public static IContainerNode insertArgumentsBefore(IContainerNode 
argumentsNode, IASNode... nodes)
++    {
++        int originalLength = argumentsNode.getChildCount();
++        int extraLength = nodes.length;
++        ContainerNode result = new ContainerNode(originalLength + 
extraLength);
++        result.setSourcePath(argumentsNode.getSourcePath());
++        result.span(argumentsNode);
++        result.setParent((NodeBase) argumentsNode.getParent());
++        for (int i = 0; i < extraLength; i++)
++        {
++            NodeBase node = (NodeBase) nodes[i];
++            node.setSourcePath(argumentsNode.getSourcePath());
++            result.addItem(node);
++        }
++        for (int i = 0; i < originalLength; i++)
++        {
++            result.addItem((NodeBase) argumentsNode.getChild(i));
++        }
++        return result;
++    }
++
++    public static IContainerNode insertArgumentsAfter(IContainerNode 
argumentsNode, IASNode... nodes)
++    {
++        int originalLength = argumentsNode.getChildCount();
++        int extraLength = nodes.length;
++        ContainerNode result = new ContainerNode(originalLength + 
extraLength);
++        result.setSourcePath(argumentsNode.getSourcePath());
++        result.span(argumentsNode);
++        result.setParent((NodeBase) argumentsNode.getParent());
++        for (int i = 0; i < originalLength; i++)
++        {
++            result.addItem((NodeBase) argumentsNode.getChild(i));
++        }
++        for (int i = 0; i < extraLength; i++)
++        {
++            NodeBase node = (NodeBase) nodes[i];
++            node.setSourcePath(argumentsNode.getSourcePath());
++            result.addItem(node);
++        }
++        return result;
++    }
++
++    public static IContainerNode insertArgumentsAt(IContainerNode 
argumentsNode, int index, IASNode... nodes)
++    {
++        int originalLength = argumentsNode.getChildCount();
++        int extraLength = nodes.length;
++        ContainerNode result = new ContainerNode(originalLength + 
extraLength);
++        result.setSourcePath(argumentsNode.getSourcePath());
++        result.span(argumentsNode);
++        result.setParent((NodeBase) argumentsNode.getParent());
++        for (int i = 0; i < originalLength; i++)
++        {
++            if(i < originalLength)
++            {
++                result.addItem((NodeBase) argumentsNode.getChild(i));
++            }
++            else
++            {
++                int j = i;
++                if (i >= index + extraLength)
++                {
++                    j -= extraLength;
++                    result.addItem((NodeBase) argumentsNode.getChild(j));
++                }
++                else
++                {
++                    j -= originalLength;
++                    NodeBase node = (NodeBase) nodes[j];
++                    node.setSourcePath(argumentsNode.getSourcePath());
++                    result.addItem(node);
++                }
++            }
++        }
++        return result;
++    }
++
  }

Reply via email to