public static List<Node> getArgumentNodesFromFunctionCall(IArgumentNode iVisited) { List<Node> arguments = new ArrayList<Node>(); Node argsNode = iVisited.getArgsNode(); Iterator<Node> iter = null; if (argsNode != null) { iter = argsNode.childNodes().iterator(); } else { // block? Node iterNode = null; if (iVisited instanceof FCallNode) { iterNode = ((FCallNode) iVisited).getIterNode(); } else if (iVisited instanceof CallNode) { iterNode = ((CallNode) iVisited).getIterNode(); } if (iterNode == null) { return arguments; } if (iterNode instanceof IterNode) { // yup, it has a block IterNode yeah = (IterNode) iterNode; Node varNode = yeah.getVarNode(); if (varNode instanceof DAsgnNode) { // single variable in the block arguments.add(varNode); } else if (varNode instanceof MultipleAsgnNode) { // multiple variables in the block MultipleAsgnNode multi = (MultipleAsgnNode) varNode; ListNode list = multi.getHeadNode(); if (list != null) { iter = list.childNodes().iterator(); } else { Node multiArgsNode = multi.getArgsNode(); if (multiArgsNode instanceof DAsgnNode) { arguments.add(multiArgsNode); } } } } } if (iter == null) { return arguments; } while (iter.hasNext()) { arguments.add(iter.next()); } return arguments; }
public static List<String> getArguments(ListNode argList) { if (argList == null) { return new ArrayList<String>(); } List<String> arguments = new ArrayList<String>(); List<Node> childNodes = argList.childNodes(); for (Node node : childNodes) { if (node instanceof ArgumentNode) { arguments.add(((ArgumentNode) node).getName()); } else if (node instanceof LocalAsgnNode) { LocalAsgnNode local = (LocalAsgnNode) node; arguments.add( MessageFormat.format( "{0} = {1}", local.getName(), getStringRepresentation( local //$NON-NLS-1$ .getValueNode()))); } } return arguments; }