Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jruby.ast.util;
  
  import java.io.File;
 
 public class SexpMaker {
     private final StringBuilder sb;
     
     public static String create(Node node) {
         SexpMaker maker = new SexpMaker();
         
         maker.process(node);
         
         return maker.toString();
     }
     
     public static String create(String methodNameNode argsNodeNode body) {
         SexpMaker maker = new SexpMaker();
         
         maker.processMethod(methodNameargsNodebody);
         
         return maker.toString();
     }
     
     private SexpMaker() {
          = new StringBuilder();
     }
     
     private void processMethod(String methodNameNode argsNodeNode body) {
         .append("(method ").append(methodName).append(' ');
         // JRUBY-4301, include filename and line in sexp
         .append("(file ").append(new File(body.getPosition().getFile()).getName()).append(") ");
         .append("(line ").append(body.getPosition().getStartLine()).append(") ");
         process(argsNode);
         .append(" ");
         process(body);
         .append(")");
     }
     
     @Override
     public String toString() {
         return .toString();
     }

    
process each node by printing out '(' name data child* ')'

Parameters:
node
 
     private void process(Node node) {
         if (node == null) {
             .append("null");
             return;
         }
         
         .append("(");
         shortName(node);
         leafInfo(node);
         
         for (Node childnode.childNodes()) {
             .append(" ");
            process(child);
        }
        
        .append(")");
    }
    private void shortName(Node node) {
        String className = node.getClass().getName();
        
        if (className.endsWith("Node")) {
            className = className.substring(0, className.length() - 4);
            int index = className.lastIndexOf('.');
            
            if (index != -1) {
                className = className.substring(index+1);
            }
        }
        
        .append(className.toLowerCase());
    }

    
Extra information that is not child nodes, but actual leaf data.

Parameters:
node
    private void leafInfo(Node node) {
        switch (node.getNodeType()) {
        case aliasNode((AliasNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case argumentNode((ArgumentNodenode); break;
        case noDataContents(node); break;
        case attrAssignNode((AttrAssignNodenode); break;
        case backRefNode((BackRefNodenode); break;
        case noDataContents(node); break;
        case bignumNode((BignumNodenode); break;
        case blockArgNode((BlockArgNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case callNode((CallNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case classVarAsgnNode((ClassVarAsgnNodenode); break;
        case classVarDeclNode((ClassVarDeclNodenode); break;
        case classVarNode((ClassVarNodenode); break;
        case colon2Node((Colon2Nodenode); break;
        case colon3Node((Colon3Nodenode); break;
        case constDeclNode((ConstDeclNodenode); break;
        case constNode((ConstNodenode); break;
        case dAsgnNode((DAsgnNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case dotNode((DotNodenode); break;
        case dRegexpNode((DRegexpNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case dVarNode((DVarNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case fCallNode((FCallNodenode); break;
        case fixnumNode((FixnumNodenode); break;
        case flipNode((FlipNodenode); break;
        case floatNode((FloatNodenode); break;
        case noDataContents(node); break;
        case globalAsgnNode((GlobalAsgnNodenode); break;
        case globalVarNode((GlobalVarNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); instAsgnNode((InstAsgnNodenode); break;
        case noDataContents(node); instVarNode((InstVarNodenode); break;
        case noDataContents(node); break;
        case localAsgnNode((LocalAsgnNodenode); break;
        case localVarNode((LocalVarNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case nthRefNode((NthRefNodenode); break;
        case noDataContents(node); break;
        case opAsgnNode((OpAsgnNodenode); break;
        case noDataContents(node); break;
        case opElementAsgnNode((OpElementAsgnNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case regexpNode((RegexpNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case strNode((StrNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case symbolNode((SymbolNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case undefNode((UndefNodenode); break;
        case noDataContents(node); break;
        case valiasNode((VAliasNodenode); break;
        case vcallNode((VCallNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case xStrNode((XStrNodenode); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        case noDataContents(node); break;
        default:
        }
    }
    private void xStrNode(XStrNode node) {
        .append(" '").append(node.getValue()).append("'");
    }
    private void vcallNode(VCallNode node) {
        .append(" ").append(node.getName());
    }
    private void valiasNode(VAliasNode node) {
        .append(" ").append(node.getOldName()).append(node.getNewName());
    }
    private void undefNode(UndefNode node) {
        .append(" ").append(node.getName());
    }
    private void strNode(StrNode node) {
        if (node instanceof FileNode) {
            // don't put the filename in, since it can vary based on filesystem
            // layout and does not change behavior directly
            .append(" __FILE__");
        } else {
            .append(" '").append(node.getValue()).append("'");
        }
    }
    private void regexpNode(RegexpNode node) {
        .append(" ").append(node.getValue()).append(" ").append(node.getOptions());
    }
    private void opElementAsgnNode(OpElementAsgnNode node) {
        .append(" ").append(node.getOperatorName());
    }
    private void nthRefNode(NthRefNode node) {
        .append(" ").append(node.getMatchNumber());
    }
    private void localAsgnNode(LocalAsgnNode node) {
        .append(" ").append(node.getName());
    }
    private void instVarNode(InstVarNode node) {
        .append(" ").append(node.getName());
    }
    private void instAsgnNode(InstAsgnNode node) {
        .append(" ").append(node.getName());
    }
    private void globalVarNode(GlobalVarNode node) {
        .append(" ").append(node.getName());
    }
    private void globalAsgnNode(GlobalAsgnNode node) {
        .append(" ").append(node.getName());
    }
    private void floatNode(FloatNode node) {
        .append(" ").append(node.getValue());
    }
    private void flipNode(FlipNode node) {
        .append(" ").append(node.isExclusive());
    }
    private void fixnumNode(FixnumNode node) {
        .append(" ").append(node.getValue());
    }
    private void fCallNode(FCallNode node) {
        .append(" ").append(node.getName());
    }
    private void dVarNode(DVarNode node) {
        .append(" ").append(node.getName());
    }
    private void blockArgNode(BlockArgNode node) {
        .append(" ").append(node.getName());
    }
    private void backRefNode(BackRefNode node) {
        .append(" ").append(node.getType());
    }
    private void symbolNode(SymbolNode node) {
        .append(" ").append(node.getName());
    }
    private void localVarNode(LocalVarNode node) {
        .append(" ").append(node.getName());
    }
    private void argumentNode(ArgumentNode node) {
        .append(" ").append(node.getName());
    }
    private void dRegexpNode(DRegexpNode node) {
        .append(" ").append(node.getOnce()).append(" ").append(node.getOptions());
    }
    private void dotNode(DotNode node) {
        .append(" ").append(node.isExclusive()).append(" ").append(node.isLiteral());
    }
    private void dAsgnNode(DAsgnNode node) {
        .append(" ").append(node.getName());
    }
    private void constNode(ConstNode node) {
        .append(" ").append(node.getName());
    }
    private void constDeclNode(ConstDeclNode node) {
        .append(" ").append(node.getName());
    }
    private void colon3Node(Colon3Node node) {
        .append(" ").append(node.getName());
    }
    private void colon2Node(Colon2Node node) {
        .append(" ").append(node.getName());
    }
    private void classVarNode(ClassVarNode node) {
        .append(" ").append(node.getName());
    }
    private void classVarDeclNode(ClassVarDeclNode node) {
        .append(" ").append(node.getName());
    }
    private void classVarAsgnNode(ClassVarAsgnNode node) {
        .append(" ").append(node.getName());
    }
    private void callNode(CallNode node) {
        .append(" ").append(node.getName());
    }
    private void bignumNode(BignumNode node) {
        .append(" ").append(node.getValue());
    }
    private void attrAssignNode(AttrAssignNode node) {
        .append(" ").append(node.getName());
    }
    private void aliasNode(AliasNode node) {
        .append(" ").append(node.getOldName()).append(node.getNewName());
    }
    private void opAsgnNode(OpAsgnNode node) {
        .append(" '").append(node.getOperatorName()).append("'");
    }
    private void noDataContents(Node node) {
    }
        
New to GrepCode? Check out our FAQ X