List of usage examples for jdk.nashorn.internal.ir.visitor NodeVisitor NodeVisitor
public NodeVisitor(final T lc)
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 ww w . j a v a2 s. c om*/ 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(); }
From source file:IDE.SyntaxTree.ParserTest.java
/** * Test of parse method, of class Parser. *//* w w w. j a v a 2 s . com*/ @Test public void testParse() { try { String input = readServerFile(new File("c:\\Projects\\JWeb\\www\\Controller\\indexController.jap")); ExpNode expResult = null; JWebParser result = new JWebParser(input); FunctionNode fNode = result.parse(); //Logger.logMsg(Level.ALL.intValue(),); // System.out.println( fNode.getName()); // System.out.println( fNode.getBody()); LexicalContext lc = new LexicalContext(); fNode.accept(new NodeVisitor(lc) { @Override public boolean enterFunctionNode(FunctionNode functionNode) { if (!functionNode.isProgram()) { if (functionNode.isAnonymous()) { String name = ((IdentNode) functionNode.getIdent().accept(this)).getName(); if (name.contains(":")) { System.out.println("<anonymous> FUNCTION_ICON"); } else { System.out.println(name + " METHOD_ICON"); } } else { System.out.println(((IdentNode) functionNode.getIdent().accept(this)).getName()); } } return super.enterFunctionNode(functionNode); //To change body of generated methods, choose Tools | Templates. } }); Iterator<FunctionNode> sss = lc.getFunctions(); IdentNode ident = fNode.getIdent(); // assertEquals(expResult, result); // TODO review the generated test code and remove the default call to fail. //fail("The test case is a prototype."); } catch (IOException ex) { Logger.getLogger(ParserTest.class.getName()).log(Level.SEVERE, null, ex); } }