Skip to main content
summaryrefslogblamecommitdiffstats
blob: 16ff214f6382bb23da5132fa3cd48acdc537673b (plain) (tree)






















































































                                                                                                    






























































































                                                                                                               
  
package org.eclipse.jdt.core;

/*
 * (c) Copyright IBM Corp. 2000, 2001.
 * All Rights Reserved.
 */
import org.eclipse.core.runtime.IPath;

/**
 * An entry on a Java project classpath identifying one or more package fragment
 * roots. A classpath entry has a content kind (either source, 
 * <code>K_SOURCE</code>, or binary, <code>K_BINARY</code>) which is inherited
 * by each package fragment root and package fragment associated with the entry.
 * <p>
 * A classpath entry can refer to any of the following:<ul>
 *	<li>Source code in the current project. In this case, the entry identifies a
 *		root folder in the current project containing package fragments and
 *		<code>.java</code> source files. The root folder itself represents a default
 *		package, subfolders represent package fragments, and <code>.java</code> files
 *		represent compilation units. All compilation units will be compiled when
 * 		the project is built. The classpath entry must specify the
 *		absolute path to the root folder. Entries of this kind are 
 *		associated with the <code>CPE_SOURCE</code> constant.</li>
 *	<li>A binary library in the current project, in another project, or in the external
 *		file system. In this case the entry identifies a JAR (or root folder) containing
 *		package fragments and <code>.class</code> files.  The classpath entry
 *		must specify the absolute path to the JAR (or root folder), and in case it refers
 *		to an external JAR, then there is no associated resource in the workbench. Entries 
 *		of this kind are associated with the <code>CPE_LIBRARY</code> constant.</li>
 *	<li>A required project. In this case the entry identifies another project in
 *		the workspace. The required project is used as a binary library when compiling
 *		(that is, the builder looks in the output location of the required project
 *		for required <code>.class</code> files when building). When performing other
 *		"development" operations - such as code assist, code resolve, type hierarchy
 *		creation, etc. - the source code of the project is referred to. Thus, development
 *		is performed against a required project's source code, and compilation is 
 *		performed against a required project's last built state.  The
 *		classpath entry must specify the absolute path to the
 *		project. Entries of this kind are  associated with the <code>CPE_PROJECT</code>
 *		constant. Note: referencing a required project with a classpath entry 
 *		only refers to the source code and associated <code>.class</code>
 *		files. It does not include any other libraries or projects that the required
 *		project's classpath refers to. Classpaths are not chained - each project must
 *		specify its own classpath in its entirety.</li>
 *  <li> A path beginning in a classpath variable defined globally to the workspace.
 *		Entries of this kind are  associated with the <code>CPE_VARIABLE</code> constant.  
 *      These entries are created using <code>JavaCore.setClasspathVariable</code>,
 * 		and gets resolved, to either a project or library entry, using
 *      <code>JavaCore.getResolvedClasspathVariable</code>.</li>
 * </ul>
 * </p>
 * <p>
 * This interface is not intended to be implemented by clients.
 * Classpath entries can be created via methods on <code>JavaCore</code>.
 * </p>
 *
 * @see IJavaProject#newLibraryEntry
 * @see IJavaProject#newProjectEntry
 * @see IJavaProject#newSourceEntry
 */
public interface IClasspathEntry {

	/**
	 * Entry kind constant describing a classpath entry identifying a
	 * library. A library is a folder or JAR containing package
	 * fragments consisting of pre-compiled binaries.
	 */
	public static final int CPE_LIBRARY = 1;

	/**
	 * Entry kind constant describing a classpath entry identifying a
	 * required project.
	 */
	public static final int CPE_PROJECT = 2;

	/**
	 * Entry kind constant describing a classpath entry identifying a
	 * folder containing package fragments with source code
	 * to be compiled.
	 */
	public static final int CPE_SOURCE = 3;

	/**
	 * Entry kind constant describing a classpath entry defined using
	 * a path that begins with a classpath variable reference.
	 */
	public static final int CPE_VARIABLE = 4;
	
/**
 * Returns the kind of files found in the package fragments identified by this
 * classpath entry.
 *
 * @return <code>IPackageFragmentRoot.K_SOURCE</code> for files containing
 *   source code, and <code>IPackageFragmentRoot.K_BINARY</code> for binary
 *   class files.
 *   There is no specified value for an entry denoting a variable (<code>CPE_VARIABLE</code>)
 */
int getContentKind();
/**
 * Returns the kind of this classpath entry.
 *
 * @return one of:
 * <ul>
 * <li><code>CPE_SOURCE</code> - this entry describes a source root in
 		its project
 * <li><code>CPE_LIBRARY</code> - this entry describes a folder or JAR
 		containing binaries
 * <li><code>CPE_PROJECT</code> - this entry describes another project
 *
 * <li><code>CPE_VARIABLE</code> - this entry describes a project or library
 *  	indirectly via a classpath variable in the first segment of the path
 * </ul>
 */
int getEntryKind();
/**
 * Returns the path of this classpath entry.
 *
 * The meaning of the path of a classpath entry depends on its entry kind:<ul>
 *	<li>Source code in the current project (<code>CPE_SOURCE</code>) -  
 *      The path associated with this entry is the absolute path to the root folder. </li>
 *	<li>A binary library in the current project (<code>CPE_LIBRARY</code>) - the path
 *		associated with this entry is the absolute path to the JAR (or root folder), and 
 *		in case it refers to an external JAR, then there is no associated resource in 
 *		the workbench.
 *	<li>A required project (<code>CPE_PROJECT</code>) - the path of the entry denotes the
 *		path to the corresponding project resource.</li>
 *  <li>A variable entry (<code>CPE_VARIABLE</code>) - the first segment of the path 
 *      is the name of a classpath variable. If this classpath variable
 *		is bound to the path <it>P</it>, the path of the corresponding classpath entry
 *		is computed by appending to <it>P</it> the segments of the returned
 *		path without the variable.</li>
 * </ul>
 *
 * @return the path of this classpath entry
 */
IPath getPath();
/**
 * This is a helper method which returns the resolved classpath entry denoted 
 * by an entry (if it is a variable entry). It is obtained by resolving the variable 
 * reference in the first segment. Returns <node>null</code> if unable to resolve using 
 * the following algorithm:
 * <ul>
 * <li> if variable segment cannot be resolved, returns <code>null</code></li>
 * <li> finds a project, JAR or binary folder in the workspace at the resolved path location</li>
 * <li> if none finds an external JAR file or folder outside the workspace at the resolved path location </li>
 * <li> if none returns <code>null</code></li>
 * </ul>
 * <p>
 * Variable source attachment is also resolved and recorded in the resulting classpath entry.
 * <p>
 * @return the resolved library or project classpath entry, or <code>null</code>
 *   if the given path could not be resolved to a classpath entry
 *
 * @deprecated - use JavaCore.getResolvedClasspathEntry(...)
 */
IClasspathEntry getResolvedEntry();
/**
 * Returns the path to the source archive associated with this
 * classpath entry, or <code>null</code> if this classpath entry has no
 * source attachment.
 * <p>
 * Only library and variable classpath entries may have source attachments.
 * For library classpath entries, the result path (if present) locates a source
 * archive. For variable classpath entries, the result path (if present) has
 * an analogous form and meaning as the variable path, namely the first segment 
 * is the name of a classpath variable.
 * </p>
 *
 * @return the path to the source archive, or <code>null</code> if none
 */
IPath getSourceAttachmentPath();
/**
 * Returns the path within the source archive where package fragments
 * are located. An empty path indicates that packages are located at
 * the root of the source archive. Returns a non-<code>null</code> value
 * if and only if <code>getSourceAttachmentPath</code> returns 
 * a non-<code>null</code> value.
 *
 * @return the path within the source archive, or <code>null</code> if
 *    not applicable
 */
IPath getSourceAttachmentRootPath();
}

Back to the top