/*
* xtc - The eXTensible Compiler
* Copyright (C) 2004-2007 Robert Grimm
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* version 2.1 as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*/
package xtc.tree;
/**
* The superclass of all annotations. An annotation adds information
* (such as comments) to an abstract syntax tree node; it is usually
* ignored while processing the AST.
*
* @author Robert Grimm
* @version $Revision: 1.17 $
*/
public abstract class Annotation extends Node {
/** The annotated node. */
Node node;
/** Create a new, empty annotation. */
public Annotation() {
node = null;
}
/**
* Create a new annotation for the specified node.
*
* @param node The node.
*/
public Annotation(Node node) {
this.node = node;
}
public String getTokenText() {
return node.getTokenText();
}
public boolean isAnnotation() {
return true;
}
public Annotation toAnnotation() {
return this;
}
/**
* Get the annotated node.
*
* @return The annotated node.
*/
public Node getNode() {
return node;
}
/**
* Set the annotated node.
*
* @param node The new node.
*/
public void setNode(Node node) {
this.node = node;
}
public Node strip() {
return null == node ? null : node.strip();
}
/**
* Return the inner-most annotation. This method strips all nested
* annotations, starting with this annotation, until it reaches the
* inner-most annotation.
*
* @return The inner-most annotation.
*/
public Annotation innerMost() {
Annotation n = this;
while (n.node instanceof Annotation) {
n = (Annotation)n.node;
}
return n;
}
}