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
16package javassist.compiler.ast;
17
18import java.io.Serializable;
19import 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 */
26public 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