/******************************************************************************* * Copyright (c) 2004, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.core.dom; /** * Abstract base class for all AST nodes that represent comments. * There are exactly three kinds of comment: * line comments ({@link LineComment}), * block comments ({@link BlockComment}), and * doc comments ({@link Javadoc}). * <p> * <pre> * Comment: * LineComment * BlockComment * Javadoc * </pre> * </p> * * @since 3.0 */ public abstract class Comment extends ASTNode { /** * Alternate root node, or <code>null</code> if none. * Initially <code>null</code>. */ private ASTNode alternateRoot = null; /** * Creates a new AST node for a comment owned by the given AST. * <p> * N.B. This constructor is package-private. * </p> * * @param ast the AST that is to own this node */ Comment(AST ast) { super(ast); } /** * Returns whether this comment is a block comment * (<code>BlockComment</code>). * * @return <code>true</code> if this is a block comment, and * <code>false</code> otherwise */ public final boolean isBlockComment() { return (this instanceof BlockComment); } /** * Returns whether this comment is a line comment * (<code>LineComment</code>). * * @return <code>true</code> if this is a line comment, and * <code>false</code> otherwise */ public final boolean isLineComment() { return (this instanceof LineComment); } /** * Returns whether this comment is a doc comment * (<code>Javadoc</code>). * * @return <code>true</code> if this is a doc comment, and * <code>false</code> otherwise */ public final boolean isDocComment() { return (this instanceof Javadoc); } /** * Returns the root AST node that this comment occurs * within, or <code>null</code> if none (or not recorded). * <p> * Typically, the comment nodes created while parsing a compilation * unit are not considered descendents of the normal AST * root, namely an {@link CompilationUnit}. Instead, these * comment nodes exist outside the normal AST and each is * a root in its own right. This optional property provides * a well-known way to navigate from the comment to the * compilation unit in such cases. Note that the alternate root * property is not one of the comment node's children. It is simply a * reference to a node. * </p> * * @return the alternate root node, or <code>null</code> * if none * @see #setAlternateRoot(ASTNode) */ public final ASTNode getAlternateRoot() { return this.alternateRoot; } /** * Returns the root AST node that this comment occurs * within, or <code>null</code> if none (or not recorded). * <p> * </p> * * @param root the alternate root node, or <code>null</code> * if none * @see #getAlternateRoot() */ public final void setAlternateRoot(ASTNode root) { // alternate root is *not* considered a structural property // but we protect them nevertheless checkModifiable(); this.alternateRoot = root; } /* (omit javadoc for this method) * Method declared on ASTNode. */ int memSize() { return BASE_NODE_SIZE + 1 * 4; } }