blob: 7a27f0472c7d2f11b1b324469ec669407960b381 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 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
*
*******************************************************************************/
package org.eclipse.dltk.core;
/**
* Common protocol for model elements that have associated source code.
*/
public interface ISourceReference {
/**
* Returns whether this element exists in the model.
*
* @return <code>true</code> if this element exists in the script model
*
*/
boolean exists();
/**
* Returns the source range associated with this element.
* <p>
* For class files, this returns the range of the entire compilation unit
* associated with the class file (if there is one).
* </p>
*
* @return the source range, or <code>null</code> if this element has no
* associated source code
* @exception ModelException if an exception occurs while accessing its corresponding resource
*/
ISourceRange getSourceRange() throws ModelException;
/**
* Returns the source code associated with this element.
* This extracts the substring from the source buffer containing this source
* element. This corresponds to the source range that would be returned by
* <code>getSourceRange</code>.
* <p>
* For class files, this returns the source of the entire compilation unit
* associated with the class file (if there is one).
* </p>
*
* @return the source code, or <code>null</code> if this element has no
* associated source code
* @exception ModelException if an exception occurs while accessing its corresponding resource
*/
String getSource() throws ModelException;
/**
* Returns the name range associated with this element.
*
* <p>
* If the element is an {@link IMember}, it returns the source range of this
* member's simple name, or <code>null</code> if this member does not have a
* name (for example, an initializer), or if this member does not have
* associated source code (for example, a binary type).
* </p>
*
* <p>
* If this element is an {@link IImportDeclaration}, the source range of
* this import declaration's name, or <code>null</code> if this import
* declaration does not have associated source code (for example, a binary
* type). <br>
* The source range for the name includes the trailing '*' if the call to
* {@link IImportDeclaration#isOnDemand()} returns true.
* </p>
*
* <p>
* If this element is an {@link IPackageDeclaration}, the source range of
* this package declaration's name, or <code>null</code> if this package
* declaration does not have associated source code (for example, a binary
* type).
* </p>
*
* <p>
* If this element is an {@link IImportContainer}, it returns null.
* </p>
*
* @return the name range associated with this element, or <code>null</code>
* if not available
* @since 5.0
*/
ISourceRange getNameRange() throws ModelException;
}