Example usage for jdk.nashorn.internal.ir FunctionNode visitParameters

List of usage examples for jdk.nashorn.internal.ir FunctionNode visitParameters

Introduction

In this page you can find the example usage for jdk.nashorn.internal.ir FunctionNode visitParameters.

Prototype

public List<IdentNode> visitParameters(final NodeVisitor<? extends LexicalContext> visitor) 

Source Link

Document

Visits the parameter nodes of this function.

Usage

From source file:IDE.SyntaxTree.JWebParser.java

public DefaultMutableTreeNode getTreeNode(DefaultMutableTreeNode rootNode) {

    Stack<DefaultMutableTreeNode> i = new Stack<>();
    //  DefaultMutableTreeNode subroot = new DefaultMutableTreeNode("subroot");
    //  rootNode.add(subroot);
    i.push(rootNode);//from  w  w w .j  a v  a 2 s .  c  o m

    FunctionNode root = parse();
    LexicalContext lc = new LexicalContext();
    root.accept(new NodeVisitor(lc) {

        @Override
        public boolean enterFunctionNode(FunctionNode functionNode) {

            if (!functionNode.isProgram()) {
                DefaultMutableTreeNode outlineItem;
                List<IdentNode> parameters = functionNode.visitParameters(this);
                if (functionNode.isAnonymous()) {
                    String name = ((IdentNode) functionNode.getIdent().accept(this)).getName();
                    if (name.contains(":")) {
                        outlineItem = new DefaultMutableTreeNode("<anonymous>");
                        outlineItem = new DefaultMutableTreeNode(name);
                        String uobj = outlineItem.getUserObject() + "(";
                        for (IdentNode param : parameters) {
                            Type t = param.getMostOptimisticType();
                            uobj += t.toString() + " " + param.getName();
                        }
                        outlineItem.setUserObject(uobj + ")");
                    } else {
                        outlineItem = new DefaultMutableTreeNode(name);
                        String uobj = outlineItem.getUserObject() + "(";
                        for (IdentNode param : parameters) {
                            Type t = param.getMostOptimisticType();
                            uobj += t.toString() + " " + param.getName();
                        }
                        outlineItem.setUserObject(uobj + ")");
                    }
                } else {
                    outlineItem = new DefaultMutableTreeNode(
                            ((IdentNode) functionNode.getIdent().accept(this)).getName());
                    String uobj = outlineItem.getUserObject() + "(";
                    for (IdentNode param : parameters) {
                        Type t = param.getMostOptimisticType();
                        uobj += t.toString() + " " + param.getName() + " ";
                    }
                    outlineItem.setUserObject(uobj + ")");
                }

                i.peek().add(outlineItem);
                i.push(outlineItem);
            }

            return super.enterFunctionNode(functionNode); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public Node leaveFunctionNode(FunctionNode functionNode) {
            if (!functionNode.isProgram()) {
                i.pop();
            }
            return super.leaveFunctionNode(functionNode); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public Node leaveObjectNode(ObjectNode objectNode) {
            DefaultMutableTreeNode outlineItem = new DefaultMutableTreeNode("ttt");
            i.peek().add(outlineItem);
            i.push(outlineItem);
            return super.leaveObjectNode(objectNode); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public boolean enterObjectNode(ObjectNode objectNode) {
            i.pop();

            return super.enterObjectNode(objectNode); //To change body of generated methods, choose Tools | Templates.
        }

    });
    // i.pop();
    return i.peek();

}