Home | History | Annotate | Download | only in ast
      1 /*
      2  * Javassist, a Java-bytecode translator toolkit.
      3  * Copyright (C) 1999-2007 Shigeru Chiba. All Rights Reserved.
      4  *
      5  * The contents of this file are subject to the Mozilla Public License Version
      6  * 1.1 (the "License"); you may not use this file except in compliance with
      7  * the License.  Alternatively, the contents of this file may be used under
      8  * the terms of the GNU Lesser General Public License Version 2.1 or later.
      9  *
     10  * Software distributed under the License is distributed on an "AS IS" basis,
     11  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
     12  * for the specific language governing rights and limitations under the
     13  * License.
     14  */
     15 
     16 package javassist.compiler.ast;
     17 
     18 import java.io.Serializable;
     19 import javassist.compiler.CompileError;
     20 
     21 /**
     22  * Abstract Syntax Tree.  An ASTree object represents a node of
     23  * a binary tree.  If the node is a leaf node, both <code>getLeft()</code>
     24  * and <code>getRight()</code> returns null.
     25  */
     26 public abstract class ASTree implements Serializable {
     27     public ASTree getLeft() { return null; }
     28 
     29     public ASTree getRight() { return null; }
     30 
     31     public void setLeft(ASTree _left) {}
     32 
     33     public void setRight(ASTree _right) {}
     34 
     35     /**
     36      * Is a method for the visitor pattern.  It calls
     37      * <code>atXXX()</code> on the given visitor, where
     38      * <code>XXX</code> is the class name of the node object.
     39      */
     40     public abstract void accept(Visitor v) throws CompileError;
     41 
     42     public String toString() {
     43         StringBuffer sbuf = new StringBuffer();
     44         sbuf.append('<');
     45         sbuf.append(getTag());
     46         sbuf.append('>');
     47         return sbuf.toString();
     48     }
     49 
     50     /**
     51      * Returns the type of this node.  This method is used by
     52      * <code>toString()</code>.
     53      */
     54     protected String getTag() {
     55         String name = getClass().getName();
     56         return name.substring(name.lastIndexOf('.') + 1);
     57     }
     58 }
     59