/*******************************************************************************
 * Copyright (c) 2004 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;
	}
}
