You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2016/04/11 15:59:49 UTC

[22/50] git commit: [flex-falcon] [refs/heads/feature/maven-migration] - merge develop, added insertArgumentBefore(), insertArgumentAfter(), and insertArgumentAt() in EmitterUtils to allow function call arguments to be expanded

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/feature/maven-migration
Commit: 2e464eef22c9824b6b6abb80f861fa26cc27696f
Parents: c381df3 bf746d0
Author: Josh Tynjala <jo...@apache.org>
Authored: Fri Apr 1 13:10:22 2016 -0700
Committer: Josh Tynjala <jo...@apache.org>
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;
++    }
++
  }