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