org.eclipse.wst.jsdt.core

## Interface IJavaScriptProject

All Superinterfaces:
  IJavaScriptElement, ILookupScope, IOpenable, IParent

    public interface IJavaScriptProject
    extends IParent, IJavaScriptElement, IOpenable

A JavaScript project represents a view of a project resource in terms of JavaScript elements such as package fragments, types, methods and fields. A project may contain several source folders (package roots), which contain source folders (package fragments). A package root corresponds to an underlying folder.

Each JavaScript project has a includepath, defining which folders contain source code and where required libraries are located. A project that references packages in another project can access the packages by including the required project in a includepath entry. The JavaScript model will present the source elements in the required project. The includepath format is a sequence of includepath entries describing the location and contents of package fragment roots.

JavaScript project elements need to be opened before they can be navigated or manipulated. The children of a JavaScript project are the package fragment roots that are defined by the includepath and contained in this project (in other words, it does not include package fragment roots for other projects).

This interface is not intended to be implemented by clients. An instance of one of these handles can be created via `JavaScriptCore.create(project)`.

See Also:
  `JavaScriptCore#create(org.eclipse.core.resources.IProject)`, `Provisional API: This class/interface is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.`

### Field Summary

### Fields inherited from interface org.eclipse.wst.jsdt.core.IJavaScriptElement

`CLASS_FILE, EXPORT_CONTAINER, EXPORT_DECLARATION, FIELD, IMPORT_CONTAINER, IMPORT_DECLARATION, INITIALIZER, JAVASCRIPT_MODEL, JAVASCRIPT_PROJECT, JAVASCRIPT_UNIT, LOCAL_VARIABLE, METHOD, PACKAGE_FRAGMENT, PACKAGE_FRAGMENT_ROOT, TYPE`

### Method Summary

All Methods Instance Methods Abstract Methods
`IIncludePathEntry` `decodeIncludepathEntry(java.lang.String encodedEntry)` Decodes the includepath entry that has been encoded in the given string in the context of this project.
`java.lang.String` `encodeIncludepathEntry(IIncludePathEntry includepathEntry)` Encodes the given includepath entry into a string in the context of this project.
`IJavaScriptElement` `findElement(IPath path)` Returns the `IJavaScriptElement` corresponding to the given includepath-relative path, or `null` if no such `IJavaScriptElement` is found.
`IJavaScriptElement` `findElement(IPath path, WorkingCopyOwner owner)` Returns the `IJavaScriptElement` corresponding to the given includepath-relative path, or `null` if no such `IJavaScriptElement` is found.
`IPackageFragment` `findPackageFragment(IPath path)` Returns the first existing package fragment on this project's includepath whose path matches the given (absolute) path, or `null` if none exist.
`IPackageFragmentRoot` `findPackageFragmentRoot(IPath path)` Returns the existing package fragment root on this project's includepath whose path matches the given (absolute) path, or `null` if one does not exist.
`IPackageFragmentRoot[]` `findPackageFragmentRoots(IIncludePathEntry entry)` Returns the existing package fragment roots identified by the given entry.
`IType` `findType(java.lang.String fullyQualifiedName)` Returns the first type found following this project's includepath with the given fully qualified name or `null` if none is found.
`IType` `findType(java.lang.String fullyQualifiedName, IProgressMonitor progressMonitor)` Same functionality as `findType(String)` but also look for secondary types if given name does not match a javaScript unit name.
`IType` `findType(java.lang.String packageName, java.lang.String typeQualifiedName, IProgressMonitor progressMonitor)` Same functionality as `#findType(String, String)` but also look for secondary types if given name does not match a javaScript unit name.
`IType` `findType(java.lang.String packageName, java.lang.String typeQualifiedName, WorkingCopyOwner owner, IProgressMonitor progressMonitor)` Same functionality as `#findType(String, String, WorkingCopyOwner)` but also look for secondary types if given name does not match a javaScript unit name.
`IType` `findType(java.lang.String fullyQualifiedName, WorkingCopyOwner owner, IProgressMonitor progressMonitor)` Same functionality as `#findType(String, WorkingCopyOwner)` but also look for secondary types if given name does not match a javaScript unit name.
`ITypeRoot` `findTypeRoot(java.lang.String fullyQualifiedName)`
`IType[]` `findTypes(java.lang.String fullyQualifiedName)` Returns all the types found following this project's include path with the given fully qualified name.
`IType[]` `findTypes(java.lang.String fullyQualifiedName, WorkingCopyOwner owner)` Returns all the types found following this project's include path with the given fully qualified name.
`IPackageFragmentRoot[]` `getAllPackageFragmentRoots()` Returns all of the existing package fragment roots that exist on the includepath, in the order they are defined by the includepath.
`IFile` `getJSDTScopeFile()`
`IFile` `getJSDTScopeFile(boolean forceCreate)`
`java.lang.Object[]` `getNonJavaScriptResources()` Returns an array of non-JavaScript resources directly contained in this project.
`java.lang.String` `getOption(java.lang.String optionName, boolean inheritJavaCoreOptions)` Helper method for returning one option value only.
`java.util.Map` `getOptions(boolean inheritJavaCoreOptions)` Returns the table of the current custom options for this project.
`IPackageFragmentRoot` `getPackageFragmentRoot(IResource resource)` Returns a package fragment root for the given resource, which must either be a folder representing the top of a package hierarchy, or a javaScript file.
`IPackageFragmentRoot` `getPackageFragmentRoot(java.lang.String filePath)` Returns a package fragment root for the file at the specified file system path.
`IPackageFragmentRoot[]` `getPackageFragmentRoots()` Returns all of the package fragment roots contained in this project, identified on this project's resolved includepath.
`IPackageFragment[]` `getPackageFragments()` Returns all package fragments in all package fragment roots contained in this project.
`IProject` `getProject()` Returns the `IProject` on which this `IJavaScriptProject` was created.
`IIncludePathEntry[]` `getRawIncludepath()` Returns the raw includepath for the project, as a list of includepath entries.
`java.lang.String[]` `getRequiredProjectNames()` Returns the names of the projects that are directly required by this project.
`IIncludePathEntry[]` `getResolvedIncludepath(boolean ignoreUnresolvedEntry)` This is a helper method returning the resolved includepath for the project as a list of simple (non-variable, non-container) includepath entries.
`boolean` `hasBuildState()` Returns whether this project has been built at least once and thus whether it has a build state.
`boolean` `hasIncludepathCycle(IIncludePathEntry[] entries)` Returns whether setting this project's includepath to the given includepath entries would result in a cycle.
`boolean` `isOnIncludepath(IJavaScriptElement element)` Returns whether the given element is on the includepath of this project, that is, referenced from a includepath entry and not explicitly excluded using an exclusion pattern.
`boolean` `isOnIncludepath(IResource resource)` Returns whether the given resource is on the includepath of this project, that is, referenced from a includepath entry and not explicitly excluded using an exclusion pattern.
`IEvaluationContext` `newEvaluationContext()` Creates a new evaluation context.
`ITypeHierarchy` `newTypeHierarchy(IRegion region, IProgressMonitor monitor)` Creates and returns a type hierarchy for all types in the given region, considering subtypes within that region.
`ITypeHierarchy` `newTypeHierarchy(IRegion region, WorkingCopyOwner owner, IProgressMonitor monitor)` Creates and returns a type hierarchy for all types in the given region, considering subtypes within that region and considering types in the working copies with the given owner.
`ITypeHierarchy` `newTypeHierarchy(IType type, IRegion region, IProgressMonitor monitor)` Creates and returns a type hierarchy for the given type considering subtypes in the specified region.
`ITypeHierarchy` `newTypeHierarchy(IType type, IRegion region, WorkingCopyOwner owner, IProgressMonitor monitor)` Creates and returns a type hierarchy for the given type considering subtypes in the specified region and considering types in the working copies with the given owner.
`IIncludePathEntry[]` `readRawIncludepath()` Returns the raw includepath for the project as defined by its `.jsdtScope` file from disk, or `null` if unable to read the file.
`void` `setOption(java.lang.String optionName, java.lang.String optionValue)` Helper method for setting one option value only.
`void` `setOptions(java.util.Map newOptions)` Sets the project custom options.
`void` `setRawIncludepath(IIncludePathEntry[] entries, boolean canModifyResources, IProgressMonitor monitor)` Sets the includepath of this project using a list of includepath entries.
`void` `setRawIncludepath(IIncludePathEntry[] entries, IProgressMonitor monitor)` Sets the includepath of this project using a list of includepath entries.

### Methods inherited from interface org.eclipse.wst.jsdt.core.IParent

`getChildren, hasChildren`

### Methods inherited from interface org.eclipse.wst.jsdt.core.IJavaScriptElement

`exists, getAncestor, getAttachedJavadoc, getCommonSuperType, getCorrespondingResource, getDisplayName, getElementName, getElementType, getHandleIdentifier, getHostPath, getJavaScriptModel, getJavaScriptProject, getOpenable, getParent, getPath, getPrimaryElement, getResource, getSchedulingRule, getUnderlyingResource, isReadOnly, isStructureKnown, isVirtual`

### Methods inherited from interface org.eclipse.wst.jsdt.core.ILookupScope

`newNameLookup, newNameLookup, newSearchableNameEnvironment, newSearchableNameEnvironment`

### Methods inherited from interface org.eclipse.wst.jsdt.core.IOpenable

`close, findRecommendedLineSeparator, getBuffer, hasUnsavedChanges, isConsistent, isOpen, makeConsistent, open, save`

### Method Detail

#### getJSDTScopeFile

    IFile getJSDTScopeFile()

#### getJSDTScopeFile

    IFile getJSDTScopeFile(boolean forceCreate)

#### decodeIncludepathEntry

    IIncludePathEntry decodeIncludepathEntry(java.lang.String encodedEntry)

Decodes the includepath entry that has been encoded in the given string in the context of this project. Returns null if the encoded entry is malformed.

Parameters:
  `encodedEntry` - the encoded includepath entry
Returns:
  the decoded includepath entry, or `null` if unable to decode it

#### encodeIncludepathEntry

    java.lang.String encodeIncludepathEntry(IIncludePathEntry includepathEntry)

Encodes the given includepath entry into a string in the context of this project.

Parameters:
  `includepathEntry` - the includepath entry to encode
Returns:
  the encoded includepath entry

#### findElement

    IJavaScriptElement findElement(IPath path)
                            throws JavaScriptModelException

Returns the `IJavaScriptElement` corresponding to the given includepath-relative path, or `null` if no such `IJavaScriptElement` is found. The result is one of an `IJavaScriptUnit`, `IClassFile`, or `IPackageFragment`.

When looking for a package fragment, there might be several potential matches; only one of them is returned.

For example, the path "java/lang/Object.js", would result in the `IJavaScriptUnit` or `IClassFile` corresponding to "java.lang.Object". The path "java/lang" would result in the `IPackageFragment` for "java.lang".

Parameters:
  `path` - the given includepath-relative path
Returns:
  the `IJavaScriptElement` corresponding to the given includepath-relative path, or `null` if no such `IJavaScriptElement` is found
Throws:
  `JavaScriptModelException` - if the given path is `null` or absolute

#### findElement

    IJavaScriptElement findElement(IPath path,
                                   WorkingCopyOwner owner)
                            throws JavaScriptModelException

Returns the `IJavaScriptElement` corresponding to the given includepath-relative path, or `null` if no such `IJavaScriptElement` is found. The result is one of an `IJavaScriptUnit`, `IClassFile`, or `IPackageFragment`. If it is an `IJavaScriptUnit`, its owner is the given owner.

When looking for a package fragment, there might be several potential matches; only one of them is returned.

For example, the path "java/lang/Object.js", would result in the `IJavaScriptUnit` or `IClassFile` corresponding to "java.lang.Object". The path "java/lang" would result in the `IPackageFragment` for "java.lang".

Parameters:
  `path` - the given includepath-relative path
  `owner` - the owner of the returned javaScript unit, ignored if it is not a javaScript unit.
Returns:
  the `IJavaScriptElement` corresponding to the given includepath-relative path, or `null` if no such `IJavaScriptElement` is found
Throws:
  `JavaScriptModelException` - if the given path is `null` or absolute

#### findPackageFragment

    IPackageFragment findPackageFragment(IPath path)
                                  throws JavaScriptModelException

Returns the first existing package fragment on this project's includepath whose path matches the given (absolute) path, or `null` if none exist. The path can be: - internal to the workbench: "/Project/src" - external to the workbench: "c:/jdk/classes.zip/java/lang"

Parameters:
  `path` - the given absolute path
Returns:
  the first existing package fragment on this project's includepath whose path matches the given (absolute) path, or `null` if none exist
Throws:
  `JavaScriptModelException` - if this project does not exist or if an exception occurs while accessing its corresponding resource

#### findPackageFragmentRoot

    IPackageFragmentRoot findPackageFragmentRoot(IPath path)
                                          throws JavaScriptModelException

Returns the existing package fragment root on this project's includepath whose path matches the given (absolute) path, or `null` if one does not exist. The path can be: - internal to the workbench: "/Compiler/src" - external to the workbench: "c:/jdk/classes.zip"

Parameters:
  `path` - the given absolute path
Returns:
  the existing package fragment root on this project's includepath whose path matches the given (absolute) path, or `null` if one does not exist
Throws:
  `JavaScriptModelException` - if this project does not exist or if an exception occurs while accessing its corresponding resource

#### findPackageFragmentRoots

    IPackageFragmentRoot[] findPackageFragmentRoots(IIncludePathEntry entry)

Returns the existing package fragment roots identified by the given entry. Note that a includepath entry that refers to another project may have more than one root (if that project has more than on root containing source), and includepath entries within the current project identify a single root.

If the includepath entry denotes a variable, it will be resolved and return the roots of the target entry (empty if not resolvable).

If the includepath entry denotes a container, it will be resolved and return the roots corresponding to the set of container entries (empty if not resolvable).

Parameters:
  `entry` - the given entry
Returns:
  the existing package fragment roots identified by the given entry
See Also:
  `IJsGlobalScopeContainer`

#### findType

    IType findType(java.lang.String fullyQualifiedName)
            throws JavaScriptModelException

Returns the first type found following this project's includepath with the given fully qualified name or `null` if none is found. The fully qualified name is a dot-separated name. For example, a class B defined as a member type of a class A in package x.y should have a the fully qualified name "x.y.A.B". Note that in order to be found, a type name (or its toplevel enclosing type name) must match its corresponding javaScript unit name. As a consequence, secondary types cannot be found using this functionality. To find secondary types use `findType(String, IProgressMonitor)` instead.

Parameters:
  `fullyQualifiedName` - the given fully qualified name
Returns:
  the first type found following this project's includepath with the given fully qualified name or `null` if none is found
Throws:
  `JavaScriptModelException` - if this project does not exist or if an exception occurs while accessing its corresponding resource
See Also:
  `IType.getFullyQualifiedName(char)`

#### findTypes

    IType[] findTypes(java.lang.String fullyQualifiedName)
               throws JavaScriptModelException

Returns all the types found following this project's include path with the given fully qualified name. The fully qualified name is a dot-separated name.

Parameters:
  `fullyQualifiedName` - the given fully qualified name
Returns:
  the types found following this project's include path with the given fully qualified name
Throws:
  `JavaScriptModelException` - if this project does not exist or if an exception occurs while accessing its corresponding resource
See Also:
  `IType.getFullyQualifiedName(char)`

#### findType

    IType findType(java.lang.String fullyQualifiedName,
                   IProgressMonitor progressMonitor)
            throws JavaScriptModelException

Same functionality as `findType(String)` but also look for secondary types if given name does not match a javaScript unit name.

Parameters:
  `fullyQualifiedName` - the given fully qualified name
  `progressMonitor` - the progress monitor to report progress to, or `null` if no progress monitor is provided
Returns:
  the first type found following this project's includepath with the given fully qualified name or `null` if none is found
Throws:
  `JavaScriptModelException` - if this project does not exist or if an exception occurs while accessing its corresponding resource
See Also:
  `IType.getFullyQualifiedName(char)`

#### findTypes

    IType[] findTypes(java.lang.String fullyQualifiedName,
                      WorkingCopyOwner owner)
               throws JavaScriptModelException

Returns all the types found following this project's include path with the given fully qualified name. The fully qualified name is a dot-separated name.

Parameters:
  `fullyQualifiedName` - the given fully qualified name
  `owner` - the owner of the returned type's javaScript unit
Returns:
  the types found following this project's include path with the given fully qualified name
Throws:
  `JavaScriptModelException` - if this project does not exist or if an exception occurs while accessing its corresponding resource
See Also:
  `IType.getFullyQualifiedName(char)`

#### findType

    IType findType(java.lang.String fullyQualifiedName,
                   WorkingCopyOwner owner,
                   IProgressMonitor progressMonitor)
            throws JavaScriptModelException

Same functionality as `#findType(String, WorkingCopyOwner)` but also look for secondary types if given name does not match a javaScript unit name.

Parameters:
  `fullyQualifiedName` - the given fully qualified name
  `owner` - the owner of the returned type's javaScript unit
  `progressMonitor` - the progress monitor to report progress to, or `null` if no progress monitor is provided
Returns:
  the first type found following this project's includepath with the given fully qualified name or `null` if none is found
Throws:
  `JavaScriptModelException` - if this project does not exist or if an exception occurs while accessing its corresponding resource
See Also:
  `IType.getFullyQualifiedName(char)`

#### findType

    IType findType(java.lang.String packageName,
                   java.lang.String typeQualifiedName,
                   IProgressMonitor progressMonitor)
            throws JavaScriptModelException

Same functionality as `#findType(String, String)` but also look for secondary types if given name does not match a javaScript unit name.

Parameters:
  `packageName` - the given package name
  `typeQualifiedName` - the given type qualified name
  `progressMonitor` - the progress monitor to report progress to, or `null` if no progress monitor is provided
Returns:
  the first type found following this project's includepath with the given fully qualified name or `null` if none is found
Throws:
  `JavaScriptModelException` - if this project does not exist or if an exception occurs while accessing its corresponding resource
See Also:
  `IType.getFullyQualifiedName(char)`

#### findType

    IType findType(java.lang.String packageName,
                   java.lang.String typeQualifiedName,
                   WorkingCopyOwner owner,
                   IProgressMonitor progressMonitor)
            throws JavaScriptModelException

Same functionality as `#findType(String, String, WorkingCopyOwner)` but also look for secondary types if given name does not match a javaScript unit name.

Parameters:
  `packageName` - the given package name
  `typeQualifiedName` - the given type qualified name
  `owner` - the owner of the returned type's javaScript unit
  `progressMonitor` - the progress monitor to report progress to, or `null` if no progress monitor is provided
Returns:
  the first type found following this project's includepath with the given fully qualified name or `null` if none is found
Throws:
  `JavaScriptModelException` - if this project does not exist or if an exception occurs while accessing its corresponding resource
See Also:
  `IType.getFullyQualifiedName(char)`

#### getAllPackageFragmentRoots

    IPackageFragmentRoot[] getAllPackageFragmentRoots()
                                               throws JavaScriptModelException

Returns all of the existing package fragment roots that exist on the includepath, in the order they are defined by the includepath.

Returns:
  all of the existing package fragment roots that exist on the includepath
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource

#### getNonJavaScriptResources

    java.lang.Object[] getNonJavaScriptResources()
                                          throws JavaScriptModelException

Returns an array of non-JavaScript resources directly contained in this project. It does not transitively answer non-JavaScript resources contained in folders; these would have to be explicitly iterated over.

Non-JavaScript resources includes other files and folders located in the project not accounted for by any of it source or binary package fragment roots. If the project is a source folder itself, resources excluded from the corresponding source includepath entry by one or more exclusion patterns are considered non-JavaScript resources and will appear in the result (possibly in a folder)

Returns:
  an array of non-JavaScript resources (`IFile`s and/or `IFolder`s) directly contained in this project
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource

#### getOption

    java.lang.String getOption(java.lang.String optionName,
                               boolean inheritJavaCoreOptions)

Helper method for returning one option value only. Equivalent to `(String)this.getOptions(inheritJavaCoreOptions).get(optionName)` Note that it may answer `null` if this option does not exist, or if there is no custom value for it.

For a complete description of the configurable options, see `JavaScriptCore#getDefaultOptions`.

Parameters:
  `optionName` - the name of an option
  `inheritJavaCoreOptions` - - boolean indicating whether JavaScriptCore options should be inherited as well
Returns:
  the String value of a given option
See Also:
  `JavaScriptCore.getDefaultOptions()`

#### getOptions

    java.util.Map getOptions(boolean inheritJavaCoreOptions)

Returns the table of the current custom options for this project. Projects remember their custom options, in other words, only the options different from the the JavaScriptCore global options for the workspace. A boolean argument allows to directly merge the project options with global ones from `JavaScriptCore`.

For a complete description of the configurable options, see `JavaScriptCore#getDefaultOptions`.

Parameters:
  `inheritJavaCoreOptions` - - boolean indicating whether JavaScriptCore options should be inherited as well
Returns:
  table of current settings of all options (key type: `String`; value type: `String`)
See Also:
  `JavaScriptCore.getDefaultOptions()`

#### getPackageFragmentRoot

    IPackageFragmentRoot getPackageFragmentRoot(java.lang.String filePath)

Returns a package fragment root for the file at the specified file system path. This is a handle-only method. The underlying `java.io.File` may or may not exist. No resource is associated with this local file package fragment root.

Parameters:
  `filePath` - the file system path
Returns:
  a package fragment root for the file at the specified file system path

#### getPackageFragmentRoot

    IPackageFragmentRoot getPackageFragmentRoot(IResource resource)

Returns a package fragment root for the given resource, which must either be a folder representing the top of a package hierarchy, or a javaScript file. This is a handle-only method. The underlying resource may or may not exist.

Parameters:
  `resource` - the given resource
Returns:
  a package fragment root for the given resource, which must either be a folder representing the top of a package hierarchy, or a javaScript file

#### getPackageFragmentRoots

    IPackageFragmentRoot[] getPackageFragmentRoots()
                                            throws JavaScriptModelException

Returns all of the package fragment roots contained in this project, identified on this project's resolved includepath. The result does not include package fragment roots in other projects referenced on this project's includepath.

NOTE: This is equivalent to `getChildren()`.

Returns:
  all of the package fragment roots contained in this project, identified on this project's resolved includepath
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource

#### getPackageFragments

    IPackageFragment[] getPackageFragments()
                                    throws JavaScriptModelException

Returns all package fragments in all package fragment roots contained in this project. This is a convenience method. Note that the package fragment roots corresponds to the resolved includepath of the project.

Returns:
  all package fragments in all package fragment roots contained in this project
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource

#### getProject

    IProject getProject()

Returns the `IProject` on which this `IJavaScriptProject` was created. This is handle-only method.

Returns:
  the `IProject` on which this `IJavaScriptProject` was created

#### getRawIncludepath

    IIncludePathEntry[] getRawIncludepath()
                                   throws JavaScriptModelException

Returns the raw includepath for the project, as a list of includepath entries. This corresponds to the exact set of entries which were assigned using `setRawIncludepath`, in particular such a includepath may contain includepath variable and includepath container entries. Includepath variable and includepath container entries can be resolved using the helper method `getResolvedIncludepath`; includepath variable entries also can be resolved individually using `JavaScriptCore#getIncludepathVariable`).

Both includepath containers and includepath variables provides a level of indirection that can make the `.jsdtScope` file stable across workspaces.

Note that in case the project isn't yet opened, the includepath will be read directly from the associated `.jsdtScope` file.

Returns:
  the raw includepath for the project, as a list of includepath entries
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource
See Also:
  `IIncludePathEntry`

#### getRequiredProjectNames

    java.lang.String[] getRequiredProjectNames()
                                        throws JavaScriptModelException

Returns the names of the projects that are directly required by this project. A project is required if it is in its includepath.

The project names are returned in the order they appear on the includepath.

Returns:
  the names of the projects that are directly required by this project in includepath order
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource

#### getResolvedIncludepath

    IIncludePathEntry[] getResolvedIncludepath(boolean ignoreUnresolvedEntry)
                                        throws JavaScriptModelException

This is a helper method returning the resolved includepath for the project as a list of simple (non-variable, non-container) includepath entries. All includepath variable and includepath container entries in the project's raw includepath will be replaced by the simple includepath entries they resolve to.

The resulting resolved includepath is accurate for the given point in time. If the project's raw includepath is later modified, or if includepath variables are changed, the resolved includepath can become out of date. Because of this, hanging on resolved includepath is not recommended.

Parameters:
  `ignoreUnresolvedEntry` - indicates how to handle unresolvable variables and containers; `true` indicates that missing variables and unresolvable includepath containers should be silently ignored, and that the resulting list should consist only of the entries that could be successfully resolved; `false` indicates that a `JavaScriptModelException` should be thrown for the first unresolved variable or container
Returns:
  the resolved includepath for the project as a list of simple includepath entries, where all includepath variable and container entries have been resolved and substituted with their final target entries
Throws:
  `JavaScriptModelException` - in one of the corresponding situation:
  - this element does not exist
  - an exception occurs while accessing its corresponding resource
  - a includepath variable or includepath container was not resolvable and `ignoreUnresolvedEntry` is `false`.
See Also:
  `IIncludePathEntry`

#### hasBuildState

    boolean hasBuildState()

Returns whether this project has been built at least once and thus whether it has a build state.

Returns:
  true if this project has been built at least once, false otherwise

#### hasIncludepathCycle

    boolean hasIncludepathCycle(IIncludePathEntry[] entries)

Returns whether setting this project's includepath to the given includepath entries would result in a cycle. If the set of entries contains some variables, those are resolved in order to determine cycles.

Parameters:
  `entries` - the given includepath entries
Returns:
  true if the given includepath entries would result in a cycle, false otherwise

#### isOnIncludepath

    boolean isOnIncludepath(IJavaScriptElement element)

Returns whether the given element is on the includepath of this project, that is, referenced from a includepath entry and not explicitly excluded using an exclusion pattern.

Parameters:
  `element` - the given element
Returns:
  `true` if the given element is on the includepath of this project, `false` otherwise
See Also:
  `IIncludePathEntry.getInclusionPatterns()`, `IIncludePathEntry.getExclusionPatterns()`

#### isOnIncludepath

    boolean isOnIncludepath(IResource resource)

Returns whether the given resource is on the includepath of this project, that is, referenced from a includepath entry and not explicitly excluded using an exclusion pattern.

Parameters:
  `resource` - the given resource
Returns:
  `true` if the given resource is on the includepath of this project, `false` otherwise
See Also:
  `IIncludePathEntry.getInclusionPatterns()`, `IIncludePathEntry.getExclusionPatterns()`

#### newEvaluationContext

    IEvaluationContext newEvaluationContext()

Creates a new evaluation context.

Returns:
  a new evaluation context.

#### newTypeHierarchy

    ITypeHierarchy newTypeHierarchy(IRegion region,
                                    IProgressMonitor monitor)
                             throws JavaScriptModelException

Creates and returns a type hierarchy for all types in the given region, considering subtypes within that region.

Parameters:
  `monitor` - the given progress monitor
  `region` - the given region
Returns:
  a type hierarchy for all types in the given region, considering subtypes within that region
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource
  `java.lang.IllegalArgumentException` - if region is `null`

#### newTypeHierarchy

    ITypeHierarchy newTypeHierarchy(IRegion region,
                                    WorkingCopyOwner owner,
                                    IProgressMonitor monitor)
                             throws JavaScriptModelException

Creates and returns a type hierarchy for all types in the given region, considering subtypes within that region and considering types in the working copies with the given owner. In other words, the owner's working copies will take precedence over their original javaScript units in the workspace.

Note that if a working copy is empty, it will be as if the original javaScript unit had been deleted.

Parameters:
  `monitor` - the given progress monitor
  `region` - the given region
  `owner` - the owner of working copies that take precedence over their original javaScript units
Returns:
  a type hierarchy for all types in the given region, considering subtypes within that region
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource
  `java.lang.IllegalArgumentException` - if region is `null`

#### newTypeHierarchy

    ITypeHierarchy newTypeHierarchy(IType type,
                                    IRegion region,
                                    IProgressMonitor monitor)
                             throws JavaScriptModelException

Creates and returns a type hierarchy for the given type considering subtypes in the specified region.

Parameters:
  `type` - the given type
  `region` - the given region
  `monitor` - the given monitor
Returns:
  a type hierarchy for the given type considering subtypes in the specified region
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource
  `java.lang.IllegalArgumentException` - if type or region is `null`

#### newTypeHierarchy

    ITypeHierarchy newTypeHierarchy(IType type,
                                    IRegion region,
                                    WorkingCopyOwner owner,
                                    IProgressMonitor monitor)
                             throws JavaScriptModelException

Creates and returns a type hierarchy for the given type considering subtypes in the specified region and considering types in the working copies with the given owner. In other words, the owner's working copies will take precedence over their original javaScript units in the workspace.

Note that if a working copy is empty, it will be as if the original javaScript unit had been deleted.

Parameters:
  `type` - the given type
  `region` - the given region
  `monitor` - the given monitor
  `owner` - the owner of working copies that take precedence over their original javaScript units
Returns:
  a type hierarchy for the given type considering subtypes in the specified region
Throws:
  `JavaScriptModelException` - if this element does not exist or if an exception occurs while accessing its corresponding resource
  `java.lang.IllegalArgumentException` - if type or region is `null`

#### readRawIncludepath

    IIncludePathEntry[] readRawIncludepath()

Returns the raw includepath for the project as defined by its `.jsdtScope` file from disk, or `null` if unable to read the file.

This includepath may differ from the in-memory includepath returned by `getRawIncludepath`, in case the automatic reconciliation mechanism has not been performed yet. Usually, any change to the `.jsdtScope` file is automatically noticed and reconciled at the next resource change notification event. However, if the file is modified within an operation, where this change needs to be taken into account before the operation ends, then the includepath from disk can be read using this method, and further assigned to the project using `setRawIncludepath(...)`.

Includepath variable and includepath container entries can be resolved using the helper method `getResolvedIncludepath`; includepath variable entries also can be resolved individually using `JavaScriptCore#getIncludepathVariable`).

Note that no check is performed whether the project has the JavaScript nature set, allowing an existing `.jsdtScope` file to be considered independantly (unlike `getRawIncludepath` which requires the JavaScript nature to be associated with the project).

In order to manually force a project includepath refresh, one can simply assign the project includepath using the result of this method, as follows: `proj.setRawIncludepath(proj.readRawIncludepath(), monitor)` (note that the `readRawIncludepath` method could return `null`).

Returns:
  the raw includepath from disk for the project, as a list of includepath entries
See Also:
  `getRawIncludepath()`, `IIncludePathEntry`

#### setOption

    void setOption(java.lang.String optionName,
                   java.lang.String optionValue)

Helper method for setting one option value only. Equivalent to `Map options = this.getOptions(false); map.put(optionName, optionValue); this.setOptions(map)`

For a complete description of the configurable options, see `JavaScriptCore#getDefaultOptions`.

Parameters:
  `optionName` - the name of an option
  `optionValue` - the value of the option to set
See Also:
  `JavaScriptCore.getDefaultOptions()`

#### setOptions

    void setOptions(java.util.Map newOptions)

Sets the project custom options. All and only the options explicitly included in the given table are remembered; all previous option settings are forgotten, including ones not explicitly mentioned.

For a complete description of the configurable options, see `JavaScriptCore#getDefaultOptions`.

Parameters:
  `newOptions` - the new options (key type: `String`; value type: `String`), or `null` to flush all custom options (clients will automatically get the global JavaScriptCore options).
See Also:
  `JavaScriptCore.getDefaultOptions()`

#### setRawIncludepath

    void setRawIncludepath(IIncludePathEntry[] entries,
                           boolean canModifyResources,
                           IProgressMonitor monitor)
                    throws JavaScriptModelException

Sets the includepath of this project using a list of includepath entries. In particular such a includepath may contain includepath variable entries. Includepath variable entries can be resolved individually (`JavaScriptCore.getIncludepathVariable(String)`), or the full includepath can be resolved at once using the helper method `getResolvedIncludepath(boolean)`.

If it is specified that this operation cannot modify resources, the .jsdtScope file will not be written to disk and no error marker will be generated. To synchronize the .jsdtScope with the in-memory includepath, one can use `setRawIncludepath(readRawIncludepath(), true, monitor)`.

Setting the includepath to `null` specifies a default includepath (the project root). Setting the includepath to an empty array specifies an empty includepath.

If a cycle is detected while setting this includepath (and if resources can be modified), an error marker will be added to the project closing the cycle. To avoid this problem, use `hasIncludepathCycle(IIncludePathEntry[])` before setting the includepath.

This operation acquires a lock on the workspace's root.

Parameters:
  `entries` - a list of includepath entries
  `canModifyResources` - whether resources should be written to disk if needed
  `monitor` - the given progress monitor
Throws:
  `JavaScriptModelException` - if the includepath could not be set. Reasons include:
  - This JavaScript element does not exist (ELEMENT_DOES_NOT_EXIST)
  - The includepath is being modified during resource change event notification (CORE_EXCEPTION)
  - The includepath failed the validation check as defined by `JavaScriptConventions#validateIncludepath(IJavaScriptProject, IIncludePathEntry[], IPath)`
See Also:
  `IIncludePathEntry`

#### setRawIncludepath

    void setRawIncludepath(IIncludePathEntry[] entries,
                           IProgressMonitor monitor)
                    throws JavaScriptModelException

Sets the includepath of this project using a list of includepath entries. In particular such a includepath may contain includepath variable entries. Includepath variable entries can be resolved individually (`JavaScriptCore.getIncludepathVariable(String)`), or the full includepath can be resolved at once using the helper method `getResolvedIncludepath(boolean)`.

Setting the includepath to `null` specifies a default includepath (the project root). Setting the includepath to an empty array specifies an empty includepath.

If a cycle is detected while setting this includepath, an error marker will be added to the project closing the cycle. To avoid this problem, use `hasIncludepathCycle(IIncludePathEntry[])` before setting the includepath.

This operation acquires a lock on the workspace's root.

Parameters:
  `entries` - a list of includepath entries
  `monitor` - the given progress monitor
Throws:
  `JavaScriptModelException` - if the includepath could not be set. Reasons include:
  - This JavaScript element does not exist (ELEMENT_DOES_NOT_EXIST)
  - The includepath is being modified during resource change event notification (CORE_EXCEPTION)
  - The includepath failed the validation check as defined by `JavaScriptConventions#validateIncludepath(IJavaScriptProject, IIncludePathEntry[], IPath)`
See Also:
  `IIncludePathEntry`

#### findTypeRoot

    ITypeRoot findTypeRoot(java.lang.String fullyQualifiedName)
                    throws JavaScriptModelException

Throws:
  `JavaScriptModelException`