/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package net.sourceforge.phpdt.core; 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, * K_SOURCE, or binary, K_BINARY), which is inherited * by each package fragment root and package fragment associated with the entry. *

* A classpath entry can refer to any of the following:

*

* The result of IJavaProject#getResolvedClasspath will have all entries of type * CPE_VARIABLE and CPE_CONTAINER resolved to a set of * CPE_SOURCE, CPE_LIBRARY or CPE_PROJECT * classpath entries. *

* Any classpath entry other than a source folder (kind CPE_SOURCE) can * be marked as being exported. Exported entries are automatically contributed to * dependent projects, along with the project's default output folder, which is * implicitly exported, and any auxiliary output folders specified on source * classpath entries. The project's output folder(s) are always listed first, * followed by the any exported entries. *

* This interface is not intended to be implemented by clients. * Classpath entries can be created via methods on JavaCore. *

* * @see JavaCore#newLibraryEntry * @see JavaCore#newProjectEntry * @see JavaCore#newSourceEntry * @see JavaCore#newVariableEntry * @see JavaCore#newContainerEntry * @see ClasspathVariableInitializer * @see ClasspathContainerInitializer */ 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. */ int CPE_LIBRARY = 1; /** * Entry kind constant describing a classpath entry identifying a * required project. */ int CPE_PROJECT = 2; /** * Entry kind constant describing a classpath entry identifying a * folder containing package fragments with source code * to be compiled. */ int CPE_SOURCE = 3; /** * Entry kind constant describing a classpath entry defined using * a path that begins with a classpath variable reference. */ int CPE_VARIABLE = 4; /** * Entry kind constant describing a classpath entry representing * a name classpath container. * * @since 2.0 */ int CPE_CONTAINER = 5; /** * Returns the kind of files found in the package fragments identified by this * classpath entry. * * @return IPackageFragmentRoot.K_SOURCE for files containing * source code, and IPackageFragmentRoot.K_BINARY for binary * class files. * There is no specified value for an entry denoting a variable (CPE_VARIABLE) * or a classpath container (CPE_CONTAINER). */ int getContentKind(); /** * Returns the kind of this classpath entry. * * @return one of: * */ int getEntryKind(); /** * Returns the set of patterns used to exclude resources associated with * this source entry. *

* Exclusion patterns allow specified portions of the resource tree rooted * at this source entry's path to be filtered out. If no exclusion patterns * are specified, this source entry includes all relevent files. Each path * specified must be a relative path, and will be interpreted relative * to this source entry's path. File patterns are case-sensitive. A file * matched by one or more of these patterns is excluded from the * corresponding package fragment root. *

*

* Note that there is no need to supply a pattern to exclude ".class" files * because a source entry filters these out automatically. *

*

* The pattern mechanism is similar to Ant's. Each pattern is represented as * a relative path. The path segments can be regular file or folder names or simple patterns * involving standard wildcard characters. *

*

* '*' matches 0 or more characters within a segment. So * *.java matches .java, a.java * and Foo.java, but not Foo.properties * (does not end with .java). *

*

* '?' matches 1 character within a segment. So ?.java * matches a.java, A.java, * but not .java or xyz.java (neither have * just one character before .java). *

*

* Combinations of *'s and ?'s are allowed. *

*

* The special pattern '**' matches zero or more segments. A path * like tests/ that ends in a trailing separator is interpreted * as tests/**, and would match all files under the * the folder named tests. *

*

* Examples: *

*

* * @return the possibly empty list of resource exclusion patterns * associated with this source entry, and null for other * kinds of classpath entries * @since 2.1 */ IPath[] getExclusionPatterns(); /** * Returns the set of patterns used to explicitly define resources to be * included with this source entry. *

* When no inclusion patterns are specified, the source entry includes all * relevent files in the resource tree rooted at this source entry's path. * Specifying one or more inclusion patterns means that only the specified * portions of the resource tree are to be included. Each path specified * must be a relative path, and will be interpreted relative to this source * entry's path. File patterns are case-sensitive. A file matched by one or * more of these patterns is included in the corresponding package fragment * root unless it is excluded by one or more of this entrie's exclusion * patterns. Exclusion patterns have higher precedence than inclusion * patterns; in other words, exclusion patterns can remove files for the * ones that are to be included, not the other way around. *

*

* See {@link #getExclusionPatterns()} for a discussion of the syntax and * semantics of path patterns. The absence of any inclusion patterns is * semantically equivalent to the explicit inclusion pattern * **. *

*

* Examples: *

*

* * @return the possibly empty list of resource inclusion patterns * associated with this source entry, and null for other * kinds of classpath entries * @since 3.0 */ IPath[] getInclusionPatterns(); /** * Returns the full path to the specific location where the builder writes * .class files generated for this source entry * (entry kind CPE_SOURCE). *

* Source entries can optionally be associated with a specific output location. * If none is provided, the source entry will be implicitly associated with its project * default output location (see IJavaProject#getOutputLocation). *

* NOTE: A specific output location cannot coincidate with another source/library entry. *

* * @return the full path to the specific location where the builder writes * .class files for this source entry, or null * if using default output folder * @since 2.1 */ IPath getOutputLocation(); /** * Returns the path of this classpath entry. * * The meaning of the path of a classpath entry depends on its entry kind: * * @return the path of this classpath entry */ IPath getPath(); /** * Returns the path to the source archive or folder associated with this * classpath entry, or null if this classpath entry has no * source attachment. *

* Only library and variable classpath entries may have source attachments. * For library classpath entries, the result path (if present) locates a source * archive or folder. This archive or folder can be located in a project of the * workspace or outside thr workspace. 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. *

* * @return the path to the source archive or folder, or null if none */ IPath getSourceAttachmentPath(); /** * Returns the path within the source archive or folder where package fragments * are located. An empty path indicates that packages are located at * the root of the source archive or folder. Returns a non-null value * if and only if getSourceAttachmentPath returns * a non-null value. * * @return the path within the source archive or folder, or null if * not applicable */ IPath getSourceAttachmentRootPath(); /** * Returns whether this entry is exported to dependent projects. * Always returns false for source entries (kind * CPE_SOURCE), which cannot be exported. * * @return true if exported, and false otherwise * @since 2.0 */ boolean isExported(); /** * 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 null if unable to resolve using * the following algorithm: * *

* Variable source attachment is also resolved and recorded in the resulting classpath entry. *

* @return the resolved library or project classpath entry, or null * if the given path could not be resolved to a classpath entry *

* Note that this deprecated API doesn't handle CPE_CONTAINER entries. * * @deprecated - use JavaCore.getResolvedClasspathEntry(...) */ IClasspathEntry getResolvedEntry(); }