Start line:  
End line:  

Snippet Preview

Snippet HTML Code

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

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

Parameters:
node
 
     private static void process(StringBuilder sbNode node) {
         if (node == null) {
             sb.append("null");
             return;
         }
         
         sb.append('(');
         shortName(sbnode);
         leafInfo(sbnode);
         
         for (Node childnode.childNodes()) {
             sb.append(' ');
             process(sbchild);
         }
         
         sb.append(')');
     }
 
     private static void shortName(StringBuilder sbNode node) {
         sb.append(node.getNodeType().simpleName());
     }

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

Parameters:
node
    private static void leafInfo(StringBuilder sbNode node) {
        switch (node.getNodeType()) {
            case aliasNode(sb, (AliasNodenode); break;
            case argumentNode(sb, (ArgumentNodenode); break;
            case attrAssignNode(sb, (AttrAssignNodenode); break;
            case backRefNode(sb, (BackRefNodenode); break;
            case bignumNode(sb, (BignumNodenode); break;
            case blockArgNode(sb, (BlockArgNodenode); break;
            case callNode(sb, (CallNodenode); break;
            case classVarAsgnNode(sb, (ClassVarAsgnNodenode); break;
            case classVarDeclNode(sb, (ClassVarDeclNodenode); break;
            case classVarNode(sb, (ClassVarNodenode); break;
            case colon2Node(sb, (Colon2Nodenode); break;
            case colon3Node(sb, (Colon3Nodenode); break;
            case constDeclNode(sb, (ConstDeclNodenode); break;
            case constNode(sb, (ConstNodenode); break;
            case dAsgnNode(sb, (DAsgnNodenode); break;
            case dotNode(sb, (DotNodenode); break;
            case dRegexpNode(sb, (DRegexpNodenode); break;
            case dVarNode(sb, (DVarNodenode); break;
            case fCallNode(sb, (FCallNodenode); break;
            case fixnumNode(sb, (FixnumNodenode); break;
            case flipNode(sb, (FlipNodenode); break;
            case floatNode(sb, (FloatNodenode); break;
            case globalAsgnNode(sb, (GlobalAsgnNodenode); break;
            case globalVarNode(sb, (GlobalVarNodenode); break;
            case instAsgnNode(sb, (InstAsgnNodenode); break;
            case instVarNode(sb, (InstVarNodenode); break;
            case localAsgnNode(sb, (LocalAsgnNodenode); break;
            case localVarNode(sb, (LocalVarNodenode); break;
            case nthRefNode(sb, (NthRefNodenode); break;
            case opAsgnNode(sb, (OpAsgnNodenode); break;
            case opElementAsgnNode(sb, (OpElementAsgnNodenode); break;
            case regexpNode(sb, (RegexpNodenode); break;
            case strNode(sb, (StrNodenode); break;
            case symbolNode(sb, (SymbolNodenode); break;
            case undefNode(sb, (UndefNodenode); break;
            case valiasNode(sb, (VAliasNodenode); break;
            case vcallNode(sb, (VCallNodenode); break;
            case xStrNode(sb, (XStrNodenode); break;
            /* these do nothing
            case ANDNODE:
            case ARGSCATNODE:
            case ARGSPUSHNODE:
            case ARRAYNODE:
            case BEGINNODE:
            case BLOCKNODE:
            case BLOCKPASSNODE:
            case BREAKNODE:
            case CASENODE:
            case CLASSNODE:
            case DEFINEDNODE:
            case DEFNNODE:
            case DEFSNODE:
            case DSTRNODE:
            case DSYMBOLNODE:
            case DXSTRNODE:
            case ENSURENODE:
            case EVSTRNODE:
            case FALSENODE:
            case FORNODE:
            case HASHNODE:
            case IFNODE:
            case ITERNODE:
            case MATCH2NODE:
            case MATCH3NODE:
            case MATCHNODE:
            case MODULENODE:
            case MULTIPLEASGNNODE:
            case NEWLINENODE:
            case NEXTNODE:
            case NILNODE:
            case NOTNODE:
            case OPASGNORNODE:
            case OPASGNANDNODE:
            case ORNODE:
            case PREEXENODE:
            case POSTEXENODE:
            case REDONODE:
            case RESCUEBODYNODE:
            case RESCUENODE:
            case RETRYNODE:
            case RETURNNODE:
            case ROOTNODE:
            case SCLASSNODE:
            case SELFNODE:
            case SPLATNODE:
            case SUPERNODE:
            case SVALUENODE:
            case TOARYNODE:
            case TRUENODE:
            case UNTILNODE:
            case WHENNODE:
            case WHILENODE:
            case YIELDNODE:
            case ZARRAYNODE:
            case ZSUPERNODE:
                noDataContents(node);
                break;
            */
            
            default:
        }
    }
    private static void xStrNode(StringBuilder sbXStrNode node) {
        sb.append(" '").append(node.getValue()).append('\'');
    }
    private static void vcallNode(StringBuilder sbVCallNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void valiasNode(StringBuilder sbVAliasNode node) {
        sb.append(' ').append(node.getOldName()).append(node.getNewName());
    }
    private static void undefNode(StringBuilder sbUndefNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void strNode(StringBuilder sbStrNode 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
            sb.append(" __FILE__");
        } else {
            sb.append(" '").append(node.getValue()).append('\'');
        }
    }
    private static void regexpNode(StringBuilder sbRegexpNode node) {
        sb.append(' ').append(node.getValue()).append(' ').append(node.getOptions());
    }
    private static void opElementAsgnNode(StringBuilder sbOpElementAsgnNode node) {
        sb.append(' ').append(node.getOperatorName());
    }
    private static void nthRefNode(StringBuilder sbNthRefNode node) {
        sb.append(' ').append(node.getMatchNumber());
    }
    private static void localAsgnNode(StringBuilder sbLocalAsgnNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void instVarNode(StringBuilder sbInstVarNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void instAsgnNode(StringBuilder sbInstAsgnNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void globalVarNode(StringBuilder sbGlobalVarNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void globalAsgnNode(StringBuilder sbGlobalAsgnNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void floatNode(StringBuilder sbFloatNode node) {
        sb.append(' ').append(node.getValue());
    }
    private static void flipNode(StringBuilder sbFlipNode node) {
        sb.append(' ').append(node.isExclusive());
    }
    private static void fixnumNode(StringBuilder sbFixnumNode node) {
        sb.append(' ').append(node.getValue());
    }
    private static void fCallNode(StringBuilder sbFCallNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void dVarNode(StringBuilder sbDVarNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void blockArgNode(StringBuilder sbBlockArgNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void backRefNode(StringBuilder sbBackRefNode node) {
        sb.append(' ').append(node.getType());
    }
    private static void symbolNode(StringBuilder sbSymbolNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void localVarNode(StringBuilder sbLocalVarNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void argumentNode(StringBuilder sbArgumentNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void dRegexpNode(StringBuilder sbDRegexpNode node) {
        sb.append(' ').append(node.getOnce()).append(' ').append(node.getOptions());
    }
    private static void dotNode(StringBuilder sbDotNode node) {
        sb.append(' ').append(node.isExclusive()).append(' ').append(node.isLiteral());
    }
    private static void dAsgnNode(StringBuilder sbDAsgnNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void constNode(StringBuilder sbConstNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void constDeclNode(StringBuilder sbConstDeclNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void colon3Node(StringBuilder sbColon3Node node) {
        sb.append(' ').append(node.getName());
    }
    private static void colon2Node(StringBuilder sbColon2Node node) {
        sb.append(' ').append(node.getName());
    }
    private static void classVarNode(StringBuilder sbClassVarNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void classVarDeclNode(StringBuilder sbClassVarDeclNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void classVarAsgnNode(StringBuilder sbClassVarAsgnNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void callNode(StringBuilder sbCallNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void bignumNode(StringBuilder sbBignumNode node) {
        sb.append(' ').append(node.getValue());
    }
    private static void attrAssignNode(StringBuilder sbAttrAssignNode node) {
        sb.append(' ').append(node.getName());
    }
    private static void aliasNode(StringBuilder sbAliasNode node) {
        sb.append(' ').append(node.getOldName()).append(node.getNewName());
    }
    private static void opAsgnNode(StringBuilder sbOpAsgnNode node) {
        sb.append(" '").append(node.getOperatorName()).append('\'');
    }
        
New to GrepCode? Check out our FAQ X