/*******************************************************************************
 * Copyright (c) 2000, 2011 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.debug.core;

import org.eclipse.debug.core.DebugException;

/**
 * A variable that contains the value of an instance or class variable.
 *
 * @see org.eclipse.debug.core.model.IVariable
 * @since 2.0
 * @noimplement This interface is not intended to be implemented by clients.
 * @noextend This interface is not intended to be extended by clients.
 */
public interface IJavaFieldVariable extends IJavaVariable {

	/**
	 * Returns whether this variable is declared as transient.
	 *
	 * @return whether this variable has been declared as transient
	 * @exception DebugException
	 *                if this method fails. Reasons include:
	 *                <ul>
	 *                <li>Failure communicating with the VM. The
	 *                DebugException's status code contains the underlying
	 *                exception responsible for the failure.</li>
	 *                </ul>
	 */
	public boolean isTransient() throws DebugException;

	/**
	 * Returns whether this variable is declared as volatile.
	 *
	 * @return whether this variable has been declared as volatile
	 * @exception DebugException
	 *                if this method fails. Reasons include:
	 *                <ul>
	 *                <li>Failure communicating with the VM. The
	 *                DebugException's status code contains the underlying
	 *                exception responsible for the failure.</li>
	 *                </ul>
	 */
	public boolean isVolatile() throws DebugException;

	/**
	 * Returns the type that declares this variable.
	 *
	 * @return the type that declares this variable
	 */
	public IJavaType getDeclaringType();

	/**
	 * Returns the object that contains this field variable, or
	 * <code>null</code> if no object contains this field variable (static field
	 * variable).
	 *
	 * @return the object that contains this field variable
	 * @since 3.0
	 */
	public IJavaObject getReceiver();

	/**
	 * Returns the type that contains this field variable.
	 *
	 * @return the type that contains this field variable
	 * @since 3.0
	 */
	public IJavaReferenceType getReceivingType();

}
